From 179bf31d5edc90c826dacf0b06b149469d8d14fa Mon Sep 17 00:00:00 2001 From: Kleidi Bujari Date: Sat, 5 Apr 2025 14:58:10 -0400 Subject: automate hosts gen and bump nixpkgs --- packages/cv/cv.typ | 2 +- packages/partitioner.nix | 95 ++++++++++++++++++++++++++++++++++++------------ 2 files changed, 73 insertions(+), 24 deletions(-) (limited to 'packages') diff --git a/packages/cv/cv.typ b/packages/cv/cv.typ index fb36816..524565c 100644 --- a/packages/cv/cv.typ +++ b/packages/cv/cv.typ @@ -1,6 +1,6 @@ #set document(author: "Kleidi Bujari", title: "Kleidi's Resume!") #set text(size: 10pt, lang: "en", ligatures: false) -#set page(margin: 0.5in, paper: "us-letter") +// #set page(margin: 0.5in, paper: "us-letter") #show link: underline #set par(justify: true) diff --git a/packages/partitioner.nix b/packages/partitioner.nix index cd36f5d..df9f37d 100644 --- a/packages/partitioner.nix +++ b/packages/partitioner.nix @@ -1,33 +1,82 @@ # Apply standard partition layout to a disk device. { pkgs, ... }: -pkgs.writeShellScriptBin "partitioner" '' - set -e +pkgs.writeShellApplication { + name = "partitioner"; - if [ $# -ne 1 ]; then - echo "Usage: $0 " - exit 1 - fi + runtimeInputs = with pkgs; [ + gptfdisk + dosfstools + zfs + coreutils + util-linux + ]; - DISK=$1 + text = '' + set -euo pipefail - # Clear existing partitions - sgdisk -Z "$DISK" + if [ $# -ne 1 ]; then + echo "Usage: $0 " + echo "Example: $0 /dev/sda or /dev/nvme0n1" + exit 1 + fi - # 1GB EFI partition (FAT32) - sgdisk -n 1:0:+1G -t 1:EF00 -c 1:EFI "$DISK" + DISK="$1" - # Rest for ZFS - sgdisk -n 2:0:0 -t 2:BF01 -c 2:ZFS "$DISK" + if [ ! -b "$DISK" ]; then + echo "Error: $DISK is not a valid block device" + exit 1 + fi - mkfs.fat -F32 -nEFI "" + echo "creating partition table on $DISK" + # create gpt partition table + sgdisk --zap-all "$DISK" - zpool create \ - -o ashift=12 \ - -O compression=on \ - -O acltype=posixacl \ - -O xattr=sa \ - -O relatime=off - -O normalization=formD \ - zroot "$DISK" -'' + echo "creating efi partition" + sgdisk --new=1:0:+1G --typecode=1:EF00 --change-name=1:ESP "$DISK" + + echo "creating zfs partition with remaining space" + sgdisk --new=2:0:0 --typecode=2:BF00 --change-name=2:ZROOT "$DISK" + + if [[ "$DISK" == *"nvme"* ]]; then + EFI_PART="''${DISK}p1" + ZFS_PART="''${DISK}p2" + else + EFI_PART="''${DISK}1" + ZFS_PART="''${DISK}2" + fi + + sleep 1 + + echo "formatting rfi partition ($EFI_PART)" + mkfs.fat -F32 -n ESP "$EFI_PART" + + echo "creating pool on $ZFS_PART" + zpool create -f \ + -o ashift=12 \ + -o autotrim=on \ + -O acltype=posixacl \ + -O canmount=off \ + -O compression=on \ + -O mountpoint=none \ + -O normalization=formD \ + -O relatime=off \ + -O xattr=sa \ + zroot "$ZFS_PART" + + # create ZFS datasets + echo "Creating datasets" + + zfs create \ + -o refreservation=10G \ + -o mountpoint=none \ + zroot/reserved + + zfs create -o mountpoint=legacy zroot/nix + zfs create -o mountpoint=legacy zroot/home + zfs create -o mountpoint=legacy zroot/persist + + echo "---" + echo "done" + ''; +} -- cgit v1.3.1