Download nix/opencode.nix from SaylorTwift/opencode: direct link, hf CLI and curl.
- Browser
- Download file 2.8 kB
-
https://huggingface.co/SaylorTwift/opencode/resolve/main/nix/opencode.nix
- Command line
-
hf download hf://SaylorTwift/opencode/nix/opencode.nix
-
curl -L -o opencode.nix https://huggingface.co/SaylorTwift/opencode/resolve/main/nix/opencode.nix
2.8 kB
| { | |
| lib, | |
| stdenvNoCC, | |
| callPackage, | |
| bun, | |
| nodejs, | |
| sysctl, | |
| makeBinaryWrapper, | |
| models-dev, | |
| ripgrep, | |
| installShellFiles, | |
| versionCheckHook, | |
| writableTmpDirAsHomeHook, | |
| node_modules ? callPackage ./node-modules.nix { }, | |
| }: | |
| stdenvNoCC.mkDerivation (finalAttrs: { | |
| pname = "opencode"; | |
| inherit (node_modules) version src; | |
| inherit node_modules; | |
| nativeBuildInputs = [ | |
| bun | |
| nodejs # for patchShebangs node_modules | |
| installShellFiles | |
| makeBinaryWrapper | |
| models-dev | |
| writableTmpDirAsHomeHook | |
| ]; | |
| postPatch = '' | |
| # NOTE: Relax Bun version check to be a warning instead of an error | |
| substituteInPlace packages/script/src/index.ts \ | |
| --replace-fail 'throw new Error(`This script requires bun@''${expectedBunVersionRange}' \ | |
| 'console.warn(`Warning: This script requires bun@''${expectedBunVersionRange}' | |
| ''; | |
| configurePhase = '' | |
| runHook preConfigure | |
| cp -R ${finalAttrs.node_modules}/. . | |
| patchShebangs node_modules | |
| patchShebangs packages/*/node_modules | |
| runHook postConfigure | |
| ''; | |
| env.MODELS_DEV_API_JSON = "${models-dev}/dist/_api.json"; | |
| env.OPENCODE_DISABLE_MODELS_FETCH = true; | |
| env.OPENCODE_VERSION = finalAttrs.version; | |
| env.OPENCODE_CHANNEL = "prod"; | |
| buildPhase = '' | |
| runHook preBuild | |
| cd ./packages/opencode | |
| bun --bun ./script/build.ts --single --skip-install | |
| bun --bun ./script/schema.ts schema.json | |
| runHook postBuild | |
| ''; | |
| installPhase = '' | |
| runHook preInstall | |
| install -Dm755 dist/opencode-*/bin/opencode $out/bin/opencode | |
| install -Dm644 schema.json $out/share/opencode/schema.json | |
| wrapProgram $out/bin/opencode \ | |
| --prefix PATH : ${ | |
| lib.makeBinPath ( | |
| [ | |
| ripgrep | |
| ] | |
| # bun runs sysctl to detect if running on rosetta2 | |
| ++ lib.optional stdenvNoCC.hostPlatform.isDarwin sysctl | |
| ) | |
| } | |
| runHook postInstall | |
| ''; | |
| postInstall = lib.optionalString (stdenvNoCC.buildPlatform.canExecute stdenvNoCC.hostPlatform) '' | |
| # trick yargs into also generating zsh completions | |
| installShellCompletion --cmd opencode \ | |
| --bash <($out/bin/opencode completion) \ | |
| --zsh <(SHELL=/bin/zsh $out/bin/opencode completion) | |
| ''; | |
| nativeInstallCheckInputs = [ | |
| versionCheckHook | |
| writableTmpDirAsHomeHook | |
| ]; | |
| doInstallCheck = true; | |
| versionCheckKeepEnvironment = [ "HOME" "OPENCODE_DISABLE_MODELS_FETCH" ]; | |
| versionCheckProgramArg = "--version"; | |
| passthru = { | |
| jsonschema = "${placeholder "out"}/share/opencode/schema.json"; | |
| env = finalAttrs.env; | |
| }; | |
| meta = { | |
| description = "The open source coding agent"; | |
| homepage = "https://opencode.ai"; | |
| license = lib.licenses.mit; | |
| mainProgram = "opencode"; | |
| inherit (node_modules.meta) platforms; | |
| }; | |
| }) | |