server-config/services/qbittorrent.nix

242 lines
9.3 KiB
Nix

{
pkgs,
config,
service_configs,
username,
lib,
...
}:
{
imports = [
(lib.serviceMountDeps "qbittorrent" [
service_configs.torrents_path
config.services.qbittorrent.serverConfig.Preferences.Downloads.TempPath
"/var/lib/qBittorrent/qBittorrent"
])
];
# network namespace that is proxied through mullvad
vpnNamespaces.wg = {
portMappings = [
{
from = config.services.qbittorrent.webuiPort;
to = config.services.qbittorrent.webuiPort;
}
];
openVPNPorts = [
{
port = config.services.qbittorrent.webuiPort;
protocol = "both";
}
];
};
services.qbittorrent = {
enable = true;
package = pkgs.qbittorrent-nox;
webuiPort = service_configs.ports.torrent;
serverConfig.LegalNotice.Accepted = true;
serverConfig.Preferences = {
WebUI = {
AlternativeUIEnabled = true;
RootFolder = builtins.toString (
pkgs.fetchzip {
url = "https://github.com/VueTorrent/VueTorrent/releases/download/v2.26.0/vuetorrent.zip";
sha256 = "EFVzsr/OZ/QMJ+NN3kDkmIk6FCCnqgK6DgsLWNonspU=";
}
);
# disable auth because we use caddy for auth
AuthSubnetWhitelist = "0.0.0.0/0";
AuthSubnetWhitelistEnabled = true;
};
Downloads = {
SavePath = service_configs.torrent.SavePath;
TempPath = service_configs.torrent.TempPath;
};
};
serverConfig.BitTorrent = {
Session = {
GlobalUPSpeedLimit = 0; # unlimited upload
GlobalDLSpeedLimit = 0; # unlimited download
IgnoreLimitsOnLAN = true;
IncludeOverheadInLimits = true;
GlobalMaxRatio = 6.0;
QueueingSystemEnabled = false; # seed all torrents all the time
MaxConnections = -1;
MaxConnectionsPerTorrent = -1;
MaxUploads = -1;
MaxUploadsPerTorrent = -1;
AddTrackersEnabled = true;
AdditionalTrackers = (
lib.concatStringsSep "\\n" [
"http://0123456789nonexistent.com:80/announce"
"http://0d.kebhana.mx:443/announce"
"http://1337.abcvg.info:80/announce"
"http://bittorrent-tracker.e-n-c-r-y-p-t.net:1337/announce"
"http://bt1.xxxxbt.cc:6969/announce"
"http://bt.poletracker.org:2710/announce"
"http://buny.uk:6969/announce"
"http://finbytes.org:80/announce.php"
"http://highteahop.top:6960/announce"
"http://home.yxgz.club:6969/announce"
"http://open.tracker.cl:1337/announce"
"http://open.trackerlist.xyz:80/announce"
"http://p4p.arenabg.com:1337/announce"
"http://public.tracker.vraphim.com:6969/announce"
"http://region.nl1.privex.cc:6969/announce"
"http://retracker.spark-rostov.ru:80/announce"
"http://seeders-paradise.org:80/announce"
"http://servandroidkino.ru:80/announce"
"http://share.hkg-fansub.info:80/announce.php"
"http://shubt.net:2710/announce"
"https://sparkle.ghostchu-services.top:443/announce"
"https://tracker.bt4g.com:443/announce"
"https://tracker.expli.top:443/announce"
"https://tracker.gcrenwp.top:443/announce"
"https://tracker.ghostchu-services.top:443/announce"
"https://tracker.leechshield.link:443/announce"
"https://tracker.moeblog.cn:443/announce"
"https://tracker.pmman.tech:443/announce"
"https://tracker.yemekyedim.com:443/announce"
"https://tracker.zhuqiy.top:443/announce"
"https://tr.zukizuki.org:443/announce"
"http://taciturn-shadow.spb.ru:6969/announce"
"http://t.jaekr.sh:6969/announce"
"http://t.overflow.biz:6969/announce"
"http://tracker1.bt.moack.co.kr:80/announce"
"http://tracker1.itzmx.com:8080/announce"
"http://tracker.23794.top:6969/announce"
"http://tracker2.dler.org:80/announce"
"http://tracker810.xyz:11450/announce"
"http://tracker.bittor.pw:1337/announce"
"http://tracker.bt4g.com:2095/announce"
"http://tracker.bt-hash.com:80/announce"
"http://tracker.bz:80/announce"
"http://tracker.corpscorp.online:80/announce"
"http://tracker.darkness.services:6969/announce"
"http://tracker.dler.com:6969/announce"
"http://tracker.dler.org:6969/announce"
"http://tracker.dmcomic.org:2710/announce"
"http://tracker.files.fm:6969/announce"
"http://tracker.ghostchu-services.top:80/announce"
"http://tracker.ipv6tracker.org:80/announce"
"http://tracker.lintk.me:2710/announce"
"http://tracker.moxing.party:6969/announce"
"http://tracker.mywaifu.best:6969/announce"
"http://tracker.opentrackr.org:1337/announce"
"http://tracker.qu.ax:6969/announce"
"http://tracker.renfei.net:8080/announce"
"http://tracker.sbsub.com:2710/announce"
"http://tracker.vanitycore.co:6969/announce"
"http://tracker.waaa.moe:6969/announce"
"http://tracker.xiaoduola.xyz:6969/announce"
"http://tracker.zhuqiy.top:80/announce"
"http://tr.kxmp.cf:80/announce"
"http://wepzone.net:6969/announce"
"http://www.genesis-sp.org:2710/announce"
"http://www.torrentsnipe.info:2701/announce"
"udp://1c.premierzal.ru:6969/announce"
"udp://bandito.byterunner.io:6969/announce"
"udp://bittorrent-tracker.e-n-c-r-y-p-t.net:1337/announce"
"udp://bt.ktrackers.com:6666/announce"
"udp://concen.org:6969/announce"
"udp://d40969.acod.regrucolo.ru:6969/announce"
"udp://discord.heihachi.pw:6969/announce"
"udp://evan.im:6969/announce"
"udp://exodus.desync.com:6969/announce"
"udp://explodie.org:6969/announce"
"udp://inferno.demonoid.is:3391/announce"
"udp://ipv4announce.sktorrent.eu:6969/announce"
"udp://ipv4.rer.lol:2710/announce"
"udp://isk.richardsw.club:6969/announce"
"udp://leet-tracker.moe:1337/announce"
"udp://martin-gebhardt.eu:25/announce"
"udp://ns-1.x-fins.com:6969/announce"
"udp://open.demonii.com:1337"
"udp://open.demonii.com:1337/announce"
"udp://open.dstud.io:6969/announce"
"udp://open.free-tracker.ga:6969/announce"
"udp://open.stealth.si:80/announce"
"udp://open.tracker.cl:1337/announce"
"udp://opentracker.io:6969/announce"
"udp://p4p.arenabg.com:1337/announce"
"udp://public.tracker.vraphim.com:6969/announce"
"udp://retracker01-msk-virt.corbina.net:80/announce"
"udp://retracker.lanta.me:2710/announce"
"udp://t.overflow.biz:6969/announce"
"udp://tr4ck3r.duckdns.org:6969/announce"
"udp://tracker2.dler.org:80/announce"
"udp://tracker.bittor.pw:1337/announce"
"udp://tracker.dler.com:6969/announce"
"udp://tracker.dler.org:6969/announce"
"udp://tracker.filemail.com:6969/announce"
"udp://tracker.fnix.net:6969/announce"
"udp://tracker.gigantino.net:6969/announce"
"udp://tracker.gmi.gd:6969/announce"
"udp://tracker.ololosh.space:6969/announce"
"udp://tracker.openbittorrent.com:80"
"udp://tracker.opentrackr.org:1337/announce"
"udp://tracker.srv00.com:6969/announce"
"udp://tracker.therarbg.to:6969/announce"
"udp://tracker.tiny-vps.com:6969/announce"
"udp://tracker.torrent.eu.org:451/announce"
"udp://tracker.torrust-demo.com:6969/announce"
"udp://tracker.tryhackx.org:6969/announce"
"udp://ttk2.nbaonlineservice.com:6969/announce"
"udp://wepzone.net:6969/announce"
]
);
AnnounceToAllTrackers = true;
# idk why it also has to be specified here too?
TempPath = config.services.qbittorrent.serverConfig.Preferences.Downloads.TempPath;
TempPathEnabled = true;
# how many connections per sec
ConnectionSpeed = 300;
ChokingAlgorithm = "RateBased";
PieceExtentAffinity = true;
SuggestMode = true;
};
};
};
systemd.tmpfiles.rules = [
"d ${config.services.qbittorrent.serverConfig.Preferences.Downloads.SavePath} 0750 ${config.services.qbittorrent.user} ${service_configs.torrent_group}"
"d ${config.services.qbittorrent.serverConfig.Preferences.Downloads.TempPath} 0750 ${config.services.qbittorrent.user} ${service_configs.torrent_group}"
];
# make qbittorrent use a vpn
systemd.services.qbittorrent.vpnConfinement = {
enable = true;
vpnNamespace = "wg";
};
services.caddy.virtualHosts."torrent.${service_configs.https.domain}".extraConfig = ''
${builtins.readFile ../secrets/caddy_auth}
reverse_proxy ${service_configs.https.wg_ip}:${builtins.toString config.services.qbittorrent.webuiPort}
'';
users.users.${config.services.qbittorrent.user}.extraGroups = [
service_configs.torrent_group
];
users.users.${username}.extraGroups = [
config.services.qbittorrent.group
];
}