tuck
The Modern Dotfiles Manager
https://tuck.sh
tuck
The modern dotfiles manager
Simple, fast, and built in TypeScript. Manage your dotfiles with Git, sync across machines, and never lose your configs again.
npm install -g @prnv/tuckTrack any dotfile instantly
Smart category detection organizes your configs automatically. Let tuck init and tuck sync discover files automatically, or use tuck add for manual control. Files are copied and organized by category.
Learn about tracking →Know your dotfiles status
See your entire configuration state at a glance. Branch info, sync status, and all tracked files organized by category - everything you need to stay in control.
View all commands →Sync with a single command
Automatically detects changes AND new dotfiles on your system. Select what to track interactively, commit, and push - all in one command. Pulls from remote first if behind. No manual git workflows needed.
See how sync works →Apply dotfiles from anywhere
Bootstrap a new machine in seconds. Just provide a GitHub username and tuck will clone their dotfiles, create Time Machine backup snapshots of your existing configs, and apply with smart merging that preserves your local customizations.
Learn about apply →Restore when you need it
Symlink or copy, your choice. Automatic backups before every operation mean you can always restore. SSH and GPG permissions are handled correctly.
Explore restore options →Quick Start
Up and running in under a minute
Install tuck
npm install -g @prnv/tuckor use yarn, pnpm, or bun
Initialize (does everything!)
tuck initScans your dotfiles, select what to track, syncs to GitHub
Keep in sync (ongoing)
tuck syncRun anytime - detects changes, finds new files, pushes updates
Core Commands
What 99% of users need. Initialize, sync, and check status - the essential workflow for managing your dotfiles.
tuck initSet up tuck, scan for dotfiles, select what to track, and sync - all in one. Creates ~/.tuck directory with Git tracking.
tuck syncDetect changes, find new files, and push to remote. Pulls first if behind, scans for new dotfiles, commits and pushes.
tuck statusSee what's tracked and what's changed. Shows branch info, sync status, and all tracked files by category.
Backup Commands
Fine-grained control for creating and managing your dotfile backups. Add files, discover new ones, and sync manually.
tuck add <files>Manually track specific files. Copies files to ~/.tuck organized by category (shell, git, editors, etc).
tuck remove <files>Stop tracking dotfiles. Optionally delete from repository or keep original files intact.
tuck listList all tracked files. Filter by category or output as JSON for scripting.
Restore Commands
Apply dotfiles from others, restore your own, or undo changes. Everything you need to use your backups across machines.
tuck apply <user>Apply dotfiles from any GitHub user's repository. Smart merging preserves your local customizations.
tuck restoreRestore dotfiles from ~/.tuck to your system. Useful when setting up on a new machine.
tuck undoRestore files from Time Machine backup snapshots. Created automatically when using tuck apply.
Security & Config
Manage secrets safely and customize tuck to your workflow. Keep sensitive data out of git while staying productive.
tuck secretsManage local secrets for placeholder replacement. Scan files and git history for exposed secrets.
tuck configCustomize tuck behavior - default branch, file strategy, hooks, and more.
tuck diffShow differences between system files and repository. Useful before syncing.
How it works
tuck stores your dotfiles in ~/.tuck, organized by category. When you run tuck init, it scans your system and lets you choose which files to track. Run tuck sync anytime to detect changes and sync to your remote.
Run tuck sync to detect changes and push to remote. On a new machine: tuck init --from <repo-url> or tuck apply username
How tuck compares
Feature comparison with other dotfile managers
| Feature | tuck | chezmoi | dotbot | rcm | vcsh | yadm | bare git | GNU Stow |
|---|---|---|---|---|---|---|---|---|
| Automatic dotfile discovery | ||||||||
| Secret scanning | ||||||||
| Git history secret scanning | ||||||||
| Time Machine backups | ||||||||
| Smart merge with preserve markers | ||||||||
| Auto-categorization | ||||||||
| GitHub repo auto-setup | ||||||||
| Interactive CLI prompts | ||||||||
| Distribution | npm, brew, binary | Single binary | Python package | Multiple files | Single script or package | Single script | - | Perl script |
| Install method | Many | Many | git submodule | Many | Many | Many | Manual | Many |
| Non-root install on bare system | ||||||||
| Windows support | ||||||||
| Bootstrap requirements | Node.js 18+, Git | None | Python, git | Bash | sh, git | git | git | Perl |
| Source repos | Single | Single | Single | Multiple | Multiple | Single | Single | Single |
| dotfiles are... | Files or Symlinks | Files | Symlinks | Symlinks | Files | Files | Files | Symlinks |
| Config file | Optional | Required | Optional | None | Optional | Optional | Optional | None |
| Private files | ||||||||
| Show differences without applying | ||||||||
| Whole file encryption | ||||||||
| Password manager integration | ||||||||
| Machine-to-machine file differences | Templates | Alternative files | Alternative files | Branches | Alt files, templates | |||
| Custom variables in templates | ||||||||
| Executable files | ||||||||
| File creation with initial contents | ||||||||
| Externals | ||||||||
| Manage partial files | ||||||||
| File removal | ||||||||
| Directory creation | ||||||||
| Run scripts (hooks) | ||||||||
| Run once scripts | ||||||||
| Machine-to-machine symlink differences | ||||||||
| Shell completion | ||||||||
| Archive import | ||||||||
| Archive export | ||||||||
| Implementation language | TypeScript | Go | Python | Bash | POSIX Shell | Bash | C | Perl |
Built with the open source community
Install tuck
Choose your preferred method
npm install -g @prnv/tuckbrew install prnv/tap/tuckcurl -fsSL https://tuck.sh/install.sh | bash