{ lib, ... }:
let
  storage = "/storage/hot/data";

  binds = [
    (mkBind "change" "/var/lib/changedetection-io")
    (mkBind "cups" "/var/lib/cups")
    (mkBind "deluge" "/var/lib/deluge/.config/deluge")
    (mkBind "dkim" "/var/dkim")
    (mkBind "dovecot_index" "/var/lib/dovecot/indices")
    (mkBind "forgejo" "/var/lib/forgejo")
    (mkBind "grocy" "/var/lib/grocy")
    (mkBind "hass" "/var/lib/hass")
    (mkBind "jellyfin" "/var/lib/jellyfin")
    (mkBind "jellyfin_cache" "/var/cache/jellyfin")
    (mkBind "kavita" "/var/lib/kavita")
    (mkBind "letsencrypt" "/etc/letsencrypt")
    (mkBind "murmur" "/var/lib/murmur")
    (mkBind "nextcloud" "/var/lib/nextcloud")
    (mkBind "ovpn" "/var/lib/ovpn")
    (mkBind "paperless" "/var/lib/paperless")
    (mkBind "postgres" "/var/lib/postgresql")
    (mkBind "rabbitmq" "/var/lib/rabbitmq")
    (mkBind "sieve" "/var/sieve")
    (mkBind "terraria" "/var/lib/terraria")
    (mkBind "uptime_kuma" "/var/lib/uptime-kuma")
    (mkBind "vaultwarden" "/var/lib/vaultwarden")
    (mkBind "vmail" "/var/vmail")
  ];

  mkBind = name: path: {
    ${path} = {
      device = "${storage}/${name}";
      options = [
        "bind"
        "nofail"
        "X-mount.mkdir=1777"
      ];
    };
  };
in
{
  fileSystems = lib.foldl' (acc: bind: acc // bind) { } binds;
}