{ count, separateEventWriters ? 1, separateTypingWriters ? 1, separateToDeviceWriters ? 1, separateAccountDataWriters ? 1, separateReceiptsWriters ? 1, separatePresenceWriters ? 1, separatePusherWriters ? 1, }: { config, pkgs, lib, ... }: let 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 { 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); }; }