{
  fetchFromGitHub,
  fetchpatch, # Delete at next version bump.
  lib,
  libgit2,
  stdenv,
}:

stdenv.mkDerivation rec {
  pname = "debase";
  # NOTE: When updating version, also update commit hash in prePatch.
  version = "2";

  src =
    (fetchFromGitHub {
      owner = "toasterllc";
      repo = "debase";
      tag = "v${version}";
      hash = "sha256-6AavH8Ag+879ntcxJDbVgsg8V6U4cxwPQYPKvq2PpoQ=";
      fetchSubmodules = true;
    }).overrideAttrs
      {
        # Workaround to fetch git@github.com submodules.
        # See https://github.com/NixOS/nixpkgs/issues/195117
        #
        # Already fixed in latest upstream, so delete at next version bump.
        GIT_CONFIG_COUNT = 1;
        GIT_CONFIG_KEY_0 = "url.https://github.com/.insteadOf";
        GIT_CONFIG_VALUE_0 = "git@github.com:";
      };

  prePatch = ''
    # xcrun is not available in the Darwin stdenv, but we don't need it anyway.
    substituteInPlace Makefile \
      --replace-fail 'xcrun dsymutil' dsymutil

    # NOTE: Update this when updating version.
    substituteInPlace Makefile \
      --replace-fail 'git rev-parse HEAD' 'echo bbe9f1737ab229dd370640a4b5d5e742a051c13b' \
      --replace-fail '$(GITHASHHEADER): .git/HEAD .git/index' '$(GITHASHHEADER):'
  '';

  patches = [
    # Ignore debase's vendored copy of libgit2 in favor of the nixpkgs version.
    ./ignore-vendored-libgit2.patch
    # Already fixed in latest upstream, so delete at next version bump.
    (fetchpatch {
      url = "https://github.com/toasterllc/debase/commit/d483c5ac016ac2ef3600e93ae4022cd9d7781c83.patch";
      hash = "sha256-vVQMOEiLTd46+UknZm8Y197sjyK/kTK/M+9sRX9AssY=";
    })
  ];

  buildInputs = [
    libgit2
  ];

  installPhase = ''
    runHook preInstall
    install -Dm755 build-${
      if stdenv.hostPlatform.isDarwin then "mac" else "linux"
    }/release/debase $out/bin/debase
    runHook postInstall
  '';

  enableParallelBuilding = true;

  makeFlags = [
    "ARCHS=${
      if stdenv.hostPlatform.isx86_64 then
        "x86_64"
      else if stdenv.hostPlatform.isAarch64 then
        "arm64"
      else
        throw "unsupported system: ${stdenv.system}"
    }"
  ];

  meta = {
    description = "TUI for drag-and-drop manipulation of git commits";
    homepage = "https://toaster.llc/debase";
    # The author has not yet specified a license.
    # See https://github.com/toasterllc/debase/pull/4
    license = lib.licenses.publicDomain;
    mainProgram = "debase";
    maintainers = with lib.maintainers; [
      jeremyschlatter
      aleksana
    ];
    platforms = [
      # Only these systems are supported by Makefile
      "x86_64-linux"
      "x86_64-darwin"
      "aarch64-linux"
      "aarch64-darwin"
    ];
  };
}
