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

94 lines
3.1 KiB
Markdown

# 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 <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):**
```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)
```