{ config, pkgs, lib, ... }: let serv = import ../config/services.nix; serviceValidation = import ../validation/service/continuwuity.nix; continuwuity = serv.continuwuity; serverName = serviceValidation.getServerName serv; trustedServers = serviceValidation.getTrustedServers serv; memoryMax = serviceValidation.getMemoryMax serv; package = if continuwuity ? package then pkgs.matrix-continuwuity.overrideAttrs (old: rec { version = continuwuity.package.version; pname = old.pname or "matrix-continuwuity"; src = pkgs.fetchFromGitea { domain = "forgejo.ellis.link"; owner = "continuwuation"; repo = "continuwuity"; tag = "v${version}"; hash = continuwuity.package.sourceHash; }; cargoDeps = pkgs.rustPlatform.fetchCargoVendor { inherit src; hash = continuwuity.package.cargoHash; }; }) else pkgs.matrix-continuwuity; in { services.matrix-continuwuity = { enable = true; package = package; settings = { global = { server_name = serverName; allow_registration = true; allow_encryption = true; allow_federation = true; max_request_size = 20 * 1024 * 1024; # 20 MiB trusted_servers = trustedServers; matrix_rtc = { foci = [ { type = "livekit"; livekit_service_url = continuwuity.livekit_url; } ]; }; }; }; }; systemd.services.matrix-continuwuity.serviceConfig = lib.optionalAttrs (memoryMax != null) { MemoryMax = memoryMax; }; }