OCaml のパッケージマネージャーである OPAM でサードパーティーのパッケージをインストールする場合、通常は opam-repository からパッケージをダウンロードします。しかし opam-repository にないパッケージや、自分でパッチを当てたパッケージなどを使用したい場合、 OPAM にある custom repository の仕組みを使うことになります(参考)。実用されている例として、例えば SATySFi で使用されているパッケージは satysfi-external-repo という custom repository で管理されています。
opam-nix を使うと、custom repository も参照して OCaml コードのビルドを Nix で行うことができます。
buildOpamProject' の引数に repos が設定できるので、ここに opam-repository とともに custom repository を渡します。以下は Waq の flake.nix の抜粋です:
{
inputs = {
# ...
# opam-repository を入力として扱う。
opam-repository = {
url = "github:ocaml/opam-repository";
flake = false;
};
# custom repository を入力として扱う。
waq-external-repo = {
url = "github:ushitora-anqou/waq-external-repo";
flake = false;
};
};
outputs = {
self,
# ...
waq-external-repo,
opam-repository,
} @ inputs:
flake-utils.lib.eachDefaultSystem (
system: let
package = "waq";
# ...
scope =
on.buildOpamProject' {
# repos に opam-repository と custom repository を指定する。
repos = [opam-repository waq-external-repo];
# ...
}
src
query;
# ...