TL;DR — Quick Summary
comtrya manages dotfiles and system configuration declaratively. Define your setup in YAML manifests — packages, symlinks, files, commands — and apply everywhere.
comtrya sets up your machine declaratively. Dotfiles, packages, symlinks, commands — all in YAML, applied everywhere.
Installation
# Cargo
cargo install comtrya
Manifest Example
# comtrya/shell.yaml
actions:
- action: package.install
name: Install shell tools
packages:
- zsh
- starship
- zoxide
- action: file.link
name: Symlink zshrc
source: dotfiles/.zshrc
target: "{{home_dir}}/.zshrc"
- action: file.link
name: Symlink starship config
source: dotfiles/starship.toml
target: "{{home_dir}}/.config/starship.toml"
- action: command.run
name: Set default shell
command: chsh -s $(which zsh)
only_if:
- "test $(basename $SHELL) != 'zsh'"
Usage
# Apply all manifests
comtrya apply
# Dry run (see what would change)
comtrya status
# Apply specific manifest
comtrya apply --manifest shell
# From a Git repository
comtrya apply --manifest-directory https://github.com/user/dotfiles
Summary
- comtrya manages system config declaratively in YAML manifests
- Packages, symlinks, file copies, directories, Git repos, commands
- Platform-specific blocks for Linux/macOS/Windows
- Template variables (home_dir, etc.)
- Written in Rust — fast, cross-platform, idempotent