{ lib, stdenv, fetchFromGitLab, meson, mesonEmulatorHook, ninja, pkg-config, libadwaita, libsecret, modemmanager, gtk4, gom, gsound, feedbackd, callaudiod, evolution-data-server-gtk4, folks, desktop-file-utils, appstream-glib, libpeas2, dbus, vala, wrapGAppsHook4, xvfb-run, gtk-doc, bubblewrap, docbook-xsl-nons, docbook_xml_dtd_43, docutils, gst_all_1, shared-mime-info, sofia_sip, writeShellScriptBin, }: stdenv.mkDerivation (finalAttrs: { pname = "calls"; version = "47.0"; src = fetchFromGitLab { domain = "gitlab.gnome.org"; owner = "GNOME"; repo = "calls"; rev = "v${finalAttrs.version}"; fetchSubmodules = true; hash = "sha256-HzQz5jmlXwUHLXC6nhHCa8E8zczaA89YxteZgxSV0YY="; }; outputs = [ "out" "devdoc" ]; nativeBuildInputs = [ meson ninja pkg-config desktop-file-utils appstream-glib vala wrapGAppsHook4 gtk-doc docbook-xsl-nons docbook_xml_dtd_43 docutils ] ++ lib.optionals (!stdenv.buildPlatform.canExecute stdenv.hostPlatform) [ mesonEmulatorHook ]; buildInputs = [ modemmanager libadwaita libsecret evolution-data-server-gtk4 # UI part not needed, using gtk4 variant (over the default of gtk3) to reduce closure. folks gom gsound gst_all_1.gstreamer gst_all_1.gst-plugins-base gst_all_1.gst-plugins-good gst_all_1.gst-plugins-bad gst_all_1.gst-plugins-ugly feedbackd callaudiod gtk4 libpeas2 sofia_sip ]; nativeCheckInputs = [ (writeShellScriptBin "dbus-run-session" '' # tests invoke `dbus-run-session` directly, but without the necessary `--config-file` argument exec ${lib.getExe' dbus "dbus-run-session"} --config-file=${dbus}/share/dbus-1/session.conf "$@" '') bubblewrap dbus shared-mime-info xvfb-run ]; mesonFlags = [ (lib.mesonBool "gtk_doc" true) (lib.mesonBool "tests" finalAttrs.finalPackage.doCheck) ]; strictDeps = true; doCheck = true; preFixup = '' gappsWrapperArgs+=(--prefix XDG_DATA_DIRS : "${shared-mime-info}/share") ''; checkPhase = '' runHook preCheck HOME=$(mktemp -d) \ xvfb-run -s '-screen 0 800x600x24' \ bwrap --unshare-uts --hostname 127.0.0.1 --dev-bind / / \ meson test --no-rebuild --print-errorlogs runHook postCheck ''; meta = with lib; { description = "Phone dialer and call handler"; longDescription = "GNOME Calls is a phone dialer and call handler. Setting NixOS option `programs.calls.enable = true` is recommended."; homepage = "https://gitlab.gnome.org/GNOME/calls"; license = licenses.gpl3Plus; maintainers = with maintainers; [ craigem ]; platforms = platforms.linux; mainProgram = "gnome-calls"; }; })