2025-04-01 20:10:43 +02:00
|
|
|
{
|
|
|
|
lib,
|
|
|
|
stdenv,
|
|
|
|
fetchurl,
|
|
|
|
makeDesktopItem,
|
|
|
|
wrapGAppsHook3,
|
|
|
|
copyDesktopItems,
|
|
|
|
imagemagick,
|
2025-06-14 23:06:49 +08:00
|
|
|
jdk,
|
|
|
|
jdk17,
|
|
|
|
jdk21,
|
|
|
|
hmclJdk ? jdk,
|
|
|
|
minecraftJdks ? [
|
|
|
|
jdk
|
|
|
|
jdk17
|
|
|
|
jdk21
|
|
|
|
],
|
2025-04-01 20:10:43 +02:00
|
|
|
xorg,
|
|
|
|
glib,
|
|
|
|
libGL,
|
|
|
|
glfw,
|
|
|
|
openal,
|
|
|
|
libglvnd,
|
|
|
|
alsa-lib,
|
|
|
|
wayland,
|
|
|
|
vulkan-loader,
|
|
|
|
libpulseaudio,
|
|
|
|
gobject-introspection,
|
2025-07-02 14:53:29 +08:00
|
|
|
callPackage,
|
2023-07-31 17:03:00 +08:00
|
|
|
}:
|
|
|
|
|
|
|
|
stdenv.mkDerivation (finalAttrs: {
|
|
|
|
pname = "hmcl";
|
2025-07-24 13:58:08 +00:00
|
|
|
version = "3.6.15";
|
2023-07-31 17:03:00 +08:00
|
|
|
|
|
|
|
src = fetchurl {
|
2025-07-02 14:51:45 +08:00
|
|
|
# HMCL has built-in keys, such as the Microsoft OAuth secret and the CurseForge API key.
|
|
|
|
# See https://github.com/HMCL-dev/HMCL/blob/refs/tags/release-3.6.12/.github/workflows/gradle.yml#L26-L28
|
2025-07-02 19:41:19 +08:00
|
|
|
url = "https://github.com/HMCL-dev/HMCL/releases/download/release-${finalAttrs.version}/HMCL-${finalAttrs.version}.jar";
|
2025-07-24 13:58:08 +00:00
|
|
|
hash = "sha256-F+QixbA6zEA1qW3yb8MhJNurU8/2jZAEbfQU9cJ7zT4=";
|
2023-07-31 17:03:00 +08:00
|
|
|
};
|
|
|
|
|
2025-07-02 14:48:15 +08:00
|
|
|
icon = fetchurl {
|
2025-07-02 19:41:19 +08:00
|
|
|
url = "https://github.com/HMCL-dev/HMCL/raw/release-${finalAttrs.version}/HMCL/src/main/resources/assets/img/icon@8x.png";
|
2025-07-02 19:39:30 +08:00
|
|
|
hash = "sha256-1OVq4ujA2ZHboB7zEk7004kYgl9YcoM4qLq154MZMGo=";
|
2025-07-02 14:48:15 +08:00
|
|
|
};
|
|
|
|
|
2023-07-31 17:03:00 +08:00
|
|
|
dontUnpack = true;
|
|
|
|
|
|
|
|
dontWrapGApps = true;
|
|
|
|
|
|
|
|
desktopItems = [
|
|
|
|
(makeDesktopItem {
|
|
|
|
name = "HMCL";
|
|
|
|
exec = "hmcl";
|
|
|
|
icon = "hmcl";
|
|
|
|
comment = finalAttrs.meta.description;
|
|
|
|
desktopName = "HMCL";
|
|
|
|
categories = [ "Game" ];
|
|
|
|
})
|
|
|
|
];
|
|
|
|
|
|
|
|
nativeBuildInputs = [
|
2024-06-20 23:35:52 -04:00
|
|
|
gobject-introspection
|
2024-04-26 22:24:03 +02:00
|
|
|
wrapGAppsHook3
|
2023-07-31 17:03:00 +08:00
|
|
|
copyDesktopItems
|
|
|
|
imagemagick
|
|
|
|
];
|
|
|
|
|
2024-06-20 23:35:52 -04:00
|
|
|
installPhase = ''
|
|
|
|
runHook preInstall
|
|
|
|
|
|
|
|
mkdir -p $out/{bin,lib/hmcl}
|
|
|
|
cp $src $out/lib/hmcl/hmcl.jar
|
2025-07-02 19:39:30 +08:00
|
|
|
|
|
|
|
for n in 16 32 48 64 96 128 256
|
|
|
|
do
|
|
|
|
size=$n"x"$n
|
|
|
|
mkdir -p $out/share/icons/hicolor/$size/apps
|
|
|
|
magick ${finalAttrs.icon} -resize $size $out/share/icons/hicolor/$size/apps/hmcl.png
|
|
|
|
done
|
2024-06-20 23:35:52 -04:00
|
|
|
|
|
|
|
runHook postInstall
|
|
|
|
'';
|
|
|
|
|
2025-04-01 20:10:43 +02:00
|
|
|
fixupPhase =
|
|
|
|
let
|
|
|
|
libpath = lib.makeLibraryPath (
|
|
|
|
[
|
2024-06-20 23:35:52 -04:00
|
|
|
libGL
|
|
|
|
glfw
|
2024-08-04 21:18:28 +08:00
|
|
|
glib
|
2024-06-20 23:35:52 -04:00
|
|
|
openal
|
|
|
|
libglvnd
|
2025-03-17 06:03:41 +08:00
|
|
|
vulkan-loader
|
2025-04-01 20:10:43 +02:00
|
|
|
]
|
|
|
|
++ lib.optionals stdenv.hostPlatform.isLinux [
|
2024-06-20 23:35:52 -04:00
|
|
|
xorg.libX11
|
|
|
|
xorg.libXxf86vm
|
|
|
|
xorg.libXext
|
|
|
|
xorg.libXcursor
|
|
|
|
xorg.libXrandr
|
|
|
|
xorg.libXtst
|
|
|
|
libpulseaudio
|
|
|
|
wayland
|
|
|
|
alsa-lib
|
2025-04-01 20:10:43 +02:00
|
|
|
]
|
|
|
|
);
|
|
|
|
in
|
|
|
|
''
|
|
|
|
runHook preFixup
|
2024-06-20 23:35:52 -04:00
|
|
|
|
2025-06-14 23:06:49 +08:00
|
|
|
makeBinaryWrapper ${hmclJdk}/bin/java $out/bin/hmcl \
|
2025-04-01 20:10:43 +02:00
|
|
|
--add-flags "-jar $out/lib/hmcl/hmcl.jar" \
|
|
|
|
--set LD_LIBRARY_PATH ${libpath} \
|
2025-06-14 23:06:49 +08:00
|
|
|
--prefix PATH : "${lib.makeBinPath minecraftJdks}"\
|
2025-04-01 20:10:43 +02:00
|
|
|
''${gappsWrapperArgs[@]}
|
2024-06-20 23:35:52 -04:00
|
|
|
|
2025-04-01 20:10:43 +02:00
|
|
|
runHook postFixup
|
|
|
|
'';
|
2023-07-31 17:03:00 +08:00
|
|
|
|
2025-07-02 14:53:29 +08:00
|
|
|
passthru.updateScript = lib.getExe (callPackage ./update.nix { });
|
|
|
|
|
2025-07-02 14:43:25 +08:00
|
|
|
meta = {
|
2023-07-31 17:03:00 +08:00
|
|
|
homepage = "https://hmcl.huangyuhui.net";
|
2025-06-05 09:11:29 -07:00
|
|
|
description = "Minecraft Launcher which is multi-functional, cross-platform and popular";
|
2025-07-02 14:43:25 +08:00
|
|
|
changelog = "https://docs.hmcl.net/changelog/stable.html";
|
2024-03-19 03:14:51 +01:00
|
|
|
mainProgram = "hmcl";
|
2025-07-02 14:43:25 +08:00
|
|
|
sourceProvenance = with lib.sourceTypes; [ binaryBytecode ];
|
|
|
|
license = lib.licenses.gpl3Only;
|
2025-07-02 14:54:04 +08:00
|
|
|
maintainers = with lib.maintainers; [
|
|
|
|
daru-san
|
|
|
|
moraxyc
|
|
|
|
];
|
2025-06-14 23:06:49 +08:00
|
|
|
inherit (hmclJdk.meta) platforms;
|
2023-07-31 17:03:00 +08:00
|
|
|
};
|
|
|
|
})
|