{ config, containerCfg, pkgs, lib, builder, name, ... }: let serverCfg = config.syscfg.server; image = pkgs.dockerTools.streamLayeredImage { name = pkgs.transmission_4.name; tag = pkgs.transmission_4.version; contents = [ pkgs.cacert ]; config = { Cmd = [ "${pkgs.transmission_4}/bin/transmission-daemon" "--foreground" "--config-dir" "/config" ]; ExposedPorts = { "9091/tcp" = {}; "51413/tcp" = {}; "51413/udp" = {}; }; }; }; routerName = if subpath != null then "${subdomain}-${lib.strings.sanitizeDerivationName subpath}" else subdomain; in { paths = [{ path = "${serverCfg.dataPath}/transmission/complete"; owner = "1000:1000"; mode = "0755"; }{ path = "${serverCfg.dataPath}/transmission/incomplete"; owner = "1000:1000"; mode = "0755"; }{ path = "${serverCfg.configPath}/transmission/config"; owner = "1000:1000"; mode = "0755"; }]; containers = { server = builder.mkContainer { subdomain = containerCfg.subdomain; subpath = containerCfg.subpath; imageStream = image; port = 9091; extraEnv = { PUID = "1000"; PGID = "1000"; WHITELIST = "";# 127.0.0.1,::1,10.*"; # HOST_WHITELIST = "traefik-server,authentik-server,authentik-worker"; }; extraLabels = { "traefik.http.routers.${routerName}.middlewares" = "transmission-rewrite"; "traefik.http.middlewares.transmission-rewrite.replacepathregex.regex=^/p2p(.*)" "traefik.http.middlewares.transmission-rewrite.replacepathregex.replacement=/transmission/web$$1" } // (if serverCfg.containers ? authentik then { "traefik.http.routers.${routerName}.middlewares" = "authentik,transmission-rewrite"; } else {}); overrides = { cmd = [ ]; volumes = [ "${serverCfg.dataPath}/transmission/complete:/downloads/complete" "${serverCfg.dataPath}/transmission/incomplete:/downloads/incomplete" "${serverCfg.configPath}/transmission/config:/config" ]; }; }; }; setup = { trigger = "server"; envFile = [ config.sops.secrets."CUSTOM".path ]; script = pkgs.writeShellScript "setup" '' ${pkgs.gettext}/bin/envsubst < "${../data/transmission/settings.json}" > "${serverCfg.configPath}/transmission/config/settings.json" ''; }; }