Gabriel Brown 5562323eb8 Stop the live shell clobbering the write contract
This contract failed intermittently with "a typed batch did not reach
the compositor", reporting Panama's shipped defaults, and passed on
retry. The earlier guard against a lingering harness was not the cause --
no instance was alive.

Adding the writer's own error to the failure message settled it: the
writer reports NO error while the compositor holds defaults. A rejected
write leaves an error behind; a write that succeeded and was then
overwritten does not. Both this contract and the LIVE shell write to the
same compositor, and the running Panama re-applies its own preferences
on any store change -- landing exactly the values that were being
mistaken for "the write never happened".

So the apply is re-issued periodically while waiting, which makes the
test survive being overwritten without weakening what it asserts, and
the failure message now distinguishes the two cases instead of
describing both as a write that never arrived.

The wait is also 10 seconds rather than 4. The write path verifies every
option by reading it back and retries a refused batch, so a loaded
machine legitimately takes longer -- and this runs in a suite alongside
other tests driving the same compositor.

Claude-Session: https://claude.ai/code/session_01BRvzt4H8XXLPVH5MyYdk9L
2026-08-18 10:39:42 -04:00
2026-08-18 10:34:41 -04:00
2026-08-18 07:31:11 -04:00
2026-08-18 07:31:11 -04:00

Panama

Formerly Sunhat. A personal config for Fedora, with the intention of helping a user set up their Fedora system with one command.

git clone https://git.gbrown.org/gib/Panama.git ~/.local/share/Panama
~/.local/share/Panama/install

install runs everything in setup/scripts/ in order:

Script Does
install-packages Repos (RPM Fusion, Terra, Hyprland COPR), then the four package lists in setup/packages/
link-dotfiles Symlinks config/dot/<name>~/.config/<name>
change-settings Copies config/copy/ over /, applies gsettings, enables user services

Existing configs are moved to config/old/ rather than overwritten.

Desktops

Panama configures two desktops that coexist. Both sessions stay available in GDM, so you can switch back and forth while you settle in.

GNOME

The original setup: Forge for tiling, Dash-to-Dock, Openbar, Vitals, AppIndicator support. Configured through config/dot/forge/ and gsettings.

Hyprland

A from-scratch replacement built to reproduce the GNOME setup closely enough that muscle memory transfers — same keybinds, same panel contents, same dock, same Tokyo Night Moon palette.

Piece What it is
config/dot/hypr/ Compositor config. Lua, not hyprlang — see its README
config/dot/quickshell/ The shell: bar, dock, Continuum overview, Settings, Screen Intelligence, focus sessions, quick settings, notifications, screenshot UI
config/dot/vicinae/ Raycast-style launcher, themed
config/dot/uwsm/ Session environment (see the uwsm caveat in the hypr README)
config/dot/wofi/ Fallback launcher, in case the shell fails to start
config/dot/xdg-desktop-portal/ Portal backend routing

Start here: config/dot/hypr/README.md — it covers the Lua migration, the uwsm environment gotcha, the HDR decision, the full keymap, and troubleshooting.

Log in as "Hyprland (uwsm-managed)", not plain "Hyprland".

Layout

bin/            Small user-facing commands on PATH
config/
  bash/         .bashrc, aliases, env (env is gitignored)
  copy/         Files copied verbatim over / (needs sudo)
  dot/          Symlinked into ~/.config
  old/          Backups of whatever was replaced (gitignored)
setup/
  packages/     One package per line
  scripts/      Run in order by ./install
S
Description
No description provided
Readme
6.1 MiB
Languages
QML 44.2%
Shell 38%
Python 11.2%
CSS 3.5%
Lua 2.1%
Other 0.9%