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