blob: 542757fa82116b96f1a8aa291a6fa080206624f4 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
{ config, ... }: {
# Secrets
sops.secrets.slskd-env = { sopsFile = ./resources/secrets/slskd.yaml; key = "env-file"; };
# Container
containers.slskd = let
home = "/var/lib/slskd";
download-dir = "${home}/complete";
incomplete-dir = "${home}/incomplete";
in {
autoStart = true;
privateNetwork = true;
hostBridge = "br-lan0";
localMacAddress = "02:00:00:00:01:51";
# Download dirs, shared with transmission's media tree, plus a
# read-only mount of the whole library for Soulseek sharing
bindMounts = {
"${download-dir}" = {
hostPath = "/media/ingens/media/dls/slskd/complete";
isReadOnly = false;
};
"${incomplete-dir}" = {
hostPath = "/media/ingens/media/dls/slskd/incomplete";
isReadOnly = false;
};
"/srv" = {
hostPath = "/media/ingens/media/dls/slskd/srv";
isReadOnly = false;
};
"/media/ingens/media" = {
hostPath = "/media/ingens/media";
isReadOnly = true;
};
};
# Bind secrets
bindMounts."/run/secrets/slskd.env" = {
hostPath = config.sops.secrets.slskd-env.path;
isReadOnly = true;
};
config = { lib, config, pkgs, ... }: {
# Network
networking = {
enableIPv6 = false; # Prevent ip leaks
firewall.allowedTCPPorts = [ 80 50300 ]; # Web ui + soulseek listen port tcp
firewall.allowedUDPPorts = [ 50300 ]; # soulseek listen port udp
# DHCP (see transmission.nix)
interfaces.eth0.useDHCP = true;
dhcpcd.extraConfig = ''
interface eth0
static routers=192.168.1.9
static domain_name_servers=9.9.9.9 1.1.1.1
'';
};
# slskd
services.slskd = {
enable = true;
environmentFile = "/run/secrets/slskd.env";
settings = {
directories = {
downloads = download-dir;
incomplete = incomplete-dir;
};
shares.directories = [ "/srv" ];
transfers = {
upload.slots = 5;
upload.speed_limit = 0;
download.slots = 5;
download.speed_limit = 0;
};
flags.no_version_check = true;
};
};
users.users.slskd.uid = 1000; # uid is not set otherwise
# Reverse proxy
services.caddy = {
enable = true;
virtualHosts.":80".extraConfig = ''
reverse_proxy localhost:5030
'';
};
system.stateVersion = "26.05";
};
};
}
|