nixpkgs/modules/rename.nix
Nicolas Pierron 7568587e88 Add a renaming module. This module introduce the rename function to
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=17484
2009-09-28 18:26:13 +00:00

42 lines
1.1 KiB
Nix

{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.