refactor: plugin normalization

main
LeMarsu 2024-05-29 23:15:31 +02:00
parent 81d82e05a2
commit b087119333
3 changed files with 24 additions and 17 deletions

View File

@ -18,6 +18,9 @@
enabled = true; enabled = true;
init = null; init = null;
config = null; config = null;
dependencies = [];
lazy = false;
cmd = [];
}; };
remotePluginToNeovimPlugin = p: remotePluginToNeovimPlugin = p:
@ -29,7 +32,7 @@
withPluginDefaults = dep: defaultPlugin // dep; withPluginDefaults = dep: defaultPlugin // dep;
normalizePlugin = d: let normalizePlugin = d: let
dep = types.dependency d; dep = types.dependency d;
p = plugin =
if ! dep ? plugin if ! dep ? plugin
then {plugin = dep;} then {plugin = dep;}
else let else let
@ -38,8 +41,13 @@
if attrNames plugin == ["name" "src"] if attrNames plugin == ["name" "src"]
then {plugin = remotePluginToNeovimPlugin plugin;} then {plugin = remotePluginToNeovimPlugin plugin;}
else dep; else dep;
p = withPluginDefaults plugin;
in in
withPluginDefaults p; p
// rec {
hasCommands = p.cmd != [];
lazy = p.lazy || hasCommands;
};
normalizeOrImportPlugin = dep: normalizeOrImportPlugin = dep:
if isPath dep if isPath dep
@ -96,9 +104,6 @@
if plugin ? pname if plugin ? pname
then plugin.pname then plugin.pname
else plugin.name; else plugin.name;
hasDeps = plugin ? dependencies && plugin.dependencies != [];
isLazy = plugin ? lazy && plugin.lazy || hasCommands;
hasCommands = plugin ? cmd;
name = pluginName plugin.plugin; name = pluginName plugin.plugin;
in in
memo memo
@ -107,21 +112,21 @@
{name = pluginName plugin.plugin;} {name = pluginName plugin.plugin;}
// (mkTypeFn "init") // (mkTypeFn "init")
// (mkTypeFn "config") // (mkTypeFn "config")
// (optionalAttrs hasDeps { // (optionalAttrs (plugin.dependencies != []) {
dependencies = map pluginName plugin.dependencies; dependencies = map pluginName plugin.dependencies;
} })
// (optionalAttrs isLazy { // (optionalAttrs plugin.lazy {
lazy = true; lazy = true;
})) })
// (optionalAttrs hasCommands { // (optionalAttrs plugin.hasCommands {
inherit (plugin) cmd; inherit (plugin) cmd;
}); });
}; };
pluginsLuaDef = plugins: lua.nix2lua (foldl' pluginLuaDef {} plugins); pluginsLuaDef = plugins: lua.nix2lua (foldl' pluginLuaDef {} plugins);
in { in {
inherit normalizePlugin;
inherit normalizePlugins; inherit normalizePlugins;
inherit mkSlothFlakePlugin; inherit mkSlothFlakePlugin;
inherit mkRuntimePlugin; inherit mkRuntimePlugin;
inherit textOrContent; inherit textOrContent;
inherit pluginsLuaDef;
} }

View File

@ -1,5 +1,4 @@
{lib, ...}: let {...}: let
inherit (lib.strings) removeSuffix;
inherit (builtins) match isNull typeOf concatStringsSep attrNames concatMap; inherit (builtins) match isNull typeOf concatStringsSep attrNames concatMap;
commaJoin = concatStringsSep ", "; commaJoin = concatStringsSep ", ";

View File

@ -18,13 +18,16 @@
deps = callPackage ./deps.nix {inherit dependenciesExtraArgs types;}; deps = callPackage ./deps.nix {inherit dependenciesExtraArgs types;};
sloth-flake.plugin = deps.mkSlothFlakePlugin version plugins; normalizedPlugins = deps.normalizePlugins dependencies;
runtimePlugin.plugin = deps.mkRuntimePlugin runtime; sloth-flake = deps.mkSlothFlakePlugin version normalizedPlugins;
plugins = deps.normalizePlugins (dependencies ++ [runtimePlugin sloth-flake]); runtimePlugin = deps.mkRuntimePlugin runtime;
plugins =
normalizedPlugins
++ (deps.normalizePlugins [runtimePlugin sloth-flake]);
extractPlugin = p: { extractPlugin = p: {
inherit (p) plugin; inherit (p) plugin;
optional = p ? lazy && p.lazy || p ? cmd; optional = p.lazy;
}; };
extractPlugins = map extractPlugin; extractPlugins = map extractPlugin;