fetch definitions of oldest options and to add them inside the new option. Properties are still valid and will not be affected by the renaming. e.g: with: rename alias "foo.bar" to "baz.quz" and with the following module: { foo.bar = (mkOverride 10 {}) 42; baz.quz = 21; } the result of baz.quz would be 42 because the priority is still working after the renaming. svn path=/nixos/trunk/; revision=17484wip/yesman
parent
bd41c01bfe
commit
7568587e88
@ -0,0 +1,41 @@ |
||||
{pkgs, options, config, ...}: |
||||
|
||||
|
||||
let |
||||
to = throw "This is just a dummy keyword"; |
||||
alias = { name = "Alias"; }; |
||||
obsolete = { name = "Obsolete name"; }; |
||||
|
||||
zipModules = list: with pkgs.lib; |
||||
zip (n: v: |
||||
if tail v != [] then zipModules v else head v |
||||
) list; |
||||
|
||||
rename = fromStatus: from: keyword: to: with pkgs.lib; |
||||
let |
||||
setTo = setAttrByPath (splitString "." to); |
||||
setFrom = setAttrByPath (splitString "." from); |
||||
toOf = attrByPath (splitString "." to) (abort "bad renaming"); |
||||
fromOf = attrByPath (splitString "." from) (abort "IE: renaming error"); |
||||
in |
||||
[{ |
||||
options = setFrom (mkOption { |
||||
description = "${fromStatus.name} of <option>${to}</option>."; |
||||
apply = x: toOf config; |
||||
}); |
||||
}] ++ |
||||
[{ |
||||
options = setTo (mkOption { |
||||
extraConfigs = map (def: def.value) (fromOf options).definitions; |
||||
}); |
||||
}]; |
||||
|
||||
in zipModules ([] |
||||
|
||||
# usage example: |
||||
# ++ rename alias "services.xserver.slim.theme" to "services.xserver.displayManager.slim.theme" |
||||
# ++ rename obsolete "environment.extraPackages" to "environment.systemPackages" |
||||
|
||||
|
||||
|
||||
) # do not add renaming after this. |
Loading…
Reference in new issue