diff options
author | Robert Hensing <roberth@users.noreply.github.com> | 2022-01-25 14:13:24 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-25 14:13:24 +0100 |
commit | 8919495cacf6411bde7b9c14bc4a9d12142a7356 (patch) | |
tree | ab1e8c88e5374544563eff047b4ba3dedebfeefd /lib | |
parent | 25dc5a5d2dca644390f23ad376119d62468bf57b (diff) | |
parent | 48dbe26229124114f26cfe0eec32866a47888452 (diff) | |
download | nixpkgs-8919495cacf6411bde7b9c14bc4a9d12142a7356.tar nixpkgs-8919495cacf6411bde7b9c14bc4a9d12142a7356.tar.gz nixpkgs-8919495cacf6411bde7b9c14bc4a9d12142a7356.tar.bz2 nixpkgs-8919495cacf6411bde7b9c14bc4a9d12142a7356.tar.lz nixpkgs-8919495cacf6411bde7b9c14bc4a9d12142a7356.tar.xz nixpkgs-8919495cacf6411bde7b9c14bc4a9d12142a7356.tar.zst nixpkgs-8919495cacf6411bde7b9c14bc4a9d12142a7356.zip |
Merge pull request #156503 from hercules-ci/nixos-add-system.build-options
nixos: Add `system.build.`{`toplevel`,`installBootLoader`}, improve error message
Diffstat (limited to 'lib')
-rw-r--r-- | lib/default.nix | 5 | ||||
-rw-r--r-- | lib/options.nix | 12 | ||||
-rw-r--r-- | lib/types.nix | 15 |
3 files changed, 24 insertions, 8 deletions
diff --git a/lib/default.nix b/lib/default.nix index 2dfe62e82a8..26842253880 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -122,8 +122,9 @@ let mkRenamedOptionModule mkMergedOptionModule mkChangedOptionModule mkAliasOptionModule mkDerivedConfig doRename; inherit (self.options) isOption mkEnableOption mkSinkUndeclaredOptions - mergeDefaultOption mergeOneOption mergeEqualOption getValues - getFiles optionAttrSetToDocList optionAttrSetToDocList' + mergeDefaultOption mergeOneOption mergeEqualOption mergeUniqueOption + getValues getFiles + optionAttrSetToDocList optionAttrSetToDocList' scrubOptionValue literalExpression literalExample literalDocBook showOption showFiles unknownModule mkOption; inherit (self.types) isType setType defaultTypeMerge defaultFunctor diff --git a/lib/options.nix b/lib/options.nix index 794ca5e3394..627aac24d2f 100644 --- a/lib/options.nix +++ b/lib/options.nix @@ -172,11 +172,13 @@ rec { else if all isInt list && all (x: x == head list) list then head list else throw "Cannot merge definitions of `${showOption loc}'. Definition values:${showDefs defs}"; - mergeOneOption = loc: defs: - if defs == [] then abort "This case should never happen." - else if length defs != 1 then - throw "The unique option `${showOption loc}' is defined multiple times. Definition values:${showDefs defs}" - else (head defs).value; + mergeOneOption = mergeUniqueOption { message = ""; }; + + mergeUniqueOption = { message }: loc: defs: + if length defs == 1 + then (head defs).value + else assert length defs > 1; + throw "The option `${showOption loc}' is defined multiple times.\n${message}\nDefinition values:${showDefs defs}"; /* "Merge" option definitions by checking that they all have the same value. */ mergeEqualOption = loc: defs: diff --git a/lib/types.nix b/lib/types.nix index cc3ac5fdf6f..f2f9b2bca98 100644 --- a/lib/types.nix +++ b/lib/types.nix @@ -32,7 +32,6 @@ let last length tail - unique ; inherit (lib.attrsets) attrNames @@ -48,6 +47,7 @@ let mergeDefaultOption mergeEqualOption mergeOneOption + mergeUniqueOption showFiles showOption ; @@ -470,6 +470,18 @@ rec { nestedTypes.elemType = elemType; }; + unique = { message }: type: mkOptionType rec { + name = "unique"; + inherit (type) description check; + merge = mergeUniqueOption { inherit message; }; + emptyValue = type.emptyValue; + getSubOptions = type.getSubOptions; + getSubModules = type.getSubModules; + substSubModules = m: uniq (type.substSubModules m); + functor = (defaultFunctor name) // { wrapped = type; }; + nestedTypes.elemType = type; + }; + # Null or value of ... nullOr = elemType: mkOptionType rec { name = "nullOr"; @@ -599,6 +611,7 @@ rec { # A value from a set of allowed ones. enum = values: let + inherit (lib.lists) unique; show = v: if builtins.isString v then ''"${v}"'' else if builtins.isInt v then builtins.toString v |