{
  inputs,
  lib,
  bootDisk,
  ...
}:
{
  imports = [
    inputs.disko.nixosModules.disko
    inputs.impermanence.nixosModules.impermanence
  ];
  # Disk Partitioning
  disko.devices.disk.main = {
    device = bootDisk;
    type = "disk";
    content.type = "gpt";
    content.partitions = {
      boot = {
        name = "boot";
        type = "EF02";
        size = "1M";
        priority = 1;
      };
      esp = {
        name = "ESP";
        type = "EF00";
        size = "500M";
        content = {
          type = "filesystem";
          format = "vfat";
          mountpoint = "/boot";
          mountOptions = [ "umask=0077" ];
        };
      };
      swap = {
        size = "4G";
        content = {
          type = "swap";
          resumeDevice = true;
        };
      };
      root = {
        name = "root";
        size = "100%";
        content = {
          type = "lvm_pv";
          vg = "root_vg";
        };
      };
    };
  };

  # Logical Volume Set up
  disko.devices.lvm_vg.root_vg = {
    type = "lvm_vg";
    lvs.root = {
      size = "100%FREE";
      content = {
        type = "btrfs";
        extraArgs = [ "-f" ];
        subvolumes = {
          "/root".mountpoint = "/";
          "/persist".mountpoint = "/persist";
          "/persist".mountOptions = [
            "subvol=persist"
            "noatime"
          ];
          "/nix".mountpoint = "/nix";
          "/nix".mountOptions = [
            "subvol=nix"
            "noatime"
          ];
        };
      };
    };
  };

  # Back up old roots and delete older ones
  boot.initrd.postDeviceCommands = lib.mkAfter ''
    		mkdir /btrfs_tmp
    		mount /dev/root_vg/root /btrfs_tmp
    		if [[ -e /btrfs_tmp/root ]]; then
    			mkdir -p /btrfs_tmp/old_roots
    			timestamp=$(date --date="@$(stat -c %Y /btrfs_tmp/root)" "+%Y-%M-%D_%H:%M:%S")
    			mv /btrfs_tmp/root "/btrfs_tmp/old_roots/$timestamp"
    		fi

    		delete_subvolume_recursively() {
    			IFS=$'\n'
    			for i in $(btrfs subvolume list -o "$1" | cut -f 9- -d ' '); do
    				delete_subvolume_recursively "/btrfs_tmp/$i"
    			done
    			btrfs subvolume delete "$1"
    		}

    		for i in $(find /btrfs_tmp/old_roots/ -maxdepth 1 -mtime +30); do
    			delete_subvolume_recursively "$i"
    		done

    		btrfs subvolume create /btrfs_tmp/root
    		umount /btrfs_tmp
    	'';

  # Directories to persist between boots
  programs.fuse.userAllowOther = true;
  fileSystems."/persist".neededForBoot = true;
  environment.persistence."/persist" = {
    # Hide the mounts from showing up in the file manager.
    hideMounts = true;
    files = [
      "/etc/ssh/ssh_host_ed25519_key"
      "/etc/ssh/ssh_host_ed25519_key.pub"
      "/etc/machine-id"
    ];
  };

  home-manager.users.rafiq = {
    imports = [ inputs.impermanence.homeManagerModules.impermanence ];
    home.persistence."/persist/home/rafiq" = {
      files = [
        ".config/sops/age/keys.txt"
        ".ssh/id_ed25519"
      ];
      # Allows root and other users to access the bindfs files.
      allowOther = true;
    };
  };
}
