# Cachix Setup Anleitung Wie du Cachix nutzt, um deine NixOS-Builds massiv zu beschleunigen. --- ## Was ist Cachix? **Cachix** = Vorkompilierte Nix-Pakete (wie ein Mirror/Cache). Statt alles selbst zu kompilieren: ``` Kompilieren (1-2 Stunden): gcc + glibc + steam + mesa + ... = sehr lange Mit Cachix (10-30 Min): Download vorkompilierte Binaries = schnell! ``` --- ## Cachix bereits im Repo aktiviert! Dieses Template nutzt bereits **Chaotic-Nyx Cachix**: **In `flake.nix`:** ```nix nixConfig = { extra-substituters = [ "https://nyx-cache.chaotic.cx/" ]; extra-trusted-public-keys = [ "nyx-cache.chaotic.cx:dJxTrgMC3V3cFfyIiBQDQorG6k1LsqurH/srpMSq7qk=" ]; }; ``` **Was das bedeutet:** - `substituters` = Wo Binaries runterladen - `trusted-public-keys` = Sichere Signatur für Cache - Automatisch aktiviert, kein Setup nötig! **Performance-Gewinn:** ``` Ohne Cachix (kompiliert alles lokal): 90+ Minuten Mit Cachix (nutzt vorkompilierte Binaries): 15-30 Minuten → 5-6x schneller! ``` --- ## Welche Caches sind aktiv? ### Standard NixOS Cache Automatisch bei jedem NixOS: ``` https://cache.nixos.org/ ``` **Was da ist:** - Stabile nixpkgs-Pakete - Offizielle NixOS-Binaries ### Chaotic-Nyx Cache (Im Repo) ``` https://nyx-cache.chaotic.cx/ ``` **Was da ist:** - Mesa-Git (neueste GPU-Treiber) - Chaotic-Pakete - Gaming-Tools (Steam, Proton, etc.) ### Weitere Caches hinzufügen (Optional) Falls du mehr Caches willst (z.B. für andere Projekte): **In `flake.nix` ergänzen:** ```nix nixConfig = { extra-substituters = [ "https://nyx-cache.chaotic.cx/" "https://cache.nixos.org/" "https://numtide.cachix.org" # Z.B. Devenv ]; extra-trusted-public-keys = [ "nyx-cache.chaotic.cx:dJxTrgMC3V3cFfyIiBQDQorG6k1LsqurH/srpMSq7qk=" "numtide.cachix.org-1:B7mY+4SOvX0nW0q6Z0i4N/BcL2RivchtA7yCNFrvW0s=" ]; }; ``` --- ## Cachix System-Wide aktivieren Falls ihr später selbst Caches hinzufügen wollt: ### Methode 1: In `flake.nix` (für dieses Repo) Wir nutzen das schon: ```nix nixConfig = { ... } ``` ### Methode 2: In `/etc/nix/nix.conf` (für alle Flakes) ```bash sudo nano /etc/nix/nix.conf ``` Hinzufügen: ```ini substituters = https://cache.nixos.org/ https://nyx-cache.chaotic.cx/ trusted-public-keys = nyx-cache.chaotic.cx:dJxTrgMC3V3cFfyIiBQDQorG6k1LsqurH/srpMSq7qk= ``` **Dann neuladen:** ```bash sudo systemctl restart nix-daemon ``` --- ## Cachix Performance-Check ### Cache-Hits prüfen ```bash # Beim Build: Schau auf die Ausgabe sudo nixos-rebuild switch --flake .#template # Output sollte zeigen: # "copying path ... from 'https://nyx-cache.chaotic.cx/'" # ^ Das bedeutet: Aus Cache heruntergeladen! # vs. # "building '/nix/store/...'" # ^ Das bedeutet: Lokal kompiliert (no cache hit) ``` ### Wie viele von Cache? ```bash # Nach Build überprüfen: nix store ls -R /nix/store/... | wc -l # Ungefähr: Mit Cachix 50-60% Cache, 40-50% kompiliert ``` --- ## Eigenen Cachix Cache erstellen (Advanced) Falls ihr einen Team-Cache bauen wollt: ### Schritt 1: Cachix Account erstellen ```bash # Online: https://www.cachix.org/ # Gratis Tier mit 5 GB ``` ### Schritt 2: Cachix CLI installieren ```bash nix-shell -p cachix # Oder: nix profile install nixpkgs#cachix ``` ### Schritt 3: Authentifizieren ```bash cachix authtoken # Token in https://app.cachix.org/tokens einsehen # Eingeben wenn gefordert ``` ### Schritt 4: Cache pushen ```bash # Nach erfolgreichen Build: sudo nix copy --to "file:///tmp/nix-cache" /run/current-system # Dann zu Cachix: cachix push my-cache /tmp/nix-cache ``` ### Schritt 5: Im Repo nutzen ```nix # In flake.nix: extra-substituters = [ "https://my-cache.cachix.org" ]; extra-trusted-public-keys = [ "my-cache.cachix.org-1:XXXXX..." ]; ``` --- ## Cachix mit `nix-direnv` (Workflow-Tipp) Falls ihr `nix-direnv` nutzt: ```bash # .envrc use flake ``` **Das wird auf jeden Cache-Hit prüfen!** --- ## Troubleshooting ### Problem: Cache wird nicht genutzt (Alles wird kompiliert) **Ursache 1: Falsche Public Key** ```bash # Überprüfe in flake.nix: grep trusted-public-keys flake.nix # Sollte exakt wie bei Cachix stehen ``` **Ursache 2: Cache-Server offline** ```bash # Test: curl -I https://nyx-cache.chaotic.cx/ # Falls 403/404: Cache hat Probleme # → Fallback auf lokales Bauen: --no-substitute ``` **Ursache 3: Nix-Daemon nicht neugestartet** ```bash sudo systemctl restart nix-daemon ``` ### Problem: "Signature doesn't match" ``` Error: Signature doesn't match ``` **Lösung:** ```bash # Public Key überprüfen: echo "nyx-cache.chaotic.cx:dJxTrgMC3V3cFfyIiBQDQorG6k1LsqurH/srpMSq7qk=" | tee -a ~/.config/nix/nix.conf # Oder neu eingeben (exakt!) ``` ### Problem: Zu langsam trotz Cache ```bash # 1. Cache-Status prüfen: nix show-config substituters # 2. Parallele Jobs erhöhen: sudo nano /etc/nix/nix.conf # max-jobs = 8 # cores = 8 # 3. Nix-Daemon neustarten: sudo systemctl restart nix-daemon ``` --- ## Performance-Vergleich ### Ohne Cachix (Kompilieren) ``` $ sudo nixos-rebuild switch --flake .#template building '/nix/store/...-mesa-git' building '/nix/store/...-steam' building '/nix/store/...-gcc' [████████████░░░░░░░░░░░░░░░░░░░] 45% (90 min) ``` ### Mit Cachix (Herunterladen) ``` $ sudo nixos-rebuild switch --flake .#template copying path from 'https://nyx-cache.chaotic.cx/' ... copying path from 'https://nyx-cache.chaotic.cx/' ... [██████████████████████████████░░░] 95% (20 min) ``` --- ## Für Freunde: Cachix Erklärung ### Einfach: ``` "Cachix = vorkompilierte Pakete downloaden statt selbst bauen" Mit Cachix: 20 Minuten Ohne Cachix: 90 Minuten → 4x schneller! ``` ### Falls Freunde fragen: "Ist das sicher?" Antwort: ``` Ja! Wir nutzen trusted-public-keys für digitale Signaturen. Nur signierte Pakete vom Chaotic-Nyx Team werden installiert. ``` ### Falls kein Internet: ```bash # Cachix funktioniert nur mit Internet # Ohne Internet: --no-substitute sudo nixos-rebuild switch --flake .#template --no-substitute # (Dauert länger, aber funktioniert offline) ``` --- ## Checkliste für Freunde - [ ] Cachix ist im Repo aktiviert (`flake.nix`) - [ ] Beim ersten `nix flake update` wird Cache-Config geladen - [ ] Beim `nixos-rebuild` sollte Cache genutzt werden - [ ] Build dauert 15-30 Min (mit Cache), nicht 90+ Min - [ ] Falls zu langsam: Cache ist wahrscheinlich offline → Fallback OK --- ## Nützliche Commands ```bash # Cache-Status anzeigen nix show-config substituters # System-Toplevel testweise bauen nix build .#nixosConfigurations.template.config.system.build.toplevel # Fallback (kein Cache) sudo nixos-rebuild switch --flake .#template --no-substitute # Cache räumen (alt Zeug löschen) nix-collect-garbage -d # Speicher prüfen df -h /nix ``` --- ## Zusammenfassung | Punkt | Status | |-------|--------| | **Cachix aktiv?** | Ja (Chaotic-Nyx) | | **Automatisch?** | Ja, kein Setup nötig | | **Performance-Gewinn** | 4-6x schneller | | **Sicher?** | Ja, signierte Pakete | | **Für Freunde wichtig?** | Ja, erspart viel Build-Zeit | **Cachix ist schon aktiviert – einfach genießen!**