From 30cb22500fc02efa0a4f40053e64f4be6f0e7c8c Mon Sep 17 00:00:00 2001 From: Ryan Yin Date: Sat, 31 Oct 2026 22:44:16 +0800 Subject: [PATCH] fix(niri): route Zoom screen sharing through xdg-desktop-portal-wlr 0.8.2 niri 26.04 exposes DMA-BUF only, which Zoom 7.2.1 rejects. xdg-desktop-portal-wlr 0.8.2 provides the working SHM path; 0.8.4 regresses Zoom SelectSources. Assisted-by: DeepSeek Harness (deepseek-flash) --- WORKAROUNDS.md | 1 + modules/nixos/desktop/xdg.nix | 20 ++++++++++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/WORKAROUNDS.md b/WORKAROUNDS.md index de4fcd60..90608dae 100644 --- a/WORKAROUNDS.md +++ b/WORKAROUNDS.md @@ -53,6 +53,7 @@ A setting that works around a bug or a hardware quirk. | WA-040 | `workaround` | Comodo AAA Services root blacklist — `modules/base/security.nix` | CVE-2026-111943. NixOS injects the entry itself, but nix-darwin only passes this list through; keep one explicit entry for both. The compromised eMudhra emSign roots are gone from the NSS bundle and were removed from the list. | Drop once nix-darwin carries the upstream default or both inputs handle the blacklist | 2026-10-20 | on nix-darwin bump | active | | WA-041 | Monitor OSD "no-signal auto power-off" disabled — no code in this repo (the P32A2V OSD setting) | during a DPMS-off idle the panel drops and re-adds HPD every ~13 s, and after wake niri keeps scanning out while the panel stays dark until the monitor is power cycled; the panel's own auto power-off drives that state, so it is now disabled. Pinning the mode to 120 Hz did not change the symptom | Drop once a driver retrains the DP link after a DPMS wake, the monitor firmware stops cycling HPD, or this monitor is replaced | 2026-10-21 | confirm on the next full idle cycle, then on an nvidia or monitor firmware update | active | | WA-042 | Colmena nodes set `system.nixos.versionSuffix` and `revision` from the flake's lib — `outputs/default.nix` (`rawColmenaHive`) | Colmena evaluates each node with nixpkgs' `eval-config.nix` and plain lib, which reports `26.11pre-git`, so without the override a Colmena deploy differs from the `nixosConfigurations` toplevel; the `colmena-parity` eval test guards the match | Drop once Colmena evaluates nodes with the flake's lib or accepts `nixosConfigurations` directly, keeping `colmena-parity` green | 2026-10-21 | on a colmena bump | active | +| WA-046 | xdg-desktop-portal-wlr pinned to 0.8.2 — `modules/nixos/desktop/xdg.nix` | niri's GNOME ScreenCast path exposes only DMA-BUF with modifiers, which Zoom 7.2.1 rejects; xdg-desktop-portal-wlr 0.8.2 provides the working SHM path, while 0.8.4 regresses Zoom's SelectSources. | Drop once niri's ScreenCast path works with Zoom or xdg-desktop-portal-wlr 0.8.4+ is fixed. | 2026-10-31 | on xdg-desktop-portal-wlr or Zoom updates | active | If WA-008 freezes recur, the fallback is to restore the parameters commented out in `hosts/idols-ai/hardware-configuration.nix` — diff --git a/modules/nixos/desktop/xdg.nix b/modules/nixos/desktop/xdg.nix index 22725aea..1d800ebd 100644 --- a/modules/nixos/desktop/xdg.nix +++ b/modules/nixos/desktop/xdg.nix @@ -1,4 +1,9 @@ -{ lib, pkgs, ... }: +{ + lib, + pkgs, + pkgs-stable, + ... +}: { xdg.terminal-exec = { enable = true; @@ -33,12 +38,13 @@ config = { common = { - # Use xdg-desktop-portal-gtk for every portal interface... + # Prefer the GTK portal for interfaces it implements. default = [ "gtk" "gnome" ]; }; + niri."org.freedesktop.impl.portal.ScreenCast" = "wlr"; }; # Sets environment variable NIXOS_XDG_OPEN_USE_PORTAL to 1 @@ -50,8 +56,10 @@ # ls /run/current-system/sw/share/xdg-desktop-portal/portals/ extraPortals = with pkgs; [ - xdg-desktop-portal-gtk # for provides file picker / OpenURI - xdg-desktop-portal-gnome # for screensharing + xdg-desktop-portal-gtk # file picker and OpenURI + xdg-desktop-portal-gnome # screenshot and remaining GNOME services + # xdg-desktop-portal-wlr 0.8.4 regresses Zoom; 0.8.2 works with niri. + pkgs-stable.xdg-desktop-portal-wlr ]; }; @@ -68,8 +76,8 @@ overrideStrategy = "asDropin"; text = '' [Unit] - After=xdg-desktop-portal.service xdg-desktop-portal-gtk.service xdg-desktop-portal-gnome.service - Wants=xdg-desktop-portal.service xdg-desktop-portal-gtk.service xdg-desktop-portal-gnome.service + After=xdg-desktop-portal.service xdg-desktop-portal-gtk.service xdg-desktop-portal-gnome.service xdg-desktop-portal-wlr.service + Wants=xdg-desktop-portal.service xdg-desktop-portal-gtk.service xdg-desktop-portal-gnome.service xdg-desktop-portal-wlr.service ''; }; }