#! /usr/bin/env nix-shell #! nix-shell -i bash -p rsync # shellcheck shell=bash set -eou pipefail function show_help() { echo "Usage:" echo "$0 [--build-local] " echo "--help Show this help." echo "--build-local Build config locally and copy it to the target system via nix-copy-closure" exit 1 } if [[ $# == 0 ]]; then show_help fi while [[ $# -gt 0 ]]; do case "${1:-}" in "" | "-h" | "--help") show_help ;; "--build-local") build_local=true ;; *) target=$1 ;; esac shift done if [[ -v build_local ]]; then nix --experimental-features 'nix-command flakes' -Lv build ".#nixosConfigurations.$target.config.system.build.toplevel" store_path=$(readlink -f result) nix-copy-closure --to root@"$target" -v "$store_path" ssh root@"$target" "$store_path/bin/switch-to-configuration" switch else hostname=$(echo "$target" | cut -d . -f 1) rsync -az "$(dirname "$0")" root@"$target":nix-config echo "$hostname> nixos-rebuild switch" exec ssh root@"$target" "nixos-rebuild --flake ./nix-config#$hostname switch" fi