Every seat constant of mesh-sdk is mesh-contracts' generated name; the four whole seats' (BrokerSeat, CheckerSeat, asks.Seat, buscompose.VaultSeat) are marked deprecated for their importers. The package walk of mesh-sdk's own check refuses a string literal naming a defined seat or its subjects, and an exported name given to one, beyond testdata/seat-names.txt, which lists what stands before the move (module names that equal a seat's among them) and only shrinks. No new test function. Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
77 lines
3.1 KiB
Go
77 lines
3.1 KiB
Go
package catalogue
|
|
|
|
import contractseats "git.novox.be/novox/mesh-contracts/go/seats"
|
|
|
|
// EnvironmentSeat and LoginShellSeat are the seats whose holders may place what the modules
|
|
// contributed: the account's environment, and the login shell's code.
|
|
const (
|
|
EnvironmentSeat = contractseats.NodeEnvironment
|
|
LoginShellSeat = contractseats.NodeLoginShell
|
|
// PowerSeat is the seat whose holder places code for the power moments (novox/hq ADR 0211).
|
|
PowerSeat = contractseats.NodePower
|
|
)
|
|
|
|
// Where an environment entry on PATH goes: before the account's existing PATH, or after it.
|
|
const (
|
|
PathAtStart = "start"
|
|
PathAtEnd = "end"
|
|
)
|
|
|
|
// Environment is what one module adds to the account's environment (novox/hq ADR 0203).
|
|
type Environment struct {
|
|
// Variables are names and literal values. A value may name the machine's own facts with
|
|
// ${machine:…}, resolved before anything is written, and nothing else that expands.
|
|
Variables map[string]string `json:"variables,omitempty"`
|
|
// Path is entries on the account's PATH, each at its start or its end, in the order declared.
|
|
Path []PathEntry `json:"path,omitempty"`
|
|
}
|
|
|
|
// PathEntry is one directory a module puts on the account's PATH.
|
|
type PathEntry struct {
|
|
Entry string `json:"entry"`
|
|
At string `json:"at"`
|
|
}
|
|
|
|
// ShellCode is one piece of code a module adds to a shell's startup (novox/hq ADR 0204).
|
|
type ShellCode struct {
|
|
// For is the shell the code is written in.
|
|
For string `json:"for"`
|
|
// Slot is where it runs among the other modules' code: first, normal or last. Named rather
|
|
// than numbered, because every contributor would guess a number and a collision says nothing.
|
|
Slot string `json:"slot"`
|
|
// Code is never interpreted — it is the shell's syntax, and only the shell reads it.
|
|
Code string `json:"code"`
|
|
}
|
|
|
|
// The shells and slots a contribution may name (novox/hq ADR 0204). Closed, so a typo is a refusal
|
|
// at the check rather than code that silently lands in no placeholder.
|
|
var (
|
|
|
|
// sessionFiles are the two files of the graphical session's start that read no directory, so a
|
|
// contribution to them is a slot rather than a drop-in (novox/hq ADR 0208 §4): `xinitrc` is POSIX
|
|
// code the session's start runs, `xresources` X resources merged at its start. Placed by the
|
|
// display server's holder, as a shell's slots are placed by the login shell's.
|
|
sessionFiles = []string{"xinitrc", "xresources"}
|
|
// powerMoments are the moments of a machine's power a module may run code at (novox/hq ADR
|
|
// 0211 §3): POSIX code run as root by node-power's holder, in module order, each piece bounded.
|
|
powerMoments = []string{"after-boot", "before-sleep", "after-wake", "before-shutdown", "on-mains", "on-battery"}
|
|
)
|
|
|
|
// placerOf is the seat whose holder places a contribution for this target (novox/hq ADR 0204,
|
|
// ADR 0208 §4).
|
|
func placerOf(target string) string {
|
|
if oneOf(sessionFiles, target) {
|
|
return DisplayServerSeat
|
|
}
|
|
if oneOf(powerMoments, target) {
|
|
return PowerSeat
|
|
}
|
|
return LoginShellSeat
|
|
}
|
|
|
|
// The two renderings of the environment a holder may place (novox/hq ADR 0203, decision 3).
|
|
const (
|
|
EnvironmentPOSIX = "posix"
|
|
EnvironmentSystemd = "systemd"
|
|
)
|