From 068372aad18f04122bbdb836e36c655c157ebe71 Mon Sep 17 00:00:00 2001 From: Maximilian Bosch Date: Sun, 9 Oct 2022 18:37:10 +0200 Subject: Add new activation strategy `boot` as equivalent to `nixos-rebuild boot` This can be useful when e.g. deploying a kernel update to a target host. You usually plan a reboot (or kexec) after that to activate the new kernel. However you don't want to wait for services to be restarted first since these will be "restarted" anyways on the reboot. In cases like GitLab or the Atlassian stack this actually makes a difference. This patch changes the following things: * If `--boot` is provided, `nix-env -p profile-to-activate --set` is called for each deployed profile to make sure that it is activated automatically after a reboot. * However, the actual activation (e.g. `switch-to-configuration switch`) is skipped. Instead: * For NixOS, `switch-to-configuration boot` is called to set the new profile as default in the bootloader. * For everything else, nothing else is done. The profile is already the new default (and thus picked up on the next boot). --- flake.nix | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) (limited to 'flake.nix') diff --git a/flake.nix b/flake.nix index 66ba60b..2d520b6 100644 --- a/flake.nix +++ b/flake.nix @@ -63,6 +63,9 @@ if [[ "''${DRY_ACTIVATE:-}" == "1" ]] then ${customSelf.dryActivate or "echo ${final.writeScript "activate" activate}"} + elif [[ "''${BOOT:-}" == "1" ]] + then + ${customSelf.boot or "echo ${final.writeScript "activate" activate}"} else ${activate} fi @@ -83,17 +86,23 @@ }; }; - nixos = base: (custom // { dryActivate = "$PROFILE/bin/switch-to-configuration dry-activate"; }) base.config.system.build.toplevel '' - # work around https://github.com/NixOS/nixpkgs/issues/73404 - cd /tmp - - $PROFILE/bin/switch-to-configuration switch - - # https://github.com/serokell/deploy-rs/issues/31 - ${with base.config.boot.loader; - final.lib.optionalString systemd-boot.enable - "sed -i '/^default /d' ${efi.efiSysMountPoint}/loader/loader.conf"} - ''; + nixos = base: + (custom // { + dryActivate = "$PROFILE/bin/switch-to-configuration dry-activate"; + boot = "$PROFILE/bin/switch-to-configuration boot"; + }) + base.config.system.build.toplevel + '' + # work around https://github.com/NixOS/nixpkgs/issues/73404 + cd /tmp + + $PROFILE/bin/switch-to-configuration switch + + # https://github.com/serokell/deploy-rs/issues/31 + ${with base.config.boot.loader; + final.lib.optionalString systemd-boot.enable + "sed -i '/^default /d' ${efi.efiSysMountPoint}/loader/loader.conf"} + ''; home-manager = base: custom base.activationPackage "$PROFILE/activate"; -- cgit v1.2.3