Compare commits

...

2 Commits

Author SHA1 Message Date
Bernardo Magri
714fbd1daf feat(rofi): show the Print-key hints on the Capture menu rows
All checks were successful
Check / eval (push) Successful in 3m2s
Iteration #66 (direct request: "make sure menu items that have a keybind
display it"). Audit found every SUPER(+CTRL) module-opening row already
hinted (item 28c); the one gap was Tools ▸ Capture — its Region/Full
screen rows run the exact grim commands of the Print / SHIFT+Print /
CTRL+Print binds but showed nothing. Adds `hintForBind mods key` (matches
keybinds.nix by mods+key, so no drift and no brittle full-action compare)
and `-markup-rows` on the Capture menu so the spans render.

Verified: V0 green; V1 HM built — shipped nomarchy-menu shows
`Region → clipboard {{Print}}`, `Region → file {{SHIFT + Print}}`,
`Full screen → file {{CTRL + Print}}`. Substring case-matches precede the
appended span, so dispatch is unchanged. V3 (pango dim render) queued.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-08 14:16:45 +01:00
Bernardo Magri
b18980f642 docs(backlog): fold Bernardo's power-menu mockup into item 36(b)
He supplied a reference `power-menu` rofi script (battery charge + power
profile rows, icon protocol, notify-send). Un-gates the design hold on
36(b): records the shape + the Nomarchy adaptation (reuse the existing
batterylimit/power-profile writers instead of raw TLP; wire the Waybar
battery module on-click). One [human] call left: replace the separate
System rows or keep both surfaces.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-08 14:16:45 +01:00
4 changed files with 58 additions and 8 deletions

View File

@@ -31,10 +31,23 @@ next, in what order*.
toggle in the rofi System submenu — shipped 2026-07-07 (iteration #64; toggle in the rofi System submenu — shipped 2026-07-07 (iteration #64;
`nomarchy-menu batterylimit`, self-gated on the sysfs node, and MOVED out `nomarchy-menu batterylimit`, self-gated on the sysfs node, and MOVED out
of the gum control-center). Remaining: of the gum control-center). Remaining:
- (b) `[human]` **Battery-icon click → a dedicated power menu** offering - (b) **Battery-icon click → a dedicated power menu** offering charge
charge threshold + power profile (and switching backend to TLP when threshold + power profile. Mockup provided by Bernardo 2026-07-08 (a
relevant). Bernardo will provide a mockup ("when it's time") — hold `power-menu` rofi script from another system): a `rofi -dmenu` with
design until then. Pairs with the instant-effect follow-up in PROPOSED. icon'd rows via the `\x00icon\x1f<name>` protocol — "Charge to 100%",
"Limit to 80%" (battery-*-charging-symbolic icons) + power-profile rows
(power-profile-{power-saver,performance}-symbolic), each `case` firing a
backend command + `notify-send`. The submitted script drives **TLP**
(`tlp fullcharge` / `tlp setcharge 75 80 BAT0`) and ryzenadj (ignore the
ryzenadj half). **Nomarchy adaptation:** reuse the existing writers, not
raw TLP — charge rows call `nomarchy-menu batterylimit`'s logic
(sysfs `charge_control_end_threshold` + baked `settings.power.
batteryChargeLimit`), profile rows call `power-profile`'s (PPD). Wire the
Waybar **battery module `on-click`** (generated `waybar.nix` + all four
whole-swap jsoncs — parity) to a new `nomarchy-menu powermenu`. Open
call left: whether to *replace* the separate System ▸ Battery limit /
Power profile rows or keep both surfaces. Pairs with the instant-effect
follow-up in PROPOSED (a udev grant makes the charge write no-rebuild).
### 29. Laptop docking / external-monitor UX `[human]` (needs hardware) ### 29. Laptop docking / external-monitor UX `[human]` (needs hardware)
(Raised by Bernardo, 2026-07-07.) The shipped display application is (Raised by Bernardo, 2026-07-07.) The shipped display application is

View File

@@ -271,6 +271,10 @@ QA machine), the **T14s** (webcam case).
saves a PNG under ~/Pictures/Screenshots (toast shows the path); saves a PNG under ~/Pictures/Screenshots (toast shows the path);
CTRL+Print saves the whole screen the same way; bare Print still CTRL+Print saves the whole screen the same way; bare Print still
copies a region to the clipboard. Both new rows appear in SUPER+?. copies a region to the clipboard. Both new rows appear in SUPER+?.
Also (iteration #66): Tools ▸ Capture now shows the matching dim key
hint on the Region → clipboard / Region → file / Full screen → file
rows (Print / SHIFT + Print / CTRL + Print) — pango renders, no raw
`<span>` leaks.
- [ ] **rofi menu polish** (iteration #58, item 39 + #56/#57 34/40) — - [ ] **rofi menu polish** (iteration #58, item 39 + #56/#57 34/40) —
after `home-update`: (a) menu System Power profile shows a after `home-update`: (a) menu System Power profile shows a
colored icon per profile (performance/balanced/power-saver), not colored icon per profile (performance/balanced/power-saver), not

View File

@@ -17,6 +17,31 @@ Template:
--- ---
## 2026-07-08 — Capture rows show Print-key hints (iteration #66, direct requests)
- **Task:** Two live requests from Bernardo. (1) Fold his provided
power-menu mockup into item 36(b). (2) "make sure all menu items that
have a keybind display the keybind" (he dropped the flush-right ask —
inline is fine).
- **Did:** (1) BACKLOG item 36(b) un-gated — mockup + Nomarchy adaptation
(reuse batterylimit/power-profile writers, not raw TLP; wire the Waybar
battery `on-click`; one open call: replace-or-keep the System rows).
(2) Audited every menu/submenu: all SUPER(+CTRL) module-opening rows
already carry a hint (item 28c). The one real gap = the Tools ▸ Capture
rows, which run the exact `grim` commands of the Print / SHIFT+Print /
CTRL+Print binds but showed nothing. Added `hintForBind mods key` (reads
keybinds.nix by mods+key, drift-free) → hints on the three matching rows,
and `-markup-rows` on the Capture menu so the spans render.
- **Verified:** V0 `nix flake check --no-build` green; V1 HM built, shipped
nomarchy-menu shows `Region → clipboard {{Print}}`, `Region → file
{{SHIFT + Print}}`, `Full screen → file {{CTRL + Print}}` under
`-markup-rows`. Substring `case` matches sit before the appended span, so
dispatch is unaffected (same proven pattern as Tools/System).
- **Pending:** V3 — pango dim actually rendering in the Capture submenu
(queued on the existing Capture entry). Power-menu item 36(b) stays
`[human]` on the replace-or-keep call.
- **Next suggestion:** back to the queue head (item 36a done; 32 done) —
next actionable is likely item 33 (rofi scrollbar) or a QA sweep.
## 2026-07-08 — SUPER+? cheatsheet re-fixed: base keysym (iteration #65, item 32) ## 2026-07-08 — SUPER+? cheatsheet re-fixed: base keysym (iteration #65, item 32)
- **Task:** BACKLOG item 32 — SUPER+? still didn't open the cheatsheet - **Task:** BACKLOG item 32 — SUPER+? still didn't open the cheatsheet
after item 26's fix. Re-diagnose. after item 26's fix. Re-diagnose.

View File

@@ -158,6 +158,14 @@ let
menuHint = module: hintForAction "exec, nomarchy-menu ${module}"; menuHint = module: hintForAction "exec, nomarchy-menu ${module}";
# Apps opens rofi drun directly, not a nomarchy-menu module. # Apps opens rofi drun directly, not a nomarchy-menu module.
appsHint = " <span size='small' alpha='55%'>SUPER + D</span>"; appsHint = " <span size='small' alpha='55%'>SUPER + D</span>";
# A menu row that runs the same op as a global bind whose action isn't a
# `nomarchy-menu` module (the Capture rows ↔ the Print screenshot keys):
# match on mods+key so the hint still reads from keybinds.nix (single
# source, no drift), rather than a brittle full-action-string compare.
hintForBind = mods: key:
let m = lib.filter (b: b.mods == mods && b.key == key) keybinds.binds;
in lib.optionalString (m != [ ])
" <span size='small' alpha='55%'>${prettyKeys (lib.head m)}</span>";
nomarchy-menu = pkgs.writeShellScriptBin "nomarchy-menu" '' nomarchy-menu = pkgs.writeShellScriptBin "nomarchy-menu" ''
# Nomarchy menu dispatcher thin presentation layer over # Nomarchy menu dispatcher thin presentation layer over
@@ -400,10 +408,10 @@ ${themeRows}
# Screenshots + screen recording. Recording rows self-swap: while # Screenshots + screen recording. Recording rows self-swap: while
# one runs, the only offer is Stop (same surface as the bar's ). # one runs, the only offer is Stop (same surface as the bar's ).
choice=$( { choice=$( {
row "Region clipboard" applets-screenshooter row "Region clipboard${hintForBind "" "Print"}" applets-screenshooter
row "Region file" applets-screenshooter row "Region file${hintForBind "SHIFT" "Print"}" applets-screenshooter
row "Full screen clipboard" camera-photo row "Full screen clipboard" camera-photo
row "Full screen file" camera-photo row "Full screen file${hintForBind "CTRL" "Print"}" camera-photo
command -v tesseract >/dev/null 2>&1 && row "OCR region clipboard" scanner command -v tesseract >/dev/null 2>&1 && row "OCR region clipboard" scanner
if command -v nomarchy-record >/dev/null 2>&1; then if command -v nomarchy-record >/dev/null 2>&1; then
if nomarchy-record active; then if nomarchy-record active; then
@@ -416,7 +424,7 @@ ${themeRows}
fi fi
fi fi
back back
} | rofi -dmenu -show-icons -p Capture) || exit 0 } | rofi -dmenu -show-icons -markup-rows -p Capture) || exit 0
dir="$HOME/Pictures/Screenshots" dir="$HOME/Pictures/Screenshots"
file="$dir/$(date +%Y%m%d-%H%M%S).png" file="$dir/$(date +%Y%m%d-%H%M%S).png"
case "$choice" in case "$choice" in