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.txt now uses transmission-gtk directly
  • 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.

  1. Icon mapping: The Monero GUI (Qt) sets WM_CLASS to monero-core, not monero-wallet-gui. The window manager had no icon for it, so it showed a generic placeholder in the title bar and workspace switcher.

  2. CLI binary: The pre-built monero-wallet-cli was 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 = "" to config/window/icons.toml
  • Rebuilt monero-wallet-cli natively on OpenBSD with -DUSE_READLINE=OFF, producing a clean binary with no libedit linkage
  • Updated config/monero/monero.tgz with 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 alongside WordsBIP39EN
  • --list=monero-en flag selects the Monero list
  • internal/glyphs.go: Total = 2048 relaxed to MaxTotal = 2401 (the actual 4×7 code-space capacity)
  • internal/codec.go: length checks accept any list <= MaxTotal, with code >= len(wordsList) guards in decode to prevent out-of-bounds
  • internal/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.”

← Back to README