Personal-use NixOS configuration
at main 97 lines 2.9 kB view raw
1{ 2 dhtPort ? 6881, 3 listenPortRange ? { 4 from = 6881; 5 to = 6889; 6 }, 7 openFirewall ? false, 8}: 9 10{ 11 config, 12 pkgs-unstable, 13 lib, 14 ... 15}: 16 17{ 18 services.rtorrent = { 19 enable = true; 20 21 # Unstable for rtorrent 0.16.3, roll back to stable once backported 22 package = pkgs-unstable.rtorrent; 23 24 configText = '' 25 dht.mode.set = on 26 dht.port.set = ${toString dhtPort} 27 protocol.pex.set = yes 28 trackers.use_udp.set = yes 29 network.port_range.set = ${toString listenPortRange.from}-${toString listenPortRange.to} 30 31 throttle.max_uploads.global.set = 300 32 33 trackers.numwant.set = 100 34 throttle.min_peers.normal.set = 1 35 throttle.max_peers.normal.set = 100 36 throttle.min_peers.seed.set = 1 37 throttle.max_peers.seed.set = 100 38 39 # Assumes a more powerful machine 40 pieces.memory.max.set = 4000M 41 pieces.preload.type.set = 2 42 pieces.preload.min_rate.set = 30720 43 44 # TODO: seeding ratio for sonarr/etc. 45 #ratio.enable= 46 #ratio.min.set=100 47 #ratio.max.set=300 48 #system.method.set = group.seeding.ratio.command, d.close= 49 50 # Don't kill the internet 51 schedule2 = throttle_download_limit_slow, 8:00:00, 24:00:00, ((throttle.max_downloads.global.set, 50)) 52 schedule2 = throttle_download_slow, 8:00:00, 24:00:00, ((throttle.global_down.max_rate.set_kb, 10240)) 53 schedule2 = throttle_upload_slow, 8:00:00, 24:00:00, ((throttle.global_up.max_rate.set_kb, 4096)) 54 55 schedule2 = throttle_download_limit_fast, 22:00:00, 24:00:00, ((throttle.max_downloads.global.set, 200)) 56 schedule2 = throttle_download_fast, 22:00:00, 24:00:00, ((throttle.global_down.max_rate.set_kb, 0)) 57 schedule2 = throttle_upload_fast, 22:00:00, 24:00:00, ((throttle.global_up.max_rate.set_kb, 0)) 58 59 # Compatibility with Flood 60 method.redirect = load.throw,load.normal 61 method.redirect = load.start_throw,load.start 62 method.insert = d.down.sequential,value|const,0 63 method.insert = d.down.sequential.set,value|const,0 64 ''; 65 }; 66 67 networking.firewall = lib.mkIf openFirewall { 68 allowedTCPPortRanges = [ listenPortRange ]; 69 allowedUDPPortRanges = [ listenPortRange ]; 70 }; 71 72 # Required override for linux-hardened kernel 73 systemd.services.rtorrent.serviceConfig = { 74 SystemCallFilter = lib.mkForce "@system-service"; 75 }; 76 77 # Add Flood to the rtorrent group for file management 78 systemd.services.flood.serviceConfig.SupplementaryGroups = [ config.services.rtorrent.group ]; 79 80 # Caddy reverse proxy configuration 81 users.users.caddy.extraGroups = [ config.services.rtorrent.group ]; 82 83 services.caddy.virtualHosts.rtorrent = { 84 hostName = ":50000"; 85 86 listenAddresses = [ 87 "127.0.0.1" 88 "::1" 89 ]; 90 91 extraConfig = '' 92 reverse_proxy unix/${config.services.rtorrent.rpcSocket} { 93 transport scgi 94 } 95 ''; 96 }; 97}