summaryrefslogtreecommitdiff
path: root/scripts/install.sh
diff options
context:
space:
mode:
authoradikro <adikro@disroot.org>2026-02-12 00:41:07 +0100
committeradikro <adikro@disroot.org>2026-02-12 00:41:07 +0100
commit1ff6f0eb48961e6482ec1b7d0dd9b606e85ddc79 (patch)
tree62099e5c57c7ffe92777f800ec45ee5d68a16ecf /scripts/install.sh
parent233e5fb7d43a0736857ee6b9f74967f03b73837c (diff)
disko and bootloader changes
Diffstat (limited to 'scripts/install.sh')
-rw-r--r--scripts/install.sh101
1 files changed, 101 insertions, 0 deletions
diff --git a/scripts/install.sh b/scripts/install.sh
new file mode 100644
index 0000000..9173646
--- /dev/null
+++ b/scripts/install.sh
@@ -0,0 +1,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."