diff options
Diffstat (limited to 'lib/modules.nix')
-rw-r--r-- | lib/modules.nix | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/lib/modules.nix b/lib/modules.nix index d9b4000e56bdd..92ddc8c5bc70c 100644 --- a/lib/modules.nix +++ b/lib/modules.nix @@ -956,6 +956,26 @@ rec { use = id; }; + /* mkDerivedConfig : Option a -> (a -> Definition b) -> Definition b + + Create config definitions with the same priority as the definition of another option. + This should be used for option definitions where one option sets the value of another as a convenience. + For instance a config file could be set with a `text` or `source` option, where text translates to a `source` + value using `mkDerivedConfig options.text (pkgs.writeText "filename.conf")`. + + It takes care of setting the right priority using `mkOverride`. + */ + # TODO: make the module system error message include information about `opt` in + # error messages about conflicts. E.g. introduce a variation of `mkOverride` which + # adds extra location context to the definition object. This will allow context to be added + # to all messages that report option locations "this value was derived from <full option name> + # which was defined in <locations>". It can provide a trace of options that contributed + # to definitions. + mkDerivedConfig = opt: f: + mkOverride + (opt.highestPrio or defaultPriority) + (f opt.value); + doRename = { from, to, visible, warn, use, withPriority ? true }: { config, options, ... }: let |