Commits
Browser links now point at https://covibe.lassul.us/c (our client, our
relay) instead of my.omp.sh. Nothing collab-related loads off-site.
- ompPackage: llm.omp + omp-collab-autostart.patch (env-driven headless
collab autostart; covibe owns the room id/key).
- relayHost = covibe.lassul.us; browser links use omp's hosted collab-web,
terminal guests use 'omp join'. Sessions enumerable + killable by id.
nixpkgs now ships the pkg_resources->importlib.resources patch and builds
tulir-telethon standalone (python3.14 works), so the overlay override
broke the build via --replace-fail on an already-patched line.
Replace the greetd gamescope-session (which required STROM_NO_GAMESCOPE and
rendered games directly in the session compositor) with greetd launching sway.
A game's nested gamescope prefers its wayland backend, which needs wlroots
protocols that cage (and, differently, an outer gamescope session) do not give
it. Under those it fell back to gamescope's SDL backend, whose Vulkan swapchain
remake loops and aborts on this RADV RENOIR iGPU (rendervulkan.cpp
vulkan_remake_swapchain) - crashing e.g. Baba Is You a couple seconds in. sway
exposes those protocols, so gamescope inits its wayland backend and never hits
the crashing SDL path. Every game keeps its own gamescope (render resolution,
in-game exit chord, bare-tty portability); no per-game workaround needed.
Also resolve STROM_FLAKE to the /home/strom/strom checkout when present (github
fallback) so changes can be tested on the box before pushing upstream.
Xbox pads pair via JustWorks; on reconnect a pad whose bond went stale
re-initiates pairing, which needs a registered agent to auto-confirm. bluetuith
only has an agent while actively pairing in it, so an autonomous re-pair hit
"No agent available for request type 2" and the link dropped right after
connecting. Run bt-agent -c NoInputNoOutput as a persistent default agent so
pairing/re-pairing always completes.
Also set TemporaryTimeout=30 so the LAN party's hundreds of stray BLE devices
are evicted from the cache instead of piling up and saturating the adapter.
The bespoke pairing script was fighting Xbox BT quirks (stale bonds,
pairing-mode timing) more than it helped. Remove it; bluetuith (already
installed via 2configs/pipewire.nix) is a cleaner TUI for pairing/managing
controllers.
A pad paired to another device in the meantime still shows Bonded here, so the
old script skipped it and it never reconnected (kept shutting down / rejoining
the other host). Target pads by what actually shows up in the scan (present and
advertising in pairing mode) rather than the bonded-device list, and clear any
stale bond before re-pairing. Pads already connected and working are left
alone.
Replace the cage kiosk with a gamescope session on DRM (greetd autologin).
gamescope presents straight to the display, so there is no nested Wayland
swapchain for RADV to storm on this Vega iGPU - which crashed games like Baba
Is You when gamescope was nested under cage. Set STROM_NO_GAMESCOPE=1 so the
launcher runs <slug>.no-gamescope and each game renders directly in the session
compositor instead of nesting its own gamescope.
Runs the patched launcher from the /home/strom/strom checkout until the
STROM_NO_GAMESCOPE support lands upstream (github launcher lacks it).
Add strom-pair (in-session NoInputNoOutput agent + polling, bond check) to
pair Xbox Wireless Controllers one at a time, plus the bluez/kernel bits they
need: hardware.xpadneo, disable_ertm=1 (else AuthenticationFailed), and
FastConnectable=true so bonded pads reconnect. Point the launcher session at
evdev via SDL_JOYSTICK_HIDAPI_XBOX=0, poll hotplug with
SDL_JOYSTICK_DISABLE_UDEV=1, and allow input without focus via
SDL_JOYSTICK_ALLOW_BACKGROUND_EVENTS=1.
Autostart the strom couch launcher fullscreen via services.cage on boot
(after LUKS unlock), always pulling the newest launcher with nix run.
Dedicated strom kiosk user; force backlight to max on boot and let the
video group adjust brightness via brightnessctl udev rules.
mpvpaper renders a random video/image from ~/wallpaper on the background
layer, rotated daily; noctalia's own wallpaper is disabled to let it show
through. lockscreen picks from the same folder. Seeds a moewalls pixel-art
sunset starter. Drops the unused feh fetchWallpaper on ignavia.
Keep the default wpa_supplicant backend (iwd pegged 100% CPU in dense
~100-AP RF and wedged the link), disable NIC power-save + PCIe ASPM to
cut mt7925 scan-deauth frequency, and drop the gateway-ping watchdog
(bornhack drops ICMP to the gateway, so it false-fired and bounced a
working connection every 90s).
Mark wlan links unmanaged by systemd-networkd so NetworkManager is
the sole wifi DHCP client. With networking.useNetworkd enabled, the
auto-generated 40-<iface>.network ran a second DHCP client on the
wifi; the two fought over the lease and routes and dropped the link
every few minutes. Match by Type=wlan so it holds across interface
renames.
nixvim's docs build patches nixos-render-docs with nixpkgs PR#538502,
already merged in our nixpkgs, so the patch fails and breaks the build.
We follow a single nixpkgs, so drop the manpage instead.
nixpkgs default python3 moved to 3.14, but tulir_telethon declares no
3.14 support, breaking evaluation.
The list_add corruption / lib/list_debug.c:32 freezes on WiFi roam were
an add-side race: generic mt76_sta_add() re-ran mt76_wcid_init() on a
wcid that mt7925_mac_sta_add had already published, letting the rx/txs
softirq link it into sta_poll_list right before the second
INIT_LIST_HEAD self-looped the node. Our local teardown-side patch
could not close that window (crashed again 2026-07-07, 4x in 11 min).
Upstream fix 20b126920a25 ("wifi: mt76: add wcid publish check in
mt76_sta_add") is in 7.1.3, which linuxPackages_latest now provides
after the nixpkgs bump. Keep kernel >= 7.1.3.
Six hard freezes on 2026-07-03, all during WiFi roaming between hoelle
APs. Captured oopses show identical list_add corruption in an 8k slab
(ieee80211_sta + drv_priv) -> kernel BUG at lib/list_debug.c:32 in
softirq context -> full system freeze.
Root cause: mt792x station teardown never clears wcid->sta, so the
rx/txs softirq path can re-add a dying wcid to sta_poll_list after
mt76_wcid_cleanup() unlinked it. Once the sta is freed and the slab
slot reused, mt76_wcid_init() self-loops the still-linked list node;
the next list_add_tail() panics. Also fixes the unlocked
list_first_entry read in mt7925_mac_sta_poll (mt7921 already takes
the lock there).
Full analysis in the patch header. Drop once fixed upstream
(https://github.com/zbowling/mt7925 tracks related work).
Also drop amdgpu.mes=0: the parameter no longer exists on 7.x
("amdgpu: unknown parameter mes ignored").
Replace the stock chime with the quack from
https://www.youtube.com/watch?v=Fw3RB7xnb80, trimmed to 0.2s and
attenuated to match the original's peak level.
Assisted-by: Claude Code (claude-fable-5)
Matrix is a Tier-2 platform whose default tool-progress preview caps
commands at 40 chars, so a `terminal` call only surfaced e.g.
`curl -X POST -H "Content-Type: applic...`. Set the matrix platform's
tool_progress to "verbose" so the gateway renders the full, multi-line
command as a fenced code block.
Assisted-by: Claude Code (claude-opus-4-8[1m])
Replace the greetd gamescope-session (which required STROM_NO_GAMESCOPE and
rendered games directly in the session compositor) with greetd launching sway.
A game's nested gamescope prefers its wayland backend, which needs wlroots
protocols that cage (and, differently, an outer gamescope session) do not give
it. Under those it fell back to gamescope's SDL backend, whose Vulkan swapchain
remake loops and aborts on this RADV RENOIR iGPU (rendervulkan.cpp
vulkan_remake_swapchain) - crashing e.g. Baba Is You a couple seconds in. sway
exposes those protocols, so gamescope inits its wayland backend and never hits
the crashing SDL path. Every game keeps its own gamescope (render resolution,
in-game exit chord, bare-tty portability); no per-game workaround needed.
Also resolve STROM_FLAKE to the /home/strom/strom checkout when present (github
fallback) so changes can be tested on the box before pushing upstream.
Xbox pads pair via JustWorks; on reconnect a pad whose bond went stale
re-initiates pairing, which needs a registered agent to auto-confirm. bluetuith
only has an agent while actively pairing in it, so an autonomous re-pair hit
"No agent available for request type 2" and the link dropped right after
connecting. Run bt-agent -c NoInputNoOutput as a persistent default agent so
pairing/re-pairing always completes.
Also set TemporaryTimeout=30 so the LAN party's hundreds of stray BLE devices
are evicted from the cache instead of piling up and saturating the adapter.
A pad paired to another device in the meantime still shows Bonded here, so the
old script skipped it and it never reconnected (kept shutting down / rejoining
the other host). Target pads by what actually shows up in the scan (present and
advertising in pairing mode) rather than the bonded-device list, and clear any
stale bond before re-pairing. Pads already connected and working are left
alone.
Replace the cage kiosk with a gamescope session on DRM (greetd autologin).
gamescope presents straight to the display, so there is no nested Wayland
swapchain for RADV to storm on this Vega iGPU - which crashed games like Baba
Is You when gamescope was nested under cage. Set STROM_NO_GAMESCOPE=1 so the
launcher runs <slug>.no-gamescope and each game renders directly in the session
compositor instead of nesting its own gamescope.
Runs the patched launcher from the /home/strom/strom checkout until the
STROM_NO_GAMESCOPE support lands upstream (github launcher lacks it).
Add strom-pair (in-session NoInputNoOutput agent + polling, bond check) to
pair Xbox Wireless Controllers one at a time, plus the bluez/kernel bits they
need: hardware.xpadneo, disable_ertm=1 (else AuthenticationFailed), and
FastConnectable=true so bonded pads reconnect. Point the launcher session at
evdev via SDL_JOYSTICK_HIDAPI_XBOX=0, poll hotplug with
SDL_JOYSTICK_DISABLE_UDEV=1, and allow input without focus via
SDL_JOYSTICK_ALLOW_BACKGROUND_EVENTS=1.
Keep the default wpa_supplicant backend (iwd pegged 100% CPU in dense
~100-AP RF and wedged the link), disable NIC power-save + PCIe ASPM to
cut mt7925 scan-deauth frequency, and drop the gateway-ping watchdog
(bornhack drops ICMP to the gateway, so it false-fired and bounced a
working connection every 90s).
Mark wlan links unmanaged by systemd-networkd so NetworkManager is
the sole wifi DHCP client. With networking.useNetworkd enabled, the
auto-generated 40-<iface>.network ran a second DHCP client on the
wifi; the two fought over the lease and routes and dropped the link
every few minutes. Match by Type=wlan so it holds across interface
renames.
The list_add corruption / lib/list_debug.c:32 freezes on WiFi roam were
an add-side race: generic mt76_sta_add() re-ran mt76_wcid_init() on a
wcid that mt7925_mac_sta_add had already published, letting the rx/txs
softirq link it into sta_poll_list right before the second
INIT_LIST_HEAD self-looped the node. Our local teardown-side patch
could not close that window (crashed again 2026-07-07, 4x in 11 min).
Upstream fix 20b126920a25 ("wifi: mt76: add wcid publish check in
mt76_sta_add") is in 7.1.3, which linuxPackages_latest now provides
after the nixpkgs bump. Keep kernel >= 7.1.3.
Six hard freezes on 2026-07-03, all during WiFi roaming between hoelle
APs. Captured oopses show identical list_add corruption in an 8k slab
(ieee80211_sta + drv_priv) -> kernel BUG at lib/list_debug.c:32 in
softirq context -> full system freeze.
Root cause: mt792x station teardown never clears wcid->sta, so the
rx/txs softirq path can re-add a dying wcid to sta_poll_list after
mt76_wcid_cleanup() unlinked it. Once the sta is freed and the slab
slot reused, mt76_wcid_init() self-loops the still-linked list node;
the next list_add_tail() panics. Also fixes the unlocked
list_first_entry read in mt7925_mac_sta_poll (mt7921 already takes
the lock there).
Full analysis in the patch header. Drop once fixed upstream
(https://github.com/zbowling/mt7925 tracks related work).
Also drop amdgpu.mes=0: the parameter no longer exists on 7.x
("amdgpu: unknown parameter mes ignored").
Matrix is a Tier-2 platform whose default tool-progress preview caps
commands at 40 chars, so a `terminal` call only surfaced e.g.
`curl -X POST -H "Content-Type: applic...`. Set the matrix platform's
tool_progress to "verbose" so the gateway renders the full, multi-line
command as a fenced code block.
Assisted-by: Claude Code (claude-opus-4-8[1m])