#!/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 [options]" echo "Options: --main --storage --repo --config --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."