modules: refactor plugins code in top-level

This commit is contained in:
Gaetan Lepage 2025-03-31 23:47:06 +02:00
parent d81f37256d
commit efb24d78bd
7 changed files with 221 additions and 122 deletions

View file

@ -0,0 +1,38 @@
lib:
lib.fix (self: {
normalizedPluginType = lib.types.submodule {
options = {
plugin = lib.mkOption {
type = lib.types.package;
};
config = lib.mkOption {
type = with lib.types; nullOr str;
};
optional = lib.mkOption {
type = lib.types.bool;
};
};
};
# Normalize a plugin in a standard { plugin, config, optional } attrs
normalizePlugin =
p:
let
defaultPlugin = {
plugin = null;
config = null;
optional = false;
};
in
defaultPlugin // (if p ? plugin then p else { plugin = p; });
# Normalize a list of plugins
normalizePlugins = builtins.map self.normalizePlugin;
getAndNormalizeDeps = p: self.normalizePlugins (p.plugin.dependencies or [ ]);
# Remove dependencies from all plugins in a list
removeDeps = map (p: p // { plugin = removeAttrs p.plugin [ "dependencies" ]; });
})