From a317d6f6cea9f791324b21f7e9c586d0475e9f8b Mon Sep 17 00:00:00 2001 From: Thierry Delafontaine Date: Fri, 11 Jul 2025 20:46:56 +0200 Subject: [PATCH] opencode: use `models-dev` package instead of fetching from online api - Added `models-dev` to `nativeBuildInputs`. - Removed the old patch that fetched data from a remote URL and introduced a new patch to read from a local file if a path is provided via the `MODELS_DEV_API_JSON` environment variable. --- .../op/opencode/fix-models-macro.patch | 8 ------- .../op/opencode/local-models-dev.patch | 20 ++++++++++++++++++ pkgs/by-name/op/opencode/package.nix | 21 +++++++++---------- 3 files changed, 30 insertions(+), 19 deletions(-) delete mode 100644 pkgs/by-name/op/opencode/fix-models-macro.patch create mode 100644 pkgs/by-name/op/opencode/local-models-dev.patch diff --git a/pkgs/by-name/op/opencode/fix-models-macro.patch b/pkgs/by-name/op/opencode/fix-models-macro.patch deleted file mode 100644 index 662ee617de83..000000000000 --- a/pkgs/by-name/op/opencode/fix-models-macro.patch +++ /dev/null @@ -1,8 +0,0 @@ ---- a/packages/opencode/src/provider/models-macro.ts -+++ b/packages/opencode/src/provider/models-macro.ts -@@ -1,4 +1,3 @@ - export async function data() { -- const json = await fetch("https://models.dev/api.json").then((x) => x.text()) -- return json -+ return process.env.MODELS_JSON || '{}'; - } diff --git a/pkgs/by-name/op/opencode/local-models-dev.patch b/pkgs/by-name/op/opencode/local-models-dev.patch new file mode 100644 index 000000000000..21ecd38fb0c8 --- /dev/null +++ b/pkgs/by-name/op/opencode/local-models-dev.patch @@ -0,0 +1,20 @@ +diff --git i/packages/opencode/src/provider/models-macro.ts w/packages/opencode/src/provider/models-macro.ts +index 91a0348..4f60069 100644 +--- i/packages/opencode/src/provider/models-macro.ts ++++ w/packages/opencode/src/provider/models-macro.ts +@@ -1,4 +1,15 @@ + export async function data() { ++ const localApiJsonPath = process.env.MODELS_DEV_API_JSON ++ ++ // Try to read from local file if path is provided ++ if (localApiJsonPath) { ++ const localFile = Bun.file(localApiJsonPath) ++ if (await localFile.exists()) { ++ return await localFile.text() ++ } ++ } ++ ++ // Fallback to fetching from remote URL + const json = await fetch("https://models.dev/api.json").then((x) => x.text()) + return json + } diff --git a/pkgs/by-name/op/opencode/package.nix b/pkgs/by-name/op/opencode/package.nix index 712e796f75f0..369e524cbbd0 100644 --- a/pkgs/by-name/op/opencode/package.nix +++ b/pkgs/by-name/op/opencode/package.nix @@ -4,7 +4,7 @@ buildGoModule, bun, fetchFromGitHub, - fetchurl, + models-dev, nix-update-script, testers, writableTmpDirAsHomeHook, @@ -106,17 +106,15 @@ stdenvNoCC.mkDerivation (finalAttrs: { outputHashMode = "recursive"; }; - models-dev-data = fetchurl { - url = "https://models.dev/api.json"; - sha256 = "sha256-igxQOC+Hz2FnXIW/S4Px9WhRuBhcIQIHO+7U8jHU1TQ="; - }; - - nativeBuildInputs = [ bun ]; + nativeBuildInputs = [ + bun + models-dev + ]; patches = [ - # Patch `packages/opencode/src/provider/models-macro.ts` to load the prefetched `models.dev/api.json` - # from the `MODELS_JSON` environment variable instead of fetching it at build time. - ./fix-models-macro.patch + # Patch `packages/opencode/src/provider/models-macro.ts` to get contents of + # `api.json` from the file bundled with `bun build`. + ./local-models-dev.patch ]; configurePhase = '' @@ -127,10 +125,11 @@ stdenvNoCC.mkDerivation (finalAttrs: { runHook postConfigure ''; + env.MODELS_DEV_API_JSON = "${models-dev}/dist/api.json"; + buildPhase = '' runHook preBuild - export MODELS_JSON="$(cat ${finalAttrs.models-dev-data})" bun build \ --define OPENCODE_VERSION="'${finalAttrs.version}'" \ --compile \