diff options
Diffstat (limited to 'scripts/install.sh')
| -rw-r--r-- | scripts/install.sh | 101 |
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." |
