{ config, pkgs, lib, ... }: let cfg = config.services.bluesky-jetstream; in with lib; { options.services.bluesky-jetstream = { enable = mkEnableOption "jetstream server"; package = mkPackageOption pkgs "bluesky-jetstream" {}; # dataDir = mkOption { # type = types.str; # default = "/var/lib/jetstream"; # description = "directory to store data (pebbleDB)"; # }; livenessTtl = mkOption { type = types.int; default = 15; description = "time to restart when no event detected (seconds)"; }; websocketUrl = mkOption { type = types.str; default = "wss://bsky.network/xrpc/com.atproto.sync.subscribeRepos"; description = "full websocket path to the ATProto SubscribeRepos XRPC endpoint"; }; }; config = mkIf cfg.enable { systemd.services.bluesky-jetstream = { description = "bluesky jetstream"; after = ["network.target" "pds.service"]; wantedBy = ["multi-user.target"]; serviceConfig = { User = "jetstream"; Group = "jetstream"; StateDirectory = "jetstream"; StateDirectoryMode = "0755"; # preStart = '' # mkdir -p "${cfg.dataDir}" # chown -R jetstream:jetstream "${cfg.dataDir}" # ''; # WorkingDirectory = cfg.dataDir; Environment = [ "JETSTREAM_DATA_DIR=/var/lib/jetstream/data" "JETSTREAM_LIVENESS_TTL=${toString cfg.livenessTtl}s" "JETSTREAM_WS_URL=${cfg.websocketUrl}" ]; ExecStart = getExe cfg.package; Restart = "always"; RestartSec = 5; }; }; users = { users.jetstream = { group = "jetstream"; isSystemUser = true; }; groups.jetstream = {}; }; }; }