{ config, lib, pkgs, ... }: let cfg = config.homelab.apps.freshrss; networkName = "freshrss"; proxyNet = config.homelab.apps.traefik.sharedNetworkName; in { options.homelab.apps.freshrss = { enable = lib.mkEnableOption "FreshRSS"; port = lib.mkOption { type = lib.types.int; default = 9080; description = "FreshRSS WebUI port"; }; }; config = let inherit (config.homelab.apps.freshrss) port; in lib.mkIf cfg.enable { homelab.virtualisation.containers.enable = true; homelab.nfsMounts."/srv/freshrss" = { device = "192.168.0.11:/mnt/SMALL/CONFIG/FRESHRSS"; extraOptions = [ "auto" "timeo=600" "retrans=2" "_netdev" ]; }; homelab.dockerNetworks."${networkName}" = { requiredBy = [ "docker-freshrss.service" ]; }; homelab.traefikRouters.freshrss = { rule = "Host(`rss.depeuter.dev`)"; port = 80; tls = true; entryPoints = [ "websecure" ]; middlewares = [ "freshrssM1" "freshrssM2" ]; extraLabels = { "traefik.http.middlewares.freshrssM1.compress" = "true"; "traefik.http.middlewares.freshrssM2.headers.browserXssFilter" = "true"; "traefik.http.middlewares.freshrssM2.headers.forceSTSHeader" = "true"; "traefik.http.middlewares.freshrssM2.headers.frameDeny" = "true"; "traefik.http.middlewares.freshrssM2.headers.referrerPolicy" = "no-referrer-when-downgrade"; "traefik.http.middlewares.freshrssM2.headers.stsSeconds" = "31536000"; }; }; virtualisation.oci-containers.containers.freshrss = { hostname = "freshrss"; image = "freshrss/freshrss:1.25.0"; autoStart = true; user = "0:33"; ports = [ "${toString port}:80/tcp" ]; extraOptions = [ "--network=${networkName}" "--network=${proxyNet}" ]; environment = { TZ = config.time.timeZone; CRON_MIN = "3,18,33,48"; # Alternatively, configure cron inside container. SERVER_DNS = "rss.depeuter.dev"; TRUSTED_PROXY = "172.16.0.1/12 192.168.0.1/16"; }; volumes = [ "/srv/freshrss/www/freshrss/data:/var/www/FreshRSS/data" "/srv/freshrss/www/freshrss/extensions:/var/www/FreshRSS/extensions" ]; }; }; }