{ disko, config, ... }:
{
  imports = [ disko.nixosModules.disko ];

  disko.devices = {
    disk = {
      "${config.networking.hostName}" = {
        type = "disk";
        device = "/dev/nvme0n1";
        content = {
          type = "gpt";
          partitions = {
            ESP = {
              size = "2G";
              type = "EF00";
              content = {
                type = "filesystem";
                format = "vfat";
                mountpoint = "/boot";
                mountOptions = [ "fmask=0022" "dmask=0022" ];
              };
            };
            luks = {
              size = "100%";
              content = {
                type = "luks";
                name = "crypt-nvme";
                settings.allowDiscards = true;
                passwordFile = "/tmp/secret.key";
                content = {
                  type = "lvm_pv";
                  vg = "${config.networking.hostName}";
                };
              };
            };
          };
        };
      };
    };

    lvm_vg = {
      "${config.networking.hostName}" = {
        type = "lvm_vg";
        lvs = {
          root = {
            size = "100%";
            content = {
              type = "btrfs";
              extraArgs = [ "-f" ];
              subvolumes = {
                "/root" = {
                  mountpoint = "/";
                  mountOptions = [ "compress=zstd" "noatime" ];
                };
                "/prev" = {
                  mountpoint = "/prev";
                  mountOptions = [ "compress=zstd" "noatime" ];
                };
                "/nix" = {
                  mountpoint = "/nix";
                  mountOptions = [ "compress=zstd" "noatime" ];
                };

                # Impermanence
                "/persist" = {
                  mountpoint = "/persist";
                  mountOptions = [ "compress=zstd" "noatime" ];
                };
                "/persist/.snapshots" = { };

                "/jimbo" = {
                  mountpoint = "/persist/home/jimbo";
                  mountOptions = [ "compress=zstd" "noatime" ];
                };
                "/jimbo/.snapshots" = { };
              };
            };
          };
          swap = {
            size = "8G";
            content = {
              type = "swap";
              discardPolicy = "both";
            };
          };
        };
      };
    };
  };

  # Needed for impermanence
  fileSystems = {
    "/persist".neededForBoot = true;
    "/persist/home/jimbo".neededForBoot = true;
  };
}