Manage Homebrew packages across multiple machines with a single YAML file.
Managing Homebrew packages with Brewfile is great, until you're juggling multiple machines.
Hops replaces scattered, duplicated configurations with a single declarative YAML config.
- ✅ One
hops.ymlconfig for all machines - 📦 Generates a specific
Brewfilefor each machine - 🧹 Prune unused floating packages
- ⚡ Installs, upgrades, and verifies with one command
- 💻 Designed for dotfiles
brewfile: /Users/snape/Brewfile
machines:
shared:
taps:
- homebrew/bundle
formulae:
- coreutils
casks:
- 1password
- raycast
- spotify
personal:
casks:
- adobe-creative-cloud
work:
casks:
- cursor
- loom
- slack
cursor:
- dbaeumer.vscode-eslint
- github.github-vscode-theme# Install via GitHub release
curl -L https://github.com/revett/hops/releases/download/vX.Y.Z/hops_X.Y.Z_darwin_arm64.tar.gz -o hops.tar.gz
tar -xzf hops.tar.gz
xattr -c ./hops
sudo mv hops /usr/local/bin
hops -h
# Build from source (required Bun)
git clone https://github.com/revett/hops.git
cd hops
make build
sudo mv hops /usr/local/bin
hops -hOptionally set the HOPS_CONFIG environment variable within your terminal profile:
# Defaults to ~/hops.yml if not set
export HOPS_CONFIG=/path/to/hops.ymlInitialise the configuration file:
hops initThis will create a hops.yml with a set of example packages; update these with your desired set of
machines and packages. This config file is designed to sit in your dotfiles and sync across all your
machines.
Apply the configuration for a specific machine:
hops generate --machine work
hops apply --machine workHops will take care of:
- Creating a local
Brewfilemade up of the correct shared and machine specific packages - Install any missing packages
- Update any outdated packages
- Remove any floating packages that are not outlined in the
Brewfile
# Initialize a new hops.yml configuration file with examples
hops init
# Generate a local Brewfile for a specific machine without installing anything
hops generate --machine work
# Generate Brewfile and apply changes via Homebrew commands (install, upgrade, cleanup)
hops apply --machine personal
# Add to .zshrc to remind every week to run apply command
hops reminderSee hops.yml in revett/dotfiles.
Does it support Cursor extensions?
Yes, as part of the v4.5.0 release of Homebrew on 29th
April 2025, the brew bundle command looks for VS Code variants, see
#19545.
- Bump version in
package.jsonand push asBump version to X.Y.Zcommit git tag -a vX.Y.Z -m "Release vX.Y.Z"git push origin vX.Y.Zmake release VERSION=vX.Y.Z- Create release in GitHub
# Build local binary
make build
# Debug local binary
./hops -h
# Linting/formatting
bun biome:check
bun biome:fix
