aboutsummaryrefslogtreecommitdiffstats
path: root/keybinds
AgeCommit message (Collapse)AuthorFilesLines
5 daysName the project Keystone, and move its paths and namespacesDanilo M.2-2/+2
The repository had no name of its own, only the framework's. It is now Keystone, in the README, AGENTS.md, the settings window, notes commit messages, calctl's PRODID and the user page's User-Agent. Its files move off quickshell's name too: ~/.config/quickshell/greetings -> ~/.config/keystone/ ~/.config/quickshell/obs-scene-icons.json -> ~/.config/keystone/ $XDG_STATE_HOME/quickshell/desktop.json -> $XDG_STATE_HOME/keystone/ ~/.config/quickshell is Quickshell's own default config directory (a bare qs loads its shell.qml), so sharing it was a collision rather than a home. There is no fallback to the old paths: the files are moved once. The layer namespaces become keystone-*, and the Hyprland blur rules in hypr-theme are renamed to match in the same change. A running shell keeps its old namespaces until restarted. Left alone: the retired standalone mail and vm shells' namespaces, which their READMEs keep as history; Quickshell's own app id, binary and process name; and the repository directory. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
7 daysfeat(shared): one faded glow for hovers across the shellsDanilo M.2-3/+16
Hover and attention effects were solid: a flat accent ring round the user page's avatar, a flat quarter-disc in the hot corner, and thick accent or white borders on window cards, keycaps and knobs. Glow.qml is a RectangularShadow in the accent, fading out from the shape's edge and in over 140ms, linked into desktop, window-switcher and keybinds like Theme.qml, and all five places use it. Selection borders in the appearance tabs stay: they mark state, not hover. The avatar also gains the hover cue in the first place: the hand cursor never showed under a hyprcursor-only theme, so without it the picture gave no sign it could be clicked. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25fix(keybinds): wrap long labels instead of eliding themDanilo M.1-1/+1
A label is the only place the reminder says what a bind does, so cutting it short loses the part that matters, as with the column moves' scrolling-layout note. A long one now takes a second line. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25feat(keybinds): draw the macropad keycaps as they lookDanilo M.2-21/+57
Each key showed its plain action as text. It now carries the real cap's legends, Nerd Font glyphs checked by name in Inconsolata, with the shifted or Alt legend below and the cap in the palette colour nearest the real one. Hovering still lists every action. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25feat(keybinds): draw the macropad beside the listDanilo M.5-84/+233
The pad glyph on each row was too small to read. The left fifth of the overlay now draws the pad at size, each key labelled with its plain action; hovering a key or an encoder lists everything it does, held keys and turn direction spelled out. padActions() in Binds.js inverts the grouped rows into that per-key list, and PAD's turn values became words for it. The panel is pinned at a fixed height: centred, it moved whenever the hovered key's list changed length. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25feat(keybinds): show where a bind sits on the macropadDanilo M.4-5/+120
The macropad's firmware sends ordinary combos, so the overlay listed them as keyboard shortcuts nobody presses. A PAD table in Binds.js maps each combo to its key (1-12) or encoder (top or bottom, turned or pressed) and what is held with it, and the row draws the pad small with that key lit. The workspace row is built in a loop, as it is in keybindings.lua. Every entry was checked against hyprctl binds -j. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25feat(keybinds): show mnemonic names for obscure keysDanilo M.3-10/+38
Hyprland's key names are its own (mouse:272, XF86Calculator), not what is printed on the keyboard or how the key is pressed, which defeats a reminder. A fixed map in Binds.js renames them for display only; an unlisted key shows as before. SUPER reads as Win for the same reason. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25fix(keybinds): fill columns top to bottomDanilo M.1-2/+9
Groups flowed left to right in rows, so each row was as tall as its longest group: short groups sat above empty space and the block ran past the top and bottom of the screen. Columns filled to the screen's height pack the groups and keep everything visible. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25feat(keybinds): live keybind reminder overlayDanilo M.4-0/+229
Modelled on window-switcher: a Scope with a 1x1 keepalive PanelWindow plus a LazyLoader'd overlay, opened via IpcHandler (SUPER+k is bound in a different repo). hyprctl binds -j is asked fresh on every opening so the list matches whatever Hyprland has loaded, with Binds.group() from task 1 turning it into the grid's {name, rows} groups. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25fix(keybinds): survive group names shadowing Object.prototypeDanilo M.2-1/+9
A description like "toString: X" made byName["toString"] resolve to the inherited Object.prototype.toString instead of undefined, so the group was never created and .rows.push threw. Object.create(null) gives byName no prototype to shadow. Also note in a comment that CAPS/MOD2/MOD3/MOD5 modmask bits are not decoded and silently drop from the combo string. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25feat(keybinds): group hyprctl binds by descriptionDanilo M.2-0/+95
Binds.js parses hyprctl binds -j output into display groups for the upcoming keybind reminder overlay. Group name and row label come from the "Group: Label" convention in each bind's description; a bind without one still surfaces under "Undescribed" rather than vanishing, so a gap in the Hyprland config stays visible. Pure functions with no QML dependency, so test_binds.js checks them directly with node, stripping the .pragma library line the QML runtime requires but node does not understand. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>