# Inventar für die Repo-Aufteilung Schritt 2 aus [`Plan.md`](../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..path`, `/run/agenix/`) 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 | Rotation pro Host als eigener Schritt nach der Aufteilung | | `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.