diff options
Diffstat (limited to 'hosts/disk-config/zfs-impermanence.nix')
-rw-r--r-- | hosts/disk-config/zfs-impermanence.nix | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/hosts/disk-config/zfs-impermanence.nix b/hosts/disk-config/zfs-impermanence.nix new file mode 100644 index 0000000..9087825 --- /dev/null +++ b/hosts/disk-config/zfs-impermanence.nix @@ -0,0 +1,80 @@ +# USAGE in your configuration.nix. +# Update devices to match your hardware. +# { +# imports = [ ./disko-config.nix ]; +# disko.devices.disk.main.device = "/dev/sda"; +# } +{ + disko.devices = { + disk = { + main = { + type = "disk"; + content = { + type = "gpt"; + partitions = { + ESP = { + size = "1G"; + type = "EF00"; + content = { + type = "filesystem"; + format = "vfat"; + mountpoint = "/boot"; + mountOptions = [ "umask=0077" ]; + }; + }; + zfs = { + size = "100%"; + content = { + type = "zfs"; + pool = "zroot"; + }; + }; + }; + }; + }; + }; + zpool = { + zroot = { + type = "zpool"; + rootFsOptions = { + # https://wiki.archlinux.org/title/Install_Arch_Linux_on_ZFS + acltype = "posixacl"; + atime = "off"; + compression = "zstd"; + mountpoint = "none"; + xattr = "sa"; + }; + options.ashift = "12"; + + datasets = { + "local" = { + type = "zfs_fs"; + options.mountpoint = "none"; + }; + "local/home" = { + type = "zfs_fs"; + mountpoint = "/home"; + # Used by services.zfs.autoSnapshot options. + options."com.sun:auto-snapshot" = "true"; + }; + "local/nix" = { + type = "zfs_fs"; + mountpoint = "/nix"; + options."com.sun:auto-snapshot" = "false"; + }; + "local/persist" = { + type = "zfs_fs"; + mountpoint = "/persist"; + options."com.sun:auto-snapshot" = "false"; + }; + "local/root" = { + type = "zfs_fs"; + mountpoint = "/"; + options."com.sun:auto-snapshot" = "false"; + postCreateHook = "zfs list -t snapshot -H -o name | grep -E '^zroot/local/root@blank$' || zfs snapshot zroot/local/root@blank"; + }; + }; + }; + }; + }; +} |