From 218b90c412c5a29c5d23ca97c3413f016a21ea60 Mon Sep 17 00:00:00 2001 From: sid Date: Tue, 5 May 2026 21:10:36 +0200 Subject: [PATCH] nixvim: add keymaps to gitsigns --- modules/home/nixvim/plugins/gitsigns.nix | 102 ++++++++++++++++++----- 1 file changed, 79 insertions(+), 23 deletions(-) diff --git a/modules/home/nixvim/plugins/gitsigns.nix b/modules/home/nixvim/plugins/gitsigns.nix index a58d625..651b83d 100644 --- a/modules/home/nixvim/plugins/gitsigns.nix +++ b/modules/home/nixvim/plugins/gitsigns.nix @@ -2,7 +2,7 @@ let cfg = config.programs.nixvim; - plugin = cfg.plugins.fugitive; + plugin = cfg.plugins.gitsigns; inherit (lib) mkDefault mkIf; in @@ -13,36 +13,92 @@ in enable = mkDefault true; settings = { current_line_blame = mkDefault false; - current_line_blame_opts = mkDefault { + current_line_blame_opts = { virt_text = mkDefault true; virt_text_pos = mkDefault "eol"; }; signcolumn = mkDefault true; signs = { - add = { - text = mkDefault "+"; - }; - change = { - text = mkDefault "│"; - }; - changedelete = { - text = mkDefault "~"; - }; - delete = { - text = mkDefault "-"; - }; - topdelete = { - text = mkDefault "-"; - }; - untracked = { - text = mkDefault "?"; - }; - }; - watch_gitdir = { - follow_files = mkDefault true; + add.text = mkDefault "+"; + change.text = mkDefault "│"; + changedelete.text = mkDefault "~"; + delete.text = mkDefault "-"; + topdelete.text = mkDefault "-"; + untracked.text = mkDefault "?"; }; + watch_gitdir.follow_files = mkDefault true; }; }; + keymaps = mkIf plugin.enable [ + { + mode = "n"; + key = "hs"; + action.__raw = "function() require('gitsigns').stage_hunk() end"; + options = { + noremap = true; + silent = true; + desc = "stage hunk"; + }; + } + { + mode = "v"; + key = "hs"; + action.__raw = '' + function() + require('gitsigns').stage_hunk({vim.fn.line('.'), vim.fn.line('v')}) + end + ''; + options = { + noremap = true; + silent = true; + desc = "stage selected hunks"; + }; + } + { + mode = "n"; + key = "hu"; + action.__raw = "function() require('gitsigns').undo_stage_hunk() end"; + options = { + noremap = true; + silent = true; + desc = "undo stage hunk"; + }; + } + { + mode = "n"; + key = "hS"; + action.__raw = "function() require('gitsigns').stage_buffer() end"; + options = { + noremap = true; + silent = true; + desc = "stage buffer"; + }; + } + { + mode = "n"; + key = "hr"; + action.__raw = "function() require('gitsigns').reset_hunk() end"; + options = { + noremap = true; + silent = true; + desc = "reset hunk"; + }; + } + { + mode = "v"; + key = "hr"; + action.__raw = '' + function() + require('gitsigns').reset_hunk({vim.fn.line('.'), vim.fn.line('v')}) + end + ''; + options = { + noremap = true; + silent = true; + desc = "reset selected hunks"; + }; + } + ]; }; }; }