Skip to content

Add typing-sounds plugin - #660

Closed
hthienloc wants to merge 2 commits into
noctalia-dev:mainfrom
hthienloc:add-typing-sounds
Closed

Add typing-sounds plugin#660
hthienloc wants to merge 2 commits into
noctalia-dev:mainfrom
hthienloc:add-typing-sounds

Conversation

@hthienloc

Copy link
Copy Markdown

Plugin

  • Id: hthienloc/typing-sounds
  • New plugin
  • Update to an existing plugin (version bumped in plugin.toml)

What it does

Plays mechanical keyboard typing sound profiles as you type:

  • 18 mechanical switch profiles (Cherry MX Black/Blue/Brown/Red in ABS & PBT, Holy Pandas, NovelKeys Cream, Everglide, Topre, etc.).
  • 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.

@ItsLemmy

ItsLemmy commented Sep 7, 2026

Copy link
Copy Markdown
Contributor
  1. 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.

  2. 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

@ItsLemmy
ItsLemmy marked this pull request as draft September 7, 2026 18:30
@ItsLemmy

ItsLemmy commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

I'm just gonna close this PR, sorry but I dont want to clutter the repo with so many useless blobs.

@ItsLemmy ItsLemmy closed this Sep 7, 2026
@hthienloc
hthienloc deleted the add-typing-sounds branch September 7, 2026 22:38
@hthienloc

Copy link
Copy Markdown
Author

No problem

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