1{ config, lib, options, ... }:
2
3with lib;
4
5let
6
7 alias = from: to: rename {
8 inherit from to;
9 name = "Alias";
10 use = id;
11 define = id;
12 visible = true;
13 };
14
15 # warn option was renamed
16 obsolete = from: to: rename {
17 inherit from to;
18 name = "Obsolete name";
19 use = x: builtins.trace "Obsolete option `${showOption from}' is used. It was renamed to `${showOption to}'." x;
20 define = x: builtins.trace "Obsolete option `${showOption from}' is used. It was renamed to `${showOption to}'." x;
21 };
22
23 # abort if deprecated option is used
24 deprecated = from: to: rename {
25 inherit from to;
26 name = "Deprecated name";
27 use = x: abort "Deprecated option `${showOption from}' is used. It was renamed to `${showOption to}'.";
28 define = x: abort "Deprecated option `${showOption from}' is used. It was renamed to `${showOption to}'.";
29 };
30
31 showOption = concatStringsSep ".";
32
33 zipModules = list:
34 zipAttrsWith (n: v:
35 if tail v != [] then
36 if all (o: isAttrs o && o ? _type) v then mkMerge v
37 else if n == "_type" then head v
38 else if n == "warnings" then concatLists v
39 else if n == "description" || n == "apply" then
40 abort "Cannot rename an option to multiple options."
41 else zipModules v
42 else head v
43 ) list;
44
45 rename = { from, to, name, use, define, visible ? false }:
46 let
47 setTo = setAttrByPath to;
48 setFrom = setAttrByPath from;
49 toOf = attrByPath to
50 (abort "Renaming error: option `${showOption to}' does not exists.");
51 fromOf = attrByPath from
52 (abort "Internal error: option `${showOption from}' should be declared.");
53 in
54 [ { options = setFrom (mkOption {
55 description = "${name} of <option>${showOption to}</option>.";
56 apply = x: use (toOf config);
57 inherit visible;
58 });
59
60 config = setTo (mkAliasAndWrapDefinitions define (fromOf options));
61 }
62 ];
63
64 obsolete' = option: singleton
65 { options = setAttrByPath option (mkOption {
66 default = null;
67 visible = false;
68 });
69 config.warnings = optional (getAttrFromPath option config != null)
70 "The option `${showOption option}' defined in your configuration no longer has any effect; please remove it.";
71 };
72
73in zipModules ([]
74
75++ obsolete [ "environment" "x11Packages" ] [ "environment" "systemPackages" ]
76++ obsolete [ "environment" "enableBashCompletion" ] [ "programs" "bash" "enableCompletion" ]
77++ obsolete [ "environment" "nix" ] [ "nix" "package" ]
78++ obsolete [ "fonts" "enableFontConfig" ] [ "fonts" "fontconfig" "enable" ]
79++ obsolete [ "fonts" "extraFonts" ] [ "fonts" "fonts" ]
80++ alias [ "users" "extraUsers" ] [ "users" "users" ]
81++ alias [ "users" "extraGroups" ] [ "users" "groups" ]
82
83++ obsolete [ "security" "extraSetuidPrograms" ] [ "security" "setuidPrograms" ]
84++ obsolete [ "networking" "enableWLAN" ] [ "networking" "wireless" "enable" ]
85++ obsolete [ "networking" "enableRT73Firmware" ] [ "networking" "enableRalinkFirmware" ]
86
87# FIXME: Remove these eventually.
88++ obsolete [ "boot" "systemd" "sockets" ] [ "systemd" "sockets" ]
89++ obsolete [ "boot" "systemd" "targets" ] [ "systemd" "targets" ]
90++ obsolete [ "boot" "systemd" "services" ] [ "systemd" "services" ]
91
92# Old Grub-related options.
93++ obsolete [ "boot" "copyKernels" ] [ "boot" "loader" "grub" "copyKernels" ]
94++ obsolete [ "boot" "extraGrubEntries" ] [ "boot" "loader" "grub" "extraEntries" ]
95++ obsolete [ "boot" "extraGrubEntriesBeforeNixos" ] [ "boot" "loader" "grub" "extraEntriesBeforeNixOS" ]
96++ obsolete [ "boot" "grubDevice" ] [ "boot" "loader" "grub" "device" ]
97++ obsolete [ "boot" "bootMount" ] [ "boot" "loader" "grub" "bootDevice" ]
98++ obsolete [ "boot" "grubSplashImage" ] [ "boot" "loader" "grub" "splashImage" ]
99
100++ obsolete [ "boot" "initrd" "extraKernelModules" ] [ "boot" "initrd" "kernelModules" ]
101++ obsolete [ "boot" "extraKernelParams" ] [ "boot" "kernelParams" ]
102
103# smartd
104++ obsolete [ "services" "smartd" "deviceOpts" ] [ "services" "smartd" "defaults" "monitored" ]
105
106# OpenSSH
107++ obsolete [ "services" "sshd" "ports" ] [ "services" "openssh" "ports" ]
108++ alias [ "services" "sshd" "enable" ] [ "services" "openssh" "enable" ]
109++ obsolete [ "services" "sshd" "allowSFTP" ] [ "services" "openssh" "allowSFTP" ]
110++ obsolete [ "services" "sshd" "forwardX11" ] [ "services" "openssh" "forwardX11" ]
111++ obsolete [ "services" "sshd" "gatewayPorts" ] [ "services" "openssh" "gatewayPorts" ]
112++ obsolete [ "services" "sshd" "permitRootLogin" ] [ "services" "openssh" "permitRootLogin" ]
113++ obsolete [ "services" "xserver" "startSSHAgent" ] [ "services" "xserver" "startOpenSSHAgent" ]
114++ obsolete [ "services" "xserver" "startOpenSSHAgent" ] [ "programs" "ssh" "startAgent" ]
115++ alias [ "services" "openssh" "knownHosts" ] [ "programs" "ssh" "knownHosts" ]
116
117# VirtualBox
118++ obsolete [ "services" "virtualbox" "enable" ] [ "virtualisation" "virtualbox" "guest" "enable" ]
119++ obsolete [ "services" "virtualboxGuest" "enable" ] [ "virtualisation" "virtualbox" "guest" "enable" ]
120++ obsolete [ "programs" "virtualbox" "enable" ] [ "virtualisation" "virtualbox" "host" "enable" ]
121++ obsolete [ "programs" "virtualbox" "addNetworkInterface" ] [ "virtualisation" "virtualbox" "host" "addNetworkInterface" ]
122++ obsolete [ "programs" "virtualbox" "enableHardening" ] [ "virtualisation" "virtualbox" "host" "enableHardening" ]
123++ obsolete [ "services" "virtualboxHost" "enable" ] [ "virtualisation" "virtualbox" "host" "enable" ]
124++ obsolete [ "services" "virtualboxHost" "addNetworkInterface" ] [ "virtualisation" "virtualbox" "host" "addNetworkInterface" ]
125++ obsolete [ "services" "virtualboxHost" "enableHardening" ] [ "virtualisation" "virtualbox" "host" "enableHardening" ]
126
127# Tarsnap
128++ obsolete [ "services" "tarsnap" "config" ] [ "services" "tarsnap" "archives" ]
129
130# proxy
131++ obsolete [ "nix" "proxy" ] [ "networking" "proxy" "default" ]
132
133# KDE
134++ deprecated [ "kde" "extraPackages" ] [ "environment" "systemPackages" ]
135++ obsolete [ "environment" "kdePackages" ] [ "environment" "systemPackages" ]
136
137# Multiple efi bootloaders now
138++ obsolete [ "boot" "loader" "efi" "efibootmgr" "enable" ] [ "boot" "loader" "efi" "canTouchEfiVariables" ]
139
140# NixOS environment changes
141# !!! this hardcodes bash, could we detect from config which shell is actually used?
142++ obsolete [ "environment" "promptInit" ] [ "programs" "bash" "promptInit" ]
143
144++ obsolete [ "services" "xserver" "driSupport" ] [ "hardware" "opengl" "driSupport" ]
145++ obsolete [ "services" "xserver" "driSupport32Bit" ] [ "hardware" "opengl" "driSupport32Bit" ]
146++ obsolete [ "services" "xserver" "s3tcSupport" ] [ "hardware" "opengl" "s3tcSupport" ]
147++ obsolete [ "hardware" "opengl" "videoDrivers" ] [ "services" "xserver" "videoDrivers" ]
148
149++ obsolete [ "services" "mysql55" ] [ "services" "mysql" ]
150
151++ alias [ "environment" "checkConfigurationOptions" ] [ "_module" "check" ]
152
153# XBMC
154++ obsolete [ "services" "xserver" "windowManager" "xbmc" ] [ "services" "xserver" "desktopManager" "kodi" ]
155++ obsolete [ "services" "xserver" "desktopManager" "xbmc" ] [ "services" "xserver" "desktopManager" "kodi" ]
156
157# DNSCrypt-proxy
158++ obsolete [ "services" "dnscrypt-proxy" "port" ] [ "services" "dnscrypt-proxy" "localPort" ]
159
160# Options that are obsolete and have no replacement.
161++ obsolete' [ "boot" "loader" "grub" "bootDevice" ]
162++ obsolete' [ "boot" "initrd" "luks" "enable" ]
163++ obsolete' [ "programs" "bash" "enable" ]
164++ obsolete' [ "services" "samba" "defaultShare" ]
165++ obsolete' [ "services" "syslog-ng" "serviceName" ]
166++ obsolete' [ "services" "syslog-ng" "listenToJournal" ]
167++ obsolete' [ "ec2" "metadata" ]
168++ obsolete' [ "services" "openvpn" "enable" ]
169
170)