{ pkgs ? import {} }: pkgs.mkShell { buildInputs = with pkgs; [ # Rust Toolchain aus nixpkgs rustc cargo rustfmt clippy gcc pkg-config openssl # Tauri-Abhängigkeiten für Linux webkitgtk_4_1 libappindicator-gtk3 librsvg # GTK/GLib für Tauri gtk3 glib cairo pango gdk-pixbuf # Zusätzliche Abhängigkeiten libsoup_3 at-spi2-atk # Node.js (falls nicht global) nodejs_22 # Phase 2.2: Lokales Voice (kostenlos, offline) whisper-cpp # Speech-to-Text (whisper-cli Binary) piper-tts # Text-to-Speech (deutsche Stimme: Thorsten) alsa-lib ffmpeg # GStreamer für WebKitGTK Mikrofon-Zugriff (getUserMedia) gst_all_1.gstreamer gst_all_1.gst-plugins-base gst_all_1.gst-plugins-good gst_all_1.gst-plugins-bad gst_all_1.gst-plugins-ugly pipewire # PipeWire-Support für Audio-Capture # Zusätzliche Bibliotheken für Tauri CLI bzip2 zlib xz zstd ]; # Umgebungsvariablen für Rust/Tauri shellHook = '' export PKG_CONFIG_PATH="${pkgs.openssl.dev}/lib/pkgconfig:$PKG_CONFIG_PATH" export LD_LIBRARY_PATH="${pkgs.lib.makeLibraryPath [ pkgs.webkitgtk_4_1 pkgs.libappindicator-gtk3 pkgs.gtk3 pkgs.cairo pkgs.pango pkgs.gdk-pixbuf pkgs.librsvg pkgs.libsoup_3 pkgs.bzip2 pkgs.zlib pkgs.xz pkgs.zstd pkgs.openssl pkgs.gst_all_1.gstreamer pkgs.gst_all_1.gst-plugins-base pkgs.gst_all_1.gst-plugins-good pkgs.gst_all_1.gst-plugins-bad pkgs.pipewire pkgs.alsa-lib ]}:$LD_LIBRARY_PATH" # GStreamer Plugin-Pfade für WebKitGTK Mikrofon-Zugriff export GST_PLUGIN_PATH="${pkgs.lib.makeSearchPathOutput "lib" "lib/gstreamer-1.0" [ pkgs.gst_all_1.gstreamer pkgs.gst_all_1.gst-plugins-base pkgs.gst_all_1.gst-plugins-good pkgs.gst_all_1.gst-plugins-bad pkgs.gst_all_1.gst-plugins-ugly ]}''${GST_PLUGIN_PATH:+:$GST_PLUGIN_PATH}" echo "🦀 Claude Desktop Entwicklungsumgebung geladen" echo " Rust: $(rustc --version 2>/dev/null || echo 'nicht gefunden')" echo " Cargo: $(cargo --version 2>/dev/null || echo 'nicht gefunden')" echo " Node: $(node --version 2>/dev/null || echo 'nicht gefunden')" echo " GStreamer: $(gst-inspect-1.0 --version 2>/dev/null | head -1 || echo 'nicht gefunden')" ''; }