{ outputs = { nixpkgs, parts, systems, ... } @ inputs: parts.lib.mkFlake { inherit inputs; } { systems = import systems; perSystem = { lib, pkgs, system, self', ... }: { _module.args.pkgs = import nixpkgs { inherit system; overlays = [ (_: prev: { ocamlPackages = prev.ocaml-ng.ocamlPackages.overrideScope (ocamlFinal: _: (with lib; genAttrs (attrNames (builtins.readDir ./pkgs)) (name: ocamlFinal.callPackage ./pkgs/${name} { }))); }) ]; }; devShells.default = pkgs.mkShell { inputsFrom = with self'.packages; [ omd ysun ]; packages = with pkgs; [ direnv git nix-direnv nixpkgs-fmt ] ++ (with ocamlPackages; [ ocaml-lsp ocaml-print-intf ocamlformat utop ]); }; formatter = pkgs.writeShellScriptBin "formatter" '' set -eoux pipefail shopt -s globstar pushd "$(${lib.getExe pkgs.git} rev-parse --show-toplevel)" > /dev/null ${lib.getExe pkgs.deno} fmt pages ${lib.getExe pkgs.nixpkgs-fmt} . ${lib.getExe pkgs.ocamlPackages.dune} fmt popd ''; packages = with lib; fix (self: ( (genAttrs (attrNames (builtins.readDir ./pkgs)) (name: pkgs.ocamlPackages.${name})) // { default = self.ysun; } )); }; }; inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable-small"; parts.url = "github:hercules-ci/flake-parts"; parts.inputs.nixpkgs-lib.follows = "nixpkgs"; systems.url = "github:nix-systems/triplet"; }; }