# Mostly copied from RyanGibb/eon { inputs = { nixpkgs.url = "github:nixos/nixpkgs"; opam-nix.url = "github:tweag/opam-nix"; flake-utils.url = "github:numtide/flake-utils"; opam-nix.inputs.nixpkgs.follows = "nixpkgs"; opam-nix.inputs.flake-utils.follows = "flake-utils"; # maintain a different opam-repository to those pinned upstream opam-repository = { url = "github:ocaml/opam-repository/340ee6fd1ff10d0fce25e21ba1caca9ed1cfec68"; flake = false; }; opam-nix.inputs.opam-repository.follows = "opam-repository"; }; outputs = { self, nixpkgs, flake-utils, opam-nix, ... }@inputs: # create outputs for each default system flake-utils.lib.eachDefaultSystem (system: let package = "merry"; pkgs = nixpkgs.legacyPackages.${system}; opam-nix-lib = opam-nix.lib.${system}; devPackagesQuery = { ocaml-lsp-server = "*"; ocamlformat = "*"; utop = "*"; }; query = { ocaml-base-compiler = "*"; }; overlay = final: prev: { "${package}" = prev.${package}.overrideAttrs (o: { passthru = o.passthru // { shellPath = "/bin/msh"; }; }); }; scope = # recursive finds vendored dependancies in duniverse (opam-nix-lib.buildOpamProject' { recursive = true; } ./. (query // devPackagesQuery)).overrideScope overlay; in { packages.default = scope.${package}; defaultPackage = scope.${package}; devShells.default = let devPackages = builtins.attrValues (pkgs.lib.getAttrs (builtins.attrNames devPackagesQuery) scope); in pkgs.mkShell { inputsFrom = [ scope.${package} ]; buildInputs = devPackages; }; }) // { nixosModules = { default.imports = [ (import ./module.nix self.packages) ]; }; formatter = nixpkgs.lib.genAttrs nixpkgs.lib.systems.flakeExposed (system: nixpkgs.legacyPackages.${system}.nixfmt); }; }