summaryrefslogtreecommitdiffhomepage
path: root/flake.nix
diff options
context:
space:
mode:
Diffstat (limited to 'flake.nix')
-rw-r--r--flake.nix107
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";
+ };
+ }
+ );
+ };
+}