loptland: init element-web

This commit is contained in:
Christoph Hollizeck 2026-04-14 01:01:03 +02:00
parent 8406518178
commit 85eebcd2ed
3 changed files with 63 additions and 0 deletions

View file

@ -35,6 +35,7 @@ topLevel: {
mautrix-discord mautrix-discord
mautrix-signal mautrix-signal
element-call element-call
element-web
# game server # game server
minecraft-server minecraft-server

View file

@ -57,6 +57,20 @@
forceSSL = true; forceSSL = true;
useACMEHost = matrixDomain; useACMEHost = matrixDomain;
# MSC4143: advertise LiveKit as the RTC transport since Synapse doesn't implement this yet
locations."= /_matrix/client/unstable/org.matrix.msc4143/rtc/transports" = {
extraConfig = ''
default_type application/json;
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;
add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type' always;
if ($request_method = OPTIONS) {
return 204;
}
return 200 '{"rtc_transports":[{"type":"livekit","livekit_service_url":"https://call.${matrixDomain}/livekit/jwt"}]}';
'';
};
locations."/" = { locations."/" = {
proxyPass = "http://localhost:${toString 8008}"; proxyPass = "http://localhost:${toString 8008}";
extraConfig = '' extraConfig = ''
@ -91,6 +105,7 @@
tryFiles = "$uri /index.html"; tryFiles = "$uri /index.html";
extraConfig = '' extraConfig = ''
add_header Cache-Control "no-cache" always; add_header Cache-Control "no-cache" always;
add_header Content-Security-Policy "frame-ancestors 'self' https://chat.${matrixDomain}" always;
''; '';
}; };

View file

@ -0,0 +1,47 @@
{
flake.modules.nixos.element-web =
{ pkgs, ... }:
let
matrixDomain = "alwayssleepy.online";
in
{
services.nginx.virtualHosts."chat.${matrixDomain}" = {
forceSSL = true;
useACMEHost = matrixDomain;
locations."= /config.json" = {
extraConfig = ''
default_type application/json;
return 200 '${builtins.toJSON {
default_server_config = {
"m.homeserver" = {
base_url = "https://matrix.${matrixDomain}";
server_name = matrixDomain;
};
};
disable_custom_urls = true;
disable_guests = true;
features = {
feature_group_calls = true;
};
element_call = {
url = "https://call.${matrixDomain}";
use_exclusively = true;
brand = "Element Call";
};
brand = "Element";
default_theme = "dark";
}}';
'';
};
locations."/" = {
root = "${pkgs.element-web}";
tryFiles = "$uri /index.html";
extraConfig = ''
add_header Cache-Control "no-cache" always;
'';
};
};
};
}