Files
nix-config/packages/bolt-launcher/default.nix
mjallen18 e6d386d362 bolt?
2025-09-17 14:18:30 -05:00

180 lines
3.8 KiB
Nix

{ 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 ];
};
}