{ lib, stdenv , fetchurl , nixosTests , copyDesktopItems , makeDesktopItem , makeWrapper , wrapGAppsHook3 , gobject-introspection , jre # old or modded versions of the game may require Java 8 (https://aur.archlinux.org/packages/minecraft-launcher/#pinned-674960) , xorg , zlib , nss , nspr , fontconfig , pango , cairo , expat , alsa-lib , cups , dbus , atk , gtk3-x11 , gtk2-x11 , gdk-pixbuf , glib , curl , freetype , libpulseaudio , libuuid , systemd , flite ? null , libXxf86vm ? null }: let desktopItem = makeDesktopItem { name = "minecraft-launcher"; exec = "minecraft-launcher"; icon = "minecraft-launcher"; comment = "Official launcher for Minecraft, a sandbox-building game"; desktopName = "Minecraft Launcher"; categories = [ "Game" ]; }; envLibPath = lib.makeLibraryPath [ curl libpulseaudio systemd alsa-lib # needed for narrator flite # needed for narrator libXxf86vm # needed only for versions <1.13 ]; libPath = lib.makeLibraryPath ([ alsa-lib atk cairo cups dbus expat fontconfig freetype gdk-pixbuf glib pango gtk3-x11 gtk2-x11 nspr nss stdenv.cc.cc zlib libuuid ] ++ (with xorg; [ libX11 libxcb libXcomposite libXcursor libXdamage libXext libXfixes libXi libXrandr libXrender libXtst libXScrnSaver ])); in stdenv.mkDerivation rec { pname = "minecraft-launcher"; version = "2.2.1441"; src = fetchurl { url = "https://launcher.mojang.com/download/linux/x86_64/minecraft-launcher_${version}.tar.gz"; sha256 = "03q579hvxnsh7d00j6lmfh53rixdpf33xb5zlz7659pvb9j5w0cm"; }; icon = fetchurl { url = "https://launcher.mojang.com/download/minecraft-launcher.svg"; sha256 = "0w8z21ml79kblv20wh5lz037g130pxkgs8ll9s3bi94zn2pbrhim"; }; nativeBuildInputs = [ makeWrapper wrapGAppsHook3 copyDesktopItems gobject-introspection ]; sourceRoot = "."; dontWrapGApps = true; dontConfigure = true; dontBuild = true; installPhase = '' runHook preInstall mkdir -p $out/opt mv minecraft-launcher $out/opt install -D $icon $out/share/icons/hicolor/symbolic/apps/minecraft-launcher.svg runHook postInstall ''; preFixup = '' patchelf \ --set-interpreter ${stdenv.cc.bintools.dynamicLinker} \ --set-rpath '$ORIGIN/'":${libPath}" \ $out/opt/minecraft-launcher/minecraft-launcher patchelf \ --set-rpath '$ORIGIN/'":${libPath}" \ $out/opt/minecraft-launcher/libcef.so patchelf \ --set-rpath '$ORIGIN/'":${libPath}" \ $out/opt/minecraft-launcher/liblauncher.so ''; postFixup = '' # Do not create `GPUCache` in current directory makeWrapper $out/opt/minecraft-launcher/minecraft-launcher $out/bin/minecraft-launcher \ --prefix LD_LIBRARY_PATH : ${envLibPath} \ --prefix PATH : ${lib.makeBinPath [ jre ]} \ --set JAVA_HOME ${lib.getBin jre} \ --chdir /tmp \ "''${gappsWrapperArgs[@]}" ''; desktopItems = [ desktopItem ]; meta = with lib; { description = "Official launcher for Minecraft, a sandbox-building game"; homepage = "https://minecraft.net"; maintainers = with maintainers; [ ryantm ]; sourceProvenance = with sourceTypes; [ binaryNativeCode ]; license = licenses.unfree; platforms = [ "x86_64-linux" ]; # "minecraft-launcher will fail on NixOS for minecraft versions >1.19 # try prismlauncher or atlauncher instead" broken = true; }; passthru = { tests = { inherit (nixosTests) minecraft; }; updateScript = ./update.sh; }; }