{ lib , stdenv , fetchzip , autoPatchelfHook , makeWrapper # Core dependencies , alsa-lib , at-spi2-core , cairo , cups , dbus , expat , fontconfig , freetype , gdk-pixbuf , glib , gtk3 , libarchive , libdrm , libGL , libX11 , libxcb , libXcomposite , libXdamage , libXext , libXfixes , libxkbcommon , libXrandr , libxshmfence , mesa , nspr , nss , pango , systemd , xorg , zlib # Additional CEF/Chromium dependencies , libnotify , libpulseaudio , libuuid , libva , pipewire , udev , wayland , jdk17 # for RuneLite/HDOS , gtk2 ? null # for RS3 }: stdenv.mkDerivation rec { pname = "bolt-launcher"; version = "0.19.1"; src = fetchzip { url = "https://github.com/Adamcake/Bolt/releases/download/${version}/Bolt-Linux.zip"; sha256 = "sha256-5tGXz2PIz0HIHMGNF7NpYVsB8hnueitNYKi6LtJpuPw="; # Replace with actual hash stripRoot = false; }; nativeBuildInputs = [ autoPatchelfHook makeWrapper ]; buildInputs = [ alsa-lib at-spi2-core cairo cups dbus expat fontconfig freetype gdk-pixbuf glib gtk3 libarchive libdrm libGL libX11 libxcb libXcomposite libXdamage libXext libXfixes libxkbcommon libXrandr libxshmfence mesa nspr nss pango stdenv.cc.cc.lib # for libstdc++.so.6 systemd zlib # Additional CEF/Chromium deps libnotify libpulseaudio libuuid libva pipewire udev wayland ] ++ (with xorg; [ libXcursor libXi libXinerama libXrender libXScrnSaver libXtst libXxf86vm ]); dontConfigure = true; dontBuild = true; installPhase = '' runHook preInstall # Create directory structure mkdir -p $out/bin mkdir -p $out/lib/bolt-launcher mkdir -p $out/share/applications mkdir -p $out/share/icons # Copy all files to lib directory cp -r ./bolt-launcher/* $out/lib/bolt-launcher/ # The main executable is 'bolt' (lowercase) chmod +x $out/lib/bolt-launcher/bolt # Also make chrome-sandbox executable (needed for CEF) if [ -f $out/lib/bolt-launcher/chrome-sandbox ]; then chmod +x $out/lib/bolt-launcher/chrome-sandbox fi # Create wrapper script with proper library paths makeWrapper $out/lib/bolt-launcher/bolt $out/bin/bolt-launcher \ --prefix LD_LIBRARY_PATH : "$out/lib/bolt-launcher:${lib.makeLibraryPath buildInputs}" \ --set BOLT_SKIP_UPDATE "1" \ --chdir "$out/lib/bolt-launcher" \ ${lib.optionalString (jdk17 != null) "--prefix PATH : ${jdk17}/bin"} # Create a simple desktop file if none exists cat > $out/share/applications/bolt-launcher.desktop << EOF [Desktop Entry] Name=Bolt Launcher Comment=Free open-source third-party implementation of the Jagex Launcher Exec=$out/bin/bolt-launcher Icon=bolt-launcher Type=Application Categories=Game; EOF runHook postInstall ''; # Additional runtime fixes postFixup = '' # The CEF libraries are in the same directory as the main executable # Make sure they can find each other patchelf --set-rpath "$out/lib/bolt-launcher:${lib.makeLibraryPath buildInputs}" \ $out/lib/bolt-launcher/bolt || true # Patch the CEF libraries for lib in $out/lib/bolt-launcher/*.so*; do if [ -f "$lib" ]; then patchelf --set-rpath "$out/lib/bolt-launcher:${lib.makeLibraryPath buildInputs}" "$lib" || true fi done ''; meta = with lib; { description = "Free open-source third-party implementation of the Jagex Launcher"; homepage = "https://bolt.adamcake.com/"; license = licenses.agpl3Only; platforms = [ "x86_64-linux" ]; maintainers = with maintainers; [ ]; # Add your maintainer name here sourceProvenance = with sourceTypes; [ binaryNativeCode ]; }; }