This repository has been archived on 2026-09-17. You can view files and clone it, but you cannot make any changes to its state, such as pushing and creating new issues, pull requests or comments.
nixos-config/docs/repo-split-inventar.md
pijukka 64ab1ec34a docs: record tnix as the first split-out repository
tnix now deploys from ~/tnix (mirrored to cgit); hosts/tnix here is
frozen. Notes the layout and secrets pattern the pinix and blunix repos
follow, and that root2 in secrets.nix is tnix's SSH host key.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-17 12:51:22 +02:00

18 KiB

Inventar für die Repo-Aufteilung

Schritt 2 aus Plan.md. Stand 17.09.2026, Commit 771ae10. Grundlage: tatsächlich importierte Module pro Host (auskommentierte Imports zählen als inaktiv), grep auf Secret-Nutzung (age.secrets.<name>.path, /run/agenix/<name>) und Live-Prüfung auf pinix/blunix (systemctl, ss, TCP-Probe über das Tailnet).

Ziel-Spalte:

  • tnix / pinix / blunix — wandert in dieses Repo
  • kopieren → X, Y — Kopie in mehrere Repos, darf danach auseinanderlaufen
  • blunix (aus) — wird übernommen, aber nicht importiert
  • Archiv — bleibt nur im archivierten nixos-config
  • auskommentiert — wird übernommen, aber als toter Eintrag auskommentiert (Vorlage)

Wichtigste Befunde

  1. blunix hängt zur Laufzeit praktisch nicht mehr an pinix. Alle 11 Traefik-Routen auf blunix, die auf tailnetIPs.pinix zeigen (social, phanpy, board, sound, calendar, cal, desk, webhook, files, dash, oauth2-proxy-Upstream :8001), sind tot — der Port ist auf pinix zu bzw. die Dienste sind dort auskommentiert. Die 10 Routen auf fastpi (100.64.0.21) sind ebenfalls tot, fastpi ist nicht erreichbar und nicht mehr im Tailnet. Diese Routen fallen weg, statt aufgelöst zu werden.
  2. Übrig bleibende echte Kopplungen (alle bewusst, siehe unten): Tailnet-Mitgliedschaft aller Hosts im pinix-Headscale, Forgejo-Hostkey auf allen Hosts (pinix kann das blunix-Repo im Notfall klonen), tnix-Backup-Skripte (rsync von pinix und blunix). Der SSH-Zugriff blunix → pinix (nixbuild.nix) entfällt.
  3. hosts/globalServices/secretFiles.nix deklariert ~16 Secrets auf allen Hosts, auch dort, wo sie nicht gelesen werden. Pro Repo wird daraus eine secrets.nix mit nur den tatsächlich genutzten.
  4. oidcHeadscale.age wird von beiden Dex/Headscale-Stacks gleichzeitig benutzt (blunix und pinix). Nach der Trennung: pinix bekommt ein eigenes, neu generiertes Client-Secret.
  5. Der blunix-Headscale hat nur noch abgelaufene bzw. seit Wochen offline Nodes (eigene Hosts seit 14.09. abgemeldet; geteilte Nutzer alfo, proloff offline). Er bleibt laut Plan für geteilte Nutzer.
  6. Mango-Skripte und -Doku sind obsolet (pinix hat die Router-Rolle). Ausnahme: traefik.nix auf pinix verweist noch per Kommentar auf configure-mango-ipv6-web.sh.
  7. Die Website hängt clientseitig an blunix (gefunden 17.09. in Schritt 3): projects.html lädt Bilder von data.0ff.space/pictures (blunix, fileserver-external). Nach dem Umzug auf pinix bleibt das eine Kopplung — Bilder fehlen, wenn blunix weg ist. Entschieden 17.09.: Bilder ziehen mit nach pinix. pictures/ und booklet.pdf (129 MB, 167 Dateien) sind nach pinix:/var/www/website-data kopiert (liegt im Restic-Pfad /var/www). Ausliefern und URLs in der Website umstellen passiert in Schritt 5 mit dem Website-Umzug.

Flake

Teil Nutzer Ziel
nixpkgs (unstable) alle kopieren → alle
nixpkgs-stable (24.11) tnix (specialArgs stable), blunix (packages-stable.nix) kopieren → tnix, blunix
nixpkgs-codex + codexOverlay alle (Codex-Paket) kopieren → tnix, pinix; blunix (aus)
nixos-hardware (raspberry-pi-4) pinix pinix
home-manager tnix tnix
disko blunix (pinix: auskommentiert) blunix
agenix + agenixCliOverlay alle kopieren → alle
ereaderViewer pinix pinix — seit 17.09. git+file:///var/lib/git/ereader-viewer.git (cgit-Repo, gleicher narHash)
mkVariableModules / variables-local.nix alle kopieren → alle
checks.x86_64-linux.tnix-boot + tests/tnix-boot.nix tnix tnix
devShells.default (pytest, playwright, chromium) Board-Agent-Tests blunix (aus)

variables.nix

Option Genutzt von Ziel
domain (0ff.space) blunix (fast alles), pinix ipv6-test.nix, tnix home/tnix/builder.nix (SSH-Match git.0ff.space) kopieren → alle
domain2 (lukasrosier.com) pinix (fast alles), blunix website.nix + tailscale.nix + traefik/cal.nix, tnix tailscale.nix + configuration.nix kopieren → alle
adminEmail blunix (ACME, Dienste) kopieren → blunix, pinix
ldapBaseDN blunix (Dex, LLDAP, Prosody) blunix
ldapBaseDN2 pinix (Dex, LLDAP) pinix
publicIPv4, publicIPv6 blunix (Traefik, Prosody, Netz) blunix
lanIPv6 (pinix, tnix, mango) pinix bind.nix pinix (Eintrag mango entfernen)
tailnetIPs (blunix, pinix, tnix, fastpi) alle kopieren → alle, fastpi streichen

Gemeinsame Module (hosts/globalServices/, hosts/user/, hosts/nix-gc.nix)

Datei Aktiv auf Ziel Anmerkung
default.nix alle kopieren → alle Importliste pro Repo anpassen
sshd.nix alle kopieren → alle
security.nix alle kopieren → alle
zsh.nix alle kopieren → alle
journald.nix alle kopieren → alle
packages.nix alle kopieren → alle
forgejo-known-host.nix alle kopieren → alle pinix behält Zugriff, um das blunix-Repo im Notfall klonen zu können
secretFiles.nix alle aufteilen → je secrets.nix siehe Secrets
graphify.nix alle kopieren → tnix, pinix; blunix (aus) Paket für Agent-Workflows
herdr-self-close.nix nur blunix (mkIf hostName) blunix mkIf entfällt
docker.nix nirgends Archiv
branding/0ff-space-background.css, fileserver-links.css blunix (fileserver-external); auf pinix nur von inaktiven Modulen blunix
hosts/nix-gc.nix blunix, pinix kopieren → blunix, pinix perHost-Map auf eigenen Eintrag reduzieren
hosts/user/drone.nix blunix, pinix kopieren → blunix, pinix authorized_keys enthalten Keys der anderen Hosts — bewusst beibehalten
hosts/user/builder.nix tnix tnix mkIf hostName == "tnix" entfällt
hosts/user/README.md — kopieren → alle

tnix

Datei Status Ziel Kopplung
hosts/tnix/configuration.nix aktiv tnix /etc/hosts für git./ereader.domain2 → pinix-dns-Node
hosts/tnix/hardware-configuration.nix aktiv tnix
localServices/default.nix aktiv tnix
localServices/backup.nix aktiv tnix rsync von/nach drone@pinix und drone@blunix
localServices/battery-monitor.nix, fonts.nix, keyd.nix, ly.nix, udisks2.nix, packages.nix aktiv tnix
localServices/nixbuild.nix aktiv tnix eu.nixbuild.net
localServices/secrets.nix aktiv tnix
localServices/tailscale.nix aktiv tnix Login gegen head.domain2 (pinix)
localServices/vdirsyncer.nix aktiv, Ziel tot tnix (auskommentiert) https://cal.0ff.space/calendar/public/ — Kalender ist aus; Vorlage für später
home/tnix/** (19 Module) aktiv tnix builder.nix: SSH-Matches für pinix, blunix, git.0ff.space
tests/tnix-boot.nix Flake-Check tnix

pinix

Datei Status Ziel Kopplung
configuration.nix, hardware-configuration.nix aktiv pinix
hardware-configuration_bak.nix ungenutzt Archiv
disko.nix auskommentiert Archiv
router-uplink.nix, router-lan.nix aktiv pinix pinix-wifi (hostapd)
README.md, localServices/README.md — pinix neu schreiben (Stand ist Voll-Dienstbestand)
localServices/tailscale.nix aktiv pinix
localServices/secrets.nix, packages.nix aktiv pinix
localServices/traefik.nix, traefik/identity.nix aktiv pinix
localServices/ipv6-test.nix, ipv6-test.html aktiv Archiv Rolle übernimmt lukasrosier.com auf pinix
localServices/wan-dns-update.nix + scripts/update-wan-dns.sh aktiv pinix Cloudflare
localServices/bind.nix, dns/ aktiv pinix
localServices/unbound.nix aktiv pinix
localServices/acme.nix aktiv pinix
localServices/lldap.nix, dex.nix + scripts/dex-ldap-env.sh, scripts/test-dex-ldap-env.sh aktiv pinix
localServices/headscale.nix aktiv pinix Admin-Tailnet für alle Hosts
localServices/tailnet-dns.nix + scripts/enrol-pinix-dns.sh aktiv pinix
localServices/gitserver/ aktiv pinix Origin für pinix-, ereader-viewer-Repo; Mirror tnix
localServices/ereader-viewer.nix aktiv pinix
localServices/live-intent.nix + services/live-intent/ + docs/live-intent.md aktiv pinix
localServices/restic.nix aktiv pinix
localServices/website.nix aus pinix (reaktivieren) ersetzt blunix-website.nix, IPv6-only; website-Repo auf cgit mit Auto-Pull-Hook auf pinix. ⚠ Bilder kommen weiterhin von data.0ff.space (blunix)
localServices/branding/ spiral-v2-512.png von blunix fileserver-external.nix genutzt, Rest nur von inaktiven Modulen blunix (spiral-v2-512.png), Rest Archiv gotosocial-accent.css ggf. mit GoToSocial nach blunix
localServices/forgejo.nix, prosody/, xmpp-web.nix aus (läuft auf blunix) Archiv Duplikate der blunix-Module
localServices/gotosocial.nix, phanpy.nix, phanpy/ aus Archiv beim späteren GoToSocial-Schritt auf blunix als Vorlage zurückholen
localServices/vikunja.nix, calendar/, webhook.nix, radio.nix, webdav.nix, fileserver-internal.nix, dashboard.nix, desk.nix, mazanoke.nix aus Archiv
localServices/finance-agent.nix, finance-agent/ aus Archiv
scripts/deploy-pinix.sh manuell pinix wird auch von agent-codex/builder.py aufgerufen
scripts/configure-pinix-identity-dns.sh, scripts/pinix-reachability-probe.sh manuell pinix

blunix

Datei Status Ziel Kopplung
configuration.nix, disko.nix aktiv blunix
hardware-configuration.nix auskommentiert Archiv
localServices/default.nix, README.md aktiv blunix
localServices/sshd.nix, fail2ban.nix aktiv blunix ⚠ Aussperr-Risiko beim ersten Switch aus neuem Repo
localServices/tailscale.nix aktiv blunix Login gegen head.domain2 (pinix)
localServices/headscale.nix aktiv blunix für geteilte Nutzer
localServices/lldap.nix, dex.nix aktiv blunix Dex-Clients vikunja, audiobookshelf, quantum, trek (tote Dienste) auskommentiert
localServices/oauth2-proxy.nix aktiv, Upstream tot blunix (auskommentiert) schützte früher Website auf pinix :8001; Launcher-Auth aus
localServices/adguard.nix aktiv blunix Rewrites für tote interne Hostnamen auskommentiert
localServices/traefik/default.nix, dex.nix, forgejo.nix, prosody.nix aktiv blunix
localServices/traefik/routes-external.nix aktiv blunix Einträge mit tailnetIPs.pinix/fastpi auskommentiert; aktiv bleiben: data, hdm, lokale
localServices/traefik/routes-internal.nix aktiv blunix dito; tasks mit den Agents aus; aktiv bleiben: schema (drawio), lokale
localServices/traefik/cal.nix aktiv, Backend tot blunix (auskommentiert) cal.domain2 → pinix :5001
localServices/forgejo.nix aktiv blunix pinix-IP in ALLOWED_HOST_LIST (alte Webhooks) auskommentiert
localServices/prosody/, xmpp-web.nix aktiv blunix
localServices/launcher.nix aktiv blunix Repo launcher auf Forgejo
localServices/website.nix aktiv → pinix Umzug, danach hier entfernen
localServices/webhook.nix aktiv blunix Hook gitpull-website entfällt (Auto-Pull jetzt auf pinix); gitpull-launcher, wiki-update bleiben; gitpull-tasks mit tasks aus
localServices/fileserver-external.nix aktiv (data.) blunix liest ../../pinix/localServices/branding/spiral-v2-512.png; hostet die Website-Bilder (data.0ff.space/pictures)
localServices/wordpress.nix, wordpress-hdm-assets/ aktiv (hdm.) blunix Klon hausdermaterialisierung.org
localServices/drawio.nix aktiv (schema.) blunix
localServices/tasks.nix aktiv blunix (aus) Aufgabenliste des agent@, zusammen mit den Agents
localServices/branding/ aktiv blunix
localServices/restic.nix aktiv blunix
localServices/nixbuild.nix aktiv Archiv SSH-Zugriff blunix → pinix entfällt; Admin läuft von tnix
localServices/packages.nix, packages-stable.nix, secrets.nix aktiv blunix
localServices/emptyCerts.nix auskommentiert Archiv
localServices/agent-codex.nix, agent-codex/ aktiv blunix (aus) ruft scripts/deploy-pinix.sh
localServices/board-agent.nix, board-agent/ aktiv blunix (aus) liest agents/claude-settings/
localServices/orga-agent.nix, orga-agent/ aktiv blunix (aus)
localServices/graphify-refresh.nix aktiv blunix (aus)

Secrets

Genutzt = tatsächlich gelesen in einem aktiven Modul.

Secret Genutzt von Ziel
dns-challenge (als traefik) blunix, pinix kopieren → blunix, pinix
resticPW blunix, pinix kopieren → blunix, pinix
oidcHeadscale blunix, pinix (Dex + Headscale) kopieren → blunix; pinix neu generieren
pinixHeadscalePreAuthKey alle kopieren → alle
wirelessSecretsFile tnix, pinix kopieren → tnix, pinix
pinix-wifi tnix, pinix kopieren → tnix, pinix
mailPW tnix (msmtp), blunix (orga-agent) tnix; blunix (aus)
pinixLldapAdmin, bindAcmeTsig, liveIntentOpenaiApiKey pinix pinix
lldapAdmin, oidcForgejo, oidcOauth2, oauth2Cookie, traefikBasicAuth, go-sendxmpp, motd blunix blunix
oidcGTS, oidcGTSEnv blunix Dex-Client (GTS läuft nicht) blunix (für GoToSocial später)
oidcVikunja, oidcAudiobookshelf, oidcQuantum, oidcTrek nur Dex-Clients toter Dienste blunix (Datei mit, Deklaration auskommentiert)
agentXmpp, builderXmpp, agentCalendarPw, openrouterApiKey blunix Agents blunix (aus)
forgejoToken deklariert, nicht gelesen Archiv
headscalePreAuthKey (alter blunix-Key) tnix, pinix deklariert, nicht gelesen Archiv
financeXmpp finance-agent (aus) Archiv
icecastPw radio (aus) Archiv
webdav, bindPW, domain, ipv4, ipv6, traefikDashboardPassword nirgends gelesen Archiv
secrets.yaml (sops, Altlast) nirgends Archiv
secrets.nix, README.md — pro Repo neu, nur eigene Empfänger

Empfänger pro Repo:

  • alle Repos: User-Keys tnix (builder@tnix), root (root@tnix), root2 — ist der SSH-Hostkey von tnix (geklärt 17.09.), damit entschlüsselt agenix auf tnix beim Aktivieren
  • pinix: User-Keys + pinix-Hostkey
  • blunix: User-Keys + blunix-Hostkey

Übrige Verzeichnisse

Pfad Ziel Anmerkung
README.md, AGENTS.md, CLAUDE.md pro Repo neu schreiben Architektur-Teile nach Rolle trennen
.claude/settings.json, hooks/block-secrets-edit.sh, skills/predeploy-check/, agents/nix-module-reviewer.md kopieren → alle
.gitignore kopieren → alle graphify-out/ ist ignoriert, aber getrackt
graphify-out/ Archiv generiert
agents/ (Rollen-Prompts, claude-settings/, tests/) blunix (aus) Smoke-Test-Dateien darin → Archiv
memory/ (world-view, project-context, zettel/) Repo memory auf cgit (angelegt 17.09., per subtree split mit Historie) im Backup; bleibt bis zur Archivierung auch hier, weil Agent-Doku darauf verweist
scripts/configure-mango-*.sh Archiv Mango offline
scripts/resize-image.sh website-Repo (dev, 17.09.) Bildgrößen für data.0ff.space/pictures
docs/access-control.md blunix
docs/operator-prompt.md kopieren → alle kürzen pro Rolle
docs/roadmap.md aufteilen VPS-Punkt schließen
docs/repos.md neu durch Plan-Tabelle ersetzen
docs/networking.md aufteilen Mango-Teile streichen
docs/pinix-*.md, docs/tnix-wlan-pinix.md pinix bzw. tnix
docs/ipv6-test-tnix.md, ipv6-uplink-tnix-mango.md, tnix-ssh-mango.md, telekom-ipv6-support-anfrage.md, session-2026-09-12-*.md, repo-abgleich-2026-09-12.md Archiv historisch
docs/intent/gitserver-pinix.md, pinix-ipv6-traefik-webserver.md pinix vom Code referenziert
docs/intent/lldap-fail2ban-protection.md, xmpp-umzug-pinix-blunix.md, mariadb-bind-local.md blunix
docs/intent/nix-gc-*.md kopieren → blunix, pinix
übrige docs/intent/, docs/review/, docs/research*/ (Board-Pipeline) Archiv bei Agent-Reaktivierung zurückholen
docs/kanban-*.md, docs/intent/.escalation-smoke-test-files/ Archiv Test-Artefakte
docs/herdr-*.md, pipelines.md, graphify-dashboard-plan.md, playwright-mcp.md blunix (aus) Agent-Tooling
docs/hdm-klon-plan.md blunix
docs/photo-pipeline.md Archiv
docs/diagrams/ Archiv
docs/live-intent.md pinix
Plan.md, dieses Inventar Archiv nach Abschluss

Entscheidungen

Getroffen am 17.09.2026 (interaktive Rückfragen):

  1. Tote Routen/Clients auf blunix (pinix-/fastpi-Routen, cal.nix, Dex-Clients vikunja/audiobookshelf/quantum/trek, AdGuard- Rewrites, oauth2-proxy, Forgejo-Allowlist): auskommentiert übernehmen, als Vorlage.

  2. tasks.nix (inkl. Route und gitpull-tasks-Hook): mit den Agents abschalten, blunix (aus).

  3. lukasrosier.com: website-Repo zieht von Forgejo auf cgit, Auto-Pull-Hook auf pinix — keine Kopplung an blunix. scripts/resize-image.sh zieht ins website-Repo.

  4. memory/: eigenes Repo memory auf cgit, im Backup.

  5. nixbuild.nix auf blunix: entfernen — kein SSH-Zugriff blunix → pinix mehr.

  6. Codex-Overlay und graphify.nix: aktiv auf tnix und pinix, auf blunix mit den Agents übernommen, aber aus.

  7. ipv6-test auf pinix: entfernen (Archiv).

  8. vdirsyncer auf tnix: auskommentiert übernehmen.

  9. Secrets: resticPW wird kopiert, Rotation pro Host als eigener Schritt nach der Aufteilung. User-Keys tnix, root, root2 bleiben in allen Repos Empfänger.

  10. Forgejo-Hostkey: bleibt auf allen Hosts, auch pinix.

  11. photo-pipeline.md, docs/diagrams/: Archiv.

  12. Website-Bilder (Befund 7): ziehen mit nach pinix.

Weiterhin offen: nichts. Neu dazugekommen sind zwei Repos auf cgit (website, memory) — in Plan.md nachgetragen.