nixpkgs.overlays = [
(import ../overlays/keyedgit.nix)
(import ../overlays/pinch.nix)
+ (self: super: {
+ auto-upgrade = super.writeShellScriptBin "auto-upgrade" ''
+ set -e
+ (
+ cd /etc/nixos
+ ${self.keyedgit cfg.key}/bin/git pull --ff-only --verify-signatures
+ ${self.pinch}/bin/pinch update channels
+ )
+
+ ${config.system.build.nixos-rebuild}/bin/nixos-rebuild switch --no-build-output
+ '';
+ })
];
+
+ environment.systemPackages = [ pkgs.auto-upgrade ];
+
systemd.services.nixos-upgrade = {
description = "NixOS Upgrade";
restartIfChanged = false;
gitMinimal
gnutar
gzip
- pinch
xz.bin
];
script = ''
set -e
- (
- cd /etc/nixos
- ${pkgs.keyedgit cfg.key}/bin/git pull --ff-only --verify-signatures
- pinch update channels
- )
- ${config.system.build.nixos-rebuild}/bin/nixos-rebuild switch --no-build-output
+ # Chill for awhile before applying updates. If applying an update
+ # badly breaks things, we want a window in which an operator can
+ # intervene either to fix the problem or disable automatic updates.
+ sleep 2h
+
+ ${pkgs.auto-upgrade}/bin/auto-upgrade
'';
startAt = cfg.dates;