summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rw-r--r--scripts/install.sh101
-rw-r--r--scripts/setup.sh22
2 files changed, 123 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."
diff --git a/scripts/setup.sh b/scripts/setup.sh
new file mode 100644
index 0000000..a3b0cb2
--- /dev/null
+++ b/scripts/setup.sh
@@ -0,0 +1,22 @@
+#!/usr/bin/env bash
+# Automate the post-reboot steps
+sudo mkdir -p /mnt/usb && sudo mount /dev/sdb1 /mnt/usb
+gpg --import /mnt/usb/private.asc
+gpg --import /mnt/usb/public.asc
+gpg --import-ownertrust /mnt/usb/trust.txt
+
+# Setup the repo properly
+sudo mkdir -p /etc/nixos
+sudo chown -R $USER:users /etc/nixos
+git clone git@codeberg.org:adikro/nixos-config.git /etc/nixos
+
+# Fix hardware config for the actual live system
+sudo rm /etc/nixos/hosts/desktop/hardware-configuration.nix
+sudo nixos-generate-config --no-filesystems --root /
+# Move it to the right place
+sudo mv /etc/nixos/hardware-configuration.nix /etc/nixos/hosts/desktop/
+
+# Update SOPS with new SSH key
+NEW_AGE=$(ssh-to-age < /etc/ssh/ssh_host_ed25519_key.pub)
+echo "New Age Key: $NEW_AGE"
+# You'll still need to manually edit .sops.yaml unless you use 'sed' to replace the key