lib.modules: add mkDerivedConfig
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`.
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user