aboutsummaryrefslogtreecommitdiff
path: root/modules/tlmp/slsk.nix
blob: e72d64b6b9544167bbd439a038a6c94e55638b74 (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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
{
  self,
  config,
  lib,
  pkgs,
  ...
}:

with self.lib.nginx;
{
  services.slskd = {
    enable = true;
    environmentFile = "/etc/secrets/slskd.env";
    domain = null;

    settings = {
      remote_file_management = true;

      directories = {
        downloads = "/mnt/media/soulseek/downloads";
        incomplete = "/mnt/media/soulseek/incomplete";
      };

      shares = {
        directories = [ "[Music]/mnt/media/Music" ];
        cache = {
          storage_mode = "memory";
          workers = 4;
          retention = 10080; # 1 week
        };
      };

      global = {
        upload = {
          slots = 20;
          speed_limit = 250000; # kibibytes
        };
        download = {
          slots = 500;
          speed_limit = 250000;
        };
      };

      groups = {
        user_defined = {
          buddies = {
            upload = {
              priority = 500;
              strategy = "roundrobin";
              slots = 100;
              speed_limit = 750000;
            };
            members = [ ];
          };
        };
      };

      web = {
        authentication = {
          disabled = true;
        };

        socket = "/run/slskd/web.sock";
      };

      filters = {
        search = {
          request = [
            "^.{1,2}$" # discard any requests shorter than 3 characters
          ];
        };
      };

      retention = {
        search = 2880; # 2 day
        transfers = {
          upload = {
            succeeded = 2880; # 2 day
            errored = 30;
            cancelled = 5;
          };
          download = {
            succeeded = 2880; # 2 day
            errored = 20160; # 2 weeks
            cancelled = 5;
          };
        };
        logs = 180; # days
      };
    };
  };

  # VPN Setup
  # SLSKD_SLSK_LISTEN_IP_ADDRESS
  # SLSKD_SLSK_LISTEN_PORT
  users.users.slskd.extraGroups = [ "media" ];

  systemd.services.slskd = {
    bindsTo = [ "wireguard-proton.service" ];
    after = [ "wireguard-proton.service" ];
    unitConfig.JoinsNamespaceOf = "netns@torrent.service";
    serviceConfig = {
      PrivateNetwork = true;
      UMask = "ug=rw,o=r";

      ProtectSystem = lib.mkForce "full";
    };
  };

  services.nginx = {
    enable = true;
    virtualHosts = {
      "slsk.media.cocaine.farm" = proxyDomainAuth "media.cocaine.farm" "http://unix:/run/slskd/web.sock";
    };
  };

  secrets = {
    slskd = {
      source = ../../secrets/slskd.env;
      dest = "/etc/secrets/slskd.env";
    };
  };
}