Set Up Your Mac Development Environment in Minutes with Hola
Source: Dev.to
Why Hola?
- No heavy dependencies like traditional Chef installations.
- Ruby DSL is readable and expressive, but optional for most users.
- Handles Homebrew, mise, dotfiles, and macOS system settings in a single workflow.
- Built in Zig for speed and tiny memory footprint.
Features
Convention Over Configuration
Use the tools you already know:
Brewfile (Homebrew’s native format)
brew "git"
brew "neovim"
cask "ghostty"
cask "visual-studio-code"
mise.toml (mise’s native format)
[tools]
node = "24"
python = "3.14"
rust = "stable"
Optional Ruby DSL
For advanced provisioning (90 % of users won’t need this):
# ~/.config/hola/provision.rb
package ["git", "tmux", "neovim"]
execute "install-oh-my-zsh" do
command 'sh -c "$(curl -fsSL https://ohmyz.sh/install.sh)"'
not_if { Dir.exist?(File.expand_path("~/.oh-my-zsh")) }
end
Intelligent Dotfiles Management
# Bootstrap from a GitHub repo (clones + installs packages + links dotfiles)
hola apply --github username/dotfiles
# Or just link dotfiles from a local directory
hola link --dotfiles ~/.dotfiles
macOS Desktop Configuration
Define Dock layout and system defaults directly in Ruby:
# ~/.config/hola/provision.rb
macos_dock do
apps [
'/Applications/Ghostty.app/',
'/Applications/Visual Studio Code.app/',
'/Applications/Safari.app/',
]
orientation "bottom"
autohide true
magnification true
tilesize 50
largesize 40
end
macos_defaults "show hidden files" do
domain "com.apple.finder"
key "AppleShowAllFiles"
value true
end
macos_defaults "keyboard repeat rate" do
global true
key "KeyRepeat"
value 1
end
Installation
# Quick install (recommended)
curl -fsSL https://hola.ac/install | bash
Or via Homebrew:
brew tap ratazzi/hola
brew install hola
Or download manually:
curl -fsSL https://github.com/ratazzi/hola/releases/latest/download/hola-macos-aarch64 -o hola
chmod +x hola
xattr -d com.apple.quarantine hola
sudo mv hola /usr/local/bin/
Example Repository Layout
repo/
├── Brewfile
├── mise.toml
└── .config/
└── hola/
└── provision.rb # optional
Brewfile (repo root)
brew "git"
brew "gh"
brew "ripgrep"
brew "fzf"
cask "ghostty"
cask "zed"
cask "raycast"
mise.toml (repo root)
[tools]
node = "20"
python = "3.12"
go = "latest"
Provision file (optional – see the macOS Desktop Configuration section for examples).
One command sets everything up:
hola apply --github username/dotfiles
What Hola Does
- ✅ Clones your dotfiles repo to
~/.dotfiles - ✅ Installs all Homebrew packages from
Brewfile - ✅ Installs and pins tool versions from
mise.toml - ✅ Symlinks dotfiles to your home directory
- ✅ Runs
provision.rb(if present) for Dock and system settings
Export Existing Configuration
# Export current Dock configuration
hola dock
# Export Homebrew packages to Brewfile
brew bundle dump
Company‑Wide Dotfiles Repo Example
Brewfile
# Core tools every developer needs
brew "git"
brew "docker"
brew "kubectl"
# Company‑specific tools
cask "slack"
cask "zoom"
cask "visual-studio-code"
Provision file (advanced setup)
# Install VS Code extensions
execute "install vscode extensions" do
command "code --install-extension ms-python.python"
command "code --install-extension dbaeumer.vscode-eslint"
not_if "code --list-extensions | grep -q ms-python.python"
end
# Clone team repositories
directory "/Users/#{ENV['USER']}/work" do
recursive true
end
git "/Users/#{ENV['USER']}/work/backend" do
repository "git@github.com:company/backend.git"
end
New hires simply run:
hola apply --github company/dotfiles
Advanced Ruby DSL Usage
# In ~/.config/hola/provision.rb
if ENV['USER'] == 'john'
package "discord"
end
case node['platform']
when 'darwin'
package "mas" # Mac App Store CLI
when 'ubuntu'
apt_repository "ppa:graphics-drivers/ppa"
end
template "/Users/#{ENV['USER']}/.gitconfig" do
content "It’s like Chef, but without the baggage."
end
“Finally, Dock management that works.” – No more manual dragging or complex AppleScript. Define your Dock layout in code.
“Convention over configuration done right.” – Smart defaults mean less typing. Hola knows where dotfiles should go.
Getting Started
# Install
curl -fsSL https://hola.ac/install | bash
# Bootstrap from your dotfiles repo
hola apply --github username/dotfiles
Or start simple with just a Brewfile:
echo 'brew "git"' > Brewfile
echo 'cask "ghostty"' >> Brewfile
hola apply
Links
- GitHub: https://github.com/ratazzi/hola
- Installation guide: https://github.com/ratazzi/hola#installation
Built with ❤️ in Zig by developers who value their time.