qbitorrent has replaced flood and rtorrent
This commit is contained in:
parent
495441670d
commit
0f74c957a1
6 changed files with 9 additions and 171 deletions
|
|
@ -79,7 +79,7 @@ in
|
||||||
deployment.targetHost = nasIp;
|
deployment.targetHost = nasIp;
|
||||||
imports = [
|
imports = [
|
||||||
../system/svalbard/configuration.nix
|
../system/svalbard/configuration.nix
|
||||||
../home/programs/flood
|
(import ../home/programs/qbittorrent { pkgs = pkgs; })
|
||||||
../home/programs/beets
|
../home/programs/beets
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,39 +0,0 @@
|
||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
networking.firewall = {
|
|
||||||
allowedTCPPorts = [
|
|
||||||
#nginx
|
|
||||||
80
|
|
||||||
443
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
services.nginx = {
|
|
||||||
enable = true;
|
|
||||||
virtualHosts."torrents" = {
|
|
||||||
locations."/" = {
|
|
||||||
proxyPass = "http://localhost:3000";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
users.users.flood.group = "flood";
|
|
||||||
users.extraUsers.flood = {
|
|
||||||
isNormalUser = true;
|
|
||||||
extraGroups = [ "rtorrent" "users" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
systemd.services = {
|
|
||||||
flood = {
|
|
||||||
enable = true;
|
|
||||||
serviceConfig = {
|
|
||||||
User = "flood";
|
|
||||||
WorkingDirectory = "/home/flood";
|
|
||||||
ExecStart = "${pkgs.flood}/bin/flood";
|
|
||||||
Restart = "on-failure";
|
|
||||||
};
|
|
||||||
wantedBy = [ "multi-user.target" ];
|
|
||||||
after = [ "network.target" "rtorrent.service" ];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -2,6 +2,13 @@
|
||||||
{
|
{
|
||||||
environment.systemPackages = with pkgs; [ qbittorrent-nox ];
|
environment.systemPackages = with pkgs; [ qbittorrent-nox ];
|
||||||
|
|
||||||
|
users.groups.qbittorrent = { };
|
||||||
|
users.users.qbittorrent.group = "qbittorrent";
|
||||||
|
users.extraUsers.qbittorrent = {
|
||||||
|
isNormalUser = true;
|
||||||
|
extraGroups = [ "users" "multimedia" ];
|
||||||
|
};
|
||||||
|
|
||||||
systemd = {
|
systemd = {
|
||||||
packages = [ pkgs.qbittorrent-nox ];
|
packages = [ pkgs.qbittorrent-nox ];
|
||||||
|
|
||||||
|
|
@ -9,7 +16,7 @@
|
||||||
enable = true;
|
enable = true;
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
Type = "simple";
|
Type = "simple";
|
||||||
User = "rtorrent";
|
User = "qbittorrent";
|
||||||
ExecStart = "${pkgs.qbittorrent-nox}/bin/qbittorrent-nox";
|
ExecStart = "${pkgs.qbittorrent-nox}/bin/qbittorrent-nox";
|
||||||
};
|
};
|
||||||
wantedBy = [ "multi-user.target" ];
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
|
|
||||||
|
|
@ -1,38 +0,0 @@
|
||||||
{ pkgs, finalDir, downloadDir, watchDir }:
|
|
||||||
let
|
|
||||||
# this needs to be configured in mullvad's settings
|
|
||||||
dhtPort = 55358;
|
|
||||||
rtorrentPort = 54945;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [ rtorrent ];
|
|
||||||
|
|
||||||
users.extraUsers.rtorrent.extraGroups = [ "users" ];
|
|
||||||
|
|
||||||
services.rtorrent = {
|
|
||||||
enable = true;
|
|
||||||
port = rtorrentPort;
|
|
||||||
openFirewall = true;
|
|
||||||
downloadDir = downloadDir;
|
|
||||||
# flood needs to be able to access the datadir
|
|
||||||
dataDir = downloadDir;
|
|
||||||
configText =
|
|
||||||
builtins.readFile (pkgs.substituteAll {
|
|
||||||
src = ./rtorrent.rc;
|
|
||||||
watchDir = watchDir;
|
|
||||||
finalDir = finalDir;
|
|
||||||
dhtPort = builtins.toString dhtPort;
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
networking.firewall = {
|
|
||||||
allowedTCPPorts = [
|
|
||||||
dhtPort
|
|
||||||
];
|
|
||||||
allowedUDPPorts = [
|
|
||||||
dhtPort
|
|
||||||
rtorrentPort
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -1,85 +0,0 @@
|
||||||
# Set an interface with IPv4 address to bind to:
|
|
||||||
method.insert = cfg.interface.bind, string|const|private, (cat,"wg0")
|
|
||||||
# Get IPv4 address of a given interface
|
|
||||||
method.insert = get_interface_ipv4_address, simple|private, "execute.capture=bash,-c,\"$cat=\\\"echo -n \$(ip -o -4 addr show \\\",$argument.0=,\\\" | grep -Po 'inet \\\\\\\\\\K[\\\\\\\\\\d.]+')\\\"\""
|
|
||||||
# The IP address the listening socket and outgoing connections is bound to. (bind)
|
|
||||||
schedule2 = set_bind_address, 0, 0, \
|
|
||||||
"branch=((cfg.interface.bind)), \
|
|
||||||
((network.bind_address.set,(get_interface_ipv4_address,(cfg.interface.bind))))"
|
|
||||||
|
|
||||||
# Port range to use for listening. (port_range)
|
|
||||||
network.port_range.set = @dhtPort@-@dhtPort@
|
|
||||||
|
|
||||||
# Enable/disable peer exchange for torrents that aren't marked private. Disabled by default. (peer_exchange)
|
|
||||||
protocol.pex.set = 1
|
|
||||||
|
|
||||||
# Set whether the client should try to connect to UDP trackers (It can cause various problems if it's enabled, if you experience any with this option enabled then disable it.)
|
|
||||||
trackers.use_udp.set = 1
|
|
||||||
|
|
||||||
# Enable DHT support for trackerless torrents or when all trackers are down.
|
|
||||||
# May be set to "disable" (completely disable DHT), "off" (do not start DHT),
|
|
||||||
# "auto" (start and stop DHT as needed), or "on" (start DHT immediately).
|
|
||||||
# The default is "off".
|
|
||||||
# For DHT to work, a session directory must be defined.
|
|
||||||
dht.mode.set = auto
|
|
||||||
dht.port.set = @dhtPort@
|
|
||||||
|
|
||||||
throttle.max_uploads.set = 100
|
|
||||||
throttle.max_uploads.global.set = 250
|
|
||||||
|
|
||||||
throttle.min_peers.normal.set = 1
|
|
||||||
throttle.max_peers.normal.set = 1024
|
|
||||||
throttle.min_peers.seed.set = 1
|
|
||||||
throttle.max_peers.seed.set = 1024
|
|
||||||
trackers.numwant.set = 80
|
|
||||||
|
|
||||||
# Adding public DHT servers for easy bootstrapping
|
|
||||||
schedule2 = dht_node_1, 5, 0, "dht.add_node=router.utorrent.com:6881"
|
|
||||||
schedule2 = dht_node_2, 5, 0, "dht.add_node=dht.transmissionbt.com:6881"
|
|
||||||
schedule2 = dht_node_3, 5, 0, "dht.add_node=router.bitcomet.com:6881"
|
|
||||||
schedule2 = dht_node_4, 5, 0, "dht.add_node=dht.aelitis.com:6881"
|
|
||||||
|
|
||||||
# Enable the default ratio group.
|
|
||||||
ratio.enable=
|
|
||||||
|
|
||||||
# Change the limits, the defaults should be sufficient.
|
|
||||||
ratio.min.set = 100
|
|
||||||
ratio.max.set = 300
|
|
||||||
ratio.upload.set = 20M
|
|
||||||
|
|
||||||
# To ensure world-readable results
|
|
||||||
system.umask.set = 0000
|
|
||||||
|
|
||||||
# Changing the command triggered when the ratio is reached.
|
|
||||||
# (the default is "d.try_close= ; d.ignore_commands.set=1")
|
|
||||||
method.set = group.seeding.ratio.command, "d.close= ; d.erase="
|
|
||||||
|
|
||||||
# Add new method to get finished dir (called get_finished_dir)
|
|
||||||
method.insert = d.get_finished_dir,simple,"cat=@finalDir@/,$d.custom1="
|
|
||||||
|
|
||||||
# Bind event "torrent has finished" to action "move to new directory based on label"
|
|
||||||
# method.set_key = event.download.finished,move_complete
|
|
||||||
# Modifies the event.download.finished event to also have a new “key”
|
|
||||||
# called “move_complete”. From what I understand, rTorrent executes all
|
|
||||||
# “keys” in an event whenever that event is fired. The
|
|
||||||
# event.download.finished event fires whenever a torrent has finished
|
|
||||||
# downloading. The stuff within the quotation marks is the new key’s
|
|
||||||
# commands. Each command is separated by a semicolon (;).
|
|
||||||
# d.directory.set=$d.get_finished_dir=;
|
|
||||||
# d.directory.set sets the directory of the torrent in rTorrent’s own
|
|
||||||
# information. It does not move the torrent, just means rTorrent will
|
|
||||||
# look in that directory from now on. $d.get_finished_dir just runs the
|
|
||||||
# get_finished_dir method preciously inserted; constructing a path name
|
|
||||||
# by combining [folder]/finished/ with whatever label was applied
|
|
||||||
# ($d.custom1 contains the label).
|
|
||||||
# execute=mkdir,-p,$d.get_finished_dir=;
|
|
||||||
# Gets the same path name and makes sure the directory actually exists.
|
|
||||||
# Mkdir is the standard *nix command for creating directories. -p means
|
|
||||||
# creating parent directories if needed and not complaining if directory
|
|
||||||
# already exists.
|
|
||||||
# execute=mv,-u,$d.base_path=,$d.get_finished_dir=
|
|
||||||
# Uses the same “execute” functionality as above to run the standard *nix
|
|
||||||
# mv command to move the torrent’s files (whose location is stored in
|
|
||||||
# d.base_path) to, once again, the directory whose name was constructed
|
|
||||||
# by the get_finished_dir method.
|
|
||||||
method.set_key = event.download.finished,move_complete,"d.directory.set=$d.get_finished_dir=;execute=mkdir,-p,$d.get_finished_dir=;execute=mv,-u,$d.base_path=,$d.get_finished_dir="
|
|
||||||
|
|
@ -10,13 +10,6 @@
|
||||||
# Include the results of the hardware scan.
|
# Include the results of the hardware scan.
|
||||||
./hardware-configuration.nix
|
./hardware-configuration.nix
|
||||||
../common/users.nix
|
../common/users.nix
|
||||||
(import ../../home/programs/rtorrent {
|
|
||||||
pkgs = pkgs;
|
|
||||||
downloadDir = "/storage/temp";
|
|
||||||
finalDir = "/storage";
|
|
||||||
watchDir = "/storage/torrents";
|
|
||||||
})
|
|
||||||
(import ../../home/programs/qbittorrent { pkgs = pkgs; })
|
|
||||||
];
|
];
|
||||||
|
|
||||||
# Bootloader.
|
# Bootloader.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue