Skip to content

feat(TERM-001): Ghostty bootstrap for Linux#45

Merged
mlorentedev merged 2 commits into
mainfrom
feat/TERM-001-impl
May 18, 2026
Merged

feat(TERM-001): Ghostty bootstrap for Linux#45
mlorentedev merged 2 commits into
mainfrom
feat/TERM-001-impl

Conversation

@mlorentedev
Copy link
Copy Markdown
Owner

Summary

Implementation PR for TERM-001-ghostty-bootstrap. Closes the loop on the Ghostty setup that was done manually mid-AI-011-validation (2026-05-17): the config draft lives at ~/.config/ghostty/config on this machine but was never versioned. This PR promotes it to terminal/ghostty/config in the repo and adds the full bootstrap surface around it.

Builds on the design decisions locked in merged PR #42 (chore/TERM-001-proposal):

Decision Choice
Version pinning GHOSTTY_VERSION=1.3.0 in versions.conf
Distro coverage Ubuntu only (apt install ghostty)
Set-as-default GNOME terminal Manual, documented in runbook
Install gating Detect-and-warn (setup-linux.sh avoids sudo, same convention as tmux/xclip)

What lands

  • terminal/ghostty/config — canonical config (Catppuccin Mocha + JetBrainsMono Nerd Font Mono + confirm-close-surface + copy-on-select)
  • versions.confGHOSTTY_VERSION=1.3.0
  • setup-linux.sh — install detect + version drift warning + config deploy (reconcile-not-skip, same pattern as opencode.jsonc)
  • scripts/healthcheck.sh — new section 11/12 Ghostty (binary + version match + config presence + theme/font line check); existing sections renumbered to /12
  • tests/ghostty.bats — 10 assertions
  • tests/healthcheck.bats — section count 11 → 12 + 4 new ghostty assertions, drift renumbered to 12/12
  • tests/opencode.bats — OpenCode section refs updated 10/11 → 10/12
  • tests/verify-setup.bats — new integration assertion: ghostty config deployed in the Docker container even without the binary
  • Vault runbook 40-runbooks/guide-ghostty-setup.md (committed separately via hive MCP) — GUI one-time steps, SSH terminfo workaround, workflow alongside tmux/opencode, eye-fatigue lever ranking, troubleshooting

Test plan

  • bats tests/*.bats — 532/532 green locally
  • bash -n setup-linux.sh + zsh -n setup-linux.sh clean
  • shellcheck setup-linux.sh scripts/healthcheck.sh — only pre-existing INFO warnings (SC1091/SC2015), unrelated to this PR
  • cmp -s terminal/ghostty/config ~/.config/ghostty/config — repo file matches the deployed file (idempotent first run)
  • CI green (let me know if anything fails — the new verify-setup integration assertion is the highest-risk addition)
  • Post-merge manual: re-run ./setup-linux.sh here and confirm healthcheck shows 12/12 OK

Out of scope (deferred)

  • Cross-distro install paths (Arch / Fedora) — premature abstraction
  • Auto-install of JetBrainsMono Nerd Font — heavy + version-fragile, stays in runbook
  • WingGhostty / Windows side — community fork too immature (1 week post-release); deferred to TERM-002 in 3-6 months

Cross-links

Implements the proposal merged in #42. Versioned config + version pin
+ healthcheck section + bats coverage + vault runbook.

Files
-----
- terminal/ghostty/config           new -- canonical config (Catppuccin
                                    Mocha, JetBrainsMono Nerd Font Mono,
                                    confirm-close-surface, copy-on-select)
                                    promoted from ~/.config/ghostty/config
                                    (the draft created mid-AI-011-validation)
- versions.conf                     +GHOSTTY_VERSION=1.3.0
- setup-linux.sh                    new ghostty block: detect-and-act
                                    install check (warn-not-fail, no sudo,
                                    same convention as tmux/xclip) + version
                                    drift warning + config deploy with the
                                    same reconcile-not-skip pattern used for
                                    opencode.jsonc
- scripts/healthcheck.sh            renumber 1..11/11 -> 1..12/12 + insert
                                    new section 11/12 "Ghostty" (binary
                                    present, version matches versions.conf,
                                    config deployed and well-formed)
- tests/ghostty.bats                new -- 10 assertions on repo config
                                    shape, theme/font sanity, version pin,
                                    setup-linux.sh integration
- tests/healthcheck.bats            update count assertion 11 -> 12,
                                    add 4 new ghostty section assertions,
                                    renumber drift to 12/12
- tests/opencode.bats               update OpenCode section references
                                    10/11 -> 10/12
- tests/verify-setup.bats           new integration assertion: ghostty
                                    config deployed to ~/.config/ghostty/
                                    inside the Docker container regardless
                                    of binary presence

Design decisions, all from the merged proposal in #42:

  1. Version pinned in versions.conf  (consistent with UV_VERSION etc.)
  2. Ubuntu-only via apt              (KISS; cross-distro is YAGNI)
  3. Set-as-default GNOME terminal    (manual, documented in runbook)
  4. Install gating                   (detect-and-warn; setup-linux.sh
                                       avoids sudo, same as tmux)

The user's currently-deployed ~/.config/ghostty/config is byte-identical
to terminal/ghostty/config, so the first reconcile run on this box is
a no-op (cmp -s passes, log_info "ghostty config already in sync").

Runbook
-------
guide-ghostty-setup.md in the vault (separate commit via hive MCP)
covers GUI-only steps: Nerd Font install, set-as-default gsettings,
SSH terminfo workaround, recommended workflow alongside tmux + opencode,
theme/font/font-size rationale, eye-fatigue lever ranking, troubleshooting.

Out of scope deferred
---------------------
- Cross-distro install paths (Arch / Fedora)
- WingGhostty / Windows side (deferred to TERM-002 in 3-6 months when
  the community fork matures)
- Auto-install of JetBrainsMono Nerd Font (heavyweight + version-fragile;
  stays in runbook as a manual step)

Tests: 532/532 green locally. CI will run integration in Docker; the new
verify-setup.bats assertion checks config deploy works even when the
ghostty binary itself is absent (container has no ghostty).
@mlorentedev mlorentedev merged commit 66bf49e into main May 18, 2026
5 checks passed
@mlorentedev mlorentedev deleted the feat/TERM-001-impl branch May 18, 2026 04:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant