summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--modules/system/version.nix34
-rw-r--r--release.nix12
2 files changed, 35 insertions, 11 deletions
diff --git a/modules/system/version.nix b/modules/system/version.nix
index df8b7a0..826ad35 100644
--- a/modules/system/version.nix
+++ b/modules/system/version.nix
@@ -5,8 +5,6 @@ with lib;
let
cfg = config.system;
- defaultStateVersion = options.system.stateVersion.default;
-
# Based on `lib.trivial.revisionWithDefault` from nixpkgs.
gitRevision = path:
if pathIsGitRepo "${path}/.git"
@@ -34,8 +32,9 @@ in
{
options = {
system.stateVersion = mkOption {
- type = types.int;
- default = 5;
+ type = types.ints.between 1 config.system.maxStateVersion;
+ # TODO: Remove this default and the assertion below.
+ default = config.system.maxStateVersion;
description = ''
Every once in a while, a new NixOS release may change
configuration defaults in a way incompatible with stateful
@@ -49,6 +48,12 @@ in
'';
};
+ system.maxStateVersion = mkOption {
+ internal = true;
+ type = types.int;
+ default = 5;
+ };
+
system.darwinLabel = mkOption {
type = types.str;
description = "Label to be used in the names of generated outputs.";
@@ -121,9 +126,22 @@ in
# documentation is not reprocessed on every commit
system.darwinLabel = mkDefault "${cfg.nixpkgsVersion}+${cfg.darwinVersion}";
- assertions = [ {
- assertion = cfg.stateVersion <= defaultStateVersion;
- message = "system.stateVersion = ${toString cfg.stateVersion}; is not a valid value";
- } ];
+ assertions = [
+ {
+ assertion = options.system.stateVersion.highestPrio != (lib.mkOptionDefault { }).priority;
+ message = ''
+ The `system.stateVersion` option is not defined in your
+ nix-darwin configuration. The value is used to conditionalize
+ backwards‐incompatible changes in default settings. You should
+ usually set this once when installing nix-darwin on a new system
+ and then never change it (at least without reading all the relevant
+ entries in the changelog using `darwin-rebuild changelog`).
+
+ You can use the current value for new installations as follows:
+
+ system.stateVersion = ${toString config.system.maxStateVersion};
+ '';
+ }
+ ];
};
}
diff --git a/release.nix b/release.nix
index 648e9a2..c3a9dde 100644
--- a/release.nix
+++ b/release.nix
@@ -40,6 +40,8 @@ let
};
config = {
+ system.stateVersion = lib.mkDefault config.system.maxStateVersion;
+
system.build.run-test = pkgs.runCommand "darwin-test-${testName}"
{ allowSubstitutes = false; preferLocalBuild = true; }
''
@@ -71,6 +73,10 @@ let
nano emacs vim;
};
+ manual = buildFromConfig ({ lib, config, ... }: {
+ system.stateVersion = lib.mkDefault config.system.maxStateVersion;
+ }) (config: config.system.build.manual);
+
jobs = {
unstable = pkgs.releaseTools.aggregate {
@@ -92,9 +98,9 @@ let
meta.description = "Release-critical builds for the darwin channel";
};
- manualHTML = buildFromConfig ({ ... }: { }) (config: config.system.build.manual.manualHTML);
- manpages = buildFromConfig ({ ... }: { }) (config: config.system.build.manual.manpages);
- options = buildFromConfig ({ ... }: { }) (config: config.system.build.manual.optionsJSON);
+ manualHTML = manual.manualHTML;
+ manpages = manual.manpages;
+ options = manual.optionsJSON;
examples.hydra = makeSystem ./modules/examples/hydra.nix;
examples.lnl = makeSystem ./modules/examples/lnl.nix;