#!/bin/sh partition_disk() { parted "$DISK" -- mklabel gpt parted "$DISK" -- mkpart ESP fat32 1MiB 512MiB parted "$DISK" -- mkpart primary 512MiB 100% parted "$DISK" -- set 1 boot on mkfs.fat -F32 -n BOOT "$DISK"p1 } create_directories() { mkdir /mnt mkdir -p /mnt/boot mkdir -p /mnt/home/coolneng mkdir -p /mnt/home/coolneng/Downloads mkdir -p /mnt/nix mkdir -p /mnt/tmp } zfs_setup() { zpool create -f -o ashift=13 -O acltype=posixacl -O relatime=on \ -O xattr=sa -O dnodesize=legacy -O normalization=formD -O mountpoint=none \ -O canmount=off -O devices=off -R /mnt -O compression=zstd -O encryption=aes-256-gcm \ -O keyformat=passphrase -O keylocation=prompt syscea "$DISK"p2 zfs create -o mountpoint=none syscea zfs create -o mountpoint=legacy -o com.sun:auto-snapshot=false syscea/ephemeral zfs create -o mountpoint=legacy -o com.sun:auto-snapshot=false syscea/ephemeral/nix zfs create -o mountpoint=legacy -o com.sun:auto-snapshot=false -o sync=disabled -o setuid=off syscea/ephemeral/tmp zfs create -o mountpoint=legacy -o com.sun:auto-snapshot=false syscea/stateful zfs create -o mountpoint=legacy -o com.sun:auto-snapshot=true syscea/stateful/home zfs create -o mountpoint=legacy -o com.sun:auto-snapshot=false syscea/stateful/home/downloads zfs create -o mountpoint=legacy -o com.sun:auto-snapshot=false syscea/stateful/root zfs create -V 6G -b "$(getconf PAGESIZE)" -o compression=zle -o logbias=throughput -o sync=always \ -o primarycache=metadata -o secondarycache=none -o com.sun:auto-snapshot=false syscea/ephemeral/swap mkswap -f /dev/zvol/syscea/swap && swapon /dev/zvol/syscea/swap } mount_datasets() { mount "$DISK"p1 /mnt/boot mount -t zfs syscea/stateful/root /mnt mount -t zfs syscea/stateful/home /mnt/home/coolneng mount -t zfs syscea/stateful/home/downloads /mnt/home/coolneng/Downloads mount -t zfs syscea/ephemeral/nix /mnt/nix mount -t zfs syscea/ephemeral/tmp /mnt/tmp } install_system() { nixos-generate-config --root /mnt nix-shell -p git nixFlakes --command "nixos-install --root /mnt --flake ." passwd passwd coolneng } deploy_dotfiles() { chown -R coolneng:users /mnt/home/coolneng git clone https://git.coolneng.duckdns.org/coolneng/dotfiles /mnt/home/coolneng/.dotfiles git clone https://git.coolneng.duckdns.org/coolneng/doom.d /mnt/home/coolneng/.doom.d git clone https://git.coolneng.duckdns.org/coolneng/pass /mnt/home/coolneng/.password-store cd /mnt/home/coolneng/.dotfiles || exit nix-shell -p stow --command "stow ." } restore_files() { mkdir /tmp/iwd scp zion:/vault/backups/panacea/iwd/iwd-networks.zip /tmp/iwd cd /tmp/iwd || exit unzip iwd-networks.zip mv ./* /mnt/var/lib/iwd } usage() { echo "Usage: install.sh " echo "disk: full path to the disk (e.g. /dev/sda)" exit 1 } if [ $# != 1 ]; then usage fi DISK="$1" echo "Let's start by partitioning the disk" partition_disk echo "Now we're creating the directories for the installation" create_directories echo "Starting up the ZFS machinery" zfs_setup echo "Mounting the horse" mount_datasets echo "Lift off to the NixOS planet" install_system echo "Adding pictures of Stallman" deploy_dotfiles echo "I'd just like to interject for a moment..." restore_files echo "All ready, time to rejoice"