diff --git a/config/nvim/lua/custom/plugins/init.lua b/config/nvim/lua/custom/plugins/init.lua index 3a59ff6..f209539 100644 --- a/config/nvim/lua/custom/plugins/init.lua +++ b/config/nvim/lua/custom/plugins/init.lua @@ -6,6 +6,71 @@ return { -- Git related plugins 'tpope/vim-fugitive', 'tpope/vim-rhubarb', + { + 'lewis6991/gitsigns.nvim', + opts = { + on_attach = function(bufnr) + local gs = package.loaded.gitsigns + + local function map(mode, l, r, opts) + opts = opts or {} + opts.buffer = bufnr + vim.keymap.set(mode, l, r, opts) + end + + -- Navigation + map({ 'n', 'v' }, ']c', function() + if vim.wo.diff then + return ']c' + end + vim.schedule(function() + gs.next_hunk() + end) + return '' + end, { expr = true, desc = 'Jump to next hunk' }) + + map({ 'n', 'v' }, '[c', function() + if vim.wo.diff then + return '[c' + end + vim.schedule(function() + gs.prev_hunk() + end) + return '' + end, { expr = true, desc = 'Jump to previous hunk' }) + + -- Actions + -- visual mode + map('v', 'hs', function() + gs.stage_hunk { vim.fn.line '.', vim.fn.line 'v' } + end, { desc = 'stage git hunk' }) + map('v', 'hr', function() + gs.reset_hunk { vim.fn.line '.', vim.fn.line 'v' } + end, { desc = 'reset git hunk' }) + -- normal mode + map('n', 'hs', gs.stage_hunk, { desc = 'git stage hunk' }) + map('n', 'hr', gs.reset_hunk, { desc = 'git reset hunk' }) + map('n', 'hS', gs.stage_buffer, { desc = 'git Stage buffer' }) + map('n', 'hu', gs.undo_stage_hunk, { desc = 'undo stage hunk' }) + map('n', 'hR', gs.reset_buffer, { desc = 'git Reset buffer' }) + map('n', 'hp', gs.preview_hunk, { desc = 'preview git hunk' }) + map('n', 'hb', function() + gs.blame_line { full = false } + end, { desc = 'git blame line' }) + map('n', 'hd', gs.diffthis, { desc = 'git diff against index' }) + map('n', 'hD', function() + gs.diffthis '~' + end, { desc = 'git diff against last commit' }) + + -- Toggles + map('n', 'tb', gs.toggle_current_line_blame, { desc = 'toggle git blame line' }) + map('n', 'td', gs.toggle_deleted, { desc = 'toggle git show deleted' }) + + -- Text object + map({ 'o', 'x' }, 'ih', ':Gitsigns select_hunk', { desc = 'select git hunk' }) + end, + }, + }, { 'joaodubas/gitlinker.nvim', config = function() diff --git a/patch/kickstart.nvim/updates.patch b/patch/kickstart.nvim/updates.patch index 30ef0ce..59e9e07 100644 --- a/patch/kickstart.nvim/updates.patch +++ b/patch/kickstart.nvim/updates.patch @@ -1,5 +1,5 @@ diff --git a/init.lua b/init.lua -index 506bbaf..d546b62 100644 +index 506bbaf..33db6a3 100644 --- a/init.lua +++ b/init.lua @@ -91,7 +91,7 @@ vim.g.mapleader = ' ' @@ -40,74 +40,7 @@ index 506bbaf..d546b62 100644 -- [[ Basic Keymaps ]] -- See `:help vim.keymap.set()` -@@ -255,6 +263,66 @@ require('lazy').setup({ - topdelete = { text = '‾' }, - changedelete = { text = '~' }, - }, -+ on_attach = function(bufnr) -+ local gs = package.loaded.gitsigns -+ -+ local function map(mode, l, r, opts) -+ opts = opts or {} -+ opts.buffer = bufnr -+ vim.keymap.set(mode, l, r, opts) -+ end -+ -+ -- Navigation -+ map({ 'n', 'v' }, ']c', function() -+ if vim.wo.diff then -+ return ']c' -+ end -+ vim.schedule(function() -+ gs.next_hunk() -+ end) -+ return '' -+ end, { expr = true, desc = 'Jump to next hunk' }) -+ -+ map({ 'n', 'v' }, '[c', function() -+ if vim.wo.diff then -+ return '[c' -+ end -+ vim.schedule(function() -+ gs.prev_hunk() -+ end) -+ return '' -+ end, { expr = true, desc = 'Jump to previous hunk' }) -+ -+ -- Actions -+ -- visual mode -+ map('v', 'hs', function() -+ gs.stage_hunk { vim.fn.line '.', vim.fn.line 'v' } -+ end, { desc = 'stage git hunk' }) -+ map('v', 'hr', function() -+ gs.reset_hunk { vim.fn.line '.', vim.fn.line 'v' } -+ end, { desc = 'reset git hunk' }) -+ -- normal mode -+ map('n', 'hs', gs.stage_hunk, { desc = 'git stage hunk' }) -+ map('n', 'hr', gs.reset_hunk, { desc = 'git reset hunk' }) -+ map('n', 'hS', gs.stage_buffer, { desc = 'git Stage buffer' }) -+ map('n', 'hu', gs.undo_stage_hunk, { desc = 'undo stage hunk' }) -+ map('n', 'hR', gs.reset_buffer, { desc = 'git Reset buffer' }) -+ map('n', 'hp', gs.preview_hunk, { desc = 'preview git hunk' }) -+ map('n', 'hb', function() -+ gs.blame_line { full = false } -+ end, { desc = 'git blame line' }) -+ map('n', 'hd', gs.diffthis, { desc = 'git diff against index' }) -+ map('n', 'hD', function() -+ gs.diffthis '~' -+ end, { desc = 'git diff against last commit' }) -+ -+ -- Toggles -+ map('n', 'tb', gs.toggle_current_line_blame, { desc = 'toggle git blame line' }) -+ map('n', 'td', gs.toggle_deleted, { desc = 'toggle git show deleted' }) -+ -+ -- Text object -+ map({ 'o', 'x' }, 'ih', ':Gitsigns select_hunk', { desc = 'select git hunk' }) -+ end, - }, - }, - -@@ -283,6 +351,7 @@ require('lazy').setup({ +@@ -283,6 +291,7 @@ require('lazy').setup({ require('which-key').register { ['c'] = { name = '[C]ode', _ = 'which_key_ignore' }, ['d'] = { name = '[D]ocument', _ = 'which_key_ignore' }, @@ -115,7 +48,7 @@ index 506bbaf..d546b62 100644 ['r'] = { name = '[R]ename', _ = 'which_key_ignore' }, ['s'] = { name = '[S]earch', _ = 'which_key_ignore' }, ['w'] = { name = '[W]orkspace', _ = 'which_key_ignore' }, -@@ -552,6 +621,18 @@ require('lazy').setup({ +@@ -552,6 +561,18 @@ require('lazy').setup({ -- tsserver = {}, -- @@ -134,7 +67,7 @@ index 506bbaf..d546b62 100644 lua_ls = { -- cmd = {...}, -- filetypes { ...}, -@@ -566,6 +647,10 @@ require('lazy').setup({ +@@ -566,6 +587,10 @@ require('lazy').setup({ }, }, }, @@ -145,7 +78,7 @@ index 506bbaf..d546b62 100644 } -- Ensure the servers and tools above are installed -@@ -592,6 +677,33 @@ require('lazy').setup({ +@@ -592,6 +617,33 @@ require('lazy').setup({ -- by the server configuration above. Useful when disabling -- certain features of an LSP (for example, turning off formatting for tsserver) server.capabilities = vim.tbl_deep_extend('force', {}, capabilities, server.capabilities or {}) @@ -179,7 +112,7 @@ index 506bbaf..d546b62 100644 require('lspconfig')[server_name].setup(server) end, }, -@@ -793,7 +905,31 @@ require('lazy').setup({ +@@ -793,7 +845,31 @@ require('lazy').setup({ 'nvim-treesitter/nvim-treesitter', build = ':TSUpdate', opts = { @@ -212,7 +145,7 @@ index 506bbaf..d546b62 100644 -- Autoinstall languages that are not installed auto_install = true, highlight = { -@@ -830,14 +966,14 @@ require('lazy').setup({ +@@ -830,14 +906,14 @@ require('lazy').setup({ -- Uncomment any of the lines below to enable them (you will need to restart nvim). -- -- require 'kickstart.plugins.debug',