From 121a6a376209de3f5a9474bf03721e2032a73e01 Mon Sep 17 00:00:00 2001 From: Marc Coquand Date: Mon, 13 May 2024 11:00:47 -0500 Subject: initial commit --- flake.nix | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 flake.nix (limited to 'flake.nix') diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..8f15492 --- /dev/null +++ b/flake.nix @@ -0,0 +1,63 @@ +{ + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs"; + opam-nix.url = "github:tweag/opam-nix"; + flake-utils.url = "github:numtide/flake-utils"; + nixpkgs.follows = "opam-nix/nixpkgs"; + }; + outputs = { self, flake-utils, opam-nix, nixpkgs }: + let package = "stitch"; + in flake-utils.lib.eachDefaultSystem (system: + let + pkgs = nixpkgs.legacyPackages.${system}; + on = opam-nix.lib.${system}; + devPackagesQuery = { + # You can add "development" packages here. They will get added to the devShell automatically. + ocaml-lsp-server = "*"; + ocamlformat = "*"; + ocamlfind = "*"; + utop = "*"; + odoc = "*"; + }; + query = devPackagesQuery // { + ## You can force versions of certain packages here, e.g: + ## - force the ocaml compiler to be taken from opam-repository: + ocaml-base-compiler = "*"; + ## - or force the compiler to be taken from nixpkgs and be a certain version: + # ocaml-system = "4.14.0"; + ## - or force ocamlfind to be a certain version: + }; + scope = on.buildOpamProject' { } ./. query; + overlay = final: prev: { + # You can add overrides here + ${package} = prev.${package}.overrideAttrs (_: { + # Prevent the ocaml dependencies from leaking into dependent environments + doNixSupport = false; + buildInputs = + [ pkgs."gmp" pkgs."libev" pkgs."openssl" pkgs."libargon2" ]; + DUNE_PROFILE = "release"; + }); + }; + scope' = scope.overrideScope' overlay; + # The main package containing the executable + main = scope'.${package}; + # Packages from devPackagesQuery + devPackages = builtins.attrValues + (pkgs.lib.getAttrs (builtins.attrNames devPackagesQuery) scope'); + in { + legacyPackages = scope'; + + packages.default = main; + + apps.stitch.default = { + type = "app"; + program = "${main}/bin/stitch"; + }; + + devShells.default = pkgs.mkShell { + inputsFrom = [ main ]; + buildInputs = devPackages; + }; + }); +} + -- cgit v1.2.3