diff options
author | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2015-08-07 05:28:17 +0200 |
---|---|---|
committer | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2015-08-07 05:37:31 +0200 |
commit | 43c47560906f80e67ccf093884a50bf3f2972a51 (patch) | |
tree | ede809589485a93a79eb56dd961e10d1b5473034 /nixos | |
parent | 80d9b426638563a6d8b6dc1604180cc60b4b2862 (diff) |
Add auto update feature
You can now keep your system up to date automatically by setting: system.autoUpgrade.enable = true; Fixes #7369.
Diffstat (limited to 'nixos')
-rw-r--r-- | nixos/modules/installer/tools/auto-upgrade.nix | 81 | ||||
-rw-r--r-- | nixos/modules/installer/tools/tools.nix | 4 | ||||
-rw-r--r-- | nixos/modules/module-list.nix | 1 |
3 files changed, 86 insertions, 0 deletions
diff --git a/nixos/modules/installer/tools/auto-upgrade.nix b/nixos/modules/installer/tools/auto-upgrade.nix new file mode 100644 index 0000000000000..b2676b05a02cb --- /dev/null +++ b/nixos/modules/installer/tools/auto-upgrade.nix @@ -0,0 +1,81 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let cfg = config.system.autoUpgrade; in + +{ + + options = { + + system.autoUpgrade = { + + enable = mkOption { + type = types.bool; + default = false; + description = '' + Whether to periodically upgrade NixOS to the latest + version. If enabled, a systemd timer will run + <literal>nixos-rebuild switch --upgrade</literal> once a + day. + ''; + }; + + channel = mkOption { + type = types.nullOr types.str; + default = null; + example = https://nixos.org/channels/nixos-14.12-small; + description = '' + The URI of the NixOS channel to use for automatic + upgrades. By default, this is the channel set using + <command>nix-channel</command> (run <literal>nix-channel + --list</literal> to see the current value). + ''; + }; + + flags = mkOption { + type = types.listOf types.str; + default = []; + example = [ "-I" "stuff=/home/alice/nixos-stuff" "--option" "extra-binary-caches" "http://my-cache.example.org/" ]; + description = '' + Any additional flags passed to <command>nixos-rebuild</command>. + ''; + }; + + }; + + }; + + config = { + + system.autoUpgrade.flags = + [ "--no-build-output" ] + ++ (if cfg.channel == null + then [ "--upgrade" ] + else [ "-I" "nixpkgs=${cfg.channel}/nixexprs.tar.xz" ]); + + systemd.services.nixos-upgrade = { + description = "NixOS Upgrade"; + + restartIfChanged = false; + unitConfig.X-StopOnRemoval = false; + + serviceConfig.Type = "oneshot"; + + environment = config.nix.envVars // + { inherit (config.environment.sessionVariables) NIX_PATH SSL_CERT_FILE; + HOME = "/root"; + }; + + path = [ pkgs.gnutar pkgs.xz config.nix.package ]; + + script = '' + ${config.system.build.nixos-rebuild}/bin/nixos-rebuild test ${toString cfg.flags} + ''; + + startAt = mkIf cfg.enable "04:40"; + }; + + }; + +} diff --git a/nixos/modules/installer/tools/tools.nix b/nixos/modules/installer/tools/tools.nix index 61744c39d6010..04e4c1eb94593 100644 --- a/nixos/modules/installer/tools/tools.nix +++ b/nixos/modules/installer/tools/tools.nix @@ -57,7 +57,9 @@ let in { + config = { + environment.systemPackages = [ nixos-build-vms nixos-install @@ -70,5 +72,7 @@ in system.build = { inherit nixos-install nixos-generate-config nixos-option nixos-rebuild; }; + }; + } diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index 409f22920871b..93d378aa95f89 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -41,6 +41,7 @@ ./hardware/video/bumblebee.nix ./hardware/video/nvidia.nix ./hardware/video/ati.nix + ./installer/tools/auto-upgrade.nix ./installer/tools/nixos-checkout.nix ./installer/tools/tools.nix ./misc/assertions.nix |