Add vPlug option to modules.

This commit is contained in:
Kevin Baensch 2024-11-28 22:53:41 +01:00
parent bd20996cf1
commit ca7310c274
Signed by: derped
GPG key ID: C0F1D326C7626543
5 changed files with 47 additions and 15 deletions

View file

@ -2,6 +2,12 @@
let
mkOption = lib.mkOption;
types = lib.types;
vPlugFunctionType = types.mkOptionType {
name = "vPlugFunction";
description = "function taking vimPlugins and returning plugin or plugin list";
check = builtins.isFunction;
merge = lib.mergeOneOption;
};
keyBind = (
{ ... }:
{
@ -44,6 +50,7 @@ let
nullOr (oneOf [
path
package
vPlugFunctionType
]);
default = null;
description = ''A vim plugin package or a path pointing to a local plugin.'';
@ -92,9 +99,12 @@ let
type =
with types;
nullOr (
listOf (oneOf [
str
package
(oneOf [
vPlugFunctionType
(listOf (oneOf [
str
package
]))
])
);
default = null;
@ -212,6 +222,11 @@ in
default = pkgs.neovim-unwrapped;
description = ''The neovim-unwrapped package to use.'';
};
vPlug = mkOption {
type = with types; lazyAttrsOf anything;
default = pkgs.vimPlugins;
description = ''The vimPlugins attrs to use.'';
};
luaRcContent = mkOption {
type = types.str;
default = "";

View file

@ -15,7 +15,7 @@ in
_module.check = lib.mkDefault false;
home.packages = [
(wrapNeovimLazy cfg.package {
inherit (cfg) luaRcContent lazyConfig lazyPlugins;
inherit (cfg) luaRcContent lazyConfig lazyPlugins vPlug;
})
];
};

View file

@ -15,7 +15,7 @@ in
_module.check = lib.mkDefault false;
environment.systemPackages = [
(wrapNeovimLazy cfg.package {
inherit (cfg) luaRcContent lazyConfig lazyPlugins;
inherit (cfg) luaRcContent lazyConfig lazyPlugins vPlug;
})
];
};

View file

@ -75,6 +75,9 @@ let
- plugin (set)
Type:
pluginWrapper :: (Lambda -> String) -> Set
pluginWrapper :: (Lambda -> Derivation) -> Set
pluginWrapper :: (Lambda -> Set) -> Set
pluginWrapper :: String -> Set
pluginWrapper :: Derivation -> Set
pluginWrapper :: Set -> Set
@ -84,10 +87,12 @@ let
if (builtins.isString pluginOrPackage) then
{ short = pluginOrPackage; }
else if
assert (lib.isDerivation pluginOrPackage || builtins.isAttrs pluginOrPackage);
(lib.isDerivation pluginOrPackage)
assert (builtins.isAttrs pluginOrPackage || builtins.isFunction pluginOrPackage);
(lib.isDerivation pluginOrPackage || builtins.isFunction pluginOrPackage)
then
{ dir = pluginOrPackage; }
{
dir = pluginOrPackage;
}
else
pluginOrPackage;
@ -112,20 +117,29 @@ let
if (builtins.isNull val) then val else fn val;
# Wrap function arguments in function so they are inserted as is when parsed.
stringLiteral = value: if (builtins.isString value) then (_: value) else value;
resolvePlugin = value: if (builtins.isFunction value) then value vPlug else value;
in
lib.pipe plugin [
# Resolve dir and dependencies first so getName can resolve names
(
plugin:
plugin
// {
dir = runIfSet resolvePlugin "dir";
dependencies = runIfSet (
pluginListFn:
(map (pluginOrPackage: getName (pluginWrapper pluginOrPackage))) (resolvePlugin pluginListFn)
) "dependencies";
}
)
(
plugin:
plugin
// {
__posArgs = runIfSet lib.flatten "short";
#if (builtins.isNull short) then short else [ short ];
name = getName plugin;
enabled = runIfSet stringLiteral "enabled";
cond = runIfSet stringLiteral "cond";
dependencies = runIfSet (map (
pluginOrPackage: getName (pluginWrapper pluginOrPackage)
)) "dependencies";
init = runIfSet stringLiteral "init";
opts = runIfSet stringLiteral "opts";
config = runIfSet stringLiteral "config";

View file

@ -10,6 +10,7 @@
callPackage,
neovimUtils,
vimUtils,
vimPlugins,
perl,
lndir,
lazyUtils,
@ -40,6 +41,7 @@ let
luaRcContent ? "",
lazyPlugins ? [ ],
lazyConfig ? { },
vPlug ? vimPlugins,
...
}:
assert
@ -49,11 +51,12 @@ let
stdenv.mkDerivation (
finalAttrs:
let
lazyUtilsOverride = lazyUtils.override { inherit vPlug; };
rcContent = # lua
''
${luaRcContent}
vim.opt.rtp:prepend("${lazyUtils.lazyPluginsJoin { inherit lazyConfig lazyPlugins; }}")
vim.opt.rtp:prepend("${lazyUtilsOverride.lazyPluginsJoin { inherit lazyConfig lazyPlugins; }}")
require("lazyWrapper")
''
+ lib.optionalString (!isNull neovimRcContent) ''
@ -118,7 +121,7 @@ let
withPython3
withPerl
;
inherit providerLuaRc lazyPlugins lazyConfig;
inherit providerLuaRc lazyConfig;
inherit python3Env rubyEnv;
withRuby = rubyEnv != null;
inherit wrapperArgs generatedWrapperArgs;
@ -210,7 +213,7 @@ let
lndir
];
passthru = {
inherit providerLuaRc lazyPlugins lazyConfig;
inherit providerLuaRc lazyConfig;
unwrapped = neovim-unwrapped;
initRc = neovimRcContent;