Dotfiles across machines: a public engine, your private configs on top.
eden keeps one environment on macOS and Arch Linux. This repo holds the
engine and a small shared base: zsh, bash and git config, and macOS
defaults. eden plant links the base into $HOME with GNU Stow.
Your own configs live in branches: private git repos laid out like
$HOME. eden graft merges them in: config files, scripts,
environment files, git identities, MCP servers, Claude Code settings
and Brewfiles. Secrets come from 1Password at runtime and are never
committed.
Gardens group branches by area of life, such as work and personal. A
machine grows the gardens it needs and shows one at a time; eden garden use switches between them.
curl -fsSL https://raw.githubusercontent.com/stefanahman/eden/main/get-eden.sh | bash
eden install # platform packages, GNU Stow among them
eden plant # link the shared base into $HOMEThe script clones eden into ~/eden and puts the eden command in
~/.local/bin, pinned to the latest release. It needs only git. To do
it by hand: git clone https://github.com/stefanahman/eden ~/eden,
then ~/eden/install.sh; install.sh --help lists the other tracks,
a pinned release or main.
Graft the example branch to see each grafter at work:
eden branch add ~/eden/branches/example
eden graft
eden doctorThen make a branch of your own with eden branch new <path>. To group
branches into gardens, run eden init <repo> --garden <name> on each
machine: docs/branches-and-secrets.md.
Day to day, eden grow plants and grafts in one step, and eden update
pulls the latest eden and your branches repo.
- Architecture: layout, layers, grafters, commands
- Branches and secrets: branch layout, secrets, gardens
- Grafters: what each grafter does, and how to write one
- 1Password setup: the CLI, and MCP servers that need secrets
The base is one person's setup, opinionated by design: fork it and make it yours.
See also: owl · spaces · mux · mcp-defer · claude-status · mindoro
MIT