From de99f2938feefc990854363897623a19c077478e Mon Sep 17 00:00:00 2001 From: Matt Sturgeon Date: Fri, 15 Nov 2024 17:28:47 +0000 Subject: [PATCH] lib/{vim,neovim}-plugin: `installPackage` -> `packageDecorator` Replace `mkNeovimPlugin`'s `installPackage` parameter with a new internal module option: `packageDecorator`. The option is a function that applies some transformation to `cfg.package`'s value before it is installed. --- lib/neovim-plugin.nix | 15 +++++++++++++-- lib/vim-plugin.nix | 15 +++++++++++++-- plugins/by-name/treesitter/default.nix | 10 ++++------ 3 files changed, 30 insertions(+), 10 deletions(-) diff --git a/lib/neovim-plugin.nix b/lib/neovim-plugin.nix index ddd10dd7..1b6fc36d 100644 --- a/lib/neovim-plugin.nix +++ b/lib/neovim-plugin.nix @@ -50,7 +50,6 @@ extraPlugins ? [ ], extraPackages ? [ ], callSetup ? true, - installPackage ? true, }@args: let namespace = if isColorscheme then "colorschemes" else "plugins"; @@ -104,6 +103,16 @@ package ]; }; + packageDecorator = lib.mkOption { + type = lib.types.functionTo lib.types.package; + default = lib.id; + defaultText = lib.literalExpression "x: x"; + description = '' + Additional transformations to apply to the final installed package. + The result of these transformations is **not** visible in the `package` option's value. + ''; + internal = true; + }; } // lib.optionalAttrs hasSettings { settings = lib.nixvim.mkSettingsOption { @@ -129,8 +138,10 @@ lib.mkMerge ( [ { - extraPlugins = (lib.optional installPackage cfg.package) ++ extraPlugins; inherit extraPackages; + extraPlugins = extraPlugins ++ [ + (cfg.packageDecorator cfg.package) + ]; } (lib.optionalAttrs (isColorscheme && (colorscheme != null)) { colorscheme = lib.mkDefault colorscheme; diff --git a/lib/vim-plugin.nix b/lib/vim-plugin.nix index 47d54e48..eff0e1e0 100644 --- a/lib/vim-plugin.nix +++ b/lib/vim-plugin.nix @@ -91,15 +91,26 @@ package ]; }; + packageDecorator = lib.mkOption { + type = lib.types.functionTo lib.types.package; + default = lib.id; + defaultText = lib.literalExpression "x: x"; + description = '' + Additional transformations to apply to the final installed package. + The result of these transformations is **not** visible in the `package` option's value. + ''; + internal = true; + }; } // settingsOption // extraOptions; config = lib.mkIf cfg.enable ( lib.mkMerge [ { inherit extraPackages; + extraPlugins = extraPlugins ++ [ + (cfg.packageDecorator cfg.package) + ]; globals = lib.mapAttrs' (n: lib.nameValuePair (globalPrefix + n)) (cfg.settings or { }); - # does this evaluate package? it would not be desired to evaluate package if we use another package. - extraPlugins = extraPlugins ++ lib.optional (cfg.package != null) cfg.package; } (lib.optionalAttrs (isColorscheme && (colorscheme != null)) { colorscheme = lib.mkDefault colorscheme; diff --git a/plugins/by-name/treesitter/default.nix b/plugins/by-name/treesitter/default.nix index f979c776..eb67ed70 100644 --- a/plugins/by-name/treesitter/default.nix +++ b/plugins/by-name/treesitter/default.nix @@ -430,8 +430,6 @@ helpers.neovim-plugin.mkNeovimPlugin { # NOTE: We call setup manually below. callSetup = false; - # NOTE: We install cfg.package manually so we can install grammars using it. - installPackage = false; extraConfig = cfg: { plugins.treesitter.luaConfig.content = @@ -455,10 +453,10 @@ helpers.neovim-plugin.mkNeovimPlugin { extraFiles = mkIf cfg.nixvimInjections { "queries/nix/injections.scm".source = ./injections.scm; }; - extraPlugins = mkIf (cfg.package != null) [ - (mkIf cfg.nixGrammars (cfg.package.withPlugins (_: cfg.grammarPackages))) - (mkIf (!cfg.nixGrammars) cfg.package) - ]; + # Install the grammar packages if enabled + plugins.treesitter.packageDecorator = lib.mkIf cfg.nixGrammars ( + pkg: pkg.withPlugins (_: cfg.grammarPackages) + ); extraPackages = [ cfg.gccPackage