{ lib,
  stdenv,
  fetchFromGitHub,
  fetchpatch,
  cmake,
  libGL,
  libGLU,
  libsForQt5,
}:

stdenv.mkDerivation (finalAttrs: {
  pname = "connectome-workbench";
  version = "2.0.0";

  src = fetchFromGitHub {
    owner = "Washington-University";
    repo = "workbench";
    rev = "refs/tags/v${finalAttrs.version}";
    hash = "sha256-d0J5bXp6mJlUQBmInxPXPkd5P5H+3F6fE9fc8pD1fUc=";
  };

  sourceRoot = "${finalAttrs.src.name}/src";

  patches = [
    # remove after next release:
    (fetchpatch {
      name = "fix-missing-includes-in-CZIlib";
      url = "https://github.com/Washington-University/workbench/commit/7ba3345d161d567a4b628ceb02ab4471fc96cb20.diff";
      hash = "sha256-DMrJOr/2Wr4o4Z3AuhWfMZTX8f/kOYWwZQzBUwIrTd8=";
      relative = "src";
    })
  ];

  postPatch = ''
    substituteInPlace CMakeLists.txt  \
      --replace-fail "ADD_SUBDIRECTORY ( Tests )" ""  \
      --replace-fail "ENABLE_TESTING()" ""
  '';
  # tests are minimal and test_driver fails to link (also -DBUILD_TESTING=... is ignored):
  # ld: ../Brain/libBrain.a(BrainOpenGLVolumeObliqueSliceDrawing.cxx.o): undefined reference to symbol 'glGetFloatv'
  # ld: /nix/store/a5vcvrkh1c2ng5kr584g3zw3991vnhks-libGL-1.7.0/lib/libGL.so.1: error adding symbols: DSO missing from command line

  nativeBuildInputs = [
    cmake
    libsForQt5.wrapQtAppsHook
  ];

  buildInputs = [
    libGL
    libGLU
  ] ++ (with libsForQt5; [
    qtbase
  ]);
  # note: we should be able to unvendor a few libs (ftgl, quazip, qwt) but they aren't detected properly

  meta = {
    description = "Visualization and discovery tool used to map neuroimaging data";
    homepage = "https://www.humanconnectome.org/software/connectome-workbench";
    license = with lib.licenses; [ gpl2Plus gpl3Plus mit ];
    changelog = "https://github.com/Washington-University/workbench/releases/tag/v${finalAttrs.version}";
    maintainers = with lib.maintainers; [ bcdarwin ];
    mainProgram = "wb_command";
    platforms = lib.platforms.linux;
  };
})
