summaryrefslogtreecommitdiffstats
path: root/hosts/poweredge
diff options
context:
space:
mode:
authorTim Keller <tjk@tjkeller.xyz>2026-10-30 19:19:29 -0500
committerTim Keller <tjk@tjkeller.xyz>2026-10-30 19:19:29 -0500
commit75b9bf76277ddb97fa3787b40c22c4b4750aad31 (patch)
tree25994b0a3a7f2fb12c1839eafc25c4d73d88eed8 /hosts/poweredge
parent4c2d824402c89639b6347fd7904fb296b060890e (diff)
downloadnixos-75b9bf76277ddb97fa3787b40c22c4b4750aad31.tar.xz
nixos-75b9bf76277ddb97fa3787b40c22c4b4750aad31.zip
add slskd config
Diffstat (limited to 'hosts/poweredge')
-rw-r--r--hosts/poweredge/resources/secrets/slskd.yaml16
-rw-r--r--hosts/poweredge/slskd.nix91
2 files changed, 107 insertions, 0 deletions
diff --git a/hosts/poweredge/resources/secrets/slskd.yaml b/hosts/poweredge/resources/secrets/slskd.yaml
new file mode 100644
index 0000000..3f0a43b
--- /dev/null
+++ b/hosts/poweredge/resources/secrets/slskd.yaml
@@ -0,0 +1,16 @@
+env-file: ENC[AES256_GCM,data:HFyQoP9iZMx4ieCk7f36McCTVN+5P+wZ5O+4bztmvIjJkdT4CgzXQDEuDEfDCwPNW25hAR+zV6znW6eO/tDoJndliD0ifl6+xODL9g34nInfocB1+alMjcHFz3Ix9HEMUYkABZ3qxn9DQGagrlRBB0sDMHkW2fRcl2Sd7qY5lhM676jpfF+oh2QTWYn9ZP8aS9FcYB2SaeFox3o=,iv:18IODA/fQBwlJhvNKXuo0kc18w4dEspEz5inusnh1f4=,tag:2jAJr5R5LnKwRAhC5lb5Pg==,type:str]
+sops:
+ age:
+ - enc: |
+ -----BEGIN AGE ENCRYPTED FILE-----
+ YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA2WitIOGhGVUp3N0pTQkds
+ OUJOQ0hReExNNEhZaXhENURwMGFGN3pBckVjClcvbDY4VUpXeWJXa0lLdWVoazNT
+ S2JjKzFaZ3lwWkZNbnRpOEpmREtMTm8KLS0tIE9yTXQvVzRvVU1YSGRLbWtQaGRB
+ REx6K2loY3JsTmFkNzZzN3FDdzhaaWsKRVP71gq5x0qPmWwhsDgTtDwe5Ip6cg78
+ pvU/OeUmXEdLJAsXFAaCIKPe5QSMaopgKiB9rfXJFM3mn2bhnHNYBQ==
+ -----END AGE ENCRYPTED FILE-----
+ recipient: age1zfvmt2avdlfz0fvchczplc84u7m8vqausm7zytl9s4x9m9yax4cqy30zpz
+ lastmodified: "2026-10-28T22:22:21Z"
+ mac: ENC[AES256_GCM,data:lhyXZ2PEZ59C7EfshQ5x09dmLTeAhlEjt5rwpMjdVcicUKioH1GdUD+hjKNAUDCfuBS1Oy/ay0yFGn9TZvMqngbXRgSxx4EY26EssvmfZ6wgp1F8t41+gm0tuQFUkkn51k713O21sTAZS7BfpOyiFCHYD852RbRoENJrgRK6KQk=,iv:Jw2Tw1QwdxY7cTT0UBiVJmJhtp+nNsQttv7G8yHs8Rk=,tag:CwjZpbMi8T4ubNMen0EqYg==,type:str]
+ unencrypted_suffix: _unencrypted
+ version: 3.13.3
diff --git a/hosts/poweredge/slskd.nix b/hosts/poweredge/slskd.nix
new file mode 100644
index 0000000..542757f
--- /dev/null
+++ b/hosts/poweredge/slskd.nix
@@ -0,0 +1,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";
+ };
+ };
+}