···956 use = id;
957 };
95800000000000000000000959 doRename = { from, to, visible, warn, use, withPriority ? true }:
960 { config, options, ... }:
961 let
···956 use = id;
957 };
958959+ /* mkDerivedConfig : Option a -> (a -> Definition b) -> Definition b
960+961+ Create config definitions with the same priority as the definition of another option.
962+ This should be used for option definitions where one option sets the value of another as a convenience.
963+ For instance a config file could be set with a `text` or `source` option, where text translates to a `source`
964+ value using `mkDerivedConfig options.text (pkgs.writeText "filename.conf")`.
965+966+ It takes care of setting the right priority using `mkOverride`.
967+ */
968+ # TODO: make the module system error message include information about `opt` in
969+ # error messages about conflicts. E.g. introduce a variation of `mkOverride` which
970+ # adds extra location context to the definition object. This will allow context to be added
971+ # to all messages that report option locations "this value was derived from <full option name>
972+ # which was defined in <locations>". It can provide a trace of options that contributed
973+ # to definitions.
974+ mkDerivedConfig = opt: f:
975+ mkOverride
976+ (opt.highestPrio or defaultPriority)
977+ (f opt.value);
978+979 doRename = { from, to, visible, warn, use, withPriority ? true }:
980 { config, options, ... }:
981 let