fix(ui): #139 sheets size themselves; #141 waybar clicks stop reading the env
Some checks failed
Check / eval (push) Has been cancelled

#139 — calcurse/doctor floated full-screen. Two faults stacked, which is
why it looked like the float rules were dead:
  1. Hyprland 0.55.4 silently ignores percentage `size` rules. Matrix on
     hardware (both orders, kitty memory off): `size 60% 65%` never
     applies, `size 1536 936` applies either way, configerrors empty both
     times. Rule order was a red herring.
  2. Kitty defaults to remember_window_size=yes and replays the last OS
     window's size into every float — so after a tiled terminal, a sheet
     opens maximized. This is the Ghostty regression: Ghostty had no such
     memory, so fault 1 stayed invisible until #95.

Fix: remember_window_size=no (floats must be deterministic) and the sheets
ask for their own size — term-sheet.nix reads the focused monitor and
hands kitty the px, because px in a rule cannot mean "a fraction of *this*
screen" and one pair cannot serve 2560x1440 and the 1366x768 Acer (#131).
Those windows keep float/center and deliberately carry no size rule.

#141 — the updates click did nothing: whole-swaps hand-wrote
`sh -c '$TERMINAL …'` and Waybar has no TERMINAL (home.sessionVariables →
login shells only; the bar is spawned by Hyprland). Fixed at the root:
`nomarchy-updates upgrade-window` opens its own window, so all five call
sites name one env-free command and a theme file stops having an opinion
about terminals. checks.waybar-swap-env guards the class.

Bernardo asked mid-task for the update window to float — it is now the
third caller of the sheet helper (com.nomarchy.updates, 45%x50%).

V3 on the dev box: calendar 1536x936, doctor 1408x1008, updates 1152x720
— exactly the intended fractions, floating and centred; #141 driven under
`env -i` with no TERMINAL, matching Waybar's real environment; the guard
proven by reintroducing the bug. Acer V3 queued.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-16 10:04:28 +01:00
parent 4a63f27bf4
commit 55a516e1c7
15 changed files with 220 additions and 74 deletions

View File

@@ -211,66 +211,6 @@ scaled splash — the LUKS prompt especially, since a passphrase box half off
the panel is the failure that matters. Pass = docked boot + shutdown centred
on both heads; undocked unchanged.
### 139. Terminal floats open full-screen — % size rules are ignored, and Kitty remembers
Bernardo 2026-07-16: calcurse and nomarchy-doctor float but fill the screen —
the reduced size we had under Ghostty is gone. Reproduced and root-caused live
on the T14s (Hyprland 0.55.4, single 2560×1440 head), and it is **two** faults
stacked, which is why it looks like the float rules are dead when they are not:
1. **Percentage sizes silently no-op.** `com.nomarchy.calendar` came up
`floating=true` but `size=[2526,1360]` — the full work area, not the
`size 60% 65%` in `modules/home/hyprland.nix:1064`. A runtime rule with
**absolute** pixels (`size 1400 900`) applied perfectly and even centred
itself, so `size` works and the matcher works: it is the `%` form that this
Hyprland drops. No `hyprctl configerrors` — it fails silently, which is
how it survived the rule-syntax rewrite.
2. **Kitty remembers its last window size.** With the rule not applying,
nothing overrides Kitty's own request, and Kitty defaults to
`remember_window_size yes``~/.cache/kitty/main.json` literally holds
`{"window-size": [...]}` and is replayed into every new OS window. So the
float inherits whatever the last Kitty was, which after any tiled window is
~full-screen. **This is the Ghostty regression** (#95, Kitty-only): Ghostty
kept no such memory, so fault 1 was invisible — fault 2 exposed it.
Both need fixing, and fixing either alone is a trap: absolute pixels alone
stop being right on the 1366-wide Acer (#131's machine) or any scaled head,
and pinning Kitty alone leaves the `%` rules rotting for the next window we
float. Likely shape: `-o remember_window_size=no` (plus
`initial_window_width/height`) in the `nomarchy-calendar` / doctor launchers
so Kitty stops fighting us, and either the working syntax for `%` or a
documented note that this Hyprland wants absolute px. Affects every rule using
`%` — today calendar (`:1064`) and doctor (`:1070`). Pass = both sheets open
centred at their intended fraction on the dev box **and** on the Acer.
_(My probes wrote `{"window-size": [1400, 900]}` into your Kitty cache — it is
a self-updating cache, harmless, and any resize overwrites it.)_
### 141. Waybar's update module is dead in the whole-swap themes (`$TERMINAL` is unset)
Bernardo 2026-07-16: clicking the Waybar updates module does nothing.
Confirmed live and it is a **Waybar parity break** (CONVENTIONS § whole-swaps),
not an updates bug. The generated module bakes the terminal in —
`"${config.nomarchy.terminal} -e nomarchy-updates upgrade"`
(`modules/home/waybar.nix:356`) — but the four whole-swap themes hand-write
`"sh -c '$TERMINAL -e nomarchy-updates upgrade'"`, and **Waybar's environment
has no `TERMINAL`**: its 55 vars contain zero matches (pid 1688, `/proc/*/environ`).
`TERMINAL` is a `home.sessionVariables` entry (`modules/home/default.nix:104`),
so login shells get it and the Hyprland-spawned bar does not. The click expands
to `sh -c ' -e nomarchy-updates upgrade'` → nothing, no error, no toast. You
are on **boreal**, a whole-swap, which is why you see it.
Affected, one line each: `themes/{boreal,summer-day,summer-night,executive-slate}/waybar.jsonc`
(`custom/updates.on-click` — grep says this is the *only* `$TERMINAL` use left
in any whole-swap, so the blast radius is exactly these 4 lines). Fix = drop
the env dependency the way calendar/doctor already do — name `kitty` outright,
Kitty being sole supported since #95 — or, better and one place instead of
five, give `nomarchy-updates` a subcommand that opens its own terminal so
every caller stops needing `$TERMINAL`. Worth a check against the class of
bug, not the instance: nothing today asserts that a whole-swap's on-click
survives Waybar's actual environment, so the next hand-written jsonc can
reintroduce it silently.
### 142. A rebuild while docked undoes dock mode (the panel comes back, a workspace jumps to it)
Bernardo 2026-07-16: every rebuild while docked lands in the undocked state —

View File

@@ -531,6 +531,14 @@ Everything else below stays open; order is convenience, not a gate.
proves the menu row + flow renders; a real capsule write is
hardware-only.)
## Acer Aspire M5-481T only (1366×768 — the narrow-panel case)
- [ ] **#139 sheets on a small panel** — Waybar clock → calendar, System ▸
Doctor, and the Waybar updates click. Pass = each opens floating and
centred at roughly 60%×65% / 55%×70% / 45%×50% of *that* screen (they are
computed from the focused monitor now, so this is checking the fallback
path and the font, not the arithmetic), fully on-screen, none clipped by
the bar. Dev box (2560×1440) already measured exact.
## Latitude 5310 / 5410 only
- [ ] **v1 QA batch on-hardware pass** (583708d batch was QEMU-verified) —
general smoke before the next `main → v1` promotion (broader than

View File

@@ -19,6 +19,34 @@ Template:
---
## 2026-07-16 — #139 + #141: the quick ones from the T14s round
- **Task:** #139 (terminal sheets open full-screen) and #141 (Waybar updates
click does nothing) — Bernardo: "let's do the quick ones first".
- **Did:** #139 was two faults: Hyprland 0.55.4 ignores **percentage** `size`
rules (clean matrix on hardware: both orders, Kitty memory off — px applies,
% never does, no configerror), and Kitty replays its remembered window size
into every float. Fix: `remember_window_size no` + a shared
`modules/home/term-sheet.nix` that reads the focused monitor and hands Kitty
the px, so the % intent survives without a rule; the size rules are gone.
#141: whole-swaps used `$TERMINAL`, which Waybar's env does not have →
`nomarchy-updates upgrade-window` opens its own window, all 5 call sites are
env-free, `checks.waybar-swap-env` guards the class. Bernardo asked mid-task
for the update window to float too → third caller of the sheet helper.
- **Verified:** V0 `nix flake check --no-build`. **V3 on the dev box:** built
the HM package with `--override-input`, drove the real launchers — calendar
1536×936 (=60%×65%), doctor 1408×1008 (=55%×70%), updates 1152×720
(=45%×50%), all floating + centred in the work area. #141 tested the way it
actually fails: `env -i` with no `TERMINAL` (matching Waybar's real env) →
window opens. Guard proven by reintroducing the bug: it fails with the
offending file/module/key named.
- **Pending:** Acer (1366×768) V3 queued — the sheets are monitor-relative now,
so it should hold by construction, which is exactly why it is worth one look.
#131 is **live on 2560** per Bernardo, so its "only at 1366" model is wrong —
next up.
- **Next suggestion:** #131 (recovery labels truncating on a wide panel —
observed, so the measurement in that item is what needs re-doing), then #137
(plymouth per-head) or #142 (rebuild-while-docked).
## 2026-07-16 — #138 dock audio: the graph restart was the bug (44aac0f + this)
- **Task:** #138 — Meet "no mic or speakers" in Chromium; Zoom fine; no repro
on a fresh boot. Bernardo's hypothesis (pipewire restarts → Chromium never