-- gitsigns.nvim --- Displays git changes in the sidebar, configurably and efficiently. --- See `:help gitsigns` return { 'lewis6991/gitsigns.nvim', commit = '9b36d497495436c135659902054ee637e0ba6021', event = 'VeryLazy', lazy = false, -- See: https://github.com/lewis6991/gitsigns.nvim/issues/796 opts = { numhl = true, on_attach = function(buf) -- Hunk Navigation vim.keymap.set('n', ']g', function() if vim.wo.diff then vim.cmd.normal({ ']c', bang = true }) else require('gitsigns').nav_hunk('next') end end, { buffer = buf, desc = 'Next [G]it Change' }) vim.keymap.set('n', '[g', function() if vim.wo.diff then vim.cmd.normal({ '[c', bang = true }) else require('gitsigns').nav_hunk('prev') end end, { buffer = buf, desc = 'Prev [G]it Change' }) -- Hunk Preview vim.keymap.set('n', 'gp', function() require('gitsigns').preview_hunk() end, { buffer = buf, desc = '[G]it [P]review Hunk' }) -- Buffer Staging / Unstaging vim.keymap.set('n', 'gs', function() require('gitsigns').stage_buffer() end, { buffer = buf, desc = '[G]it [S]tage Buffer' }) vim.keymap.set('n', 'gS', function() require('gitsigns').reset_buffer_index() end, { buffer = buf, desc = '[G]it Unstage Buffer' }) -- Hunk Staging vim.keymap.set('n', 'gh', function() require('gitsigns').stage_hunk() end, { buffer = buf, desc = '[G]it Hunk [S]tage Toggle' }) -- Restoration vim.keymap.set('n', 'gr', function() require('gitsigns').reset_hunk() end, { buffer = buf, desc = '[G]it [R]estore Hunk' }) vim.keymap.set('n', 'gR', function() local choice = vim.fn.confirm('Delete all unstaged changes in this buffer?', '&Yes\n&No', 2) if choice == 1 then require('gitsigns').reset_buffer() end end, { buffer = buf, desc = '[G]it [R]estore Buffer' }) vim.keymap.set('n', 'ga', function() require('gitsigns').toggle_linehl() require('gitsigns').toggle_word_diff() end, { buffer = buf, desc = '[G]it [A]nalysis Toggle' }) -- TODO: Shortcut for opening lazygit in a new :term. --- Perhaps even in a new tab? end, }, }