{ config, lib, ... }: with lib; let cfg = config.system.fileSystemLayouts; in { options.system.fileSystemLayouts = { enable = mkEnableOption (mdDoc "fileSystemLayout"); mainDisk = mkOption { type = lib.types.path; example = literalExpression "/dev/disk/by-uuid/0442cb6d-f13a-4635-b487-fa76189774c5"; description = lib.mdDoc "Path to the main disk"; }; efiDisk = mkOption { type = lib.types.path; example = literalExpression "/dev/disk/by-uuid/5143-6136"; description = lib.mdDoc "Path to the main disk"; }; }; config = mkIf cfg.enable { fileSystems = { "/" = { device = "none"; fsType = "tmpfs"; options = ["defaults" "size=2G" "mode=755"]; }; "/nix" = { device = cfg.mainDisk; fsType = "btrfs"; options = ["subvol=nix" "compress-force=zstd:15"]; }; "/srv" = { device = cfg.mainDisk; fsType = "btrfs"; options = ["subvol=storage" "compress-force=zstd:15"]; }; "/boot" = { device = cfg.efiDisk; fsType = "vfat"; }; "/etc/nixos" = { device = "/srv/nix-config"; options = ["bind"]; }; # This results in infinite recursion, don't ask my why # "${config.users.users.soispha.home}/.config" = { # device = "none"; # fsType = "tmpfs"; # options = ["defaults" "size=1G" "mode=755"]; # }; }; swapDevices = []; }; }