You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Update to an existing plugin (version bumped in plugin.toml)
What it does
This update introduces a major architectural refactor to resolve host CPU callback timeouts and fixes reported community issues:
Data Service Architecture (service.luau):
Offloads configuration parsing and cache ownership to a background service ([[service]] id = "data").
Panel opening (panel.luau) is now instant (0ms) and renders pre-parsed snapshots from memory without performing synchronous file I/O.
Eliminates polling timers, watchers, and panel-tick schedulers.
Bug Fixes:
Fixes[keybind-cheatsheet][BUG] Panel blank on Niri #268 (Panel blank on Niri): Solves the onOpen() callback CPU budget timeout that caused blank panels on startup. Added support for single-quoted include directives (include './path.kdl').
Memory Leak Protection: Added explicit dynamic callback cleanup (resetCallbacks()) in panel.luau on panel close and plugin exit.
Metadata & API:
Updated plugin_api = 9 for Noctalia v5 compatibility.
Note for @rylos: Once this v0.2.2 release is merged, PR #333 can rebase on top of this clean baseline to add your Niri 3x parsing speedup and 15s refresh timeout recovery!
External dependencies
hyprctl (used only for Hyprland Lua live bind queries)
Testing
Tested on Niri
Tested on Hyprland
Tested on Sway
Tested on another compositor:
Noctalia version tested against: v5.0.0
Plugin API level: 9
Screenshots / Videos
No visual changes to the UI surface. Rendered keybinding layout remains identical to v0.2.1.
Checklist
The directory name matches the part of id after the / in plugin.toml exactly.
It ships plugin.toml, README.md, thumbnail.webp, and translations/en.json.
README.md follows the README template, documents
every entry id and dependency, and includes exact panel IPC commands and launcher prefixes where applicable.
version follows semver and is bumped in this PR; plugin_api is the oldest API level this plugin requires.
Every non-English translation in this PR uses a locale supported by Noctalia core, and I can read, write, and
understand that language well enough to review and maintain it (no unreviewed machine/LLM translations).
I did not edit catalog.toml; CI generates it.
This PR touches exactly one plugin directory.
Code review attestation
Plugins run as trusted, unsandboxed Luau in the user's session. Confirm:
The code is readable and not obfuscated, minified, or generated.
It does not download and execute remote code.
Every network call, filesystem write, and spawned process is something the description above accounts for.
I have the right to publish this code under the license declared in plugin.toml.
Hi @cheerfulScumbag — thanks for picking this up so quickly, and for the kind
words on #333. I rebased my work on this branch locally to get ahead of the
merge, and while running your own fixture suite against it I hit a regression
that comes from this PR, not from mine. Reporting it before it lands.
hypr_lua fails the bundled self-test on this branch.
noctalia msg plugin kenn/keybind-cheatsheet:data all self-test
main prefix "Workspace " Workspaces
this branch exact "Workspace" Workspaces
categoryFromHyprRules then compares "Workspace 1" against an exact rule
and falls through to Other. Two things combine to get there:
local hasConcat = code:find("%.%.", 1, true) ~= nil or (rhs ~= nil and rhs:find("%.%.", 1, true) ~= nil)
— with plain = true those searches look for the literal four-character
string %.%., which never occurs, so hasConcat is always false and every
description becomes exact. Either drop the true and keep the pattern
(code:find("%.%."), as v0.2.1 did) or keep plain and search for "..".
trim(str) on each extracted literal removes the trailing space that makes "Workspace " a useful prefix. Even with hasConcat fixed, the rule becomes prefix "Workspace", which happens to still match here but silently changes
the meaning of every prefix rule.
Fixing (1) alone restores passed: true on my side.
On #333: my rebase onto this branch is ready and green apart from the above
— the niri parser changes are orthogonal to yours, and I folded your
single-quoted include support into the single-pass include scan so #268 keeps
working. Differential test says the bindings are identical to this branch on the
bundled fixtures, a 32 KB real config, and single/double-quoted includes. I will
push it to #333 as soon as this merges, bumped to v0.2.3.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Plugin
kenn/keybind-cheatsheetplugin.toml)What it does
This update introduces a major architectural refactor to resolve host CPU callback timeouts and fixes reported community issues:
Data Service Architecture (
service.luau):[[service]] id = "data").panel.luau) is now instant (0ms) and renders pre-parsed snapshots from memory without performing synchronous file I/O.Bug Fixes:
onOpen()callback CPU budget timeout that caused blank panels on startup. Added support for single-quotedincludedirectives (include './path.kdl').extractLuaStringLiterals) to properly assign categories for empty string prefix concatenations ("" .. "Bar"), multiline assignments, and concatenated descriptions.resetCallbacks()) inpanel.luauon panel close and plugin exit.Metadata & API:
plugin_api = 9for Noctalia v5 compatibility.Note for @rylos: Once this v0.2.2 release is merged, PR #333 can rebase on top of this clean baseline to add your Niri 3x parsing speedup and 15s refresh timeout recovery!
External dependencies
hyprctl(used only for Hyprland Lua live bind queries)Testing
Screenshots / Videos
No visual changes to the UI surface. Rendered keybinding layout remains identical to v0.2.1.
Checklist
idafter the/inplugin.tomlexactly.plugin.toml,README.md,thumbnail.webp, andtranslations/en.json.README.mdfollows theREADME template, documents
every entry id and dependency, and includes exact panel IPC commands and launcher prefixes where applicable.
thumbnail.webpwith the thumbnail generator.versionfollows semver and is bumped in this PR;plugin_apiis the oldest API level this plugin requires.understand that language well enough to review and maintain it (no unreviewed machine/LLM translations).
catalog.toml; CI generates it.Code review attestation
Plugins run as trusted, unsandboxed Luau in the user's session. Confirm:
licensedeclared inplugin.toml.