No description
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.
  • HTML 41.9%
  • Python 37.7%
  • Nix 14.2%
  • Shell 3.5%
  • JavaScript 1.2%
  • Other 1.5%
Find a file
pijukka ef9d2a1a2b Archive nixos-config after the per-host repo split
tnix, pinix and blunix now build and deploy from their own repositories.
This is the last commit here; the repository is archived on Forgejo and
mirrored to pinix's cgit. See Plan.md and docs/repo-split-inventar.md.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-17 13:30:29 +02:00
.claude docs: switch directly, and build locally on pinix where it helps 2026-09-12 13:24:41 +02:00
agents hosts: fix two rejected audit-remediation children, add LLDAP fail2ban 2026-09-11 18:08:54 +02:00
docs docs: record tnix as the first split-out repository 2026-09-17 12:51:22 +02:00
graphify-out/platform-infrastructure Agent-Manager-Rolle und Session-Lebenszyklus-Doku an verifizierten Ist-Zustand angleichen 2026-09-01 16:39:39 +02:00
home/tnix home(builder): give codex and claude playwright mcp by default 2026-09-17 11:14:22 +02:00
hosts host(tnix): join the pinix access point over WLAN 2026-09-17 12:18:55 +02:00
memory docs: prune completed Herdr task papers, retire session log 2026-09-05 16:57:19 +02:00
scripts pinix: publish lldap board internally and externally 2026-09-14 17:04:14 +02:00
secrets host(pinix): add live intent and ereader viewer services 2026-09-17 12:18:55 +02:00
services/live-intent host(pinix): add live intent and ereader viewer services 2026-09-17 12:18:55 +02:00
tests tests: add tnix VM boot check 2026-09-05 09:24:52 +02:00
.gitignore Atomare Self-Close-Sessions, Eskalationskette und Reviewer-Schwelle für Herdr-Rollen 2026-09-01 19:33:39 +02:00
AGENTS.md Archive nixos-config after the per-host repo split 2026-09-17 13:30:29 +02:00
CLAUDE.md Archive nixos-config after the per-host repo split 2026-09-17 13:30:29 +02:00
flake.lock host(pinix): consume ereader-viewer from its own cgit repository 2026-09-17 12:37:22 +02:00
flake.nix host(pinix): consume ereader-viewer from its own cgit repository 2026-09-17 12:37:22 +02:00
Plan.md Archive nixos-config after the per-host repo split 2026-09-17 13:30:29 +02:00
README.md Archive nixos-config after the per-host repo split 2026-09-17 13:30:29 +02:00
variables.nix tailnet: move main nodes to pinix user lukas 2026-09-14 16:52:53 +02:00

Archiviert am 17.09.2026. Dieses Repository wird nicht mehr deployt. Die Konfiguration ist aufgeteilt in drei eigenständige Repos: tnix (Origin ~/tnix auf tnix, Mirror auf pinix-cgit), pinix (git@git.lukasrosier.com:pinix.git) und blunix (ssh://forgejo@blunix:2222/lukas/blunix.git). Ein nixos-rebuild aus diesem Stand würde alte Secrets, Routen und Dienste zurückbringen. Ablauf und Zuordnung: Plan.md, docs/repo-split-inventar.md.

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

VM-Boot-Checks

Der erste VM-Test prüft, dass die reale tnix-Konfiguration bis multi-user.target bootet. Er prüft bewusst keine Dienste, Netzwerk- oder Firewall-Regeln und keine Desktop-Session.

# Nur den tnix-Boot-Test ausführen
nix build .#checks.x86_64-linux.tnix-boot

# Alle Flake-Checks, einschließlich des Boot-Tests, ausführen
nix flake check

Weitere Boot-Tests folgen dem Muster in tests/tnix-boot.nix: Das Host-Modulset wird aus flake.nix übernommen, und das Testskript wartet nur auf das passende Systemziel. Weitergehende Dienst-, Netzwerk- oder Desktop-Prüfungen gehören als eigene, gezielt benannte Checks daneben.

Befehle

# WLAN manuell verbinden
sudo iwlist [INTERFACE] scan

oder in configuraion.conf

tnix

Keymaps in Neovim space fk

Roadmap

docs/roadmap.md hält die großen, konzeptionellen Richtungsfragen fest (VPS/IPv6, Abhängigkeitsreduktion als Ziel). Laufende Arbeit, gefundene Bugs und der Tagesstand stehen in der Git-History und den docs/intent/-Aufträgen, nicht mehr in einem separaten Sitzungslog.

Status

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