Configuration File Reference
Everything DotR manages is described in a single config.toml at the
repository root, created by dotr init.
Editor support (schema validation)
dotr init writes a taplo #:schema
directive as the first line of the generated config.toml:
#:schema https://raw.githubusercontent.com/uroybd/DotR/main/schema/config.schema.json
This associates the file with a JSON Schema describing every field on this page — giving you inline validation, autocomplete, and hover documentation as you edit, in any editor that uses taplo as its TOML language server:
- VS Code — install the Even Better TOML extension; it picks up the directive automatically.
- Neovim — via nvim-lspconfig’s
built-in
taplopreset:require('lspconfig').taplo.setup {}. - Vim, Emacs, Helix, Sublime — any setup that runs
taploas the TOML language server (viavim-lsp/coc.nvim,lsp-mode, etc.) picks it up the same way, since the directive is parsed by taplo itself, not by a particular editor plugin.
This isn’t published on SchemaStore —
config.toml is too generic a filename for filename-based catalog
matching (Hugo’s own config.toml is SchemaStore’s canonical example of a
pattern they reject for exactly this reason). The inline directive avoids
that ambiguity entirely, since it points at a specific schema explicitly
rather than relying on the filename.
If you have a config.toml from before this was added, add the line
above to the top of the file yourself, or configure your editor’s schema
association for the file manually (e.g. evenBetterToml.schema.associations
in VS Code settings).
Top level
banner = true
symlink = false
prompt_backend = "file"
bitwarden_note = "dotr-secrets"
[variables]
# ...
[prompts]
# ...
[packages.<name>]
# ...
[profiles.<name>]
# ...
| Field | Type | Default | Purpose |
|---|---|---|---|
banner | bool | true | Print the DotR ASCII banner on commands. Set false for quiet output. |
symlink | bool | false | Deploy every directory package as a symlink, without setting symlink = true on each one individually — see Symlinks. |
variables | table | {} | Config-level variables — see Variables. |
prompts | table | {} | Config-level prompts — see Prompts. |
prompt_backend | "file" | "keychain" | "bitwarden" | unset (behaves as "file") | Repo-wide default storage backend for every prompt — see Prompts. A profile’s own prompt_backend overrides this. |
bitwarden_note | string | "dotr-secrets" | Name of the Bitwarden secure note used when prompt_backend = "bitwarden" — see Prompts. Can be overridden per-machine via DOTR_BITWARDEN_NOTE — see machine-local override. |
packages | table | {} | Package definitions, keyed by name — see below. |
profiles | table | { default = {} } | Profile definitions, keyed by name — see below. A default profile always exists. |
[packages.<name>]
[packages.nvim]
src = "dotfiles/nvim"
dest = "~/.config/nvim/"
dependencies = ["fonts"]
pre_actions = ["mkdir -p ~/.local/share/nvim"]
post_actions = ["nvim --headless +PluginInstall +qall"]
skip = false
symlink = false
unfold_symlink = false
clean = true
ignore = ["*.log"]
[packages.nvim.variables]
THEME = "gruvbox"
[packages.nvim.targets]
work = "~/work-config/nvim/"
[packages.nvim.prompts]
NVIM_TOKEN = "Enter your plugin registry token"
| Field | Type | Default | Purpose |
|---|---|---|---|
src | string | — | Path to the file/directory in the repository. Required. |
dest | string | — | Deployment destination. ~ and template variables are expanded. Required. |
dependencies | list of strings | none | Other packages deployed alongside this one — Dependencies. |
variables | table | {} | Package-scoped variables — Variables. |
pre_actions | list of strings | [] | Shell commands run before deploy — Actions. |
post_actions | list of strings | [] | Shell commands run after deploy — Actions. |
targets | table (profile/platform → path) | {} | Per-profile (or per-platform) destination override — Packages. |
skip | bool | false | Excluded from profile-driven (implicit) selection — Packages. |
prompts | table | {} | Package-scoped prompts — Prompts. |
ignore | list of glob patterns | [] | Files excluded from deploy/clean — Ignoring Files. |
symlink | bool | unset (follows the global symlink setting) | Deploy as a symlink instead of a copy. An explicit true/false here always overrides the global flag — Symlinks. |
unfold_symlink | bool | false | Symlink individual files instead of the whole directory, so untracked content can coexist at dest — implied by a non-empty ignore — Symlinks. |
clean | bool | true | Remove stray files at the destination — Clean Mode. |
[profiles.<name>]
[profiles.work]
dependencies = ["nvim", "git"]
prompt_backend = "keychain"
platform = "macos"
[profiles.work.variables]
GIT_EMAIL = "[email protected]"
[profiles.work.prompts]
WORK_TOKEN = "Enter your work VPN token"
| Field | Type | Default | Purpose |
|---|---|---|---|
dependencies | list of strings | [] | Packages deployed when this profile is active and no --packages is given — Profiles. |
variables | table | {} | Profile-scoped variables — Variables. |
prompts | table | {} | Profile-scoped prompts — Prompts. |
prompt_backend | "file" | "keychain" | "bitwarden" | unset (follows the top-level prompt_backend) | Overrides the repo-wide default backend while this profile is active — Prompts. |
bitwarden_note | string | unset (follows the top-level bitwarden_note) | Overrides which Bitwarden secure note this profile’s bitwarden-backed prompts use — Prompts. Can itself be overridden per-machine via DOTR_BITWARDEN_NOTE — see machine-local override. |
platform | string | unset | Shares a package’s targets destination with every other profile that sets the same value — Packages. |
Other files DotR creates
| File | Tracked in git? | Purpose |
|---|---|---|
config.toml | Yes | The configuration described above. |
dotfiles/ | Yes | Package sources — the actual file/directory content for each package. |
.gitignore | Yes | Written by dotr init; excludes .uservariables.toml and deployed. |
.uservariables.toml | No | Answers to prompts — secrets live here. |
deployed/ | No | Staging directory for symlinked packages. |