aboutsummaryrefslogtreecommitdiff
path: root/common/home/mosder/.config/nvim/lua/kickstart/plugins/gitsigns.lua
diff options
context:
space:
mode:
authorMosder <xmosder12@gmail.com>2026-06-10 02:24:31 +0200
committerMosder <xmosder12@gmail.com>2026-06-10 02:24:31 +0200
commit1f2824b912b22a687fb0f1c56f82198128bef1ca (patch)
treea22c4425c43fcd111c441531b21e275b1fd97f3f /common/home/mosder/.config/nvim/lua/kickstart/plugins/gitsigns.lua
parenta7fab53f802c8bacfce66fb3455145835e231460 (diff)
added and updated a lot of configs + refactored it to be more accessible
Diffstat (limited to 'common/home/mosder/.config/nvim/lua/kickstart/plugins/gitsigns.lua')
-rw-r--r--common/home/mosder/.config/nvim/lua/kickstart/plugins/gitsigns.lua57
1 files changed, 57 insertions, 0 deletions
diff --git a/common/home/mosder/.config/nvim/lua/kickstart/plugins/gitsigns.lua b/common/home/mosder/.config/nvim/lua/kickstart/plugins/gitsigns.lua
new file mode 100644
index 0000000..b7e40a8
--- /dev/null
+++ b/common/home/mosder/.config/nvim/lua/kickstart/plugins/gitsigns.lua
@@ -0,0 +1,57 @@
+-- Adds git related signs to the gutter, as well as utilities for managing changes
+-- NOTE: gitsigns is already included in init.lua but contains only the base
+-- config. This will add also the recommended keymaps.
+
+vim.pack.add { 'https://github.com/lewis6991/gitsigns.nvim' }
+
+require('gitsigns').setup {
+ on_attach = function(bufnr)
+ local gitsigns = require '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', ']c', function()
+ if vim.wo.diff then
+ vim.cmd.normal { ']c', bang = true }
+ else
+ gitsigns.nav_hunk 'next'
+ end
+ end, { desc = 'Jump to next git [c]hange' })
+
+ map('n', '[c', function()
+ if vim.wo.diff then
+ vim.cmd.normal { '[c', bang = true }
+ else
+ gitsigns.nav_hunk 'prev'
+ end
+ end, { desc = 'Jump to previous git [c]hange' })
+
+ -- Actions
+ -- visual mode
+ map('v', '<leader>hs', function() gitsigns.stage_hunk { vim.fn.line '.', vim.fn.line 'v' } end, { desc = 'git [s]tage hunk' })
+ map('v', '<leader>hr', function() gitsigns.reset_hunk { vim.fn.line '.', vim.fn.line 'v' } end, { desc = 'git [r]eset hunk' })
+ -- normal mode
+ map('n', '<leader>hs', gitsigns.stage_hunk, { desc = 'git [s]tage hunk' })
+ map('n', '<leader>hr', gitsigns.reset_hunk, { desc = 'git [r]eset hunk' })
+ map('n', '<leader>hS', gitsigns.stage_buffer, { desc = 'git [S]tage buffer' })
+ map('n', '<leader>hR', gitsigns.reset_buffer, { desc = 'git [R]eset buffer' })
+ map('n', '<leader>hp', gitsigns.preview_hunk, { desc = 'git [p]review hunk' })
+ map('n', '<leader>hi', gitsigns.preview_hunk_inline, { desc = 'git preview hunk [i]nline' })
+ map('n', '<leader>hb', function() gitsigns.blame_line { full = true } end, { desc = 'git [b]lame line' })
+ map('n', '<leader>hd', gitsigns.diffthis, { desc = 'git [d]iff against index' })
+ map('n', '<leader>hD', function() gitsigns.diffthis '@' end, { desc = 'git [D]iff against last commit' })
+ map('n', '<leader>hQ', function() gitsigns.setqflist 'all' end, { desc = 'git hunk [Q]uickfix list (all files in repo)' })
+ map('n', '<leader>hq', gitsigns.setqflist, { desc = 'git hunk [q]uickfix list (all changes in this file)' })
+ -- Toggles
+ map('n', '<leader>tb', gitsigns.toggle_current_line_blame, { desc = '[T]oggle git show [b]lame line' })
+ map('n', '<leader>tw', gitsigns.toggle_word_diff, { desc = '[T]oggle git intra-line [w]ord diff' })
+
+ -- Text object
+ map({ 'o', 'x' }, 'ih', gitsigns.select_hunk)
+ end,
+}