diff options
| author | Daiderd Jordan <daiderd@gmail.com> | 2017-10-01 16:11:17 +0200 |
|---|---|---|
| committer | Daiderd Jordan <daiderd@gmail.com> | 2017-10-01 16:37:51 +0200 |
| commit | cf9f74596a4b976207455e51831be9531d95e103 (patch) | |
| tree | d5bb7850f554608e7aee57b7b9bd696fdb69aefe /modules/system | |
| parent | d371ec02086d2dfee1d3c3c33618093faca576e6 (diff) | |
system-version: add system.stateVersion option
Diffstat (limited to 'modules/system')
| -rw-r--r-- | modules/system/default.nix | 5 | ||||
| -rw-r--r-- | modules/system/version.nix | 76 |
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)); + + }; +} |
