diff --git a/modules/base.nix b/modules/base.nix
index f2f8f57..e366f59 100755
--- a/modules/base.nix
+++ b/modules/base.nix
@@ -174,7 +174,7 @@
services.getty.autologinUser = "root";
virtualisation = {
memorySize = 4096;
- cores = 6;
+ cores = 2;
msize = 1*1024*1024;
bios = pkgs.qboot;
};
diff --git a/modules/software-templates/synapse-workers/generic.nix b/modules/software-templates/synapse-workers/generic.nix
index 5e540b3..d524baf 100644
--- a/modules/software-templates/synapse-workers/generic.nix
+++ b/modules/software-templates/synapse-workers/generic.nix
@@ -1,18 +1,25 @@
+{
+ workerName,
+ tasks,
+ dbOverrides ? { },
+ count ? 1,
+}:
{ config, lib, ... }:
+#let
+# dbGroup = "medium";
+# workerName = "account_data_stream_writer";
+# tasks = [ "stream_account_data" ];
+## workerRoutes = workerLib.workerRoutes.accountData;
+# count = 1;
+#in
let
+ workerLib = import ./lib.nix;
cfg = config.services.matrix-synapse;
- workerLib = import ../lib.nix;
- dbGroup = "medium";
-# streamWriterType = "account_data";
- workers = lib.range 0 (cfg.accountDataStreamWriters - 1);
- workerName = "account_data_stream_writer";
- tasks = [ "stream_account_data" ];
- workerRoutes = workerLib.workerRoutes.accountData;
-in
-let
enabledResources = lib.attrNames workerRoutes;
- streamTypes = []
+ workers = lib.range 0 count;
+ streamTypes =
+ [ ]
++ lib.optional (lib.elem "stream_account_data" tasks) "account_data"
++ lib.optional (lib.elem "stream_presence" tasks) "presence"
++ lib.optional (lib.elem "stream_push_rules" tasks) "push_rules"
@@ -20,10 +27,14 @@ let
++ lib.optional (lib.elem "stream_typing" tasks) "typing"
++ lib.optional (lib.elem "stream_receipts" tasks) "receipts"
++ lib.optional (lib.elem "stream_events" tasks) "events";
+
+ # recursive update list of attrs
+# recursiveMerge = list: lib.foldl (a: b: lib.recursiveUpdate a b) (lib.head list) (lib.tail list);
+# workerRoutes = recursiveMerge (lib.map (type: workerLib.workerRoutes.${type}) streamTypes);
in
{
config = lib.mkIf (cfg.accountDataStreamWriters > 0) {
- monitoring.synapse.workerNames = lib.map (index: "${workerName}-${toString index}") workers;
+ monitoring.synapse.workerNames = if (count == 1) then [ workerName ] else lib.map (index: "${workerName}-${toString index}") workers;
services.matrix-synapse = {
settings = {
instance_map = lib.listToAttrs (
@@ -35,9 +46,6 @@ in
}) workers
);
- #stream_writers.${streamWriterType} = lib.map (index: "${workerName}-${toString index}") workers;
-# stream_writers = lib.listToA
- # map `streams` to `workers`
stream_writers = lib.listToAttrs (
lib.map (stream: {
name = stream;
@@ -75,12 +83,26 @@ in
}
];
}) enabledResources;
- database = (
- import ../../db.nix {
- inherit dbGroup;
- workerName = "${workerName}-${toString index}";
- }
- );
+ database = lib.recursiveUpdate (lib.recursiveUpdate config.services.matrix-synapse.settings.database {
+ application_name = "matrix-synapse (${config.services.matrix-synapse.settings.server_name}) - ${if workerName == null then throw "synapse/db.nix: workerName unspecified" else workerName}";
+ }) dbOverrides;
+
+ #region Media
+ max_upload_size = lib.mkIf (lib.elem "media_repo" tasks) "512M";
+ max_avatar_size = lib.mkIf (lib.elem "media_repo" tasks) "512M";
+ max_image_pixels = lib.mkIf (lib.elem "media_repo" tasks) "250M";
+
+ max_pending_media_uploads = lib.mkIf (lib.elem "media_repo" tasks) 512;
+ dynamic_thumbnails = lib.mkIf (lib.elem "media_repo" tasks) true;
+
+ prevent_media_downloads_from = lib.mkIf (lib.elem "media_repo" tasks) [
+ # none, give me all the media
+ ];
+ enable_authenticated_media = lib.mkIf (lib.elem "media_repo" tasks) false;
+
+ url_preview_enabled = lib.mkIf (lib.elem "media_repo" tasks) true;
+ max_spider_size = lib.mkIf (lib.elem "media_repo" tasks) "50M";
+ #endregion
};
}) workers
);
diff --git a/modules/software-templates/synapse-workers/module.nix b/modules/software-templates/synapse-workers/module.nix
index 5a40045..b1d0ced 100644
--- a/modules/software-templates/synapse-workers/module.nix
+++ b/modules/software-templates/synapse-workers/module.nix
@@ -11,29 +11,6 @@ let
in
{
imports = [
- ./single/appservice.nix
- ./single/background.nix
- ./single/user-dir.nix
-
- ./auth.nix
- ./client-reader.nix
- ./event-creator.nix
- ./federation-inbound.nix
- ./federation-reader.nix
- ./federation-sender.nix
- ./media-repo.nix
- ./pusher.nix
- ./sync.nix
-
- ./stream-writers/account_data-stream-writer.nix
- ./stream-writers/event-stream-writer.nix
- ./stream-writers/presence-stream-writer.nix
- ./stream-writers/push_rule-stream-writer.nix
- ./stream-writers/receipt-stream-writer.nix
- ./stream-writers/to_device-stream-writer.nix
- ./stream-writers/typing-stream-writer.nix
-
- # ./stream-writers/shared-stream-writer.nix
];
options.services.matrix-synapse = {
enableWorkers = lib.mkEnableOption "Enable dedicated workers";
@@ -77,39 +54,41 @@ in
};
config = {
- assertions = [
- {
- assertion = cfg.enableWorkers -> cfg.nginxVirtualHostName != null;
- message = "nginxVirtualHostName must be set when enableWorkers is true";
- }
-
- # Stream types and count limitations: https://github.com/element-hq/synapse/blob/develop/synapse/config/workers.py#L344
- {
- assertion = lib.length cfg.settings.stream_writers.typing <= 1;
- message = "Only one typing stream writer is supported";
- }
- {
- assertion = lib.length cfg.settings.stream_writers.to_device <= 1;
- message = "Only one to_device stream writer is supported";
- }
- {
- assertion = lib.length cfg.settings.stream_writers.account_data <= 1;
- message = "Only one account data stream writer is supported";
- }
- # This may be outdated in the documentation...?
- #{
- # assertion = cfg.receiptStreamWriters <= 1;
- # message = "Only one receipt stream writer is supported";
- #}
- {
- assertion = lib.length cfg.settings.stream_writers.presence <= 1;
- message = "Only one presence stream writer is supported";
- }
- {
- assertion = lib.length cfg.settings.stream_writers.push_rules <= 1;
- message = "Only one push rule stream writer is supported";
- }
- ];
+ assertions =
+ [
+ {
+ assertion = cfg.enableWorkers -> cfg.nginxVirtualHostName != null;
+ message = "nginxVirtualHostName must be set when enableWorkers is true";
+ }
+ ]
+ ++ lib.optionals (cfg.settings ? stream_writers) [
+ # Stream types and count limitations: https://github.com/element-hq/synapse/blob/develop/synapse/config/workers.py#L344
+ {
+ assertion = cfg.settings.stream_writers ? typing -> lib.length cfg.settings.stream_writers.typing <= 1;
+ message = "Only one typing stream writer is supported";
+ }
+ {
+ assertion = cfg.settings.stream_writers ? to_device -> lib.length cfg.settings.stream_writers.to_device <= 1;
+ message = "Only one to_device stream writer is supported";
+ }
+ {
+ assertion = cfg.settings.stream_writers ? account_data -> lib.length cfg.settings.stream_writers.account_data <= 1;
+ message = "Only one account data stream writer is supported";
+ }
+ # This may be outdated in the documentation...?
+ #{
+ # assertion = cfg.receiptStreamWriters <= 1;
+ # message = "Only one receipt stream writer is supported";
+ #}
+ {
+ assertion = cfg.settings.stream_writers ? presence -> lib.length cfg.settings.stream_writers.presence <= 1;
+ message = "Only one presence stream writer is supported";
+ }
+ {
+ assertion = cfg.settings.stream_writers ? push_rules -> lib.length cfg.settings.stream_writers.push_rules <= 1;
+ message = "Only one push rule stream writer is supported";
+ }
+ ];
# Matrix utility maps
services.nginx.appendHttpConfig = ''
|