# A bunch of predefined filesystem configurations for several devices. This is
# nice for setting up shop for certain tasks with the flick of the switch to ON
# (e.g., `config.profiles.filesystem.archive.enable = true`) and not have
# conflicting settings all throughout the configuration.
{ config, options, lib, pkgs, ... }:

let
  cfg = config.profiles.filesystem;
in
{
  options.profiles.filesystem = {
    archive.enable = lib.mkOption {
      type = lib.types.bool;
      description = ''
        Add the archive storage to the list of filesystems.
      '';
      default = false;
    };

    external-hdd.enable = lib.mkOption {
      type = lib.types.bool;
      description = ''
        Add the external hard drive to the list of filesystems.
      '';
      default = false;
    };
  };

  config = lib.mkMerge [
    (lib.mkIf cfg.archive.enable {
      fileSystems."/mnt/archives" = {
        device = "/dev/disk/by-uuid/6ba86a30-5fa4-41d9-8354-fa8af0f57f49";
        fsType = "btrfs";
        noCheck = true;
        options = [
          # These are btrfs-specific mount options which can found in btrfs.5
          # manual page.
          "subvol=@"
          "noatime"
          "compress=zstd:9"
          "space_cache=v2"

          # General mount options from mount.5 manual page.
          "noauto"
          "nofail"
          "user"

          # See systemd.mount.5 and systemd.automount.5 manual page for more
          # details.
          "x-systemd.automount"
          "x-systemd.idle-timeout=2"
          "x-systemd.device-timeout=2"
        ];
      };
    })

    (lib.mkIf cfg.external-hdd.enable {
      fileSystems."/mnt/external-storage" = {
        device = "/dev/disk/by-uuid/665A391C5A38EB07";
        fsType = "ntfs";
        noCheck = true;
        options = [
          "nofail"
          "noauto"
          "user"

          # See systemd.mount.5 and systemd.automount.5 manual page for more
          # details.
          "x-systemd.automount"
          "x-systemd.device-timeout=2"
          "x-systemd.idle-timeout=2"
        ];
      };
    })
  ];
}