Unverified Commit d1983226 authored by Johannes Kirschbauer's avatar Johannes Kirschbauer Committed by GitHub
Browse files

lib/modules: disallow setting config, options in specialArgs of evalModules (#388834)

parents b5b242a7 b74ffe1c
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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."
+3 −0
Original line number Diff line number Diff line
@@ -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
+18 −0
Original line number Diff line number Diff line
{ lib, ... }:
{
  config = {
    _module.freeformType = lib.types.anything;

    fail = lib.evalModules {
      specialArgs = {
        config = { };
      };
      modules = [
        {
          options.a = lib.mkEnableOption "a";
          config.a = true;
        }
      ];
    };
  };
}
+18 −0
Original line number Diff line number Diff line
{ lib, ... }:
{
  config = {
    _module.freeformType = lib.types.anything;

    fail = lib.evalModules {
      specialArgs = {
        options = { };
      };
      modules = [
        {
          options.a = lib.mkEnableOption "a";
          config.a = true;
        }
      ];
    };
  };
}