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
|
let
|
||||||
mkOption = lib.mkOption;
|
mkOption = lib.mkOption;
|
||||||
types = lib.types;
|
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 = (
|
keyBind = (
|
||||||
{ ... }:
|
{ ... }:
|
||||||
{
|
{
|
||||||
|
@ -44,6 +50,7 @@ let
|
||||||
nullOr (oneOf [
|
nullOr (oneOf [
|
||||||
path
|
path
|
||||||
package
|
package
|
||||||
|
vPlugFunctionType
|
||||||
]);
|
]);
|
||||||
default = null;
|
default = null;
|
||||||
description = ''A vim plugin package or a path pointing to a local plugin.'';
|
description = ''A vim plugin package or a path pointing to a local plugin.'';
|
||||||
|
@ -92,9 +99,12 @@ let
|
||||||
type =
|
type =
|
||||||
with types;
|
with types;
|
||||||
nullOr (
|
nullOr (
|
||||||
listOf (oneOf [
|
(oneOf [
|
||||||
|
vPlugFunctionType
|
||||||
|
(listOf (oneOf [
|
||||||
str
|
str
|
||||||
package
|
package
|
||||||
|
]))
|
||||||
])
|
])
|
||||||
);
|
);
|
||||||
default = null;
|
default = null;
|
||||||
|
@ -212,6 +222,11 @@ in
|
||||||
default = pkgs.neovim-unwrapped;
|
default = pkgs.neovim-unwrapped;
|
||||||
description = ''The neovim-unwrapped package to use.'';
|
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 {
|
luaRcContent = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "";
|
default = "";
|
||||||
|
|
|
@ -15,7 +15,7 @@ in
|
||||||
_module.check = lib.mkDefault false;
|
_module.check = lib.mkDefault false;
|
||||||
home.packages = [
|
home.packages = [
|
||||||
(wrapNeovimLazy cfg.package {
|
(wrapNeovimLazy cfg.package {
|
||||||
inherit (cfg) luaRcContent lazyConfig lazyPlugins;
|
inherit (cfg) luaRcContent lazyConfig lazyPlugins vPlug;
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
|
@ -15,7 +15,7 @@ in
|
||||||
_module.check = lib.mkDefault false;
|
_module.check = lib.mkDefault false;
|
||||||
environment.systemPackages = [
|
environment.systemPackages = [
|
||||||
(wrapNeovimLazy cfg.package {
|
(wrapNeovimLazy cfg.package {
|
||||||
inherit (cfg) luaRcContent lazyConfig lazyPlugins;
|
inherit (cfg) luaRcContent lazyConfig lazyPlugins vPlug;
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
|
@ -75,6 +75,9 @@ let
|
||||||
- plugin (set)
|
- plugin (set)
|
||||||
|
|
||||||
Type:
|
Type:
|
||||||
|
pluginWrapper :: (Lambda -> String) -> Set
|
||||||
|
pluginWrapper :: (Lambda -> Derivation) -> Set
|
||||||
|
pluginWrapper :: (Lambda -> Set) -> Set
|
||||||
pluginWrapper :: String -> Set
|
pluginWrapper :: String -> Set
|
||||||
pluginWrapper :: Derivation -> Set
|
pluginWrapper :: Derivation -> Set
|
||||||
pluginWrapper :: Set -> Set
|
pluginWrapper :: Set -> Set
|
||||||
|
@ -84,10 +87,12 @@ let
|
||||||
if (builtins.isString pluginOrPackage) then
|
if (builtins.isString pluginOrPackage) then
|
||||||
{ short = pluginOrPackage; }
|
{ short = pluginOrPackage; }
|
||||||
else if
|
else if
|
||||||
assert (lib.isDerivation pluginOrPackage || builtins.isAttrs pluginOrPackage);
|
assert (builtins.isAttrs pluginOrPackage || builtins.isFunction pluginOrPackage);
|
||||||
(lib.isDerivation pluginOrPackage)
|
(lib.isDerivation pluginOrPackage || builtins.isFunction pluginOrPackage)
|
||||||
then
|
then
|
||||||
{ dir = pluginOrPackage; }
|
{
|
||||||
|
dir = pluginOrPackage;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
pluginOrPackage;
|
pluginOrPackage;
|
||||||
|
|
||||||
|
@ -112,20 +117,29 @@ let
|
||||||
if (builtins.isNull val) then val else fn val;
|
if (builtins.isNull val) then val else fn val;
|
||||||
# Wrap function arguments in function so they are inserted as is when parsed.
|
# Wrap function arguments in function so they are inserted as is when parsed.
|
||||||
stringLiteral = value: if (builtins.isString value) then (_: value) else value;
|
stringLiteral = value: if (builtins.isString value) then (_: value) else value;
|
||||||
|
resolvePlugin = value: if (builtins.isFunction value) then value vPlug else value;
|
||||||
in
|
in
|
||||||
lib.pipe plugin [
|
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:
|
||||||
plugin
|
plugin
|
||||||
// {
|
// {
|
||||||
__posArgs = runIfSet lib.flatten "short";
|
__posArgs = runIfSet lib.flatten "short";
|
||||||
#if (builtins.isNull short) then short else [ short ];
|
|
||||||
name = getName plugin;
|
name = getName plugin;
|
||||||
enabled = runIfSet stringLiteral "enabled";
|
enabled = runIfSet stringLiteral "enabled";
|
||||||
cond = runIfSet stringLiteral "cond";
|
cond = runIfSet stringLiteral "cond";
|
||||||
dependencies = runIfSet (map (
|
|
||||||
pluginOrPackage: getName (pluginWrapper pluginOrPackage)
|
|
||||||
)) "dependencies";
|
|
||||||
init = runIfSet stringLiteral "init";
|
init = runIfSet stringLiteral "init";
|
||||||
opts = runIfSet stringLiteral "opts";
|
opts = runIfSet stringLiteral "opts";
|
||||||
config = runIfSet stringLiteral "config";
|
config = runIfSet stringLiteral "config";
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
callPackage,
|
callPackage,
|
||||||
neovimUtils,
|
neovimUtils,
|
||||||
vimUtils,
|
vimUtils,
|
||||||
|
vimPlugins,
|
||||||
perl,
|
perl,
|
||||||
lndir,
|
lndir,
|
||||||
lazyUtils,
|
lazyUtils,
|
||||||
|
@ -40,6 +41,7 @@ let
|
||||||
luaRcContent ? "",
|
luaRcContent ? "",
|
||||||
lazyPlugins ? [ ],
|
lazyPlugins ? [ ],
|
||||||
lazyConfig ? { },
|
lazyConfig ? { },
|
||||||
|
vPlug ? vimPlugins,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
assert
|
assert
|
||||||
|
@ -49,11 +51,12 @@ let
|
||||||
stdenv.mkDerivation (
|
stdenv.mkDerivation (
|
||||||
finalAttrs:
|
finalAttrs:
|
||||||
let
|
let
|
||||||
|
lazyUtilsOverride = lazyUtils.override { inherit vPlug; };
|
||||||
rcContent = # lua
|
rcContent = # lua
|
||||||
''
|
''
|
||||||
${luaRcContent}
|
${luaRcContent}
|
||||||
|
|
||||||
vim.opt.rtp:prepend("${lazyUtils.lazyPluginsJoin { inherit lazyConfig lazyPlugins; }}")
|
vim.opt.rtp:prepend("${lazyUtilsOverride.lazyPluginsJoin { inherit lazyConfig lazyPlugins; }}")
|
||||||
require("lazyWrapper")
|
require("lazyWrapper")
|
||||||
''
|
''
|
||||||
+ lib.optionalString (!isNull neovimRcContent) ''
|
+ lib.optionalString (!isNull neovimRcContent) ''
|
||||||
|
@ -118,7 +121,7 @@ let
|
||||||
withPython3
|
withPython3
|
||||||
withPerl
|
withPerl
|
||||||
;
|
;
|
||||||
inherit providerLuaRc lazyPlugins lazyConfig;
|
inherit providerLuaRc lazyConfig;
|
||||||
inherit python3Env rubyEnv;
|
inherit python3Env rubyEnv;
|
||||||
withRuby = rubyEnv != null;
|
withRuby = rubyEnv != null;
|
||||||
inherit wrapperArgs generatedWrapperArgs;
|
inherit wrapperArgs generatedWrapperArgs;
|
||||||
|
@ -210,7 +213,7 @@ let
|
||||||
lndir
|
lndir
|
||||||
];
|
];
|
||||||
passthru = {
|
passthru = {
|
||||||
inherit providerLuaRc lazyPlugins lazyConfig;
|
inherit providerLuaRc lazyConfig;
|
||||||
unwrapped = neovim-unwrapped;
|
unwrapped = neovim-unwrapped;
|
||||||
initRc = neovimRcContent;
|
initRc = neovimRcContent;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue