{ lib, config, namespace, ... }: with lib; let inherit (lib.${namespace}) mkOpt mkReverseProxyOpt; cfg = config.${namespace}.services.ersatztv; in { options.${namespace}.services.ersatztv = { enable = mkEnableOption "ersatztv service"; name = mkOpt types.str "ersatztv" "container name"; image = mkOpt types.str "ghcr.io/ersatztv/ersatztv" "container image"; port = mkOpt types.int 8409 "Port for ersatztv to be hosted on"; configPath = mkOpt types.str "" "Path to the data dir"; moviesPath = mkOpt types.str "" "Path to the data dir"; tvPath = mkOpt types.str "" "Path to the data dir"; transcodePath = mkOpt types.str "" "Path to the data dir"; puid = mkOpt types.str "911" "uid"; pgid = mkOpt types.str "1000" "gid"; timeZone = mkOpt types.str "America/Chicago" "Timezone"; reverseProxy = mkReverseProxyOpt; }; config = mkIf cfg.enable { virtualisation.oci-containers.containers.${cfg.name} = { autoStart = true; image = cfg.image; extraOptions = [ "--device=/dev/dri" ]; volumes = [ "${cfg.configPath}:/config" "${cfg.moviesPath}:/libraries/movies" "${cfg.tvPath}:/libraries/tv" "${cfg.transcodePath}:/transcode" ]; ports = [ "${toString cfg.port}:8409" ]; environment = { PUID = cfg.puid; PGID = cfg.pgid; TZ = cfg.timeZone; }; }; }; }