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/tuck

Track 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

1

Install tuck

npm install -g @prnv/tuck

or use yarn, pnpm, or bun

2

Initialize (does everything!)

tuck init

Scans your dotfiles, select what to track, syncs to GitHub

3

Keep in sync (ongoing)

tuck sync

Run 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 init

Set up tuck, scan for dotfiles, select what to track, and sync - all in one. Creates ~/.tuck directory with Git tracking.

--from <url>--bare-r, --remote
tuck sync

Detect changes, find new files, and push to remote. Pulls first if behind, scans for new dotfiles, commits and pushes.

--no-commit--no-push--no-scan-m, --message
tuck status

See what's tracked and what's changed. Shows branch info, sync status, and all tracked files by category.

--short--json
Lake George, Free Study, John Frederick Kensett, c. 1872

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).

-c, --category--symlink-f, --force
tuck remove <files>

Stop tracking dotfiles. Optionally delete from repository or keep original files intact.

--delete--keep-original
tuck list

List all tracked files. Filter by category or output as JSON for scripting.

-c, --category--paths--json
The Rocky Mountains, Lander's Peak, Albert Bierstadt, 1863

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.

--merge--replace--dry-run
tuck restore

Restore dotfiles from ~/.tuck to your system. Useful when setting up on a new machine.

--all--dry-run--symlink
tuck undo

Restore files from Time Machine backup snapshots. Created automatically when using tuck apply.

--list--latest--file <path>
The Hill of the Alhambra, Granada, Samuel Colman, 1865

Security & Config

Manage secrets safely and customize tuck to your workflow. Keep sensitive data out of git while staying productive.

tuck secrets

Manage local secrets for placeholder replacement. Scan files and git history for exposed secrets.

listset <name>scanscan-history
tuck config

Customize tuck behavior - default branch, file strategy, hooks, and more.

get <key>set <key> <value>listedit
tuck diff

Show differences between system files and repository. Useful before syncing.

--staged--stat--category
Wyoming Valley, Pennsylvania, Jasper Francis Cropsey, 1864

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.

~/.zshrc~/.tuck/files/shell/zshrc
~/.gitconfig~/.tuck/files/git/gitconfig
~/.config/nvim~/.tuck/files/editors/nvim

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

Featuretuckchezmoidotbotrcmvcshyadmbare gitGNU 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!?
Distributionnpm, brew, binarySingle binaryPython packageMultiple filesSingle script or packageSingle script-Perl script
Install methodManyManygit submoduleManyManyManyManualMany
Non-root install on bare system!?
Windows support!?!?
Bootstrap requirementsNode.js 18+, GitNonePython, gitBashsh, gitgitgitPerl
Source reposSingleSingleSingleMultipleMultipleSingleSingleSingle
dotfiles are...Files or SymlinksFilesSymlinksSymlinksFilesFilesFilesSymlinks
Config fileOptionalRequiredOptionalNoneOptionalOptionalOptionalNone
Private files
Show differences without applying
Whole file encryptionPlanned
Password manager integration
Machine-to-machine file differencesPlannedTemplatesAlternative filesAlternative filesBranchesAlt files, templates!?
Custom variables in templatesPlanned
Executable files
File creation with initial contents
Externals
Manage partial filesPlanned!?!?
File removal
Directory creation
Run scripts (hooks)
Run once scripts
Machine-to-machine symlink differences!?!?
Shell completion
Archive import!?
Archive export!?
Implementation languageTypeScriptGoPythonBashPOSIX ShellBashCPerl
Supported
!?Partial / Manual effort
PlannedComing soon
Not supported

Built with the open source community

Install tuck

Choose your preferred method

npm
npm install -g @prnv/tuck
brew
brew install prnv/tap/tuck
curl
curl -fsSL https://tuck.sh/install.sh | bash