nix

configuration files that power my machines
Log | Files | Refs | README | LICENSE

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"