ToolTamer – Sync System Configuration and Packages Across Machines

info

date: 2026-02-27 20:00:00

tags:

logged in

ADMIN


ToolTamer – Sync System Configuration and Packages Across Machines

ToolTamer – Sync System Configuration and Packages Across Machines

Anyone working on multiple machines knows the drill: your .zshrc on the laptop differs from the desktop, one machine is missing ripgrep, another still has half a dozen tools you tried once and never cleaned up. Ideally across macOS and Linux.

I tried several approaches before building ToolTamer.

Why not Nix, chezmoi & friends?

  • Nix / Home Manager: Sounds perfect in theory β€” declarative system management. In practice: slow, hard to debug, and when combined with nix-darwin, more or less broken after every macOS update. Better on pure Linux, but the maintenance overhead is significant.
  • Dotfile managers (chezmoi, stow, yadm): They handle config files only. But what good is a synced .zshrc that references tools that aren't installed on the machine?
  • Ansible: Overkill for a personal workstation. I don't want to maintain YAML playbooks just to install fzf.

What I needed: a tool that handles both β€” packages and files, across macOS and Linux, without bringing its own package manager.

What ToolTamer does

ToolTamer is a Bash tool that leverages your existing package manager β€” Homebrew on macOS, apt or pacman on Linux. The entire configuration lives in a Git repository that you check out on all your machines.

Package management

Simple text files define what should be installed:

# to_install.brew
fzf
ripgrep
lazygit
node
neovim

ToolTamer installs missing packages and offers to remove unlisted ones β€” dependency-aware, meaning it never uninstalls packages that are dependencies of others. This keeps your system clean: try a tool, decide not to keep it, and ToolTamer cleans up on the next run.

File synchronization

Config files are compared using SHA256 checksums, not line-by-line. A files.conf defines the mapping:

myzshrc:.zshrc
kitty.conf:.config/kitty/kitty.conf
starship.toml:.config/starship.toml

Left side is the filename in ToolTamer's directory, right side is the target relative to your home directory. When checksums differ, ToolTamer asks what to do: take the system version, restore ToolTamer's version, or skip.

Hierarchical configuration

The core concept is the configuration hierarchy:

~/.config/toolTamer/configs/
β”œβ”€β”€ common/          # Base for all machines
β”œβ”€β”€ common_mac/      # macOS-specific
└── myMacBook/       # This specific machine only
    β””── includes.conf  β†’ contains: common_mac

Resolution order: common β†’ includes β†’ host. More specific configs win. This way you have a shared base (vim config, shell aliases) and can add or override per machine or platform.

Interactive menus

ToolTamer offers fzf-powered menus (with numeric fallback if fzf isn't installed):

-----> ToolTamer V1.0 - main menu
1. Update System - full system update
2. Files only - update only files
3. Snapshot System
4. Admin
5. Quit

The Admin menu adds: moving files between configs, viewing diffs, fixing duplicates, and an integrated lazygit view of the config repo.

Typical workflow

  1. Set up first machine: Install ToolTamer, run tt, create config or point to existing Git repo.
  2. Snapshot: "Snapshot System" captures the current state β€” installed packages and configured files.
  3. Git push: Via the Admin menu or directly on the command line.
  4. Second machine: Install ToolTamer, provide Git repo URL, "Update System" β€” done.
  5. Ongoing: Make changes on any machine β†’ Snapshot β†’ Push β†’ Pull β†’ Update on others.

CLI for automation

Besides the interactive menu, there are direct CLI commands:

tt  --syncSys              # Full update (packages + files + scripts)
tt  --syncFilesOnly        # Files only
tt  --updateToolTamer      # Package snapshot
tt  --updateToolTamerFiles # Package + file snapshot

This makes ToolTamer usable in scripts or cron jobs.

Documentation

Full documentation with installation guide, configuration reference, and how-tos:

sboesebeck.github.io/toolTamer

Source code

ToolTamer is open source on GitHub:

github.com/sboesebeck/toolTamer

Conclusion

ToolTamer solves a specific problem: keeping multiple machines across different platforms consistent, without needing a complex system like Nix. It uses your existing package managers, stores everything in Git, and at the end of the day is a few hundred lines of Bash. No framework, no dependencies, just a tool that does its job.