diff --git a/lib/modules.nix b/lib/modules.nix
index 6c8033322a540..41a5fb89fde5b 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
diff --git a/nixos/doc/manual/development/releases.xml b/nixos/doc/manual/development/releases.xml
index d4e5ff3f4312e..863110a1c7ca8 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 e500c9d634224..734bc076b8525 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 74b61a64667e0..a198c2d49b531 100644
--- a/nixos/modules/installer/tools/nixos-generate-config.pl
+++ b/nixos/modules/installer/tools/nixos-generate-config.pl
@@ -628,7 +628,7 @@ sub multiLineList {
# 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 74c86443ab90a..33d8a78616939 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;
@@ -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).";
@@ -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
diff --git a/nixos/modules/programs/shell.nix b/nixos/modules/programs/shell.nix
index d8845fd8f4463..3504a8a924b03 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 56b7bf00448c9..8820a6da8c0b6 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 21a131b90a811..66c9330c35505 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 f022e0863dfd3..4ad4728ccda6e 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 10901e1022251..f7441988b272f 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 39a4fd6beff84..e2122ddb8ede6 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 391f4bdebbabb..97ee05046ff02 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 2124a42f01a1c..fe65fba42a468 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 349fd3adfc96c..9ecdcf23e5fbf 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 248c2fc1fb238..c3044ea124cfc 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 8ac0639c6a8ce..e384303854159 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";
};
};