diff --git a/lib/types.nix b/lib/types.nix index c4e941b..1646dcb 100644 --- a/lib/types.nix +++ b/lib/types.nix @@ -129,7 +129,6 @@ let genConfig = mkOption { type = types.attrs; - readOnly = true; internal = true; }; }; diff --git a/module-list.nix b/module-list.nix index f797d67..a5e11c7 100644 --- a/module-list.nix +++ b/module-list.nix @@ -15,6 +15,7 @@ ./modules/plugins/style/neoformat.nix ./modules/plugins/navigation/telescope.nix ./modules/plugins/navigation/nvim-tree.nix + ./modules/plugins/gitsigns.nix ################################################## (pkgs.path + "/nixos/modules/misc/assertions.nix") diff --git a/modules/plugins/gitsigns.nix b/modules/plugins/gitsigns.nix new file mode 100644 index 0000000..90a69b1 --- /dev/null +++ b/modules/plugins/gitsigns.nix @@ -0,0 +1,38 @@ +{ config, lib, pkgs, ... }: + +let cfg = config.plugins.gitsigns; in + +{ + options.plugins.gitsigns = with lib; { + enable = mkEnableOption "gitsigns-nvim"; + + package = mkPackageOption pkgs.vimPlugins "gitsigns-nvim" { }; + + settings = mkOption { + type = types.attrs; + default = { }; + }; + + keymap.set = mkOption { + type = with types; listOf keymap; + }; + }; + + config = lib.mkIf cfg.enable { + fn.gitsigns-nvim-on-attach = { + args = [ "bufnr" ]; + settings = { bufnr }: { + vim.keymap.set = map (attrs: attrs // { buffer = bufnr; }) cfg.keymap.set; + }; + }; + + plugin.gitsigns-nvim = { + name = "gitsigns"; + varName = "gs"; + package = cfg.package; + setupSettings = cfg.settings // { + on_attach = config.fn.gitsigns-nvim-on-attach.lambda; + }; + }; + }; +}