{ 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"; # it's broken wtf # lsp.url = "github:ocaml/ocaml-lsp"; # lsp.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; ocaml = prev.ocaml-ng.ocamlPackages_5_3.ocaml; }) ]; }; # https://github.com/ahrefs/ocaml-murmur3.git murmur = pkgs.ocamlPackages.buildDunePackage { pname = "murmur3"; version = "0.4"; src = pkgs.fetchFromGitHub { owner = "polwex"; repo = "ocaml-murmur3"; rev = "be8ef049b515ccc1adc7393975e0f4a12a95dcb0"; sha256 = "oojBUIo8YIzVxAau4jwToYinemuDKYwaX+2OaZ28mW0="; }; }; in { devShells.default = pkgs.mkShell rec { buildInputs = nativeBuildInputs ++ (with pkgs.ocamlPackages; [utop]); nativeBuildInputs = with pkgs.ocamlPackages; [ pkgs.zig_0_14 pkgs.sqlite pkgs.dune_3 pkgs.ocaml (pkgs.python312.withPackages (py: [py.requests])) pkgs.opam findlib ocamlformat # zarith cmdliner logs alcotest qcheck qcheck-alcotest landmarks ctypes ctypes-foreign # ocaml-lsp eio_main lmdb domainslib # http server piaf murmur ]; }; }); }