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}