Initial template repo
This commit is contained in:
@@ -0,0 +1,376 @@
|
||||
# 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!** 🚀
|
||||
Reference in New Issue
Block a user