grith init
Write a default config.toml. It overwrites any file already there, with no backup and no merge.
grith initWrites $HOME/.config/grith/config.toml from the shipping defaults and prints
Created default config at <path>. No flags beyond the
global ones.
🚨It overwrites, unconditionally
There is no backup, no merge and no prompt. If config.toml already exists, grith init
replaces it. To change one value on an existing file, use
grith config set.
Where it writes, and what from
The path is literally $HOME/.config/grith/config.toml. XDG_CONFIG_HOME is not
consulted, and neither is GRITH_CONFIG_DIR - that variable moves the daemon's state
files, not the config.
The defaults come from the first of these that exists: config/default.toml relative to
the working directory, then the same path relative to the repository root, then the copy
compiled into the binary. An installed user always gets the compiled-in copy, so the
result does not depend on where you were standing when you ran it.
init also stamps onboarded = true into [general], so the
setup wizard does not fire over the config you just made.
After running it
The file is around 360 lines, comments included, and covers every section the daemon
reads. Print the effective result with grith config - that output is
the merged struct with the comments stripped, so it is shorter - and see
Configuration overview for which layer wins.
⚠️Do not hand-write a sparse config
Every configuration layer is deep-merged from a whole serialised struct, so a two-line
overlay file quietly contributes Rust defaults for everything it omits - including an
empty supervisor.default_profile, which fails validation and stops the CLI. Start from
grith init and edit, or use grith config set.
See also
grith config- print or change a single key- Configuration overview - layers and precedence