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