Package-oriented dotfile manager with planning, diff review, and two-way sync.
dotman is inspired by tools like pacman and yay, especially in its CLI ergonomics, selection flows, and review-oriented workflow.
Modern development workflows are encoded in dotfiles, editor state, helper scripts, and selected system configuration.
dotman is for deploying that workflow reproducibly across machines by treating it as a packageable, reviewable, and synchronizable configuration graph.
Intuition over configuration.
First principles over convention.
Declarative over imperative.
dotman follows XDG-style paths and UNIX-like filesystem and process conventions.
It is currently intended for UNIX-like systems.
uvfor installationgitfor diff review
uv tool install git+https://github.com/ewgdg/dotman.gitfzffor long interactive selector listslessfor paged diff review fallbacknvimfor review and reconciliation flows; setVISUAL=nvimorEDITOR=nvimto use itsudofor managing protected system paths
dotman doctorThis checks manager config, repo paths, tracked package state files, and external dependencies such as git, with optional dependency hints for tools like fzf.
The install command above installs the CLI. Clone the repo separately if you want to use the bundled example repo under examples/repo/:
git clone https://github.com/ewgdg/dotman.git ~/projects/dotman
mkdir -p ~/.config/dotman
cat > ~/.config/dotman/config.toml <<'EOF'
[repos.example]
path = "~/projects/dotman/examples/repo"
order = 10
EOFTrack and push one simple package from the example repo. This writes the example note to ~/.config/dotman-example/note.txt:
dotman track example:note@basic
dotman push --dry-run
dotman pushFor a larger real-world example repo, see ewgdg/dotfiles.
- CLI behavior:
docs/cli.md - User config:
docs/config.md - Repository layout:
docs/repository.md - Template targets:
docs/templates.md
Group dotfiles and system files into reusable packages.
Persist or remove tracked packages so repeated push and pull runs can reuse the same selections.
Example:
dotman track example:git@basic
dotman untrack example:git@basicUse add to propose or extend package target definitions from live paths.
Use edit to open repo-side package or target sources in your editor.
Example:
dotman add ~/.gitconfig example:git
dotman edit package example:git
dotman edit target example:git.gitconfigpushapplies managed changes from the repo to the live systempullupdates the repo from the live system
Example:
dotman push
dotman pullSupport partial selector matching, interactive disambiguation, combined selection flows, and diff review before execution, with a workflow inspired by yay for a more familiar terminal experience.
Create snapshots before real push runs and restore managed paths with rollback.
Example:
dotman rollback latestSupport custom render and capture functions per target.
Support editor-backed reconciliation during pull flows.
Manage user dotfiles and system files alike; dotman escalates privileges automatically when needed.