diff options
| author | Albert O'Shea <[email protected]> | 2025-11-18 17:46:49 +1100 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-11-18 00:46:49 -0600 |
| commit | 5e13527416e183c7ea6d1baa3528b5c30108372e (patch) | |
| tree | 6d839be0118b84974eacc670a93823974787faba /flake.nix | |
| parent | aba94c658f5c0987443196a5e850fdf7293d5006 (diff) | |
| download | opencode-5e13527416e183c7ea6d1baa3528b5c30108372e.tar.gz opencode-5e13527416e183c7ea6d1baa3528b5c30108372e.zip | |
feat: nix support for the nix folks (#3924)
Co-authored-by: opencode <[email protected]>
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
Diffstat (limited to 'flake.nix')
| -rw-r--r-- | flake.nix | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/flake.nix b/flake.nix new file mode 100644 index 000000000..a6614a5dc --- /dev/null +++ b/flake.nix @@ -0,0 +1,107 @@ +{ + description = "OpenCode development flake"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; + }; + + outputs = + { + nixpkgs, + ... + }: + let + systems = [ + "aarch64-linux" + "x86_64-linux" + "aarch64-darwin" + "x86_64-darwin" + ]; + lib = nixpkgs.lib; + forEachSystem = lib.genAttrs systems; + pkgsFor = system: nixpkgs.legacyPackages.${system}; + packageJson = builtins.fromJSON (builtins.readFile ./packages/opencode/package.json); + bunTarget = { + "aarch64-linux" = "bun-linux-arm64"; + "x86_64-linux" = "bun-linux-x64"; + "aarch64-darwin" = "bun-darwin-arm64"; + "x86_64-darwin" = "bun-darwin-x64"; + }; + defaultNodeModules = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="; + hashesFile = "${./nix}/hashes.json"; + hashesData = + if builtins.pathExists hashesFile then builtins.fromJSON (builtins.readFile hashesFile) else { }; + nodeModulesHash = hashesData.nodeModules or defaultNodeModules; + modelsDev = forEachSystem ( + system: + let + pkgs = pkgsFor system; + in + pkgs."models-dev" + ); + in + { + devShells = forEachSystem ( + system: + let + pkgs = pkgsFor system; + in + { + default = pkgs.mkShell { + packages = with pkgs; [ + bun + nodejs_20 + pkg-config + openssl + git + ]; + }; + } + ); + + packages = forEachSystem ( + system: + let + pkgs = pkgsFor system; + mkNodeModules = pkgs.callPackage ./nix/node-modules.nix { + hash = nodeModulesHash; + }; + mkPackage = pkgs.callPackage ./nix/opencode.nix { }; + in + { + default = mkPackage { + version = packageJson.version; + src = ./.; + scripts = ./nix/scripts; + target = bunTarget.${system}; + modelsDev = "${modelsDev.${system}}/dist/_api.json"; + mkNodeModules = mkNodeModules; + }; + } + ); + + apps = forEachSystem ( + system: + let + pkgs = pkgsFor system; + in + { + opencode-dev = { + type = "app"; + meta = { + description = "Nix devshell shell for OpenCode"; + runtimeInputs = [ pkgs.bun ]; + }; + program = "${ + pkgs.writeShellApplication { + name = "opencode-dev"; + text = '' + exec bun run dev "$@" + ''; + } + }/bin/opencode-dev"; + }; + } + ); + }; +} |
