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

Task reference

All commands operate on the selected consumer repository. Set MAISON_CONSUMER_ROOT or run from the consumer checkout. The consumer must own flake.nix, flake.lock, and inventory.toml; Maison’s checkout is never an implicit configuration root.

Aggregate commands

TaskBehavior
doctorDiagnose the consumer’s two ownership layers without mutation
consumer validate [--consumer PATH]Validate consumer contracts without activation or provider access
plan [--host HOST] [--force-dotfiles]Preview consumer system state, then render the read-only user plan
apply [--host HOST] [--force-dotfiles]Apply consumer Nix state, then converge consumer user state
update [INPUT] [--check]Update only the consumer flake.lock; optionally validate
self:updateTransactionally upgrade Maison from the consumer lock
deploy HOSTDeploy the consumer’s Linux system profile and user state
rollbackRoll back only the active Nix system generation
bootstrap [--consumer PATH]Verify Maison runtimes, select a consumer, and converge both layers
checkValidate Maison framework data, scripts, tests, and Nix outputs

System commands

TaskBehavior
system:planBuild the consumer system closure without activation
system:applyActivate the consumer’s Darwin or system-manager output
system:deployDeploy the consumer’s Linux system profile through deploy-rs
system:historyList canonical system-profile generations
system:rollbackSelect and activate the previous generation
system:clean [AGE]Remove old system generations and collect the store

User commands

TaskBehavior
user:plan [--force-dotfiles]Render user convergence without invoking mutating commands
user:apply [--force-dotfiles]Apply consumer dotfiles, packages, tools, apps, and preferences
user:restore-dotfiles BACKUP --forceRestore a manifest-backed Maison dotfile backup
user:statusReport consumer user-environment drift
user:updateUpgrade consumer mise-managed tools
package:updateUpgrade consumer Homebrew formulae
app:updateUpgrade consumer casks and Mac App Store apps

Consumer configuration commands

TaskBehavior
host:addAdd a validated host to the consumer inventory and optional override
host:list / host:validateRead or validate the consumer inventory
tool:add / tool:removeTransactionally edit and focused-commit consumer tool config/lock
package:add / package:removeTransactionally edit and focused-commit consumer package config
package:searchSearch package sources without repository mutation
app:add / app:removeTransactionally edit and focused-commit consumer cask config
docs:build / docs:serveBuild or serve the Maison contributor book

Authoring commands require a Git checkout of the consumer and reject dirty mutation targets. plan, user:status, list, validate, and search remain read-only. Deployed snapshots without .git reject source mutations and point back to the consumer authoring checkout.

consumer validate is read-only and runs the Maison-owned consumer contract. It checks the consumer flake and lock, inventory, supported systems, package and dotfile declarations, fnox references, documentation links, and raw credential/private-key boundaries. It performs check-only Nix evaluation and never invokes fnox or activates a system.

user:plan and user:apply share one command plan. Plan renders dry-run variants; apply performs trust, package, dotfile, lock-link, and finalization steps. Forced dotfile replacement creates an exact manifest-backed backup before mutation.

Hidden nix:* tasks are compatibility aliases for system:* tasks.

Verified bootstrap artifacts

Bootstrap metadata is checked in at bootstrap/artifacts.toml. Maison verifies each selected mise or Lix artifact before installation. Runtime code comes from Maison; configuration and lock mutations are always rooted in the consumer.

When remote user convergence fails, deployment restores the prior consumer revision before restricted recovery. Recovery repairs reversible user state without package/application convergence and writes a mode-0600 diagnostic under ~/.local/state/maison/recovery/.