diff options
author | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2015-07-30 13:36:57 +0200 |
---|---|---|
committer | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2015-07-30 13:44:50 +0200 |
commit | f463d2490322a7a7e41634bbf23fc9cbdbdb9fae (patch) | |
tree | 3a7c53aeccc5d075999b34264db969d519815fcd /lib/modules.nix | |
parent | d61e1b24e6d280ab596abca0da2b33293eaaeef6 (diff) |
Add read-only options
These are options that can have only one definition, regardless of
priority.
Diffstat (limited to 'lib/modules.nix')
-rw-r--r-- | lib/modules.nix | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/lib/modules.nix b/lib/modules.nix index d7037abfbef0..50827e18f105 100644 --- a/lib/modules.nix +++ b/lib/modules.nix @@ -261,11 +261,16 @@ rec { evalOptionValue = loc: opt: defs: let # Add in the default value for this option, if any. - defs' = (optional (opt ? default) - { file = head opt.declarations; value = mkOptionDefault opt.default; }) ++ defs; + defs' = + (optional (opt ? default) + { file = head opt.declarations; value = mkOptionDefault opt.default; }) ++ defs; # Handle properties, check types, and merge everything together. - res = mergeDefinitions loc opt.type defs'; + res = + if opt.readOnly or false && length defs' > 1 then + throw "The option `${showOption loc}' is read-only, but it's set multiple times." + else + mergeDefinitions loc opt.type defs'; # Check whether the option is defined, and apply the ‘apply’ # function to the merged value. This allows options to yield a |