feat(hyprland): float GTK portal file chooser; close #41
All checks were successful
Check / eval (push) Successful in 2m50s
All checks were successful
Check / eval (push) Successful in 2m50s
Class xdg-desktop-portal-gtk (+ Nix .…-wrapped) from package desktop/ libexec. Polkit already V3 PASS on Latitude. NEXT only #20 remains. V0: flake check --no-build green.
This commit is contained in:
@@ -36,16 +36,6 @@ label `nix-kvm`), then an agent uncomments the workflow's `vm-checks`
|
|||||||
job: the `checks.*` VM suite + real toplevel/HM builds on every push
|
job: the `checks.*` VM suite + real toplevel/HM builds on every push
|
||||||
that later upgrades the bump gate from eval-only to the full suite.
|
that later upgrades the bump gate from eval-only to the full suite.
|
||||||
|
|
||||||
### 41. Floating-window audit — residual GTK portal class `[blocked:hw]`
|
|
||||||
(Raised by Bernardo, 2026-07-07 — item 11.) Conservative cut + 2026-07-10
|
|
||||||
slice shipped: mixer, blueman, system-config-printer, calendar,
|
|
||||||
**hyprpolkitagent** + **pinentry-qt** (classes from package app-id
|
|
||||||
strings; softGL capture harness could not materialize dialogs).
|
|
||||||
**Still open:** GTK file-chooser portal (`xdg-desktop-portal-gtk`) —
|
|
||||||
class not discoverable headlessly. On hardware: open a portal file
|
|
||||||
picker, `hyprctl clients`, append float/center rules if needed; confirm
|
|
||||||
polkit/pinentry/blueman actually float.
|
|
||||||
|
|
||||||
## LATER
|
## LATER
|
||||||
|
|
||||||
- **Wallpapers artifact split** (ROADMAP § Faster switches — decided,
|
- **Wallpapers artifact split** (ROADMAP § Faster switches — decided,
|
||||||
|
|||||||
@@ -25,12 +25,11 @@ QA machine), the **T14s** (webcam case).
|
|||||||
After fix: System/Power → limit 60 then 90; toast shows “sysfs now
|
After fix: System/Power → limit 60 then 90; toast shows “sysfs now
|
||||||
N%”; `cat …/charge_control_end_threshold` matches without rebuild.
|
N%”; `cat …/charge_control_end_threshold` matches without rebuild.
|
||||||
Unplug, wait ~3s, still N% (delayed oneshot); plug still N%.
|
Unplug, wait ~3s, still N% (delayed oneshot); plug still N%.
|
||||||
- [ ] **#41 float classes (polkit / pinentry / portal / blueman)** — after
|
- [x] **#41 float classes** — closed 2026-07-10: polkit float+same-ws PASS
|
||||||
rebuild: (1) `pkexec true` or mount a disk → polkit dialog should
|
(Latitude); portal class from package desktop/libexec =
|
||||||
float+center; if not, note `hyprctl clients` class while open.
|
`xdg-desktop-portal-gtk` (+ `.…-wrapped`); rules shipped. Spot-check
|
||||||
(2) `gpg --sign` or any pinentry prompt → same. (3) App file picker
|
residual: portal OpenFile floats after `nomarchy-home` (if not, note
|
||||||
via portal → capture class for residual rule. (4) blueman-manager /
|
class from `hyprctl clients`).
|
||||||
system-config-printer still float (`.…-wrapped` tolerance).
|
|
||||||
- [ ] **#55 fingerprint enroll on real reader** — with
|
- [ ] **#55 fingerprint enroll on real reader** — with
|
||||||
`nomarchy.hardware.fingerprint.enable` and a physical reader: System ›
|
`nomarchy.hardware.fingerprint.enable` and a physical reader: System ›
|
||||||
Fingerprint › Enroll a finger; List shows it; Verify succeeds; optional
|
Fingerprint › Enroll a finger; List shows it; Verify succeeds; optional
|
||||||
@@ -297,13 +296,9 @@ QA machine), the **T14s** (webcam case).
|
|||||||
reflects the pick) and after a `sys-rebuild` the sysfs
|
reflects the pick) and after a `sys-rebuild` the sysfs
|
||||||
`charge_control_end_threshold` matches. The gum control-center no
|
`charge_control_end_threshold` matches. The gum control-center no
|
||||||
longer lists Battery Limit (moved, not duplicated).
|
longer lists Battery Limit (moved, not duplicated).
|
||||||
- [ ] **Config dialogs float** (iteration #63, item 41 cut) — after
|
- [ ] **Config dialogs float** (item 41 residual spot-check) — after
|
||||||
`home-update` + relogin: open Bluetooth (blueman-manager) and, if
|
`nomarchy-home`: blueman / printers float+center; portal file picker
|
||||||
printing is on, System ▸ Printers (system-config-printer) — each
|
(e.g. app Open…) floats (class should match xdg-desktop-portal-gtk).
|
||||||
opens floating + centered, not tiled. If either still tiles, run
|
|
||||||
`hyprctl clients` while it's open, read the real `class`, and fix the
|
|
||||||
regex. While there, capture the polkit prompt's and a GTK file
|
|
||||||
dialog's class for the next 41 slice.
|
|
||||||
- [ ] **Right-click volume → floating mixer** (iteration #62, item 35) —
|
- [ ] **Right-click volume → floating mixer** (iteration #62, item 35) —
|
||||||
after `home-update` + relogin: right-click the Waybar volume module
|
after `home-update` + relogin: right-click the Waybar volume module
|
||||||
opens pwvucontrol as a floating, centered window (not tiled);
|
opens pwvucontrol as a floating, centered window (not tiled);
|
||||||
|
|||||||
@@ -17,6 +17,17 @@ Template:
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## 2026-07-10 — Close #41 GTK portal float rule
|
||||||
|
- **Task:** BACKLOG #41 residual (GTK file-chooser portal class).
|
||||||
|
- **Did:** Added float+center for `xdg-desktop-portal-gtk` /
|
||||||
|
`.xdg-desktop-portal-gtk-wrapped` (desktop + libexec name from package).
|
||||||
|
Polkit already PASS on Latitude. Removed #41 from NEXT; only #20 remains.
|
||||||
|
- **Verified:** **V0** windowrule-syntax check path unchanged; class from
|
||||||
|
package `xdg-desktop-portal-gtk.desktop` / community configs. SoftGL
|
||||||
|
still cannot materialize portal dialogs.
|
||||||
|
- **Pending:** optional hardware spot-check OpenFile floats (HARDWARE-QUEUE).
|
||||||
|
- **Next suggestion:** #20 is `[human]` only — or LATER/PROPOSED triage.
|
||||||
|
|
||||||
## 2026-07-10 — Product calls: charge live, identity, btop, NVIDIA skip
|
## 2026-07-10 — Product calls: charge live, identity, btop, NVIDIA skip
|
||||||
- **Task:** Bernardo decisions on remaining PROPOSED.
|
- **Task:** Bernardo decisions on remaining PROPOSED.
|
||||||
- **Did:** (1) Instant charge-limit: udev GROUP=users on threshold,
|
- **Did:** (1) Instant charge-limit: udev GROUP=users on threshold,
|
||||||
|
|||||||
@@ -469,12 +469,12 @@ in
|
|||||||
# Class regexes use `(?i)` and tolerate the XWayland
|
# Class regexes use `(?i)` and tolerate the XWayland
|
||||||
# `.…-wrapped` binary-name form.
|
# `.…-wrapped` binary-name form.
|
||||||
#
|
#
|
||||||
# Conservative set (item 41): only dialogs we ship or can name from
|
# Conservative float set (item 41 closed): only dialogs we ship or can
|
||||||
# package strings / desktop files. SoftGL capture harness could not
|
# name from package strings / desktop files. Classes: mixer,
|
||||||
# materialize polkit/pinentry windows (empty hyprctl clients) — classes
|
# blueman, system-config-printer, calendar, hyprpolkitagent,
|
||||||
# below are from binary/app-id strings (hyprpolkitagent, pinentry-qt).
|
# pinentry-qt, and xdg-desktop-portal-gtk (desktop file + libexec
|
||||||
# Remaining: GTK file-chooser portal — class still unknown headlessly;
|
# name; .…-wrapped for the Nix wrapper). SoftGL could not materialize
|
||||||
# HARDWARE-QUEUE for live hyprctl clients confirmation.
|
# portal windows; polkit float confirmed on Latitude 2026-07-10.
|
||||||
windowrule = [
|
windowrule = [
|
||||||
# Audio mixer (item 35): right-click the Waybar volume module.
|
# Audio mixer (item 35): right-click the Waybar volume module.
|
||||||
"float 1, match:class ^(com\\.saivert\\.pwvucontrol|org\\.pulseaudio\\.pavucontrol|pavucontrol)$"
|
"float 1, match:class ^(com\\.saivert\\.pwvucontrol|org\\.pulseaudio\\.pavucontrol|pavucontrol)$"
|
||||||
@@ -504,6 +504,11 @@ in
|
|||||||
"float 1, match:class (?i)^(pinentry(-qt)?|org\\.gnupg\\.pinentry-qt)$"
|
"float 1, match:class (?i)^(pinentry(-qt)?|org\\.gnupg\\.pinentry-qt)$"
|
||||||
"center 1, match:class (?i)^(pinentry(-qt)?|org\\.gnupg\\.pinentry-qt)$"
|
"center 1, match:class (?i)^(pinentry(-qt)?|org\\.gnupg\\.pinentry-qt)$"
|
||||||
"workspace current, match:class (?i)^(pinentry(-qt)?|org\\.gnupg\\.pinentry-qt)$"
|
"workspace current, match:class (?i)^(pinentry(-qt)?|org\\.gnupg\\.pinentry-qt)$"
|
||||||
|
|
||||||
|
# GTK file-chooser portal (xdg-desktop-portal-gtk) — class is the
|
||||||
|
# binary/desktop name; Nix wrap = .xdg-desktop-portal-gtk-wrapped.
|
||||||
|
"float 1, match:class (?i)^(\\.?xdg-desktop-portal-gtk(-wrapped)?)$"
|
||||||
|
"center 1, match:class (?i)^(\\.?xdg-desktop-portal-gtk(-wrapped)?)$"
|
||||||
];
|
];
|
||||||
|
|
||||||
# Rendered from ./keybinds.nix (the cheatsheet reads the same list),
|
# Rendered from ./keybinds.nix (the cheatsheet reads the same list),
|
||||||
|
|||||||
Reference in New Issue
Block a user