diff --git a/lib/modules.nix b/lib/modules.nix index 935ef4baabad..ef6a2339895a 100644 --- a/lib/modules.nix +++ b/lib/modules.nix @@ -5,6 +5,7 @@ let addErrorContext all any + assertMsg attrByPath attrNames catAttrs @@ -101,6 +102,8 @@ let , # This would be remove in the future, Prefer _module.check option instead. check ? true }: + assert assertMsg (!specialArgs?config) "Do not set config in the specialArgs argument to evalModules."; + assert assertMsg (!specialArgs?options) "Do not set options in the specialArgs argument to evalModules."; let withWarnings = x: warnIf (evalModulesArgs?args) "The args argument to evalModules is deprecated. Please set config._module.args instead." diff --git a/lib/tests/modules.sh b/lib/tests/modules.sh index 1505782547f5..60f7536d0d43 100755 --- a/lib/tests/modules.sh +++ b/lib/tests/modules.sh @@ -137,6 +137,9 @@ checkConfigOutput '^true$' config.result ./module-argument-default.nix # gvariant checkConfigOutput '^true$' config.assertion ./gvariant.nix +# specialArgs checks for evalModules +checkConfigError 'Do not set config in the specialArgs argument to evalModules\.' config.fail.config ./specialArgs-config.nix +checkConfigError 'Do not set options in the specialArgs argument to evalModules\.' config.fail.config ./specialArgs-options.nix checkConfigOutput '"ok"' config.result ./specialArgs-lib.nix # https://github.com/NixOS/nixpkgs/pull/131205 diff --git a/lib/tests/modules/specialArgs-config.nix b/lib/tests/modules/specialArgs-config.nix new file mode 100644 index 000000000000..a392a870a1ee --- /dev/null +++ b/lib/tests/modules/specialArgs-config.nix @@ -0,0 +1,18 @@ +{ lib, ... }: +{ + config = { + _module.freeformType = lib.types.anything; + + fail = lib.evalModules { + specialArgs = { + config = { }; + }; + modules = [ + { + options.a = lib.mkEnableOption "a"; + config.a = true; + } + ]; + }; + }; +} diff --git a/lib/tests/modules/specialArgs-options.nix b/lib/tests/modules/specialArgs-options.nix new file mode 100644 index 000000000000..1a84770c9ef6 --- /dev/null +++ b/lib/tests/modules/specialArgs-options.nix @@ -0,0 +1,18 @@ +{ lib, ... }: +{ + config = { + _module.freeformType = lib.types.anything; + + fail = lib.evalModules { + specialArgs = { + options = { }; + }; + modules = [ + { + options.a = lib.mkEnableOption "a"; + config.a = true; + } + ]; + }; + }; +}