module utils { export def is_ssd [device: string] { $device =~ '^/dev/(nvme|mmcblk)' } } module auto_partition { use utils export def efi [device: string] { info "Creating efi partitions" efi_layout $device if utils is_ssd $device { debug "Creating file systems for ssd" efi_create_fs_ssd $device } else { debug "Creating file systems for hdd" efi_create_fs_hdd $device } } def efi_layout [device: string] { run parted -s $device mklabel gpt debug "Partition table created" run parted -s $device mkpart fat32 0 300 debug "EFI partition created" run parted -s $device mkpart primary btrfs 512MIB 100% debug "Root partition created" } def efi_create_fs_ssd [device: string] { todo "Implement SSD partitioning" } def efi_create_fs_hdd [device: string] { let boot_part = $"($device)1"; let root_part = $"($device)2" run mkfs.vfat -F32 $boot_part run mkfs.btrfs -f $root_part run mount $root_part /mnt with-cwd /mnt { run btrfs subvolume create @ run btrfs subvolume create @home } run umount $root_part run mount $root_part /mnt -o subvol=@ mkdir /mnt/boot/efi mkdir /mnt/home run mount $root_part /mnt/home -o subvol=@home run mount $boot_part /mnt/boot/efi } export def bios [device: string] { debug "Creating bios partitions" bios_layout $device todo "Implement BIOS filesystems" } def bios_layout [device: string] { parted -s $device mklabel msdos parted -s $device mkpart primary ext4 1MIB 512MIB parted -s $device mkpart primary btrfs 512MIB 100% } } # Applies all system changes of `create-partitions` def main [cfg] { debug $"Creating partitions with config ($cfg)" if $cfg.partitions == "Auto" { info "Creating partitions automatically..." use auto_partition if $cfg.efi_partition { auto_partition efi $cfg.device } else { auto_partition bios $cfg.device } } else { info "Creating partitions manually" todo "Implement manual partitioning" } info "Partitions created!" }