Hold Ctrl+Space and talk.

Let go, and fishpr types what you said wherever your cursor is. Push-to-talk dictation for KDE Plasma 6 on Wayland.

$curl -fsSL https://fishpr.s.gy | sh
  • Arch
  • Ubuntu 24.04+
  • Debian 13+
  • Fedora 42+
  • ~0.5 sfrom letting go to text on screen
  • 14 MBone self-contained Rust binary
  • 0API keys, or settings to start
  • MITfree and open source

Say it instead of typing it.

fishpr lives in your system tray and stays out of the way. There’s no window to switch to.

Ctrl+Space

Hold to talk

Hold Ctrl+Space in any app. A small black pill appears at the bottom of the screen, its bars moving with your voice. Let go and the text arrives about half a second later, however long you spoke.

Remember to book the train tickets for Friday.
Ctrl+V

Pastes it for you

The text goes on the clipboard and is pasted into the focused app. If pasting fails, it’s still on your clipboard.

No speech detected

Ignores silence

A voice check runs on your machine on every recording. Press the keys by accident and nothing is pasted, instead of a made-up “Thank you.”

Retry, don’t repeat yourself

If transcription fails, the bars turn red and the pill stays for ten seconds with a retry button. One click sends the same recording again, so a network hiccup never costs you what you said.

Or click the tray icon

Click once to start and again to stop. The tray icon and the shortcut share one state, so you can start with one and stop with the other.

14MB
one binary, signed packages

Small and native

A single Rust binary, installed from a signed package repo. Updates arrive with your normal pacman -Syu or apt upgrade.

Transcribed while you’re still talking.

Your audio streams to Google as you speak, so the text is ready about half a second after you let go. Everything else happens on your machine.

  1. On your machine

    Record

    While you hold the keys, your mic is recorded through PipeWire with pw-record.

  2. Sent to Google

    Transcribe, as you talk

    The audio streams to Google’s speech service, the one behind the mic button on gemini.google.com, and comes back as text. No account or API key.

  3. On your machine

    Check for speech

    On release, Silero VAD listens for a voice. If there was only silence, the text is thrown away.

  4. On your machine

    Paste

    The text goes on your clipboard, and fishpr presses Ctrl+V in the focused window.

One command, and it’s running.

The installer sets up fishpr’s signed packages, makes it start on login, and starts it. Pick your distro to see exactly what it does.

~ : bash – Konsole
[you@arch ~]$ curl -fsSL https://fishpr.s.gy | sh
==> Trusting fishpr's package signing key D429F4F1F0C84E20BC8984E824966D93F1B224EF
[sudo] password for you:
==> Adding the [fishpr] repo to /etc/pacman.conf
==> Installing fishpr-bin (this also upgrades the rest of the system)
    … pacman installs fishpr-bin and its dependencies …
==> fishpr is running. Hold Ctrl+Space to dictate.

Run it as your normal user. It asks for sudo when it needs it.

What it changes

Trusts fishpr’s signing key, adds the [fishpr] repo to /etc/pacman.conf, and installs fishpr-bin. It runs pacman -Syu, so the rest of your system is upgraded too.

Updating

New versions arrive with sudo pacman -Syu or yay. Restart fishpr afterwards, or run the install command again to update and restart in one go.

Uninstalling

Remove the package, then delete the [fishpr] section at the end of /etc/pacman.conf.

sudo pacman -R fishpr-bin

You need KDE Plasma 6 on Wayland and an x86_64 machine. Every package brings in PipeWire, wl-clipboard, and libnotify, and the uinput rule for silent pasting. On anything else, build from source.

Learn it in a minute.

  • Hold Ctrl+Space, speak, let go

    The text is pasted into the focused window.

  • Click the tray icon, speak, click again

    The same, without the keyboard. Start with one and stop with the other if you like.

  • Run fishpr --toggle

    Starts recording, or stops and pastes, like a tray click. Bind it to any key or call it from a script.

  • Right-click the tray icon, then Quit

    fishpr exits and gives Ctrl+Space back to your apps. pkill -x fishpr does the same.

Good to know

Pick your own shortcut

Rebind it in System Settings → Keyboard → Shortcuts → fishpr. Handy if your IDE uses Ctrl+Space for suggestions.

Pasting in terminals

Most terminals paste with Ctrl+Shift+V, so the automatic paste won’t work there. The text is still on your clipboard.

Using sway or Hyprland?

They aren’t supported, but fishpr may still work: bind fishpr --toggle to a key, then press once to start and again to stop.

Questions

Something not covered here? Ask on GitHub.

Open an issue (opens in a new tab)
Does it cost anything, or need an account?

No. fishpr is free and MIT-licensed, and it doesn’t need a Google account or API key.

Where does my audio go?

While you hold the keys, your audio streams to Google for transcription, the same as using the microphone button on gemini.google.com. That includes an accidental press where nobody speaks: the speech check on your machine then throws the result away, but the audio has already been sent. Don’t dictate anything you wouldn’t say to Gemini.

Will it keep working?

It depends on an unofficial, undocumented service that Google can change or block at any time. If that happens, you’ll see a failure on the pill and need to wait for a fix. The backend is isolated in one file, so moving fishpr to another service, such as an official speech API, is a small change. fishpr isn’t affiliated with Google.

Does it work on GNOME?

No. fishpr is built for KDE Plasma 6 on Wayland. On other desktops you can try binding fishpr --toggle to a key, but there’s no support for them.

Why does pasting need /dev/uinput?

KWin doesn’t let apps fake key presses, so fishpr presses Ctrl+V on a virtual keyboard instead. The package installs a udev rule that lets it do that silently. Without the rule, fishpr asks for remote-control permission once and shows an indicator on every paste.

How do I update or uninstall it?

Updates come with your normal system upgrade on Arch, Ubuntu, and Debian; on Fedora, run the install command again. Restart fishpr afterwards, or run the install command again to update and restart it in one go. The install section has the uninstall commands for each distro.

Stop typing everything.

$curl -fsSL https://fishpr.s.gy | sh