{ config, lib, pkgs, ... }: let cfg = config.services.gebos.ingester; ingester = pkgs.callPackage ../../ingester { }; in { options.services.gebos.ingester = { enable = lib.mkEnableOption "Gebos MQTT → Postgres ingester"; mqttBroker = lib.mkOption { type = lib.types.str; example = "tcp://127.0.0.1:1883"; }; postgresUrl = lib.mkOption { type = lib.types.str; description = "DSN without password — password comes from EnvironmentFile."; }; }; config = lib.mkIf cfg.enable { systemd.services.gebos-ingester = { description = "Gebos MQTT → Postgres ingester"; after = [ "network-online.target" ]; wants = [ "network-online.target" ]; wantedBy = [ "multi-user.target" ]; environment = { GEBOS_MQTT_BROKER = cfg.mqttBroker; GEBOS_POSTGRES_URL = cfg.postgresUrl; }; serviceConfig = { ExecStart = "${ingester}/bin/gebos-ingester"; DynamicUser = true; EnvironmentFile = "/etc/gebos/secrets.env"; # GEBOS_POSTGRES_PASSWORD Restart = "on-failure"; RestartSec = "5s"; }; }; }; }