Personal-use NixOS configuration
1{
2 hosts ? [ ],
3}:
4
5{
6 config,
7 flakeLib,
8 ...
9}:
10
11{
12 services.slskd = {
13 enable = true;
14
15 domain = null;
16
17 settings = {
18 # Upload limits assume a fast connection
19 global = {
20 upload = {
21 slots = 75;
22 speed_limit = 122070;
23 };
24 };
25
26 groups.default = {
27 upload = {
28 slots = 50;
29 speed_limit = 12207;
30 };
31
32 limits.queued = {
33 files = 300;
34 megabytes = 5000;
35 };
36
37 limits.daily = {
38 files = 2147483647;
39 megabytes = 2147483647;
40 };
41
42 limits.weekly = {
43 files = 2000;
44 megabytes = 30000;
45 };
46 };
47
48 groups.leechers = {
49 thresholds = {
50 files = 25;
51 directories = 3;
52 };
53
54 upload = {
55 slots = 3;
56 speed_limit = 976;
57 };
58
59 limits.queued = {
60 files = 30;
61 megabytes = 1000;
62 };
63
64 limits.daily = {
65 files = 30;
66 megabytes = 1000;
67 };
68
69 limits.weekly = {
70 files = 150;
71 megabytes = 5000;
72 };
73 };
74
75 shares = {
76 # These files can contain sensitive information
77 filters = [
78 ".md$"
79 ".log$"
80 ".pydio$"
81 ];
82
83 # Assumes a more powerful machine
84 cache = {
85 storage_mode = "memory";
86 workers = 8;
87 retention = 10080;
88 };
89 };
90
91 filters.search.request = [
92 "^.{1,2}$"
93 "^(\.?pdf|\.?docx|\.?xlsx)$"
94 ];
95
96 retention = {
97 # Users go offline often, invalidating search
98 search = 5;
99
100 # The following numbers are measured in hours
101 transfers = {
102 upload = {
103 succeeded = 10080;
104 errored = 1440;
105 cancelled = 1440;
106 };
107
108 download = {
109 succeeded = 1440;
110 errored = 10080;
111 cancelled = 10080;
112 };
113 };
114 };
115
116 web = {
117 socket = "/run/slskd/slskd.sock";
118 };
119 };
120 };
121
122 systemd.services.slskd.serviceConfig = {
123 RuntimeDirectory = config.services.slskd.user;
124 RuntimeDirectoryMode = "0750";
125 UMask = "0007";
126 };
127
128 # Caddy reverse proxy configuration
129 users.users.caddy.extraGroups = [ config.services.slskd.group ];
130
131 services.caddy.virtualHosts = flakeLib.mkProxies hosts ''
132 reverse_proxy unix/${toString config.services.slskd.settings.web.socket} {
133 header_up Upgrade "websocket"
134 header_up Connection "Upgrade"
135 }
136 '';
137}