diff --git a/modules/plugins/navigation/nvim-tree.nix b/modules/plugins/navigation/nvim-tree.nix index 6aedd2e..571d15a 100644 --- a/modules/plugins/navigation/nvim-tree.nix +++ b/modules/plugins/navigation/nvim-tree.nix @@ -3,18 +3,18 @@ let cfg = config.plugins.navigation.nvim-tree; in { - options.plugins.navigation.nvim-tree = with lib; with types; { + options.plugins.navigation.nvim-tree = with lib; { enable = mkEnableOption "nvim-tree"; package = mkPackageOption pkgs.vimPlugins "nvim-tree-lua" { }; settings = mkOption { - type = attrs; + type = types.attrs; default = { }; description = '' `:help nvim-tree-setup` ''; }; disableNetrw = mkOption { - type = bool; + type = types.bool; default = true; description = '' Disabling netrw is strongly advised. @@ -22,14 +22,44 @@ let cfg = config.plugins.navigation.nvim-tree; in `:help nvim-tree-netrw` ''; }; + keymap = { + withDefault = mkOption { + type = types.bool; + default = true; + description = "attach default mappings"; + }; + set = mkOption { + type = with types; listOf keymap; + default = [ ]; + }; + }; }; config = lib.mkIf cfg.enable { + fn.nvim-tree-lua-on-attach = lib.mkIf (cfg.keymap.set != [ ]) { + args = [ "bufnr" ]; + content = { bufnr }: { + extra = with lib.nix2lua; lib.mkIf cfg.keymap.withDefault pipe [ + (require "nvim-tree.api") + (var "config") + (var "mappings") + (call "default_on_attach" bufnr) + ]; + + vim.keymap.set = map (attrs: attrs // { buffer = bufnr; }) cfg.keymap.set; + }; + }; + + plugin.nvim-tree-lua = { name = "nvim-tree"; package = cfg.package; - setupSettings = cfg.settings; + setupSettings = + cfg.settings + // lib.optionalAttrs (cfg.keymap.set != [ ]) { + on_attach = config.fn.nvim-tree-lua-on-attach.lambda; + }; }; vim.g = lib.mkIf cfg.disableNetrw {