From 1087715a1b16522b38f601d44e112d77c7261fc3 Mon Sep 17 00:00:00 2001 From: clerie Date: Sun, 26 Feb 2023 22:32:26 +0100 Subject: [PATCH] hosts/_iso: add auto install script --- hosts/_iso/configuration.nix | 72 +++++++++++++++++++++++++++++++++++- 1 file changed, 71 insertions(+), 1 deletion(-) diff --git a/hosts/_iso/configuration.nix b/hosts/_iso/configuration.nix index f2c62a5..937276a 100644 --- a/hosts/_iso/configuration.nix +++ b/hosts/_iso/configuration.nix @@ -1,10 +1,80 @@ { pkgs, lib, modulesPath, ... }: -{ +let + nixfiles-auto-install = pkgs.writeScriptBin "nixfiles-auto-install" '' + #!${pkgs.bash}/bin/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 + ''; +in { imports = [ (modulesPath + "/installer/cd-dvd/installation-cd-base.nix") ]; networking.hostName = "isowo"; isoImage.isoBaseName = "nixos-isowo"; + + environment.systemPackages = [ + nixfiles-auto-install + ]; }