| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- {
- lib,
- stdenvNoCC,
- callPackage,
- bun,
- 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
- installShellFiles
- makeBinaryWrapper
- models-dev
- writableTmpDirAsHomeHook
- ];
- configurePhase = ''
- runHook preConfigure
- cp -R ${finalAttrs.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 = "local";
- 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 dunning 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";
- };
- meta = {
- description = "The open source coding agent";
- homepage = "https://opencode.ai/";
- license = lib.licenses.mit;
- mainProgram = "opencode";
- inherit (node_modules.meta) platforms;
- };
- })
|