{"slug": "the-biological-relay-how-spud-and-gemini-turned-hyprland-into-an-ai-poweruser", "title": "The Biological Relay: How Spud and Gemini Turned Hyprland into an AI Poweruser Paradise", "summary": "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.", "body_md": "Hold `Super + D`. Say `kubectl get pods -n ingress-nginx`. Release.\n\nSpotify 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.\n\nNo typing. No pausing the music. No reaching for the mouse.\n\nIf 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.\n\nYet 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.\n\nBefore `shpadoinkle-1` found peace, my NVMe drive was a revolving graveyard of operating systems I genuinely tried to daily-drive:\n\n*(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.)*\n\nTwo years ago, I installed **EndeavourOS**. And the hopping stopped for good.\n\nEndeavourOS 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.\n\nYet 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.\n\nThen, just a few days ago, the catalyst hit.\n\nI stumbled across an article dismissively claiming that “Omarchy” Linux was nothing more than an “overhyped set of config files.”\n\nThat 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?*\n\nThat 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.\n\nThe operating system was dialed in. The window manager was finally right.\n\nThe remaining bottleneck was me.\n\nIn 2026, we have screaming-fast local GPUs and sub-second frontier LLMs. Yet developers are still acting as biological copper wire between their tools.\n\nYou know the routine:\n\nThen 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.\n\nThat is **The Biological Relay**: human beings burning mental context to manually shuttle text and state between the microphone, the browser, and the terminal.\n\nThe 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.\n\nExisting speech and agent tooling solved pieces of this puzzle, but left glaring papercuts:\n\n`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.\nWe needed three things working in unison:\n\nEnter **Gemini in the `agy` CLI** — and **Spud**.\n\nI 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.\n\nAnd when I say Gemini in `agy` has been a revelation, I mean it:\n\nBecause `agy` operates directly inside the repository with native tool execution, we didn’t just write code — we built, tested, and debugged live.\n\nHere is the git log from that single afternoon session:\n\n```\n13:46:04 | Initial commit: Spud architecture and roadmap\n13:50:14 | feat(stt): implement warm faster-whisper daemon & systemd unit\n13:52:03 | feat(cli): compile native Rust CLI with STT client\n13:55:11 | fix(injection): Hyprland signature fallback & wtype virtual typing\n14:14:19 | feat(agent): Agent Command Mode with Herdr & LM Studio dispatch\n14:37:13 | feat(ptt): Push-to-Talk Hold-and-Release with tap-filtering\n15:13:51 | fix(dictation): route dictation via Wayland virtual keyboard\n15:43:07 | feat(audio): automatic PipeWire audio ducking during dictation\n15:54:09 | feat(tts): Phase 3 zero-shot cloned voice synthesis daemon\n15:58:30 | fix(audio): duck per-stream media players (keep voice at 100%)\n16:02:42 | feat(tts): vocal mastering with soft-knee compression & +10dB\n16:11:16 | perf(tts): pipelined streaming, x-vector fast mode & audio earcons\n16:13:46 | feat(agent): inject live date/time into system prompt\n19:14:04 | feat(dict): custom dictionary and phonetic jargon reinforcement\n```\n\n**Two hours and twenty-seven minutes.**\n\nIn that window, we went from an empty directory to:\n\n`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.\n| Metric | The Biological Relay | Spud + Gemini ( `agy` ) | \n|---|---|---|\n| **Dictation Latency** | 3–6s (cloud API / batch STT) | <200ms ( `faster-whisper` on CUDA) | \n| **Audio Ducking** | Manual keyboard faffing | Automatic PipeWire stream attenuation (50%) | \n| **Cursor Typing** | Clipboard copy-pasting | Native Wayland `wtype` at focused cursor | \n| **Tech Jargon Accuracy** | Fails on `kubectl` ,`wtype` | Deterministic phonetic dictionary | \n| **Wayland & Hyprland Fit** | Clunky wrappers, focus loss, XWayland hacks | Zero-overhead native Wayland daemon ( `wtype` ) | \n| **Agent Egress** | Reading terminal blocks | Zero-shot cloned voice TTS audio debrief | \n| **Pairing Quota** | Daily exhaustion anxiety | Endless practical quota, zero interruptions | \n| **Initial Implementation** | 2–3 weeks of weekend hacking | 2 hours 27 minutes | \n\nThe biological relay is retired.\n\nGive your terminal a voice. Let your music duck itself. Let your desktop configure its own shortcuts.\n\n```\n# Clone and build Spud\ngit clone git@github.com:nihilok/spud.git ~/Code/spud\ncd ~/Code/spud && cargo build --release\n```\n\n", "url": "https://wpnews.pro/news/the-biological-relay-how-spud-and-gemini-turned-hyprland-into-an-ai-poweruser", "canonical_source": "https://blog.jarv.dev/spud-and-the-hyprland-paradise", "published_at": "2026-09-23 00:00:00+00:00", "updated_at": "2026-09-26 13:29:36.947379+00:00", "lang": "en", "topics": ["ai-tools", "developer-tools", "ai-products"], "entities": ["Spud", "Gemini 3.8 Flash", "agy CLI", "Hyprland", "EndeavourOS", "Arch Linux", "Ghostty", "PipeWire"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/the-biological-relay-how-spud-and-gemini-turned-hyprland-into-an-ai-poweruser", "markdown": "https://wpnews.pro/news/the-biological-relay-how-spud-and-gemini-turned-hyprland-into-an-ai-poweruser.md", "text": "https://wpnews.pro/news/the-biological-relay-how-spud-and-gemini-turned-hyprland-into-an-ai-poweruser.txt", "jsonld": "https://wpnews.pro/news/the-biological-relay-how-spud-and-gemini-turned-hyprland-into-an-ai-poweruser.jsonld"}}