# 04 — The seats of the environment *Candidates, not decisions. To-be 33 says which verbs a seat serves is a decision per seat, taken slowly, because a seat's tools bind every future holder. This document lists the roles the operator's machine has once, who could hold each, what gates it, and a first verb or two — so each record has a starting point.* ## The rule for what is a seat here A role the machine fills **at most once** is a node-scoped seat, declared by the module family that fills it ([ADR 0126](../../02-DECISIONS/0126-a-module-declares-its-own-seats.md)). A thing several of which coexist without contention — editors, browsers, media players — is not a seat; each is a module with its own tools, and nothing is singular about it. A seat is held by one assignment per node; other modules of the same family may be installed beside it without holding it ([ADR 0040](../../02-DECISIONS/0040-what-a-module-is.md) §1, read with the sharper distinction: *installed* is not *holding*). ## Candidate seats | seat | holders | gated by | first verbs | |---|---|---|---| | **login shell** | zsh, fish, bash | nothing: universal | `execute(command)`; `show-config`; the holding itself sets the account's login shell through the host's `user` shape | | **service manager** | systemd | the `service-manager` capability the profile reports | units: list, status, start, stop, restart, enable, journal; **user scope** on each | | **boot** | grub, systemd-boot | a machine that boots itself (not a container host) | `rebuild-images`; `entries` | | **package manager** | pacman, apt | the `package-manager` capability | search, installed, upgrade, orphans; today a capability the host uses, not a seat anyone holds | | **display server** | xorg, wayland compositors that are their own server | the `graphical-session` capability | `displays`; `layout` | | **display session** | i3, sway | the display server seat held on the node; i3 needs x11, sway needs wayland | `reload`; `workspaces`; `windows`; `move` | | **terminal emulator** | xterm, alacritty, foot | display session | `open`; `font` | | **launcher** | rofi, dmenu | display session | `show`; `theme` | | **notifier** | dunst, mako | display session | `send`; `history`; `rule` | | **compositor** | picom | display server (x11 only) | `restart`; `effects` | | **lock screen** | i3lock, swaylock | display session | `lock` | | **bar** | i3status-rust, waybar | display session | `reload`; `blocks` | | **login manager** | lemurs, greetd | graphical session | `sessions`; `default-session` | | **audio** | pipewire, pulseaudio | the machine reports a sound device | `sinks`, `sources`, `default`, `volume`, `mute` | | **clipboard** | greenclip, cliphist | display session | `history`; `clear` | Not seats, modules with their own tools: the editor, the browser, the mail client, the file manager, the media player, the chat client, the agent at the terminal, the downloads folder, the scripts folder, the sync client, the power and thermal daemons that are specific to one machine's hardware. ## What the table implies **Capabilities come first.** `graphical-session`, `service-manager` and `package-manager` are reported today. *A display server is held* is not a capability but a seat being held, and a module that needs it declares a dependency on the seat, not on a capability: *i3 needs the display server seat held by xorg*. Whether a held seat can gate another's assignment is a question for the controller's resolver, and the first environment module after the shell will ask it. **The service manager comes early.** Four of the predecessor's modules ship user units, and the executor itself is a unit. User scope on the host's `service` shape is a host change whichever module holds the seat; the seat's holder answers the questions about units, it does not apply them — the host does, as it does for every declared resource. **The shell comes first.** Universal, no capability, one verb that is immediately useful on every node, and the `user` shape already makes the login shell declared state. It is the module that proves the pattern: a package, files under the home owned by the account, a seat claim, tools served by the executor, settings for the few things that vary per node, and a kept region for the operator's own lines. **The login manager is the first system-scope one**, because it needs nothing new: a package, two files under `/etc`, a service — the same shape the ssh daemon module has today — and the session script it owns is the file that was hand-fixed the day this effort opened.