Getting started
zenops is a declarative system configuration tool. It reads a TOML config
from ~/.config/zenops/config.toml and keeps your shell environment,
aliases, dotfile symlinks, and $PATH in sync with what you’ve declared.
Run zenops apply to make the system match the config; run zenops status
to see what would change without touching anything.
Install
cargo install zenops
zenops supports macOS, Fedora 42, Ubuntu 24.04 LTS, and Arch Linux. A host
outside that matrix fails to start with Unsupported host: … rather than
degrading silently.
Initialise a config
The fastest path, if you already have a zenops config repo:
zenops init git@github.com:you/dotfiles.git --apply
zenops init clones the repo into ~/.config/zenops/, validates the
config.toml, and (with --apply) chains into zenops apply. From a clean
start, write ~/.config/zenops/config.toml by hand — the
configuration reference documents every section.
A minimal config:
[user]
name = "Ada Lovelace"
email = "ada@example.com"
[shell]
type = "bash"
[shell.environment]
EDITOR = "hx"
[shell.alias]
ll = "ls -la"
The apply loop
zenops status # see what would change
zenops apply # make the system match the config
zenops doctor # diagnose the environment
zenops pkg # list configured packages and their detect state
status is read-only. apply writes files, sets up symlinks, and updates
shell init under ~/.config/. Both speak structured output: pass
-o json for NDJSON events suitable for piping into another tool.
What this site documents
- The configuration reference — every section, every field, every enum variant, generated from the schema that ships with each release.
- The command-line interface — every subcommand and flag, generated from the clap definitions.
The same site is served by zenops docs (embedded in the binary, works
offline) and is published to GitHub Pages at https://bjorn-ove.github.io/zenops/.