summaryrefslogtreecommitdiff
path: root/modules/system
diff options
context:
space:
mode:
authorDaiderd Jordan <daiderd@gmail.com>2017-10-01 16:11:17 +0200
committerDaiderd Jordan <daiderd@gmail.com>2017-10-01 16:37:51 +0200
commitcf9f74596a4b976207455e51831be9531d95e103 (patch)
treed5bb7850f554608e7aee57b7b9bd696fdb69aefe /modules/system
parentd371ec02086d2dfee1d3c3c33618093faca576e6 (diff)
system-version: add system.stateVersion option
Diffstat (limited to 'modules/system')
-rw-r--r--modules/system/default.nix5
-rw-r--r--modules/system/version.nix76
2 files changed, 76 insertions, 5 deletions
diff --git a/modules/system/default.nix b/modules/system/default.nix
index 1cc0290..2d0e750 100644
--- a/modules/system/default.nix
+++ b/modules/system/default.nix
@@ -42,11 +42,6 @@ in
'';
};
- system.darwinLabel = mkOption {
- type = types.str;
- default = pkgs.lib.nixpkgsVersion;
- };
-
assertions = mkOption {
type = types.listOf types.unspecified;
internal = true;
diff --git a/modules/system/version.nix b/modules/system/version.nix
new file mode 100644
index 0000000..5a6b247
--- /dev/null
+++ b/modules/system/version.nix
@@ -0,0 +1,76 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+ cfg = config.system;
+
+ gitCommitId = lib.substring 0 7 (commitIdFromGitRepo gitRepo);
+ gitRepo = "${toString pkgs.path}/.git";
+ releaseFile = "${toString pkgs.path}/.version";
+ revisionFile = "${toString pkgs.path}/.git-revision";
+ suffixFile = "${toString pkgs.path}/.version-suffix";
+in
+
+{
+ options = {
+ system.stateVersion = mkOption {
+ type = types.int;
+ default = 2;
+ description = ''
+ Every once in a while, a new NixOS release may change
+ configuration defaults in a way incompatible with stateful
+ data. For instance, if the default version of PostgreSQL
+ changes, the new version will probably be unable to read your
+ existing databases. To prevent such breakage, you can set the
+ value of this option to the NixOS release with which you want
+ to be compatible. The effect is that NixOS will option
+ defaults corresponding to the specified release (such as using
+ an older version of PostgreSQL).
+ '';
+ };
+
+ system.darwinLabel = mkOption {
+ type = types.str;
+ default = cfg.nixpkgsVersion;
+ description = "Label to be used in the names of generated outputs.";
+ };
+
+ system.nixpkgsRelease = mkOption {
+ readOnly = true;
+ type = types.str;
+ default = fileContents releaseFile;
+ description = "The nixpkgs release (e.g. <literal>16.03</literal>).";
+ };
+
+ system.nixpkgsVersion = mkOption {
+ internal = true;
+ type = types.str;
+ description = "The full nixpkgs version (e.g. <literal>16.03.1160.f2d4ee1</literal>).";
+ };
+
+ system.nixpkgsVersionSuffix = mkOption {
+ internal = true;
+ type = types.str;
+ default = "pre-git";
+ description = "The nixpkgs version suffix (e.g. <literal>1160.f2d4ee1</literal>).";
+ };
+
+ system.nixpkgsRevision = mkOption {
+ internal = true;
+ type = types.str;
+ default = "master";
+ description = "The nixpkgs git revision from which this configuration was built.";
+ };
+ };
+
+ config = {
+
+ # These defaults are set here rather than up there so that
+ # changing them would not rebuild the manual
+ system.nixpkgsVersion = mkDefault (cfg.nixpkgsRelease + cfg.nixpkgsVersionSuffix);
+ system.nixpkgsRevision = mkIf (pathIsDirectory gitRepo) (mkDefault gitCommitId);
+ system.nixpkgsVersionSuffix = mkIf (pathIsDirectory gitRepo) (mkDefault (".git." + gitCommitId));
+
+ };
+}