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.

-d, --dir <path>--from <url>
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
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
tuck scan

Discover dotfiles on your system without syncing. Interactive selection for which files to track.

-q, --quick-c, --category
tuck push / pull

Manual git operations. Push commits to remote or pull latest changes. Use tuck sync for automated workflow.

--force--rebase
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
tuck restore

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

--all--dry-run
tuck undo

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

--list--latest
The Hill of the Alhambra, Granada, Samuel Colman, 1865

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

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