OpenRiot v7.9.24 — Four Versions in a Trenchcoat
“The street finds its own uses for things.” — William Gibson, Burning Chrome
Release Overview
v7.9.24 rolls up everything from v7.9.20 through v7.9.24 into a single release that rewrites the backup tool, hardens the disk manager, ships a proper Kate installer, wallpaper mascots, a clipboard exorcism, supersonic post-resume restoration, and finally — finally — tells Firefox’s incognito windows apart from the normal ones. The ghost is in the wallpaper. The packets agree with the WiFi. And Firefox Private Browsing now wears a dot instead of an agent hat.
🕵️ Firefox Private Browsing Icon
i3 reports class=firefox for both normal and private windows.
The only way to tell them apart is the window title containing
“Private Browsing”. Three separate code paths (window switcher,
workspace icons, polybar workspace module) now detect this and
substitute the private browsing icon.
| Glyph | Before | After |
|---|---|---|
| Normal Firefox | |
(unchanged) |
| Private Browsing | (same!) |
(incognito dot) |
| Agent hat | N/A | Deprecated |
Detection heuristic: if class is firefox and the window
name contains “Private Browsing”, emit firefox-private as the
class for icon lookup. All three consumers (windowicon,
workspaceicons, polybar) share the same exported helper:
windowicon.IsPrivateFirefox().
The private icon itself was debated for exactly thirty seconds:
agent hat → incognito dot . The dot reads better at
14px polybar scale.
| File | Change |
|---|---|
source/windowicon/windowicon.go |
NEW — IsPrivateFirefox() |
helper; collectWindowClasses |
|
emits firefox-private |
|
source/workspaceicons/workspaceicons.go |
collectWindows emits |
firefox-private |
|
source/window/switch.go |
walk checks IsPrivateFirefox |
| for icon lookup | |
source/polybar/polybar.go |
collectAllClasses + collectWindows |
emit firefox-private |
|
config/window/icons.toml |
firefox-private: → |
💾 Migrate — OpenBSD Backup Tool (v7.9.20 recap)
Migrate, a pure-Go backup/restore tool, joined the OpenRiot ecosystem. Six surgical fixes were required to make it work:
| Fix | What happened |
|---|---|
| Brace structure | Rewrote mangled if block in ui.go |
| Missing imports | Added drives and platform packages |
| LUKS warning | runtime.GOOS != "openbsd" guard |
| 1 byte drive | ParseDriveSize: strip spaces, extract |
| trailing alphas, multi-letter unit prefix | |
| Slow backup | Excluded .cargo, .rustup, .npm, |
.go/pkg/mod, .cabal, .stack, .m2 |
|
| No progress info | Added Elapsed/ETA fields, rendered as |
00:02:34 / 00:01:23 remaining |
The most spectacular bug: a 1.8 TB USB drive was detected as 1
byte because FormatBytes("1.8 TB") outputs with a space, but
ParseDriveSize took the last character as the unit. "1.8 TB"
→ strip space → "1.8TB" → last char = "B" → multiplier = 1
→ int64(1.8 * 1) = 1 byte. You need at least 1.8 TB of
total drive capacity.
The Migrate binary ships at config/bin/migrate and installs
under the Utilities rofi submenu — alongside WiFi, Monitor,
Drive Manager, Benchmark, System Monitor, and System Settings.
🖼️ Visual Overhaul — Mascot Wallpapers (v7.9.22-23 recap)
Kate IDE is now an optional install (saving ~300MB of KDE deps). When installed, it gets Ayu Dark theme, BreezeDark UI, and FiraCode Nerd Font out of the box. Rofi entries are automatically stripped when declined.
All 20 backgrounds and 52 lock screens were rebuilt with the OpenRiot mascot — the same ghost from the install screen, now haunting your desktop too. Grids returned. CRT glow returned. The vague “dark wallpaper” look is dead.
⌨️ Clipmenud Exorcism (v7.9.21 recap)
After weeks of blaming i3, Polybar, picom, and operator error,
the root cause of intermittent missing keystrokes was found:
clipmenud. XFixes-based clipboard monitoring competed with
the X event queue and dropped key-press events under load. The
clipmenud exec line in i3 config is now correctly commented out
(the old comment said “disabled” but clipmenud was still
running). Full input fidelity restored.
Polybar module intervals were staggered to coprime values so no two modules ever fire simultaneously, and the rightmost module group was recolored from purple to cyan-dim for cleaner visual harmony.
🔌 Post-Resume Restoration (v7.9.17 recap)
openriot --resume now runs automatically via /etc/apm/resume,
restoring displays, WiFi, and WireGuard after suspend — with a
2-second hardware settle delay, laptop panel fix, and completion
notification. No more manual cable unplug, NMTUI reconnect, or
wondering why the VPN is dead.
🔐 Disk Manager (v7.9.18-19 recap)
The Disk Manager (openriot --disk) is a Bubble Tea TUI for
discover, mount, umount, format, encrypt, and benchmark
operations. Softraid-aware: virtual devices and physical chunks
are mapped independently. Drives show [ROOT], [CHUNK],
[MOUNTED], [ENCRYPTED], [AVAILABLE] flags with bus type
and model name.
The passthrough odyssey required four iterations. The mount/umount
rewrite handles three device types. And after seventeen failed
attempts, detachSoftraidChunk() learned that bioctl -d needs
the volume name, not the chunk name. The volume. Name.
🧾 All Files Changed (v7.9.20 — v7.9.24)
| File | Change |
|---|---|
source/windowicon/windowicon.go |
NEW — IsPrivateFirefox() |
| helper; Firefox private | |
| detection in class collection | |
source/workspaceicons/ |
collectWindows emits |
workspaceicons.go |
firefox-private |
source/window/switch.go |
walk checks IsPrivateFirefox |
| for icon lookup | |
source/polybar/polybar.go |
collectAllClasses + |
collectWindows detect private |
|
| Firefox; unsafe.Pointer → | |
| binary.LittleEndian (v7.9.16) | |
source/network/network.go |
Log errors in CheckConnectivity |
| (v7.9.16) | |
source/crypto/crypto.go |
Log 6 swallowed errors (v7.9.16) |
source/installer/crush.go |
Log fish completions errors (v7.9.16) |
source/installer/kate.go |
NEW — KatePreference, |
| SetupKateConfig, StripKateFromRofi | |
| (v7.9.22) | |
source/installer/cmd.go |
Wire Kate into setup.sh (v7.9.22) |
source/installer/packages.go |
cmd.Stdin; braille spinner; |
| library mismatch detection; | |
| 60m 0ad timeout (v7.9.14-15) | |
source/imaging/download.go |
Append .tgz to firmware URL |
| (v7.9.15) | |
source/imaging/webp.go |
assets/ dir; remove PNG after |
| conversion (v7.9.15) | |
source/resume/resume.go |
NEW — post-resume restoration |
| (v7.9.17) | |
source/display/hdmi.go |
RestoreDisplays(); lidaction |
| sysctls (v7.9.17) | |
source/backgrounds/ |
findFirstBackground() replaces |
backgrounds.go |
hardcoded 01.png (v7.9.14) |
source/theme/colors.go |
Suppress missing colors.toml |
| warning as root (v7.9.14) | |
source/disk/ (17 files) |
NEW — Disk Manager TUI |
| (v7.9.18-19) | |
source/commands/commands.go |
--disk, --resume, --polybar-all |
| registrations; Blockchain submenu | |
source/settings/settings.go |
Disk Manager menu entry |
source/polybar/polybar.go |
RunAll() workspace module; |
| coprime intervals; purple→cyan-dim | |
Makefile |
image: all rebuilds first |
config/window/icons.toml |
firefox-private → ; |
| openriot_disk, openriot_migrate, | |
| glyphriot, zcashmini, btop, | |
| kate, kwrite icons | |
config/rofi/apps.txt |
Utilities submenu; Blockchain |
| submenu; Kate/Games launcher | |
config/rofi/utilities.txt |
NEW — Utilities submenu |
config/rofi/blockchain.txt |
NEW — Blockchain submenu |
config/rofi/games.txt |
Cromag Rally; kdiamond removed |
config/i3/config |
Floating rules for disk/migrate/ |
| crypto TUIs; clipmenud commented | |
config/bin/migrate |
NEW — Migrate binary |
install/packages.yaml |
kate module; cromagrally; fio; |
| kdiamond removed; apmd resume hook | |
assets/disk.webp |
NEW — Disk Manager screenshot |
assets/migrate.webp |
NEW — Migrate UI screenshot |
assets/games.webp |
NEW — Games menu screenshot |
assets/menu.webp |
Re-encoded |
assets/qr-code.webp |
Re-encoded |
Locked/43.webp — |
NEW — 10 lock screens (v7.9.15) |
Locked/52.webp |
|
Locked/16-32.webp |
All recolored, cleaned (v7.9.23) |
Locked/53-60.webp |
NEW — 8 lock screens (v7.9.23) |
backgrounds/06-15.webp |
Color corrected, mascot branded |
| (v7.9.22-23) | |
backgrounds/19.webp — |
NEW — 6 backgrounds (v7.9.15) |
backgrounds/24.webp |
|
README.md |
Laptop table; polybar table; |
| TOC fix; Disk Manager; Games; | |
| QR badge; donate badge |
🗣️ Final Words
“Four versions. One trenchcoat. The dot knows what you did.” — The OpenRiot Crew, watching a private window finally get the icon it deserved