Repository layout
A dotfix repository is an ordinary Git repository. Nothing in it is generated behind your back, and every file is meant to be read and edited by hand.
dotfix.tomlmachines/ mbp.toml imac.tomlsets/ core/ set.toml files/ gitconfig shell/ 10-path.zsh web/ set.tomldotfix.toml
Section titled “dotfix.toml”Marks the directory as a dotfix repository and records the schema version:
schema_version = 1machines/<name>.toml
Section titled “machines/<name>.toml”One file per machine. This is where a machine’s own decisions live:
sets = ["core", "web"]secret_provider = "1password"vault = "Private"ignore = ["node"]
[vars]email = "you@example.com"
[secrets]smtp_password = "op://Private/mail/password"| Key | Meaning |
|---|---|
sets | Which sets this machine takes |
secret_provider | keychain, 1password, or age |
vault | 1Password vault name; ignored by the other providers |
ignore | Packages never reported as unmanaged on this machine |
[vars] | Template variables, available in files as {{ name }} |
[secrets] | Where a named secret lives, when the provider’s default location is not right |
sets/<name>/set.toml
Section titled “sets/<name>/set.toml”description = "Web toolchain"
[[files]]source = "files/gitconfig"target = "~/.gitconfig"
[packages]brew = ["node", "pnpm"]cask = ["figma"]source is relative to the set directory; target is where the rendered file belongs on the machine.
sets/<name>/shell/
Section titled “sets/<name>/shell/”Every *.zsh file here becomes part of the assembled .zshrc, ordered by filename across all active sets. See Files and shell configuration.
Files outside the repository
Section titled “Files outside the repository”| Path | What it is |
|---|---|
~/.config/dotfix/config.toml | Points this machine at its repository and records its name |
~/Library/LaunchAgents/dev.noix.dotfix.plist | The hourly background check |