117 lines
4.5 KiB
Nix
117 lines
4.5 KiB
Nix
|
{ config, lib, pkgs, ... }:
|
||
|
{
|
||
|
services.rtorrent = {
|
||
|
enable = true;
|
||
|
port = 54945; # Port Forwarded in mullvad
|
||
|
downloadDir = "/mnt/storage/torrents/r";
|
||
|
package = pkgs.jesec-rtorrent;
|
||
|
configText = let cfg = config.services.rtorrent; in
|
||
|
pkgs.lib.mkForce ''
|
||
|
# rTorrent runtime directory (cfg.basedir) [default: "$HOME/.local/share/rtorrent"]
|
||
|
method.insert = cfg.basedir, private|const|string, (cat,"${cfg.dataDir}/")
|
||
|
|
||
|
# Default download directory (cfg.download) [default: "$(cfg.basedir)/download"]
|
||
|
method.insert = cfg.download, private|const|string, (cat,"${cfg.downloadDir}")
|
||
|
|
||
|
# RPC Socket
|
||
|
method.insert = cfg.rpcsock, private|const|string, (cat,"${cfg.rpcSocket}")
|
||
|
|
||
|
# Log directory (cfg.logs) [default: "$(cfg.basedir)/log"]
|
||
|
method.insert = cfg.logs, private|const|string, (cat,(cfg.basedir),"log/")
|
||
|
method.insert = cfg.logfile, private|const|string, (cat,(cfg.logs),"rtorrent-",(system.time),".log")
|
||
|
|
||
|
# Torrent session directory (cfg.session) [default: "$(cfg.basedir)/.session"]
|
||
|
method.insert = cfg.session, private|const|string, (cat,(cfg.basedir),".session/")
|
||
|
|
||
|
# Watch (drop to add) directories (cfg.watch) [default: "$(cfg.basedir)/watch"]
|
||
|
method.insert = cfg.watch, private|const|string, (cat,(cfg.basedir),"watch/")
|
||
|
|
||
|
# Create directories
|
||
|
fs.mkdir.recursive = (cat,(cfg.basedir))
|
||
|
|
||
|
fs.mkdir = (cat,(cfg.download))
|
||
|
fs.mkdir = (cat,(cfg.logs))
|
||
|
fs.mkdir = (cat,(cfg.session))
|
||
|
|
||
|
fs.mkdir = (cat,(cfg.watch))
|
||
|
fs.mkdir = (cat,(cfg.watch),"/load")
|
||
|
fs.mkdir = (cat,(cfg.watch),"/start")
|
||
|
|
||
|
# Drop to "$(cfg.watch)/load" to add torrent
|
||
|
schedule2 = watch_load, 11, 10, ((load.verbose, (cat, (cfg.watch), "load/*.torrent")))
|
||
|
|
||
|
# Drop to "$(cfg.watch)/start" to add torrent and start downloading
|
||
|
schedule2 = watch_start, 10, 10, ((load.start_verbose, (cat, (cfg.watch), "start/*.torrent")))
|
||
|
|
||
|
# Listening port for incoming peer traffic
|
||
|
network.port_range.set = ${toString cfg.port}-${toString cfg.port}
|
||
|
network.port_random.set = no
|
||
|
|
||
|
# Distributed Hash Table and Peer EXchange
|
||
|
dht.mode.set = disable
|
||
|
dht.port.set = 6881
|
||
|
protocol.pex.set = yes
|
||
|
|
||
|
# UDP tracker support
|
||
|
trackers.use_udp.set = yes
|
||
|
|
||
|
# Peer settings
|
||
|
throttle.max_uploads.set = 100
|
||
|
throttle.max_uploads.global.set = 250
|
||
|
throttle.min_peers.normal.set = 20
|
||
|
throttle.max_peers.normal.set = 60
|
||
|
throttle.min_peers.seed.set = 30
|
||
|
throttle.max_peers.seed.set = 80
|
||
|
trackers.numwant.set = 80
|
||
|
|
||
|
protocol.encryption.set = allow_incoming,try_outgoing,enable_retry
|
||
|
|
||
|
# Limits for file handle resources, this is optimized for
|
||
|
# an `ulimit` of 1024 (a common default). You MUST leave
|
||
|
# a ceiling of handles reserved for rTorrent's internal needs!
|
||
|
network.max_open_files.set = 600
|
||
|
network.max_open_sockets.set = 300
|
||
|
|
||
|
# Memory resource usage (increase if you have a large number of items loaded,
|
||
|
# and/or the available resources to spend)
|
||
|
pieces.memory.max.set = 1800M
|
||
|
network.xmlrpc.size_limit.set = 32M
|
||
|
|
||
|
# Basic operational settings
|
||
|
session.path.set = (cat, (cfg.session))
|
||
|
directory.default.set = (cat, (cfg.download))
|
||
|
log.execute = (cat, (cfg.logs), "execute.log")
|
||
|
|
||
|
# Other operational settings
|
||
|
encoding.add = utf8
|
||
|
system.umask.set = 0027
|
||
|
system.cwd.set = (directory.default)
|
||
|
#schedule2 = low_diskspace, 5, 60, ((close_low_diskspace, 500M))
|
||
|
#pieces.hash.on_completion.set = no
|
||
|
|
||
|
# HTTP and SSL
|
||
|
network.http.max_open.set = 50
|
||
|
network.http.dns_cache_timeout.set = 25
|
||
|
|
||
|
#network.http.ssl_verify_peer.set = 1
|
||
|
#network.http.ssl_verify_host.set = 1
|
||
|
|
||
|
# Run the rTorrent process as a daemon in the background
|
||
|
system.daemon.set = true
|
||
|
|
||
|
# XML-RPC interface
|
||
|
network.scgi.open_local = (cat,(cfg.rpcsock))
|
||
|
schedule = scgi_group,0,0,"execute.nothrow=chown,\":rtorrent\",(cfg.rpcsock)"
|
||
|
schedule = scgi_permission,0,0,"execute.nothrow=chmod,\"g+w,o=\",(cfg.rpcsock)"
|
||
|
|
||
|
# Logging:
|
||
|
# Levels = critical error warn notice info debug
|
||
|
# Groups = connection_* dht_* peer_* rpc_* storage_* thread_* tracker_* torrent_*
|
||
|
print = (cat, "Logging to ", (cfg.logfile))
|
||
|
log.open_file = "log", (cfg.logfile)
|
||
|
log.add_output = "debug", "log"
|
||
|
'';
|
||
|
};
|
||
|
}
|
||
|
|