yadm
Git-based dotfiles manager
TLDR
Initialize a new dotfiles repository
SYNOPSIS
yadm command [options]
DESCRIPTION
yadm (Yet Another Dotfiles Manager) manages dotfiles using Git while keeping them in their natural locations in $HOME. Any Git command works with yadm, making it easy to learn for Git users.
The repository is stored in ~/.local/share/yadm/repo.git with $HOME as the working tree. Files stay in place; yadm tracks them without requiring symlinks or copying.
Key features include alternate files (system-specific configurations based on hostname, OS, or user), templates using Jinja2 or envtpl for dynamic configuration, and encryption for sensitive data using GPG, OpenSSL, transcrypt, or git-crypt.
The bootstrap command runs ~/.config/yadm/bootstrap after cloning, enabling automated setup of new machines.
COMMANDS
init
Initialize a new dotfiles repositoryclone url
Clone a remote dotfiles repositoryadd file...
Add files to the repositorycommit
Record changes to the repositorypush
Upload changes to remote repositorypull
Download changes from remote repositorylist [-a]
List managed files (-a for all)encrypt
Encrypt files matching patterns in ~/.config/yadm/encryptdecrypt
Decrypt files from the encrypted archivealt
Create symbolic links and process templates for alternate filesenter
Run a sub-shell with Git variables setconfig
Manage yadm configuration (works like git config)bootstrap
Run the bootstrap script if it exists
CAVEATS
yadm requires Git; encryption features require GPG or another supported tool. The working tree is $HOME by default, so be careful with destructive Git operations. Alternate files and templates may need manual yadm alt after changes.
HISTORY
yadm was created by Tim Byrne as a simple dotfiles manager that leverages Git directly without complex abstractions. First released around 2015, it gained popularity for its philosophy that managing dotfiles should be as simple as using Git, while adding features like encryption and system-specific alternates.
