{
  stdenv,
  lib,
  fetchurl,
  asciidoc,
  docbook-xsl-nons,
  docbook_xml_dtd_45,
  gettext,
  itstool,
  libxslt,
  gexiv2,
  tinysparql,
  meson,
  mesonEmulatorHook,
  ninja,
  pkg-config,
  vala,
  wrapGAppsNoGuiHook,
  bzip2,
  dbus,
  exempi,
  giflib,
  glib,
  gobject-introspection,
  gnome,
  gst_all_1,
  icu,
  json-glib,
  libcue,
  libexif,
  libgsf,
  libgudev,
  libgxps,
  libiptcdata,
  libjpeg,
  libosinfo,
  libpng,
  libseccomp,
  libtiff,
  libuuid,
  libxml2,
  networkmanager,
  poppler,
  systemd,
  taglib,
  upower,
  totem-pl-parser,
  e2fsprogs,
}:

stdenv.mkDerivation (finalAttrs: {
  pname = "localsearch";
  version = "3.8.1";

  src = fetchurl {
    url = "mirror://gnome/sources/localsearch/${lib.versions.majorMinor finalAttrs.version}/localsearch-${finalAttrs.version}.tar.xz";
    hash = "sha256-p7JKTweAXfdUOk3QI2hPzeXuaZygDrWwkSOgSdOuzNg=";
  };

  patches = [
    ./tracker-landlock-nix-store-permission.patch
  ];

  nativeBuildInputs =
    [
      asciidoc
      docbook-xsl-nons
      docbook_xml_dtd_45
      gettext
      glib
      gobject-introspection
      itstool
      libxslt
      meson
      ninja
      pkg-config
      vala
      wrapGAppsNoGuiHook
    ]
    ++ lib.optionals (!stdenv.buildPlatform.canExecute stdenv.hostPlatform) [
      mesonEmulatorHook
    ];

  # TODO: add libenca, libosinfo
  buildInputs =
    [
      bzip2
      dbus
      exempi
      giflib
      gexiv2
      totem-pl-parser
      tinysparql
      gst_all_1.gst-plugins-base
      gst_all_1.gst-plugins-good
      gst_all_1.gst-plugins-bad
      gst_all_1.gst-plugins-ugly
      gst_all_1.gstreamer
      gst_all_1.gst-libav
      icu
      json-glib
      libcue
      libexif
      libgsf
      libgudev
      libgxps
      libiptcdata
      libjpeg
      libosinfo
      libpng
      libtiff
      libuuid
      libxml2
      poppler
      taglib
    ]
    ++ lib.optionals stdenv.hostPlatform.isLinux [
      libseccomp
      networkmanager
      systemd
      upower
    ]
    ++ lib.optionals stdenv.hostPlatform.isDarwin [
      e2fsprogs
    ];

  mesonFlags =
    [
      # TODO: tests do not like our sandbox
      "-Dfunctional_tests=false"
    ]
    ++ lib.optionals (!stdenv.hostPlatform.isLinux) [
      "-Dbattery_detection=none"
      "-Dnetwork_manager=disabled"
      "-Dsystemd_user_services=false"
    ];

  postInstall = ''
    glib-compile-schemas "$out/share/glib-2.0/schemas"
  '';

  passthru = {
    updateScript = gnome.updateScript { packageName = "localsearch"; };
  };

  meta = {
    homepage = "https://gitlab.gnome.org/GNOME/localsearch";
    description = "Desktop-neutral user information store, search tool and indexer";
    maintainers = lib.teams.gnome.members;
    license = lib.licenses.gpl2Plus;
    platforms = lib.platforms.unix;
    mainProgram = "localsearch";
  };
})