{ config, pkgs, lib, ... }: let cfg = config.services.matrix-synapse; #eventWriters = lib.range 0 (count - 1); #typingWriters = lib.range 0 (count - 1); #deviceWriters = lib.range 0 (count - 1); #accountDataWriters = lib.range 0 (count - 1); #receiptsWriters = lib.range 0 (count - 1); #presenceWriters = lib.range 0 (count - 1); #pusherWriters = lib.range 0 (count - 1); in { options.services.matrix-synapse = lib.listToAttrs (lib.map (option: { name = "${option}StreamWriters"; value = lib.mkOption { type = lib.types.int; default = 1; description = "Number of writers for ${option} streams"; }; }) [ "event" "typing" "toDevice" "accountData" "receipts" "presence" "pushRule" ]) // { enableStreamWriters = lib.mkEnableOption "Enable stream writers"; federationSenders = lib.mkOption { type = lib.types.int; default = 1; description = "Number of federation senders"; }; pushers = lib.mkOption { type = lib.types.int; default = 1; description = "Number of pushers"; }; }; config = lib.mkIf cfg.enableStreamWriters { services.matrix-synapse = { settings = { instance_map = lib.listToAttrs (lib.map (port: { name = "stream-writer-${toString port}"; value = { path = "/run/matrix-synapse/stream-writer-${toString port}.sock"; }; }) federationSenders); stream_writers = { events = lib.map (port: "stream-writer-events-${toString port}") federationSenders; typing = lib.map (port: "stream-writer-typing-${toString port}") typingWriters; to_device = lib.map (port: "stream-writer-to_device-${toString port}") deviceWriters; account_data = lib.map (port: "stream-writer-account_data-${toString port}") accountDataWriters; receipts = lib.map (port: "stream-writer-receipts-${toString port}") receiptsWriters; presence = lib.map (port: "stream-writer-presence-${toString port}") presenceWriters; push_rules = lib.map (port: "stream-writer-push_rules-${toString port}") pusherWriters; }; }; workers = lib.listToAttrs (lib.map (port: { name = "stream-writerr-${toString port}"; value = { worker_app = "synapse.app.generic_worker"; worker_listeners = [ ]; }; }) federationSenders); }; }; }