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
This commit is contained in:
Nicolas Pierron 2009-09-28 18:26:13 +00:00
parent bd41c01bfe
commit 7568587e88
2 changed files with 42 additions and 0 deletions

View file

@ -27,6 +27,7 @@
./programs/pwdutils/pwdutils.nix
./programs/ssh.nix
./programs/ssmtp.nix
./rename.nix
./security/consolekit.nix
./security/pam.nix
./security/policykit.nix

41
modules/rename.nix Normal file
View file

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