DEV Community

Ratazzi
Ratazzi

Posted on

Set Up Your Mac Development Environment in Minutes with Hola

Ever spent hours setting up a new Mac for development? Installing Homebrew packages, configuring dotfiles, tweaking system settings, arranging your Dock... it's tedious and error-prone. What if you could automate everything with a simple Ruby DSL that reads like plain English?

Meet Hola – a blazing-fast development environment manager that combines the best of Homebrew, mise, and dotfiles management into one cohesive tool.

The Problem with Existing Solutions

I've been a long-time Chef user because typing endless brew install or apt install commands drives me crazy. Chef's Ruby DSL is perfect – it's readable and expressive. But Chef comes with heavy dependencies, especially on macOS where it installs unnecessary components and even creates system users.

Other configuration management tools? Ansible and Salt force you to write complex YAML files when you'd rather just type commands directly. Popular dotfiles managers have steep learning curves for what should be a simple task: symlinking files to the right places.

Enter Hola: Convention Over Configuration

Inspired by modern tools like Ghostty and Bun, I built Hola in Zig for its speed, cross-compilation capabilities, and seamless C integration. The result? A tool that sets up your entire development environment in minutes, not hours.

What Makes Hola Different?

1. Convention Over Configuration – Use tools you already know:

Brewfile (Homebrew's native format):

brew "git"
brew "neovim"
cask "ghostty"
cask "visual-studio-code"
Enter fullscreen mode Exit fullscreen mode

mise.toml (mise's native format):

[tools]
node = "24"
python = "3.14"
rust = "stable"
Enter fullscreen mode Exit fullscreen mode

2. 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
Enter fullscreen mode Exit fullscreen mode

3. Intelligent Dotfiles Management – No complex configs needed:

# Bootstrap from a GitHub repo (clones + installs packages + links dotfiles)
hola apply --github username/dotfiles

# Or just link dotfiles from local directory
hola link --dotfiles ~/.dotfiles
Enter fullscreen mode Exit fullscreen mode

4. macOS Desktop Configuration – The killer feature that even Chef doesn't offer:

# ~/.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
Enter fullscreen mode Exit fullscreen mode

Getting Started in 3 Minutes

1. Install Hola

# Quick install (recommended)
curl -fsSL https://hola.ac/install | bash

# Or using 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/
Enter fullscreen mode Exit fullscreen mode

2. Create Your Dotfiles Repo

Create a GitHub repo with these files:

Brewfile (in repo root):

brew "git"
brew "gh"
brew "ripgrep"
brew "fzf"
cask "ghostty"
cask "zed"
cask "raycast"
Enter fullscreen mode Exit fullscreen mode

mise.toml (in repo root):

[tools]
node = "20"
python = "3.12"
go = "latest"
Enter fullscreen mode Exit fullscreen mode

~/.config/hola/provision.rb (optional, see "macOS Desktop Configuration" section above for examples)

3. Run It

# One command to set up everything!
hola apply --github username/dotfiles
Enter fullscreen mode Exit fullscreen mode

That's it! Hola will:

  • ✅ Clone your dotfiles repo to ~/.dotfiles
  • ✅ Install all Homebrew packages from Brewfile
  • ✅ Install and pin tool versions from mise.toml
  • ✅ Symlink dotfiles to your home directory
  • ✅ Run provision.rb (if exists) for Dock/system settings

Real-World Use Cases

Migrate Your Current Setup

Export your existing configuration:

# Export current Dock configuration
hola dock

# Export Homebrew packages to Brewfile
brew bundle dump
Enter fullscreen mode Exit fullscreen mode

Team Onboarding

Create a company dotfiles repo with Brewfile:

# Core tools every developer needs
brew "git"
brew "docker"
brew "kubectl"

# Company-specific tools
cask "slack"
cask "zoom"
cask "visual-studio-code"
Enter fullscreen mode Exit fullscreen mode

And ~/.config/hola/provision.rb for 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
Enter fullscreen mode Exit fullscreen mode

Then new hires just run:

hola apply --github company/dotfiles
Enter fullscreen mode Exit fullscreen mode

Personal Dotfiles Management

Bootstrap your entire environment with one command:

# Clone repo, install packages, link dotfiles - all in one
hola apply --github username/dotfiles

# Hola automatically:
# 1. Clones https://github.com/username/dotfiles to ~/.dotfiles
# 2. Installs packages from Brewfile
# 3. Installs tools from mise.toml
# 4. Symlinks dotfiles/ directory to ~/
#    ~/.dotfiles/dotfiles/.zshrc → ~/.zshrc
#    ~/.dotfiles/dotfiles/.gitconfig → ~/.gitconfig
#    ~/.dotfiles/dotfiles/.config/ghostty → ~/.config/ghostty
Enter fullscreen mode Exit fullscreen mode

Performance That Matters

Built in Zig, Hola is incredibly fast:

  • Dock configuration: ~50ms (vs seconds with AppleScript)
  • Dotfiles linking: <100ms for hundreds of files
  • Package installation: Limited only by Homebrew/mise speed
  • Memory usage: <10MB resident

Why Developers Love It

"It's like Chef, but without the baggage" – Hola gives you Chef's beautiful Ruby DSL without the heavyweight dependencies.

"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.

Advanced Features

Conditional Logic

Use Ruby's full power in provision.rb:

# 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
Enter fullscreen mode Exit fullscreen mode

File Templates

template "/Users/#{ENV['USER']}/.gitconfig" do
  content <<~GITCONFIG
    [user]
      name = #{ENV['GIT_NAME'] || 'Your Name'}
      email = #{ENV['GIT_EMAIL'] || 'you@example.com'}
    [core]
      editor = nvim
  GITCONFIG
end
Enter fullscreen mode Exit fullscreen mode

Resource Notifications

Chain resources together:

file "/etc/app/config.yml" do
  content "production: true"
  notify :execute, "restart-app", :immediately
end

execute "restart-app" do
  command "systemctl restart app"
  action :nothing  # Only runs when notified
end
Enter fullscreen mode Exit fullscreen mode

Try It Today

Stop wasting time on manual setup. Whether you're setting up a new Mac, onboarding team members, or just want reproducible configurations, Hola makes it simple.

# Install
curl -fsSL https://hola.ac/install | bash

# Bootstrap from your dotfiles repo
./hola apply --github username/dotfiles
Enter fullscreen mode Exit fullscreen mode

Or start simple with just a Brewfile:

# Create a Brewfile
echo 'brew "git"' > Brewfile
echo 'cask "ghostty"' >> Brewfile

# Run apply in current directory
hola apply
Enter fullscreen mode Exit fullscreen mode

GitHub: https://github.com/ratazzi/hola

Installation: https://github.com/ratazzi/hola#installation


Built with ❤️ in Zig by developers who value their time.

What's your Mac setup routine? Have you tried Hola? Share your thoughts in the comments!

Top comments (0)