66 lines
1.2 KiB
Bash
66 lines
1.2 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
hostname=host${RANDOM}
|
|
|
|
echo "[I] Deploying with hostname ${hostname}"
|
|
|
|
device=""
|
|
for dev in "/dev/vda" "/dev/sda"; do
|
|
if [[ -b $dev ]]; then
|
|
device=$dev
|
|
break
|
|
fi
|
|
done
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case $1 in
|
|
--hostname)
|
|
hostname=$2
|
|
shift
|
|
shift
|
|
;;
|
|
*)
|
|
echo "unknown option: $1"
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
echo "[I] Formatting disk"
|
|
|
|
if [[ -z $device ]]; then
|
|
echo "[E] No device to install to"
|
|
exit 1
|
|
fi
|
|
|
|
echo "[I] Using ${device}"
|
|
|
|
parted --script $device mklabel gpt
|
|
parted --script $device disk_set pmbr_boot on
|
|
|
|
parted --script $device mkpart boot 0% 512M
|
|
parted --script $device set 1 bios_grub on
|
|
|
|
parted --script $device mkpart root 512M 100%
|
|
|
|
echo "[I] Creating file system"
|
|
|
|
mkfs.ext4 -F ${device}2
|
|
|
|
echo "[I] Mount file system"
|
|
|
|
mount ${device}2 /mnt
|
|
|
|
echo "[I] Generate NixOS configuration"
|
|
|
|
nixfiles-generate-config --root /mnt --hostname "${hostname}"
|
|
|
|
sed -i "s~# boot\.loader\.grub\.device = \"/dev/sda\";~boot\.loader\.grub\.device = \"${device}\";~g" "/mnt/etc/nixos/hosts/${hostname}/configuration.nix"
|
|
|
|
echo "[I] Install NixOS"
|
|
|
|
nixos-install --flake "/mnt/etc/nixos#${hostname}" --root /mnt --no-root-password
|
|
|