aboutsummaryrefslogtreecommitdiffstats
path: root/modules/development/nixvim/plugins/gitsigns/on-attach.lua
diff options
context:
space:
mode:
Diffstat (limited to 'modules/development/nixvim/plugins/gitsigns/on-attach.lua')
-rw-r--r--modules/development/nixvim/plugins/gitsigns/on-attach.lua66
1 files changed, 66 insertions, 0 deletions
diff --git a/modules/development/nixvim/plugins/gitsigns/on-attach.lua b/modules/development/nixvim/plugins/gitsigns/on-attach.lua
new file mode 100644
index 0000000..5f63330
--- /dev/null
+++ b/modules/development/nixvim/plugins/gitsigns/on-attach.lua
@@ -0,0 +1,66 @@
+function(bufnr)
+ local gitsigns = require('gitsigns')
+ local function map(mode, lhs, rhs, desc)
+ vim.keymap.set(mode, lhs, rhs, { buffer = bufnr, silent = true, desc = desc })
+ end
+
+ -- Navigation
+ map('n', ']c', function() gitsigns.nav_hunk('next') end, 'Next hunk')
+ map('n', '[c', function() gitsigns.nav_hunk('prev') end, 'Previous hunk')
+ map('n', ']C', function() gitsigns.nav_hunk('last') end, 'Last hunk')
+ map('n', '[C', function() gitsigns.nav_hunk('first') end, 'First hunk')
+
+ -- Hunk actions
+ map('n', '<leader>gs', gitsigns.stage_hunk, 'Stage hunk')
+ map('v', '<leader>gs', function()
+ gitsigns.stage_hunk({ vim.fn.line('.'), vim.fn.line('v') })
+ end, 'Stage visual range hunk')
+ map('n', '<leader>gr', gitsigns.reset_hunk, 'Reset hunk')
+ map('v', '<leader>gr', function()
+ gitsigns.reset_hunk({ vim.fn.line('.'), vim.fn.line('v') })
+ end, 'Reset visual range hunk')
+ map('n', '<leader>gS', gitsigns.stage_buffer, 'Stage buffer')
+ map('n', '<leader>gR', gitsigns.reset_buffer, 'Reset buffer')
+ map('n', '<leader>gi', gitsigns.reset_buffer_index, 'Unstage buffer (reset index)')
+ map('n', '<leader>gu', gitsigns.undo_stage_hunk, 'Undo stage hunk')
+
+ -- Preview
+ map('n', '<leader>gp', gitsigns.preview_hunk, 'Preview hunk')
+ map('n', '<leader>gP', gitsigns.preview_hunk_inline, 'Preview hunk inline')
+
+ -- Blame
+ map('n', '<leader>gb', gitsigns.blame_line, 'Blame line')
+ map('n', '<leader>gB', function()
+ gitsigns.blame_line({ full = true })
+ end, 'Blame line (full)')
+
+ -- Diffs / base
+ map('n', '<leader>gd', gitsigns.diffthis, 'Diff this (index)')
+ map('n', '<leader>gD', function()
+ gitsigns.diffthis('~')
+ end, 'Diff this (HEAD)')
+ map('n', '<leader>gc', function()
+ gitsigns.change_base(nil, true)
+ end, 'Change diff base')
+
+ -- Quickfix / location list
+ map('n', '<leader>gq', gitsigns.setqflist, 'Hunks to quickfix')
+ map('n', '<leader>gQ', function()
+ gitsigns.setqflist('all')
+ end, 'Repo hunks to quickfix')
+ map('n', '<leader>gl', gitsigns.setloclist, 'Hunks to location list')
+
+ -- Toggles
+ map('n', '<leader>gts', gitsigns.toggle_signs, 'Toggle signs')
+ map('n', '<leader>gtl', gitsigns.toggle_linehl, 'Toggle line highlight')
+ map('n', '<leader>gtn', gitsigns.toggle_numhl, 'Toggle number highlight')
+ map('n', '<leader>gtw', gitsigns.toggle_word_diff, 'Toggle word diff')
+ map('n', '<leader>gtb', gitsigns.toggle_current_line_blame, 'Toggle current line blame')
+ map('n', '<leader>gtd', gitsigns.toggle_deleted, 'Toggle deleted lines')
+
+ -- Misc
+ map('n', '<leader>gF', gitsigns.refresh, 'Refresh gitsigns')
+
+ -- Text object
+ map({ 'o', 'x' }, 'ih', gitsigns.select_hunk, 'Select hunk text object')
+end