WIP: Livekit
This commit is contained in:
@@ -3,7 +3,6 @@
|
|||||||
./hardware-configuration.nix
|
./hardware-configuration.nix
|
||||||
./smb.nix
|
./smb.nix
|
||||||
../../nixos/roles/monitoring.nix
|
../../nixos/roles/monitoring.nix
|
||||||
../../nixos/roles/matrix
|
|
||||||
../../nixos/roles/wyl.nix
|
../../nixos/roles/wyl.nix
|
||||||
../../nixos/roles/adguard.nix
|
../../nixos/roles/adguard.nix
|
||||||
../../nixos/roles/unifi.nix
|
../../nixos/roles/unifi.nix
|
||||||
|
|||||||
@@ -3,8 +3,8 @@
|
|||||||
imports = [
|
imports = [
|
||||||
./hardware-configuration.nix
|
./hardware-configuration.nix
|
||||||
../../nixos/roles/nginx.nix
|
../../nixos/roles/nginx.nix
|
||||||
../../nixos/roles/matrix/livekit.nix
|
|
||||||
# ../../nixos/roles/jitsi.nix
|
# ../../nixos/roles/jitsi.nix
|
||||||
|
../../nixos/roles/matrix
|
||||||
];
|
];
|
||||||
|
|
||||||
networking = {
|
networking = {
|
||||||
|
|||||||
@@ -1,253 +0,0 @@
|
|||||||
{
|
|
||||||
pkgs,
|
|
||||||
lib,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
let
|
|
||||||
flavours = [
|
|
||||||
{
|
|
||||||
name = "Latte";
|
|
||||||
slug = "latte";
|
|
||||||
is_dark = false;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "Frappé";
|
|
||||||
slug = "frappe";
|
|
||||||
is_dark = true;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "Macchiato";
|
|
||||||
slug = "macchiato";
|
|
||||||
is_dark = true;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "Mocha";
|
|
||||||
slug = "mocha";
|
|
||||||
is_dark = true;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
accents = [
|
|
||||||
"rosewater"
|
|
||||||
"flamingo"
|
|
||||||
"pink"
|
|
||||||
"mauve"
|
|
||||||
"red"
|
|
||||||
"maroon"
|
|
||||||
"peach"
|
|
||||||
"yellow"
|
|
||||||
"green"
|
|
||||||
"teal"
|
|
||||||
"sky"
|
|
||||||
"sapphire"
|
|
||||||
"blue"
|
|
||||||
"lavender"
|
|
||||||
];
|
|
||||||
themeHashes = {
|
|
||||||
"latte/rosewater" = "0l1m4bhaxdam07rfqag6pjbzhdpyi5w3i14vp6rq7aj59pildw3a";
|
|
||||||
"latte/flamingo" = "1m8hh2l87xv2rfgpnnl5vzddmam0n82h25fwadb37blgab08vhsr";
|
|
||||||
"latte/pink" = "0ambrc42mvg0vdspfmnl31ka1nsxpdyv1p3nh045822y02q20wwh";
|
|
||||||
"latte/mauve" = "1nnn2w6nsr24a45jy497c2vhi8v64bwg99fj2dyhpfsn89c63lhn";
|
|
||||||
"latte/red" = "14lmw4c4llfz6zqvfymkc6k3msxcml2gwq9rhwsixdpc5mjjbn8n";
|
|
||||||
"latte/maroon" = "0ydpng9451mpn7hv5ag1ck8hryx8pdvrml3zksvzm2fiwzzjkpcf";
|
|
||||||
"latte/peach" = "1fn5804wv9z9iv65ikyv015b01a7c546rsaaks2a2sq2c37n75l0";
|
|
||||||
"latte/yellow" = "0hzgiyhqmwgp3h3v1y23sx3x5qp712sw106472lbnxbywqlavcza";
|
|
||||||
"latte/green" = "194kxv6d9hc4nixy16hy9nvf32qs3v214nr2r2qf2z9l89rk5pnp";
|
|
||||||
"latte/teal" = "12n25d38zpqxsskglymhmza972klg2hj3c23v2nb3jfj82llw6v4";
|
|
||||||
"latte/sky" = "0yghds3xpmbhkbcj2jkh8df82j6vrn9q1z0s2129nca7l5g5f9w2";
|
|
||||||
"latte/sapphire" = "18dl1srxp3xccvvy56za6kp05n68d918l0wrxga11746g9sib7r3";
|
|
||||||
"latte/blue" = "1zv9nap21d80flvd1jwmjph05jgykxngv5kqbhk95mvqh962ygnf";
|
|
||||||
"latte/lavender" = "03j4fwbscip1qm6px1qxkha0c5csq2wwvzg9vwjkc2ja48v1mp9k";
|
|
||||||
"frappe/rosewater" = "032qbgj32mvgpankl9777x2lxk18451kglsxg5215k8zrwcg9y95";
|
|
||||||
"frappe/flamingo" = "1grhgynn8q7isv18981km5k8ll72ihsjw2ciy8widl6wikv29j8p";
|
|
||||||
"frappe/pink" = "0h33g721bph8ihd6lmbc7szxy4dq85ng1cgg5cxjb5y2m7wpdbsy";
|
|
||||||
"frappe/mauve" = "121jmznc9q3p7crsy9p2khw8xnzvz4lxms26g1h5wqa67wqvalc4";
|
|
||||||
"frappe/red" = "07wm4h1giyy6a5nlh0d3qdarfsp6ikyr5nmg94n13lj4q03d0cn0";
|
|
||||||
"frappe/maroon" = "08vg70nr918n4ffi1wnbba4xrx5ak5vfgq7m5ik0rpkb2wdb4x6k";
|
|
||||||
"frappe/peach" = "1cg753w2dxs0sx97d8y0g62s8aw3w6b9hrll0lsrw3bc1bvm23fl";
|
|
||||||
"frappe/yellow" = "0g43g2if1pcm25i261zfw43bawqqdlgg2f6q2bqhyqvafk9yb3dy";
|
|
||||||
"frappe/green" = "1n71mndzds3zldb271g8hdw1yn29s68svzvh8ckjcsz4sb9h1i74";
|
|
||||||
"frappe/teal" = "0b6m9cibfwf8csh1pk5i76xi3wx3v2aqwgffzsidw8nwc7c1a3wk";
|
|
||||||
"frappe/sky" = "1l4d44399ixshlc9fdsx7iqwxm6kdkp6k4z3z6bdyyx6adw3z4q5";
|
|
||||||
"frappe/sapphire" = "03fa9rnclvs5ljd0lzz15vnkzpqpbrhfppg3zwfchs9fvak0n3ni";
|
|
||||||
"frappe/blue" = "0r4jjn3pab77w1aanlv3143ch60400q44mdzaqmcjbcr6l2knmjh";
|
|
||||||
"frappe/lavender" = "1mrkaz72w6j9hh4dpxwgd6ks5wsnq9ydgy6f9gms4jx1611aab96";
|
|
||||||
"macchiato/rosewater" = "001akfnhlvwaiz5faahl4qi0qp6as6ilvkbja6bjy9f5iasr4ygp";
|
|
||||||
"macchiato/flamingo" = "06xq3pbx4cb3pyblx2vydr4bp0ylm7866d66agg5wg5qnr356wb3";
|
|
||||||
"macchiato/pink" = "1hb32dj0n3wx4f1wxa4n7fib2mazghwsg2ljycza9macfn2n87qn";
|
|
||||||
"macchiato/mauve" = "1yrnp162blizc10fz2n6ls1x0di1sdjk53vpsl7mifrkcr1k2nq7";
|
|
||||||
"macchiato/red" = "1g9s39q7459lk830vhdrfqkbzz88p3fp8k98a2ygj2hz8sycpryq";
|
|
||||||
"macchiato/maroon" = "0ad7rx8sbkygvsgywhpjvvzmyflyhz7jlm13dr7cxj3801rxhl6d";
|
|
||||||
"macchiato/peach" = "1m5m6afcl8s1ghn2b9n1d20fhsygnhgn0205nhpxh4bih3kg8c8m";
|
|
||||||
"macchiato/yellow" = "0zcc26d28jaq71mz8nqssz8p0hylczirjwjxr2dkha1133vjmvy5";
|
|
||||||
"macchiato/green" = "055xdb5jilp5fq3a1g8773rv52zr68fp4l3hs56yj6dy3bq3q22v";
|
|
||||||
"macchiato/teal" = "1sfci2g2nvmj0v72gnxqbj0k8053qz0rl6iphfxs3pgpi1b0rczq";
|
|
||||||
"macchiato/sky" = "0vhfmdliy8cbb0vqq3v26isvcz4sxzq0xrb4p5a6gibvxaqi6bf3";
|
|
||||||
"macchiato/sapphire" = "1744jiv57aqz4qi52n92nrx0s1rhylgg08qqc31jr2clk9h6bw18";
|
|
||||||
"macchiato/blue" = "1arp8r2g8ivs1xipq39d3l6cvx0zrr1vwv9yac5j33d6c93wbb2i";
|
|
||||||
"macchiato/lavender" = "0kak1f574c07gqjfafg3w5avrci584iqxjkmvrl2pv1879g84nn3";
|
|
||||||
"mocha/rosewater" = "0p3ck9crskrhk1za6knaznjlj464mx4sdkkadna6k2152m3czjpz";
|
|
||||||
"mocha/flamingo" = "04xx1mky230saqxxqin2fph8cnnz1jhmvb9qd9f5yc3pai3q5wdw";
|
|
||||||
"mocha/pink" = "1cj9zdd72vcc45ziav625yq6hrp1zw21f7xsic0ip065xcqzdl3p";
|
|
||||||
"mocha/mauve" = "1wb0ibmdv6vn07bk570pikm43qdxj3n2zsqr5sip17ay05j5l6dm";
|
|
||||||
"mocha/red" = "1mnzrk57ar2cphyi2ry2lg5ilmb26gm4pr7ixch2ls0hk8ilp9p9";
|
|
||||||
"mocha/maroon" = "1mcpwz3yrg3kk0hkqv5nykxj07bm70403yyl8r60pqlh74dnhkbf";
|
|
||||||
"mocha/peach" = "0jglpcs41rfqxcm45mvnbdqhma0bv4h07nc7c3nrwz3g3h2djmzr";
|
|
||||||
"mocha/yellow" = "0jqkvcjiwid1zdvrj2ikqf5winm08qyd51nfsawfdspbfhqnzmis";
|
|
||||||
"mocha/green" = "0bg0014a77yx7f2r6n4mxm7rqgdnymqq7cq6bvpgkfk2z1gyr38l";
|
|
||||||
"mocha/teal" = "0kzvi3gfirpcxdhgsilm51lk3j1z6lavb7160chgd9jhzk0xg97c";
|
|
||||||
"mocha/sky" = "057nmp2aywdxzrkmzi65bh2mvf1a9cnri0g0jdyzdnrn7f8bbsiw";
|
|
||||||
"mocha/sapphire" = "0nfklzb0a7mxv6nzav7m2g0y9plm72vwadm06445myv3k9j3ffmj";
|
|
||||||
"mocha/blue" = "06ay46x2aq1q5ghz2zhzhn6qyqkrrf4p9j59qywnxh1jvv728ns8";
|
|
||||||
"mocha/lavender" = "0iip063f6km17998c7ak0lb3kq6iskyi3xv2phn618mhslnxhwm5";
|
|
||||||
};
|
|
||||||
catppuccinThemes = lib.concatMap (
|
|
||||||
flavour:
|
|
||||||
map (
|
|
||||||
accent:
|
|
||||||
builtins.fromJSON (
|
|
||||||
builtins.readFile (
|
|
||||||
pkgs.fetchurl {
|
|
||||||
url = "https://element.catppuccin.com/${flavour.slug}/${accent}.json";
|
|
||||||
sha256 = themeHashes."${flavour.slug}/${accent}";
|
|
||||||
}
|
|
||||||
)
|
|
||||||
)
|
|
||||||
) accents
|
|
||||||
) flavours;
|
|
||||||
elementConfig = builtins.toFile "element-config.json" (
|
|
||||||
builtins.toJSON {
|
|
||||||
default_server_config = {
|
|
||||||
"m.homeserver" = {
|
|
||||||
base_url = "https://matrix.cyperpunk.de";
|
|
||||||
server_name = "cyperpunk.de";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
jitsi = {
|
|
||||||
preferred_domain = "jitsi.cyperpunk.de";
|
|
||||||
};
|
|
||||||
element_call = {
|
|
||||||
url = "https://element-call.cyperpunk.de";
|
|
||||||
use_exclusively = true;
|
|
||||||
participant_limit = 8;
|
|
||||||
brand = "Cyperpunk Call";
|
|
||||||
encryption = "None";
|
|
||||||
};
|
|
||||||
livekit = {
|
|
||||||
livekit_service_url = "https://cyperpunk.de/livekit/jwt/";
|
|
||||||
};
|
|
||||||
setting_defaults = {
|
|
||||||
custom_themes = catppuccinThemes;
|
|
||||||
feature_custom_themes = true;
|
|
||||||
};
|
|
||||||
features = {
|
|
||||||
feature_group_calls = true;
|
|
||||||
"feature_disable_call_per_sender_encryption" = true;
|
|
||||||
"feature_sliding_sync" = true;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
);
|
|
||||||
elementWebConfigured = pkgs.element-web.overrideAttrs (old: {
|
|
||||||
postInstall = (old.postInstall or "") + ''
|
|
||||||
cp ${elementConfig} $out/config.json
|
|
||||||
'';
|
|
||||||
});
|
|
||||||
synapseAdmin = pkgs.ketesa.withConfig {
|
|
||||||
restrictBaseUrl = [ "https://matrix.cyperpunk.de" ];
|
|
||||||
loginFlows = [ "password" ];
|
|
||||||
};
|
|
||||||
elementCallConfigured = pkgs.element-call.overrideAttrs (old: {
|
|
||||||
postInstall = (old.postInstall or "") + ''
|
|
||||||
cp ${
|
|
||||||
builtins.toFile "element-call-config.json" (
|
|
||||||
builtins.toJSON {
|
|
||||||
default_server_config = {
|
|
||||||
"m.homeserver" = {
|
|
||||||
base_url = "https://matrix.cyperpunk.de";
|
|
||||||
server_name = "cyperpunk.de";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
livekit_service_url = "https://cyperpunk.de/livekit/jwt/";
|
|
||||||
e2ee = {
|
|
||||||
default = false;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
)
|
|
||||||
} $out/config.json
|
|
||||||
'';
|
|
||||||
});
|
|
||||||
in
|
|
||||||
{
|
|
||||||
|
|
||||||
networking.firewall.allowedTCPPorts = [
|
|
||||||
8009 # Cinny
|
|
||||||
8010 # Element
|
|
||||||
8011 # Synapse Admin
|
|
||||||
8012 # FluffyChat
|
|
||||||
8013 # Element Call
|
|
||||||
];
|
|
||||||
|
|
||||||
services.nginx.virtualHosts = {
|
|
||||||
"cinny.cyperpunk.de" = {
|
|
||||||
listen = [
|
|
||||||
{
|
|
||||||
addr = "0.0.0.0";
|
|
||||||
port = 8009;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
root = "${pkgs.cinny}";
|
|
||||||
};
|
|
||||||
"element.cyperpunk.de" = {
|
|
||||||
listen = [
|
|
||||||
{
|
|
||||||
addr = "0.0.0.0";
|
|
||||||
port = 8010;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
root = "${elementWebConfigured}";
|
|
||||||
};
|
|
||||||
"fluffy.cyperpunk.de" = {
|
|
||||||
listen = [
|
|
||||||
{
|
|
||||||
addr = "0.0.0.0";
|
|
||||||
port = 8012;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
locations."/" = {
|
|
||||||
proxyPass = "http://127.0.0.1:8082";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
"admin.cyperpunk.de" = {
|
|
||||||
listen = [
|
|
||||||
{
|
|
||||||
addr = "0.0.0.0";
|
|
||||||
port = 8011;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
root = "${synapseAdmin}";
|
|
||||||
};
|
|
||||||
"element-call.cyperpunk.de" = {
|
|
||||||
listen = [
|
|
||||||
{
|
|
||||||
addr = "0.0.0.0";
|
|
||||||
port = 8013;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
root = "${elementCallConfigured}";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
virtualisation.oci-containers.containers.fluffychat = {
|
|
||||||
image = "ghcr.io/krille-chan/fluffychat:latest";
|
|
||||||
ports = [ "127.0.0.1:8082:80" ];
|
|
||||||
volumes = [
|
|
||||||
"${
|
|
||||||
builtins.toFile "fluffychat-config.json" (
|
|
||||||
builtins.toJSON {
|
|
||||||
default_homeserver = "matrix.cyperpunk.de";
|
|
||||||
preset_homeserver = "matrix.cyperpunk.de";
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}:/app/config.json:ro"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,39 +0,0 @@
|
|||||||
{
|
|
||||||
config,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
{
|
|
||||||
networking.firewall = {
|
|
||||||
allowedTCPPorts = [
|
|
||||||
3478 # TURN (coturn)
|
|
||||||
];
|
|
||||||
allowedUDPPorts = [
|
|
||||||
3478 # TURN (coturn)
|
|
||||||
];
|
|
||||||
allowedUDPPortRanges = [
|
|
||||||
{
|
|
||||||
from = 49152;
|
|
||||||
to = 65535; # TURN relay ports (coturn)
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
sops.secrets.matrix_turn_secret = {
|
|
||||||
owner = "matrix-synapse";
|
|
||||||
group = "matrix-synapse";
|
|
||||||
};
|
|
||||||
|
|
||||||
services.coturn = {
|
|
||||||
enable = true;
|
|
||||||
no-cli = true;
|
|
||||||
no-tcp-relay = true;
|
|
||||||
min-port = 49152;
|
|
||||||
max-port = 65535;
|
|
||||||
use-auth-secret = true;
|
|
||||||
static-auth-secret-file = config.sops.secrets.matrix_turn_secret.path;
|
|
||||||
realm = "turn.cyperpunk.de";
|
|
||||||
extraConfig = ''
|
|
||||||
no-multicast-peers
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -4,8 +4,8 @@
|
|||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
./synapse.nix
|
./synapse.nix
|
||||||
./clients.nix
|
|
||||||
./lk-jwt.nix
|
./lk-jwt.nix
|
||||||
|
./livekit.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
#networking.firewall = {
|
#networking.firewall = {
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
node_ip = "178.254.8.35";
|
node_ip = "178.254.8.35";
|
||||||
};
|
};
|
||||||
room = {
|
room = {
|
||||||
auto_create = false;
|
auto_create = true;
|
||||||
enabled_codecs = [
|
enabled_codecs = [
|
||||||
{ mime = "video/VP8"; }
|
{ mime = "video/VP8"; }
|
||||||
{ mime = "video/VP9"; }
|
{ mime = "video/VP9"; }
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{ config, lib, ... }:
|
{ config, lib, ... }:
|
||||||
let
|
let
|
||||||
domain = "cyperpunk.de";
|
domain = "cyperpunk.de";
|
||||||
synapseUrl = "http://100.109.179.25:8008";
|
synapseUrl = "http://localhost:8008";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
sops.secrets.livekit_key_jwt = { };
|
sops.secrets.livekit_key_jwt = { };
|
||||||
@@ -19,6 +19,7 @@ in
|
|||||||
LIVEKIT_FULL_ACCESS_HOMESERVERS = domain;
|
LIVEKIT_FULL_ACCESS_HOMESERVERS = domain;
|
||||||
MATRIX_BASE_URL = synapseUrl;
|
MATRIX_BASE_URL = synapseUrl;
|
||||||
LIVEKIT_JWT_BIND = lib.mkForce ":18080";
|
LIVEKIT_JWT_BIND = lib.mkForce ":18080";
|
||||||
|
LIVEKIT_INSECURE_SKIP_VERIFY_TLS = "YES_I_KNOW_WHAT_I_AM_DOING";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
+214
-35
@@ -1,8 +1,7 @@
|
|||||||
_:
|
{ pkgs, lib, ... }:
|
||||||
let
|
let
|
||||||
upstream = "100.109.179.25";
|
upstream = "100.109.179.25";
|
||||||
|
|
||||||
# helper: simple reverse proxy, force SSL
|
|
||||||
mkProxy = port: {
|
mkProxy = port: {
|
||||||
forceSSL = true;
|
forceSSL = true;
|
||||||
enableACME = true;
|
enableACME = true;
|
||||||
@@ -11,7 +10,6 @@ let
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
# helper: like mkProxy but with websocket support
|
|
||||||
mkWsProxy =
|
mkWsProxy =
|
||||||
port:
|
port:
|
||||||
(mkProxy port)
|
(mkProxy port)
|
||||||
@@ -55,6 +53,176 @@ let
|
|||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
flavours = [
|
||||||
|
{
|
||||||
|
name = "Latte";
|
||||||
|
slug = "latte";
|
||||||
|
is_dark = false;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "Frappé";
|
||||||
|
slug = "frappe";
|
||||||
|
is_dark = true;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "Macchiato";
|
||||||
|
slug = "macchiato";
|
||||||
|
is_dark = true;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "Mocha";
|
||||||
|
slug = "mocha";
|
||||||
|
is_dark = true;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
accents = [
|
||||||
|
"rosewater"
|
||||||
|
"flamingo"
|
||||||
|
"pink"
|
||||||
|
"mauve"
|
||||||
|
"red"
|
||||||
|
"maroon"
|
||||||
|
"peach"
|
||||||
|
"yellow"
|
||||||
|
"green"
|
||||||
|
"teal"
|
||||||
|
"sky"
|
||||||
|
"sapphire"
|
||||||
|
"blue"
|
||||||
|
"lavender"
|
||||||
|
];
|
||||||
|
themeHashes = {
|
||||||
|
"latte/rosewater" = "0l1m4bhaxdam07rfqag6pjbzhdpyi5w3i14vp6rq7aj59pildw3a";
|
||||||
|
"latte/flamingo" = "1m8hh2l87xv2rfgpnnl5vzddmam0n82h25fwadb37blgab08vhsr";
|
||||||
|
"latte/pink" = "0ambrc42mvg0vdspfmnl31ka1nsxpdyv1p3nh045822y02q20wwh";
|
||||||
|
"latte/mauve" = "1nnn2w6nsr24a45jy497c2vhi8v64bwg99fj2dyhpfsn89c63lhn";
|
||||||
|
"latte/red" = "14lmw4c4llfz6zqvfymkc6k3msxcml2gwq9rhwsixdpc5mjjbn8n";
|
||||||
|
"latte/maroon" = "0ydpng9451mpn7hv5ag1ck8hryx8pdvrml3zksvzm2fiwzzjkpcf";
|
||||||
|
"latte/peach" = "1fn5804wv9z9iv65ikyv015b01a7c546rsaaks2a2sq2c37n75l0";
|
||||||
|
"latte/yellow" = "0hzgiyhqmwgp3h3v1y23sx3x5qp712sw106472lbnxbywqlavcza";
|
||||||
|
"latte/green" = "194kxv6d9hc4nixy16hy9nvf32qs3v214nr2r2qf2z9l89rk5pnp";
|
||||||
|
"latte/teal" = "12n25d38zpqxsskglymhmza972klg2hj3c23v2nb3jfj82llw6v4";
|
||||||
|
"latte/sky" = "0yghds3xpmbhkbcj2jkh8df82j6vrn9q1z0s2129nca7l5g5f9w2";
|
||||||
|
"latte/sapphire" = "18dl1srxp3xccvvy56za6kp05n68d918l0wrxga11746g9sib7r3";
|
||||||
|
"latte/blue" = "1zv9nap21d80flvd1jwmjph05jgykxngv5kqbhk95mvqh962ygnf";
|
||||||
|
"latte/lavender" = "03j4fwbscip1qm6px1qxkha0c5csq2wwvzg9vwjkc2ja48v1mp9k";
|
||||||
|
"frappe/rosewater" = "032qbgj32mvgpankl9777x2lxk18451kglsxg5215k8zrwcg9y95";
|
||||||
|
"frappe/flamingo" = "1grhgynn8q7isv18981km5k8ll72ihsjw2ciy8widl6wikv29j8p";
|
||||||
|
"frappe/pink" = "0h33g721bph8ihd6lmbc7szxy4dq85ng1cgg5cxjb5y2m7wpdbsy";
|
||||||
|
"frappe/mauve" = "121jmznc9q3p7crsy9p2khw8xnzvz4lxms26g1h5wqa67wqvalc4";
|
||||||
|
"frappe/red" = "07wm4h1giyy6a5nlh0d3qdarfsp6ikyr5nmg94n13lj4q03d0cn0";
|
||||||
|
"frappe/maroon" = "08vg70nr918n4ffi1wnbba4xrx5ak5vfgq7m5ik0rpkb2wdb4x6k";
|
||||||
|
"frappe/peach" = "1cg753w2dxs0sx97d8y0g62s8aw3w6b9hrll0lsrw3bc1bvm23fl";
|
||||||
|
"frappe/yellow" = "0g43g2if1pcm25i261zfw43bawqqdlgg2f6q2bqhyqvafk9yb3dy";
|
||||||
|
"frappe/green" = "1n71mndzds3zldb271g8hdw1yn29s68svzvh8ckjcsz4sb9h1i74";
|
||||||
|
"frappe/teal" = "0b6m9cibfwf8csh1pk5i76xi3wx3v2aqwgffzsidw8nwc7c1a3wk";
|
||||||
|
"frappe/sky" = "1l4d44399ixshlc9fdsx7iqwxm6kdkp6k4z3z6bdyyx6adw3z4q5";
|
||||||
|
"frappe/sapphire" = "03fa9rnclvs5ljd0lzz15vnkzpqpbrhfppg3zwfchs9fvak0n3ni";
|
||||||
|
"frappe/blue" = "0r4jjn3pab77w1aanlv3143ch60400q44mdzaqmcjbcr6l2knmjh";
|
||||||
|
"frappe/lavender" = "1mrkaz72w6j9hh4dpxwgd6ks5wsnq9ydgy6f9gms4jx1611aab96";
|
||||||
|
"macchiato/rosewater" = "001akfnhlvwaiz5faahl4qi0qp6as6ilvkbja6bjy9f5iasr4ygp";
|
||||||
|
"macchiato/flamingo" = "06xq3pbx4cb3pyblx2vydr4bp0ylm7866d66agg5wg5qnr356wb3";
|
||||||
|
"macchiato/pink" = "1hb32dj0n3wx4f1wxa4n7fib2mazghwsg2ljycza9macfn2n87qn";
|
||||||
|
"macchiato/mauve" = "1yrnp162blizc10fz2n6ls1x0di1sdjk53vpsl7mifrkcr1k2nq7";
|
||||||
|
"macchiato/red" = "1g9s39q7459lk830vhdrfqkbzz88p3fp8k98a2ygj2hz8sycpryq";
|
||||||
|
"macchiato/maroon" = "0ad7rx8sbkygvsgywhpjvvzmyflyhz7jlm13dr7cxj3801rxhl6d";
|
||||||
|
"macchiato/peach" = "1m5m6afcl8s1ghn2b9n1d20fhsygnhgn0205nhpxh4bih3kg8c8m";
|
||||||
|
"macchiato/yellow" = "0zcc26d28jaq71mz8nqssz8p0hylczirjwjxr2dkha1133vjmvy5";
|
||||||
|
"macchiato/green" = "055xdb5jilp5fq3a1g8773rv52zr68fp4l3hs56yj6dy3bq3q22v";
|
||||||
|
"macchiato/teal" = "1sfci2g2nvmj0v72gnxqbj0k8053qz0rl6iphfxs3pgpi1b0rczq";
|
||||||
|
"macchiato/sky" = "0vhfmdliy8cbb0vqq3v26isvcz4sxzq0xrb4p5a6gibvxaqi6bf3";
|
||||||
|
"macchiato/sapphire" = "1744jiv57aqz4qi52n92nrx0s1rhylgg08qqc31jr2clk9h6bw18";
|
||||||
|
"macchiato/blue" = "1arp8r2g8ivs1xipq39d3l6cvx0zrr1vwv9yac5j33d6c93wbb2i";
|
||||||
|
"macchiato/lavender" = "0kak1f574c07gqjfafg3w5avrci584iqxjkmvrl2pv1879g84nn3";
|
||||||
|
"mocha/rosewater" = "0p3ck9crskrhk1za6knaznjlj464mx4sdkkadna6k2152m3czjpz";
|
||||||
|
"mocha/flamingo" = "04xx1mky230saqxxqin2fph8cnnz1jhmvb9qd9f5yc3pai3q5wdw";
|
||||||
|
"mocha/pink" = "1cj9zdd72vcc45ziav625yq6hrp1zw21f7xsic0ip065xcqzdl3p";
|
||||||
|
"mocha/mauve" = "1wb0ibmdv6vn07bk570pikm43qdxj3n2zsqr5sip17ay05j5l6dm";
|
||||||
|
"mocha/red" = "1mnzrk57ar2cphyi2ry2lg5ilmb26gm4pr7ixch2ls0hk8ilp9p9";
|
||||||
|
"mocha/maroon" = "1mcpwz3yrg3kk0hkqv5nykxj07bm70403yyl8r60pqlh74dnhkbf";
|
||||||
|
"mocha/peach" = "0jglpcs41rfqxcm45mvnbdqhma0bv4h07nc7c3nrwz3g3h2djmzr";
|
||||||
|
"mocha/yellow" = "0jqkvcjiwid1zdvrj2ikqf5winm08qyd51nfsawfdspbfhqnzmis";
|
||||||
|
"mocha/green" = "0bg0014a77yx7f2r6n4mxm7rqgdnymqq7cq6bvpgkfk2z1gyr38l";
|
||||||
|
"mocha/teal" = "0kzvi3gfirpcxdhgsilm51lk3j1z6lavb7160chgd9jhzk0xg97c";
|
||||||
|
"mocha/sky" = "057nmp2aywdxzrkmzi65bh2mvf1a9cnri0g0jdyzdnrn7f8bbsiw";
|
||||||
|
"mocha/sapphire" = "0nfklzb0a7mxv6nzav7m2g0y9plm72vwadm06445myv3k9j3ffmj";
|
||||||
|
"mocha/blue" = "06ay46x2aq1q5ghz2zhzhn6qyqkrrf4p9j59qywnxh1jvv728ns8";
|
||||||
|
"mocha/lavender" = "0iip063f6km17998c7ak0lb3kq6iskyi3xv2phn618mhslnxhwm5";
|
||||||
|
};
|
||||||
|
catppuccinThemes = lib.concatMap (
|
||||||
|
flavour:
|
||||||
|
map (
|
||||||
|
accent:
|
||||||
|
builtins.fromJSON (
|
||||||
|
builtins.readFile (
|
||||||
|
pkgs.fetchurl {
|
||||||
|
url = "https://element.catppuccin.com/${flavour.slug}/${accent}.json";
|
||||||
|
sha256 = themeHashes."${flavour.slug}/${accent}";
|
||||||
|
}
|
||||||
|
)
|
||||||
|
)
|
||||||
|
) accents
|
||||||
|
) flavours;
|
||||||
|
|
||||||
|
elementConfig = builtins.toFile "element-config.json" (
|
||||||
|
builtins.toJSON {
|
||||||
|
default_server_config = {
|
||||||
|
"m.homeserver" = {
|
||||||
|
base_url = "https://matrix.cyperpunk.de";
|
||||||
|
server_name = "cyperpunk.de";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
jitsi.preferred_domain = "jitsi.cyperpunk.de";
|
||||||
|
element_call = {
|
||||||
|
url = "https://element-call.cyperpunk.de";
|
||||||
|
use_exclusively = true;
|
||||||
|
participant_limit = 8;
|
||||||
|
brand = "Cyperpunk Call";
|
||||||
|
encryption = "None";
|
||||||
|
};
|
||||||
|
livekit.livekit_service_url = "https://cyperpunk.de/livekit/jwt/";
|
||||||
|
setting_defaults = {
|
||||||
|
custom_themes = catppuccinThemes;
|
||||||
|
feature_custom_themes = true;
|
||||||
|
};
|
||||||
|
features = {
|
||||||
|
feature_group_calls = true;
|
||||||
|
feature_disable_call_per_sender_encryption = true;
|
||||||
|
feature_sliding_sync = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
elementWebConfigured = pkgs.element-web.overrideAttrs (old: {
|
||||||
|
postInstall = (old.postInstall or "") + ''
|
||||||
|
cp ${elementConfig} $out/config.json
|
||||||
|
'';
|
||||||
|
});
|
||||||
|
|
||||||
|
synapseAdmin = pkgs.ketesa.withConfig {
|
||||||
|
restrictBaseUrl = [ "https://matrix.cyperpunk.de" ];
|
||||||
|
loginFlows = [ "password" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
elementCallConfigured = pkgs.element-call.overrideAttrs (old: {
|
||||||
|
postInstall = (old.postInstall or "") + ''
|
||||||
|
cp ${
|
||||||
|
builtins.toFile "element-call-config.json" (
|
||||||
|
builtins.toJSON {
|
||||||
|
default_server_config = {
|
||||||
|
"m.homeserver" = {
|
||||||
|
base_url = "https://matrix.cyperpunk.de";
|
||||||
|
server_name = "cyperpunk.de";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
livekit_service_url = "https://cyperpunk.de/livekit/jwt/";
|
||||||
|
e2ee.default = false;
|
||||||
|
}
|
||||||
|
)
|
||||||
|
} $out/config.json
|
||||||
|
'';
|
||||||
|
});
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
networking.firewall.allowedTCPPorts = [
|
networking.firewall.allowedTCPPorts = [
|
||||||
@@ -64,7 +232,7 @@ in
|
|||||||
|
|
||||||
security.acme = {
|
security.acme = {
|
||||||
acceptTerms = true;
|
acceptTerms = true;
|
||||||
defaults.email = "phil.keier@hotmail.com"; # Change accordingly
|
defaults.email = "phil.keier@hotmail.com";
|
||||||
};
|
};
|
||||||
|
|
||||||
services.nginx = {
|
services.nginx = {
|
||||||
@@ -75,13 +243,13 @@ in
|
|||||||
recommendedGzipSettings = true;
|
recommendedGzipSettings = true;
|
||||||
|
|
||||||
virtualHosts = {
|
virtualHosts = {
|
||||||
|
# controller services
|
||||||
"git.cyperpunk.de" = mkProxy 9000;
|
"git.cyperpunk.de" = mkProxy 9000;
|
||||||
"search.cyperpunk.de" = mkProxy 11080;
|
"search.cyperpunk.de" = mkProxy 11080;
|
||||||
"file.cyperpunk.de" = mkProxy 10000;
|
"file.cyperpunk.de" = mkProxy 10000;
|
||||||
"ngx.cyperpunk.de" = mkWsProxy 28101;
|
"ngx.cyperpunk.de" = mkWsProxy 28101;
|
||||||
|
|
||||||
"vault.cyperpunk.de" = mkWsProxy 8222;
|
"vault.cyperpunk.de" = mkWsProxy 8222;
|
||||||
"fluffy.cyperpunk.de" = mkWsProxy 8012;
|
"calvin.cyperpunk.de" = mkWsProxy 15006;
|
||||||
|
|
||||||
"www.cyperpunk.de" = {
|
"www.cyperpunk.de" = {
|
||||||
forceSSL = true;
|
forceSSL = true;
|
||||||
@@ -98,49 +266,46 @@ in
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
"calvin.cyperpunk.de" = mkWsProxy 15006;
|
# local static clients
|
||||||
"cinny.cyperpunk.de" = mkWsProxy 8009;
|
"cinny.cyperpunk.de" = {
|
||||||
|
forceSSL = true;
|
||||||
|
enableACME = true;
|
||||||
|
root = "${pkgs.cinny}";
|
||||||
|
};
|
||||||
|
|
||||||
|
"element.cyperpunk.de" = {
|
||||||
|
forceSSL = true;
|
||||||
|
enableACME = true;
|
||||||
|
root = "${elementWebConfigured}";
|
||||||
|
};
|
||||||
|
|
||||||
"element-call.cyperpunk.de" = {
|
"element-call.cyperpunk.de" = {
|
||||||
forceSSL = true;
|
forceSSL = true;
|
||||||
enableACME = true;
|
enableACME = true;
|
||||||
locations."/" = {
|
root = "${elementCallConfigured}";
|
||||||
proxyPass = "http://${upstream}:8013";
|
|
||||||
proxyWebsockets = true;
|
|
||||||
extraConfig = ''
|
extraConfig = ''
|
||||||
add_header Cross-Origin-Opener-Policy "same-origin";
|
add_header Cross-Origin-Opener-Policy "same-origin";
|
||||||
add_header Cross-Origin-Embedder-Policy "require-corp";
|
add_header Cross-Origin-Embedder-Policy "require-corp";
|
||||||
add_header Cross-Origin-Resource-Policy "cross-origin";
|
add_header Cross-Origin-Resource-Policy "cross-origin";
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
|
||||||
|
|
||||||
"element.cyperpunk.de" = {
|
"fluffy.cyperpunk.de" = {
|
||||||
forceSSL = true;
|
forceSSL = true;
|
||||||
enableACME = true;
|
enableACME = true;
|
||||||
locations = {
|
locations."/" = {
|
||||||
"/" = {
|
proxyPass = "http://127.0.0.1:8082";
|
||||||
proxyPass = "http://${upstream}:8010";
|
|
||||||
proxyWebsockets = true;
|
proxyWebsockets = true;
|
||||||
};
|
};
|
||||||
"/widgets/element-call/config.json" = {
|
|
||||||
extraConfig = ''
|
|
||||||
default_type application/json;
|
|
||||||
add_header Access-Control-Allow-Origin *;
|
|
||||||
return 200 '{
|
|
||||||
"livekit_service_url": "https://cyperpunk.de/livekit/jwt/",
|
|
||||||
"default_server_config": {
|
|
||||||
"m.homeserver": {
|
|
||||||
"base_url": "https://matrix.cyperpunk.de",
|
|
||||||
"server_name":"cyperpunk.de"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}';
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
"admin.cyperpunk.de" = {
|
||||||
|
forceSSL = true;
|
||||||
|
enableACME = true;
|
||||||
|
root = "${synapseAdmin}";
|
||||||
|
};
|
||||||
|
|
||||||
|
# matrix + livekit
|
||||||
"cyperpunk.de" = {
|
"cyperpunk.de" = {
|
||||||
forceSSL = true;
|
forceSSL = true;
|
||||||
enableACME = true;
|
enableACME = true;
|
||||||
@@ -149,12 +314,12 @@ in
|
|||||||
extraConfig = matrixConfig;
|
extraConfig = matrixConfig;
|
||||||
locations = wellKnownMatrix // {
|
locations = wellKnownMatrix // {
|
||||||
"/" = {
|
"/" = {
|
||||||
proxyPass = "http://${upstream}:8008";
|
proxyPass = "http://127.0.0.1:8008";
|
||||||
proxyWebsockets = true;
|
proxyWebsockets = true;
|
||||||
};
|
};
|
||||||
"^~ /livekit/jwt/" = {
|
"^~ /livekit/jwt/" = {
|
||||||
priority = 400;
|
priority = 400;
|
||||||
proxyPass = "http://${upstream}:18080/";
|
proxyPass = "http://127.0.0.1:18080/";
|
||||||
};
|
};
|
||||||
"^~ /livekit/sfu/" = {
|
"^~ /livekit/sfu/" = {
|
||||||
priority = 400;
|
priority = 400;
|
||||||
@@ -167,7 +332,6 @@ in
|
|||||||
proxy_set_header X-Forwarded-Proto $scheme;
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
proxy_read_timeout 86400s;
|
proxy_read_timeout 86400s;
|
||||||
proxy_send_timeout 86400s;
|
proxy_send_timeout 86400s;
|
||||||
|
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
"/_matrix/client/unstable/org.matrix.msc4143/rtc/transports" = {
|
"/_matrix/client/unstable/org.matrix.msc4143/rtc/transports" = {
|
||||||
@@ -183,4 +347,19 @@ in
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
virtualisation.oci-containers.containers.fluffychat = {
|
||||||
|
image = "ghcr.io/krille-chan/fluffychat:latest";
|
||||||
|
ports = [ "127.0.0.1:8082:80" ];
|
||||||
|
volumes = [
|
||||||
|
"${
|
||||||
|
builtins.toFile "fluffychat-config.json" (
|
||||||
|
builtins.toJSON {
|
||||||
|
default_homeserver = "matrix.cyperpunk.de";
|
||||||
|
preset_homeserver = "matrix.cyperpunk.de";
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}:/app/config.json:ro"
|
||||||
|
];
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user