helpers/neovim-plugin: add mkNeovimPlugin

This commit is contained in:
Gaetan Lepage 2024-01-31 08:51:39 +01:00 committed by Gaétan Lepage
parent e797c36266
commit 44949348cb
2 changed files with 63 additions and 4 deletions

View file

@ -1,16 +1,21 @@
{lib, ...}: let {
lib,
pkgs,
...
}: let
nixvimTypes = import ./types.nix {inherit lib nixvimOptions;}; nixvimTypes = import ./types.nix {inherit lib nixvimOptions;};
nixvimUtils = import ./utils.nix {inherit lib;}; nixvimUtils = import ./utils.nix {inherit lib;};
nixvimOptions = import ./options.nix {inherit lib nixvimTypes nixvimUtils;}; nixvimOptions = import ./options.nix {inherit lib nixvimTypes nixvimUtils;};
inherit (import ./to-lua.nix {inherit lib;}) toLuaObject;
in in
{ {
maintainers = import ./maintainers.nix; maintainers = import ./maintainers.nix;
keymaps = import ./keymap-helpers.nix {inherit lib nixvimOptions nixvimTypes;}; keymaps = import ./keymap-helpers.nix {inherit lib nixvimOptions nixvimTypes;};
autocmd = import ./autocmd-helpers.nix {inherit lib nixvimOptions nixvimTypes;}; autocmd = import ./autocmd-helpers.nix {inherit lib nixvimOptions nixvimTypes;};
neovim-plugin = import ./neovim-plugin.nix {inherit lib nixvimOptions;}; neovim-plugin = import ./neovim-plugin.nix {inherit lib nixvimOptions toLuaObject;};
vim-plugin = import ./vim-plugin.nix {inherit lib nixvimOptions;}; vim-plugin = import ./vim-plugin.nix {inherit lib nixvimOptions;};
inherit (import ./to-lua.nix {inherit lib;}) toLuaObject;
inherit nixvimTypes; inherit nixvimTypes;
inherit toLuaObject;
} }
// nixvimUtils // nixvimUtils
// nixvimOptions // nixvimOptions

View file

@ -1,8 +1,9 @@
{ {
lib, lib,
nixvimOptions, nixvimOptions,
toLuaObject,
}: }:
with lib; { with lib; rec {
mkSettingsOption = { mkSettingsOption = {
pluginName ? null, pluginName ? null,
options ? {}, options ? {},
@ -27,4 +28,57 @@ with lib; {
''; '';
}; };
}; };
mkNeovimPlugin = config: {
name,
namespace ? "plugins",
maintainers,
imports ? [],
# options
originalName ? name,
defaultPackage,
settingsOptions ? {},
settingsExample ? null,
extraOptions ? {},
# config
luaName ? name,
extraConfig ? cfg: {},
extraPlugins ? [],
extraPackages ? [],
}: {
meta.maintainers = maintainers;
inherit imports;
options.${namespace}.${name} =
{
enable = mkEnableOption originalName;
package = nixvimOptions.mkPackageOption originalName defaultPackage;
settings = mkSettingsOption {
pluginName = name;
options = settingsOptions;
example = settingsExample;
};
}
// extraOptions;
config = let
cfg = config.${namespace}.${name};
in
mkIf cfg.enable (
mkMerge [
{
extraPlugins = [cfg.package] ++ extraPlugins;
inherit extraPackages;
extraConfigLua = ''
require('${luaName}').setup(${toLuaObject cfg.settings})
'';
}
(extraConfig cfg)
]
);
};
} }