mirror of
https://github.com/nix-community/nixvim.git
synced 2025-06-20 16:15:43 +02:00
mkNeovimPlugin: refactor lua code generation logic
This commit is contained in:
parent
f2a991ae8c
commit
cf7e026c8c
3 changed files with 18 additions and 14 deletions
|
@ -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` |
|
||||
|
|
|
@ -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)
|
||||
])
|
||||
)
|
||||
);
|
||||
|
|
|
@ -48,8 +48,7 @@ helpers.neovim-plugin.mkNeovimPlugin {
|
|||
};
|
||||
|
||||
callSetup = false;
|
||||
hasConfigAttrs = false;
|
||||
configLocation = null;
|
||||
hasLuaConfig = false;
|
||||
extraConfig =
|
||||
cfg:
|
||||
mkMerge [
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue