return { 'gitsigns.nvim', event = { 'BufReadPost', 'BufWritePost', 'BufNewFile' }, before = function() require('lz.n').trigger_load('which-key.nvim') end, after = function() require('gitsigns').setup({ signs = { add = { text = '▎' }, change = { text = '▎' }, delete = { text = '' }, topdelete = { text = '' }, changedelete = { text = '▎' }, untracked = { text = '▎' }, }, signs_staged = { add = { text = '▎' }, change = { text = '▎' }, delete = { text = '' }, topdelete = { text = '' }, changedelete = { text = '▎' }, }, on_attach = function(buf) local gitsigns = package.loaded.gitsigns local icons = require('icons') local mkKey = MarleyVim.wkSpec(require('colors').git) require('which-key').add({ { buffer = buf, mkKey(']h', function() if vim.wo.diff then vim.cmd.normal({ ']c', bang = true }) else gitsigns.nav_hunk('next') end end, icons.next, { desc = 'next hunk' }), mkKey('[h', function() if vim.wo.diff then vim.cmd.normal({ '[c', bang = true }) else gitsigns.nav_hunk('prev') end end, icons.prev, { desc = 'previous hunk' }), mkKey(']H', function() gitsigns.nav_hunk('last') end, icons.last, { desc = 'last hunk' }), mkKey('[H', function() gitsigns.nav_hunk('first') end, icons.first, { desc = 'first hunk' }), mkKey( 'ghs', 'Gitsigns stage_hunk', icons.git.staged, { mode = { 'n', 'v' }, desc = 'stage hunk' } ), mkKey( 'ghr', 'Gitsigns reset_hunk', icons.git.unstaged, { mode = { 'n', 'v' }, desc = 'reset hunk' } ), mkKey( 'ghS', gitsigns.stage_buffer, icons.git.staged, { desc = 'stage buffer' } ), mkKey( 'ghu', gitsigns.undo_stage_hunk, icons.undo, { desc = 'undo stage hunk' } ), mkKey( 'ghR', gitsigns.reset_buffer, icons.git.unstaged, { desc = 'reset buffer' } ), mkKey( 'ghp', gitsigns.preview_hunk_inline, '', { desc = 'preview hunk inline' } ), mkKey('ghb', function() gitsigns.blame_line({ full = true }) end, { cat = 'filetype', name = 'git' }, { desc = 'blame line', }), mkKey( 'ghB', gitsigns.blame, { cat = 'filetype', name = 'git' }, { desc = 'blame buffer' } ), mkKey( 'ghd', gitsigns.diffthis, icons.git.diff, { desc = 'diff file' } ), mkKey('ghD', function() gitsigns.diffthis('~') end, icons.git.diff, { desc = 'diff file from ~' }), mkKey( 'ih', 'Gitsigns select_hunk', '󰿚', { mode = { 'o', 'x' }, desc = 'select hunk' } ), }, }) end, }) end, }