diff options
author | Robert Hensing <robert@roberthensing.nl> | 2021-11-22 14:39:10 +0100 |
---|---|---|
committer | Robert Hensing <robert@roberthensing.nl> | 2021-11-22 16:50:50 +0100 |
commit | d464ccfdd9e101d4f5a112ab58d91ccbb912524a (patch) | |
tree | 2e2e45996c8bcaf13baeb01c681fa50001226d65 /lib | |
parent | 426ab31fdeb828886c22ec0e561eca2b90b84b94 (diff) |
modules: Add moduleType to module arguments
Diffstat (limited to 'lib')
-rw-r--r-- | lib/modules.nix | 3 | ||||
-rwxr-xr-x | lib/tests/modules.sh | 5 | ||||
-rw-r--r-- | lib/tests/modules/declare-variants.nix | 9 | ||||
-rw-r--r-- | lib/tests/modules/define-variant.nix | 22 |
4 files changed, 39 insertions, 0 deletions
diff --git a/lib/modules.nix b/lib/modules.nix index b381487f68e3c..2468b6fbdd22f 100644 --- a/lib/modules.nix +++ b/lib/modules.nix @@ -62,6 +62,8 @@ rec { ‘type’: A module system type representing the module set as a submodule, 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 of the module set. Its arguments, ‘modules’ and ‘specialArgs’ are added to the existing values. @@ -148,6 +150,7 @@ rec { config = { _module.args = { inherit extendModules; + moduleType = type; } // args; }; }; diff --git a/lib/tests/modules.sh b/lib/tests/modules.sh index aba3f08122f5b..2f36d6107ca45 100755 --- a/lib/tests/modules.sh +++ b/lib/tests/modules.sh @@ -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 "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 ====== module tests ====== $pass Pass diff --git a/lib/tests/modules/declare-variants.nix b/lib/tests/modules/declare-variants.nix new file mode 100644 index 0000000000000..3ed6fa689e21e --- /dev/null +++ b/lib/tests/modules/declare-variants.nix @@ -0,0 +1,9 @@ +{ lib, moduleType, ... }: +let inherit (lib) mkOption types; +in +{ + options.variants = mkOption { + type = types.lazyAttrsOf moduleType; + default = {}; + }; +} diff --git a/lib/tests/modules/define-variant.nix b/lib/tests/modules/define-variant.nix new file mode 100644 index 0000000000000..423cb0e37cb5f --- /dev/null +++ b/lib/tests/modules/define-variant.nix @@ -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); + }; +} |