diff options
Diffstat (limited to 'pkgs/os-specific/linux/nixos-rebuild/nixos-rebuild.sh')
-rwxr-xr-x | pkgs/os-specific/linux/nixos-rebuild/nixos-rebuild.sh | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/pkgs/os-specific/linux/nixos-rebuild/nixos-rebuild.sh b/pkgs/os-specific/linux/nixos-rebuild/nixos-rebuild.sh index 217e04d35720..b0b155c784ad 100755 --- a/pkgs/os-specific/linux/nixos-rebuild/nixos-rebuild.sh +++ b/pkgs/os-specific/linux/nixos-rebuild/nixos-rebuild.sh @@ -28,6 +28,7 @@ rollback= upgrade= upgrade_all= profile=/nix/var/nix/profiles/system +specialisation= buildHost= targetHost= remoteSudo= @@ -107,6 +108,14 @@ while [ "$#" -gt 0 ]; do fi shift 1 ;; + --specialisation|-c) + if [ -z "$1" ]; then + log "$0: ‘--specialisation’ requires an argument" + exit 1 + fi + specialisation="$1" + shift 1 + ;; --build-host|h) buildHost="$1" shift 1 @@ -365,6 +374,10 @@ if [[ -n $flake ]]; then fi fi +if [[ ! -z "$specialisation" && ! "$action" = switch && ! "$action" = test ]]; then + log "error: ‘--specialisation’ can only be used with ‘switch’ and ‘test’" + exit 1 +fi tmpDir=$(mktemp -t -d nixos-rebuild.XXXXXX) @@ -559,7 +572,18 @@ fi # If we're not just building, then make the new configuration the boot # default and/or activate it now. if [[ "$action" = switch || "$action" = boot || "$action" = test || "$action" = dry-activate ]]; then - if ! targetHostCmd "$pathToConfig/bin/switch-to-configuration" "$action"; then + if [[ -z "$specialisation" ]]; then + cmd="$pathToConfig/bin/switch-to-configuration" + else + cmd="$pathToConfig/specialisation/$specialisation/bin/switch-to-configuration" + + if [[ ! -f "$cmd" ]]; then + log "error: specialisation not found: $specialisation" + exit 1 + fi + fi + + if ! targetHostCmd "$cmd" "$action"; then log "warning: error(s) occurred while switching to the new configuration" exit 1 fi |