aboutsummaryrefslogblamecommitdiff
path: root/profiles/disk/btrfs-on-luks.nix
blob: aea2c0c43031f530136b185c30221b7f4acaccd9 (plain) (tree)
1
2
3
4
5
6
7
8
                     






                   





                                          
                   

















                                            
              







                                             
                         

















                                                              







                    







                                               
    
                                              
 
{ lib, config, ... }:
let
  btrfsopt = [
    "compress=zstd"
    "noatime"
  ];
in
{
  services.btrfs.autoScrub.enable = true;
  services.btrfs.autoScrub.fileSystems = [
    "/nix"
    "/data"
  ];

  disko.devices = {
    disk.disk1 = {
      type = "disk";
      device = lib.mkDefault "/dev/nvme0n1";
      content = {
        type = "gpt";
        partitions = {
          boot = {
            name = "boot";
            size = "1M";
            type = "EF02";
          };
          esp = {
            size = "2G";
            type = "EF00";
            content = {
              type = "filesystem";
              format = "vfat";
              mountpoint = "/boot";
            };
          };
          luks = {
            size = "100%";
            content = {
              type = "luks";
              name = "nixos";
              passwordFile = "/tmp/disk.key";
              settings.allowDiscards = true;
              content = {
                type = "btrfs";
                extraArgs = [ "-f" ];
                subvolumes = {
                  "/root" = lib.mkIf (!config.ephemeralRoot) {
                    mountpoint = "/";
                    mountOptions = btrfsopt;
                  };
                  "/nix" = {
                    mountpoint = "/nix";
                    mountOptions = btrfsopt;
                  };
                  "/data" = {
                    mountpoint = "/data";
                    mountOptions = btrfsopt;
                  };
                  "/persist" = {
                    mountpoint = "/persist";
                    mountOptions = btrfsopt;
                  };
                };
              };
            };
          };
        };
      };
    };
    nodev."/" = lib.mkIf config.ephemeralRoot {
      fsType = "tmpfs";
      mountOptions = [
        "size=16G"
        "defaults"
        "mode=755"
      ];
    };
  };
  fileSystems."/persist".neededForBoot = true;
}