No description
  • Nix 55.7%
  • Python 40.8%
  • CSS 2.4%
  • Shell 1.1%
Find a file
pijukka 1c08e144b3 resize-image.sh: add a 4th (xl/desktop) tier, document the pipeline
Was 3 tiers (phone/tablet/desktop at 640/1280/1920px). Renamed the
1920px tier to laptop and added a new desktop tier at 2560px for
5K-iMac-class screens, matching the launcher's own top breakpoint.
docs/photo-pipeline.md writes down the whole path from upload
(Tailscale or SMB) through resizing to the pictures/<motiv>/<device>/
naming convention, since it wasn't documented anywhere before.
2026-08-04 10:03:28 +02:00
.claude chore: remove accidentally committed .claude settings temp file 2026-07-31 11:47:57 +02:00
agents agent-codex: mehrere Kalendertermine pro Antwort, Antwort-Kürzung gefixt 2026-08-01 19:00:31 +02:00
docs resize-image.sh: add a 4th (xl/desktop) tier, document the pipeline 2026-08-04 10:03:28 +02:00
home/tnix zsh: move yazi's cd-on-quit wrapper to global config, drop tnix duplicate 2026-07-31 17:36:54 +02:00
hosts Add sound.0ff.space: Icecast + Liquidsoap internet radio on pinix 2026-08-04 08:42:36 +02:00
scripts resize-image.sh: add a 4th (xl/desktop) tier, document the pipeline 2026-08-04 10:03:28 +02:00
secrets Add sound.0ff.space: Icecast + Liquidsoap internet radio on pinix 2026-08-04 08:42:36 +02:00
.gitignore chore: remove accidentally committed .claude settings temp file 2026-07-31 11:47:57 +02:00
AGENTS.md docs: translate README, CLAUDE.md, AGENTS.md to German 2026-07-28 22:14:38 +02:00
CLAUDE.md agents,docs: implement remaining review items, clear markers, fix rename refs 2026-07-31 12:17:36 +02:00
flake.lock added nixbuild.net 2026-07-27 20:07:18 +02:00
flake.nix added nixbuild.net 2026-07-27 20:07:18 +02:00
README.md docs: split roadmap.md into log.md (tactical) + a lean roadmap.md (strategic) 2026-07-31 12:13:24 +02:00
variables.nix variables.nix aktualisiert 2026-07-29 13:49:20 +02:00

NixOS-Plattform-Konfiguration

Ein deklaratives NixOS-Konfigurationsrepository zur Verwaltung einer Multi-Host-Plattforminfrastruktur mit Nix-Flakes und home-manager.

Übersicht

Dieses Repository stellt eine vollständige NixOS-Konfiguration für drei unterschiedliche Host-Typen in einer einheitlichen Plattform bereit:

  • tnix: Desktop-/Laptop-System (x86_64-linux) mit Hyprland-Desktop
  • pinix: Raspberry-Pi-System (aarch64-linux) für verteilte Dienste
  • blunix: Server-System (x86_64-linux) für Webdienste und Kerninfrastruktur

Diese drei Hosts, zusammen mit dem Wireguard-Mesh und dem LDAP/Dex-Login, die sie verbinden, sind das Infrastruktur-Fundament. Auf diesem Fundament erfüllt die Plattform drei Zwecke:

  1. Interne Kommunikation — XMPP/Prosody: Chat, Gruppen-MUCs, Benachrichtigungen.
  2. Externe Kommunikation — das Fediverse: GoToSocial + Phanpy (ActivityPub, öffentlich föderiert).
  3. Datenaustausch und Lagerung — Websites, Datei-Server (WebDAV/SMB), Git-Hosting (Forgejo), Kalender/Aufgaben (Radicale, Vikunja): alles, was Daten hält oder austauscht statt Nachrichten überträgt.

Alles, was über diese drei Pfeiler und ihr Fundament hinausgeht, ist bewusst optional und einzeln abschaltbar (siehe localServices/default.nix je Host).

Weitere, eigenständig betriebene Hardware kann dem Tailnet beitreten und eigene Dienste über die bestehende Traefik-/Dex-Schicht einbringen, ohne Teil dieses Flakes zu werden — die drei Pfeiler oben bleiben davon unberührt. Beispiel: fastpi, ein separat betriebenes DietPi-Gerät mit eigenen Diensten (u. a. Audiobookshelf, Mealie, Trek), das per Tailnet-IP in Traefik-Routen und Dex-Clients auftaucht, aber kein nixosConfigurations-Ziel dieses Repos ist.

Features

  • Deklarative Konfiguration: alles als Code über Nix-Flakes definiert
  • Multi-Architektur-Unterstützung: Cross-Compilation für ARM- und x86_64-Systeme
  • Secret-Management: verschlüsselte Secrets über agenix
  • Modulare Dienste: wiederverwendbare Service-Module über alle Hosts hinweg
  • User-Environment-Management: deklarative Nutzerkonfigurationen mit home-manager
  • Globale Konfiguration: zentrale Domain- und Variablenverwaltung

Architektur

Verzeichnisstruktur

├── hosts/                    # Host-spezifische Konfigurationen
│   ├── globalServices/       # Gemeinsame Dienste (SSH, Security, Pakete)
│   └── {hostname}/          # Individuelle Host-Konfigurationen
├── home/                    # Home-manager-Nutzerkonfigurationen
│   ├── globalModules/       # Gemeinsame User-Environment-Module
│   └── {username}/          # Nutzerspezifische Konfigurationen
├── secrets/                 # Verschlüsselte Secrets (agenix)
├── variables.nix           # Globale Domain-Konfiguration
└── variables-local.nix     # Persönliche Domain-Overrides (git-ignoriert)

Kerntechnologien

  • NixOS: deklarative Linux-Distribution
  • Nix-Flakes: reproduzierbares Paketmanagement
  • Home-manager: User-Environment-Management
  • agenix: Secret-Verschlüsselung und -Verwaltung
  • Hyprland: Wayland-Compositor für den Desktop

Quick Start

Konfigurationen bauen

# Neue Konfiguration bauen und aktivieren
sudo nixos-rebuild switch --flake .#hostname

# Konfiguration testen (verwirft sich beim Reboot)
sudo nixos-rebuild test --flake .#hostname

# Auf entfernten Host deployen
nixos-rebuild switch --flake .#hostname --target-host hostname

Arbeits-Repository und Deployments

Der dauerhafte Administrations-Arbeitsplatz ist die codex-tmux-Sitzung auf blunix, unter /home/drone/nixos-config auf Branch dev. Damit bleibt die Sitzung verfügbar, während tnix ausgeschaltet ist.

nrsp steht weiterhin auf tnix für gewöhnliche lokale Builds zur Verfügung. Es baut die pinix-Konfiguration, kopiert den Nix-Closure auf den Raspberry Pi und aktiviert ihn:

nrsp

Die passenden Aliase sind nrst für tnix und nrsb für blunix.

Von blunix aus die AArch64-Konfiguration explizit im nixbuild.net-Remote-Store evaluieren und bauen:

nix build \
  --json \
  --eval-store auto \
  --store ssh-ng://eu.nixbuild.net \
  path:.#nixosConfigurations.pinix.config.system.build.toplevel

Den im JSON-Ergebnis gemeldeten Output-Pfad in den lokalen Nix-Store kopieren:

nix copy \
  --from ssh-ng://eu.nixbuild.net \
  /nix/store/<output-path>

Dann diesen Closure zu pinix kopieren und den exakten Store-Pfad aktivieren:

nix copy \
  --no-check-sigs \
  --to 'ssh-ng://pinix?remote-program=sudo%20nix-daemon' \
  /nix/store/<output-path>

nixos-rebuild switch \
  --no-reexec \
  --store-path /nix/store/<output-path> \
  --target-host pinix \
  --sudo

--no-check-sigs ist erforderlich: pinix' trusted-public-keys enthält den nixbuild.net-Signierschlüssel nicht, daher schlägt ein einfaches nix copy zu pinix mit „lacks a signature by a trusted key" fehl. --no-reexec ist bei nixos-rebuild erforderlich: ohne das versucht das Tool, sich selbst über <nixpkgs/nixos> via NIX_PATH neu zu bauen, bevor es --store-path beachtet — dieser Pfad ist auf diesem reinen Flake-System nicht eingerichtet.

Der Remote-Builder erhält den öffentlichen Flake-Quelltext und Build-Inputs. Niemals Klartext-Credentials im Repository oder in Derivation-Inputs ablegen; Secrets bleiben in agenix-Dateien, die nur auf dem Zielhost entschlüsselt werden.

Pinix hält außerdem einen aktuellen Checkout unter /home/drone/nixos-config für Recovery und optionale lokale Builds. Vor Nutzung mit einem Fast-Forward-Pull aktualisieren; der maßgebliche gemeinsame Branch ist Forgejos dev.

Lokale Infrastrukturwerte

Die eingecheckten Standardwerte liegen in variables.nix. Um die Konfiguration mit anderen Domains, Adressen oder LDAP-Benennung wiederzuverwenden, die git-ignorierte variables-local.nix anlegen:

{ ... }:
{
  domain = "example.org";
  domain2 = "example.net";
  adminEmail = "admin@example.org";
  ldapBaseDN = "dc=example,dc=org";
  publicIPv4 = "203.0.113.10";

  tailnetIPs = {
    blunix = "100.64.0.1";
    pinix = "100.64.0.2";
    dietpi = "100.64.0.3";
  };
}

Diese Werte sind Deployment-Metadaten, keine Credentials. Passwörter, API-Tokens, private Keys und OIDC-Client-Secrets bleiben in verschlüsselten agenix-Dateien.

Secrets verwalten

Das vollständige Inventar, Klartextformate, Empfänger und der Rotationsablauf sind in secrets/README.md dokumentiert.

# Verschlüsseltes Secret bearbeiten
agenix -e secrets/filename.age

# Secrets nach Key-Änderungen neu verschlüsseln
agenix -r

Flake-Operationen

# Alle Inputs aktualisieren
nix flake update

# Flake-Struktur anzeigen
nix flake show

Befehle

# WLAN manuell verbinden
sudo iwlist [INTERFACE] scan

oder in configuraion.conf

tnix

Keymaps in Neovim space fk

Roadmap

Zwei Dateien, unterschiedlicher Zweck: docs/roadmap.md für große, konzeptionelle Richtungsfragen (VPS/IPv6, Abhängigkeitsreduktion als Ziel), docs/log.md für laufende Arbeit, gefundene Bugs und den priorisierten Tagesstand.

Status

Aktive Entwicklung — die Konfigurationen entwickeln sich fortlaufend mit den Anforderungen der Plattform weiter.