xterm: the terminal holds node-terminal-emulator; its resources through xorg's slot (hq ADR 0208)

It requires x11-display, names itself in TERMINAL, and contributes its X resources
to the xresources slot normal: today's palette and clipboard keys, JetBrainsMono
Nerd Font, 10000 lines of scrollback, all scoped to XTerm* instead of every Xt
program. It owns no file.

The tools are the seat's open, which starts a terminal through the account's
service manager so it outlives the runtime's restarts, and font (in force, what
fontconfig resolves it to, set for new terminals) and colours.
This commit is contained in:
jochen
2026-10-04 13:21:47 +02:00
parent 34829e39fe
commit e4abc6eb88
12 changed files with 1750 additions and 0 deletions
+60
View File
@@ -0,0 +1,60 @@
# xterm
The terminal as a module (novox/hq ADR 0208, research 026, to-be 42 phase 2, step 5).
- **Claims `node-terminal-emulator`** and serves its verb `open`.
- **Requires `x11-display`.** In a Wayland session, `xwayland` would provide it.
- **Package `xterm`.**
- **Environment** (ADR 0203): `TERMINAL=xterm`. i3's `$mod+Return` runs `i3-sensible-terminal`, which
starts whatever `$TERMINAL` names, so the window manager no longer names the terminal.
- **X resources**, contributed to the `xresources` slot `normal` and placed by `xorg` in its resources
file. It owns no file of its own.
## The resources
They are those both workstations ran, with three changes:
- **face:** `JetBrainsMono Nerd Font` 12, replacing Hack (research 026/04);
- **scope:** every resource is under `XTerm*`. Today they were `*faceName`, `*background` and so on,
which reached every Xt program. `XTerm*` also outranks a `*name` resource of yours, so the old
`~/.Xresources.d/xterm` cannot win over them while it is still merged;
- **scrollback:** `saveLines` 10000 instead of 2000.
The palette (background, foreground and the sixteen colours) is today's, unchanged. So are the
clipboard keys: Ctrl+Shift+C copies to the clipboard and Ctrl+Shift+V pastes from it. The bundle's
`Resources()` is the one source of these values. The manifest test holds the manifest to it, and
`xterm_colours` compares against it.
## Tools
| tool | | what |
|---|---|---|
| `node-terminal-emulator.open` | d | a terminal in the session: the login shell, or a command run through it (`$SHELL -lc`), in a directory (the home by default), with an optional title, and `hold` to keep it open. It starts as a transient unit of the account's service manager (`systemd-run --user`), so it outlives the call and every runtime restart |
| `xterm_font` | r/a | the face and size in force and the installed font they resolve to (`fc-match`); set face or size for terminals opened from now on. Only installed faces are accepted |
| `xterm_colours` | r | background, foreground, cursor and the sixteen colours as `#rrggbb`, each beside the module's default |
## What it leaves found
`~/.Xresources.d/xterm`, and the `#include` of it in `~/.Xresources`.
## The one-off migration
**Delete `~/.Xresources.d/xterm` and its `#include` line in `~/.Xresources`** once `xterm` is
assigned (see `xorg`'s README for the rest of that file). Until then they are merged after the
mesh's. Being `*`-scoped, they lose to this module's `XTerm*` values, and still reach every other Xt
program.
## What changes when it is assigned
| | g14 | shanks |
|---|---|---|
| package | none (`xterm` present) | the same |
| `xorg`'s resources file | gains this module's resources | the same |
| environment | gains `TERMINAL=xterm` | the same |
| running terminals | **nothing**. The resources are merged at the next login | the same |
| next login | new terminals in JetBrains Mono, with 10000 lines of scrollback | the same. The desktop has a hand-copied build of the face until `fonts` installs the package |
## Blockers
None. It needs `xorg` assigned for `x11-display`, and `fonts` for the face. Without `fonts`,
fontconfig picks the nearest installed face, and `xterm_font` says which one in `resolves_to`.