explaingit

davidmann10k/say_to_clip

0ShellAudience · ops devopsComplexity · 3/5ActiveLicenseSetup · hard

TLDR

Bash reference dictation tool: a hotkey records the mic, Whisper or Groq transcribes it, an LLM cleans the text, and the result lands on the Wayland clipboard.

Mindmap

mindmap
  root((say-to-clip))
    Inputs
      Hyprland hotkey
      PipeWire microphone
      Config file
    Outputs
      Clipboard text
      Status messages
    Use Cases
      Voice to paste
      Private local dictation
      Reference for own build
    Tech Stack
      Bash
      Whisper
      Groq
      Ollama
      PipeWire

Things people build with this

USE CASE 1

Dictate text into any Wayland app via a Hyprland hotkey

USE CASE 2

Run a fully local voice-to-clipboard pipeline with Whisper and Ollama

USE CASE 3

Mix a Groq transcript with local Ollama cleanup for a faster hybrid setup

USE CASE 4

Use the brief file as a template to generate a tailored dictation tool for your own Linux setup

Tech stack

BashWhisperGroqOllamaPipeWireHyprlandWayland

Getting it running

Difficulty · hard Time to first run · 1h+

Targets Arch + Hyprland + PipeWire + wl-copy; other Linux setups need manual substitution of each pipeline stage.

Apache 2.0 license, free for commercial and private use with patent protection as long as the notice is kept and changes are stated.

In plain English

say_to_clip is a small Linux dictation project that turns a spoken voice clip into text on your clipboard. The author is upfront that it is not a polished product. It is a reference implementation, more like a magazine project you study and adapt than a tool you install and use. The core flow is a hotkey starts microphone recording, the audio is sent to a speech to text service, the result is cleaned up by a language model, and the cleaned text is copied to the clipboard, ready to paste anywhere. The README breaks the system into replaceable parts. The reference version uses a Hyprland keyboard shortcut on Arch Linux to fire a toggle command, pw-record from PipeWire to capture the microphone, either local Whisper or the Groq API for transcription, either local Ollama or Groq again for cleanup, and wl-copy on Wayland for the clipboard step. The point is that each stage is small and swappable, so someone on a different desktop or with different audio tooling can rebuild it with their own choices. The project is shipped as a Bash script called say_to_clip with subcommands like start, stop, toggle, status, and transcribe. It supports several pipeline shapes, including all local processing, all API based, or hybrid setups such as Groq transcription with local Ollama cleanup. There is also an option to skip cleanup and keep the raw transcript, support for the default PipeWire microphone, detection of silent audio before sending it to a model, configuration through a file at ~/.config/say_to_clip/env, and a smoke test script that exercises the configured pipeline end to end. Privacy is treated as a first class concern. By default the transcript is not printed to the terminal, no log file is written, recordings and transcripts are deleted after a successful run, and Groq API keys are kept out of visible command arguments. The README also points to a file called local-dictation-agent-brief.md which is meant to be handed to a coding assistant so the reader can generate their own version tailored to their setup. The licence is Apache 2.0 and the author notes the code itself was written with AI help.

Copy-paste prompts

Prompt 1
Adapt say_to_clip from Hyprland to GNOME on Wayland and explain the exact substitutions
Prompt 2
Set up a fully local pipeline with Whisper and Ollama and run the smoke test
Prompt 3
Switch transcription to the Groq API while keeping cleanup local and keeping the key out of argv
Prompt 4
Add a new subcommand that types the cleaned text directly instead of copying to the clipboard
Prompt 5
Rewrite the config to support multiple cleanup prompts and a flag to pick between them
Open on GitHub → Explain another repo

Generated 2026-05-22 · Model: sonnet-4-6 · Verify against the repo before relying on details.