From e212e07cf6aac9d9e1c46db34b17fd16be2399c3 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 15 Jun 2015 18:04:27 +0200 Subject: [PATCH] Make types.bool complain on conflicting definitions Previously, conflicting definitions would merge to "true". Now they give an error, e.g. error: The option `hardware.enableAllFirmware' has conflicting definitions, in `/etc/nixos/configurations/misc/eelco/stuff.nix' and `/etc/nixos/configurations/misc/eelco/mandark.nix'. --- lib/options.nix | 9 +++++++++ lib/types.nix | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/options.nix b/lib/options.nix index a30397c7216..bfc5b5fa2ae 100644 --- a/lib/options.nix +++ b/lib/options.nix @@ -65,6 +65,15 @@ rec { throw "The unique option `${showOption loc}' is defined multiple times, in ${showFiles (getFiles defs)}." else (head defs).value; + /* "Merge" option definitions by checking that they all have the same value. */ + mergeEqualOption = loc: defs: + if defs == [] then abort "This case should never happen." + else fold (def: val: + if def.value != val then + throw "The option `${showOption loc}' has conflicting definitions, in ${showFiles (getFiles defs)}." + else + val) (head defs).value defs; + getValues = map (x: x.value); getFiles = map (x: x.file); diff --git a/lib/types.nix b/lib/types.nix index f22c7661634..0a54a5598f1 100644 --- a/lib/types.nix +++ b/lib/types.nix @@ -54,7 +54,7 @@ rec { bool = mkOptionType { name = "boolean"; check = isBool; - merge = loc: fold (x: y: x.value || y) false; + merge = mergeEqualOption; }; int = mkOptionType {