Thanks to visit codestin.com
Credit goes to lib.rs

#dotfiles #cli

bin+lib dotdot

Cross-platform dotfile manager

1 unstable release

Uses new Rust 2024

0.1.0 Apr 4, 2026

#425 in Configuration

MIT license

45KB
1K SLoC

dotdot - a simple and smal dotfile manager

dotdot is a tool for managing [dotfiles][].

  • Based on Git to keep your config backed up, synced and manage different profiles.
  • Supports os-specific file paths.
  • Switch profiles easily.
  • Easily migrate existing files to use dotdot.

Tour

# Initialize a new dotfile repository
dotdot new (--format <json/tom/yml>) (--d <directory>)

# Clone an existing repository
dotdot get <url> (--d <directory>)

# Add files/directories
dotdot add <file/directory>

# Change to another profile
dotdot profile work (--clean)

# Unlink all files
dotdot unlink

# Link all the files
dotdot link

# Check current state
dotdot doctor

Example dotdot

[common]
"mise" = "~/.config/mise"
# tmux
".tmux.conf" = "~/.tmux.conf"
# nvim
"nvim/init.lua" = "~/.config/nvim/init.lua"
"nvim/config/lazy.lua" = "~/.config/nvim/lua/config/lazy.lua"
# fish
"fish/config.fish" = "~/.config/fish/config.fish"
"fish/functions/git.fish" = "~/.config/fish/functions/git.fish"
"fish/functions/safe.fish" = "~/.config/fish/functions/safe.fish"
"fish/conf.d/fish_frozen_key_bindings.fish" = "~/.config/fish/conf.d/fish_frozen_key_bindings.fish"
"fish/conf.d/fish_frozen_theme.fish" = "~/.config/fish/conf.d/fish_frozen_theme.fish"
"fish/conf.d/omf.fish" = "~/.config/fish/conf.d/omf.fish"
"fish/conf.d/zerobrew.fish" = "~/.config/fish/conf.d/zerobrew.fish"
"omf/bundle" = "~/.config/omf/bundle"
"omf/channel" = "~/.config/omf/channel"
"omf/theme" = "~/.config/omf/theme"

[macos]
"ghostty" = "~/.config/ghostty"

[linux]
"i3/config" = "~/.i3/config"

Dependencies

~5.5–9MB
~162K SLoC