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>
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
- blunix hängt zur Laufzeit praktisch nicht mehr an pinix. Alle 11
Traefik-Routen auf blunix, die auf
tailnetIPs.pinixzeigen (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 auffastpi(100.64.0.21) sind ebenfalls tot,fastpiist nicht erreichbar und nicht mehr im Tailnet. Diese Routen fallen weg, statt aufgelöst zu werden. - Ü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. hosts/globalServices/secretFiles.nixdeklariert ~16 Secrets auf allen Hosts, auch dort, wo sie nicht gelesen werden. Pro Repo wird daraus einesecrets.nixmit nur den tatsächlich genutzten.oidcHeadscale.agewird von beiden Dex/Headscale-Stacks gleichzeitig benutzt (blunix und pinix). Nach der Trennung: pinix bekommt ein eigenes, neu generiertes Client-Secret.- Der blunix-Headscale hat nur noch abgelaufene bzw. seit Wochen
offline Nodes (eigene Hosts seit 14.09. abgemeldet; geteilte Nutzer
alfo,proloffoffline). Er bleibt laut Plan für geteilte Nutzer. - Mango-Skripte und -Doku sind obsolet (pinix hat die Router-Rolle).
Ausnahme:
traefik.nixauf pinix verweist noch per Kommentar aufconfigure-mango-ipv6-web.sh. - Die Website hängt clientseitig an blunix (gefunden 17.09. in
Schritt 3):
projects.htmllädt Bilder vondata.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/undbooklet.pdf(129 MB, 167 Dateien) sind nachpinix:/var/www/website-datakopiert (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):
-
Tote Routen/Clients auf blunix (pinix-/fastpi-Routen,
cal.nix, Dex-Clientsvikunja/audiobookshelf/quantum/trek, AdGuard- Rewrites, oauth2-proxy, Forgejo-Allowlist): auskommentiert übernehmen, als Vorlage. -
tasks.nix(inkl. Route undgitpull-tasks-Hook): mit den Agents abschalten, blunix (aus). -
lukasrosier.com:website-Repo zieht von Forgejo auf cgit, Auto-Pull-Hook auf pinix — keine Kopplung an blunix.scripts/resize-image.shzieht inswebsite-Repo. -
memory/: eigenes Repomemoryauf cgit, im Backup. -
nixbuild.nixauf blunix: entfernen — kein SSH-Zugriff blunix → pinix mehr. -
Codex-Overlay und
graphify.nix: aktiv auf tnix und pinix, auf blunix mit den Agents übernommen, aber aus. -
ipv6-testauf pinix: entfernen (Archiv). -
vdirsyncerauf tnix: auskommentiert übernehmen. -
Secrets:
resticPWwird kopiert, Rotation pro Host als eigener Schritt nach der Aufteilung. User-Keystnix,root,root2bleiben in allen Repos Empfänger. -
Forgejo-Hostkey: bleibt auf allen Hosts, auch pinix.
-
photo-pipeline.md,docs/diagrams/: Archiv. -
Website-Bilder (Befund 7): ziehen mit nach pinix.
Weiterhin offen: nichts. Neu dazugekommen sind zwei Repos auf cgit
(website, memory) — in Plan.md nachgetragen.