diff --git a/lib/modules.nix b/lib/modules.nix index f1125aca0a352..e9fc1007fc20b 100644 --- a/lib/modules.nix +++ b/lib/modules.nix @@ -138,7 +138,7 @@ rec { # support for that, in turn it's lazy in its values. This means e.g. # a `_module.args.pkgs = import (fetchTarball { ... }) {}` won't # start a download when `pkgs` wasn't evaluated. - type = types.lazyAttrsOf types.unspecified; + type = types.lazyAttrsOf types.raw; internal = true; description = "Arguments passed to each module."; }; diff --git a/lib/tests/modules.sh b/lib/tests/modules.sh index 88d152d39352a..a1c592cf4ef0e 100755 --- a/lib/tests/modules.sh +++ b/lib/tests/modules.sh @@ -293,6 +293,12 @@ checkConfigOutput "{ }" config.submodule.a ./emptyValues.nix checkConfigError 'The option .int.a. is used but not defined' config.int.a ./emptyValues.nix checkConfigError 'The option .nonEmptyList.a. is used but not defined' config.nonEmptyList.a ./emptyValues.nix +## types.raw +checkConfigOutput "{ foo = ; }" config.unprocessedNesting ./raw.nix +checkConfigOutput "10" config.processedToplevel ./raw.nix +checkConfigError "The option .multiple. is defined multiple times" config.multiple ./raw.nix +checkConfigOutput "bar" config.priorities ./raw.nix + cat < + + + types.raw + + + + A type which doesn’t do any checking, merging or nested + evaluation. It accepts a single arbitrary value that is not + recursed into, making it useful for values coming from + outside the module system, such as package sets or arbitrary + data. Options of this type are still evaluated according to + priorities and conditionals, so mkForce, + mkIf and co. still work on the option + value itself, but not for any value nested within it. This + type should only be used when checking, merging and nested + evaluation are not desirable. + + + types.attrs