default.nix
with import <nixpkgs> {};
let h2-lwt = ocamlPackages.buildDunePackage rec {
pname = "h2-lwt";
version = "0.12.0";
src = pkgs.fetchurl {
url = "https://github.com/anmonteiro/ocaml-h2/releases/download/0.12.0/h2-0.12.0.tbz";
sha256 = "sha256-NuQLET2Q6jg2GajHvZk/hmExw8XZV2GbaEnrMq+MU8Y=";
};
propagatedBuildInputs = with pkgs; [
h2
ocamlPackages.faraday-async
ocamlPackages.gluten-lwt
ocamlPackages.gluten-async
];
};
h2-lwt-unix = ocamlPackages.buildDunePackage rec {
pname = "h2-lwt-unix";
version = "0.12.0";
src = pkgs.fetchurl {
url = "https://github.com/anmonteiro/ocaml-h2/releases/download/0.12.0/h2-0.12.0.tbz";
sha256 = "sha256-NuQLET2Q6jg2GajHvZk/hmExw8XZV2GbaEnrMq+MU8Y=";
};
propagatedBuildInputs = with pkgs; [
h2-lwt
ocamlPackages.faraday-lwt-unix
ocamlPackages.gluten-lwt-unix
];
};
h2 = ocamlPackages.buildDunePackage rec {
pname = "h2";
version = "0.12.0";
src = pkgs.fetchurl {
url = "https://github.com/anmonteiro/ocaml-h2/releases/download/0.12.0/h2-0.12.0.tbz";
sha256 = "sha256-NuQLET2Q6jg2GajHvZk/hmExw8XZV2GbaEnrMq+MU8Y=";
};
propagatedBuildInputs = with pkgs; [
ocamlPackages.base64
ocamlPackages.angstrom
ocamlPackages.faraday
ocamlPackages.bigstringaf
ocamlPackages.psq
ocamlPackages.hpack
ocamlPackages.httpun-types
ocamlPackages.alcotest
ocamlPackages.yojson
ocamlPackages.hex
];
};
grpc-src = pkgs.fetchFromGitHub {
owner = "dialohq";
repo = "ocaml-grpc";
rev = "0.2.0";
sha256 = "sha256-YARAm3EVTbptAoKA0lysJRYeKPaCaeWU6X9Lzkn+30E=";
};
grpc = ocamlPackages.buildDunePackage rec {
pname = "grpc";
version = "0.2.0";
src = grpc-src;
propagatedBuildInputs = with pkgs; [
ocamlPackages.uri
h2
ocamlPackages.ppx_deriving
ocamlPackages.ppxlib
];
};
grpc-lwt = ocamlPackages.buildDunePackage rec {
pname = "grpc-lwt";
version = "0.2.0";
src = grpc-src;
propagatedBuildInputs = with pkgs; [
ocamlPackages.stringext
ocamlPackages.lwt
grpc
];
};
tar = ocamlPackages.buildDunePackage rec {
pname = "tar";
version = "3.3.0";
src = pkgs.fetchurl {
url = "https://github.com/mirage/ocaml-tar/archive/refs/tags/v3.3.0.tar.gz";
sha256 = "sha256-xxwUxq8G9G8LH8EedLaPAWNvxtpRFiWZyEv8YPgad+g=";
};
propagatedBuildInputs = with pkgs; [
ocamlPackages.camlp-streams
ocamlPackages.cstruct
ocamlPackages.decompress
];
};
tar-unix = ocamlPackages.buildDunePackage rec {
pname = "tar-unix";
version = "3.3.0";
src = pkgs.fetchurl {
url = "https://github.com/mirage/ocaml-tar/archive/refs/tags/v3.3.0.tar.gz";
sha256 = "sha256-xxwUxq8G9G8LH8EedLaPAWNvxtpRFiWZyEv8YPgad+g=";
};
propagatedBuildInputs = with pkgs; [
ocamlPackages.lwt
tar
];
};
tar-lwt-unix = tar-unix.overrideAttrs (_: {name = "tar-lwt-unix"; });
elpe = ocamlPackages.buildDunePackage rec {
pname = "elpe";
version = "0.1.0";
src = ./elpe;
buildInputs = with pkgs; [
ocamlPackages.ocaml-protoc-plugin
ocamlPackages.findlib
ocamlPackages.toml
ocamlPackages.yojson
ocamlPackages.hex
ocamlPackages.ppx_string
ocamlPackages.ppx_blob
grpc-lwt
h2-lwt-unix
protobuf
];
nativeBuildInputs = with pkgs; [
ocamlPackages.ocaml-protoc-plugin
protobuf
];
propagatedBuildInputs = with pkgs; [
ocaml
ocamlPackages.ocaml-protoc-plugin
ocamlPackages.findlib
grpc-lwt
h2-lwt-unix
];
buildPhase = "dune build";
postInstall = ''
mkdir -p $out/bin
cp _build/default/bin/elpe_bin.bc $out/bin/elpe
'';
};
elpe_rs = (pkgs.callPackage ./Cargo.nix {
inherit pkgs;
defaultCrateOverrides = pkgs.defaultCrateOverrides // {
elpe = attrs: {
nativeBuildInputs = [ pkgs.protobuf ];
PROTOC="${protobuf}/bin/protoc";
propagatedBuildInputs = [ sequoia-sq ];
};
};
}).workspaceMembers.elpe.build.overrideAttrs (attrs: {
postInstall = "mv $out/bin/elpe $out/bin/elpe-server";
});
in
clangStdenv.mkDerivation {
name = "elpe";
phases = [ "installPhase" "fixupPhase" ];
propagatedBuildInputs = [ elpe elpe_rs sequoia-sq ];
installPhase = "mkdir $out";
}