{config, ...}: let transmissionUid = toString config.users.users.transmission.uid; transmissionGid = toString config.users.groups.transmission.gid; mountPoint = config.fileSystems."nfs_transmission".mountPoint; in { services.transmission = { enable = true; openFirewall = true; settings = { incomplete-dir-enabled = false; rpc-bind-address = "0.0.0.0"; rpc-host-whitelist = "transmission.everest.sable-pancake.ts.net"; rpc-whitelist = "127.0.0.1"; }; }; # Allow my devices to access the downloads folder though NFS fileSystems."nfs_transmission" = { device = config.services.transmission.settings.download-dir; mountPoint = "/srv/nfs/transmission"; options = ["bind"]; }; services.nfs.server.exports = "${mountPoint} *.sable-pancake.ts.net(ro,all_squash,anonuid=${transmissionUid},anongid=${transmissionGid})"; services.avahi.extraServiceFiles = { Transmission-downloads-nfs = '' Transmission Downloads on %h (NFS) _nfs._tcp 2049 path=${mountPoint} ''; }; # Add a cname for transmission services.dnsmasq.settings.cname = ["transmission.everest.sable-pancake.ts.net,everest"]; # Set up traefik as the reverse proxy for transmission services.traefik = { dynamicConfigOptions = { http = { routers = { transmission-subdomain = { rule = "Host(`transmission.everest.sable-pancake.ts.net`)"; service = "transmission"; }; }; services.transmission.loadBalancer.servers = [ {url = "http://localhost:${toString config.services.transmission.settings.rpc-port}";} ]; }; }; }; }