aboutsummaryrefslogtreecommitdiff
path: root/flake.nix
diff options
context:
space:
mode:
Diffstat (limited to 'flake.nix')
-rw-r--r--flake.nix63
1 files changed, 63 insertions, 0 deletions
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;
+ };
+ });
+}
+