flake-update-20260505
1_: {
2 ssh = {
3 vincent = [
4 # Yubikeys (PIV - legacy, keep during transition)
5 "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFT5Rx+4Wuvd8lMBkcHxb4oHdRhm/OTg+p5tvPzoIN9enSmgRw5Inm/SlS8ZzV87G1NESTgzDRi6hREvqDlKvxs="
6 "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBGHMa4rHuBbQQYv+8jvlkFCD2VYRGA4+5fnZAhLx8iDirzfEPqHB60UJWcDeixnJCUlpJjzFbS4crNOXhfCTCTE="
7 "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBFzxC16VqwTgWDQfw2YCiOw2JzpH3z9XgHtKoHhBdHi2i9m9XUc7fIUeEIIf7P8ARRNd8q5bjvl8JY7LtPkNCU="
8 # FIDO2 resident keys (homelab)
9 "sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIODTc5Exm59skgJdu6/rA3CpX4k4P1CFBqCFtelWGGmEAAAAC3NzaDpob21lbGFi homelab-servers"
10 "sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIAGh5p44LvQrWjAMyC/5LjUnViqFl3ddVfiFnoiLgJb7AAAAEnNzaDpjcml0aWNhbC1pbmZyYQ== infra-touch-required"
11 # FIDO2 resident keys (okinawa)
12 "sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIEefW7gStvkrO98v6UUawwa3yOu896Ei8USE/Sh2DjaUAAAABHNzaDo= vincent@okinawa"
13 # Passage sync keys (non-SK, for automated git pull)
14 "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBqhe3iS2058Ro8jN0b5Sr1tb+fEyqwgEmEC7vCM0za4 vincent@kyushu-passage"
15 "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII/CgISZ5XVyg8eYH7b56EWo4UGplOzzZKdtMKtkZqxc vincent@okinawa-passage"
16 # Host keys (trusted machines)
17 "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILJmTdMKYdgqpbQWBif58VBuwX+GqMGsMfB1ey1TKrM3 vincent@aomi"
18 "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGThdcaPfIaB7d+K5uODqEusLKGI5ZCye0aNOCaMoInO Kyushu's ssh key"
19 # Boox (osaka) Termux
20 "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICa0SyAspL7PBPudCjb7oCBG17WRmYnDQF7/BYkFwqDi oksaka-termux"
21 # Light Phone (suzu) Termux
22 "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK0Q1oXzMMJG03n2VoxKKOGruyGBy8V8yanqgeeUYm+N suzu-termux"
23 ];
24 };
25 syncthingFolders = {
26 sync = {
27 id = "7dshg-r8zr6";
28 path = "/home/vincent/sync";
29 };
30 documents = {
31 id = "oftdb-t5anv";
32 path = "/home/vincent/desktop/documents";
33 };
34 org = {
35 id = "sjpsr-xfwdu";
36 path = "/home/vincent/desktop/org";
37 versioning = {
38 type = "staggered";
39 params = {
40 cleanInterval = "3600"; # cleanup every hour
41 maxAge = "15768000"; # keep for ~6 months (182 days in seconds)
42 };
43 };
44 };
45 screenshots = {
46 id = "prpsz-azlz9";
47 path = "/home/vincent/desktop/pictures/screenshots";
48 };
49 wallpapers = {
50 id = "wpiah-ydwwx";
51 path = "/home/vincent/desktop/pictures/wallpapers";
52 };
53 claude-sync = {
54 id = "claude-sync"; # new consolidated folder
55 path = "/home/vincent/.local/share/claude-sync";
56 };
57 ai-sync = {
58 id = "ai-sync"; # unified AI agent storage (sessions, plans, learnings, research)
59 path = "/home/vincent/.local/share/ai-sync";
60 };
61 usage-metrics = {
62 id = "usage-metrics";
63 path = "/home/vincent/.local/share/usage-metrics";
64 };
65 paperless-media = {
66 id = "paperless-media";
67 path = "/neo/paperless/media";
68 versioning = {
69 type = "staggered";
70 params = {
71 cleanInterval = "3600"; # cleanup every hour
72 maxAge = "15768000"; # keep for ~6 months (182 days in seconds)
73 };
74 };
75 };
76 paperless-inbox = {
77 id = "paperless-inbox";
78 path = "/neo/paperless/consume";
79 # No versioning - temporary files get processed and deleted
80 };
81 };
82 net = {
83 dns = {
84 cacheNetworks = [
85 "192.168.1.0/24"
86 "10.100.0.0/24"
87 ];
88 };
89 vpn = {
90 endpoint = "46.224.100.116";
91 };
92 nfs = {
93 defaultHosts = {
94 rhea = {
95 server = "rhea.sbr.pm";
96 folders = [
97 "downloads"
98 "pictures"
99 "videos"
100 ];
101 };
102 zion = {
103 server = "rhea.sbr.pm";
104 rootPath = "/zion";
105 folders = [
106 "audiobooks"
107 "documents"
108 "ebooks"
109 "music"
110 ];
111 };
112 aion = {
113 server = "aion.sbr.pm";
114 folders = [
115 "audiobooks"
116 "music"
117 ];
118 };
119 };
120 };
121 };
122 machines = {
123 athena = {
124 net = {
125 ips = [ "192.168.1.183" ];
126 vpn = {
127 pubkey = "RWqH7RdIXg+YE9U1nlsNiOC7jH8eWjWQmikqBVDGSXU=";
128 ips = [ "10.100.0.83" ];
129 };
130 names = [
131 "athena.home"
132 "athena.vpn"
133 "athena.sbr.pm"
134 ];
135 };
136 ssh = {
137 hostKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIM/4KRP1rzOwyA2zP1Nf1WlLRHqAGutLtOHYWfH732xh";
138 # root = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFQVlSrUKU0xlM9E+sJ8qgdgqCW6ePctEBD2Yf+OnyME root@aomiy";
139 # vincent = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILJmTdMKYdgqpbQWBif58VBuwX+GqMGsMfB1ey1TKrM3 vincent@aomi";
140 };
141 syncthing = {
142 id = "N3AMUVI-FM2BAOD-U3OMZDJ-UHMQE6J-ACMM5B7-S7BTK6P-PSM36NR-DVZHLQF";
143 folders = {
144 sync = {
145 type = "receiveonly";
146 };
147 };
148 };
149 };
150 demeter = {
151 net = {
152 ips = [ "192.168.1.182" ];
153 vpn = {
154 pubkey = "/bBh4gvDty/AA2qIiHc7K0OHoOXWmj2SFFXdDq8nsUU=";
155 ips = [ "10.100.0.82" ];
156 };
157 names = [
158 "demeter.home"
159 "demeter.vpn"
160 "demeter.sbr.pm"
161 ];
162 };
163 ssh = {
164 hostKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGqQfEyHyjIGglayB9FtCqL7bnYfNSQlBXks2IuyCPmd";
165 };
166 syncthing = {
167 id = "TXCV3TS-TUEOTH6-ETB3LBV-KCIHT4L-RCCOIE3-VPBCNJB-VHQEAYI-WOXK5A5";
168 folders = {
169 sync = {
170 type = "receiveonly";
171 };
172 };
173 };
174 };
175 nagoya = {
176 net = {
177 ips = [ "192.168.1.80" ];
178 vpn = {
179 pubkey = "NCj5pwShre/xyRCK800ybjso1zIYUZ08YvFA2qGzhAI=";
180 ips = [ "10.100.0.80" ];
181 };
182 names = [
183 "nagoya.home"
184 "nagoya.vpn"
185 "nagoya.sbr.pm"
186 ];
187 };
188 ssh = {
189 hostKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIfep1SkMsAPHggXFLfEJNzZb7eoihtkqDeQruG+TbhF";
190 };
191 # syncthing = {
192 # id = "HZDLS5A-LKCEIYQ-DDMDYDF-DBTSRYH-HUNQSII-TVCDACT-DIYIO7V-G4K2EQV";
193 # folders = {
194 # sync = {
195 # type = "receiveonly";
196 # };
197 # };
198 # };
199 };
200 aix = {
201 net = {
202 vpn = {
203 pubkey = "D1HoBqrqBchHOOi8mjKpVg5vZtt+iFy8wj4o3kGYwkc=";
204 ips = [ "10.100.0.89" ];
205 };
206 names = [
207 "aix.vpn"
208 "aix.sbr.pm"
209 ];
210 };
211 syncthing = {
212 id = "GHE6XF4-YCKEMZS-JEZYXA6-ETJI3SS-BQFFOCS-ZJAWN4D-Q33IQ46-OYL7BQM";
213 folders = {
214 sync = {
215 type = "receiveonly";
216 };
217 };
218 };
219 ssh = {
220 hostKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEoUicDySCGETPAgmI0P3UrgZEXXw3zNsyCIylUP0bML";
221 };
222 };
223 kyushu = {
224 net = {
225 ips = [
226 "192.168.1.36"
227 "192.168.1.68"
228 ];
229 vpn = {
230 pubkey = "KVRzoPUw8UTQblYtbs/NLYLIVmtQehrc4Hacbpf5Ugs=";
231 ips = [ "10.100.0.19" ];
232 };
233 names = [
234 "kyushu.home"
235 "kyushu.vpn"
236 "kyushu.sbr.pm"
237 ];
238 };
239 ssh = {
240 hostKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINd795m+P54GlGJdMaGci9pQ9N942VUz8ri2F14+LWxg";
241 };
242 syncthing = {
243 id = "SBLRZF4-NOMC7QO-S6UW7OH-VK7KHQS-LZCESY6-USBJ5Z5-RIVIRII-XS7DGQS";
244 folders = {
245 org = { };
246 documents = { };
247 sync = { };
248 screenshots = { };
249 wallpapers = { };
250 claude-sync = { };
251 ai-sync = { };
252 usage-metrics = { };
253 paperless-media = {
254 type = "receiveonly";
255 path = "/home/vincent/desktop/paperless-media";
256 };
257 paperless-inbox = {
258 path = "/home/vincent/desktop/paperless-inbox";
259 };
260 # TODO: implement paused or filter theses
261 # photos = {
262 # type = "receiveonly";
263 # paused = true; # TODO: implement this, start as paused
264 # };
265 # music = {
266 # type = "receiveonly";
267 # paused = true; # TODO: implement this, start as paused
268 # };
269 };
270 };
271 };
272 aomi = {
273 net = {
274 ips = [ "192.168.1.23" ];
275 vpn = {
276 pubkey = "XT4D9YLeVHwMb9R4mhBLSWHYF8iBO/UOT86MQL1jnA4=";
277 ips = [ "10.100.0.17" ];
278 };
279 names = [
280 "aomi.home"
281 "aomi.vpn"
282 "aomi.sbr.pm"
283 ];
284 };
285 ssh = {
286 hostKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFQVlSrUKU0xlM9E+sJ8qgdgqCW6ePctEBD2Yf+OnyME";
287 };
288 syncthing = {
289 id = "CN5P3MV-EJ65J4I-OHB7OBI-LD7JBWT-7SZCZD3-Z6NAASI-UCMKOAU-X2TNNAP";
290 folders = {
291 org = { };
292 documents = { };
293 sync = { };
294 screenshots = { };
295 wallpapers = { };
296 claude-sync = { };
297 ai-sync = { };
298 usage-metrics = { };
299 paperless-media = {
300 type = "receiveonly";
301 path = "/home/vincent/desktop/paperless-media";
302 };
303 paperless-inbox = {
304 path = "/home/vincent/desktop/paperless-inbox";
305 };
306 # photos = {
307 # type = "receiveonly";
308 # paused = true; # TODO: implement this, start as paused
309 # };
310 };
311 };
312 };
313 shikoku = {
314 net = {
315 ips = [ "192.168.1.24" ];
316 vpn = {
317 pubkey = "foUoAvJXGyFV4pfEE6ISwivAgXpmYmHwpGq6X+HN+yA=";
318 ips = [ "10.100.0.2" ];
319 };
320 names = [
321 "shikoku.home"
322 "shikoku.vpn"
323 "shikoku.sbr.pm"
324 ];
325 };
326 ssh = {
327 hostKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIH18c6kcorVbK2TwCgdewL6nQf29Cd5BVTeq8nRYUigm";
328 vincent = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGxstR3xEf87leVVDS3GVPx8Ap9+eP+OfkSvM26V54XP vincent@shikoku";
329 };
330 };
331 kerkouane = {
332 net = {
333 vpn = {
334 pubkey = "+H3fxErP9HoFUrPgU19ra9+GDLQw+VwvLWx3lMct7QI=";
335 ips = [ "10.100.0.1" ];
336 };
337 names = [
338 "kerkouane.vpn"
339 "kerkouane.sbr.pm"
340 ];
341 };
342 ssh = {
343 hostKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJguVoQYObRLyNxELFc3ai2yDJ25+naiM3tKrBGuxwwA";
344 };
345 syncthing = {
346 id = "QGD6ICB-EPSGCEN-IQWKN77-BCRWE67-56HX5IA-E4IDBCI-WE46DK3-EC63DQ7";
347 folders = {
348 sync = { };
349 };
350 };
351 };
352 # Hetzner Cloud VPS — replacement for kerkouane (DigitalOcean)
353 # TODO: Update pubkey, hostKey, and syncthing id after provisioning
354 carthage = {
355 net = {
356 vpn = {
357 pubkey = "PQD1dtxhy9NMbmfy2OQPeLiQg0Alcfa1Mo4HVN5WqgA=";
358 ips = [ "10.100.0.1" ]; # Takes over kerkouane's VPN server role
359 };
360 names = [
361 "carthage.vpn"
362 "carthage.sbr.pm"
363 ];
364 };
365 ssh = {
366 hostKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHDurbEy1PiidOirbiPXz84ySdv3rwosPTAlCqacc73a";
367 };
368 # syncthing = {
369 # id = "PLACEHOLDER_UNTIL_INSTALL";
370 # folders = {
371 # sync = { };
372 # };
373 # };
374 };
375 sakhalin = {
376 net = {
377 ips = [ "192.168.1.70" ];
378 vpn = {
379 pubkey = "OAjw1l0z56F8kj++tqoasNHEMIWBEwis6iaWNAh1jlk=";
380 ips = [ "10.100.0.16" ];
381 };
382 names = [
383 "sakhalin.home"
384 "sakhalin.vpn"
385 "sakhalin.sbr.pm"
386 ];
387 };
388 ssh = {
389 hostKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN/PMBThi4DhgZR8VywbRDzzMVh2Qp3T6NJAcPubfXz6";
390 };
391 syncthing = {
392 id = "3L2KCXM-D75XCVU-5JLMV6V-FKQID2K-LJA6GFB-R2G77LD-5WXFHJT-BB4B7Q5";
393 folders = {
394 org = { };
395 documents = { };
396 sync = { };
397 screenshots = { };
398 wallpapers = { };
399 # photos = {
400 # type = "receiveonly";
401 # paused = true; # TODO: implement this, start as paused
402 # };
403 };
404 };
405 };
406 rhea = {
407 net = {
408 ips = [ "192.168.1.50" ];
409 vpn = {
410 pubkey = "QBGdlPgtaLIh+WDLbuIWPL+Nr08mtfIqs6RwgVDAGjA=";
411 ips = [ "10.100.0.50" ];
412 };
413 names = [
414 "rhea.home"
415 "rhea.vpn"
416 "rhea.sbr.pm"
417 ];
418 };
419 ssh = {
420 hostKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKFH3Lk4bRgNyFRK/Hzg1PvVbL/dpyI1SmLJFkb6VQDw";
421 };
422 syncthing = {
423 id = "73YP3XV-X3YLVBD-4KL77TS-DCFFXJ7-AYJDF3R-CJDRZNP-7YFPQNT-FKHJ7QW";
424 folders = {
425 org = { };
426 documents = { };
427 sync = { };
428 screenshots = {
429 path = "/neo/pictures/vincent/screenshots";
430 };
431 wallpapers = {
432 path = "/neo/pictures/vincent/wallpapers";
433 };
434 paperless-media = {
435 type = "receiveonly";
436 path = "/neo/paperless/media";
437 };
438 paperless-inbox = {
439 path = "/neo/paperless/consume";
440 };
441 };
442 };
443 };
444 aion = {
445 net = {
446 ips = [ "192.168.1.49" ];
447 vpn = {
448 pubkey = "Z145TsRbQTASEeAXsGkQR/PGvdI5rhHAXA5wllCKMGI=";
449 ips = [ "10.100.0.49" ];
450 };
451 names = [
452 "aion.home"
453 "aion.vpn"
454 "aion.sbr.pm"
455 ];
456 };
457 ssh = {
458 hostKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAXDNi2KtoRU83y/V5OWnMbFWmxwBknPmrNWV4RChE7R";
459 };
460 syncthing = {
461 id = "YBQ6U6T-TMCZVUG-JNHGLRH-CZNZMHG-GQICVTK-LUXJR3H-KR2SXS7-CTNQCAU";
462 folders = {
463 org = { };
464 sync = { };
465 paperless-media = {
466 path = "/neo/paperless/media";
467 };
468 paperless-inbox = {
469 path = "/neo/paperless/consume";
470 };
471 };
472 };
473 };
474 synodine = {
475 net = {
476 ips = [ "192.168.1.20" ];
477 names = [
478 "synodine.home"
479 "synodine.sbr.pm"
480 ];
481 };
482 ssh = {
483 hostKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDWdnPJg0Y4kd4lHPAGE4xgMAK2qvMg3oBxh0t+xO+7O";
484 };
485 };
486 wakasu = {
487 net = {
488 vpn = {
489 ips = [ "10.100.0.8" ];
490 };
491 names = [
492 "wakasu.vpn"
493 "wakasu.sbr.pm"
494 ];
495 };
496 # syncthing = {
497 # id = "WM23THJ-ECXRLXA-HE5TIKO-VPLSMRY-Y2EWZI7-Q7JMLPX-5Q5UNEN-QMB7ZQJ";
498 # folders = {
499 # org = { };
500 # documents = { };
501 # sync = { };
502 # screenshots = { };
503 # wallpapers = { };
504 # };
505 # };
506 };
507 # Home Assistant
508 hass = {
509 net = {
510 ips = [ "192.168.1.181" ];
511 vpn = {
512 ips = [ "10.100.0.81" ];
513 };
514 names = [
515 "hass.home"
516 "hass.vpn"
517 "hass.sbr.pm"
518 ];
519 };
520 };
521 okinawa = {
522 net = {
523 ips = [ "192.168.1.42" ];
524 vpn = {
525 pubkey = "SxH2pDYtAlK79s5K3YwplFm4hRn8lxnl4638IPRZnBk="; # From: sudo wg show wg0 public-key
526 ips = [ "10.100.0.14" ];
527 };
528 names = [
529 "okinawa.home"
530 "okinawa.vpn"
531 "okinawa.sbr.pm"
532 ];
533 };
534 ssh = {
535 hostKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIM8vCZ0h6geJZt6i5k6chEDZBggoyq91Z+oNSjvVeSfW root@okinawa"; # From: cat /etc/ssh/ssh_host_ed25519_key.pub
536 };
537 syncthing = {
538 id = "BTDYRYQ-IOUC6IE-2BRMDDG-4CX6OUU-XCEUMSG-QF5O463-YFTNHTS-3NGRUQX"; # From Syncthing UI (http://localhost:8384)
539 folders = {
540 sync = { };
541 org = { };
542 documents = { };
543 screenshots = { };
544 wallpapers = { };
545 claude-sync = { };
546 ai-sync = { };
547 usage-metrics = { };
548 paperless-media = {
549 type = "receiveonly";
550 path = "/home/vincent/desktop/paperless-media";
551 };
552 paperless-inbox = {
553 path = "/home/vincent/desktop/paperless-inbox";
554 };
555 };
556 };
557 };
558 # iPhone
559 hokkaido = {
560 net = {
561 ips = [ "192.168.1.115" ];
562 vpn = {
563 pubkey = "rN5ekYI/k3Ymd76vudCZtcaNNu6HmMLzB61uRXakV0M=";
564 ips = [ "10.100.0.5" ];
565 };
566 names = [
567 "hokkaido.home"
568 "hokkaido.vpn"
569 "hokkaido.sbr.pm"
570 ];
571 };
572 syncthing = {
573 id = "XD4XYNZ-DT3PJEY-UJYBHWX-6OQPPUI-HTW752L-FYTX3TW-GVHDTKW-PT336QV";
574 folders = {
575 documents = { };
576 sync = { };
577 org = { };
578 };
579 };
580 };
581 # Light Phone
582 suzu = {
583 net = {
584 vpn = {
585 ips = [ "10.100.0.65" ];
586 pubkey = "ufKLXzLkmYx1z7/VZJs9Ix6aXL3rYzP5B73QQP2WNx8=";
587 };
588 names = [
589 # "suzu.home"
590 "suzu.vpn"
591 "suzu.sbr.pm"
592 ];
593 };
594 };
595 # Boox tablet
596 osaka = {
597 net = {
598 vpn = {
599 ips = [ "10.100.0.64" ];
600 pubkey = "IJkiyMdHnhwxN9hFpDNVFKzByyqEQKIyIFBpYst65x8=";
601 };
602 names = [
603 # "oksaka.home"
604 "osaka.vpn"
605 "osaka.sbr.pm"
606 ];
607 };
608 };
609 # Houbeb's macbook pro 16
610 houbeb-makcbook-pro = {
611 net = {
612 vpn = {
613 ips = [ "10.100.0.71" ];
614 pubkey = "RANYR3ouf+3Bh+6kJVF1I0s5iglBGs7ucW6iRyv2cGc=";
615 };
616 names = [ ];
617 };
618 };
619 };
620 services = {
621 # Media services on rhea
622 immich = {
623 host = "rhea";
624 aliases = [ "photos" ];
625 };
626 jellyfin.host = "rhea";
627 jellyseerr.host = "rhea";
628 sonarr.host = "rhea";
629 radarr.host = "rhea";
630 lidarr.host = "rhea";
631 bazarr.host = "rhea";
632 prowlarr.host = "rhea";
633 transmission = {
634 host = "rhea";
635 aliases = [ "t" ];
636 };
637 transmission-music = {
638 host = "rhea";
639 aliases = [ "tm" ];
640 };
641 syncthing = {
642 host = "rhea";
643 aliases = [ "s" ];
644 };
645 homepage.host = "rhea";
646 # Linkwarden bookmark manager (runs on sakhalin, proxied via rhea/Traefik)
647 linkwarden = {
648 host = "rhea";
649 aliases = [ "links" ];
650 };
651 # Traefik dashboard
652 traefik.host = "rhea";
653 # Music streaming on aion (routed through rhea/traefik)
654 music.host = "rhea";
655 navidrome.host = "rhea";
656 # Podcast and audiobook management on aion (routed through rhea/traefik)
657 audiobookshelf.host = "rhea";
658 podcasts.host = "rhea";
659 # Ebook library management on rhea
660 calibre.host = "rhea";
661 books.host = "rhea";
662 # WebDAV on rhea
663 dav.host = "rhea";
664 # MQTT on demeter (routed through rhea/traefik)
665 mqtt.host = "rhea";
666 # Home Assistant on hass (routed through rhea/traefik)
667 home.host = "rhea";
668 # Services on sakhalin (routed through rhea/traefik)
669 kiwix.host = "rhea";
670 n8n.host = "rhea";
671 paperless.host = "rhea";
672 grafana.host = "rhea";
673 # OpenCode web interface on okinawa (routed through rhea/traefik)
674 opencode.host = "rhea";
675 # llama-server on okinawa (routed through rhea/traefik)
676 llm.host = "rhea";
677 # Readwise Reader triage report on okinawa (routed through rhea/traefik)
678 reading.host = "rhea";
679 # SearXNG metasearch engine on aomi (routed through rhea/traefik)
680 search = {
681 host = "rhea";
682 aliases = [ "searxng" ];
683 };
684 # XMPP messaging server on aion (VPN-only, direct access)
685 xmpp.host = "aion";
686 };
687}