89 lines
2.5 KiB
Nix
89 lines
2.5 KiB
Nix
{ lib, pkgs, ... }:
|
|
|
|
{
|
|
# qBittorrent web UI port.
|
|
port ? 8080
|
|
, # The directory where qBittorrent will create files
|
|
dataDir ? "/var/lib/qbittorrent"
|
|
, # Number of files to allow qBittorrent to open
|
|
openFilesLimit ? 4096
|
|
, # ZIP containing custom frontend
|
|
customFrontend ? null
|
|
, # Folder name inside ZIP containing custom frontend
|
|
customFrontendFolder ? null
|
|
, # Additional qbittorrent config
|
|
config ? { }
|
|
, user ? "qbittorrent"
|
|
, group ? "qbittorrent"
|
|
, # Systemd service name
|
|
serviceName ? "qbittorrent-nox"
|
|
, serviceConfig ? { }
|
|
# Custom setup script
|
|
, setup ? ""
|
|
, # qbittorrent-nox package
|
|
package ? pkgs.qbittorrent-nox
|
|
}:
|
|
|
|
let
|
|
configMerged = config // {
|
|
Preferences = {
|
|
"WebUI\\Port" = toString port;
|
|
"WebUI\\AlternativeUIEnabled" = if customFrontend != null then "true" else "false";
|
|
"WebUI\\RootFolder" = if customFrontend != null then "${dataDir}/frontend" else "";
|
|
} // (config.Preferences or { });
|
|
};
|
|
|
|
ini = lib.generators.toINI { } configMerged;
|
|
iniFile = pkgs.writeText "qBittorrent.conf" ini;
|
|
in
|
|
{
|
|
systemd.services.${serviceName} = {
|
|
description = "qbittorrent-nox Daemon";
|
|
after = [ "network.target" ];
|
|
wantedBy = [ "multi-user.target" ];
|
|
serviceConfig = {
|
|
PrivateTmp = true;
|
|
# To prevent "Quit & shutdown daemon" from working; we want systemd to manage it!
|
|
Restart = "on-success";
|
|
User = user;
|
|
Group = group;
|
|
UMask = "0002";
|
|
LimitNOFILE = openFilesLimit;
|
|
} // serviceConfig;
|
|
|
|
script = ''
|
|
${lib.optionalString (customFrontend != null) ''
|
|
set -euxo pipefail
|
|
|
|
if [[ -d ${dataDir}/frontend ]]; then
|
|
rm -rf ${dataDir}/frontend
|
|
fi
|
|
|
|
mkdir -p ${dataDir}/frontend
|
|
${pkgs.unzip}/bin/unzip -o ${customFrontend} -d ${dataDir}/frontend
|
|
|
|
${lib.optionalString (customFrontendFolder != null) ''
|
|
mv ${dataDir}/frontend/${customFrontendFolder}/* ${dataDir}/frontend
|
|
rm -rf ${dataDir}/frontend/${customFrontendFolder}
|
|
''}
|
|
''}
|
|
|
|
mkdir -p ${dataDir}/qBittorrent/config
|
|
cp ${iniFile} ${dataDir}/qBittorrent/config/qBittorrent.conf
|
|
${setup { inherit dataDir; config = "${dataDir}/qBittorrent/config/qBittorrent.conf"; }}
|
|
${package}/bin/qbittorrent-nox --webui-port=${toString port} --profile=${dataDir}
|
|
'';
|
|
};
|
|
|
|
users.users.${user} = {
|
|
isNormalUser = true;
|
|
group = group;
|
|
home = dataDir;
|
|
createHome = true;
|
|
description = "qbittorrent-nox user";
|
|
};
|
|
|
|
users.groups.${group} = {
|
|
gid = null;
|
|
};
|
|
}
|