From cf7e026c8c86c5548d270e20c04f456939591219 Mon Sep 17 00:00:00 2001 From: Gaetan Lepage Date: Mon, 9 Dec 2024 20:40:02 +0100 Subject: [PATCH] mkNeovimPlugin: refactor lua code generation logic --- CONTRIBUTING.md | 2 +- lib/neovim-plugin.nix | 27 ++++++++++++++---------- plugins/by-name/rustaceanvim/default.nix | 3 +-- 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1f89843a42..be904bd619 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -69,7 +69,7 @@ A template plugin can be found in (plugins/TEMPLATE.nix)[https://github.com/nix- | **extraOptions** | Module options for the plugin, to be added _outside_ of the `settings` option. These should be Nixvim-specific options. | No | `{}` | | **extraPackages** | Extra packages to include. | No | `[]` | | **extraPlugins** | Extra plugins to include. | No | `[]` | -| **hasConfigAttrs** | Indicating whether the plugin has configuration attributes. | No | `true` | +| **hasLuaConfig** | Indicating whether the plugin generates lua configuration code (and thus should have a `luaConfig` option). | No | `true` | | **hasSettings** | Indicating whether the plugin has settings. A `settings` option will be created if true. | No | `true` | | **imports** | Additional modules to import. | No | `[]` | | **isColorscheme** | Indicating whether the plugin is a colorscheme. | No | `false` | diff --git a/lib/neovim-plugin.nix b/lib/neovim-plugin.nix index bbb5324b37..4fafb436ff 100644 --- a/lib/neovim-plugin.nix +++ b/lib/neovim-plugin.nix @@ -27,9 +27,9 @@ colorscheme ? name, # luaConfig configLocation ? if isColorscheme then "extraConfigLuaPre" else "extraConfigLua", - # For some plugins it may not make sense to have a configuration attribute, as they are - # configured through some other mean, like global variables - hasConfigAttrs ? true, + # Some plugin are not supposed to generate lua configuration code. + # For example, they might just be configured through some other mean, like global variables + hasLuaConfig ? true, # options originalName ? name, # Can be a string, a list of strings, or a module option: @@ -121,7 +121,7 @@ example = settingsExample; }; } - // lib.optionalAttrs hasConfigAttrs { + // lib.optionalAttrs hasLuaConfig { luaConfig = lib.mkOption { type = lib.types.pluginLuaConfig; default = { }; @@ -132,8 +132,8 @@ config = assert lib.assertMsg ( - callSetup -> configLocation != null - ) "When a plugin has no config attrs and has a setup function it must have a config location"; + callSetup -> hasLuaConfig + ) "This plugin is supposed to call the `setup()` function but has `hasLuaConfig` set to false"; lib.mkIf cfg.enable ( lib.mkMerge ( [ @@ -143,21 +143,26 @@ (cfg.packageDecorator cfg.package) ]; } + (lib.optionalAttrs (isColorscheme && (colorscheme != null)) { colorscheme = lib.mkDefault colorscheme; }) + + # Apply any additional configuration added to `extraConfig` (lib.optionalAttrs (args ? extraConfig) ( lib.nixvim.modules.applyExtraConfig { inherit extraConfig cfg opts; } )) ] - ++ (lib.optionals (!hasConfigAttrs) [ - (lib.optionalAttrs callSetup (setLuaConfig setupCode)) - ]) - ++ (lib.optionals hasConfigAttrs [ + # Lua configuration code generation + ++ (lib.optionals hasLuaConfig [ + + # Add the plugin setup code `require('foo').setup(...)` to the lua configuration (lib.optionalAttrs callSetup { ${namespace}.${name}.luaConfig.content = setupCode; }) - (lib.optionalAttrs (configLocation != null) (setLuaConfig cfg.luaConfig.content)) + + # Write the lua configuration `luaConfig.content` to the config file + (setLuaConfig cfg.luaConfig.content) ]) ) ); diff --git a/plugins/by-name/rustaceanvim/default.nix b/plugins/by-name/rustaceanvim/default.nix index a90723fe68..70e0ff827c 100644 --- a/plugins/by-name/rustaceanvim/default.nix +++ b/plugins/by-name/rustaceanvim/default.nix @@ -48,8 +48,7 @@ helpers.neovim-plugin.mkNeovimPlugin { }; callSetup = false; - hasConfigAttrs = false; - configLocation = null; + hasLuaConfig = false; extraConfig = cfg: mkMerge [