{ config, lib, pkgs, ... }: let cfg = config.homelab.apps.freshrss; networkName = "freshrss"; 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; fileSystems."/srv/freshrss" = { device = "192.168.0.11:/mnt/SMALL/CONFIG/FRESHRSS"; fsType = "nfs"; options = [ "rw" "auto" "nfsvers=4.2" "sync" "hard" "timeo=600" "retrans=2" "_netdev" "nosuid" "tcp" ]; }; systemd.services."docker-${networkName}-create-network" = { description = "Create Docker network for ${networkName}"; requiredBy = [ "docker-freshrss.service" ]; serviceConfig = { Type = "oneshot"; RemainAfterExit = true; }; script = '' if ! ${pkgs.docker}/bin/docker network ls | grep -q ${networkName}; then ${pkgs.docker}/bin/docker network create ${networkName} fi ''; }; virtualisation.oci-containers.containers.freshrss = { hostname = "freshrss"; image = "freshrss/freshrss:1.24.0"; autoStart = true; user = "0:33"; ports = [ "${toString port}:${toString port}/tcp" ]; extraOptions = [ "--network=${networkName}" ]; environment = { TZ = config.time.timeZone; CRON_TIME = "3,18,33,48"; # Alternatively, configure cron inside container. LISTEN = "0.0.0.0:${toString port}"; }; volumes = [ "/srv/freshrss/www/freshrss/data:/var/www/FreshRSS/data" "/srv/freshrss/www/freshrss/extensions:/var/www/FreshRSS/extensions" ]; }; }; }