1- { lib , config , pkgs , ... } :
1+ {
2+ lib ,
3+ config ,
4+ pkgs ,
5+ ...
6+ } :
27let
38 keyFile = "/run/livekit.key" ;
4- in
5- {
9+ in
10+ {
611
712 options = {
813 matrix . enable = lib . mkEnableOption "Enables matrix" ;
914 matrix . port = lib . mkOption { default = 8008 ; } ;
1015 matrix . domain = lib . mkOption { default = "matrix.mlflexer.online" ; } ;
11- # matrix.livekit.domain = lib.mkOption { default = "livekit.mlflexer.online"; };
1216 matrix . registration_secret = lib . mkOption {
1317 default = "/home/mlflexer/repos/.dotfiles/hosts/services/matrix/.reg_secret" ;
1418 type = lib . types . path ;
1519 } ;
1620 } ;
1721
1822 config = lib . mkIf config . matrix . enable {
23+
1924 services . matrix-synapse = {
2025 enable = true ;
2126 dataDir = "/mnt/usbdrive2/matrix-synapse" ;
2227 settings = {
23- server_name = "mlflexer.online" ;
28+ server_name = config . matrix . domain ;
2429 public_baseurl = "https://${ config . matrix . domain } " ;
25- database . name = "sqlite3" ;
30+ enable_authenticated_media = false ;
31+ dynamic_thumbnails = true ;
32+
33+ federation_verify_certificates = true ;
34+ default_identity_server = "https://vector.im" ;
2635
2736 listeners = [
2837 {
2938 port = config . matrix . port ;
30- bind_addresses = [ "127.0.0.1" ] ;
39+ bind_addresses = [ "127.0.0.1" ] ;
3140 type = "http" ;
3241 tls = false ;
3342 x_forwarded = true ;
3443 resources = [
3544 {
36- names = [ "client" "federation" ] ;
45+ names = [
46+ "client"
47+ "federation"
48+ "media"
49+ ] ;
3750 compress = true ;
3851 }
3952 ] ;
5669 msc3266_enabled = true ; # Room summary for knocking
5770 msc4222_enabled = true ; # Fixed sync for calls
5871 } ;
72+
73+ extra_well_known_client_content = {
74+
75+ "org.matrix.msc4143.rtc_foci" = [
76+ {
77+ "type" = "livekit" ;
78+ "livekit_service_url" = "https://${ config . matrix . domain } /livekit/jwt" ;
79+ "livekit_alias" = config . matrix . domain ;
80+ }
81+ ] ;
82+ "org.matrix.msc3575.proxy" = {
83+ "url" = "https://${ config . matrix . domain } " ;
84+ } ;
85+
86+ } ;
87+
88+ serve_server_wellknown = true ;
89+ matrix_rtc . transports = [
90+ {
91+ type = "livekit" ;
92+ livekit_service_url = "https://${ config . matrix . domain } /livekit/jwt" ;
93+ }
94+
95+ ] ;
96+
5997 } ;
6098 } ;
6199
76114 } ;
77115
78116 systemd . services . livekit-key = {
79- before = [ "lk-jwt-service.service" "livekit.service" ] ;
117+ before = [
118+ "lk-jwt-service.service"
119+ "livekit.service"
120+ ] ;
80121 wantedBy = [ "multi-user.target" ] ;
81- path = with pkgs ; [ livekit coreutils gawk ] ;
122+ path = with pkgs ; [
123+ livekit
124+ coreutils
125+ gawk
126+ ] ;
82127 script = ''
83128 echo "Key missing, generating key"
84129 echo "lk-jwt-service: $(livekit-server generate-keys | tail -1 | awk '{print $3}')" > "${ keyFile } "
@@ -89,20 +134,142 @@ let
89134 unitConfig . ConditionPathExists = "!${ keyFile } " ;
90135 } ;
91136
92- systemd . services . lk-jwt-service . environment . LIVEKIT_FULL_ACCESS_HOMESERVERS = config . matrix . domain ;
137+ systemd . services . lk-jwt-service . environment . LIVEKIT_FULL_ACCESS_HOMESERVERS = config . matrix . domain ;
138+
139+ # MAUTRIX ------------------------------
140+ nixpkgs . config . permittedInsecurePackages = [
141+ "olm-3.2.16"
142+ ] ;
143+
144+ services . postgresql = {
145+ enable = true ;
146+ ensureUsers = [
147+ {
148+ name = "mautrix-discord" ;
149+ ensureDBOwnership = true ;
150+ }
151+ {
152+ name = "mautrix-meta-messenger" ;
153+ ensureDBOwnership = true ;
154+ }
155+ {
156+ name = "mautrix-meta-instagram" ;
157+ ensureDBOwnership = true ;
158+ }
159+ ] ;
160+ ensureDatabases = [
161+ "mautrix-discord"
162+ "mautrix-meta-messenger"
163+ "mautrix-meta-instagram"
164+ ] ;
165+ } ;
166+
167+ # Discord
168+ services . mautrix-discord = {
169+ enable = true ;
170+ dataDir = "/mnt/usbdrive2/mautrix/discord" ;
171+ settings = {
172+ homeserver = {
173+ domain = config . matrix . domain ;
174+ address = "https://${ config . matrix . domain } " ;
175+ } ;
176+ # database = {
177+ # type = "postgres";
178+ # uri = "postgresql:///mautrix-discord?host=/var/run/postgresql";
179+ # };
180+ appservice = {
181+ database = {
182+ type = "postgres" ;
183+ uri = "postgresql:///mautrix-discord?host=/var/run/postgresql" ;
184+ } ;
185+ } ;
186+ bridge = {
187+ public_address = "https://discord.bridge.mlflexer.online" ;
188+ permissions = {
189+ "@mlflexer:${ config . matrix . domain } " = "admin" ;
190+ } ;
191+ direct_media = {
192+ enabled = true ;
193+ server_name = "discord.bridge.mlflexer.online" ; # 29334
194+ allow_proxy = true ;
195+ } ;
196+ } ;
93197
198+ } ;
199+ } ;
94200
201+ # Meta
202+ services . mautrix-meta = {
203+ instances = {
204+ messenger = {
205+ enable = true ;
206+ settings = {
207+ homeserver = {
208+ domain = config . matrix . domain ;
209+ address = "https://${ config . matrix . domain } " ;
210+ } ;
211+ database = {
212+ type = "postgres" ;
213+ uri = "postgresql:///mautrix-meta-messenger?host=/var/run/postgresql" ;
214+ } ;
215+ appservice = {
216+ public_address = "https://messenger.bridge.mlflexer.online" ;
217+ id = "messenger" ;
218+ bot = {
219+ username = "Messenger" ;
220+ } ;
221+ } ;
222+ bridge = {
223+ permissions = {
224+ "@mlflexer:${ config . matrix . domain } " = "admin" ;
225+ } ;
226+ } ;
227+ direct_media = {
228+ enabled = true ;
229+ server_name = "messenger.bridge.mlflexer.online" ; # 29319
230+ allow_proxy = true ;
231+ } ;
232+ network . mode = "messenger" ;
95233
96- # MAUTRIX ------------------------------
234+ } ;
97235
98- # services.mautrix-discord = {
99- # enable = true;
100- # dataDir = "/mnt/usbdrive2/mautrix/discord";
101- # };
236+ } ;
237+ instagram = {
238+ enable = true ;
239+ settings = {
240+ homeserver = {
241+ domain = config . matrix . domain ;
242+ address = "https://${ config . matrix . domain } " ;
243+ } ;
244+ database = {
245+ type = "postgres" ;
246+ uri = "postgresql:///mautrix-meta-instagram?host=/var/run/postgresql" ;
247+ } ;
248+ appservice = {
249+ public_address = "https://instagram.bridge.mlflexer.online" ;
250+ id = "instagram" ;
251+ bot = {
252+ username = "instagram" ;
253+ } ;
254+ } ;
255+ bridge = {
256+ permissions = {
257+ "@mlflexer:${ config . matrix . domain } " = "admin" ;
258+ } ;
259+ } ;
260+ direct_media = {
261+ enabled = true ;
262+ server_name = "instagram.bridge.mlflexer.online" ; # 29320
263+ allow_proxy = true ;
264+ } ;
265+ network . mode = "instagram" ;
102266
267+ } ;
103268
269+ } ;
270+ } ;
271+
272+ } ;
104273
105-
106274 } ;
107275}
108-
0 commit comments