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 i3lock patient — 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:65Backends::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/sed does not support -i at all. Every sed -i '' line in the build script has been silently failing since the dawn of the project. Cargo happily compiled with broken wgpu. The script printed Done!. The binary panicked. The user rebooted. Welcome to the loop.
  • ulimit -v is bash-ism. OpenBSD’s /bin/sh returns sh: ulimit: -v: unknown option. The data limit stayed at 1.5 GB. The linker died. The user rebooted. Same loop.
  • TMPDIR was 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, with ENOSPC on a filesystem with 0.5 GB of capacity.
  • The wgpu patches lived inside the attempt 2 retry 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:

  1. ulimit -d 8388608 (was ulimit -v)
  2. TMPDIR=$HOME/.cache/zed/tmp (was unset)
  3. sed_i() helper using temp file + mv (was sed -i '')
  4. 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:

  1. xset r off before i3lock — kills auto-repeat so no phantom keys are sent during the grab transition
  2. 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
  3. i3lock -n (--nofork) — deterministic timing, no fork race
  4. xset r on after 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 build reports Done! even when the resulting binary panics at runtime (v7.9.30)
  • xset r on is 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 -vulimit -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