From 095fe5b43def40279a243e663c662b02caac5318 Mon Sep 17 00:00:00 2001 From: Jan Malakhovski Date: Fri, 6 Apr 2018 01:19:06 +0000 Subject: [PATCH 1/3] nixos: rename system.{stateVersion,defaultChannel} -> system.nixos.\1 --- nixos/doc/manual/development/releases.xml | 2 +- nixos/doc/manual/release-notes/rl-1509.xml | 4 ++-- .../modules/installer/tools/nixos-generate-config.pl | 2 +- nixos/modules/misc/version.nix | 12 ++++++------ nixos/modules/programs/shell.nix | 2 +- nixos/modules/rename.nix | 2 ++ nixos/modules/services/databases/mysql.nix | 2 +- nixos/modules/services/databases/postgresql.nix | 10 +++++----- nixos/modules/services/misc/matrix-synapse.nix | 2 +- nixos/modules/services/network-filesystems/ipfs.nix | 2 +- nixos/modules/services/networking/radicale.nix | 4 ++-- nixos/modules/services/web-servers/caddy.nix | 2 +- nixos/modules/virtualisation/amazon-options.nix | 2 +- nixos/modules/virtualisation/containers.nix | 4 ++-- nixos/tests/radicale.nix | 4 ++-- 15 files changed, 29 insertions(+), 27 deletions(-) diff --git a/nixos/doc/manual/development/releases.xml b/nixos/doc/manual/development/releases.xml index d4e5ff3f4312..863110a1c7ca 100755 --- a/nixos/doc/manual/development/releases.xml +++ b/nixos/doc/manual/development/releases.xml @@ -70,7 +70,7 @@ - Bump the system.defaultChannel attribute in + Bump the system.nixos.defaultChannel attribute in nixos/modules/misc/version.nix diff --git a/nixos/doc/manual/release-notes/rl-1509.xml b/nixos/doc/manual/release-notes/rl-1509.xml index e500c9d63422..734bc076b852 100644 --- a/nixos/doc/manual/release-notes/rl-1509.xml +++ b/nixos/doc/manual/release-notes/rl-1509.xml @@ -433,9 +433,9 @@ system.autoUpgrade.enable = true; default. If you have existing systems with such host keys and want to continue to use them, please set -system.stateVersion = "14.12"; +system.nixos.stateVersion = "14.12"; - The new option ensures that certain + The new option ensures that certain configuration changes that could break existing systems (such as the sshd host key setting) will maintain compatibility with the specified NixOS release. NixOps sets the state version of existing diff --git a/nixos/modules/installer/tools/nixos-generate-config.pl b/nixos/modules/installer/tools/nixos-generate-config.pl index 74b61a64667e..a198c2d49b53 100644 --- a/nixos/modules/installer/tools/nixos-generate-config.pl +++ b/nixos/modules/installer/tools/nixos-generate-config.pl @@ -628,7 +628,7 @@ $bootLoaderConfig # compatible, in order to avoid breaking some software such as database # servers. You should change this only after NixOS release notes say you # should. - system.stateVersion = "${\(qw(@release@))}"; # Did you read the comment? + system.nixos.stateVersion = "${\(qw(@release@))}"; # Did you read the comment? } EOF diff --git a/nixos/modules/misc/version.nix b/nixos/modules/misc/version.nix index 74c86443ab90..c45d5b077481 100644 --- a/nixos/modules/misc/version.nix +++ b/nixos/modules/misc/version.nix @@ -12,29 +12,29 @@ in { - options.system = { + options.system.nixos = { - nixos.version = mkOption { + version = mkOption { internal = true; type = types.str; description = "The full NixOS version (e.g. 16.03.1160.f2d4ee1)."; }; - nixos.release = mkOption { + release = mkOption { readOnly = true; type = types.str; default = trivial.release; description = "The NixOS release (e.g. 16.03)."; }; - nixos.versionSuffix = mkOption { + versionSuffix = mkOption { internal = true; type = types.str; default = trivial.versionSuffix; description = "The NixOS version suffix (e.g. 1160.f2d4ee1)."; }; - nixos.revision = mkOption { + revision = mkOption { internal = true; type = types.str; default = if pathIsDirectory gitRepo then commitIdFromGitRepo gitRepo @@ -43,7 +43,7 @@ in description = "The Git revision from which this NixOS configuration was built."; }; - nixos.codeName = mkOption { + codeName = mkOption { readOnly = true; type = types.str; description = "The NixOS release code name (e.g. Emu)."; diff --git a/nixos/modules/programs/shell.nix b/nixos/modules/programs/shell.nix index d8845fd8f446..3504a8a924b0 100644 --- a/nixos/modules/programs/shell.nix +++ b/nixos/modules/programs/shell.nix @@ -40,7 +40,7 @@ in # Subscribe the root user to the NixOS channel by default. if [ "$USER" = root -a ! -e $HOME/.nix-channels ]; then - echo "${config.system.defaultChannel} nixos" > $HOME/.nix-channels + echo "${config.system.nixos.defaultChannel} nixos" > $HOME/.nix-channels fi # Create the per-user garbage collector roots directory. diff --git a/nixos/modules/rename.nix b/nixos/modules/rename.nix index 56b7bf00448c..8820a6da8c0b 100644 --- a/nixos/modules/rename.nix +++ b/nixos/modules/rename.nix @@ -204,6 +204,8 @@ with lib; (mkRenamedOptionModule [ "system" "nixosVersionSuffix" ] [ "system" "nixos" "versionSuffix" ]) (mkRenamedOptionModule [ "system" "nixosRevision" ] [ "system" "nixos" "revision" ]) (mkRenamedOptionModule [ "system" "nixosLabel" ] [ "system" "nixos" "label" ]) + (mkRenamedOptionModule [ "system" "stateVersion" ] [ "system" "nixos" "stateVersion" ]) + (mkRenamedOptionModule [ "system" "defaultChannel" ] [ "system" "nixos" "defaultChannel" ]) # Users (mkAliasOptionModule [ "users" "extraUsers" ] [ "users" "users" ]) diff --git a/nixos/modules/services/databases/mysql.nix b/nixos/modules/services/databases/mysql.nix index 21a131b90a81..66c9330c3550 100644 --- a/nixos/modules/services/databases/mysql.nix +++ b/nixos/modules/services/databases/mysql.nix @@ -218,7 +218,7 @@ in config = mkIf config.services.mysql.enable { services.mysql.dataDir = - mkDefault (if versionAtLeast config.system.stateVersion "17.09" then "/var/lib/mysql" + mkDefault (if versionAtLeast config.system.nixos.stateVersion "17.09" then "/var/lib/mysql" else "/var/mysql"); users.extraUsers.mysql = { diff --git a/nixos/modules/services/databases/postgresql.nix b/nixos/modules/services/databases/postgresql.nix index f022e0863dfd..4ad4728ccda6 100644 --- a/nixos/modules/services/databases/postgresql.nix +++ b/nixos/modules/services/databases/postgresql.nix @@ -147,7 +147,7 @@ in }; superUser = mkOption { type = types.str; - default= if versionAtLeast config.system.stateVersion "17.09" then "postgres" else "root"; + default= if versionAtLeast config.system.nixos.stateVersion "17.09" then "postgres" else "root"; internal = true; description = '' NixOS traditionally used 'root' as superuser, most other distros use 'postgres'. @@ -166,14 +166,14 @@ in services.postgresql.package = # Note: when changing the default, make it conditional on - # ‘system.stateVersion’ to maintain compatibility with existing + # ‘system.nixos.stateVersion’ to maintain compatibility with existing # systems! - mkDefault (if versionAtLeast config.system.stateVersion "17.09" then pkgs.postgresql96 - else if versionAtLeast config.system.stateVersion "16.03" then pkgs.postgresql95 + mkDefault (if versionAtLeast config.system.nixos.stateVersion "17.09" then pkgs.postgresql96 + else if versionAtLeast config.system.nixos.stateVersion "16.03" then pkgs.postgresql95 else pkgs.postgresql94); services.postgresql.dataDir = - mkDefault (if versionAtLeast config.system.stateVersion "17.09" then "/var/lib/postgresql/${config.services.postgresql.package.psqlSchema}" + mkDefault (if versionAtLeast config.system.nixos.stateVersion "17.09" then "/var/lib/postgresql/${config.services.postgresql.package.psqlSchema}" else "/var/db/postgresql"); services.postgresql.authentication = mkAfter diff --git a/nixos/modules/services/misc/matrix-synapse.nix b/nixos/modules/services/misc/matrix-synapse.nix index 10901e102225..f7441988b272 100644 --- a/nixos/modules/services/misc/matrix-synapse.nix +++ b/nixos/modules/services/misc/matrix-synapse.nix @@ -342,7 +342,7 @@ in { }; database_type = mkOption { type = types.enum [ "sqlite3" "psycopg2" ]; - default = if versionAtLeast config.system.stateVersion "18.03" + default = if versionAtLeast config.system.nixos.stateVersion "18.03" then "psycopg2" else "sqlite3"; description = '' diff --git a/nixos/modules/services/network-filesystems/ipfs.nix b/nixos/modules/services/network-filesystems/ipfs.nix index 39a4fd6beff8..e2122ddb8ede 100644 --- a/nixos/modules/services/network-filesystems/ipfs.nix +++ b/nixos/modules/services/network-filesystems/ipfs.nix @@ -14,7 +14,7 @@ let (optionalString (cfg.defaultMode == "norouting") "--routing=none") ] ++ cfg.extraFlags); - defaultDataDir = if versionAtLeast config.system.stateVersion "17.09" then + defaultDataDir = if versionAtLeast config.system.nixos.stateVersion "17.09" then "/var/lib/ipfs" else "/var/lib/ipfs/.ipfs"; diff --git a/nixos/modules/services/networking/radicale.nix b/nixos/modules/services/networking/radicale.nix index 391f4bdebbab..97ee05046ff0 100644 --- a/nixos/modules/services/networking/radicale.nix +++ b/nixos/modules/services/networking/radicale.nix @@ -9,7 +9,7 @@ let confFile = pkgs.writeText "radicale.conf" cfg.config; # This enables us to default to version 2 while still not breaking configurations of people with version 1 - defaultPackage = if versionAtLeast config.system.stateVersion "17.09" then { + defaultPackage = if versionAtLeast config.system.nixos.stateVersion "17.09" then { pkg = pkgs.radicale2; text = "pkgs.radicale2"; } else { @@ -35,7 +35,7 @@ in defaultText = defaultPackage.text; description = '' Radicale package to use. This defaults to version 1.x if - system.stateVersion < 17.09 and version 2.x + system.nixos.stateVersion < 17.09 and version 2.x otherwise. ''; }; diff --git a/nixos/modules/services/web-servers/caddy.nix b/nixos/modules/services/web-servers/caddy.nix index 2124a42f01a1..fe65fba42a46 100644 --- a/nixos/modules/services/web-servers/caddy.nix +++ b/nixos/modules/services/web-servers/caddy.nix @@ -66,7 +66,7 @@ in { description = "Caddy web server"; after = [ "network-online.target" ]; wantedBy = [ "multi-user.target" ]; - environment = mkIf (versionAtLeast config.system.stateVersion "17.09") + environment = mkIf (versionAtLeast config.system.nixos.stateVersion "17.09") { CADDYPATH = cfg.dataDir; }; serviceConfig = { ExecStart = '' diff --git a/nixos/modules/virtualisation/amazon-options.nix b/nixos/modules/virtualisation/amazon-options.nix index 349fd3adfc96..9ecdcf23e5fb 100644 --- a/nixos/modules/virtualisation/amazon-options.nix +++ b/nixos/modules/virtualisation/amazon-options.nix @@ -3,7 +3,7 @@ options = { ec2 = { hvm = lib.mkOption { - default = lib.versionAtLeast config.system.stateVersion "17.03"; + default = lib.versionAtLeast config.system.nixos.stateVersion "17.03"; internal = true; description = '' Whether the EC2 instance is a HVM instance. diff --git a/nixos/modules/virtualisation/containers.nix b/nixos/modules/virtualisation/containers.nix index 248c2fc1fb23..c3044ea124cf 100644 --- a/nixos/modules/virtualisation/containers.nix +++ b/nixos/modules/virtualisation/containers.nix @@ -606,8 +606,8 @@ in { config, pkgs, ... }: { services.postgresql.enable = true; services.postgresql.package = pkgs.postgresql96; - - system.stateVersion = "17.03"; + + system.nixos.stateVersion = "17.03"; }; }; } diff --git a/nixos/tests/radicale.nix b/nixos/tests/radicale.nix index 8ac0639c6a8c..e38430385415 100644 --- a/nixos/tests/radicale.nix +++ b/nixos/tests/radicale.nix @@ -43,7 +43,7 @@ in }); }) ]; - system.stateVersion = "17.03"; + system.nixos.stateVersion = "17.03"; }; radicale1_export = lib.recursiveUpdate radicale1 { services.radicale.extraArgs = [ @@ -54,7 +54,7 @@ in services.radicale.extraArgs = [ "--verify-storage" ]; }; radicale2 = lib.recursiveUpdate (common args) { - system.stateVersion = "17.09"; + system.nixos.stateVersion = "17.09"; }; }; From 4017fdcafdd4a1a2063b74bc46c744c85ffcc22e Mon Sep 17 00:00:00 2001 From: Jan Malakhovski Date: Thu, 22 Feb 2018 21:31:38 +0000 Subject: [PATCH 2/3] lib: modules: propagate `highestPrio` Yeah, it's ugly. But it's the minimal change that doesn't break anything else. --- lib/modules.nix | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/lib/modules.nix b/lib/modules.nix index 6c8033322a54..41a5fb89fde5 100644 --- a/lib/modules.nix +++ b/lib/modules.nix @@ -310,6 +310,7 @@ rec { in opt // { value = builtins.addErrorContext "while evaluating the option `${showOption loc}':" value; + inherit (res.defsFinal') highestPrio; definitions = map (def: def.value) res.defsFinal; files = map (def: def.file) res.defsFinal; inherit (res) isDefined; @@ -317,7 +318,7 @@ rec { # Merge definitions of a value of a given type. mergeDefinitions = loc: type: defs: rec { - defsFinal = + defsFinal' = let # Process mkMerge and mkIf properties. defs' = concatMap (m: @@ -325,15 +326,20 @@ rec { ) defs; # Process mkOverride properties. - defs'' = filterOverrides defs'; + defs'' = filterOverrides' defs'; # Sort mkOrder properties. defs''' = # Avoid sorting if we don't have to. - if any (def: def.value._type or "" == "order") defs'' - then sortProperties defs'' - else defs''; - in defs'''; + if any (def: def.value._type or "" == "order") defs''.values + then sortProperties defs''.values + else defs''.values; + in { + values = defs'''; + inherit (defs'') highestPrio; + }; + + defsFinal = defsFinal'.values; # Type-check the remaining definitions, and merge them. mergedValue = foldl' (res: def: @@ -416,13 +422,18 @@ rec { Note that "z" has the default priority 100. */ - filterOverrides = defs: + filterOverrides = defs: (filterOverrides' defs).values; + + filterOverrides' = defs: let defaultPrio = 100; getPrio = def: if def.value._type or "" == "override" then def.value.priority else defaultPrio; highestPrio = foldl' (prio: def: min (getPrio def) prio) 9999 defs; strip = def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; - in concatMap (def: if getPrio def == highestPrio then [(strip def)] else []) defs; + in { + values = concatMap (def: if getPrio def == highestPrio then [(strip def)] else []) defs; + inherit highestPrio; + }; /* Sort a list of properties. The sort priority of a property is 1000 by default, but can be overridden by wrapping the property From 1f0b6922d3c2de3da235a7075d0d3cb9255b7cd7 Mon Sep 17 00:00:00 2001 From: Jan Malakhovski Date: Thu, 22 Feb 2018 21:31:57 +0000 Subject: [PATCH 3/3] nixos: version: produce a warning when no `system.nixos.stateVersion` is explicitly set --- nixos/modules/misc/version.nix | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/nixos/modules/misc/version.nix b/nixos/modules/misc/version.nix index c45d5b077481..33d8a7861693 100644 --- a/nixos/modules/misc/version.nix +++ b/nixos/modules/misc/version.nix @@ -1,4 +1,4 @@ -{ config, lib, pkgs, ... }: +{ options, config, lib, pkgs, ... }: with lib; @@ -76,6 +76,9 @@ in config = { + warnings = lib.optional (options.system.nixos.stateVersion.highestPrio > 1000) + "You don't have `system.nixos.stateVersion` explicitly set. Expect things to break."; + system.nixos = { # These defaults are set here rather than up there so that # changing them would not rebuild the manual