blob: 9173646a708f913d35031895b57737eec639a7ac (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
#!/usr/bin/env bash
set -euo pipefail
# --- Defaults ---
HOSTNAME=""
MAIN_DISK="/dev/nvme0n1"
STORAGE_DISK=""
REPO_URL="https://codeberg.org/adikro/nixos-config.git"
TEMP_CONFIG="/tmp/config/etc/nixos-config"
USE_FACTER=true
WRITE_EFI=true
# --- Parse Arguments ---
# Added 'g' (generate-config) and 'n' (no-efi) to options
PARSED_ARGS=$(getopt -z -o h:m:s:r:c:gn --long hostname:,main:,storage:,repo:,config:,generate-config,no-efi -- "$@")
eval set -- "$PARSED_ARGS"
while true; do
case "$1" in
-h|--hostname) HOSTNAME="$2"; shift 2 ;;
-m|--main) MAIN_DISK="$2"; shift 2 ;;
-s|--storage) STORAGE_DISK="$2"; shift 2 ;;
-r|--repo) REPO_URL="$2"; shift 2 ;;
-c|--config) TEMP_CONFIG="$2"; shift 2 ;;
-g|--generate-config) USE_FACTER=false; shift ;;
-n|--no-efi) WRITE_EFI=false; shift ;;
--) shift; break ;;
*) echo "Internal error!"; exit 1 ;;
esac
done
# --- Validation ---
if [[ -z "$HOSTNAME" || -z "$MAIN_DISK" ]]; then
echo "Usage: sudo ./install.sh --hostname <name> [options]"
echo "Options: --main <disk> --storage <disk> --repo <url> --config <path> --generate-config --no-efi"
exit 1
fi
# --- Summary & Confirmation ---
echo "------------------------------------------------------------"
echo "INSTALLATION PLAN"
echo " Hostname: $HOSTNAME"
echo " Main Disk: $MAIN_DISK"
echo " Storage Disk: ${STORAGE_DISK:-None}"
echo " Hardware Mode: $([ "$USE_FACTER" = true ] && echo "Facter" || echo "Legacy Generate-Config")"
echo " Write EFI: $WRITE_EFI"
echo " Repo URL: $REPO_URL"
echo "------------------------------------------------------------"
read -p "Proceed with formatting? (y/N): " confirm
[[ "$confirm" != [yY] ]] && exit 1
echo "### 1. Preparing GPG ###"
gpg --import ./private.asc || echo "GPG key already present."
echo "### 2. Cloning Configuration ###"
sudo rm -rf "$TEMP_CONFIG"
git clone "$REPO_URL" "$TEMP_CONFIG"
cd "$TEMP_CONFIG"
echo "### 3. Hardware Configuration ###"
mkdir -p "./hosts/$HOSTNAME"
if [ "$USE_FACTER" = true ]; then
echo "Running Facter scan..."
# Note: Using your specified format for the command
sudo nix run github:nix-community/nixos-facter -- -o "./hosts/$HOSTNAME/facter.json"
git add "./hosts/$HOSTNAME/facter.json"
else
echo "Generating legacy hardware config..."
sudo nixos-generate-config --no-filesystems --root /tmp/nixos-gen-root
sudo mv /tmp/nixos-gen-root/etc/nixos/hardware-configuration.nix "./hosts/$HOSTNAME/hardware-configuration.nix"
sudo rm -rf /tmp/nixos-gen-root
git add "./hosts/$HOSTNAME/hardware-configuration.nix"
fi
echo "### 4. SOPS Key Extraction ###"
if [[ -n "$STORAGE_DISK" ]]; then
echo "Extracting storage_key..."
nix shell nixpkgs#sops -c sops -d --extract '["storage_key"]' secrets.yaml > /tmp/storage.key
fi
echo "### 5. Disko Install ###"
DISKO_ARGS=(
--flake ".#$HOSTNAME"
--disk main "$MAIN_DISK"
)
# Conditionally add the EFI flag
if [ "$WRITE_EFI" = true ]; then
DISKO_ARGS+=(--write-efi-boot-entries)
fi
# Append storage disk if defined
if [[ -n "$STORAGE_DISK" ]]; then
DISKO_ARGS+=(--disk storage "$STORAGE_DISK")
fi
sudo nix run 'github:nix-community/disko/latest#disko-install' -- "${DISKO_ARGS[@]}"
echo "------------------------------------------------------------"
echo "INSTALL COMPLETE. Remove pendrive and reboot."
|