OpenRiot v6.6 — Seed of Riot
“Privacy is not a crime. It is a feature.” — Ancient OpenBSD proverb, probably whispered through a Tor exit node
Release Overview
OpenRiot v6.6 is a precision release. It fixes the image builder’s
index.txt generation, simplifies the Rofi menu, hardens the Monero
launcher, and updates glyphriot with native Monero seed phrase support.
v6.5 shipped an honest installer. v6.6 makes sure the installer
actually works — no manual index.txt editing, no readline ABI garbage
in the Monero CLI, and no more “stop Transmission” entries in the app
launcher when you just want to open a torrent client like a normal person.
Total changes: image builder hardened, Rofi decluttered, Monero rebuilt, glyphriot multi-list, backgrounds refreshed.
🖼️ Image Builder Hardened (make image)
The Problem: v6.5’s site79.tgz approach was correct in theory, but
index.txt generation was a manual fmt.Sprintf pretending to be ls -lT
output. The installer parser is picky about timestamp format and field
spacing. A fabricated line could be silently ignored, causing the installer
to skip site79.tgz entirely. Meanwhile, vnconfig and umount cleanup
was fire-and-forget — if a later step failed, the vnd device leaked.
Also, getFileSize() was dead code. It returned an int64 that nobody
used because index.txt no longer needs a byte count when you generate
it from real ls output.
The Fix:
ls -lT for Real
index.txt is now generated by running ls -lT site79.tgz inside the
sets directory and appending the actual output. The installer parser
sees a real line with a real timestamp, real permissions, and real
spacing. No more guessing.
Deferred Cleanup
vnconfig -u vnd0 and umount /mnt are now deferred inside
injectContent() and expandImage(). If any step fails, the loopback
device and mount point are still released. No more leaked vnd devices
clogging dmesg.
df -h Before Injection
Space logging now happens before copying the tarball, so you can see exactly how much room was available when things went sideways.
Dead Code Removed
getFileSize() is gone. Its corpse has been cremated.
Makefile & Pipeline Fixes
make image now cleans stale artifacts (openriot.img, openriot.sha256,
site79.tgz) before starting. burn.go, download.go, prereqs.go,
runner.go, and site.go all received consistency fixes for path
handling, logging, and error propagation.
📋 Rofi Decluttered
The Problem: The Transmission entry in config/rofi/apps.txt was
transmission-dynamic — a pseudo-command handled by source/rofi/rofi.go
that checked if transmission-gtk was running and either launched it or
killed it. This meant the Rofi menu showed “Transmission ” when stopped
and “Transmission ” when running. You could not just launch
Transmission like Firefox or Thunar. You had to play state-guessing.
Meanwhile, app names were verbose (“Monero Wallet”, “Bitcoin Wallet”) and the ordering had Firefox Private Window in the middle of the list like an afterthought.
The Fix:
- Removed the dynamic Transmission block from
source/rofi/rofi.go config/rofi/apps.txtnow usestransmission-gtkdirectly- Transmission launches normally. The polybar module already shows running state and can close it. You don’t need your app launcher to double as a process manager.
- Simplified names: “Monero Wallet” → “Monero”, “Bitcoin Wallet” → “Bitcoin”
- Reordered apps: private Firefox moved down, apps grouped by frequency
The app launcher is now a launcher. Not a task manager wearing a costume.
🪙 Monero Launcher Hardened
The Problem: Two separate issues plagued Monero on OpenRiot.
-
Icon mapping: The Monero GUI (Qt) sets
WM_CLASStomonero-core, notmonero-wallet-gui. The window manager had no icon for it, so it showed a generic placeholder in the title bar and workspace switcher. -
CLI binary: The pre-built
monero-wallet-cliwas linked against libedit, which on OpenBSD 7.9 produces ABI garbage output in interactive mode — unreadable prompts, broken readline behavior.
The Fix:
- Added
monero-core = ""toconfig/window/icons.toml - Rebuilt
monero-wallet-clinatively on OpenBSD with-DUSE_READLINE=OFF, producing a clean binary with no libedit linkage - Updated
config/monero/monero.tgzwith the rebuilt CLI
The Monero GUI now gets its proper icon. The CLI no longer speaks in tongues.
🔤 GlyphRiot: Monero Seed Support
The Problem: glyphriot only supported the BIP-39 English wordlist
(2048 words). Monero uses a 1626-word English list with words like
“musical”, “abbey”, and “ablaze” that do not exist in BIP-39. Importing
a Monero 25-word seed failed with “not in active list”.
The Fix:
The bundled config/bin/glyphriot has been updated with full Monero
support:
WordsMoneroEN(1626 words) added alongsideWordsBIP39EN--list=monero-enflag selects the Monero listinternal/glyphs.go:Total = 2048relaxed toMaxTotal = 2401(the actual 4×7 code-space capacity)internal/codec.go: length checks accept any list<= MaxTotal, withcode >= len(wordsList)guards in decode to prevent out-of-boundsinternal/keypolicy.go:moneroBitsIfValid()recognizes 25-word Monero seeds as high-entropy keys (266 bits)
Existing BIP-39 glyphs decode identically. Monero seeds now encode and decode with the same 4-glyph-per-word scheme. The polybar Monero module and the seed backup workflow are now fully integrated.
🖼️ Backgrounds Refreshed
New backgrounds/16.png added. Existing lock screens and backgrounds
re-crushed and refreshed. The visual identity stays sharp.
📝 Documentation Cleanup
All docs files normalized to Title-Case (Agents-Icons.md,
Agents-Lessons.md, Architecture.md, Debugging.md, Gurk.md,
Image-Builder-Spec.md, Notification-System.md, Output-Format.md,
Packages.md). Cross-references in v4.1 and v6.5 release notes updated
to match.
🧾 Files Changed
| File | Nature of Change |
|---|---|
source/imaging/build.go |
ls -lT for index.txt, deferred vnconfig/umount, removed getFileSize() dead code |
source/imaging/burn.go |
Consistency fixes for path handling and logging |
source/imaging/download.go |
Error propagation improvements |
source/imaging/prereqs.go |
Path and logging fixes |
source/imaging/runner.go |
Stale artifact cleanup, runner consistency |
source/imaging/site.go |
install.site and packaging fixes |
source/rofi/rofi.go |
Removed dynamic Transmission toggle block |
source/installer/release_notes.go |
Fixed release notes rendering |
config/rofi/apps.txt |
transmission-gtk direct launch, simplified names, reordered |
config/window/icons.toml |
Added monero-core icon mapping |
config/monero/monero.tgz |
Rebuilt CLI with -DUSE_READLINE=OFF |
config/bin/glyphriot |
Updated binary with Monero seed support |
Makefile |
Stale artifact cleanup before make image |
docs/Image-Builder-Spec.md |
Updated for ls -lT and deferred cleanup |
docs/v4.1-Release-Notes.md |
Cross-reference fixes |
docs/v6.5-Release-Notes.md |
Cross-reference fixes |
Locked/ |
Refreshed lock screen images |
backgrounds/ |
New 16.png, refreshed existing |
README.md |
Removed stray images, updated content |
🗣️ Final Words
“v6.0 was beauty. v6.1 was correctness. v6.2 was readability. v6.3 was choice. v6.4 was independence. v6.5 was honesty. v6.6 is precision.”
v6.5 built an installer that told the truth. v6.6 makes sure every bolt
in that installer is torqued correctly. The index.txt parser gets real
ls output. The vnd device gets cleaned up even when things fail. The
app launcher stops pretending to be a process manager. The Monero CLI
stops speaking libedit gibberish. And your Monero seed can finally live
in the same glyph system as your Bitcoin seed.
This release does not add features for the sake of features. It removes lies, guesses, and workarounds. The result is a system that does what it says, says what it does, and leaves the dynamic-toggle nonsense to the polybar where it belongs.
— The OpenRiot Crew
“An app launcher that manages processes is an app launcher that has lost the plot.”