diff --git a/nix/default.nix b/nix/default.nix index a3197712..f4c96008 100644 --- a/nix/default.nix +++ b/nix/default.nix @@ -103,6 +103,8 @@ in patches = [ # make meson use the provided wlroots instead of the git submodule ./meson-build.patch + # fixes portals search path to be picked up from $XDG_DESKTOP_PORTAL_DIR + ./portals.patch ]; postPatch = '' diff --git a/nix/portals.patch b/nix/portals.patch new file mode 100644 index 00000000..245886c4 --- /dev/null +++ b/nix/portals.patch @@ -0,0 +1,23 @@ +diff --git a/src/Compositor.cpp b/src/Compositor.cpp +index a9d95f39..6aa8e7d6 100644 +--- a/src/Compositor.cpp ++++ b/src/Compositor.cpp +@@ -2340,14 +2340,16 @@ void CCompositor::performUserChecks() { + + static auto* const PSUPPRESSPORTAL = &g_pConfigManager->getConfigValuePtr("misc:suppress_portal_warnings")->intValue; + ++ static auto const PORTALDIR = std::string(getenv("XDG_DESKTOP_PORTAL_DIR")); ++ + if (!*PSUPPRESSPORTAL) { +- if (std::ranges::any_of(BAD_PORTALS, [&](const std::string& portal) { return std::filesystem::exists("/usr/share/xdg-desktop-portal/portals/" + portal + ".portal"); })) { ++ if (std::ranges::any_of(BAD_PORTALS, [&](const std::string& portal) { return std::filesystem::exists(PORTALDIR + "/" + portal + ".portal"); })) { + // bad portal detected + g_pHyprNotificationOverlay->addNotification("You have one or more incompatible xdg-desktop-portal impls installed. Please remove incompatible ones to avoid issues.", + CColor(0), 15000, ICON_ERROR); + } + +- if (std::filesystem::exists("/usr/share/xdg-desktop-portal/portals/hyprland.portal") && std::filesystem::exists("/usr/share/xdg-desktop-portal/portals/wlr.portal")) { ++ if (std::filesystem::exists(PORTALDIR + "/hyprland.portal") && std::filesystem::exists(PORTALDIR + "/wlr.portal")) { + g_pHyprNotificationOverlay->addNotification("You have xdg-desktop-portal-hyprland and -wlr installed simultaneously. Please uninstall one to avoid issues.", CColor(0), + 15000, ICON_ERROR); + }