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.
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
fishpr lives in your system tray and stays out of the way. There’s no window to switch to.
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.
The text goes on the clipboard and is pasted into the focused app. If pasting fails, it’s still on your clipboard.
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.”
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.
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.
A single Rust binary, installed from a
signed package repo. Updates arrive with
your normal pacman -Syu or
apt upgrade.
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.
While you hold the keys, your mic is
recorded through PipeWire with
pw-record.
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.
On release, Silero VAD listens for a voice. If there was only silence, the text is thrown away.
The text goes on your clipboard, and fishpr presses Ctrl+V in the focused window.
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.
[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.
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.
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.
Remove the package, then delete the
[fishpr] section at the end
of /etc/pacman.conf.
sudo pacman -R fishpr-bin
you@ubuntu:~$ wget -qO- https://fishpr.s.gy | sh ==> Trusting fishpr's package signing key for fishpr's repo only [sudo] password for you: ==> Adding the fishpr repo to /etc/apt/sources.list.d/fishpr.sources ==> Installing fishpr … apt installs fishpr and its dependencies … ==> fishpr is running. Hold Ctrl+Space to dictate.
Ubuntu doesn’t ship curl,
so this one uses wget.
Adds
/etc/apt/sources.list.d/fishpr.sources, with the signing key in
/etc/apt/keyrings/fishpr.asc, trusted for fishpr’s repo only. Then
installs fishpr.
New versions arrive with
sudo apt upgrade. Restart
fishpr afterwards, or run the install
command again to update and restart in
one go.
Remove the package, then the repo and its key.
sudo apt purge fishpr
sudo rm
/etc/apt/sources.list.d/fishpr.sources
/etc/apt/keyrings/fishpr.asc
you@debian:~$ wget -qO- https://fishpr.s.gy | sh ==> Trusting fishpr's package signing key for fishpr's repo only [sudo] password for you: ==> Adding the fishpr repo to /etc/apt/sources.list.d/fishpr.sources ==> Installing fishpr … apt installs fishpr and its dependencies … ==> fishpr is running. Hold Ctrl+Space to dictate.
Debian doesn’t ship curl,
so this one uses wget.
The same apt repo as Ubuntu:
/etc/apt/sources.list.d/fishpr.sources, with the signing key in
/etc/apt/keyrings/fishpr.asc, trusted for fishpr’s repo only.
New versions arrive with
sudo apt upgrade. Restart
fishpr afterwards, or run the install
command again to update and restart in
one go.
Remove the package, then the repo and its key.
sudo apt purge fishpr
sudo rm
/etc/apt/sources.list.d/fishpr.sources
/etc/apt/keyrings/fishpr.asc
[you@fedora ~]$ curl -fsSL https://fishpr.s.gy | sh ==> Checking the package signature ==> Installing fishpr [sudo] password for you: … dnf installs fishpr 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.
Downloads the signed RPM, checks its
signature against fishpr’s key without
adding the key to your system, and
installs it with dnf. No
repo is added.
There’s no dnf repo, so run the install command again. It updates and restarts fishpr in one go.
Remove the package. Nothing else was added.
sudo dnf remove fishpr
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.
The text is pasted into the focused window.
The same, without the keyboard. Start with one and stop with the other if you like.
fishpr --toggleStarts recording, or stops and pastes, like a tray click. Bind it to any key or call it from a script.
fishpr exits and gives
Ctrl+Space back to
your apps.
pkill -x fishpr does the
same.
Rebind it in System Settings → Keyboard → Shortcuts → fishpr. Handy if your IDE uses Ctrl+Space for suggestions.
Most terminals paste with Ctrl+Shift+V, so the automatic paste won’t work there. The text is still on your clipboard.
They aren’t supported, but fishpr may
still work: bind
fishpr --toggle to a key,
then press once to start and again to
stop.
No. fishpr is free and MIT-licensed, and it doesn’t need a Google account or API key.
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.
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.
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.
/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.
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.
$curl -fsSL
https://fishpr.s.gy | sh