{
  lib,
  stdenv,
  fetchFromGitLab,
  fetchpatch,
  itstool,
  libxml2,
  meson,
  ninja,
  perl,
  python3,
  pkg-config,
  wrapGAppsHook3,
  at-spi2-core,
  dbus,
  elfutils,
  libepoxy,
  gexiv2,
  glib,
  gobject-introspection,
  gst_all_1,
  gtk3,
  lcms2,
  libdatrie,
  libgphoto2,
  libgudev,
  libpeas,
  libraw,
  libselinux,
  libsepol,
  lerc,
  libthai,
  libunwind,
  libxkbcommon,
  orc,
  udev,
  util-linux,
  xorg,
  zstd,
}:

stdenv.mkDerivation (finalAttrs: {
  pname = "entangle";
  version = "3.0";

  src = fetchFromGitLab {
    owner = "entangle";
    repo = "entangle";
    rev = "refs/tags/v${finalAttrs.version}";
    sha256 = "hz2WSDOjriQSavFlDT+35x1X5MeInq80ZrSP1WR/td0=";
  };

  patches = [
    # Fix build with meson 0.61, can be removed on next update
    # https://gitlab.com/entangle/entangle/-/issues/67
    (fetchpatch {
      url = "https://gitlab.com/entangle/entangle/-/commit/54795d275a93e94331a614c8712740fcedbdd4f0.patch";
      sha256 = "iEgqGjKa0xwSdctwvNdEV361l9nx+bz53xn3fuDgtzY=";
    })

    # Fix implicit dependency
    # https://github.com/NixOS/nixpkgs/issues/36468
    # https://gitlab.com/entangle/entangle/-/merge_requests/61
    ./0001-build-Add-missing-gio-unix-2.0-dependency.patch
  ];

  nativeBuildInputs = [
    itstool
    glib
    libxml2 # for xmllint
    meson
    ninja
    perl # for pod2man and build scripts
    python3 # for build scripts
    pkg-config
    wrapGAppsHook3
    gobject-introspection
  ];

  buildInputs =
    [
      at-spi2-core
      dbus
      libepoxy
      elfutils
      gexiv2
      glib
      lerc
      gst_all_1.gst-plugins-base
      gst_all_1.gstreamer
      gtk3
      lcms2
      libdatrie
      libgphoto2
      libgudev
      libpeas
      libraw
      libselinux
      libsepol
      libthai
      libunwind
      libxkbcommon
      orc
      udev
      util-linux
      zstd
    ]
    ++ (with xorg; [
      libXdmcp
      libXtst
    ]);

  # Disable building of doc/reference since it requires network connection to render XML to HTML
  # Patch build script shebangs
  postPatch = ''
    sed -i "/subdir('reference')/d" "docs/meson.build"
    patchShebangs --build build-aux meson_post_install.py
    sed -i meson_post_install.py \
      -e "/print('Update icon cache...')/d" \
      -e "/gtk-update-icon-cache/d"
  '';

  postInstall = ''
    substituteInPlace "$out/share/applications/org.entangle_photo.Manager.desktop" \
      --replace "Exec=entangle" "Exec=$out/bin/entangle"
  '';

  meta = {
    description = "Tethered camera control and capture";
    longDescription = ''
      Entangle uses GTK and libgphoto2 to provide a graphical interface
      for tethered photography with digital cameras.
      It includes control over camera shooting and configuration settings
      and 'hands off' shooting directly from the controlling computer.
      This app can also serve as a camera app for mobile devices.
    '';
    homepage = "https://gitlab.com/entangle/entangle";
    license = lib.licenses.gpl3Plus;
    platforms = lib.platforms.all;
    maintainers = with lib.maintainers; [ ShamrockLee ];
    mainProgram = "entangle";
  };
})
