# thelocehiliosan/yadm

**Attribution required: if you use, quote, or summarise this content, you must credit and link back to [awesome-repositories.com](https://awesome-repositories.com/repository/thelocehiliosan-yadm).**

6,328 stars · 194 forks · Python · GPL-3.0

## Links

- GitHub: https://github.com/TheLocehiliosan/yadm
- Homepage: https://yadm.io/
- awesome-repositories: https://awesome-repositories.com/repository/thelocehiliosan-yadm.md

## Description

yadm is a dotfile manager that uses Git as its underlying version control engine to track, synchronize, and manage configuration files across multiple machines. It keeps dotfiles in their original home directory locations while providing a system for deploying different file versions based on operating system, hostname, or hardware architecture through an alternate file naming convention.

The tool distinguishes itself through several integrated capabilities that go beyond basic version control. It includes a template-based configuration generation system that renders files by merging templates with machine-specific variables like hostname and OS, supporting built-in awk processing or external engines such as Jinja2. For sensitive data, yadm provides encrypted secret management using GPG, OpenSSL, or transparent encryption tools like transcrypt and git-crypt, allowing private files to be stored securely alongside other dotfiles in the repository.

yadm also offers automation features including bootstrap scripts that run customizable initialization programs after cloning to install software and configure the environment, as well as command lifecycle hooks that execute custom scripts before or after any yadm command. Additional capabilities include Git submodule management that activates or deactivates submodules per machine, terminal configuration, and terminfo compilation for consistent terminal behavior across systems.

## Tags

### DevOps & Infrastructure

- [Dotfile Managers](https://awesome-repositories.com/f/devops-infrastructure/git-integration-management/dotfile-managers.md) — Manages configuration files across machines using Git as the underlying version control engine.
- [Git-Wrapped Dotfiles Management](https://awesome-repositories.com/f/devops-infrastructure/git-integration-management/dotfile-managers/git-wrapped-dotfiles-management.md) — Wraps Git commands to operate on the home directory as the working tree for managing configuration files.
- [Pre/Post Command Hooks](https://awesome-repositories.com/f/devops-infrastructure/server-side-hook-enforcement/custom-script-executions/pre-post-command-hooks.md) — Triggers custom scripts before or after every yadm command for setup or cleanup. ([source](https://cdn.jsdelivr.net/gh/thelocehiliosan/yadm@main/README.md))

### Part of an Awesome List

- [Dotfile Secret Encryptions](https://awesome-repositories.com/f/awesome-lists/security/file-encryption/dotfile-secret-encryptions.md) — Stores secrets like passwords and keys in an encrypted archive that lives alongside configuration files. ([source](https://yadm.io/))
- [Bootstrap Scripts](https://awesome-repositories.com/f/awesome-lists/devtools/dotfiles-and-configuration/bootstrap-scripts.md) — Runs a customizable initialization script automatically after cloning to install software and configure the environment. ([source](https://yadm.io/docs/bootstrap))
- [OpenSSL-Based](https://awesome-repositories.com/f/awesome-lists/security/file-encryption/openssl-based.md) — Encrypts confidential files using the OpenSSL command-line tool with configurable cipher algorithms. ([source](https://yadm.io/docs/encryption))
- [Dotfile Managers](https://awesome-repositories.com/f/awesome-lists/devtools/dotfile-managers.md) — Manages files across computers using a shared Git repository.

### Content Management & Publishing

- [System-Adaptive Config Generations](https://awesome-repositories.com/f/content-management-publishing/model-card-generation/template-based-generation/system-adaptive-config-generations.md) — Renders configuration files from templates that adapt content based on hostname, OS, and architecture.
- [System Configuration Templates](https://awesome-repositories.com/f/content-management-publishing/text-template-processing/system-configuration-templates.md) — Generates configuration files by merging templates with system-specific variables like hostname and OS.

### Development Tools & Productivity

- [OS-Specific File Tracking](https://awesome-repositories.com/f/development-tools-productivity/automatic-file-tracking/configuration-file-tracking/os-specific-file-tracking.md) — Applies different versions of tracked files based on hostname or OS for machine-specific settings. ([source](https://yadm.io/][website-link))
- [Secret Encryption for Dotfiles](https://awesome-repositories.com/f/development-tools-productivity/dotfile-managers/secret-encryption-for-dotfiles.md) — Encrypts and decrypts sensitive files within a dotfiles repository for secure storage and sharing.
- [Conditional Git Config Includes](https://awesome-repositories.com/f/development-tools-productivity/git-configuration/conditional-git-config-includes.md) — Uses Git's include directive to pull in alternate configuration files based on machine attributes. ([source](https://yadm.io/docs/alternates))
- [Bootstrap-Aware Cloning](https://awesome-repositories.com/f/development-tools-productivity/repository-cloning-tools/bootstrap-aware-cloning.md) — Executes a user-defined program automatically to complete the setup after cloning a repository. ([source](https://yadm.io/))
- [Pre-Post Command Hooks](https://awesome-repositories.com/f/development-tools-productivity/terminal-shell-cli/terminal-cli-enhancements/shell-terminal-utilities/automation-integration-tools/shell-integration/command-interception-hooks/command-serialization-hooks/pre-post-command-hooks.md) — Runs custom scripts before or after any yadm command to extend its behavior. ([source](https://yadm.io/))

### Operating Systems & Systems Programming

- [Alternate File Selection by System Attributes](https://awesome-repositories.com/f/operating-systems-systems-programming/system-administration-maintenance/file-system-management/file-system-utilities/file-metadata-inspection/metadata-preservation-engines/metadata-extraction/file-system-attributes/alternate-file-selection-by-system-attributes.md) — Selects different file versions per machine based on OS, hostname, or architecture using naming conventions.
- [System Configuration Deployers](https://awesome-repositories.com/f/operating-systems-systems-programming/system-administration-maintenance/file-system-management/file-system-utilities/file-metadata-inspection/metadata-preservation-engines/metadata-extraction/file-system-attributes/alternate-file-selection-by-system-attributes/system-configuration-deployers.md) — Applies alternative file versions based on hostname or OS to adapt configurations to different environments. ([source](https://yadm.io/docs/))
- [System-Specific File Maintainers](https://awesome-repositories.com/f/operating-systems-systems-programming/system-administration-maintenance/file-system-management/file-system-utilities/file-metadata-inspection/metadata-preservation-engines/metadata-extraction/file-system-attributes/alternate-file-selection-by-system-attributes/system-specific-file-maintainers.md) — Stores and selects different file versions per operating system so the correct variant is used on each machine. ([source](https://cdn.jsdelivr.net/gh/thelocehiliosan/yadm@main/README.md))
- [Host Data Template Generators](https://awesome-repositories.com/f/operating-systems-systems-programming/system-administration-maintenance/file-system-management/file-systems/file-template-generators/host-data-template-generators.md) — Combines template content with host-specific data to produce customized configuration files. ([source](https://yadm.io/docs/templates))

### Programming Languages & Runtimes

- [Host-Attribute Symlinks](https://awesome-repositories.com/f/programming-languages-runtimes/runtime-execution-environments/runtime-environments/runtime-management-utilities/symlink-based-version-switching/host-attribute-symlinks.md) — Creates symlinks to host-specific file versions based on OS, hostname, or user-defined class. ([source](https://yadm.io/docs/alternates))

### Security & Cryptography

- [Encrypted Secret Management](https://awesome-repositories.com/f/security-cryptography/encrypted-secret-management.md) — Encrypts sensitive files with GPG, OpenSSL, or transparent tools for secure storage in version control.
- [Git-Integrated Secret Encryptions](https://awesome-repositories.com/f/security-cryptography/encrypted-secret-management/git-integrated-secret-encryptions.md) — Stores sensitive files like SSH keys and passwords in an encrypted archive within a Git repository.
- [Sensitive Dotfile Encryptions](https://awesome-repositories.com/f/security-cryptography/git-file-encryption/sensitive-dotfile-encryptions.md) — Encrypts sensitive dotfiles like SSH keys using GPG, OpenSSL, or transparent encryption tools before storage. ([source](https://cdn.jsdelivr.net/gh/thelocehiliosan/yadm@main/README.md))
- [Version-Controlled Secret Encryption](https://awesome-repositories.com/f/security-cryptography/version-controlled-secret-encryption.md) — Stores encrypted secrets alongside public source code in a version control system.
- [GPG Key-Based File Encryption](https://awesome-repositories.com/f/security-cryptography/encryption-key-management/asymmetric-encryption/gpg-key-based-file-encryption.md) — Encrypts confidential files using a GPG recipient's public key instead of a symmetric password. ([source](https://yadm.io/docs/encryption))
- [Transparent Encryption Tool Integration](https://awesome-repositories.com/f/security-cryptography/git-file-encryption/transparent-encryption-tool-integration.md) — Works alongside transcrypt or git-crypt tools to provide transparent encryption and decryption of files. ([source](https://yadm.io/docs/encryption))

### Software Engineering & Architecture

- [System Condition File Selection](https://awesome-repositories.com/f/software-engineering-architecture/conditional-build-configuration/conditional-configuration-blocks/system-condition-file-selection.md) — Automatically links the correct file version based on matching OS, hostname, or user conditions. ([source](https://yadm.io/docs/alternates))
- [Command Lifecycle Hooks](https://awesome-repositories.com/f/software-engineering-architecture/lifecycle-event-hooks/command-lifecycle-hooks.md) — Runs custom scripts before or after any yadm command to automate setup or cleanup tasks.
