The Biological Relay: How Spud and Gemini Turned Hyprland into an AI Poweruser Paradise A developer built Spud, a local-first push-to-talk dictation tool, by pairing with Gemini 3.8 Flash through Google's agy CLI, integrating it with the Hyprland Wayland compositor on Arch-based EndeavourOS. The setup lets a user hold Super + D, speak a command such as `kubectl get pods -n ingress-nginx`, and have it typed letter-by-letter into Ghostty in 420 milliseconds while PipeWire automatically ducks Spotify to half volume and restores it to 100%. The project, published at github.com/nihilok/spud, targets the manual shuttling of text between microphone, browser and terminal that the author calls "The Biological Relay. Hold Super + D . Say kubectl get pods -n ingress-nginx . Release. Spotify drops to half volume, the command appears letter-by-letter at the cursor in Ghostty, and the music snaps straight back to 100%. Total time elapsed: 420 milliseconds. No typing. No pausing the music. No reaching for the mouse. If you’d told me two years ago that my daily desktop would handle push-to-talk terminal dictation, auto-duck my audio streams, talk back in a cloned copy of my own voice, and pair with an AI that writes its own window manager hotkeys on the fly, I’d have asked what unholy PPA cocktail you’d been drinking. Yet here we are. It runs on shpadoinkle-1 my main workstation, named in honour of Cannibal The Musical — “My heart’s as full as a baked potato” , and it came together in a single afternoon. Before shpadoinkle-1 found peace, my NVMe drive was a revolving graveyard of operating systems I genuinely tried to daily-drive: And then there was the side-quest tier: Kali , Parrot Security , and Tails . Let’s be completely honest—those were never serious daily-driver contenders. They were strictly for my occasional script-kiddy experiments, Wi-Fi auditing, and amnesic live-USB tinkering where keeping persistent dotfiles is impossible by design. Two years ago, I installed EndeavourOS . And the hopping stopped for good. EndeavourOS succeeded where the others stumbled because it got out of the way: a clean, bloat-free Arch Linux foundation, rolling packages the minute upstream tags them, and the unfettered reach of pacman and the AUR. For two solid years, it ran comfortably with KDE Plasma 6 . Reliable, snappy, and uncomplaining. Yet for over a year, I’d had an itch: I kept watching Hyprland demos from afar. The fluid Wayland shaders, the dynamic workspaces that spin up when you need them and vanish when empty, the pure keyboard-driven focus. But you know how it goes when you have a daily driver that works—you hesitate to burn a weekend ripping out your desktop environment. Then, just a few days ago, the catalyst hit. I stumbled across an article dismissively claiming that “Omarchy” Linux was nothing more than an “overhyped set of config files.” That was the lightbulb moment. I realised: hang on, if all the fuss is literally just a sharp set of Hyprland dotfiles on top of Arch, why am I still sitting here in Plasma? Why wait for someone else to package it? That evening, I finally made the leap. I shifted from Plasma 6 into Hyprland, started crafting my native Lua config, and watched my workstation transform into a featherweight rocket ship. The operating system was dialed in. The window manager was finally right. The remaining bottleneck was me. In 2026, we have screaming-fast local GPUs and sub-second frontier LLMs. Yet developers are still acting as biological copper wire between their tools. You know the routine: Then you hit a daily rate limit twenty minutes into your flow state, and the entire train of thought evaporates while you wait for a reset timer. That is The Biological Relay : human beings burning mental context to manually shuttle text and state between the microphone, the browser, and the terminal. The fix was obvious: speech had to type directly into the active cursor, audio ducking had to happen automatically in the sound server, and the AI copilot had to live natively in the terminal without quota anxiety. Existing speech and agent tooling solved pieces of this puzzle, but left glaring papercuts: shpadoinkle-1 . But under Hyprland, it was clunky at best. Wayland virtual keyboard friction, focus-stealing wrapper windows, zero integration with PipeWire audio streams, and that unmistakable feeling of an app fighting the compositor rather than living inside it. We needed three things working in unison: Enter Gemini in the agy CLI — and Spud . I paired with Gemini 3.8 Flash using Google’s agy CLI to build Spud https://github.com/nihilok/spud : a local-first voice orchestrator written in Rust. And when I say Gemini in agy has been a revelation, I mean it: Because agy operates directly inside the repository with native tool execution, we didn’t just write code — we built, tested, and debugged live. Here is the git log from that single afternoon session: 13:46:04 | Initial commit: Spud architecture and roadmap 13:50:14 | feat stt : implement warm faster-whisper daemon & systemd unit 13:52:03 | feat cli : compile native Rust CLI with STT client 13:55:11 | fix injection : Hyprland signature fallback & wtype virtual typing 14:14:19 | feat agent : Agent Command Mode with Herdr & LM Studio dispatch 14:37:13 | feat ptt : Push-to-Talk Hold-and-Release with tap-filtering 15:13:51 | fix dictation : route dictation via Wayland virtual keyboard 15:43:07 | feat audio : automatic PipeWire audio ducking during dictation 15:54:09 | feat tts : Phase 3 zero-shot cloned voice synthesis daemon 15:58:30 | fix audio : duck per-stream media players keep voice at 100% 16:02:42 | feat tts : vocal mastering with soft-knee compression & +10dB 16:11:16 | perf tts : pipelined streaming, x-vector fast mode & audio earcons 16:13:46 | feat agent : inject live date/time into system prompt 19:14:04 | feat dict : custom dictionary and phonetic jargon reinforcement Two hours and twenty-seven minutes. In that window, we went from an empty directory to: Super + D wpctl , feeds a warm faster-whisper CUDA daemon /tmp/spud-stt.sock , and types into the focused window using wtype Wayland virtual keyboard at sub-200ms latency. src/dict.rs Hyprland , Herdr , PipeWire , and kubectl , coupled with deterministic phonetic replacement rules so technical jargon is never misheard. Super + Shift + D Qwen3-TTS daemon on CUDA using cached speaker embeddings and soft-knee audio compression. add-shortcut allow the agent to inspect Hyprland configurations, validate keybindings, and trigger live hyprctl reloads without touching a config file by hand. | Metric | The Biological Relay | Spud + Gemini agy | |---|---|---| | Dictation Latency | 3–6s cloud API / batch STT | <200ms faster-whisper on CUDA | | Audio Ducking | Manual keyboard faffing | Automatic PipeWire stream attenuation 50% | | Cursor Typing | Clipboard copy-pasting | Native Wayland wtype at focused cursor | | Tech Jargon Accuracy | Fails on kubectl , wtype | Deterministic phonetic dictionary | | Wayland & Hyprland Fit | Clunky wrappers, focus loss, XWayland hacks | Zero-overhead native Wayland daemon wtype | | Agent Egress | Reading terminal blocks | Zero-shot cloned voice TTS audio debrief | | Pairing Quota | Daily exhaustion anxiety | Endless practical quota, zero interruptions | | Initial Implementation | 2–3 weeks of weekend hacking | 2 hours 27 minutes | The biological relay is retired. Give your terminal a voice. Let your music duck itself. Let your desktop configure its own shortcuts. Clone and build Spud git clone git@github.com:nihilok/spud.git ~/Code/spud cd ~/Code/spud && cargo build --release