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
Direct PipeWire audio playback via pw-play with volume amplification support (0% to 200%).
Real-time keyboard event capture using evtest with automatic input device deduplication and 40ms key debouncing.
Fully managed via Noctalia Settings with IPC toggle support.
External dependencies
evtest: Captures raw keyboard input events from /dev/input/by-id/*kbd* or /dev/input/by-path/*kbd*.
pw-play: Plays WAV audio clips with low latency via PipeWire.
Testing
Tested on Hyprland
Tested on Niri
Tested on Sway
Tested on another compositor:
Noctalia version tested against: latest
Plugin API level: 1
Screenshots / Videos
N/A (Headless service plugin managed through Noctalia Settings).
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.
thumbnail.webp is present and relevant; for a new plugin I created it with the thumbnail generator, and for an update I regenerated it with the generator if the visual identity or user-facing appearance changed.
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.
blocking - typing-sounds/soundpacks/nk-cream/config.json
None of the 1381 bundled WAV files carry a documented license or source.
The only LICENSE in the plugin is the code-level MIT grant, the README
credits nothing, and the soundpack config.json files contain only id, name,
and key-to-file maps. At least one pack is labeled "NK Cream (original by
Ryan)", i.e. a third party's recordings, and several packs are named after
third-party switch products. Repo precedent (ambient-sounds/ATTRIBUTION.md)
requires per-file source and license disclosure for audio. Before merge the
author must document provenance and license per soundpack (self-recorded,
or the licensed corpus each pack came from, with any required credit) and
confirm the right to redistribute all of it. Without that, the repository
is accepting roughly 19 MB of unattributed third-party audio under an MIT
grant that does not cover it.
non-blocking - typing-sounds/plugin.toml:10
The manifest dependency list names only "evtest", but the daemon shells out
to "pw-play" for every key press (typing-sounds/service.luau:56) and the
README requires it. Noctalia's dependency metadata therefore understates
the runtime surface. Add "pw-play" (or document why it is omitted).
Related: the service has no onConfigChanged handler, so edits to volume,
sound_pack, or the enabled flag appear to take effect only when the entry
restarts, while the README says all configuration is managed live from
plugin settings. If the host does not restart service entries on config
change (other services here re-read config in onConfigChanged), volume and
sound pack changes will not apply until a restart.
Also this must be terrible performance to use pw-play on every key stroke
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
hthienloc/typing-soundsplugin.toml)What it does
Plays mechanical keyboard typing sound profiles as you type:
pw-playwith volume amplification support (0% to 200%).evtestwith automatic input device deduplication and 40ms key debouncing.External dependencies
evtest: Captures raw keyboard input events from/dev/input/by-id/*kbd*or/dev/input/by-path/*kbd*.pw-play: Plays WAV audio clips with low latency via PipeWire.Testing
Screenshots / Videos
N/A (Headless service plugin managed through Noctalia Settings).
Checklist
idafter the/inplugin.tomlexactly.plugin.toml,README.md,thumbnail.webp, andtranslations/en.json.README.mdfollows the README template, documents every entry id and dependency, and includes exact panel IPC commands and launcher prefixes where applicable.thumbnail.webpis present and relevant; for a new plugin I created it with the thumbnail generator, and for an update I regenerated it with the generator if the visual identity or user-facing appearance changed.versionfollows semver and is bumped in this PR;plugin_apiis the oldest API level this plugin requires.catalog.toml; CI generates it.Code review attestation
Plugins run as trusted, unsandboxed Luau in the user's session. Confirm:
licensedeclared inplugin.toml.