{ inputs = { flake-utils.url = "github:numtide/flake-utils"; nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; ocaml.url = "github:nix-ocaml/nix-overlays"; ocaml.inputs.nixpkgs.follows = "nixpkgs"; }; outputs = { self, nixpkgs, ocaml, flake-utils, }: flake-utils.lib.eachDefaultSystem (system: let pkgs = import nixpkgs { inherit system; overlays = [ ocaml.overlays.default (final: prev: { # This ensures we consistently use one version of ocaml packages ocamlPackages = prev.ocaml-ng.ocamlPackages_5_3; }) ]; }; quickjs = pkgs.ocamlPackages.buildDunePackage { name = "quickjs"; pname = "quickjs"; version = "0.1.2"; src = pkgs.fetchFromGitHub { fetchSubmodules = true; owner = "ml-in-barcelona"; repo = "quickjs.ml"; rev = "5c4aa494acdf0f7b83a7b135b4ecd5d086cc1c64"; sha256 = "2rHyfc4Ru5fjuQY5xueJRSXBcVofVvPDagN0sFL7/nY="; }; buildInputs = [pkgs.git]; propagatedBuildInputs = [ pkgs.git pkgs.ocamlPackages.alcotest pkgs.ocamlPackages.integers pkgs.ocamlPackages.ctypes ]; }; server-reason-react = pkgs.ocamlPackages.buildDunePackage { pname = "server-reason-react"; version = "0.4.0"; src = pkgs.fetchFromGitHub { owner = "polwex"; repo = "server-reason-react"; rev = "d5dd436b0a447ff0a82f9a8d7a02f102139299a9"; sha256 = "PsrOqZgdFIy5tGoLpS+hf9uz42vKJZbSvdWRW8MX604="; }; propagatedBuildInputs = with pkgs.ocamlPackages; [ melange ppxlib ocaml_pcre lwt lwt_ppx uri quickjs # yojson uucp ]; nativeBuildInputs = with pkgs.ocamlPackages; [ reason melange # reason-native.refmett ]; }; # lib = pkgs.lib if unavailable gemini-cli = pkgs.callPackage ./gemini.nix { inherit (pkgs) buildNpmPackage fetchFromGitHub fetchNpmDeps cacert curl gnused jq nix-prefetch-github prefetch-npm-deps writeShellApplication ; }; in { devShells.default = pkgs.mkShell rec { packages = [gemini-cli]; buildInputs = nativeBuildInputs ++ (with pkgs.ocamlPackages; [utop]); nativeBuildInputs = with pkgs.ocamlPackages; [ pkgs.openjdk17 pkgs.nodejs pkgs.sqlite pkgs.dune_3 pkgs.ocaml pkgs.opam findlib ocaml-lsp ocamlformat mlx ocamlmerlin-mlx ocamlformat-mlx melange-json-native ppx_rapper ppx_rapper_eio yojson eio_main piaf routes caqti-dynload caqti-driver-postgresql caqti-driver-sqlite3 ppx_expect logs # reason server-reason-react ]; }; }); }