#!/usr/bin/env nix #!nix shell nixpkgs#zsh --command zsh setopt ERR_EXIT PIPE_FAIL # load module to parse command line arguments zmodload zsh/zutil # parse any possible additional drive declarations zparseopts -D -E -A opts -- h x # enable XTRACE shell option for full debugging output of scripts if (( ${+opts[-x]} )); then set -x fi DIR="${0:h}" FLAKE="https://arrakis.bitgnome.net/nipsy/git/nix/snapshot/nix-master.tar" HOSTNAME="${1}" TARGET="${2}" if [[ -z "${TARGET}" ]] || (( ${+opts[-h]} )); then <<EOF >&2 usage: ${0:t} [ -h ] [ -x ] hostname target -h this message -x enable shell debug hostname hostname of nixosConfigurations defined host in our flake target PXE booted, SSH root accessible, installation target EOF exit 1 fi <<EOF ++++++++ The disk(s) on ${TARGET} are about to get wiped! WARNING! NixOS will be re-installed as ${HOSTNAME}. ++++++++ This is a destructive operation!!! EOF read -q '?Are you sure? [y/N] ' echo if [[ "${REPLY}" == "y" ]]; then ssh root@${TARGET} nix run github:nix-community/disko/latest -- \ --mode disko \ --flake ${FLAKE}#${HOSTNAME} ssh root@${TARGET} nixos-install --flake ${FLAKE}#${HOSTNAME} if [[ "${?}" -eq 0 ]]; then echo 'Unmounting file systems...' >&2 ssh root@${TARGET} mount | grep -v zfs | awk '$3 ~ /^\/mnt\// {print $3}' | xargs -i{} ssh root@${TARGET} umount -lf {} echo 'Unmounting ZFS file systems...' >&2 while ! ssh root@${TARGET} umount -t zfs -a; do echo 'attempting to umount all ZFS file systems' >&2; sleep 1; done echo 'Exporting zpool...' >&2 while ! ssh root@${TARGET} zpool export -a; do echo 'attempting to export all zpools' >&2; sleep 1; done echo 'Rebooting!' >&2 ssh root@${TARGET} reboot fi fi