install_anywhere (1312B)
1 #!/usr/bin/env bash 2 set -euo pipefail 3 4 HOST_TARGET="${1:-}" 5 6 if [[ -z "$HOST_TARGET" ]]; then 7 echo "Usage: $0 <hostname>" 8 exit 1 9 fi 10 11 HOST_DIR="hosts/$HOST_TARGET" 12 mkdir -p "$HOST_DIR" 13 14 IS_DISKO=$(nix eval .#configData.hosts."$HOST_TARGET".disko --json 2>/dev/null || echo "false") 15 16 if [[ "$IS_DISKO" == "true" && ! -f "$HOST_DIR/disk-config.nix" ]]; then 17 echo "Copying default disk-config.nix for $HOST_TARGET..." 18 cp ./disk-config.nix "$HOST_DIR/disk-config.nix" 19 git add "$HOST_DIR/disk-config.nix" 20 fi 21 22 if [[ ! -f "$HOST_DIR/configuration.nix" ]]; then 23 echo "Creating bootstrap configuration.nix for $HOST_TARGET..." 24 cat >"$HOST_DIR/configuration.nix" <<EOF 25 { ... }: { 26 imports = [ ./hardware-configuration.nix ]; 27 networking.hostName = "$HOST_TARGET"; 28 boot.loader.grub.enable = true; 29 boot.loader.grub.device = "nodev"; 30 system.stateVersion = "26.11"; 31 } 32 EOF 33 git add "$HOST_DIR/configuration.nix" 34 fi 35 36 echo "Resolving IP for $HOST_TARGET..." 37 IP=$(nix eval .#configData.hosts."$HOST_TARGET".hostname --raw) 38 39 if ! ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 "root@$IP" "echo OK" >/dev/null 2>&1; then 40 exit 1 41 fi 42 43 nix run github:nix-community/nixos-anywhere -- \ 44 --flake ".#$HOST_TARGET" \ 45 --generate-hardware-config nixos-generate-config "$HOST_DIR/hardware-configuration.nix" \ 46 "root@$IP"