{ 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 ]; }