qbittorrent + qbit_manage migrated to nixpkgs
All checks were successful
MCP Tests / mcp-tests (push) Successful in 24s

This commit is contained in:
Danilo Reyes
2026-04-01 23:55:32 -06:00
parent 5a4f7c2734
commit 4eeed32002
6 changed files with 124 additions and 157 deletions

View File

@@ -6,11 +6,7 @@
}:
let
download = import ./common.nix {
inherit
config
lib
pkgs
;
inherit config lib pkgs;
};
in
{
@@ -67,12 +63,10 @@ in
};
in
{
"download@main" = lib.mkIf config.my.units.download.enable (
downloadTimer "*-*-* 06,18:02:00" 30 // { }
);
"download@push" = lib.mkIf config.my.units.download.enable (downloadTimer "*:0/5" 30 // { });
"download@main" = lib.mkIf config.my.units.download.enable (downloadTimer "*-*-* 06,18:02:00" 30);
"download@push" = lib.mkIf config.my.units.download.enable (downloadTimer "*:0/5" 30);
"download@manga" = lib.mkIf config.my.units.downloadManga.enable (
downloadTimer "*-*-* 03:08:00" 30 // { }
downloadTimer "*-*-* 03:08:00" 30
);
tuhmayto = lib.mkIf config.my.units.download.enable {
enable = true;

View File

@@ -6,33 +6,19 @@
...
}:
let
inherit (inputs) qbit_manage trackerslist;
inherit (inputs) trackerslist;
qbitProfileDir = "/var/lib/qbittorrent";
qbitUser = "qbittorrent";
wgInterface = "wg0";
qbitManageConfigPath = "/home/jawz/.config/qbit_manage/config.yml";
qbitDownloadDir = "/srv/pool/multimedia/downloads/torrent";
qbitIncompleteDir = "${qbitDownloadDir}/.incomplete";
additionalTrackers = lib.strings.trim (builtins.readFile "${trackerslist}/trackers_all.txt");
qbit_manageEnv = pkgs.python3.withPackages (
ps:
builtins.attrValues {
inherit (ps)
argon2-cffi
bencode-py
croniter
fastapi
gitpython
humanize
pytimeparse2
qbittorrent-api
requests
retrying
ruamel-yaml
slowapi
uvicorn
;
}
);
unstablePkgs = import inputs.nixpkgs-unstable {
inherit (pkgs.stdenv.hostPlatform) system;
config.allowUnfree = true;
};
qbitManagePkg = unstablePkgs."qbit-manage";
torrentCompletionScript = pkgs.writeShellScript "qbit-torrent-completion" ''
chmod -R u+rwX,g+rwX,o-rwx "$1"
'';
@@ -60,10 +46,23 @@ in
torrentingPort = config.my.ports.qbittorrent;
extraArgs = [ "--confirm-legal-notice" ];
serverConfig = {
Core.AutoDeleteAddedTorrentFile = "Never";
Network.PortForwardingEnabled = false;
AutoRun = {
enabled = true;
program = "${torrentCompletionScript} %F";
};
Preferences = {
Bittorrent.CustomizeTrackersListUrl = "https://raw.githubusercontent.com/ngosang/trackerslist/master/trackers_all.txt";
WebUI = {
AlternativeUIEnabled = true;
HTTPS.Enabled = false;
Password_PBKDF2 = "@ByteArray(ZYy4l3ORHihzBrRYqIfmOA==:SYv4Gor5ZSI9FfAPOxAAdhlmz/h+vViEHnoW6tfJYLNnFL9DQ8udqkO9Na83RJauzhVVGvAgauPq/y4UNPyl3g==)";
ReverseProxySupportEnabled = false;
RootFolder = "${pkgs.vuetorrent}/share/vuetorrent";
Username = "9VcZWt3d0u6mmMOhryUZAcpIe8WML9J7Icj00Vu5fuOFXRB0ECAItetKAK1NnfrD";
};
};
BitTorrent.Session = {
AddExtensionToIncompleteFiles = true;
AddTrackersEnabled = true;
@@ -83,29 +82,13 @@ in
TempPath = qbitIncompleteDir;
TempPathEnabled = true;
};
Core.AutoDeleteAddedTorrentFile = "Never";
Network.PortForwardingEnabled = false;
Preferences = {
Bittorrent.CustomizeTrackersListUrl = "https://raw.githubusercontent.com/ngosang/trackerslist/master/trackers_all.txt";
WebUI = {
AlternativeUIEnabled = true;
HTTPS.Enabled = false;
Password_PBKDF2 = "@ByteArray(ZYy4l3ORHihzBrRYqIfmOA==:SYv4Gor5ZSI9FfAPOxAAdhlmz/h+vViEHnoW6tfJYLNnFL9DQ8udqkO9Na83RJauzhVVGvAgauPq/y4UNPyl3g==)";
ReverseProxySupportEnabled = false;
RootFolder = "${pkgs.vuetorrent}/share/vuetorrent";
Username = "9VcZWt3d0u6mmMOhryUZAcpIe8WML9J7Icj00Vu5fuOFXRB0ECAItetKAK1NnfrD";
};
};
};
};
users.users.${qbitUser} = {
home = qbitProfileDir;
createHome = true;
isSystemUser = true;
home = qbitProfileDir;
};
systemd.tmpfiles.rules = [
"d ${qbitDownloadDir} 0775 ${qbitUser} piracy -"
"d ${qbitIncompleteDir} 0775 ${qbitUser} piracy -"
];
sops.secrets =
let
mkUnpackerrSecret = {
@@ -119,8 +102,10 @@ in
};
systemd = {
packages = [ torrentCompletionScript ];
services = {
};
tmpfiles.rules = [
"d ${qbitDownloadDir} 0775 ${qbitUser} piracy -"
"d ${qbitIncompleteDir} 0775 ${qbitUser} piracy -"
];
user = {
services = {
unpackerr = lib.mkIf config.my.servers.unpackerr.enable {
@@ -151,7 +136,7 @@ in
serviceConfig = {
Type = "oneshot";
TimeoutStartSec = "5min";
ExecStart = "${qbit_manageEnv}/bin/python ${qbit_manage}/qbit_manage.py -r -c /home/jawz/.config/qbit_manage/config.yml";
ExecStart = "${qbitManagePkg}/bin/qbit-manage -r -c ${qbitManageConfigPath}";
};
};
};