# Claude Desktop — NixOS-Integration Dauerhaftes Einbinden der App ins System **und** funktionierendes Auto-Update. Der Trick: das Nix-Paket liefert nur einen Wrapper + Desktop-Entry, das eigentliche Binary lebt im User-Home (`~/.local/share/claude-desktop/bin/`), damit der Auto-Updater es ersetzen kann — der Nix-Store ist read-only. ## Einmaliger Setup ### 1. Binary einmal nativ bauen ```bash cd CARGO_TARGET_DIR=/tmp/claude-target \ nix-shell shell.nix --run 'npm ci && npm run tauri build -- --bundles appimage' ``` Das liefert das Binary unter `/tmp/claude-target/release/claude-desktop` (~13 MB). Das Bundling-Fail am Ende ignorieren — das Binary ist fertig. ### 2. Nix-Paket in die System-Config einbinden **Variante A — configuration.nix (system-weit):** ```nix { pkgs, ... }: { environment.systemPackages = [ (import /pfad/zum/claude-desktop/nix/default.nix { inherit pkgs; }) ]; } ``` Dann `sudo nixos-rebuild switch`. **Variante B — home-manager (nur eigener User):** ```nix { pkgs, ... }: { home.packages = [ (import /pfad/zum/claude-desktop/nix/default.nix { inherit pkgs; }) ]; } ``` Dann `home-manager switch`. **Variante C — nur testen ohne System-Config:** ```bash nix-build nix/default.nix nix-env -i ./result ``` ### 3. Binary in den User-Home kopieren ```bash claude-desktop-install ``` Macht `cp /tmp/claude-target/release/claude-desktop ~/.local/share/claude-desktop/bin/`. Das Paket liefert diesen Helper mit. ### 4. Starten - Aus dem KDE/GNOME-Menü: „Claude Desktop" - Oder im Terminal: `claude-desktop` ## Wie der Auto-Update in diesem Setup funktioniert - Der Launcher setzt `CLAUDE_DESKTOP_NIX_WRAPPER=1` und `CLAUDE_DESKTOP_BIN=$HOME/.local/share/claude-desktop/bin/claude-desktop` als Env-Vars - `apply_update` in der App erkennt diesen Modus und überschreibt das User-Binary statt `$APPIMAGE` - Der Rename-Trick klappt, weil `~/.local/share` schreibbar ist - Nach Update-Apply macht Tauri `app.restart()` — der Nix-Wrapper startet das neue Binary mit denselben LD-Libs ## Bekannte Einschränkungen (v1) - **Auto-Update lädt aktuell nur das AppImage** aus der Package Registry, das im Nix-Modus nicht direkt läuft. Kurzfristig wird die heruntergeladene Datei ins User-Binary-Ziel geschrieben → beim Neustart schlägt sie fehl. **Workaround:** bei Update-Hinweis manuell neu bauen: `git pull; npm run tauri build; claude-desktop-install`. - **Saubere Lösung (geplant):** CI lädt zusätzlich ein natives Binary in die Package Registry (extract aus dem AppImage-squashfs), `update.rs` nimmt je nach Modus AppImage oder Binary. ## Deinstallation ```bash # Aus System-Config entfernen (configuration.nix/home.nix bearbeiten, dann switch) # User-Binary + Daten loeschen: rm -rf ~/.local/share/claude-desktop rm -rf ~/.local/share/de.alles-watt-laeuft.claude-desktop ``` ## Debugging ```bash # Sehen was der Launcher macht bash -x $(which claude-desktop) # Pruefen ob das User-Binary existiert & ausfuehrbar ist ls -l ~/.local/share/claude-desktop/bin/claude-desktop # Library-Pfad der wrapped-Version inspizieren cat $(which claude-desktop) ```