mirror of
https://github.com/LnL7/nix-darwin.git
synced 2025-03-13 20:30:02 +00:00
system-version: add system.stateVersion option
This commit is contained in:
parent
d371ec0208
commit
cf9f74596a
3 changed files with 77 additions and 5 deletions
|
@ -31,6 +31,7 @@ let
|
|||
./modules/system/applications.nix
|
||||
./modules/system/etc.nix
|
||||
./modules/system/launchd.nix
|
||||
./modules/system/version.nix
|
||||
./modules/time
|
||||
./modules/networking
|
||||
./modules/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;
|
||||
|
|
76
modules/system/version.nix
Normal file
76
modules/system/version.nix
Normal file
|
@ -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));
|
||||
|
||||
};
|
||||
}
|
Loading…
Add table
Reference in a new issue