| Crates.io | dotr-dear |
| lib.rs | dotr-dear |
| version | 1.0.0 |
| created_at | 2025-11-25 13:04:18.495742+00 |
| updated_at | 2026-01-16 08:13:52.462933+00 |
| description | A dotfiles manager as dear as a daughter. |
| homepage | |
| repository | https://github.com/uroybd/dotr |
| max_upload_size | |
| id | 1949688 |
| size | 564,386 |
A dotfiles manager that is as dear as a daughter.
For detailed documentation, guides, and examples, visit the DotR Wiki.
--symlink flag to deploy as symlinks instead of copiesdotr packages removedotr profiles adddotr profiles removedotr profiles list--profile flag on deploy, import, and update commandsconfig.tomluservariables.toml file to save secrets you don't want to share in VCS.uservariables.toml{{ variable }} for variable substitution{% if condition %} for conditional logic{# comment #} for template comments.dotrbak) instead of directory backupsclean = false in config--clean=false to skip cleaning for a single operationdotr init
dotr import ~/.bashrc
dotr import ~/.config/nvim/
# Import with symlink (deploy as symlink instead of copy)
dotr import ~/.config/nvim/ --symlink
# Import for a specific profile
dotr import ~/.ssh/config --profile work
# Deploy all packages
dotr deploy
# Deploy with a specific profile
dotr deploy --profile work
# Deploy specific packages
dotr deploy --packages nvim,tmux
# Dry run to preview what would be deployed without making changes
dotr deploy --dry-run
# See what would change if you deployed
dotr diff
# Diff specific packages
dotr diff --packages nvim,bashrc
# Diff with a profile
dotr diff --profile work
dotr update
# Update with a profile
dotr update --profile work
# Dry run to preview what would be updated without making changes
dotr update --dry-run
# List all packages
dotr packages list
# List packages with verbose details
dotr packages list --verbose
# Remove a package
dotr packages remove nvim
# Remove package and its orphaned dependencies
dotr packages remove nvim --remove-orphans
# List all profiles
dotr profiles list
# List profiles with verbose details
dotr profiles list --verbose
# Add a new profile
dotr profiles add laptop
# Remove a profile
dotr profiles remove work
# Remove profile and orphaned packages
dotr profiles remove work --remove-orphans
[variables]
EDITOR = "nvim"
[variables.git]
name = "Your Name"
email = "you@example.com"
Use in templates: {{ EDITOR }} and {{ git.email }}
๐ Learn more about Variables
# config file with Tera templates
[user]
name = "{{ git.name }}"
email = "{{ git.email }}"
{% if HOME %}
[paths]
data = "{{ HOME }}/Data"
{% endif %}
๐ Learn more about Templating
[packages.nvim]
src = "dotfiles/nvim"
dest = "~/.config/nvim/"
pre_actions = ["mkdir -p ~/.local/share/nvim"]
post_actions = ["nvim --headless +PluginInstall +qall"]
Actions support variable interpolation and run before/after deployment.
# Config-level (global)
[prompts]
GIT_EMAIL = "Enter your git email"
# Package-level
[packages.aws]
[packages.aws.prompts]
AWS_ACCESS_KEY = "Enter AWS access key"
# Profile-level
[profiles.work]
[profiles.work.prompts]
WORK_EMAIL = "Enter work email"
Prompts are asked once on first deploy, saved to .uservariables.toml (gitignored).
[profiles.work]
dependencies = ["nvim", "git"]
[profiles.work.variables]
GIT_EMAIL = "work@company.com"
[profiles.home]
dependencies = ["nvim", "gaming"]
[profiles.home.variables]
GIT_EMAIL = "personal@email.com"
Deploy with: dotr deploy --profile work
๐ Learn more about Profiles
Import and deploy dotfiles as symlinks instead of copies for live-editing workflows:
# Import with symlink
dotr import ~/.config/nvim/ --symlink
# Files are deployed to a 'deployed' directory and symlinked to their destinations
# Edit files at ~/.config/nvim/ and changes immediately reflect in the repository
How it works:
dotfiles/nvim/ (your repository)deployed/nvim/~/.config/nvim/ โ deployed/nvim/deployed/, ready to update back to dotfiles/Configuration:
[packages.nvim]
src = "dotfiles/nvim"
dest = "~/.config/nvim/"
symlink = true # Enable symlink deployment
๐ Learn more about Symlinks
# Preview changes before deployment
dotr diff
# Diff specific packages
dotr diff --packages bashrc,nvim
# Diff with profile
dotr diff --profile work
Shows line-by-line differences with color coding (+ green for additions, - red for deletions).
# Preview deploy without making any changes
dotr deploy --dry-run
# Preview update without making any changes
dotr update --dry-run
# Combine with other options
dotr deploy --dry-run --profile work --packages nvim,bashrc
# Preview deploy without cleaning extra files
dotr deploy --dry-run --clean=false
Dry run mode shows what would happen during deploy or update operations without:
By default, DotR cleans up destination directories by removing files that don't exist in your dotfiles repository. This keeps your configurations synchronized.
# Deploy with cleaning (default behavior)
dotr deploy
# Deploy without cleaning extra files
dotr deploy --clean=false
# Update with cleaning (default)
dotr update
# Update without cleaning
dotr update --clean=false
Package-level configuration:
[packages.nvim]
src = "dotfiles/nvim"
dest = "~/.config/nvim/"
clean = false # Disable cleaning for this package
How it works:
.dotrbak extension) are never removed--clean flag overrides package-level settings--clean=false to keep extra files in destinationSupports both Apple Silicon and Intel Macs.
brew tap uroybd/tap
brew install dotr
cargo install dotr-dear
cargo install --git https://github.com/uroybd/DotR
Download the latest release for your platform from the releases page:
Apple Silicon (M1/M2/M3): dotr-aarch64-apple-darwin.tar.gz
Intel Mac: dotr-x86_64-apple-darwin.tar.gz
Linux (x86_64): dotr-x86_64-unknown-linux-gnu.tar.gz
Linux (aarch64): dotr-aarch64-unknown-linux-gnu.tar.gz
Linux Muslc (x86_64): dotr-x86_64-unknown-linux-musl.tar.gz
Linux Muslc (aarch64): dotr-aarch64-unknown-linux-musl.tar.gz
Extract and move the binary to your PATH:
tar xzf dotr-*.tar.gz
sudo mv dotr /usr/local/bin/
Usage: dotr [OPTIONS] [COMMAND]
Commands:
init Initialize dotfiles repository.
import Import dotfile and update configuration.
deploy Deploy dotfiles from repository.
update Update dotfiles from deployed versions.
diff Show differences between dotfiles.
print-vars Print all user variables.
packages Manage packages (list, import, deploy, update, remove, diff).
profiles Manage profiles (list, add, remove).
help Print this message or the help of the given subcommand(s)
Options:
-w, --working-dir <WORKING_DIR>
-h, --help Print help
-V, --version Print version
# List packages
dotr packages list [OPTIONS]
--verbose # Show detailed package information
# Remove packages
dotr packages remove <PACKAGE>... [OPTIONS]
--force # Force removal without confirmation
--remove-orphans # Remove orphaned dependencies
--dry-run # Preview what would be removed
# List profiles
dotr profiles list [OPTIONS]
--verbose # Show detailed profile information
# Add a profile
dotr profiles add <PROFILE_NAME>
# Remove a profile
dotr profiles remove <PROFILE_NAME> [OPTIONS]
--remove-orphans # Remove packages only used by this profile
--dry-run # Preview what would be removed