summaryrefslogtreecommitdiffstats
path: root/lib/modules.nix
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2015-07-30 13:36:57 +0200
committerEelco Dolstra <eelco.dolstra@logicblox.com>2015-07-30 13:44:50 +0200
commitf463d2490322a7a7e41634bbf23fc9cbdbdb9fae (patch)
tree3a7c53aeccc5d075999b34264db969d519815fcd /lib/modules.nix
parentd61e1b24e6d280ab596abca0da2b33293eaaeef6 (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.nix11
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