Option aliases/deprecations can now be declared in any NixOS module, not just in nixos/modules/rename.nix. This is more modular (since it allows for example grub-related aliases to be declared in the grub module), and allows aliases outside of NixOS (e.g. in NixOps modules). The syntax is a bit funky. Ideally we'd have something like: options = { foo.bar.newOption = mkOption { ... }; foo.bar.oldOption = mkAliasOption [ "foo" "bar" "newOption" ]; }; but that's not possible because options cannot define values in *other* options - you need to have a "config" for that. So instead we have functions that return a *module*: mkRemovedOptionModule, mkRenamedOptionModule and mkAliasOptionModule. These can be used via "imports", e.g. imports = [ (mkAliasOptionModule [ "foo" "bar" "oldOption" ] [ "foo" "bar" "newOption" ]); ]; As an added bonus, deprecation warnings now show the file name of the offending module. Fixes #10385.wip/yesman
parent
7b001ed68a
commit
5f077e2296
@ -1,170 +1,88 @@ |
||||
{ config, lib, options, ... }: |
||||
{ lib, ... }: |
||||
|
||||
with lib; |
||||
|
||||
let |
||||
|
||||
alias = from: to: rename { |
||||
inherit from to; |
||||
name = "Alias"; |
||||
use = id; |
||||
define = id; |
||||
visible = true; |
||||
}; |
||||
|
||||
# warn option was renamed |
||||
obsolete = from: to: rename { |
||||
inherit from to; |
||||
name = "Obsolete name"; |
||||
use = x: builtins.trace "Obsolete option `${showOption from}' is used. It was renamed to `${showOption to}'." x; |
||||
define = x: builtins.trace "Obsolete option `${showOption from}' is used. It was renamed to `${showOption to}'." x; |
||||
}; |
||||
|
||||
# abort if deprecated option is used |
||||
deprecated = from: to: rename { |
||||
inherit from to; |
||||
name = "Deprecated name"; |
||||
use = x: abort "Deprecated option `${showOption from}' is used. It was renamed to `${showOption to}'."; |
||||
define = x: abort "Deprecated option `${showOption from}' is used. It was renamed to `${showOption to}'."; |
||||
}; |
||||
|
||||
showOption = concatStringsSep "."; |
||||
|
||||
zipModules = list: |
||||
zipAttrsWith (n: v: |
||||
if tail v != [] then |
||||
if all (o: isAttrs o && o ? _type) v then mkMerge v |
||||
else if n == "_type" then head v |
||||
else if n == "warnings" then concatLists v |
||||
else if n == "description" || n == "apply" then |
||||
abort "Cannot rename an option to multiple options." |
||||
else zipModules v |
||||
else head v |
||||
) list; |
||||
|
||||
rename = { from, to, name, use, define, visible ? false }: |
||||
let |
||||
setTo = setAttrByPath to; |
||||
setFrom = setAttrByPath from; |
||||
toOf = attrByPath to |
||||
(abort "Renaming error: option `${showOption to}' does not exists."); |
||||
fromOf = attrByPath from |
||||
(abort "Internal error: option `${showOption from}' should be declared."); |
||||
in |
||||
[ { options = setFrom (mkOption { |
||||
description = "${name} of <option>${showOption to}</option>."; |
||||
apply = x: use (toOf config); |
||||
inherit visible; |
||||
}); |
||||
|
||||
config = setTo (mkAliasAndWrapDefinitions define (fromOf options)); |
||||
} |
||||
]; |
||||
|
||||
obsolete' = option: singleton |
||||
{ options = setAttrByPath option (mkOption { |
||||
default = null; |
||||
visible = false; |
||||
}); |
||||
config.warnings = optional (getAttrFromPath option config != null) |
||||
"The option `${showOption option}' defined in your configuration no longer has any effect; please remove it."; |
||||
}; |
||||
|
||||
in zipModules ([] |
||||
|
||||
++ obsolete [ "environment" "x11Packages" ] [ "environment" "systemPackages" ] |
||||
++ obsolete [ "environment" "enableBashCompletion" ] [ "programs" "bash" "enableCompletion" ] |
||||
++ obsolete [ "environment" "nix" ] [ "nix" "package" ] |
||||
++ obsolete [ "fonts" "enableFontConfig" ] [ "fonts" "fontconfig" "enable" ] |
||||
++ obsolete [ "fonts" "extraFonts" ] [ "fonts" "fonts" ] |
||||
++ alias [ "users" "extraUsers" ] [ "users" "users" ] |
||||
++ alias [ "users" "extraGroups" ] [ "users" "groups" ] |
||||
|
||||
++ obsolete [ "security" "extraSetuidPrograms" ] [ "security" "setuidPrograms" ] |
||||
++ obsolete [ "networking" "enableWLAN" ] [ "networking" "wireless" "enable" ] |
||||
++ obsolete [ "networking" "enableRT73Firmware" ] [ "networking" "enableRalinkFirmware" ] |
||||
|
||||
# FIXME: Remove these eventually. |
||||
++ obsolete [ "boot" "systemd" "sockets" ] [ "systemd" "sockets" ] |
||||
++ obsolete [ "boot" "systemd" "targets" ] [ "systemd" "targets" ] |
||||
++ obsolete [ "boot" "systemd" "services" ] [ "systemd" "services" ] |
||||
|
||||
# Old Grub-related options. |
||||
++ obsolete [ "boot" "copyKernels" ] [ "boot" "loader" "grub" "copyKernels" ] |
||||
++ obsolete [ "boot" "extraGrubEntries" ] [ "boot" "loader" "grub" "extraEntries" ] |
||||
++ obsolete [ "boot" "extraGrubEntriesBeforeNixos" ] [ "boot" "loader" "grub" "extraEntriesBeforeNixOS" ] |
||||
++ obsolete [ "boot" "grubDevice" ] [ "boot" "loader" "grub" "device" ] |
||||
++ obsolete [ "boot" "bootMount" ] [ "boot" "loader" "grub" "bootDevice" ] |
||||
++ obsolete [ "boot" "grubSplashImage" ] [ "boot" "loader" "grub" "splashImage" ] |
||||
|
||||
++ obsolete [ "boot" "initrd" "extraKernelModules" ] [ "boot" "initrd" "kernelModules" ] |
||||
++ obsolete [ "boot" "extraKernelParams" ] [ "boot" "kernelParams" ] |
||||
|
||||
# smartd |
||||
++ obsolete [ "services" "smartd" "deviceOpts" ] [ "services" "smartd" "defaults" "monitored" ] |
||||
|
||||
# OpenSSH |
||||
++ obsolete [ "services" "sshd" "ports" ] [ "services" "openssh" "ports" ] |
||||
++ alias [ "services" "sshd" "enable" ] [ "services" "openssh" "enable" ] |
||||
++ obsolete [ "services" "sshd" "allowSFTP" ] [ "services" "openssh" "allowSFTP" ] |
||||
++ obsolete [ "services" "sshd" "forwardX11" ] [ "services" "openssh" "forwardX11" ] |
||||
++ obsolete [ "services" "sshd" "gatewayPorts" ] [ "services" "openssh" "gatewayPorts" ] |
||||
++ obsolete [ "services" "sshd" "permitRootLogin" ] [ "services" "openssh" "permitRootLogin" ] |
||||
++ obsolete [ "services" "xserver" "startSSHAgent" ] [ "services" "xserver" "startOpenSSHAgent" ] |
||||
++ obsolete [ "services" "xserver" "startOpenSSHAgent" ] [ "programs" "ssh" "startAgent" ] |
||||
++ alias [ "services" "openssh" "knownHosts" ] [ "programs" "ssh" "knownHosts" ] |
||||
|
||||
# VirtualBox |
||||
++ obsolete [ "services" "virtualbox" "enable" ] [ "virtualisation" "virtualbox" "guest" "enable" ] |
||||
++ obsolete [ "services" "virtualboxGuest" "enable" ] [ "virtualisation" "virtualbox" "guest" "enable" ] |
||||
++ obsolete [ "programs" "virtualbox" "enable" ] [ "virtualisation" "virtualbox" "host" "enable" ] |
||||
++ obsolete [ "programs" "virtualbox" "addNetworkInterface" ] [ "virtualisation" "virtualbox" "host" "addNetworkInterface" ] |
||||
++ obsolete [ "programs" "virtualbox" "enableHardening" ] [ "virtualisation" "virtualbox" "host" "enableHardening" ] |
||||
++ obsolete [ "services" "virtualboxHost" "enable" ] [ "virtualisation" "virtualbox" "host" "enable" ] |
||||
++ obsolete [ "services" "virtualboxHost" "addNetworkInterface" ] [ "virtualisation" "virtualbox" "host" "addNetworkInterface" ] |
||||
++ obsolete [ "services" "virtualboxHost" "enableHardening" ] [ "virtualisation" "virtualbox" "host" "enableHardening" ] |
||||
|
||||
# Tarsnap |
||||
++ obsolete [ "services" "tarsnap" "config" ] [ "services" "tarsnap" "archives" ] |
||||
|
||||
# proxy |
||||
++ obsolete [ "nix" "proxy" ] [ "networking" "proxy" "default" ] |
||||
|
||||
# KDE |
||||
++ deprecated [ "kde" "extraPackages" ] [ "environment" "systemPackages" ] |
||||
++ obsolete [ "environment" "kdePackages" ] [ "environment" "systemPackages" ] |
||||
|
||||
# Multiple efi bootloaders now |
||||
++ obsolete [ "boot" "loader" "efi" "efibootmgr" "enable" ] [ "boot" "loader" "efi" "canTouchEfiVariables" ] |
||||
|
||||
# NixOS environment changes |
||||
# !!! this hardcodes bash, could we detect from config which shell is actually used? |
||||
++ obsolete [ "environment" "promptInit" ] [ "programs" "bash" "promptInit" ] |
||||
|
||||
++ obsolete [ "services" "xserver" "driSupport" ] [ "hardware" "opengl" "driSupport" ] |
||||
++ obsolete [ "services" "xserver" "driSupport32Bit" ] [ "hardware" "opengl" "driSupport32Bit" ] |
||||
++ obsolete [ "services" "xserver" "s3tcSupport" ] [ "hardware" "opengl" "s3tcSupport" ] |
||||
++ obsolete [ "hardware" "opengl" "videoDrivers" ] [ "services" "xserver" "videoDrivers" ] |
||||
|
||||
++ obsolete [ "services" "mysql55" ] [ "services" "mysql" ] |
||||
|
||||
++ alias [ "environment" "checkConfigurationOptions" ] [ "_module" "check" ] |
||||
|
||||
# XBMC |
||||
++ obsolete [ "services" "xserver" "windowManager" "xbmc" ] [ "services" "xserver" "desktopManager" "kodi" ] |
||||
++ obsolete [ "services" "xserver" "desktopManager" "xbmc" ] [ "services" "xserver" "desktopManager" "kodi" ] |
||||
|
||||
# DNSCrypt-proxy |
||||
++ obsolete [ "services" "dnscrypt-proxy" "port" ] [ "services" "dnscrypt-proxy" "localPort" ] |
||||
|
||||
# Options that are obsolete and have no replacement. |
||||
++ obsolete' [ "boot" "loader" "grub" "bootDevice" ] |
||||
++ obsolete' [ "boot" "initrd" "luks" "enable" ] |
||||
++ obsolete' [ "programs" "bash" "enable" ] |
||||
++ obsolete' [ "services" "samba" "defaultShare" ] |
||||
++ obsolete' [ "services" "syslog-ng" "serviceName" ] |
||||
++ obsolete' [ "services" "syslog-ng" "listenToJournal" ] |
||||
++ obsolete' [ "ec2" "metadata" ] |
||||
++ obsolete' [ "services" "openvpn" "enable" ] |
||||
|
||||
) |
||||
{ |
||||
imports = [ |
||||
(mkRenamedOptionModule [ "environment" "x11Packages" ] [ "environment" "systemPackages" ]) |
||||
(mkRenamedOptionModule [ "environment" "enableBashCompletion" ] [ "programs" "bash" "enableCompletion" ]) |
||||
(mkRenamedOptionModule [ "environment" "nix" ] [ "nix" "package" ]) |
||||
(mkRenamedOptionModule [ "fonts" "enableFontConfig" ] [ "fonts" "fontconfig" "enable" ]) |
||||
(mkRenamedOptionModule [ "fonts" "extraFonts" ] [ "fonts" "fonts" ]) |
||||
|
||||
(mkRenamedOptionModule [ "security" "extraSetuidPrograms" ] [ "security" "setuidPrograms" ]) |
||||
(mkRenamedOptionModule [ "networking" "enableWLAN" ] [ "networking" "wireless" "enable" ]) |
||||
(mkRenamedOptionModule [ "networking" "enableRT73Firmware" ] [ "networking" "enableRalinkFirmware" ]) |
||||
|
||||
# Old Grub-related options. |
||||
(mkRenamedOptionModule [ "boot" "initrd" "extraKernelModules" ] [ "boot" "initrd" "kernelModules" ]) |
||||
(mkRenamedOptionModule [ "boot" "extraKernelParams" ] [ "boot" "kernelParams" ]) |
||||
|
||||
# smartd |
||||
(mkRenamedOptionModule [ "services" "smartd" "deviceOpts" ] [ "services" "smartd" "defaults" "monitored" ]) |
||||
|
||||
# OpenSSH |
||||
(mkRenamedOptionModule [ "services" "sshd" "ports" ] [ "services" "openssh" "ports" ]) |
||||
(mkAliasOptionModule [ "services" "sshd" "enable" ] [ "services" "openssh" "enable" ]) |
||||
(mkRenamedOptionModule [ "services" "sshd" "allowSFTP" ] [ "services" "openssh" "allowSFTP" ]) |
||||
(mkRenamedOptionModule [ "services" "sshd" "forwardX11" ] [ "services" "openssh" "forwardX11" ]) |
||||
(mkRenamedOptionModule [ "services" "sshd" "gatewayPorts" ] [ "services" "openssh" "gatewayPorts" ]) |
||||
(mkRenamedOptionModule [ "services" "sshd" "permitRootLogin" ] [ "services" "openssh" "permitRootLogin" ]) |
||||
(mkRenamedOptionModule [ "services" "xserver" "startSSHAgent" ] [ "services" "xserver" "startOpenSSHAgent" ]) |
||||
(mkRenamedOptionModule [ "services" "xserver" "startOpenSSHAgent" ] [ "programs" "ssh" "startAgent" ]) |
||||
(mkAliasOptionModule [ "services" "openssh" "knownHosts" ] [ "programs" "ssh" "knownHosts" ]) |
||||
|
||||
# VirtualBox |
||||
(mkRenamedOptionModule [ "services" "virtualbox" "enable" ] [ "virtualisation" "virtualbox" "guest" "enable" ]) |
||||
(mkRenamedOptionModule [ "services" "virtualboxGuest" "enable" ] [ "virtualisation" "virtualbox" "guest" "enable" ]) |
||||
(mkRenamedOptionModule [ "programs" "virtualbox" "enable" ] [ "virtualisation" "virtualbox" "host" "enable" ]) |
||||
(mkRenamedOptionModule [ "programs" "virtualbox" "addNetworkInterface" ] [ "virtualisation" "virtualbox" "host" "addNetworkInterface" ]) |
||||
(mkRenamedOptionModule [ "programs" "virtualbox" "enableHardening" ] [ "virtualisation" "virtualbox" "host" "enableHardening" ]) |
||||
(mkRenamedOptionModule [ "services" "virtualboxHost" "enable" ] [ "virtualisation" "virtualbox" "host" "enable" ]) |
||||
(mkRenamedOptionModule [ "services" "virtualboxHost" "addNetworkInterface" ] [ "virtualisation" "virtualbox" "host" "addNetworkInterface" ]) |
||||
(mkRenamedOptionModule [ "services" "virtualboxHost" "enableHardening" ] [ "virtualisation" "virtualbox" "host" "enableHardening" ]) |
||||
|
||||
# Tarsnap |
||||
(mkRenamedOptionModule [ "services" "tarsnap" "config" ] [ "services" "tarsnap" "archives" ]) |
||||
|
||||
# proxy |
||||
(mkRenamedOptionModule [ "nix" "proxy" ] [ "networking" "proxy" "default" ]) |
||||
|
||||
# KDE |
||||
(mkRenamedOptionModule [ "kde" "extraPackages" ] [ "environment" "systemPackages" ]) |
||||
(mkRenamedOptionModule [ "environment" "kdePackages" ] [ "environment" "systemPackages" ]) |
||||
|
||||
# Multiple efi bootloaders now |
||||
(mkRenamedOptionModule [ "boot" "loader" "efi" "efibootmgr" "enable" ] [ "boot" "loader" "efi" "canTouchEfiVariables" ]) |
||||
|
||||
# NixOS environment changes |
||||
# !!! this hardcodes bash, could we detect from config which shell is actually used? |
||||
(mkRenamedOptionModule [ "environment" "promptInit" ] [ "programs" "bash" "promptInit" ]) |
||||
|
||||
(mkRenamedOptionModule [ "services" "xserver" "driSupport" ] [ "hardware" "opengl" "driSupport" ]) |
||||
(mkRenamedOptionModule [ "services" "xserver" "driSupport32Bit" ] [ "hardware" "opengl" "driSupport32Bit" ]) |
||||
(mkRenamedOptionModule [ "services" "xserver" "s3tcSupport" ] [ "hardware" "opengl" "s3tcSupport" ]) |
||||
(mkRenamedOptionModule [ "hardware" "opengl" "videoDrivers" ] [ "services" "xserver" "videoDrivers" ]) |
||||
|
||||
(mkRenamedOptionModule [ "services" "mysql55" ] [ "services" "mysql" ]) |
||||
|
||||
(mkAliasOptionModule [ "environment" "checkConfigurationOptions" ] [ "_module" "check" ]) |
||||
|
||||
# XBMC |
||||
(mkRenamedOptionModule [ "services" "xserver" "windowManager" "xbmc" ] [ "services" "xserver" "desktopManager" "kodi" ]) |
||||
(mkRenamedOptionModule [ "services" "xserver" "desktopManager" "xbmc" ] [ "services" "xserver" "desktopManager" "kodi" ]) |
||||
|
||||
# DNSCrypt-proxy |
||||
(mkRenamedOptionModule [ "services" "dnscrypt-proxy" "port" ] [ "services" "dnscrypt-proxy" "localPort" ]) |
||||
|
||||
# Options that are obsolete and have no replacement. |
||||
(mkRemovedOptionModule [ "boot" "initrd" "luks" "enable" ]) |
||||
(mkRemovedOptionModule [ "programs" "bash" "enable" ]) |
||||
(mkRemovedOptionModule [ "services" "samba" "defaultShare" ]) |
||||
(mkRemovedOptionModule [ "services" "syslog-ng" "serviceName" ]) |
||||
(mkRemovedOptionModule [ "services" "syslog-ng" "listenToJournal" ]) |
||||
(mkRemovedOptionModule [ "ec2" "metadata" ]) |
||||
(mkRemovedOptionModule [ "services" "openvpn" "enable" ]) |
||||
|
||||
]; |
||||
} |
||||
|
Loading…
Reference in new issue