OpenRiot v7.9.11 — The One Where Everything Actually Starts

“The bar rendered. The clicks did not register. We fixed that.” — The OpenRiot Crew, staring at a polybar that looked alive but was technically a zombie


Release Overview

v7.9.11 fixes the boot sequence. Polybar no longer launches before i3 is ready and pretends to be clickable. The xenodm greeter now mirrors your displays so you can log in from an external monitor without contorting your body toward a closed laptop. Night Light is instant. We swapped redshift — a daemon that phones home to New York City for sunrise data — for sct, which just sets the temperature and gets on with its life. We also added Zero A.D. The first unpack takes approximately the duration of a Roman campaign. It is worth it.


Polybar Clickability Fix

On boot, i3 ran --polybar-setup and sleep 5; polybar main. Five seconds is a guess. If i3’s XCB IPC socket wasn’t ready, Polybar mapped its window into a WM that hadn’t finished initializing. The bar rendered. Click events vanished into the void.

We replaced the blind delay with an actual readiness gate: while ! i3-msg -t get_version; do sleep 1; done. Polybar starts after i3 confirms it is alive, not after a coin flip.

We also removed the polybar-msg cmd restart line. A soft restart reuses the broken window hierarchy. That’s why you had to pkill -9 to fix it. Now the watcher loop just restarts the process if it dies.

File Change
config/i3/config IPC-gated polybar launch;
  removed soft restart; pgrep -x

xenodm Greeter Display Mirroring

OpenBSD’s default /etc/X11/xenodm/Xsetup_0 sets a weave background and starts xconsole — a root-owned fullscreen console you don’t want. It does zero display configuration. If you had an external monitor, the login widget only rendered on the laptop.

We replaced it. The new Xsetup_0 activates every connected output and mirrors the external display onto the laptop with --same-as. The greeter is now visible everywhere. xconsole is gone. The background is a solid dark color instead of a 1990s bitmap.

File Change
config/xenodm/Xsetup_0 NEW — mirrors displays on
  xenodm login, kills xconsole
install/packages.yaml Install script with .orig
  backup, idempotent reinstall

Night Light: sct, Not redshift

We were running redshift -l 40.71:-74.00 -t 4000:4000. That’s a daemon that calculates sunrise times in New York to apply a temperature that never changes. It also meant Get() — a polybar status query — would silently restart the daemon if it wasn’t running. A poll every 60 seconds should not mutate state.

We replaced redshift with sct:

  • sct 4000 — warm screen, done, no fork, no background job
  • sct — reset, done
  • Get() reads a file. Nothing else.

The polybar icon now reflects reality instead of enforcing it.

File Change
source/nightlight/nightlight.go Replaced redshift daemon with
  sct; read-only Get()
source/commands/helpers.go Symmetric toggle + notify UX
install/packages.yaml sct-0.5 replaces
  redshift-1.12p11

Games Update

Zero A.D. joins the roster alongside Extreme Tux Racer. We cleaned up commented-out entries (xonotic, katomic, supertuxkart) so the games menu isn’t a graveyard of might-have-beens.

A warning: Zero A.D.’s first launch unpacks its data files. This takes a while. You will think it crashed. It did not. Go make tea. Come back to a real-time strategy engine that runs on OpenBSD.

File Change
config/rofi/games.txt Added Zero A.D. and Tux Racer;
  removed stale comments
install/packages.yaml Added 0ad-0.28.0,
  extremetuxracer-0.8.4

Test Infrastructure

OpenBSD mounts /tmp with noexec. Go’s go test compiles binaries there and tries to run them. Permission denied. Every time.

The Makefile now sets TMPDIR=$(HOME)/.tmp before all test targets. No more manual environment wrangling.

File Change
Makefile TMPDIR=$(HOME)/.tmp for all
  test targets; column -t output

Documentation Cleanup

Nine stale docs deleted: Agents-Lessons, Architecture, Debugging, Image-Builder-Spec, Image-Spec, Network-TUI, Packages, polybar-performance, proton-drive-module, Agents-Icons. Lessons were merged into AGENTS.md as numbered rules. Colors.md moved to Proposals/.

File Change
docs/* Deleted 10 stale docs; moved
  Colors.md to Proposals/

🧾 Files Changed

File Change
config/i3/config IPC-gated polybar startup
config/xenodm/Xsetup_0 NEW — greeter display mirroring
config/rofi/games.txt Zero A.D., Tux Racer added
source/nightlight/nightlight.go sct replaces redshift
source/commands/helpers.go Night Light symmetric UX
install/packages.yaml sct-0.5; Xsetup install;
  0ad + tuxracer
Makefile TMPDIR fix; test formatting
docs/* Deleted stale files
Proposals/Colors.md Moved from docs/

🗣️ Final Words

“v7.9.10 made sure your packets went to the right router. v7.9.11 makes sure you can click the bar that tells you they arrived.”

No more phantom polybars. No more logging in through a laptop hinge at 90 degrees. No more redshift calculating solar noon in Manhattan while you sit in a dark room. sct is 4000K of instant warm light. Zero A.D. is currently unpacking. Let it cook.

Ship it.