base: support modern terminals (ncurses-term + xterm-ghostty alias)
Lint / hadolint (push) Successful in 8s
Lint / actionlint (push) Successful in 15s

The base only shipped ncurses-base (xterm-256color, tmux), so SSHing in from
WezTerm/Alacritty/foot/Ghostty degraded to a dumb TERM fallback. Following the
maintainer's ansible common role:

- Dockerfile.base: install ncurses-term (terminfo for wezterm, alacritty,
  foot, st, base ghostty entry, and many more).
- rootfs/.../terminfo-src/ghostty.terminfo: thin xterm-ghostty alias
  (use=ghostty) — Ghostty connects as TERM=xterm-ghostty, which no distro
  packages. Compiled into the system db with 'tic -x'; build asserts it
  resolved via infocmp.
- kitty (xterm-kitty) already covered by kitty-terminfo; iTerm2 uses
  xterm-256color (ncurses-base).
- smoke-test: assert ncurses-term emulators + xterm-ghostty alias resolve.

Validated end-to-end in a throwaway container: ncurses-term brings the
entries, the alias compiles and equals the ghostty capability set. hadolint
clean, bash -n OK. Base-affecting, rebuilds base-<hash>. No tag.
This commit is contained in:
pi
2026-07-13 18:45:38 +02:00
parent 291ae5345e
commit 8c27894cf2
4 changed files with 49 additions and 0 deletions
+13
View File
@@ -33,6 +33,19 @@ Pre-v1.0.0 tags followed the pi npm version (`v{pi_version}[letter]`).
overridden per-user (`:set notermguicolors`, or your own init). Base-affecting
(`Dockerfile.base` apt package + COPY), rebuilds `base-<hash>`.
- **Terminal support beyond kitty: `ncurses-term` + a compiled `xterm-ghostty`
alias.** The base previously shipped only `ncurses-base` (xterm-256color,
tmux), so SSHing in from a modern emulator degraded to a dumb fallback. The
base now installs `ncurses-term` (terminfo for WezTerm, Alacritty, foot, st,
and the base `ghostty` entry, among many others) and compiles an
`xterm-ghostty` alias with `tic -x` (`use=ghostty`) — Ghostty connects as
`TERM=xterm-ghostty` and no distro packages that name. Combined with
`kitty-terminfo` (xterm-kitty) and xterm-256color (iTerm2's default, already
in ncurses-base), the common modern terminals now resolve their TERM. The
approach mirrors the maintainer's ansible `common` role. Base-affecting
(`Dockerfile.base` apt + COPY + `tic` RUN, plus a new
`rootfs/usr/local/share/terminfo-src/ghostty.terminfo`), rebuilds `base-<hash>`.
- **Repository hygiene: `LICENSE`, `THIRD_PARTY.md`, and `.dockerignore`.** The
repo declared MIT only in prose; it now ships an actual `LICENSE` file (MIT,
© Joakim Persson) plus `THIRD_PARTY.md` recording that the published images