Files
nix-config/packages/bolt-launcher/default.nix
mjallen18 751b4f9f69 test
2025-09-30 18:29:34 -05:00

181 lines
3.7 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,
libxext,
libxkbcommon,
mesa,
nspr,
nss,
pango,
systemd,
xorg,
zlib,
# Additional CEF/Chromium dependencies
libnotify,
libpulseaudio,
libuuid,
libva,
pipewire,
udev,
wayland,
jdk17 # for RuneLite/HDOS
, # 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=";
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
libxext
libxkbcommon
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; [
libXcomposite
libXcursor
libXdamage
libXfixes
libXi
libXinerama
libXrandr
libXrender
libXScrnSaver
libxshmfence
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"
"aarch64-linux"
];
maintainers = with maintainers; [ ];
sourceProvenance = with sourceTypes; [ binaryNativeCode ];
};
}