Skip to content

feat(keybinds): redesign cheatsheet with category navigation - #3534

Merged
bbedward merged 5 commits into
duxlabs-dev:masterfrom
hthienloc:feat/cheatsheet-redesign
Sep 23, 2026
Merged

bbedward merged 5 commits into
duxlabs-dev:masterfrom
hthienloc:feat/cheatsheet-redesign

Conversation

@hthienloc

@hthienloc hthienloc commented Sep 22, 2026 •

Copy link
Copy Markdown
Member
  • Add category sidebar with Material Symbols icons and badge counts
  • Move search field to top of sidebar with Ctrl+F shortcut
  • Implement 2-column masonry layout for keybind items
  • Deduplicate duplicate actions and stack multi-key combos vertically
  • Collapse consecutive workspace keybindings (1-9) into range entries
  • Add media & hardware icons for volume, mic, brightness, and PrtSc keycaps
  • Preserve Niri window filter properties and distinguish same-app Alt-Tab binds

Old:
dms_capture_1790083969782

New:

1790149323140737452

@hthienloc
hthienloc force-pushed the feat/cheatsheet-redesign branch from 96059ba to e77838e Compare September 23, 2026 01:23
@hthienloc
hthienloc marked this pull request as ready for review September 23, 2026 01:24
@hthienloc

Copy link
Copy Markdown
Member Author

/claude review

@hthienloc hthienloc changed the title WIP: redesign keybinds cheatsheet feat(keybinds): redesign cheatsheet with category navigation Sep 23, 2026
Comment thread quickshell/Services/KeybindsService.qml Outdated
Comment thread quickshell/Services/KeybindsService.qml Outdated
Comment thread quickshell/Modals/KeybindsContent.qml Outdated
@claude

claude Bot commented Sep 23, 2026

Copy link
Copy Markdown
Contributor

Claude review

The layout redesign looks fine, but clicking a bind to run it is broken on aqueous and mango.

  • On aqueous, clicking a compositor bind runs its action id as a shell command, and the sway branch is dead code: quickshell/Services/KeybindsService.qml:361
  • mangocmsg does not exist. Use mmsg -d with comma-separated params: quickshell/Services/KeybindsService.qml:353
  • New strings "Click to run" and "Search keybinds..." have no translator context: quickshell/Modals/KeybindsContent.qml:557
    Checked: the KeybindsContent rewrite (data model, search debounce, Repeaters, Dank* wrappers), the KeyUtils token formatter, and executeAction against the action formats from the niri, hyprland, mango and aqueous providers. Model: claude-opus-5-5.

@hthienloc

Copy link
Copy Markdown
Member Author

/claude review

@claude

claude Bot commented Sep 23, 2026

Copy link
Copy Markdown
Contributor

Claude review

No issues found. All three findings from the last review are fixed.
Checked: the fixes from the last review (aqueous binds now return false in canExecuteAction/executeAction, mango uses mmsg -d with commas, translator context on the new strings); executeAction against the action strings built by the niri, hyprland and mango providers; the KeybindsContent rewrite (data model binding, reload on cheatsheetLoaded, search debounce, Repeaters, Dank* components and Theme tokens it uses); KeyUtils.formatKeyTokens; and that the reused i18n terms exist in en.json. Model: claude-opus-5-5.

@hthienloc
hthienloc marked this pull request as draft September 23, 2026 01:49
@hthienloc
hthienloc marked this pull request as ready for review September 23, 2026 01:59
@hthienloc
hthienloc marked this pull request as draft September 23, 2026 02:10
…ing, and click-to-execute

- Add category sidebar with Material Symbols icons and badge counts
- Move search field to top of sidebar with Ctrl+F shortcut
- Implement 2-column masonry layout for keybind items
- Deduplicate duplicate actions and stack multi-key combos vertically
- Collapse consecutive workspace keybindings (1-9) into range entries
- Add media & hardware icons for volume, mic, brightness, and PrtSc keycaps
- Preserve Niri window filter properties and distinguish same-app Alt-Tab binds
- Enable click-to-execute for keybind actions across supported compositors
@hthienloc
hthienloc force-pushed the feat/cheatsheet-redesign branch from ffe4bd6 to b87e346 Compare September 23, 2026 09:26
@hthienloc
hthienloc marked this pull request as ready for review September 23, 2026 09:27
@hthienloc

Copy link
Copy Markdown
Member Author

/claude review

Comment thread core/internal/keybinds/providers/niri.go
Comment thread quickshell/Modals/KeybindsContent.qml Outdated
@claude

claude Bot commented Sep 23, 2026

Copy link
Copy Markdown
Contributor

Claude review

Adding the niri filter/scope properties breaks saving those binds, and range rows run the wrong action when clicked.

  • Saving a filter="app-id"/scope="output" action writes the property as a quoted positional argument, so niri rejects the config: core/internal/keybinds/providers/niri.go:27
  • Clicking a collapsed range row (e.g. workspaces 1–9) always runs the first bind: quickshell/Modals/KeybindsContent.qml:323
    Checked: the rebased commit in full, including the niri property round trip (buildActionFromNode → parseActionParts → buildActionNode), the new Alt-Tab action ids and labels, executeAction/canExecuteAction, and the KeybindsContent grouping, dedupe and range collapse. Model: claude-opus-5-5.

@hthienloc

Copy link
Copy Markdown
Member Author

/claude review

Comment thread quickshell/Services/KeybindsService.qml Outdated
@claude

claude Bot commented Sep 23, 2026

Copy link
Copy Markdown
Contributor

Claude review

Both fixes from the last review work, but clicking a niri bind that has action properties still fails.

  • niri msg action gets properties as positional key=value tokens (focus=false, show-pointer=false, filter="app-id"), and the niri CLI rejects them: quickshell/Services/KeybindsService.qml:354
    Checked: the latest fix commit (removing the quoted-token guard in isNiriActionPropertyToken, the filter/scope round trip, range rows now not clickable with an empty action), the Alt+grave filter heuristic, and executeAction/canExecuteAction against niri action strings. Model: claude-opus-5-5.

@hthienloc

Copy link
Copy Markdown
Member Author

/claude review

Comment thread quickshell/Services/KeybindsService.qml Outdated
@claude

claude Bot commented Sep 23, 2026

Copy link
Copy Markdown
Contributor

Claude review

The flag conversion fixes focus, show-pointer and write-to-disk, but skip-confirmation still fails when clicked.

  • quit skip-confirmation=true becomes --skip-confirmation=true, and niri rejects it because that switch takes no value: quickshell/Services/KeybindsService.qml:370
    Checked: the latest fix commit (converting niri key=value properties to CLI flags, excluding next-window/previous-window in both canExecuteAction and executeAction), checked against every property in niriActionProperties. Model: claude-opus-5-5.

@hthienloc

Copy link
Copy Markdown
Member Author

/claude review

Comment thread quickshell/Services/KeybindsService.qml Outdated
@claude

claude Bot commented Sep 23, 2026

Copy link
Copy Markdown
Contributor

Claude review

The skip-confirmation fix works, but clicking a niri spawn-sh bind still fails.

  • spawn-sh binds go to niri msg action spawn-sh <words>, and niri rejects them: quickshell/Services/KeybindsService.qml:344
    Checked: the latest fix commit (skip-confirmation now passed as a plain switch) and how niri action strings from formatRawAction reach executeAction/canExecuteAction. Model: claude-opus-5-5.

@hthienloc

Copy link
Copy Markdown
Member Author

/claude review

@claude

claude Bot commented Sep 23, 2026

Copy link
Copy Markdown
Contributor

Claude review

No issues found. The spawn-sh fix from the last review works.
Checked: the latest fix commit (spawn-sh handling in canExecuteAction/executeAction, and in getActionType/isValidAction/parseShellCommand). Also checked that the Settings editor now treats spawn-sh binds as shell binds and saves edits as a valid spawn sh -c action. Model: claude-opus-5-5.

@bbedward
bbedward merged commit 9d1884f into duxlabs-dev:master Sep 23, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants