Add auto update feature

You can now keep your system up to date automatically by setting:

system.autoUpgrade.enable = true;

Fixes #7369.

Changed files
+86
nixos
modules
+81
nixos/modules/installer/tools/auto-upgrade.nix
···
···
+
{ 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";
+
};
+
+
};
+
+
}
+4
nixos/modules/installer/tools/tools.nix
···
in
{
config = {
environment.systemPackages =
[ nixos-build-vms
nixos-install
···
system.build = {
inherit nixos-install nixos-generate-config nixos-option nixos-rebuild;
};
};
}
···
in
{
+
config = {
+
environment.systemPackages =
[ nixos-build-vms
nixos-install
···
system.build = {
inherit nixos-install nixos-generate-config nixos-option nixos-rebuild;
};
+
};
+
}
+1
nixos/modules/module-list.nix
···
./hardware/video/bumblebee.nix
./hardware/video/nvidia.nix
./hardware/video/ati.nix
./installer/tools/nixos-checkout.nix
./installer/tools/tools.nix
./misc/assertions.nix
···
./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