create torrent-client role
2 files changed, 75 insertions(+), 0 deletions(-)
changed files
M system/hosts/r5.nix → system/hosts/r5.nix
@@ -22,6 +22,7 @@ ../roles/exit-node.nix ../roles/syncthing.nix ../roles/home-automation.nix ../roles/tailscale-subnet-router.nix + ../roles/torrent-client.nix ../roles/uptime-monitor.nix ../roles/video-library.nix ../roles/webserver/local-ca.nix
A system/roles/torrent-client.nix
@@ -0,0 +1,74 @@ +{ + config, + lib, + pkgs, + ... +}: +let + inherit (config.networking) domain fqdn; + inherit (import ../../data) homenet tailnet; + + cfg = config.services.transmission; + storeDir = "/srv/transmission"; +in +{ + services.transmission = { + enable = true; + openPeerPorts = true; + webHome = pkgs.flood-for-transmission; + performanceNetParameters = true; + + settings = { + utp-enabled = false; + rpc-bind-address = "[::1]"; + + download-dir = "${storeDir}/downloads"; + incomplete-dir = "${storeDir}/incomplete"; + incomplete-dir-enabled = true; + watch-dir = "${storeDir}/watch"; + watch-dir-enabled = true; + trash-original-torrent-files = true; + }; + }; + + systemd.tmpfiles.rules = [ + "d ${storeDir} 0755 ${cfg.user} ${cfg.group}" + "d ${cfg.settings.download-dir} 0755 ${cfg.user} ${cfg.group}" + "d ${cfg.settings.incomplete-dir} 0755 ${cfg.user} ${cfg.group}" + "d ${cfg.settings.watch-dir} 0777 ${cfg.user} ${cfg.group}" + ]; + + services.caddy.virtualHosts = + let + upstream = '' + reverse_proxy [::1]:${toString cfg.settings.rpc-port} + ''; + in + { + "bt.${domain}" = { + extraConfig = '' + ${lib.optionalString (domain == homenet) '' + tls { + issuer internal { + ca home + } + } + ''} + ${upstream} + ''; + }; + "bt.${tailnet}" = { + extraConfig = '' + bind tailscale/bt + tls { + get_certificate tailscale + } + ${upstream} + ''; + }; + }; + + services.dnsmasq.settings.cname = [ + "bt.${domain},${fqdn}" + ]; +}