{
  lib,
  stdenv,
  fetchFromGitHub,
  makeWrapper,
  cmake,
  ninja,
  libarchive,
  libz,
  jdk17,
  libcef,
  luajit,
  xorg,
  mesa,
  glib,
  nss,
  nspr,
  atk,
  at-spi2-atk,
  libdrm,
  expat,
  libxkbcommon,
  gtk3,
  pango,
  cairo,
  alsa-lib,
  dbus,
  at-spi2-core,
  cups,
  systemd,
  buildFHSEnv,
  copyDesktopItems,
  makeDesktopItem,
}: let
  cef = libcef.overrideAttrs (_: {
    installPhase = let
      gl_rpath = lib.makeLibraryPath [
        stdenv.cc.cc.lib
      ];
      rpath = lib.makeLibraryPath [
        glib
        nss
        nspr
        atk
        at-spi2-atk
        libdrm
        expat
        xorg.libxcb
        libxkbcommon
        xorg.libX11
        xorg.libXcomposite
        xorg.libXdamage
        xorg.libXext
        xorg.libXfixes
        xorg.libXrandr
        mesa
        gtk3
        pango
        cairo
        alsa-lib
        dbus
        at-spi2-core
        cups
        xorg.libxshmfence
        systemd
      ];
    in ''
      mkdir -p $out/lib/ $out/share/cef/
      cp libcef_dll_wrapper/libcef_dll_wrapper.a $out/lib/
      cp -r ../Resources/* $out/lib/
      cp -r ../Release/* $out/lib/
      patchelf --set-rpath "${rpath}" $out/lib/libcef.so
      patchelf --set-rpath "${gl_rpath}" $out/lib/libEGL.so
      patchelf --set-rpath "${gl_rpath}" $out/lib/libGLESv2.so
      cp ../Release/*.bin $out/share/cef/
      cp -r ../Resources/* $out/share/cef/
      cp -r ../include $out
      cp -r ../libcef_dll $out
      cp -r ../cmake $out
    '';
  });

  bolt = stdenv.mkDerivation (finalAttrs: {
    pname = "bolt-launcher";
    version = "0.10.0";

    src = fetchFromGitHub {
      owner = "AdamCake";
      repo = "bolt";
      rev = finalAttrs.version;
      fetchSubmodules = true;
      hash = "sha256-2IoFzD+yhQv1Y7D+abeNUT23BC4P1xZTALF8Y+Zsg44=";
    };

    nativeBuildInputs = [
      cmake
      ninja
      luajit
      makeWrapper
      copyDesktopItems
    ];

    buildInputs = [
      mesa
      xorg.libX11
      xorg.libxcb
      libarchive
      libz
      cef
      jdk17
    ];

    desktopItems = [
      (makeDesktopItem {
        inherit (bolt) name;
        desktopName = "Bolt Launcher";
        keywords = [
          "Game"
        ];
        exec = "${bolt.name}";
        terminal = false;
        categories = ["Game"];
        icon = "bolt-launcher";
      })
    ];

    cmakeFlags = [
      "-D CMAKE_BUILD_TYPE=Release"
      "-D BOLT_LUAJIT_INCLUDE_DIR=${luajit}/include"
      "-G Ninja"
    ];

    preConfigure = ''
      ls -al
      mkdir -p cef/dist/Release cef/dist/Resources cef/dist/include

      ln -s ${cef}/lib/* cef/dist/Release

      ln -s ${cef}/share/cef/*.pak cef/dist/Resources
      ln -s ${cef}/share/cef/icudtl.dat cef/dist/Resources
      ln -s ${cef}/share/cef/locales cef/dist/Resources

      ln -s ${cef}/include/* cef/dist/include
      ln -s ${cef}/libcef_dll cef/dist/libcef_dll

      ln -s ${cef}/cmake cef/dist/cmake
      ln -s ${cef}/CMakeLists.txt cef/dist
    '';

    postInstall = ''
      for size in 16 32 64 128 256; do
          size_dir="''${size}x''${size}"
          ls -al $src/icon
          mkdir -p $out/share/icons/hicolor/''${size_dir}/apps
          cp $src/icon/$size.png $out/share/icons/hicolor/''${size_dir}/apps/bolt-launcher.png
      done
      mkdir -p $out/share/icons/hicolor/scalable/apps/
      cp $src/icon/bolt.svg $out/share/icons/hicolor/scalable/apps/bolt-launcher.svg
    '';
    postFixup = ''
      makeWrapper "$out/opt/bolt-launcher/bolt" "$out/bin/${finalAttrs.pname}-${finalAttrs.version}" \
      --set JAVA_HOME "${jdk17}"
      ls -al $out/bin
      mkdir -p $out/lib
      cp $out/usr/local/lib/libbolt-plugin.so $out/lib
    '';
  });
in
  buildFHSEnv {
    inherit (bolt) name version;

    targetPkgs = pkgs:
      [bolt]
      ++ (with pkgs; [
        xorg.libSM
        xorg.libXxf86vm
        xorg.libX11
        glib
        pango
        cairo
        gdk-pixbuf
        gtk2-x11
        libz
        libcap
        libsecret
        openssl_1_1
        SDL2
        libGL
      ]);

    extraInstallCommands = ''
      mkdir -p $out/share/applications $out/share/icons
      ln -s ${bolt}/share/applications/*.desktop \
        $out/share/applications/
      ln -s ${bolt}/share/icons/hicolor \
        $out/share/icons/hicolor
    '';

    runScript = "${bolt.name}";
    meta = {
      homepage = "https://github.com/Adamcake/Bolt";
      description = "An alternative launcher for RuneScape";
      license = lib.licenses.agpl3Plus;
      maintainers = with lib.maintainers; [nezia];
      platforms = lib.platforms.linux;
      mainProgram = "${bolt.name}";
    };
  }