Loading maintainers/maintainer-list.nix +8 −0 Original line number Diff line number Diff line Loading @@ -5944,6 +5944,14 @@ github = "deinferno"; githubId = 14363193; }; delafthi = { name = "Thierry Delafontaine"; email = "delafthi@pm.me"; matrix = "@delafthi:matrix.org"; github = "delafthi"; githubId = 50531499; keys = [ { fingerprint = "6DBB 0BB9 AEE6 2C2A 8059 7E1C 0092 6686 9818 63CB"; } ]; }; delehef = { name = "Franklin Delehelle"; email = "nix@odena.eu"; Loading pkgs/by-name/op/opencode/fix-models-macro.patch 0 → 100644 +8 −0 Original line number Diff line number Diff line --- 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 || '{}'; } pkgs/by-name/op/opencode/package.nix +169 −19 Original line number Diff line number Diff line { lib, fetchFromGitHub, stdenvNoCC, buildGoModule, bun, fetchFromGitHub, fetchurl, nix-update-script, testers, writableTmpDirAsHomeHook, }: buildGoModule (finalAttrs: { let opencode-node-modules-hash = { "aarch64-darwin" = "sha256-uk8HQfHCKTAW54rNHZ1Rr0piZzeJdx6i4o0+xKjfFZs="; "aarch64-linux" = "sha256-gDQh8gfFKl0rAujtos1XsCUnxC2Vjyq9xH5FLZoNW5s="; "x86_64-darwin" = "sha256-H5+qa7vxhwNYRXUo4v8IFUToVXtyXzU3veIqu4idAbU="; "x86_64-linux" = "sha256-1ZxetDrrRdNNOfDOW2uMwMwpEs5S3BLF+SejWcRdtik="; }; bun-target = { "aarch64-darwin" = "bun-darwin-arm64"; "aarch64-linux" = "bun-linux-arm64"; "x86_64-darwin" = "bun-darwin-x64"; "x86_64-linux" = "bun-linux-x64"; }; in stdenvNoCC.mkDerivation (finalAttrs: { pname = "opencode"; version = "0.0.46"; version = "0.2.33"; src = fetchFromGitHub { owner = "opencode-ai"; owner = "sst"; repo = "opencode"; tag = "v${finalAttrs.version}"; hash = "sha256-Q7ArUsFMpe0zayUMBJd+fC1K4jTGElIFep31Qa/L1jY="; hash = "sha256-l/V9YHwuIPN73ieMT++enL1O5vecA9L0qBDGr8eRVxY="; }; vendorHash = "sha256-MVpluFTF/2S6tRQQAXE3ujskQZ3njBkfve0RQgk3IkQ="; tui = buildGoModule { pname = "opencode-tui"; inherit (finalAttrs) version; src = "${finalAttrs.src}/packages/tui"; checkFlags = let skippedTests = [ # permission denied "TestBashTool_Run" "TestSourcegraphTool_Run" "TestLsTool_Run" vendorHash = "sha256-0vf4fOk32BLF9/904W8g+5m0vpe6i6tUFRXqDHVcMIQ="; subPackages = [ "cmd/opencode" ]; env.CGO_ENABLED = 0; ldflags = [ "-s" "-X=main.Version=${finalAttrs.version}" ]; in [ "-skip=^${lib.concatStringsSep "$|^" skippedTests}$" ]; installPhase = '' runHook preInstall install -Dm755 $GOPATH/bin/opencode $out/bin/tui runHook postInstall ''; }; node_modules = stdenvNoCC.mkDerivation { pname = "opencode-node_modules"; inherit (finalAttrs) version src; impureEnvVars = lib.fetchers.proxyImpureEnvVars ++ [ "GIT_PROXY_COMMAND" "SOCKS_SERVER" ]; nativeBuildInputs = [ bun writableTmpDirAsHomeHook ]; dontConfigure = true; buildPhase = '' runHook preBuild export BUN_INSTALL_CACHE_DIR=$(mktemp -d) bun install \ --filter=opencode \ --force \ --frozen-lockfile \ --no-progress runHook postBuild ''; installPhase = '' runHook preInstall mkdir -p $out/node_modules cp -R ./node_modules $out runHook postInstall ''; # Required else we get errors that our fixed-output derivation references store paths dontFixup = true; outputHash = opencode-node-modules-hash.${stdenvNoCC.hostPlatform.system}; outputHashAlgo = "sha256"; outputHashMode = "recursive"; }; models-dev-data = fetchurl { url = "https://models.dev/api.json"; sha256 = "sha256-igxQOC+Hz2FnXIW/S4Px9WhRuBhcIQIHO+7U8jHU1TQ="; }; nativeBuildInputs = [ bun ]; 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 ]; configurePhase = '' runHook preConfigure cp -R ${finalAttrs.node_modules}/node_modules . runHook postConfigure ''; buildPhase = '' runHook preBuild export MODELS_JSON="$(cat ${finalAttrs.models-dev-data})" bun build \ --define OPENCODE_VERSION="'${finalAttrs.version}'" \ --compile \ --minify \ --target=${bun-target.${stdenvNoCC.hostPlatform.system}} \ --outfile=opencode \ ./packages/opencode/src/index.ts \ ${finalAttrs.tui}/bin/tui runHook postBuild ''; dontStrip = true; installPhase = '' runHook preInstall install -Dm755 opencode $out/bin/opencode runHook postInstall ''; passthru = { tests.version = testers.testVersion { package = finalAttrs.finalPackage; command = "HOME=$(mktemp -d) opencode --version"; inherit (finalAttrs) version; }; updateScript = nix-update-script { extraArgs = [ "--subpackage" "tui" "--subpackage" "node_modules" "--subpackage" "models-dev-data" ]; }; }; meta = { description = "Powerful terminal-based AI assistant providing intelligent coding assistance"; homepage = "https://github.com/opencode-ai/opencode"; mainProgram = "opencode"; description = "AI coding agent built for the terminal"; longDescription = '' OpenCode is a terminal-based agent that can build anything. It combines a TypeScript/JavaScript core with a Go-based TUI to provide an interactive AI coding experience. ''; homepage = "https://github.com/sst/opencode"; license = lib.licenses.mit; platforms = lib.platforms.unix; maintainers = with lib.maintainers; [ zestsystem delafthi ]; mainProgram = "opencode"; }; }) Loading
maintainers/maintainer-list.nix +8 −0 Original line number Diff line number Diff line Loading @@ -5944,6 +5944,14 @@ github = "deinferno"; githubId = 14363193; }; delafthi = { name = "Thierry Delafontaine"; email = "delafthi@pm.me"; matrix = "@delafthi:matrix.org"; github = "delafthi"; githubId = 50531499; keys = [ { fingerprint = "6DBB 0BB9 AEE6 2C2A 8059 7E1C 0092 6686 9818 63CB"; } ]; }; delehef = { name = "Franklin Delehelle"; email = "nix@odena.eu"; Loading
pkgs/by-name/op/opencode/fix-models-macro.patch 0 → 100644 +8 −0 Original line number Diff line number Diff line --- 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 || '{}'; }
pkgs/by-name/op/opencode/package.nix +169 −19 Original line number Diff line number Diff line { lib, fetchFromGitHub, stdenvNoCC, buildGoModule, bun, fetchFromGitHub, fetchurl, nix-update-script, testers, writableTmpDirAsHomeHook, }: buildGoModule (finalAttrs: { let opencode-node-modules-hash = { "aarch64-darwin" = "sha256-uk8HQfHCKTAW54rNHZ1Rr0piZzeJdx6i4o0+xKjfFZs="; "aarch64-linux" = "sha256-gDQh8gfFKl0rAujtos1XsCUnxC2Vjyq9xH5FLZoNW5s="; "x86_64-darwin" = "sha256-H5+qa7vxhwNYRXUo4v8IFUToVXtyXzU3veIqu4idAbU="; "x86_64-linux" = "sha256-1ZxetDrrRdNNOfDOW2uMwMwpEs5S3BLF+SejWcRdtik="; }; bun-target = { "aarch64-darwin" = "bun-darwin-arm64"; "aarch64-linux" = "bun-linux-arm64"; "x86_64-darwin" = "bun-darwin-x64"; "x86_64-linux" = "bun-linux-x64"; }; in stdenvNoCC.mkDerivation (finalAttrs: { pname = "opencode"; version = "0.0.46"; version = "0.2.33"; src = fetchFromGitHub { owner = "opencode-ai"; owner = "sst"; repo = "opencode"; tag = "v${finalAttrs.version}"; hash = "sha256-Q7ArUsFMpe0zayUMBJd+fC1K4jTGElIFep31Qa/L1jY="; hash = "sha256-l/V9YHwuIPN73ieMT++enL1O5vecA9L0qBDGr8eRVxY="; }; vendorHash = "sha256-MVpluFTF/2S6tRQQAXE3ujskQZ3njBkfve0RQgk3IkQ="; tui = buildGoModule { pname = "opencode-tui"; inherit (finalAttrs) version; src = "${finalAttrs.src}/packages/tui"; checkFlags = let skippedTests = [ # permission denied "TestBashTool_Run" "TestSourcegraphTool_Run" "TestLsTool_Run" vendorHash = "sha256-0vf4fOk32BLF9/904W8g+5m0vpe6i6tUFRXqDHVcMIQ="; subPackages = [ "cmd/opencode" ]; env.CGO_ENABLED = 0; ldflags = [ "-s" "-X=main.Version=${finalAttrs.version}" ]; in [ "-skip=^${lib.concatStringsSep "$|^" skippedTests}$" ]; installPhase = '' runHook preInstall install -Dm755 $GOPATH/bin/opencode $out/bin/tui runHook postInstall ''; }; node_modules = stdenvNoCC.mkDerivation { pname = "opencode-node_modules"; inherit (finalAttrs) version src; impureEnvVars = lib.fetchers.proxyImpureEnvVars ++ [ "GIT_PROXY_COMMAND" "SOCKS_SERVER" ]; nativeBuildInputs = [ bun writableTmpDirAsHomeHook ]; dontConfigure = true; buildPhase = '' runHook preBuild export BUN_INSTALL_CACHE_DIR=$(mktemp -d) bun install \ --filter=opencode \ --force \ --frozen-lockfile \ --no-progress runHook postBuild ''; installPhase = '' runHook preInstall mkdir -p $out/node_modules cp -R ./node_modules $out runHook postInstall ''; # Required else we get errors that our fixed-output derivation references store paths dontFixup = true; outputHash = opencode-node-modules-hash.${stdenvNoCC.hostPlatform.system}; outputHashAlgo = "sha256"; outputHashMode = "recursive"; }; models-dev-data = fetchurl { url = "https://models.dev/api.json"; sha256 = "sha256-igxQOC+Hz2FnXIW/S4Px9WhRuBhcIQIHO+7U8jHU1TQ="; }; nativeBuildInputs = [ bun ]; 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 ]; configurePhase = '' runHook preConfigure cp -R ${finalAttrs.node_modules}/node_modules . runHook postConfigure ''; buildPhase = '' runHook preBuild export MODELS_JSON="$(cat ${finalAttrs.models-dev-data})" bun build \ --define OPENCODE_VERSION="'${finalAttrs.version}'" \ --compile \ --minify \ --target=${bun-target.${stdenvNoCC.hostPlatform.system}} \ --outfile=opencode \ ./packages/opencode/src/index.ts \ ${finalAttrs.tui}/bin/tui runHook postBuild ''; dontStrip = true; installPhase = '' runHook preInstall install -Dm755 opencode $out/bin/opencode runHook postInstall ''; passthru = { tests.version = testers.testVersion { package = finalAttrs.finalPackage; command = "HOME=$(mktemp -d) opencode --version"; inherit (finalAttrs) version; }; updateScript = nix-update-script { extraArgs = [ "--subpackage" "tui" "--subpackage" "node_modules" "--subpackage" "models-dev-data" ]; }; }; meta = { description = "Powerful terminal-based AI assistant providing intelligent coding assistance"; homepage = "https://github.com/opencode-ai/opencode"; mainProgram = "opencode"; description = "AI coding agent built for the terminal"; longDescription = '' OpenCode is a terminal-based agent that can build anything. It combines a TypeScript/JavaScript core with a Go-based TUI to provide an interactive AI coding experience. ''; homepage = "https://github.com/sst/opencode"; license = lib.licenses.mit; platforms = lib.platforms.unix; maintainers = with lib.maintainers; [ zestsystem delafthi ]; mainProgram = "opencode"; }; })