{ options, lib, config, pkgs, ... }: let cfg = config.services.podcastitlater-worker; in { options.services.podcastitlater-worker = { enable = lib.mkEnableOption "Enable the PodcastItLater worker service"; dataDir = lib.mkOption { type = lib.types.path; default = "/var/podcastitlater"; description = "Data directory for PodcastItLater (shared with web)"; }; package = lib.mkOption { type = lib.types.package; description = "PodcastItLater worker package to use"; }; }; config = lib.mkIf cfg.enable { systemd.services.podcastitlater-worker = { path = [cfg.package pkgs.ffmpeg]; # ffmpeg needed for pydub wantedBy = ["multi-user.target"]; after = ["network.target"]; preStart = '' # Create data directory if it doesn't exist mkdir -p ${cfg.dataDir} # Manual step: create this file with secrets # OPENAI_API_KEY=your-openai-api-key # S3_ENDPOINT=https://your-s3-endpoint.digitaloceanspaces.com # S3_BUCKET=your-bucket-name # S3_ACCESS_KEY=your-s3-access-key # S3_SECRET_KEY=your-s3-secret-key test -f /run/podcastitlater/worker-env ''; script = '' ${cfg.package}/bin/podcastitlater-worker ''; description = '' PodcastItLater Worker Service - processes articles to podcasts ''; serviceConfig = { Environment = [ "AREA=Live" "DATABASE_PATH=${cfg.dataDir}/podcast.db" ]; EnvironmentFile = "/run/podcastitlater/worker-env"; KillSignal = "INT"; Type = "simple"; Restart = "always"; RestartSec = "10"; }; }; }; }