Loading pkgs/by-name/hm/hmcl/0001-nix-use-terracotta-from-nix.patch 0 → 100644 +52 −0 Original line number Diff line number Diff line From ff7e9316ae220c002cc6d3cced0ae0786bcd0392 Mon Sep 17 00:00:00 2001 From: Moraxyc <i@qaq.li> Date: Wed, 4 Feb 2026 15:36:17 +0800 Subject: [PATCH 1/2] nix: use terracotta from nix --- .../hmcl/terracotta/TerracottaBundle.java | 21 +++---------------- 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaBundle.java b/HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaBundle.java index 727edde9b..5b6e8b02f 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaBundle.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaBundle.java @@ -139,26 +139,11 @@ public final class TerracottaBundle { } public Path locate(String file) { - FileDownloadTask.IntegrityCheck check = files.get(file); - if (check == null) { - throw new AssertionError(String.format("Expecting %s file in terracotta bundle.", file)); - } - return root.resolve(file).toAbsolutePath(); + return Path.of("@TERRACOTTA_BIN@"); } public AbstractTerracottaProvider.Status status() throws IOException { - if (Files.exists(root) && isLocalBundleValid()) { - return AbstractTerracottaProvider.Status.READY; - } - - try { - if (TerracottaMetadata.hasLegacyVersionFiles()) { - return AbstractTerracottaProvider.Status.LEGACY_VERSION; - } - } catch (IOException e) { - Logger.LOG.warning("Cannot determine whether legacy versions exist.", e); - } - return AbstractTerracottaProvider.Status.NOT_EXIST; + return AbstractTerracottaProvider.Status.READY; } private boolean isLocalBundleValid() throws IOException { // FIXME: Make control flow clearer. @@ -188,4 +173,4 @@ public final class TerracottaBundle { } return true; } -} +} \ No newline at end of file -- 2.52.0 pkgs/by-name/hm/hmcl/0003-nix-skip-terracotta-existence-check-on-darwin.patch→pkgs/by-name/hm/hmcl/0002-nix-skip-terracotta-existence-check-on-darwin.patch +9 −9 Original line number Diff line number Diff line From bcf95a23380424f2ca82649d93e9e0bdf8274b74 Mon Sep 17 00:00:00 2001 From 110289f39d01713de5f8cd1e7146a36de8c35308 Mon Sep 17 00:00:00 2001 From: Moraxyc <i@qaq.li> Date: Fri, 31 Oct 2025 14:23:54 +0800 Subject: [PATCH 3/3] nix: skip terracotta existence check on darwin Date: Wed, 4 Feb 2026 15:40:50 +0800 Subject: [PATCH 2/2] nix: skip terracotta existence check on darwin --- .../org/jackhuang/hmcl/terracotta/provider/MacOSProvider.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/terracotta/provider/MacOSProvider.java b/HMCL/src/main/java/org/jackhuang/hmcl/terracotta/provider/MacOSProvider.java index 00626f8b6..59125962d 100644 index 83debfc0a..fd4f851a7 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/terracotta/provider/MacOSProvider.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/terracotta/provider/MacOSProvider.java @@ -45,10 +45,6 @@ public final class MacOSProvider implements ITerracottaProvider { public Status status() throws IOException { assert binary != null; @@ -44,10 +44,6 @@ public final class MacOSProvider extends AbstractTerracottaProvider { @Override public Status status() throws IOException { - if (!Files.exists(Path.of("/Applications/terracotta.app"))) { - return Status.NOT_EXIST; - } - return binary.status(); return bundle.status(); } -- 2.51.0 2.52.0 pkgs/by-name/hm/hmcl/0002-nix-use-terracotta-from-nix.patchdeleted 100644 → 0 +0 −43 Original line number Diff line number Diff line From 541d055bf55703aa9e2c5a5e04a397f1d25efe28 Mon Sep 17 00:00:00 2001 From: Moraxyc <i@qaq.li> Date: Wed, 29 Oct 2025 00:09:56 +0800 Subject: [PATCH 2/3] nix: use terracotta from nix --- .../org/jackhuang/hmcl/terracotta/TerracottaNative.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaNative.java b/HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaNative.java index 079537978..68954b09e 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaNative.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaNative.java @@ -47,7 +47,7 @@ public final class TerracottaNative { public TerracottaNative(List<URI> links, Path path, FileDownloadTask.IntegrityCheck checking) { this.links = links; - this.path = path; + this.path = Path.of("@TERRACOTTA_BIN@"); this.checking = checking; } @@ -130,9 +130,7 @@ public final class TerracottaNative { public ITerracottaProvider.Status status() throws IOException { if (Files.exists(path)) { - if (DigestUtils.digestToString(checking.getAlgorithm(), path).equalsIgnoreCase(checking.getChecksum())) { - return ITerracottaProvider.Status.READY; - } + return ITerracottaProvider.Status.READY; } try { @@ -144,4 +142,4 @@ public final class TerracottaNative { } return ITerracottaProvider.Status.NOT_EXIST; } -} +} \ No newline at end of file -- 2.51.0 pkgs/by-name/hm/hmcl/package.nix +12 −12 Original line number Diff line number Diff line Loading @@ -45,13 +45,13 @@ }: stdenv.mkDerivation (finalAttrs: { pname = "hmcl"; version = "3.9.2"; version = "3.10.2"; 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/v${finalAttrs.version}/HMCL-${finalAttrs.version}.jar"; hash = "sha256-/thuAsPadixV2vkez3w9yhkDdpJra54WkhFYaeKH0GU="; hash = "sha256-tmQN0kSjm8oU36ENHhgA649IohdG4ZDHyEaMPscd3nQ="; }; # - HMCL prompts users to download prebuilt Terracotta binary for Loading @@ -63,38 +63,38 @@ stdenv.mkDerivation (finalAttrs: { # Terracotta downloads, package them into a patch jar that overrides # the original classes, and have it load the original jar. This preserves # the original jar’s integrity check and avoids modifying the upstream jar. terracottaNativeJava = fetchurl { name = "hmcl-terracotta-native-java-${finalAttrs.version}"; url = "https://raw.githubusercontent.com/HMCL-dev/HMCL/v${finalAttrs.version}/${finalAttrs.terracottaNativeJavaPath}"; hash = "sha256-sg8gBOMNdITmHeYByYriYp05ja1vtWPF/wuqdGmkgiA="; terracottaBundleJava = fetchurl { name = "hmcl-terracotta-bundle-java-${finalAttrs.version}"; url = "https://raw.githubusercontent.com/HMCL-dev/HMCL/v${finalAttrs.version}/${finalAttrs.terracottaBundleJavaPath}"; hash = "sha256-QXjo/NiYQyJfan15hnvJlBir9s9R6H+jHsr+K9M1oTw="; }; macOSProviderJava = fetchurl { name = "hmcl-macos-provider-java-${finalAttrs.version}"; url = "https://raw.githubusercontent.com/HMCL-dev/HMCL/v${finalAttrs.version}/${finalAttrs.macOSProviderJavaPath}"; hash = "sha256-V8FNPPkq6/P3/HKcqKkAy6Ya1kUI3oEMfjEc8XdExgo="; hash = "sha256-+Zji2B8ksT7P+IObyrM9q7vHPJVl5ZtH+v/J8Mfr0Q4="; }; terracottaNativeJavaPath = "HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaNative.java"; terracottaBundleJavaPath = "HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaBundle.java"; macOSProviderJavaPath = "HMCL/src/main/java/org/jackhuang/hmcl/terracotta/provider/MacOSProvider.java"; dontUnpack = true; prePatch = '' install -Dm644 $terracottaNativeJava $terracottaNativeJavaPath install -Dm644 $terracottaBundleJava $terracottaBundleJavaPath install -Dm644 $macOSProviderJava $macOSProviderJavaPath ''; patches = [ (replaceVars ./0002-nix-use-terracotta-from-nix.patch { (replaceVars ./0001-nix-use-terracotta-from-nix.patch { TERRACOTTA_BIN = lib.getExe terracotta; }) ./0003-nix-skip-terracotta-existence-check-on-darwin.patch ./0002-nix-skip-terracotta-existence-check-on-darwin.patch ]; buildPhase = '' runHook preBuild # Build only classes we modified javac -cp $src -d out $terracottaNativeJavaPath $macOSProviderJavaPath javac -cp $src -d out $terracottaBundleJavaPath $macOSProviderJavaPath # Extract MANIFEST.MF from original jar # We need Main-Class, Add-Opens, etc Loading pkgs/by-name/hm/hmcl/update.nix +1 −1 Original line number Diff line number Diff line Loading @@ -35,7 +35,7 @@ writeShellApplication { fi nix-update hmcl --version="$version" update-source-version hmcl --source-key=terracottaNativeJava --ignore-same-version update-source-version hmcl --source-key=terracottaBundleJava --ignore-same-version update-source-version hmcl --source-key=macOSProviderJava --ignore-same-version ''; } Loading
pkgs/by-name/hm/hmcl/0001-nix-use-terracotta-from-nix.patch 0 → 100644 +52 −0 Original line number Diff line number Diff line From ff7e9316ae220c002cc6d3cced0ae0786bcd0392 Mon Sep 17 00:00:00 2001 From: Moraxyc <i@qaq.li> Date: Wed, 4 Feb 2026 15:36:17 +0800 Subject: [PATCH 1/2] nix: use terracotta from nix --- .../hmcl/terracotta/TerracottaBundle.java | 21 +++---------------- 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaBundle.java b/HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaBundle.java index 727edde9b..5b6e8b02f 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaBundle.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaBundle.java @@ -139,26 +139,11 @@ public final class TerracottaBundle { } public Path locate(String file) { - FileDownloadTask.IntegrityCheck check = files.get(file); - if (check == null) { - throw new AssertionError(String.format("Expecting %s file in terracotta bundle.", file)); - } - return root.resolve(file).toAbsolutePath(); + return Path.of("@TERRACOTTA_BIN@"); } public AbstractTerracottaProvider.Status status() throws IOException { - if (Files.exists(root) && isLocalBundleValid()) { - return AbstractTerracottaProvider.Status.READY; - } - - try { - if (TerracottaMetadata.hasLegacyVersionFiles()) { - return AbstractTerracottaProvider.Status.LEGACY_VERSION; - } - } catch (IOException e) { - Logger.LOG.warning("Cannot determine whether legacy versions exist.", e); - } - return AbstractTerracottaProvider.Status.NOT_EXIST; + return AbstractTerracottaProvider.Status.READY; } private boolean isLocalBundleValid() throws IOException { // FIXME: Make control flow clearer. @@ -188,4 +173,4 @@ public final class TerracottaBundle { } return true; } -} +} \ No newline at end of file -- 2.52.0
pkgs/by-name/hm/hmcl/0003-nix-skip-terracotta-existence-check-on-darwin.patch→pkgs/by-name/hm/hmcl/0002-nix-skip-terracotta-existence-check-on-darwin.patch +9 −9 Original line number Diff line number Diff line From bcf95a23380424f2ca82649d93e9e0bdf8274b74 Mon Sep 17 00:00:00 2001 From 110289f39d01713de5f8cd1e7146a36de8c35308 Mon Sep 17 00:00:00 2001 From: Moraxyc <i@qaq.li> Date: Fri, 31 Oct 2025 14:23:54 +0800 Subject: [PATCH 3/3] nix: skip terracotta existence check on darwin Date: Wed, 4 Feb 2026 15:40:50 +0800 Subject: [PATCH 2/2] nix: skip terracotta existence check on darwin --- .../org/jackhuang/hmcl/terracotta/provider/MacOSProvider.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/terracotta/provider/MacOSProvider.java b/HMCL/src/main/java/org/jackhuang/hmcl/terracotta/provider/MacOSProvider.java index 00626f8b6..59125962d 100644 index 83debfc0a..fd4f851a7 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/terracotta/provider/MacOSProvider.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/terracotta/provider/MacOSProvider.java @@ -45,10 +45,6 @@ public final class MacOSProvider implements ITerracottaProvider { public Status status() throws IOException { assert binary != null; @@ -44,10 +44,6 @@ public final class MacOSProvider extends AbstractTerracottaProvider { @Override public Status status() throws IOException { - if (!Files.exists(Path.of("/Applications/terracotta.app"))) { - return Status.NOT_EXIST; - } - return binary.status(); return bundle.status(); } -- 2.51.0 2.52.0
pkgs/by-name/hm/hmcl/0002-nix-use-terracotta-from-nix.patchdeleted 100644 → 0 +0 −43 Original line number Diff line number Diff line From 541d055bf55703aa9e2c5a5e04a397f1d25efe28 Mon Sep 17 00:00:00 2001 From: Moraxyc <i@qaq.li> Date: Wed, 29 Oct 2025 00:09:56 +0800 Subject: [PATCH 2/3] nix: use terracotta from nix --- .../org/jackhuang/hmcl/terracotta/TerracottaNative.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaNative.java b/HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaNative.java index 079537978..68954b09e 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaNative.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaNative.java @@ -47,7 +47,7 @@ public final class TerracottaNative { public TerracottaNative(List<URI> links, Path path, FileDownloadTask.IntegrityCheck checking) { this.links = links; - this.path = path; + this.path = Path.of("@TERRACOTTA_BIN@"); this.checking = checking; } @@ -130,9 +130,7 @@ public final class TerracottaNative { public ITerracottaProvider.Status status() throws IOException { if (Files.exists(path)) { - if (DigestUtils.digestToString(checking.getAlgorithm(), path).equalsIgnoreCase(checking.getChecksum())) { - return ITerracottaProvider.Status.READY; - } + return ITerracottaProvider.Status.READY; } try { @@ -144,4 +142,4 @@ public final class TerracottaNative { } return ITerracottaProvider.Status.NOT_EXIST; } -} +} \ No newline at end of file -- 2.51.0
pkgs/by-name/hm/hmcl/package.nix +12 −12 Original line number Diff line number Diff line Loading @@ -45,13 +45,13 @@ }: stdenv.mkDerivation (finalAttrs: { pname = "hmcl"; version = "3.9.2"; version = "3.10.2"; 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/v${finalAttrs.version}/HMCL-${finalAttrs.version}.jar"; hash = "sha256-/thuAsPadixV2vkez3w9yhkDdpJra54WkhFYaeKH0GU="; hash = "sha256-tmQN0kSjm8oU36ENHhgA649IohdG4ZDHyEaMPscd3nQ="; }; # - HMCL prompts users to download prebuilt Terracotta binary for Loading @@ -63,38 +63,38 @@ stdenv.mkDerivation (finalAttrs: { # Terracotta downloads, package them into a patch jar that overrides # the original classes, and have it load the original jar. This preserves # the original jar’s integrity check and avoids modifying the upstream jar. terracottaNativeJava = fetchurl { name = "hmcl-terracotta-native-java-${finalAttrs.version}"; url = "https://raw.githubusercontent.com/HMCL-dev/HMCL/v${finalAttrs.version}/${finalAttrs.terracottaNativeJavaPath}"; hash = "sha256-sg8gBOMNdITmHeYByYriYp05ja1vtWPF/wuqdGmkgiA="; terracottaBundleJava = fetchurl { name = "hmcl-terracotta-bundle-java-${finalAttrs.version}"; url = "https://raw.githubusercontent.com/HMCL-dev/HMCL/v${finalAttrs.version}/${finalAttrs.terracottaBundleJavaPath}"; hash = "sha256-QXjo/NiYQyJfan15hnvJlBir9s9R6H+jHsr+K9M1oTw="; }; macOSProviderJava = fetchurl { name = "hmcl-macos-provider-java-${finalAttrs.version}"; url = "https://raw.githubusercontent.com/HMCL-dev/HMCL/v${finalAttrs.version}/${finalAttrs.macOSProviderJavaPath}"; hash = "sha256-V8FNPPkq6/P3/HKcqKkAy6Ya1kUI3oEMfjEc8XdExgo="; hash = "sha256-+Zji2B8ksT7P+IObyrM9q7vHPJVl5ZtH+v/J8Mfr0Q4="; }; terracottaNativeJavaPath = "HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaNative.java"; terracottaBundleJavaPath = "HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaBundle.java"; macOSProviderJavaPath = "HMCL/src/main/java/org/jackhuang/hmcl/terracotta/provider/MacOSProvider.java"; dontUnpack = true; prePatch = '' install -Dm644 $terracottaNativeJava $terracottaNativeJavaPath install -Dm644 $terracottaBundleJava $terracottaBundleJavaPath install -Dm644 $macOSProviderJava $macOSProviderJavaPath ''; patches = [ (replaceVars ./0002-nix-use-terracotta-from-nix.patch { (replaceVars ./0001-nix-use-terracotta-from-nix.patch { TERRACOTTA_BIN = lib.getExe terracotta; }) ./0003-nix-skip-terracotta-existence-check-on-darwin.patch ./0002-nix-skip-terracotta-existence-check-on-darwin.patch ]; buildPhase = '' runHook preBuild # Build only classes we modified javac -cp $src -d out $terracottaNativeJavaPath $macOSProviderJavaPath javac -cp $src -d out $terracottaBundleJavaPath $macOSProviderJavaPath # Extract MANIFEST.MF from original jar # We need Main-Class, Add-Opens, etc Loading
pkgs/by-name/hm/hmcl/update.nix +1 −1 Original line number Diff line number Diff line Loading @@ -35,7 +35,7 @@ writeShellApplication { fi nix-update hmcl --version="$version" update-source-version hmcl --source-key=terracottaNativeJava --ignore-same-version update-source-version hmcl --source-key=terracottaBundleJava --ignore-same-version update-source-version hmcl --source-key=macOSProviderJava --ignore-same-version ''; }