nixpkgs/pkgs/by-name/hm/hmcl/package.nix

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

138 lines
3.1 KiB
Nix
Raw Permalink Normal View History

2023-07-31 17:03:00 +08:00
{
lib,
stdenv,
fetchurl,
makeDesktopItem,
wrapGAppsHook3,
2023-07-31 17:03:00 +08:00
copyDesktopItems,
imagemagick,
2025-06-14 23:06:49 +08:00
jdk,
jdk17,
jdk21,
hmclJdk ? jdk,
minecraftJdks ? [
jdk
jdk17
jdk21
],
2023-07-31 17:03:00 +08:00
xorg,
glib,
2023-07-31 17:03:00 +08:00
libGL,
glfw,
openal,
libglvnd,
alsa-lib,
wayland,
vulkan-loader,
2023-07-31 17:03:00 +08:00
libpulseaudio,
2024-06-20 23:35:52 -04:00
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 {
# 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
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 {
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
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
'';
fixupPhase =
let
libpath = lib.makeLibraryPath (
[
libGL
glfw
glib
2024-06-20 23:35:52 -04:00
openal
libglvnd
vulkan-loader
2024-06-20 23:35:52 -04:00
]
++ lib.optionals stdenv.hostPlatform.isLinux [
xorg.libX11
xorg.libXxf86vm
xorg.libXext
xorg.libXcursor
xorg.libXrandr
xorg.libXtst
libpulseaudio
wayland
alsa-lib
]
);
in
''
runHook preFixup
2025-06-14 23:06:49 +08:00
makeBinaryWrapper ${hmclJdk}/bin/java $out/bin/hmcl \
2024-06-20 23:35:52 -04: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}"\
2024-06-20 23:35:52 -04:00
''${gappsWrapperArgs[@]}
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";
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";
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
};
})