feat(contrib): GNOME Shell waveform OSD (fills the mic-osd gap on Mutter)#193
Open
ninyawee wants to merge 4 commits into
Open
feat(contrib): GNOME Shell waveform OSD (fills the mic-osd gap on Mutter)#193ninyawee wants to merge 4 commits into
ninyawee wants to merge 4 commits into
Conversation
hyprwhspr's animated mic-osd needs gtk4-layer-shell, which GNOME/Mutter does not implement, so GNOME users only get notification status. This adds a small GNOME Shell extension that draws the overlay inside gnome-shell instead — focus-safe (never steals focus from the dictation target) and audio-reactive. It is a pure status consumer of the files hyprwhspr already writes (recording_status, audio_level, transcript_preview) — no audio capture, no extra runtime deps. Ships under contrib/ with an install.sh and README; not wired into the main install. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LjyBMNZ4CxXbNHcYM4pzoA
Owner
|
Hey, thanks a lot for the pull requests. I really appreciate it. Ubuntu and GNOME is a bit of a blind spot for me, and I won't really be able to test this. Are you cool doing some testing once I have a look at the code? There's likely some edge cases and such which will need to be tended to. Nothing major, I imagine. Thanks again 😁 |
Owner
|
OK! That's all from me. If you can test it one last time, that'd be very helpful |
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
What
A small GNOME Shell extension that gives hyprwhspr an animated, audio-reactive waveform overlay on GNOME/Mutter — the one place hyprwhspr's built-in
mic-osdcan't draw one.Why
The
mic-osdvisualizer relies ongtk4-layer-shell, which Mutter doesn't implement, so on GNOME hyprwhspr correctly falls back to plain notifications (main.py: "No layer-shell (e.g. GNOME/Mutter): the overlay would steal [focus]"). A normal top-level window can't substitute, because mapping it would steal keyboard focus from the window the dictation is being typed into.Drawing the overlay inside gnome-shell (via an extension) sidesteps both problems: it's always-on-top and never takes focus, so it's safe to show during dictation.
How it works
Pure status consumer — no audio capture, no extra runtime deps. It reads the files hyprwhspr already writes:
~/.config/hyprwhspr/recording_status~/.config/hyprwhspr/audio_level0.000–1.000⇒ live bar heights$XDG_RUNTIME_DIR/hyprwhspr/transcript_previewA pulsing record dot + 27 cyan→violet equalizer bars driven by the live mic level, fading in/out with recording state at bottom-centre.
Packaging
contrib/gnome-shell-extension/— not wired into the main installer; opt-in.install.shcopies it into~/.local/share/gnome-shell/extensionsand enables it (queues for next login when the shell can't hot-load on Wayland).Testing
node --check extension.js,bash -n install.sh,metadata.jsonparse — all clean.realtime-wsbackend.Happy to drop it, move it elsewhere, or rework the styling if a contrib extension isn't something you want in-tree — it's deliberately isolated under
contrib/so it touches nothing else.🤖 Generated with Claude Code