Opened after the zsh module's rollout (to-be 38 WP5) was stopped: every machine carries the same predecessor-written startup file, the module's block would duplicate it and drop lines, nothing installs the prompt, and execute never reads .zshrc. Weighs how modules contribute environment and shell code, where the operator's own lines go, ordering, and what a contribution is addressed to.
3.8 KiB
status, initiated, touches, became
| status | initiated | touches | became | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| active | 2026-10-04 |
|
025 — How a module plugs into the operator's shell
What is investigated
The shell module writes the mesh's part of the account's shell startup file. But the shell is not the
only module that needs a line there. A prompt theme loads itself from it. A language version manager
sets a variable and sources its loader. A toolchain puts its directory on PATH. A desktop module
names the browser. Today all of these sit in one hand-written file, and the shell module as written
carries some of them in its own block and loads others only "if a module placed them". Nothing says
how they get placed.
This effort asks four things:
- How a module contributes to the shell: what it declares, who composes it, and in what order it lands.
- Where the environment lives. Variables and
PATHentries are facts about the account, not lines of one shell's syntax. They should reach every shell (interactive or not), the login shell'sexecuteverb, and programs a graphical session starts. - Where the operator's own lines go, so that assigning the shell module loses nothing the machine does today.
- Which part of a file the mesh owns. ADR 0174 calls the kept region the operator's; the host and to-be 38 implement the inverse (the mesh owns a marked block, and everything outside it is the operator's). The record this becomes says which.
Why
Rolling out the shell module (to-be 38 WP5) was stopped on 2026-10-04 after a review of what assigning it would do. Measured in 01:
- Every machine carries the same predecessor-written startup file, so the module's block would be appended after its own older copy and everything would run twice.
- The block drops lines the machines rely on today.
- Nothing installs the prompt theme or the plugins the block loads.
- The
executeverb runs a non-interactive login shell, which never reads the file the block is written into.
The operator's direction: other modules must be able to plug themselves into the shell; the prompt
becomes its own module; assigning the shell module must lose no functionality; and the environment,
PATH above all, needs an answer of its own.
What it touches
- The manifest. A contribution to the shell is either a new use of the existing
contributes/receivespair or a new gathered field likejails(to-be 31). - The controller's composition, if the controller assembles the text.
- The
login-shellseat (ADR 0176): what a holder must do with what is contributed to it, and whether a module or the mesh declares the seat. Research 023 asks the related question of a seat naming the files its holder owns. - ADR 0174's wording of the kept region, and ADR 0182's classification of the paths under a home.
- The zsh module, and the modules this makes possible: the prompt, a version manager, a toolchain.
Documents
- 01 — What the shell file holds today: evidence.
- 02 — How a module plugs in: the options and the starting position.