diff --git a/lib/modules.nix b/lib/modules.nix index 290b9ce0b698..ad71209a62a3 100644 --- a/lib/modules.nix +++ b/lib/modules.nix @@ -258,6 +258,7 @@ let specialArgs ; _class = class; + _prefix = prefix; } // specialArgs ); diff --git a/lib/tests/modules.sh b/lib/tests/modules.sh index d0f25c283dcb..d7006d9c58fc 100755 --- a/lib/tests/modules.sh +++ b/lib/tests/modules.sh @@ -352,6 +352,9 @@ checkConfigOutput '^"submodule"$' options.submodule.type.description ./declare-s ## Paths should be allowed as values and work as expected checkConfigOutput '^true$' config.submodule.enable ./declare-submoduleWith-path.nix +## _prefix module argument is available at import time and contains the prefix +checkConfigOutput '^true$' config.foo.ok ./prefix-module-argument.nix + ## deferredModule # default module is merged into nodes.foo checkConfigOutput '"beta"' config.nodes.foo.settingsDict.c ./deferred-module.nix diff --git a/lib/tests/modules/prefix-module-argument.nix b/lib/tests/modules/prefix-module-argument.nix new file mode 100644 index 000000000000..2cb854341a22 --- /dev/null +++ b/lib/tests/modules/prefix-module-argument.nix @@ -0,0 +1,17 @@ +{ lib, ... }: +{ + options.foo = lib.mkOption { + type = lib.types.submodule { }; + default = { }; + }; + + config = { + foo = + { _prefix, ... }: + assert _prefix == [ "foo" ]; + { + options.ok = lib.mkOption { }; + config.ok = true; + }; + }; +}