23 software
pijukka edited this page 2026-07-31 14:27:54 +02:00

Software- & Service-Übersicht

Dieses Dokument beschreibt den Software-Stack und die Dienste, die über die Drei-Maschinen-Infrastruktur verteilt laufen. Jeder Eintrag verlinkt die tatsächliche Nix-Konfiguration im Hauptrepo (Branch dev).


Connector-Dienste (blunix)

Der Connector-Host betreibt Netzwerk, Authentifizierung, Routing — und seit 29.07.2026 zusätzlich die beiden statisch gehosteten Sites, damit sie unabhängig von pinix erreichbar bleiben.

VPN & Networking

Headscale

⚠️ Wichtig: Traefik und Headscale müssen getrennt neu gebaut werden. Erst Traefik bauen, um den Domain-Anker zu setzen, dann Headscale.

Tailscale

AdGuard Home

  • Website: adguard.com
  • Zweck: DNS-Resolver für den Tailnet, inkl. Rewrites, die interne Hostnamen (z. B. dash, calendar) auf die Tailnet-IP von blunix statt auf die öffentliche Adresse auflösen
  • Konfiguration: adguard.nix

Reverse Proxy

Traefik

Authentifizierung & Identität

LLDAP

Dex

  • Website: dexidp.io
  • Zweck: OIDC-Provider, authentifiziert gegen LLDAP; die meisten Dienste (Forgejo, GoToSocial, Vikunja, Audiobookshelf, Quantum, Trek …) hängen hier als Static Client dran
  • Konfiguration: dex.nix
  • Hinweis: nutzt seit 31.07.2026 das reine NixOS-Upstream-Modul (kein disabledModules mehr) — das LDAP-Bind-Passwort läuft über Dex' eigene $VAR_NAME-Expansion statt eines eigenen Moduls, siehe dex-ldap-env.service

oauth2-proxy

  • Website: github.com/oauth2-proxy
  • Zweck: OIDC-Gate vor der launcher-Site (0ff.space)
  • Konfiguration: oauth2-proxy.nix
  • Status: Dienst läuft, der Schutz selbst ist seit 29.07.2026 auf Nutzerwunsch deaktiviert (0ff.space ist offen erreichbar)

Sicherheit

fail2ban

  • Zweck: Brute-Force-Schutz für SSH und weitere Dienste
  • Konfiguration: fail2ban.nix

Webdienste

Launcher

  • Zweck: öffentliche Hauptwebsite und Landingpage (0ff.space) — seit 29.07.2026 auf blunix statt pinix, damit sie bei einem pinix-Ausfall erreichbar bleibt
  • Konfiguration: launcher.nix
  • Inhalt: eigenes Repo launcher

Website (lukasrosier.com)

  • Zweck: privates Portfolio, ebenfalls seit 29.07.2026 auf blunix
  • Konfiguration: website.nix
  • Inhalt: eigenes Repo website (Branches dev/production/bak/main)
  • Nicht zu verwechseln mit: der gleichnamigen Dev-Preview auf pinix, siehe dort

WordPress (hdm)

  • Zweck: WordPress-Instanz unter hdm.0ff.space
  • Konfiguration: wordpress.nix

Dateiserver (extern)

  • Zweck: öffentlicher Datei-Mirror (data.0ff.space) — ebenfalls seit 29.07.2026 auf blunix
  • Konfiguration: fileserver-external.nix

Auto-Pull-Webhook

  • Zweck: zieht bei Forgejo-Push automatisch website/launcher neu (Tailnet-only, Port 9000)
  • Konfiguration: webhook.nix

Kommunikation

Prosody-Datei-Uploads (Routing)

  • Zweck: Traefik-Routing für Prosodys HTTP-File-Upload (upload.0ff.space), Prosody selbst läuft auf pinix
  • Konfiguration: upload-prosody.nix

KI-Agent

agent-codex

  • Zweck: XMPP-erreichbarer Codex-Agent in zwei Rollen — Agent (agent@bot.0ff.space, read-only, für alle 0ff.space-Nutzer) und Builder (builder@bot.0ff.space, kann Dateien ändern und committen/pushen, nur im Direktdialog mit lukas oder per freigegebenem Handoff vom Agent)
  • Konfiguration: agent-codex.nix, Skripte und Rollen-Prompts im agent-codex/-Ordner und im Repo-Root unter agents/

Backup & Remote-Builds

Restic (blunix)

  • Zweck: verschlüsselte, deduplizierte Backups des Connector-Hosts
  • Konfiguration: restic.nix

nixbuild.net-Anbindung (blunix)

  • Zweck: registriert eu.nixbuild.net als expliziten Opt-in-Remote-Store für aarch64-Builds (pinix) — niemals automatischer Builder
  • Konfiguration: nixbuild.nix

Worker-Dienste (pinix)

Der Worker-Host übernimmt Kommunikations-, Backup- und Produktivitätsdienste. Schwache Hardware — wird nie lokal gebaut, immer remote über nixbuild.net.

Entwicklung & Versionskontrolle

Git-Server (Forgejo)

  • Software: Forgejo
  • Zweck: selbst gehostetes Git-Repository-Management mit LFS-Unterstützung
  • Konfiguration: forgejo.nix
  • Merkmale: OAuth2-Integration, SSH-Server auf Port 2222 (nur im Tailnet erreichbar), PWA-Unterstützung

Webhooks (pinix)

  • Integration: internes Webhook-System über services.webhook, u. a. Chat-Benachrichtigungen bei Forgejo-Push und der calendar-web-Auto-Pull
  • Konfiguration: webhook.nix
Webhook-Beispiel

Vikunja-Task-Änderung löst Webhook aus → JSON-Payload an services.webhook gesendet → Skript verarbeitet den Payload → Nachricht über go-sendxmpp an XMPP-Gruppenkanal gesendet → Änderung in XMPP-Clients sichtbar

Kommunikation

XMPP-Server (Prosody)

  • Website: prosody.im
  • Zweck: interner Chat und Messaging
  • Konfiguration: setup-prosody.nix
  • Setup: 2 virtuelle Hosts
    • einer für Menschen
    • einer für Bots (bot.0ff.space)

XMPP-Web-Client

  • Software: xmpp-web
  • Zweck: browserbasierter, anonymer Gast-Zugang zur öffentlichen Lobby (chat.0ff.space)
  • Konfiguration: xmpp-web.nix

XMPP-Client (Monal)

  • Zweck: empfohlener nativer XMPP-Client für Endnutzer (iOS-App, nicht Teil dieses Repos)

Fediverse

GoToSocial

  • Zweck: ActivityPub-Social-Media-Server
  • Konfiguration: gotosocial.nix
  • Merkmale: PostgreSQL-Backend, OIDC-Integration mit Dex
  • Port: 8020

Phanpy

  • Zweck: moderner Web-Client fürs Fediverse/Mastodon
  • Konfiguration: phanpy.nix
  • Port: 8004

Backup-Lösungen

Restic (pinix)

  • Zweck: verschlüsselte, deduplizierte Backups
  • Konfiguration: restic.nix

Produktivitätswerkzeuge

Vikunja

  • Zweck: Aufgaben- und Projektorganisation
  • Status: seit 29.07.2026 deaktiviert (in default.nix auskommentiert), abgelöst durch das agent@-XMPP-Postfach; Daten bleiben auf der Platte, jederzeit reaktivierbar
  • Konfiguration (nicht importiert): vikunja.nix

Kalenderdienst

  • Protokoll: CalDAV via Radicale, plus ein read-only Web-Frontend
  • Konfiguration: radicale.nix, web.nix — Details in calendar/README.md
  • Frontend-Inhalt: eigenes Repo calendar-web
  • Merkmale:
    • persönliche Kalender-Namensräume für jeden LLDAP-Nutzer
    • eine geteilte calendar/public-Sammlung, die alle authentifizierten Nutzer bearbeiten können
    • öffentlicher Read-only-Feed auf cal.0ff.space (webcal://-Abo)
  • Authentifizierung: über die normalen LLDAP-Zugangsdaten

Dateidienste

Dateiserver (intern)

WebDAV + SMB

  • Zweck: Dateizugriff für Remote-Geräte — WebDAV (Port 8012) für kompatible Apps, zusätzlich SMB3 (Port 445, nur Tailnet) für die iOS/iPadOS-Dateien-App
  • Konfiguration: webdav.nix

Webdienste (pinix)

Dashboard

  • Zweck: internes Dashboard und Service-Launcher (dash.0ff.space)
  • Konfiguration: dashboard.nix
  • Port: 8002
  • Inhalt: eigenes Repo dashboard

Desk

  • Zweck: interner Arbeitsbereich (desk.0ff.space)
  • Konfiguration: desk.nix
  • Port: 8005

Website-Vorschau (Dev-Preview)

  • Zweck: Ad-hoc-Vorschauserver für den website-Repo-Checkout auf pinix — nicht die Produktions-Website (die läuft auf blunix, siehe Connector-Dienste oben)
  • Konfiguration: website.nix
  • Port: 8003

Builder-Dienste (tnix)

Der Builder-Host dient als Orchestrator und primäre Entwicklungsmaschine — nicht immer online, sicherer Kanarienvogel für riskante Änderungen.

Systemverwaltung

Backup-Orchestrierung

  • Zweck: zentrales Backup-Management für alle Hosts
  • Konfiguration: backup.nix
  • Dienste:
    • backup-srv: Backup des pinix-/srv/-Verzeichnisses
    • backup-pi: Backup des pinix-/backup/-Verzeichnisses
    • backup-vps: Backup des blunix-/backup/-Verzeichnisses
    • passende Restore-Dienste für jedes Backup-Ziel
  • Methode: rsync über SSH mit Key-basierter Authentifizierung

Display-Manager

  • Software: Ly
  • Zweck: leichtgewichtiger TUI-Display-Manager
  • Konfiguration: ly.nix

Storage-Management

  • Dienst: udisks2
  • Zweck: automatisches Einbinden und Verwalten von Wechseldatenträgern
  • Konfiguration: udisks2.nix

Batterie-Überwachung

Schriftarten

  • Zweck: systemweite Font-Pakete (aktuell Fira Code)
  • Konfiguration: fonts.nix

nixbuild.net-Anbindung (tnix)

  • Zweck: registriert eu.nixbuild.net als expliziten Opt-in-Remote-Store, gleiches Muster wie auf blunix
  • Konfiguration: nixbuild.nix

Eingabe & Interface

Tastatur-Remapping

  • Software: keyd
  • Zweck: systemweites Key-Remapping und Shortcuts
  • Konfiguration: keyd.nix
  • Merkmale:
    • Caps Lock als Control/Escape-Overlay
    • Control+H für Backspace
    • Control+O für Enter

Synchronisationsdienste

Kalender-/Kontakt-Sync

  • Software: vdirsyncer
  • Zweck: Kalender und Kontakte mit einem Remote-CalDAV synchronisieren
  • Konfiguration: vdirsyncer.nix
  • Merkmale: bidirektionale Sync zwischen lokalem Dateisystem und Remote-CalDAV-Server
  • Status: aktuell in default.nix deaktiviert

Spezialisierte Software

Dokumentenverarbeitung

  • TeX Live Full: vollständige LaTeX-Distribution für Textsatz
  • Pandoc: universeller Dokumentkonverter
  • Zweck: professionelle Dokumenterstellung und -konvertierung

Hardware-Tools

  • Raspberry Pi Imager: SD-Karten-Imaging-Tool fürs Pi-Deployment
  • AusweisApp: deutsche eID-Anwendung

Networking

  • Tailscale: VPN-Mesh-Client für sichere Konnektivität
  • Konfiguration: tailscale.nix

Entwicklungswerkzeuge

Kernsystem

  • OS: NixOS (deklaratives Konfigurationsmanagement)
  • Versionskontrolle: Git

Editor & IDE

  • Editor: Neovim
  • Konfiguration: nixvim
  • Setup: Neovim mit Plugins als primäre IDE

Kommandozeilen-Werkzeuge

  • grep — Textsuche
  • awk — Textverarbeitung
  • weitere Standard-Linux-Utilities