Skip to content

Add Handy plugin (ooodnakov/handy) - #1410

Open
ooodnakov wants to merge 3 commits into
noctalia-dev:mainfrom
ooodnakov:add-handy
Open

ooodnakov wants to merge 3 commits into
noctalia-dev:mainfrom
ooodnakov:add-handy

Conversation

@ooodnakov

@ooodnakov ooodnakov commented Nov 12, 2026 •

Copy link
Copy Markdown

Plugin

  • Id: ooodnakov/handy
  • New plugin
  • Update to an existing plugin (version bumped in plugin.toml)

What it does

Adds a Handy speech-to-text integration to Noctalia: a bar widget showing idle,
recording, transcribing, and offline state; a panel with transcript history,
search, click-to-copy, confirmed deletion of a transcript and its recording
file, and model switching; and a service that owns all Handy subprocesses and
publishes one snapshot to the UI entries.

External dependencies

  • handy — launches Handy, toggles transcription/post-processing, cancels, and starts a hidden instance.
  • sqlite3 — reads history.db and deletes a confirmed transcript row.
  • pactl — detects Handy's live cpal-pulseaudio-<pid> capture stream.
  • pgrep — detects whether Handy is running.
  • xdg-open — opens the recordings folder.
  • busctl — reads Handy's StatusNotifier tray menu and model list.
  • dbus-send — activates a model item in that tray menu.

The service also reads recent logs/handy.log lines with coreutils tail.

Testing

  • Tested on Niri
  • Tested on Hyprland
  • Tested on Sway
  • Tested on another compositor: Umbriel
  • Noctalia version tested against: 5.4.0
  • Plugin API level: 24

Exercised the bar widget in idle and recording states, the panel with search,
copy, transcript deletion (disposable row plus dummy recording file), and model
switching between Parakeet Ultra and Moonshine Tiny through Handy's tray menu.
The test model was removed and Handy was restarted afterwards.

Screenshots / Videos

Handy panel

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

  • The code is readable and not obfuscated, minified, or generated.
  • Code identifiers and code comments are in English.
  • 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.

@github-actions
github-actions Bot marked this pull request as draft November 12, 2026 07:23
@github-actions

github-actions Bot commented Nov 12, 2026 •

Copy link
Copy Markdown
Contributor

The description now contains the required template structure.

@ooodnakov
ooodnakov marked this pull request as ready for review November 12, 2026 07:24
@ooodnakov ooodnakov changed the title Add Handy plugin (odnakov/handy) Add Handy plugin (ooodnakov/handy) Nov 12, 2026
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.

1 participant