modules: Add moduleType to module arguments

This commit is contained in:
Robert Hensing 2021-11-22 14:39:10 +01:00
parent 426ab31fde
commit d464ccfdd9
4 changed files with 39 additions and 0 deletions

View file

@ -62,6 +62,8 @@ rec {
type: A module system type representing the module set as a submodule, type: A module system type representing the module set as a submodule,
to be extended by configuration from the containing module set. to be extended by configuration from the containing module set.
This is also available as the module argument moduleType.
extendModules: A function similar to evalModules but building on top extendModules: A function similar to evalModules but building on top
of the module set. Its arguments, modules and specialArgs are of the module set. Its arguments, modules and specialArgs are
added to the existing values. added to the existing values.
@ -148,6 +150,7 @@ rec {
config = { config = {
_module.args = { _module.args = {
inherit extendModules; inherit extendModules;
moduleType = type;
} // args; } // args;
}; };
}; };

View file

@ -281,6 +281,11 @@ checkConfigError 'A definition for option .fun.\[function body\]. is not of type
checkConfigOutput "b a" config.result ./functionTo/list-order.nix checkConfigOutput "b a" config.result ./functionTo/list-order.nix
checkConfigOutput "a c" config.result ./functionTo/merging-attrs.nix checkConfigOutput "a c" config.result ./functionTo/merging-attrs.nix
# moduleType
checkConfigOutput "a b" config.resultFoo ./declare-variants.nix ./define-variant.nix
checkConfigOutput "a y z" config.resultFooBar ./declare-variants.nix ./define-variant.nix
checkConfigOutput "a b c" config.resultFooFoo ./declare-variants.nix ./define-variant.nix
cat <<EOF cat <<EOF
====== module tests ====== ====== module tests ======
$pass Pass $pass Pass

View file

@ -0,0 +1,9 @@
{ lib, moduleType, ... }:
let inherit (lib) mkOption types;
in
{
options.variants = mkOption {
type = types.lazyAttrsOf moduleType;
default = {};
};
}

View file

@ -0,0 +1,22 @@
{ config, lib, ... }:
let inherit (lib) types mkOption attrNames;
in
{
options = {
attrs = mkOption { type = types.attrsOf lib.types.int; };
result = mkOption { };
resultFoo = mkOption { };
resultFooBar = mkOption { };
resultFooFoo = mkOption { };
};
config = {
attrs.a = 1;
variants.foo.attrs.b = 1;
variants.bar.attrs.y = 1;
variants.foo.variants.bar.attrs.z = 1;
variants.foo.variants.foo.attrs.c = 3;
resultFoo = lib.concatMapStringsSep " " toString (attrNames config.variants.foo.attrs);
resultFooBar = lib.concatMapStringsSep " " toString (attrNames config.variants.foo.variants.bar.attrs);
resultFooFoo = lib.concatMapStringsSep " " toString (attrNames config.variants.foo.variants.foo.attrs);
};
}