# yadm

> Dotfiles manager built on Git, with per-system alternate and templated files, encryption via GnuPG/OpenSSL/transcrypt/git-crypt, bootstrapping, and hooks.

Stars: 6.5k · Language: Python · License: GPL-3.0 · Categories: Git

- Repository: https://github.com/yadm-dev/yadm
- Website: https://yadm.io/
- Page: https://www.trmn.sh/tools/yadm

## Overview

yadm is a dotfiles manager built on Git. It wraps Git commands so a repository of configuration files can be tracked in place in your home directory, and the full range of Git's features is available. Typical usage mirrors Git: `yadm init`, `yadm clone <url>`, `yadm add <file>`, and `yadm commit`.

For machines that need different configuration, yadm supports system-specific alternate files and templated files. A file can be added with a suffix such as `path/file.cfg##os.Linux` or `path/file.cfg##os.Darwin` so that a different version is used on Linux and macOS.

Private data can be encrypted using GnuPG, OpenSSL, transcrypt, or git-crypt. Paths to protect are listed in `~/.config/yadm/encrypt`, then `yadm encrypt` and `yadm decrypt` handle them. yadm also provides customizable bootstrapping for initializing a new machine, and customizable hooks that run before and after any operation.

It is aimed at developers and system administrators who keep dotfiles in Git and want to sync them across multiple machines or operating systems. Full documentation is on yadm.io.

## Alternatives

- [pre-commit](https://www.trmn.sh/tools/pre-commit.md): Framework for managing and maintaining multi-language pre-commit hooks in Git repositories. (Python, 15.7k stars)
- [git absorb](https://www.trmn.sh/tools/git-absorb.md): Git subcommand that automatically creates fixup! commits from staged changes by finding the commit each hunk belongs to, with optional autosquash rebase. (Rust, 5.8k stars)
- [soft-serve](https://www.trmn.sh/tools/soft-serve.md): Self-hostable Git server with SSH-accessible TUI for command-line repository management and browsing. (Go, 7.3k stars)
- [forgit](https://www.trmn.sh/tools/forgit.md): Interactive Git command wrapper using fzf for fuzzy selection of files, commits, branches, and more (Shell, 5.1k stars)
- [hunk](https://www.trmn.sh/tools/hunk.md): Terminal diff viewer for reviewing Git, GitHub, Jujutsu, and Sapling changesets, with inline agent annotations, split/unified layouts, and watch mode. (TypeScript, 9.7k stars)

---

Canonical: https://www.trmn.sh/tools/yadm
