dotling v0.3.1 has been rebuilt from scratch. It moves your config files into a central git repository and replaces them with symlinks (or copies). It handles the tedious parts — path mapping, conflict detection, encryption, and multi-OS support — so you can set up a new machine in seconds.
Features
- Symlink & copy deployment — choose per file, switch anytime
- Automatic path mapping —
~/.config/nvim→config/nvim,~/.zshrc→shell/zshrc - Multi-OS support — tag entries as
linux,macos, orwindows; skip irrelevant files automatically - Secure Password Vault — encrypt sensitive files (API keys, .env) using an Argon2id + ChaCha20-Poly1305 Vault
- Portable Secrets — export your vault to easily unlock secrets on a new machine
- Native Git integration — dotling manages the symlinks, you manage the repo with native
gitcommands - Health checks —
dotling doctoraudits broken links, orphaned entries, and repo issues - Conflict-safe — refuses to overwrite unmanaged files without explicit confirmation
Installation
From crates.io (recommended)
Prebuilt binaries
Download a prebuilt binary from the latest GitHub release for your platform:
| Platform | Binary |
|---|---|
| Linux (x86_64, glibc) | dotling-x86_64-linux.tar.gz |
| Linux (x86_64, musl) | dotling-x86_64-linux-musl.tar.gz |
| Linux (aarch64) | dotling-aarch64-linux.tar.gz |
| macOS (Intel) | dotling-x86_64-macos.tar.gz |
| macOS (Apple Silicon) | dotling-aarch64-macos.tar.gz |
| Windows (x86_64) | dotling-x86_64-windows.zip |
| Windows (ARM64) | dotling-aarch64-windows.zip |
# Example: Linux x86_64
|
Nix
# or add to your flake inputs
Quick Start
# Initialize a new dotfiles repo
# Or clone an existing one
# Track files
# Deploy the symlinks
# Since dotling doesn't wrap git, you can commit and push directly!
Commands
| Command | Description |
|---|---|
dotling init <path|url> |
Initialize a new repo or clone an existing one |
dotling add <paths> |
Move files into the repo and deploy a symlink back |
dotling remove <entries> |
Undeploy and remove from tracking |
dotling deploy |
Deploy all tracked entries (create symlinks or copies) |
dotling status |
Show deployment status of all tracked entries |
dotling encrypt <paths> |
Encrypt tracked entries using your Vault |
dotling decrypt <paths> |
Decrypt encrypted entries back to plaintext |
dotling vault <action> |
Manage your password-protected encryption Vault |
dotling doctor |
Audit repository health and report issues |
Key Flags
| Command | Flag | Description |
|---|---|---|
all |
-v, --verbose |
Show hints and additional details |
add |
--copy |
Deploy as a copy instead of a symlink |
add |
--encrypt |
Encrypt the file(s) using the vault password |
add |
--os <platform> |
Target OS: all, linux, macos, windows |
remove |
--purge |
Also delete the source files from the repo |
deploy |
--force |
Overwrite conflicting files |
deploy |
--dry-run |
Show what would change without modifying |
status |
--diff |
Show inline diffs for modified copy entries |
How It Works
dotling moves your config files into a central git repository and replaces them with symlinks (or copies). Each tracked file is recorded in a dotling.toml config at the repo root.
Symlinks (default): the deployed file points to the repo — edits are instantly reflected in your repo.
Copies (--copy): the deployed file is a standalone copy. Useful for apps that don't support symlinks.
Path Mapping
Files are organized into categories automatically:
| Home path | Repo path |
|---|---|
~/.config/nvim/init.lua |
config/nvim/init.lua |
~/.zshrc |
shell/zshrc |
~/.gitconfig |
git/gitconfig |
~/.vimrc |
vim/vimrc |
~/.tmux.conf |
tmux/tmux.conf |
~/.somerc |
home/somerc |
Configuration Format
Tracked entries are stored in dotling.toml at the repo root:
[[]]
= "shell/zshrc"
= "~/.zshrc"
[[]]
= "config/nvim/init.lua"
= "~/.config/nvim/init.lua"
= "copy"
[[]]
= "shell/bashrc"
= "~/.bashrc"
= "linux"
Multi-OS Support
Tag entries with --os to restrict them to a specific platform:
When deploying, dotling automatically skips entries that don't match the current OS. Entries tagged all (the default) deploy everywhere.
Encryption Vault
dotling v0.3.1 includes a built-in portable encryption Vault protected by Argon2id and ChaCha20-Poly1305. This lets you safely commit API keys, .env files, or ssh configs to your public dotfiles repo.
-
Initialize your Vault:
You'll be prompted for a password. This creates a secure identity in
~/.dotling/vault/. -
Add a file with encryption:
dotling will read your local file, encrypt it, store the ciphertext (
config.enc) in your git repo, and deploy the decrypted file locally with secure permissions. -
Migrating to a new machine: Export your vault bundle from your old machine:
Then import it on the new machine:
Contributing
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch (
git checkout -b feat/my-feature) - Commit your changes (
git commit -m 'feat: add my feature') - Push to the branch (
git push origin feat/my-feature) - Open a Pull Request
Development
# Clone and build
# Run tests
# Lint
License
Licensed under either of:
at your option.