Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Inventory reference

Maison inventory is TOML with schema = 1. The public schema contract lives at schemas/inventory.toml; Python and Nix validators load that same file for supported systems, profile names, feature keys, deploy keys, and defaults.

Maison ships only a neutral starter inventory. Real users, host names, deployment endpoints, and host overrides belong in the consumer repository’s inventory.toml and hosts/ tree. Inventory may contain non-secret topology, but passwords, tokens, SSH private keys, signing private keys, and other secrets remain in the consumer’s fnox-selected provider.

Top-level tables

FieldRequiredContract
schemaYesMust equal 1.
[defaults] userOptionalDefault inventory user key for hosts that omit user.
[users.<key>]YesDeclares managed user identities.
[hosts.<name>]YesDeclares host system, user, profiles, optional features, and deployment fields.

Users

FieldDefaultContract
usernameUser keyPortable lowercase account name; root is not allowed as a managed user.
full_nameNoneRequired non-empty display name.
emailNoneRequired non-empty email string.
githubNoneRequired GitHub username.
allow_nonportablefalseAllows an existing non-portable username only on Darwin hosts.

Hosts

FieldContract
Host table nameOne DNS label.
systemaarch64-darwin, aarch64-linux, or x86_64-linux.
userExisting user key, or [defaults].user.
profilesNon-empty list from base, dev, mac, and linux; duplicates are rejected.

The mac profile is Darwin-only. The linux profile is Linux-only.

Deployment

[hosts.<name>.deploy] accepts only keys declared by the schema.

FieldDefaultContract
enablefalseBoolean; deploy-rs is Linux-only when enabled.
hostnameHost table nameRemote host name.
ssh_usermaison-deployDeployment account; may be root for bootstrap but not the managed user.
user_ssh_userManaged usernameMust equal the managed inventory username.
repo_path/home/<managed-user>/.maisonNormalized descendant of /home/<managed-user>, not the home directory itself.
remote_buildfalseBoolean deploy-rs option.
auto_rollbacktrueBoolean deploy-rs rollback option.
magic_rollbacktrueBoolean deploy-rs rollback option.

Consumer host overrides

Host override directories must correspond to consumer inventory hosts and may contain only system.nix. User-level differences belong in consumer mise configuration or dotfiles, not host override modules. The consumer inventory replaces Maison’s neutral starter inventory; it is not merged with it.

Fixture contract

Inventory fixtures live under tests/fixtures/inventory/ and are consumed by both Python tests and Nix evaluation checks. The parity tests compare normalized deployment defaults, accepted fields, types, profiles, feature keys, deploy keys, and safe repository path rules.