Skip to content

Releases: jonochang/voxput

v0.3.7

Choose a tag to compare

@jonochang jonochang released this 20 Feb 04:46

What's new

Toggle mode

A new Push-to-talk switch in Settings → Keyboard Shortcut lets you choose between two recording modes:

  • Push-to-talk (default): hold the shortcut to record, release any key to stop
  • Toggle mode: press once to start recording, press again to stop

Configurable via home-manager with gnome.pushToTalk = false.

Fix: push-to-talk key-release on Wayland

The previous implementation listened for key-release-event on global.stage, which is not delivered when an application window has keyboard focus on Wayland. Push-to-talk now uses Main.pushModal() to temporarily grab keyboard input to gnome-shell for the duration of the recording, ensuring the release is detected reliably.

v0.3.6

Choose a tag to compare

@jonochang jonochang released this 20 Feb 04:13

Fix: Super+D shortcut unresponsive after an error

After a gnome-shell crash (e.g. from the Clutter virtual keyboard in v0.3.3–v0.3.4), voxputd could be left in `error` state. The push-to-talk shortcut silently returned early for any non-idle state, so pressing Super+D did nothing — while the menu Toggle still worked because it calls the Toggle RPC directly.

The shortcut now only blocks during active transcription. Starting from `error` state is allowed; the daemon resets cleanly on a new StartRecording request.


Auto-paste: ydotool daemon required

If auto-paste is enabled but the shortcut types nothing, the ydotool daemon is likely not running. Add to your NixOS system configuration:

```nix
services.ydotool.enable = true;
```

Then rebuild and log out/in. The transcript is always copied to the clipboard as a fallback (Ctrl+V to paste).

v0.3.5

Choose a tag to compare

@jonochang jonochang released this 20 Feb 03:39

Fix: auto-paste no longer crashes gnome-shell

Clutter.VirtualInputDevice.notify_keyval() (used in v0.3.3–v0.3.4) routes events through gnome-shell's own Clutter event pipeline. Injecting a full transcript as hundreds of rapid key events destabilises the shell, causing gnome-shell to crash and the GDM login screen to appear.

Auto-paste now uses ydotool, which injects keystrokes via the kernel's uinput subsystem — completely outside the Wayland compositor. This is the correct approach for programmatic text input on GNOME Wayland.

Required: enable the ydotool daemon

Add to your NixOS system configuration (not Home Manager):

services.ydotool.enable = true;

pkgs.ydotool is added to your user packages automatically when gnome.autoPaste = true in the Home Manager module.

Clipboard fallback

The transcript is always copied to the clipboard first. If ydotool is not found, the clipboard is still set and you can paste manually with Ctrl+V (or Ctrl+Shift+V in terminals).

v0.3.4

Choose a tag to compare

@jonochang jonochang released this 20 Feb 03:31

Fix: auto-paste no longer types into the lock-screen password field

Clutter.VirtualInputDevice events are processed within gnome-shell's own Clutter scene. If the screen locked (idle timeout) during transcription, those keystrokes were delivered to the lock-screen password field.

This release adds a Main.screenShield.locked guard — checked immediately when the transcript arrives and again after the 300 ms dispatch delay — so keystrokes are silently dropped whenever the screen is locked.

The 300 ms delay before injecting keystrokes also gives Mutter time to finish processing the stop-recording keybinding, which should improve reliability.

v0.3.3

Choose a tag to compare

@jonochang jonochang released this 20 Feb 03:01

Fix: auto-paste now works on GNOME Wayland

wtype (used in v0.3.2 for auto-paste) relies on the zwlr_virtual_keyboard_manager_v1 protocol, which GNOME's Mutter compositor does not implement. This caused auto-paste to silently do nothing on GNOME.

Auto-paste now uses Clutter.VirtualInputDevice.notify_keyval() — Mutter's own virtual keyboard API. It types the transcript directly into the focused window with no external tools required. wtype is no longer a dependency.

v0.3.2

Choose a tag to compare

@jonochang jonochang released this 20 Feb 02:09

What's new

  • Auto-paste — transcript is typed directly into the focused window after transcription (requires wtype). Toggle in extension preferences or set gnome.autoPaste = true in the Home Manager module.
  • GNOME Shell 49 support added to extension metadata
  • Push-to-talk fix — keyboard shortcut now reliably works on Wayland by using daemon state (idle→start, recording→stop) rather than depending on key-release events

NixOS / Home Manager

services.voxput = {
  enable = true;
  gnome = {
    enable    = true;
    autoPaste = true;   # adds wtype and enables auto-paste
  };
};

v0.3.1

Choose a tag to compare

@jonochang jonochang released this 19 Feb 22:03

Fixes

  • Push-to-talk keyboard shortcut: hold to record, release any key to stop
  • Integration tests now skip gracefully when GROQ_API_KEY is unset (fixes Nix sandbox build failures)
  • Nix package builds from flake source directly — no git tag required for flake users
  • package.nix accepts optional src argument, eliminating duplication with flake.nix

NixOS / Home Manager

inputs.voxput.url = "github:jonochang/voxput";
nixpkgs.overlays = [ inputs.voxput.overlays.default ];

services.voxput = {
  enable = true;
  gnome.enable = true;
};

v0.3.0

Choose a tag to compare

@jonochang jonochang released this 19 Feb 21:42

What's new

  • Daemon (voxputd) — background D-Bus service with push-to-talk support
  • GNOME Shell extension — top-bar indicator, push-to-talk shortcut (hold to record, release to stop), configurable via preferences
  • Clipboard output — transcripts are automatically copied to the clipboard
  • NixOS / Home Manager module — single flake input wires up the daemon, D-Bus activation, and GNOME extension

Installation

See the README for full instructions.

NixOS / Home Manager

inputs.voxput.url = "github:jonochang/voxput";
nixpkgs.overlays = [ inputs.voxput.overlays.default ];

# In your Home Manager config:
imports = [ inputs.voxput.homeManagerModules.default ];
services.voxput = {
  enable = true;
  gnome.enable = true;
};