nix-stuff/roles/server/transmission.nix

57 lines
1.8 KiB
Nix
Executable file

{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.tailscale";
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} *.tailscale(ro,all_squash,anonuid=${transmissionUid},anongid=${transmissionGid})";
services.avahi.extraServiceFiles = {
Transmission-downloads-nfs = ''
<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
<name replace-wildcards="yes">Transmission Downloads on %h (NFS)</name>
<service>
<type>_nfs._tcp</type>
<port>2049</port>
<txt-record>path=${mountPoint}</txt-record>
</service>
</service-group>
'';
};
# Add a record for transmission
services.headscale.settings.dns_config.extra_records = [
{
name = "transmission.everest.tailscale";
type = "A";
value = "100.100.0.1";
}
];
# Set up caddy as the reverse proxy for transmission
services.caddy.virtualHosts.transmission = {
hostName = "transmission.everest.tailscale";
extraConfig = ''
import tailscale
reverse_proxy localhost:${toString config.services.transmission.settings.rpc-port}
'';
};
}