OpenRiot v7.9.31 — All the Doors are Repainted
“The net is vast and infinite. So are the wallpapers. We have repainted them all. The lock no longer forgets your first three characters. The icons know what they are. The Fed is, as always, bad at its job.” — OpenRiot Crew, on the eve of the seventh samurai’s return
Release Overview
v7.9.31 carries the v7.9.30 torch forward. In v7.9.30 we fixed
the four silent failures that were preventing Zed from
rendering: the silently-no-opping ulimit -v, the unsetting
of TMPDIR (which left cargo’s scratch on a 495 MB mfs), the
GNU-flavoured sed -i '' (which OpenBSD’s sed rejects with
a polite “no”), and the wgpu patches which were trapped inside
a retry block that retry was never going to reach.
In v7.9.31 we:
- Repainted every lock screen — all 13 active
Locked/entries were regenerated, plus 7 backgrounds, so the moment you walk away from the keyboard the world behind the lock is a different world - Made
i3lockpatient — the first 1-2 password attempts used to say “Wrong!” because the X11 grab was racing your fingers; now it sleeps, disables auto-repeat, runs with--nofork, and re-enables repeat after you unlock - Aligned the icon set — LibreOffice’s three office apps
now wear three different glyphs, and they match between
the rofi launcher and the workspace icons. No more
for everything - Continued to not trust the feds — see v7.9.30
The lock screen is the first thing the machine does for you when you leave. The icon set is the first thing the machine shows you when you come back. We are now, finally, polite at both transitions.
🎬 The Zed Port — Hackers of the Lost cfg
Status: compile + runtime. The window renders.
The runtime panic at wgpu/src/api/instance.rs:65 —
Backends::empty() — was a cfg!(gles) evaluating to false.
The patches existed. They were just never running, because:
sed -i ''is GNU sed syntax. OpenBSD’s/usr/bin/seddoes not support-iat all. Everysed -i ''line in the build script has been silently failing since the dawn of the project. Cargo happily compiled with broken wgpu. The script printedDone!. The binary panicked. The user rebooted. Welcome to the loop.ulimit -vis bash-ism. OpenBSD’s/bin/shreturnssh: ulimit: -v: unknown option. The data limit stayed at 1.5 GB. The linker died. The user rebooted. Same loop.TMPDIRwas unset, so cargo’s scratch landed on the 495 MB mfs/tmp. This one does not crash the system. It crashes the build, much later, withENOSPCon a filesystem with 0.5 GB of capacity.- The wgpu patches lived inside the
attempt 2retry block. Attempt 1 always succeeded with broken wgpu. Retry was never called. The patches never ran.
Four things had to be true. Now they are:
ulimit -d 8388608(wasulimit -v)TMPDIR=$HOME/.cache/zed/tmp(was unset)sed_i()helper using temp file +mv(wassed -i '')- Step 2.5 in the build script — unconditional pre-build
patch with verification (was inside
attempt 2)
The window renders.
🗡️ All the Doors are Repainted
In Ghost in the Shell (1995) the Major says:
“The net is vast and infinite.”
Our net is a 16:9 rectangle behind a black prompt. It is not vast. It is not infinite. But the wallpaper is the first thing you see when you come back, and the first thing your shoulder surfer sees when you walk away. The wallpaper is the lie that is meant to be true.
We repainted it. All of it.
- 13 lock screens in
Locked/regenerated (01,02,03,04,07,12,13,14,22,43,64,66,68) - 7 backgrounds in
backgrounds/regenerated (06,10,15,25,26,27,28)
The moment you trip the lock, you enter a different world than the one you left. The moment you return, you return to the same world you left, but the world is now quieter. This is the kind of work that no one notices if it is done right, and everyone notices if it is done wrong. We have done it right.
The source/lock/lock.go build cache was invalidated to
match.
⏳ i3lock Learns Patience (Or: How I Stopped Losing
the First Three Characters)
Every other login attempt used to fail with “Wrong!”. This was not user error. This was a race condition between the i3lock process acquiring the X11 keyboard grab and the user’s fingers starting to type.
i3lock calls XGrabKeyboard when it starts. The X11 grab is
asynchronous — the grab takes effect at some point after
the call, and during the transition the first few keystrokes
go to the underlying X11 application (the desktop). Add to
this that X’s keyboard auto-repeat, if enabled, will fire
extra events for any key the user is holding when i3lock
starts, and you have a recipe for “first 1-2 attempts fail,
then it works”.
The fix in source/lock/lock.go:
xset r offbefore i3lock — kills auto-repeat so no phantom keys are sent during the grab transition- Bump the pre-lock sleep from 1.0s to 1.5s — gives i3lock time to draw, the user time to stop typing, the X server time to settle
i3lock -n(--nofork) — deterministic timing, no fork racexset r onafter i3lock exits (also on the startup-error path) — restores normal typing behaviour
In Kurosawa’s Yojimbo (1961), the rōnin says:
“I have no special advantages. I am patient.”
The lock was hasty. We made it patient.
🎨 The Icon Set is Aligned
Three apps. Three glyphs. One truth.
In v7.9.29, LibreOffice was a single , regardless of whether you were opening Writer, Calc, or Impress. In the rofi menu you saw one icon. In the workspace indicator you saw the same one. In the polybar window-icon module you saw the same one. It was a typographic communism. Beautiful, but useless.
The new set:
| App | rofi / workspace icon |
|---|---|
| Word Processor (Writer) | |
| Spreadsheet (Calc) | |
| Presentation (Impress) | |
The icons are now consistent across config/rofi/apps.txt
and config/window/icons.toml. Two rofi entries are new
(Spreadsheet, Presentation); three workspace mappings are
distinct. The feds (cargo, X11, the kernel) are still bad at
their jobs, but the icons are now honest.
The rofi menu is also ordered by frequency of use; the new
entries are right after Word Processor because that is
where the user’s eyes will look for them.
🚔 The Feds (i.e. cargo, xset, the X server)
The feds, in the hacker movie tradition, are still bad at their jobs:
cargo buildreportsDone!even when the resulting binary panics at runtime (v7.9.30)xset r onis the default; it would have continued to cause i3lock to eat your first three characters (v7.9.31)- The X server’s grab model is asynchronous; the docs warn you about this; the feds (the Xorg maintainers) shrug
We do not trust the feds. We verify. We sleep. We disable
auto-repeat. We use --nofork. We add xset r on as a
deferred cleanup. We do not ask permission. The feds are
asleep at the desk.
🧾 Files Changed
| File | Change |
|---|---|
scripts/zed.sh |
ulimit -v → ulimit -d, portable |
sed_i(), Step 2.5 wgpu verification, |
|
TMPDIR on /home |
|
docs/OpenBSD-Zed.md |
Build requirements: ulimit -d, |
TMPDIR documented |
|
source/lock/lock.go |
xset r off/on, i3lock -n, |
| 1.5s pre-lock sleep, deferred cleanup | |
config/rofi/apps.txt |
NEW Spreadsheet + Presentation |
| entries; icons matched to workspace set | |
config/window/icons.toml |
LibreOffice writer/calc/impress |
| get distinct icons ( / / ) | |
Locked/*.webp |
13 lock screens regenerated |
backgrounds/*.webp |
7 backgrounds regenerated |
docs/v7.9.30-Release-Notes.md |
Previous release notes |
docs/v7.9.31-Release-Notes.md |
NEW — these notes |
README.md |
TOC updated for v7.9.30 and v7.9.31 |
🗣️ Final Words
“The lock is patient. The icons know their names. The wallpapers are not the wallpapers you left. The feds are still here, and they are still bad at their jobs, but they are being watched now. We are, finally, a polite operating environment. Onward.” — The OpenRiot Crew, v7.9.31