Add vPlug option to modules.
This commit is contained in:
parent
bd20996cf1
commit
ca7310c274
5 changed files with 47 additions and 15 deletions
|
@ -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 = "";
|
||||
|
|
|
@ -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;
|
||||
})
|
||||
];
|
||||
};
|
||||
|
|
|
@ -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;
|
||||
})
|
||||
];
|
||||
};
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in a new issue