diff --git a/machines/gerd.nix b/machines/gerd.nix index 3a5adc1..3d23141 100644 --- a/machines/gerd.nix +++ b/machines/gerd.nix @@ -25,8 +25,7 @@ ./gerd/services/searx.nix ./gerd/services/miniflux.nix - ./gerd/services/element.nix - ./gerd/services/matrix-synapse.nix + ./gerd/services/matrix ./gerd/services/uptime-kuma.nix diff --git a/machines/gerd/services/matrix/default.nix b/machines/gerd/services/matrix/default.nix new file mode 100644 index 0000000..f76b41f --- /dev/null +++ b/machines/gerd/services/matrix/default.nix @@ -0,0 +1,7 @@ +{ + imports = [ + ./matrix-synapse.nix + ./element.nix + ./housecleaning.nix + ]; +} diff --git a/machines/gerd/services/element.nix b/machines/gerd/services/matrix/element.nix similarity index 100% rename from machines/gerd/services/element.nix rename to machines/gerd/services/matrix/element.nix diff --git a/machines/gerd/services/matrix/housecleaning.nix b/machines/gerd/services/matrix/housecleaning.nix new file mode 100644 index 0000000..7285ac2 --- /dev/null +++ b/machines/gerd/services/matrix/housecleaning.nix @@ -0,0 +1,38 @@ +{ config, pkgs, ... }: + +{ + # delete empty directories + # - https://github.com/element-hq/synapse/issues/7690 + # - https://github.com/matrix-org/synapse/issues/7690 + systemd.services.matrix-synapse.preStart = + ''${pkgs.findutils}/bin/find ${config.services.matrix-synapse.dataDir}/media_store -empty -type d -delete''; + + systemd.timers."matrix-synapse-housecleaning-empty-dirs" = { + wantedBy = [ "timers.target" ]; + timerConfig = { + OnCalendar = "Mon *-*-* 04:00:00"; + Unit = config.systemd.services.matrix-synapse.name; + }; + }; + + # vacuum database + systemd.services."matrix-synapse-psql-vacuum" = let + psqlUser = config.systemd.services.postgresql.serviceConfig.user; + dbName = config.services.matrix-synapse.settings.database.args.database; + in { + serviceConfig = { + User = psqlUser; + ExecStart = pkgs.writeScript "matrix-synapse-psql-vacuum.sh" '' + ${config.services.postgresql.package}/bin/psql -d ${dbName} -c "vacuum full" + ''; + }; + }; + + systemd.timers."matrix-synapse-housecleaning-vacuum-db" = { + wantedBy = [ "timers.target" ]; + timerConfig = { + OnCalendar = "Mon *-*-* 04:00:00"; + Unit = config.systemd.services.matrix-synapse-psql-vacuum.name; + }; + }; +} diff --git a/machines/gerd/services/matrix-synapse.nix b/machines/gerd/services/matrix/matrix-synapse.nix similarity index 97% rename from machines/gerd/services/matrix-synapse.nix rename to machines/gerd/services/matrix/matrix-synapse.nix index acdb7e1..90e4fbf 100644 --- a/machines/gerd/services/matrix-synapse.nix +++ b/machines/gerd/services/matrix/matrix-synapse.nix @@ -74,6 +74,12 @@ in { allowed_lifetime_min = "1d"; allowed_lifetime_max = "1y"; }; + + + # automatically forget room on leave/kick/ban, and + # purge from db after X time + forget_rooms_on_leave = true; + forgotten_room_retention_period = "28d"; }; };