# sudo nix --experimental-features "nix-command flakes" run github:nix-community/disko/latest -- --mode disko /persist/dots/hosts/nixos-testbed/disko-config.nix
# time sudo nixos-install --flake /persist/dots#nixos-testbed
{ lib, ... }:
{
  # imports = [ disko.nixosModules.disko ];
  boot.initrd.supportedFilesystems.btrfs = true;
  boot.supportedFilesystems.btrfs = true;

  # From Impermanence's README: "Important note: Make sure your persistent
  # volumes are marked with neededForBoot, otherwise you will run into
  # problems."
  fileSystems."/persist".neededForBoot = true;

  disko.devices = {
    disk = {
      bootroot = {
        type = "disk";
        device = "/dev/disk/by-id/ata-Samsung_SSD_870_EVO_1TB_S75BNL0WA33853H";
        content = {
          type = "gpt";
          partitions = {
            ESP = {
              size = "512M";
              type = "EF00";
              content = {
                type = "filesystem";
                format = "vfat";
                mountpoint = "/boot";
                mountOptions = [ "umask=0077" ];
              };
            };
            root = {
              size = "100%";
              content = {
                type = "btrfs";

                mountpoint = "/partition-root";
                swap.swapfile.size = "4G";

                # Override existing partitions.
                extraArgs = [ "-f" ];

                # Subvolumes must set a mountpoint in order to be mounted,
                # *unless their parent is mounted*.
                subvolumes = {
                  # Subvolume names do not necessarily correspond to
                  # mountpoints, despite the structural resemblance to a file
                  # path.
                  "/rootfs" = {
                    mountpoint = "/";
                  };
                  "/nix" = {
                    mountpoint = "/nix";
                  };
                  "/persist" = {
                    mountpoint = "/persist";
                  };
                  "/persist/home" = {
                    mountpoint = "/persist/home";
                  };
                  "/swap" = {
                    mountpoint = "/.swapvol";
                    swap.swapfile.size = "4G";
                  };
                };
              };
            };
          };
        };
      };
    };
  };
}
