claude-desktop/nix/INSTALL.md
Eddy 506f1d3fdc
All checks were successful
Build AppImage / build (push) Successful in 7m52s
[appimage] Auto-Updater: Package Registry + update.json + Nix-Wrapper
- update.rs: Umstellung auf Package-Registry-Manifest mit SHA256-Verify,
  Basic-Auth, dev/APPIMAGE/Nix-Wrapper-Modus. Liest binary_filename
  im Nix-Modus (AppImage laeuft auf NixOS nicht)
- Nix-Wrapper-Paket (nix/default.nix): LD_LIBRARY_PATH-korrekter Launcher
  + Installer-Script, User-Home-Binary (writable fuer Auto-Update)
- CI laedt jetzt AppImage UND natives Binary + update.json v2
  (binary_filename/binary_sha256) in die Package Registry
- Svelte: Store-basierter Update-Trigger, manueller Check im
  Settings-Panel, "Kein Update"-Dialog-Variante, expectedSha256-Param
- install.sh: One-Click-Installer fuer NixOS (curl | bash)
- sha2-Dep fuer Integritaets-Check des Downloads

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 11:05:19 +02:00

3.1 KiB

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

cd <repo>
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):

{ 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):

{ pkgs, ... }:
{
  home.packages = [
    (import /pfad/zum/claude-desktop/nix/default.nix { inherit pkgs; })
  ];
}

Dann home-manager switch.

Variante C — nur testen ohne System-Config:

nix-build nix/default.nix
nix-env -i ./result

3. Binary in den User-Home kopieren

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

# 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

# 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)