Skip to main content

max / alloy

Record that the console palette has no night table, only a night file skelgen renders vtrgb.night beside vtrgb and the Containerfile asserts both are present, so the tree reads as though boot and login follow the day/night choice. Nothing reads the night file. alloy-vtrgb.service names the day table outright and the kargs template carries no variants directive, so the kernel only ever holds Akari Dawn. The gap is not an oversight in the unit. The unit runs before any user exists and the kernel argument is fixed at build time, so the per-user mode file cannot decide this; it needs a system-scoped setting that does not exist yet. Say so in the stack doc rather than leaving the night sibling to imply a feature.
Co-Authored-By
Claude Opus 5 (1M context) <noreply@anthropic.com>
Author: Max Johnson <me@maxj.phd> · 2026-07-31 00:14 UTC
Signed with PGP, not checked
Commit: 2bf4839ec0591a5ff3f4583e3032407ed37d6c81
Parent: 2a6f8c1
1 file changed, +3 insertions, -1 deletion
M docs/STACK.md +3 -1
@@ -449,7 +449,9 @@
449 449
450 450 **greetd + tuigreet.** Rust, minimal, ratatui-rendered. greetd is the daemon that owns VT1; tuigreet is the ratatui client that prompts for user/password and execs [`alloy-session`](../usr/bin/alloy-session) on successful auth, which applies the chosen day/night skeleton and execs `sway`. Config at [`etc/greetd/`](../etc/greetd/): `/etc/greetd/config.toml` sets up VT1 with tuigreet and a `--theme` written in ANSI color names.
451 451
452 - **The palette reaches it through the console, not through `--theme`.** tuigreet 0.9.1 parses only the sixteen ANSI names; a hex value is ignored rather than rejected, and the affected element falls back to a default, so `prompt=#8a4530` renders red. This doc claimed an Akari greeter for a while on the strength of a `--theme` that could not deliver one. What delivers it is [`usr/lib/bootc/kargs.d/10-alloy.toml`](../templates/usr/lib/bootc/kargs.d/10-alloy.toml.in), which sets the Linux console's 16-color table via `vt.default_red/grn/blu`. tuigreet then asks for `gray` and gets `surface.raised`. The same substitution themes every VT, including the debug shell and any getty, and it costs one boot-time kernel argument rather than a patch to tuigreet.
452 + **The palette reaches it through the console, not through `--theme`.** tuigreet 0.9.1 parses only the sixteen ANSI names; a hex value is ignored rather than rejected, and the affected element falls back to a default, so `prompt=#8a4530` renders red. This doc claimed an Akari greeter for a while on the strength of a `--theme` that could not deliver one. What delivers it is the console's own 16-color table, applied twice from one source. [`usr/lib/bootc/kargs.d/10-alloy.toml`](../templates/usr/lib/bootc/kargs.d/10-alloy.toml.in) sets it via `vt.default_red/grn/blu` before userspace starts, and [`alloy-vtrgb.service`](../etc/systemd/system/alloy-vtrgb.service) runs `setvtrgb /usr/share/alloy/vtrgb` after, ordered `Before=greetd.service getty.target`. Both render from the theme through skelgen, so the two cannot drift; they used to be maintained by hand and had. tuigreet then asks for `gray` and gets `surface.raised`. The same substitution themes every VT, including the debug shell and any getty, and it costs a boot-time kernel argument plus a oneshot unit rather than a patch to tuigreet.
453 +
454 + **The console has no night table yet, only a night file.** skelgen renders `vtrgb.night` beside `vtrgb` and the image asserts both are present, but nothing reads it: `alloy-vtrgb.service` names the day table outright, and the kargs template has no `variants` directive at all, so the kernel only ever carries Akari Dawn. The per-user mode file cannot decide this, because the unit runs before any user exists and the kernel argument is fixed at build time. Choosing between the two tables needs a system-scoped setting that does not exist. Until it does, boot and login are Dawn whatever the session that follows is.
453 455
454 456 **Which name lands on which slot is the whole design.** tuigreet hands each `--theme` value to ratatui's `Color::from_str`, so the names carry ratatui's numbering: `gray` is slot 7 and `white` is slot 15, not the other way around. Only the login card gets a background (`container`); the clock and the status line are drawn onto the console, whose background is slot 0. Elements outside the card therefore have to name a light tone and elements inside it a dark one, which the string in `config.toml` now does and did not before.
455 457