feat(terminal): Kitty only — drop Ghostty (#95)
Some checks failed
Check / eval (push) Has been cancelled

Ghostty's OpenGL 4.3 floor broke the Acer (HD 4000 / 4.2). Dual-terminal
support (default Ghostty + install-time Kitty fallback) was more complexity
than it was worth.

- Remove ghostty.nix / nomarchy.ghostty.enable
- Kitty always installed and themed from theme-state
- Default nomarchy.terminal = kitty; SUPER+Return, doctor, calendar,
  what-changed use kitty --class=com.nomarchy.*
- Drop install-time glxinfo probe and mesa-demos on the installer
- Docs/REQUIREMENTS no longer list OpenGL 4.3 as a terminal floor

Verified: V0 flake check; option-docs; installer-safety; template HM has
kitty, no ghostty; menu/calendar emit classed kitty launches.
This commit is contained in:
2026-07-15 09:51:27 +01:00
parent 1e648b6c49
commit 545e40f4d9
32 changed files with 151 additions and 299 deletions

View File

@@ -1,5 +1,5 @@
# V2 harness for the floating Doctor terminal (System Doctor /
# nomarchy-menu doctor → ghostty --class=com.nomarchy.doctor).
# nomarchy-menu doctor → kitty --class=com.nomarchy.doctor).
#
# Boots headless softGL Hyprland (same stack as theme-shot), launches the
# real menu path, then asserts via hyprctl that the window is floating
@@ -8,8 +8,8 @@
#
# nix build --impure -f tools/doctor-float.nix --no-link --print-out-paths
#
# Maintainer harness — not a checks.* gate (full desktop VM). Ghostty
# under softGL is best-effort (MEMORY); if the client never appears the
# Maintainer harness — not a checks.* gate (full desktop VM). Kitty under
# softGL is best-effort (MEMORY); if the client never appears the
# scripted float asserts fail loudly rather than claiming success.
let
flake = builtins.getFlake ("git+file://" + toString ../.);
@@ -82,7 +82,7 @@ pkgs.testers.runNixOSTest {
# Real product path: Waybar / System Doctor both call this.
machine.execute(f"{hy} dispatch exec nomarchy-menu doctor' >/dev/null 2>&1")
# Wait for the classed Ghostty client (softGL may be slow).
# Wait for the classed Kitty client (softGL may be slow).
def clients():
raw = machine.succeed(f"{hy} clients -j'").strip()
try:
@@ -104,17 +104,15 @@ pkgs.testers.runNixOSTest {
dump = machine.succeed(f"{hy} clients -j'")
assert doctor is not None, (
"no client with class com.nomarchy.doctor after nomarchy-menu doctor "
f"(Ghostty under softGL may have failed clients dump):\n{dump}"
f"(Kitty under softGL may have failed clients dump):\n{dump}"
)
assert doctor.get("floating") is True, (
f"doctor window is not floating: {json.dumps(doctor, indent=2)}"
)
# Product contract: float + center. Ghostty often keeps its default
# 800×600 even when a size rule is present (client geometry wins);
# the size rule remains as a best-effort hint. Assert center from
# the actual size so a smaller Ghostty window still counts.
# Product contract: float + center. Size rule is best-effort if the
# client geometry wins; assert center from the actual size.
at = doctor.get("at") or [0, 0]
size = doctor.get("size") or [0, 0]
w, h = int(size[0]), int(size[1])