{ pkgs ? import {} , ownLib ? import ../lib/default.nix { } , dir , rebuildarg , moreargs ? "" , diskId ? (import ((builtins.getEnv "PWD")+"/${dir}/hw.nix") {}).hardware.encryptedDisk.diskId , gitRoot ? "$(git rev-parse --show-toplevel)" }: let mntRootVol="/mnt/${diskId}-root"; in rec { rebuild = pkgs.writeScript "script" '' #!/usr/bin/env bash set -xe pushd ${gitRoot}/${dir} export NIXOS_CONFIG="$PWD"/configuration.nix [[ -e "''${NIXOS_CONFIG}" ]] nixos-rebuild -I nixos-config=''${NIXOS_CONFIG} ${rebuildarg} ${moreargs} if test -L result; then rm result fi ''; diskMount = pkgs.writeScript "script" '' #!/usr/bin/env bash set -xe echo Mounting ${diskId} cryptsetup luksOpen ${ownLib.disk.bootLuksDevice diskId} ${ownLib.disk.luksName diskId} vgchange -ay ${ownLib.disk.volumeGroup diskId} mkdir -p /mnt mkdir ${mntRootVol} mount ${ownLib.disk.rootFsDevice diskId} ${mntRootVol} mount ${ownLib.disk.rootFsDevice diskId} ${mntRootVol}/nixos/home -o subvol=home mount ${ownLib.disk.bootFsDevice diskId} ${mntRootVol}/nixos/boot ''; diskUmount = pkgs.writeScript "script" '' #!/usr/bin/env bash set -xe umount -R ${mntRootVol} rmdir ${mntRootVol} vgchange -an ${ownLib.disk.volumeGroup diskId} cryptsetup luksClose ${ownLib.disk.luksName diskId} sync ''; diskInstall = pkgs.writeScript "script" '' #!/usr/bin/env bash set -xe pushd ${gitRoot}/${dir} export NIXOS_CONFIG="$PWD"/configuration.nix [[ -e "''${NIXOS_CONFIG}" ]] [[ -e "${mntRootVol}/nixos" ]] nixos-install --max-jobs 5 --cores 4 --no-root-passwd --root ${mntRootVol}/nixos ''; diskPrepare = pkgs.writeScript "script" '' #!/usr/bin/env bash set -xe read -p "Continue to format ${ownLib.disk.bootGrubDevice diskId} (YES/n)?" choice case "$choice" in YES ) echo "Continuing in 3 seconds..."; sleep 3;; n|N ) echo "Exiting..."; exit 0;; * ) echo "Exiting..."; exit 1;; esac # Partition sync { fdisk -w always -W always ${ownLib.disk.bootGrubDevice diskId} <