ditto-dots-0.1.0 is not a library.
A Dotfile manager CLI built as a Rust learning project with Claude Code as a coding partner (using the learning-opportunities skill).
All core logic was hand-typed. Tests and documentation were generated.
Extends upon GNU Stow functionality with support for hook setup. And has pretty spinners.
Install
Usage
Set up a new machine:
Link and unlink:
Bring an existing file under management:
See what's going on:
Config
A ditto.toml at the root of your dotfiles repo. That's the whole system.
[]
= ".ditto-backup"
[]
= [
{ = "shell/zshrc", = "~/.zshrc" },
]
[]
= "source ~/.zshrc"
[]
= [
{ = "ssh/", = "~/.ssh/" },
]
[]
= "chmod 700 ~/.ssh && chmod 600 ~/.ssh/id_*"
[]
= ["macos"]
= [
{ = "iterm2/com.googlecode.iterm2.plist", = "~/Library/Preferences/com.googlecode.iterm2.plist" },
]
Packages group related files. Each can have platform filters and pre/post hooks for both linking and unlinking.
Why ditto?
| Feature | How it works |
|---|---|
| Package-based | Group files logically -- shell, git, ssh -- link what you need |
| Hooks | Run commands after linking (reload shell, fix permissions) |
| Automatic backup | Conflicts are backed up before overwriting, restored on unlink |
| Dry run | --dry-run on any command to preview before committing |
| No templating | Same config everywhere -- just symlinks, done right |
Global Flags
--dry-run Preview without making changes
--verbose Show detailed output
--no-color Disable colored output
--config <PATH> Use a specific ditto.toml
Status
Ditto is a work in progress. The project structure and core utilities are in place; command implementations are actively being built. macOS and Linux only.