OpenRiot v7.9.25 — The Binary Ate My Backup Tool

“1.8 TB is a lot of bytes. Just one of them is not.” — The OpenRiot Crew, discovering that ParseDriveSize was splitting on the space and reading only the last character


Release Overview

v7.9.25 swallows Migrate whole. 12,631 lines of Go, 38 files, 17 external deps — all baked into openriot --backup. No separate binary, no config/bin/migrate, no symlink to chase. The backup tool is now part of the operating system that ships inside the wm that lives in your terminal.

Everything from v7.9.20 through v7.9.25 is here: the Firefox private window that finally admits it’s private, the Disk Manager that learned what bioctl -d actually wants, the clipboard exorcism, the Kate installer, the mascot that crawled out of the wallpaper, and the resume hook that remembers where you left off.


🤝 Migrate Joins the Binary (v7.9.25)

Stat Value
Lines of Go imported 12,631
Files added 38
External deps added 1 (x/term)
Binary size increase 0.8MB (15.3→16.1MB)
Old standalone binary deleted
Rofi launcher -e migrate-e openriot --backup

Every Migrate sub-package — drives/, platform/, handlers/, screens/, state/ — lives under source/migrate/. The 11 Linux-only files were deleted. What remains is pure OpenBSD: syscall mounts, Getfsstat drive detection, no lsblk, no udisksctl, no cryptsetup. Zero external binary deps. Zero CGO. Zero apologies.

The --backup command wraps it all: openriot --backup launches the full Bubble Tea TUI with drive selection, space validation, home folder scanning, multi-phase backup/restore, and SHA-256 verification — all inside your existing terminal. No new install step. No config/bin/migrate that might be stale. Just a flag.

File Change
source/migrate/* NEW — 38 files, 12,631 LOC
config/bin/migrate REMOVED — now openriot --backup
config/rofi/utilities.txt -e migrate-e openriot --backup
source/commands/commands.go --backup command registered
source/go.mod +golang.org/x/term

🕵️ Firefox Private Browser Icon (v7.9.24)

i3’s get_tree reports class=firefox for both normal and private windows. The only difference is the window title containing “Private Browsing”. Three separate code paths now detect this and emit firefox-private for icon lookup.

The icon was debated for a full thirty seconds: agent hat → incognito dot 󰡖. At 14px in polybar, the dot wins.

File Change
source/windowicon/windowicon.go IsPrivateFirefox() helper
source/workspaceicons/workspaceicons.go emit firefox-private
source/window/switch.go detect private in walk
source/polybar/polybar.go detect private in
  collectAllClasses and
  collectWindows
config/window/icons.toml 󰡖

⌨️ Kate IDE (v7.9.22)

Prompted during setup: “Would you like to install Kate (Code IDE)? [y/N]”. Default is no, saving ~300MB of KDE deps. When installed: Ayu Dark theme, BreezeDark UI, FiraCode Nerd Font. Rofi entries auto-stripped when declined.


🖼️ Mascot Wallpapers (v7.9.22-23)

All 20 backgrounds and 60+ lock screens rebuilt. Grids. CRT glow. The ghost from the install screen is everywhere.


⌨️ Clipmenud Exorcism (v7.9.21)

clipmenud’s XFixes polling was dropping key-press events under load. The exec line was uncommented. The comment said “disabled” but the binary ran. Polybar intervals staggered to coprime values. Rightmost module group: purple → cyan-dim.


🔌 Post-Resume (v7.9.17)

openriot --resume via /etc/apm/resume: settle, xrandr, laptop panel, lidaction sysctls, WiFi, WireGuard, done.


🔐 Disk Manager (v7.9.18-19)

openriot --disk: Bubble Tea TUI for mount, umount, format, encrypt, benchmark. Softraid-aware. bioctl -d needs the volume name. The volume. Name.


🧾 Files Changed (v7.9.20 — v7.9.25)

File Change
source/migrate/ NEW — Migrate backup/restore
(38 files) TUI, 12,631 LOC
source/go.mod +golang.org/x/term
config/bin/migrate REMOVEDopenriot --backup
config/rofi/utilities.txt -e migrate
  -e openriot --backup
source/windowicon/ IsPrivateFirefox() helper;
windowicon.go firefox-private in class
  collection
source/workspaceicons/ firefox-private detection
workspaceicons.go  
source/window/switch.go firefox-private detection
source/polybar/polybar.go firefox-private detection;
  unsafe→binary.LittleEndian
source/network/network.go Log errors in
  CheckConnectivity
source/crypto/crypto.go Log 6 swallowed errors
source/installer/crush.go Log fish completions errors
source/installer/kate.go NEW — Kate installer
source/installer/cmd.go Wire Kate into setup.sh
source/installer/packages.go cmd.Stdin; braille spinner;
  library mismatch detection;
  60m 0ad timeout
source/imaging/download.go .tgz firmware URL
source/imaging/webp.go assets/ dir, PNG cleanup
source/resume/resume.go NEW — post-resume restore
source/display/hdmi.go RestoreDisplays(), lidaction
source/backgrounds/ findFirstBackground()
backgrounds.go  
source/disk/ (17 files) NEW — Disk Manager TUI
source/commands/commands.go --disk, --resume,
  --backup commands
source/settings/settings.go Disk Manager menu entry
Makefile image: all rebuilds first
config/window/icons.toml firefox-private 󰡖;
  misc new icon mappings
config/rofi/apps.txt Utilities + Blockchain
  submenus
config/rofi/utilities.txt NEW — Utilities submenu
config/rofi/blockchain.txt NEW — Blockchain submenu
config/rofi/games.txt Cromag Rally; kdiamond out
config/i3/config Floating rules; clipmenud off
install/packages.yaml kate, cromagrally, fio,
  apmd hook
assets/disk.webp NEW — Disk Manager
assets/migrate.webp NEW — Migrate UI
assets/games.webp NEW — Games menu
Locked/43-60.webp NEW — 18 lock screens
backgrounds/06-15.webp Mascot branded
backgrounds/19-24.webp NEW — 6 backgrounds
README.md Table fixes, TOC, sections
VERSION 7.9.23 → 7.9.25

🗣️ Final Words

“The binary ate my backup tool. I’m not even mad. That’s 12,631 lines I don’t have to update separately ever again.” — The OpenRiot Crew, watching make install finish in approximately the same time it used to take just to copy the old binary