blog.anqou.net
rss
author
tags

opam-nix で custom repository を使う

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;
        # ...