134 lines
4.3 KiB
Bash
134 lines
4.3 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
# Exit on error
|
|
set -e
|
|
|
|
# Clear screen for readability
|
|
clear
|
|
|
|
echo "################################################################"
|
|
echo "# WARNING: This script will wipe the target drive! #"
|
|
echo "# #"
|
|
echo "# This script is designed to be run from a NixOS Live ISO. #"
|
|
echo "# It handles LVM, LUKS encryption, Swap, and User Passwords. #"
|
|
echo "# It will prompt you for your specific hardware details and #"
|
|
echo "# then automate the partitioning, formatting, and #"
|
|
echo "# installation using your Git repository. #"
|
|
echo "################################################################"
|
|
echo ""
|
|
|
|
# Confirm to continue
|
|
read -p "Do you want to continue with the installation? (y/N): " START_CONFIRM
|
|
if [[ $START_CONFIRM != [yY] ]]; then
|
|
echo "Installation aborted."
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
# --- Prompts ---
|
|
read -p "Enter target drive (e.g., /dev/nvme0n1 or /dev/sda): " DRIVE
|
|
read -p "Enter hostname: " HOSTNAME
|
|
read -p "Enter username: " USER
|
|
read -s -p "Enter a temporary password for $USER: " USER_PASS
|
|
echo ""
|
|
read -p "Enter Git repo URL (e.g., gitea.com/user/dotfiles): " REPO_URL
|
|
read -p "Enable LUKS Encryption? (y/n): " USE_LUKS
|
|
read -p "Use LVM (Logical Volume Manager)? (y/n): " USE_LVM
|
|
read -p "Enter Swap size (e.g., 8G, or '0' for none): " SWAP_SIZE
|
|
|
|
# --- Summary ---
|
|
echo ""
|
|
echo "Summary of installation:"
|
|
echo "- Drive: $DRIVE"
|
|
echo "- Hostname: $HOSTNAME"
|
|
echo "- User: $USER"
|
|
echo "- Repo: $REPO_URL"
|
|
echo "- LUKS: $USE_LUKS"
|
|
echo "- LVM: $USE_LVM"
|
|
echo "- Swap: $SWAP_SIZE"
|
|
echo ""
|
|
|
|
read -p "Final confirmation: Wipe $DRIVE and install $HOSTNAME? (y/N): " FINAL_CONFIRM
|
|
if [[ $FINAL_CONFIRM != [yY] ]] then
|
|
echo "Installation aborted."
|
|
exit 1
|
|
fi
|
|
|
|
echo "--- Preparing Disk: $DRIVE ---"
|
|
# --- Partition Naming Logic ---
|
|
if [[ $DRIVE == *nvme* || $DRIVE == *mmcblk* ]]; then
|
|
BOOT_PART="${DRIVE}p1"
|
|
DATA_PART="${DRIVE}p2"
|
|
else
|
|
BOOT_PART="${DRIVE}1"
|
|
DATA_PART="${DRIVE}2"
|
|
fi
|
|
|
|
# --- Disk Prep ---
|
|
# --- Disk Prep ---
|
|
echo "--- Wiping $DRIVE ---"
|
|
sudo wipefs -a "$DRIVE"
|
|
sudo parted "$DRIVE" -- mklabel gpt
|
|
sudo parted "$DRIVE" -- mkpart ESP fat32 1MiB 512MiB
|
|
sudo parted "$DRIVE" -- set 1 esp on
|
|
sudo parted "$DRIVE" -- mkpart primary 512MiB 100%
|
|
sudo udevadm settle
|
|
|
|
# --- Formatting Boot ---
|
|
sudo mkfs.fat -F 32 -n boot "$BOOT_PART"
|
|
|
|
# --- LUKS Encryption ---
|
|
ROOT_DEV="$DATA_PART"
|
|
if [[ $USE_LUKS == [yY] ]]; then
|
|
echo "--- Configuring LUKS ---"
|
|
sudo cryptsetup luksFormat "$DATA_PART"
|
|
sudo cryptsetup open "$DATA_PART" cryptroot
|
|
ROOT_DEV="/dev/mapper/cryptroot"
|
|
fi
|
|
|
|
# --- LVM / Partitioning Logic ---
|
|
if [[ $USE_LVM == [yY] ]]; then
|
|
echo "--- Configuring LVM ---"
|
|
sudo pvcreate "$ROOT_DEV"
|
|
sudo vgcreate vg0 "$ROOT_DEV"
|
|
|
|
if [[ $SWAP_SIZE != "0" ]]; then
|
|
sudo lvcreate -L "$SWAP_SIZE" -n swap vg0
|
|
sudo mkswap -L swap /dev/vg0/swap
|
|
sudo swapon /dev/vg0/swap
|
|
fi
|
|
|
|
sudo lvcreate -l 100%FREE -n root vg0
|
|
sudo mkfs.ext4 -L nixos /dev/vg0/root
|
|
sudo mount /dev/vg0/root /mnt
|
|
else
|
|
echo "--- Configuring Standard Partition ---"
|
|
sudo mkfs.ext4 -L nixos "$ROOT_DEV"
|
|
sudo mount "$ROOT_DEV" /mnt
|
|
fi
|
|
|
|
echo "--- Mounting Filesystems ---"
|
|
sudo mkdir -p /mnt/boot
|
|
sudo mount /dev/disk/by-label/boot /mnt/boot
|
|
|
|
echo "--- Generating Hardware Configuration ---"
|
|
# This ensures the T480's specific UUIDs are recorded
|
|
sudo nixos-generate-config --root /mnt
|
|
|
|
echo "--- Installing NixOS from Gitea Flake ---"
|
|
# We use --no-root-passwd so you can set it on first boot,
|
|
# or it uses the password defined in your Nix config.
|
|
sudo nixos-install --root /mnt --flake "git+https://${REPO_URL}#${HOSTNAME}"
|
|
|
|
echo "--- Seeding Dotfiles ---"
|
|
sudo mkdir -p /mnt/home/$USER
|
|
sudo nix-shell -p git --run "git clone https://${REPO_URL} /mnt/home/$USER/.dotfiles"
|
|
sudo cp /mnt/etc/nixos/hardware-configuration.nix /mnt/home/$USER/.dotfiles/hosts/$HOSTNAME/hardware-configuration.nix
|
|
sudo chown -R 1000:1000 /mnt/home/$USER
|
|
|
|
echo ""
|
|
echo "################################################################"
|
|
echo "# INSTALLATION COMPLETE! #"
|
|
echo "# You can now type 'reboot' to start your new system. #"
|
|
echo "################################################################"
|