{ stdenv
, lib
, fetchFromGitHub
, meson
, ninja
, appstream-glib
, desktop-file-utils
, gettext
, glib
, gtk4
, libwnck3
, wrapGAppsHook4
, pkg-config
, python3Packages
, gobject-introspection
}:

python3Packages.buildPythonApplication rec {
  pname = "smile";
  version = "2.3.0";

  src = fetchFromGitHub {
    owner = "mijorus";
    repo = pname;

    # There's no proper Git tag so we'll have to manually retrieve the commit
    # for now.
    rev = "3ad0888f54bfde67ed6ee3b8335625347b53d460";
    hash = "sha256-PhSiZw/V9DEAa0AYtr0ZIuyrZDZoNN/Ln9Zq+Xl4Vek=";
  };

  format = "other";

  postPatch = ''
    chmod +x ./build-aux/meson/postinstall.py
    patchShebangs ./build-aux/meson/postinstall.py
    substituteInPlace ./build-aux/meson/postinstall.py \
      --replace "gtk-update-icon-cache" "gtk4-update-icon-cache"
  '';

  nativeBuildInputs = [
    gettext
    desktop-file-utils
    appstream-glib
    meson
    ninja
    pkg-config
    glib
    wrapGAppsHook4
  ];

  propagatedNativeBuildInputs = [
    gobject-introspection
  ];

  propagatedBuildInputs = with python3Packages; [
    pygobject3
    manimpango
    dbus-python
  ];

  buildInputs = [
    libwnck3
    gtk4
  ];

  dontWrapGApps = true;
  preFixup = ''
    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
  '';

  meta = with lib; {
    homepage = "https://smile.mijorus.it";
    description = "Emoji picker with custom tabs support and localization";
    license = licenses.gpl3Plus;
    maintainers = with maintainers; [ foo-dogsquared ];
    platforms = platforms.linux;
  };
}