diff options
| author | adikro <adikro@disroot.org> | 2026-02-12 00:41:07 +0100 |
|---|---|---|
| committer | adikro <adikro@disroot.org> | 2026-02-12 00:41:07 +0100 |
| commit | 1ff6f0eb48961e6482ec1b7d0dd9b606e85ddc79 (patch) | |
| tree | 62099e5c57c7ffe92777f800ec45ee5d68a16ecf /scripts | |
| parent | 233e5fb7d43a0736857ee6b9f74967f03b73837c (diff) | |
disko and bootloader changes
Diffstat (limited to 'scripts')
| -rw-r--r-- | scripts/install.sh | 101 | ||||
| -rw-r--r-- | scripts/setup.sh | 22 |
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 |
