forked from pub-solar/os
misc#qbittorrent: init
This commit is contained in:
parent
27d4712557
commit
e7d560a3af
|
@ -8,6 +8,7 @@ in
|
|||
../profiles/graphical
|
||||
../profiles/misc
|
||||
../profiles/misc/plex.nix
|
||||
../profiles/misc/torrent.nix
|
||||
];
|
||||
|
||||
boot.initrd.availableKernelModules = [
|
||||
|
|
106
modules/services/torrent/qbittorrent.nix
Normal file
106
modules/services/torrent/qbittorrent.nix
Normal file
|
@ -0,0 +1,106 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
with lib;
|
||||
let
|
||||
cfg = config.services.qbittorrent;
|
||||
configDir = "${cfg.dataDir}/.config";
|
||||
openFilesLimit = 4096;
|
||||
in
|
||||
{
|
||||
options.services.qbittorrent = {
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
Run qBittorrent headlessly as systemwide daemon
|
||||
'';
|
||||
};
|
||||
|
||||
dataDir = mkOption {
|
||||
type = types.path;
|
||||
default = "/var/lib/qbittorrent";
|
||||
description = ''
|
||||
The directory where qBittorrent will create files.
|
||||
'';
|
||||
};
|
||||
|
||||
user = mkOption {
|
||||
type = types.str;
|
||||
default = "qbittorrent";
|
||||
description = ''
|
||||
User account under which qBittorrent runs.
|
||||
'';
|
||||
};
|
||||
|
||||
group = mkOption {
|
||||
type = types.str;
|
||||
default = "qbittorrent";
|
||||
description = ''
|
||||
Group under which qBittorrent runs.
|
||||
'';
|
||||
};
|
||||
|
||||
port = mkOption {
|
||||
type = types.port;
|
||||
default = 8080;
|
||||
description = ''
|
||||
qBittorrent web UI port.
|
||||
'';
|
||||
};
|
||||
|
||||
openFilesLimit = mkOption {
|
||||
default = openFilesLimit;
|
||||
description = ''
|
||||
Number of files to allow qBittorrent to open.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
|
||||
environment.systemPackages = [ pkgs.qbittorrent ];
|
||||
|
||||
nixpkgs.overlays = [
|
||||
(
|
||||
self: super: {
|
||||
qbittorrent = super.qbittorrent.override { guiSupport = false; };
|
||||
}
|
||||
)
|
||||
];
|
||||
|
||||
systemd.services.qbittorrent = {
|
||||
after = [ "network.target" ];
|
||||
description = "qBittorrent Daemon";
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
path = [ pkgs.qbittorrent ];
|
||||
serviceConfig = {
|
||||
ExecStart = ''
|
||||
${pkgs.qbittorrent}/bin/qbittorrent-nox \
|
||||
--profile=${configDir} \
|
||||
--webui-port=${toString cfg.port}
|
||||
'';
|
||||
# To prevent "Quit & shutdown daemon" from working; we want systemd to
|
||||
# manage it!
|
||||
Restart = "on-success";
|
||||
User = cfg.user;
|
||||
Group = cfg.group;
|
||||
UMask = "0002";
|
||||
LimitNOFILE = cfg.openFilesLimit;
|
||||
};
|
||||
};
|
||||
|
||||
users.users = mkIf (cfg.user == "qbittorrent") {
|
||||
qbittorrent = {
|
||||
group = cfg.group;
|
||||
home = cfg.dataDir;
|
||||
createHome = true;
|
||||
description = "qBittorrent Daemon user";
|
||||
};
|
||||
};
|
||||
|
||||
users.groups = mkIf (cfg.group == "qbittorrent") {
|
||||
qbittorrent = {
|
||||
gid = null;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
21
profiles/misc/torrent.nix
Normal file
21
profiles/misc/torrent.nix
Normal file
|
@ -0,0 +1,21 @@
|
|||
{ config, lib, ... }:
|
||||
let
|
||||
inherit (config.services.qbittorrent) port;
|
||||
inherit (lib) mkAfter;
|
||||
in
|
||||
{
|
||||
imports = [ ../../modules/services/torrent/qbittorrent.nix ];
|
||||
services.qbittorrent.enable = true;
|
||||
users.users.nrd.extraGroups = [ "qbittorrent" ];
|
||||
|
||||
|
||||
environment.etc."xdg/qutebrowser/config.py".text = mkAfter ''
|
||||
c.url.searchengines['to'] = 'https://torrentz2.eu/search?f={}'
|
||||
|
||||
config.bind(',t', """hint all spawn curl -X POST\
|
||||
-F "urls={hint-url}"\
|
||||
-F "sequentialDownload=true"\
|
||||
http://localhost:${toString port}/api/v2/torrents/add"""
|
||||
)
|
||||
'';
|
||||
}
|
Loading…
Reference in a new issue