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"; + }; + } + ]; }; }; }