mesh/delivery-group group feat/sdk1 rejected: composed together: the checker's verdict at the members' heads (428d048dd50a): unit: git.novox.be/novox/mesh-sdk/…
mesh/delivery closed: a newer head of the same pull request
mesh/check failed: unit: git.novox.be/novox/mesh-sdk/go/process.TestStatePutWritesAKeyWhole: a Put through a short blackout: 0, mesh-mail's state send…
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
75 lines
3.0 KiB
Go
75 lines
3.0 KiB
Go
package catalogue
|
|
|
|
// 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 = "node-environment"
|
|
LoginShellSeat = "node-login-shell"
|
|
// PowerSeat is the seat whose holder places code for the power moments (novox/hq ADR 0211).
|
|
PowerSeat = "node-power"
|
|
)
|
|
|
|
// 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"
|
|
)
|