{ lib
, buildDunePackage
, fetchFromGitHub
, fetchpatch
, alcotest
, cmdliner
, ppx_deriving
, ppxlib
, gitUpdater
}:

buildDunePackage rec {
  pname = "ppx_deriving_cmdliner";
  version = "0.6.1";

  minimalOCamlVersion = "4.11";
  duneVersion = "3";

  src = fetchFromGitHub {
    owner = "hammerlab";
    repo = pname;
    rev = "v${version}";
    sha256 = "sha256-/22KLQnxu3e2ZSca6ZLxTJDfv/rsmgCUkJnZC0RwRi8";
  };

  patches = [
    # Ppxlib.0.26.0 compatibility
    # remove when a new version is released
    (fetchpatch {
      url = "https://patch-diff.githubusercontent.com/raw/hammerlab/ppx_deriving_cmdliner/pull/50.patch";
      sha256 = "sha256-FfUfEAsyobwZ99+s5sFAaCE6Xgx7jLr/q79OxDbGcvQ=";
    })
  ];

  propagatedBuildInputs = [
    cmdliner
    ppx_deriving
    ppxlib
  ];

  doCheck = true;
  checkInputs = [
    alcotest
  ];

  passthru.updateScript = gitUpdater { rev-prefix = "v"; };

  meta = with lib; {
    description = "Ppx_deriving plugin for generating command line interfaces from types for OCaml";
    homepage = "https://github.com/hammerlab/ppx_deriving_cmdliner";
    license = licenses.asl20;
    maintainers = [ maintainers.romildo ];
  };
}
