Add disko as a flake input (following nixpkgs) and wire its NixOS module into the host-builder, so any Host can declare a disk layout while the layout itself stays a per-Host concern. neogaia's layout (hosts/neogaia/disk.nix): one GPT NVMe disk with a systemd-boot EFI system partition and a LUKS container holding btrfs with @root/@home/@nix subvolumes. The initrd prompts for the passphrase on a normal boot. Swap is RAM-backed zram, so there is no on-disk swap partition; zramSwap is enabled directly for now (task 0003 lifts it into a toggle Module). The task-0001 placeholder fileSystems are removed since disko now derives them.
67 lines
2.0 KiB
Nix
67 lines
2.0 KiB
Nix
{ ... }:
|
|
# neogaia's disk layout, declared with disko and interpreted by the disko module
|
|
# the host-builder wires in. This is a per-Host concern: another Host declares a
|
|
# different `disko.devices` (or none, preserving an existing pool by importing it).
|
|
#
|
|
# One NVMe disk, GPT: an EFI system partition for systemd-boot, and a LUKS
|
|
# container holding a btrfs filesystem with subvolumes. Swap is zram (RAM-backed),
|
|
# so there is deliberately no on-disk swap partition. disko derives the matching
|
|
# `fileSystems.*` and `boot.initrd.luks.devices.*` from this, so a normal boot
|
|
# prompts for the passphrase in the initrd and unlocks the encrypted root.
|
|
{
|
|
disko.devices.disk.main = {
|
|
type = "disk";
|
|
device = "/dev/nvme0n1";
|
|
content = {
|
|
type = "gpt";
|
|
partitions = {
|
|
ESP = {
|
|
size = "512M";
|
|
type = "EF00";
|
|
content = {
|
|
type = "filesystem";
|
|
format = "vfat";
|
|
mountpoint = "/boot";
|
|
mountOptions = [ "umask=0077" ];
|
|
};
|
|
};
|
|
luks = {
|
|
size = "100%";
|
|
content = {
|
|
type = "luks";
|
|
name = "cryptroot";
|
|
settings.allowDiscards = true;
|
|
content = {
|
|
type = "btrfs";
|
|
extraArgs = [ "-f" ];
|
|
subvolumes = {
|
|
"@root" = {
|
|
mountpoint = "/";
|
|
mountOptions = [
|
|
"compress=zstd"
|
|
"noatime"
|
|
];
|
|
};
|
|
"@home" = {
|
|
mountpoint = "/home";
|
|
mountOptions = [
|
|
"compress=zstd"
|
|
"noatime"
|
|
];
|
|
};
|
|
"@nix" = {
|
|
mountpoint = "/nix";
|
|
mountOptions = [
|
|
"compress=zstd"
|
|
"noatime"
|
|
];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
}
|