<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ratazzi</title>
    <description>The latest articles on DEV Community by Ratazzi (@ratazzi).</description>
    <link>https://dev.to/ratazzi</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3640168%2Fe098baa2-611b-4787-a14a-4de5a97453da.jpeg</url>
      <title>DEV Community: Ratazzi</title>
      <link>https://dev.to/ratazzi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ratazzi"/>
    <language>en</language>
    <item>
      <title>Set Up Your Mac Development Environment in Minutes with Hola</title>
      <dc:creator>Ratazzi</dc:creator>
      <pubDate>Thu, 04 Dec 2025 03:56:51 +0000</pubDate>
      <link>https://dev.to/ratazzi/set-up-your-mac-development-environment-in-minutes-with-hola-57ab</link>
      <guid>https://dev.to/ratazzi/set-up-your-mac-development-environment-in-minutes-with-hola-57ab</guid>
      <description>&lt;p&gt;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?&lt;/p&gt;

&lt;p&gt;Meet &lt;strong&gt;&lt;a href="https://github.com/ratazzi/hola" rel="noopener noreferrer"&gt;Hola&lt;/a&gt;&lt;/strong&gt; – a blazing-fast development environment manager that combines the best of Homebrew, mise, and dotfiles management into one cohesive tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem with Existing Solutions
&lt;/h2&gt;

&lt;p&gt;I've been a long-time &lt;a href="https://docs.chef.io/ruby/" rel="noopener noreferrer"&gt;Chef&lt;/a&gt; user because typing endless &lt;code&gt;brew install&lt;/code&gt; or &lt;code&gt;apt install&lt;/code&gt; 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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enter Hola: Convention Over Configuration
&lt;/h2&gt;

&lt;p&gt;Inspired by modern tools like &lt;a href="https://ghostty.org" rel="noopener noreferrer"&gt;Ghostty&lt;/a&gt; and &lt;a href="https://bun.sh" rel="noopener noreferrer"&gt;Bun&lt;/a&gt;, 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.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Makes Hola Different?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Convention Over Configuration&lt;/strong&gt; – Use tools you already know:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Brewfile&lt;/strong&gt; (Homebrew's native format):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;brew&lt;/span&gt; &lt;span class="s2"&gt;"git"&lt;/span&gt;
&lt;span class="n"&gt;brew&lt;/span&gt; &lt;span class="s2"&gt;"neovim"&lt;/span&gt;
&lt;span class="n"&gt;cask&lt;/span&gt; &lt;span class="s2"&gt;"ghostty"&lt;/span&gt;
&lt;span class="n"&gt;cask&lt;/span&gt; &lt;span class="s2"&gt;"visual-studio-code"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;mise.toml&lt;/strong&gt; (mise's native format):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="nn"&gt;[tools]&lt;/span&gt;
&lt;span class="py"&gt;node&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"24"&lt;/span&gt;
&lt;span class="py"&gt;python&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"3.14"&lt;/span&gt;
&lt;span class="py"&gt;rust&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"stable"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. Optional Ruby DSL&lt;/strong&gt; – For advanced provisioning (90% of users won't need this):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ~/.config/hola/provision.rb&lt;/span&gt;
&lt;span class="n"&gt;package&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"git"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"tmux"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"neovim"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;execute&lt;/span&gt; &lt;span class="s2"&gt;"install-oh-my-zsh"&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="n"&gt;command&lt;/span&gt; &lt;span class="s1"&gt;'sh -c "$(curl -fsSL https://ohmyz.sh/install.sh)"'&lt;/span&gt;
  &lt;span class="n"&gt;not_if&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="no"&gt;Dir&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exist?&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;File&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expand_path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"~/.oh-my-zsh"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3. Intelligent Dotfiles Management&lt;/strong&gt; – No complex configs needed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Bootstrap from a GitHub repo (clones + installs packages + links dotfiles)&lt;/span&gt;
hola apply &lt;span class="nt"&gt;--github&lt;/span&gt; username/dotfiles

&lt;span class="c"&gt;# Or just link dotfiles from local directory&lt;/span&gt;
hola &lt;span class="nb"&gt;link&lt;/span&gt; &lt;span class="nt"&gt;--dotfiles&lt;/span&gt; ~/.dotfiles
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;4. macOS Desktop Configuration&lt;/strong&gt; – The killer feature that even Chef doesn't offer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ~/.config/hola/provision.rb&lt;/span&gt;
&lt;span class="n"&gt;macos_dock&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="n"&gt;apps&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="s1"&gt;'/Applications/Ghostty.app/'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;'/Applications/Visual Studio Code.app/'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;'/Applications/Safari.app/'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="n"&gt;orientation&lt;/span&gt; &lt;span class="s2"&gt;"bottom"&lt;/span&gt;
  &lt;span class="n"&gt;autohide&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;
  &lt;span class="n"&gt;magnification&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;
  &lt;span class="n"&gt;tilesize&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;
  &lt;span class="n"&gt;largesize&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;macos_defaults&lt;/span&gt; &lt;span class="s2"&gt;"show hidden files"&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="n"&gt;domain&lt;/span&gt; &lt;span class="s2"&gt;"com.apple.finder"&lt;/span&gt;
  &lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="s2"&gt;"AppleShowAllFiles"&lt;/span&gt;
  &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;macos_defaults&lt;/span&gt; &lt;span class="s2"&gt;"keyboard repeat rate"&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="n"&gt;global&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;
  &lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="s2"&gt;"KeyRepeat"&lt;/span&gt;
  &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Getting Started in 3 Minutes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Install Hola
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Quick install (recommended)&lt;/span&gt;
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://hola.ac/install | bash

&lt;span class="c"&gt;# Or using Homebrew&lt;/span&gt;
brew tap ratazzi/hola
brew &lt;span class="nb"&gt;install &lt;/span&gt;hola

&lt;span class="c"&gt;# Or download manually&lt;/span&gt;
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://github.com/ratazzi/hola/releases/latest/download/hola-macos-aarch64 &lt;span class="nt"&gt;-o&lt;/span&gt; hola
&lt;span class="nb"&gt;chmod&lt;/span&gt; +x hola
xattr &lt;span class="nt"&gt;-d&lt;/span&gt; com.apple.quarantine hola
&lt;span class="nb"&gt;sudo mv &lt;/span&gt;hola /usr/local/bin/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Create Your Dotfiles Repo
&lt;/h3&gt;

&lt;p&gt;Create a GitHub repo with these files:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Brewfile&lt;/strong&gt; (in repo root):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;brew&lt;/span&gt; &lt;span class="s2"&gt;"git"&lt;/span&gt;
&lt;span class="n"&gt;brew&lt;/span&gt; &lt;span class="s2"&gt;"gh"&lt;/span&gt;
&lt;span class="n"&gt;brew&lt;/span&gt; &lt;span class="s2"&gt;"ripgrep"&lt;/span&gt;
&lt;span class="n"&gt;brew&lt;/span&gt; &lt;span class="s2"&gt;"fzf"&lt;/span&gt;
&lt;span class="n"&gt;cask&lt;/span&gt; &lt;span class="s2"&gt;"ghostty"&lt;/span&gt;
&lt;span class="n"&gt;cask&lt;/span&gt; &lt;span class="s2"&gt;"zed"&lt;/span&gt;
&lt;span class="n"&gt;cask&lt;/span&gt; &lt;span class="s2"&gt;"raycast"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;mise.toml&lt;/strong&gt; (in repo root):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="nn"&gt;[tools]&lt;/span&gt;
&lt;span class="py"&gt;node&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"20"&lt;/span&gt;
&lt;span class="py"&gt;python&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"3.12"&lt;/span&gt;
&lt;span class="py"&gt;go&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"latest"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;~/.config/hola/provision.rb&lt;/strong&gt; (optional, see "macOS Desktop Configuration" section above for examples)&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Run It
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# One command to set up everything!&lt;/span&gt;
hola apply &lt;span class="nt"&gt;--github&lt;/span&gt; username/dotfiles
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it! Hola will:&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Real-World Use Cases
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Migrate Your Current Setup
&lt;/h3&gt;

&lt;p&gt;Export your existing configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Export current Dock configuration&lt;/span&gt;
hola dock

&lt;span class="c"&gt;# Export Homebrew packages to Brewfile&lt;/span&gt;
brew bundle dump
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Team Onboarding
&lt;/h3&gt;

&lt;p&gt;Create a company dotfiles repo with &lt;strong&gt;Brewfile&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Core tools every developer needs&lt;/span&gt;
&lt;span class="n"&gt;brew&lt;/span&gt; &lt;span class="s2"&gt;"git"&lt;/span&gt;
&lt;span class="n"&gt;brew&lt;/span&gt; &lt;span class="s2"&gt;"docker"&lt;/span&gt;
&lt;span class="n"&gt;brew&lt;/span&gt; &lt;span class="s2"&gt;"kubectl"&lt;/span&gt;

&lt;span class="c1"&gt;# Company-specific tools&lt;/span&gt;
&lt;span class="n"&gt;cask&lt;/span&gt; &lt;span class="s2"&gt;"slack"&lt;/span&gt;
&lt;span class="n"&gt;cask&lt;/span&gt; &lt;span class="s2"&gt;"zoom"&lt;/span&gt;
&lt;span class="n"&gt;cask&lt;/span&gt; &lt;span class="s2"&gt;"visual-studio-code"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And &lt;strong&gt;~/.config/hola/provision.rb&lt;/strong&gt; for advanced setup:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Install VS Code extensions&lt;/span&gt;
&lt;span class="n"&gt;execute&lt;/span&gt; &lt;span class="s2"&gt;"install vscode extensions"&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="n"&gt;command&lt;/span&gt; &lt;span class="s2"&gt;"code --install-extension ms-python.python"&lt;/span&gt;
  &lt;span class="n"&gt;command&lt;/span&gt; &lt;span class="s2"&gt;"code --install-extension dbaeumer.vscode-eslint"&lt;/span&gt;
  &lt;span class="n"&gt;not_if&lt;/span&gt; &lt;span class="s2"&gt;"code --list-extensions | grep -q ms-python.python"&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="c1"&gt;# Clone team repositories&lt;/span&gt;
&lt;span class="n"&gt;directory&lt;/span&gt; &lt;span class="s2"&gt;"/Users/&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'USER'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/work"&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="n"&gt;recursive&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;git&lt;/span&gt; &lt;span class="s2"&gt;"/Users/&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'USER'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/work/backend"&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="n"&gt;repository&lt;/span&gt; &lt;span class="s2"&gt;"git@github.com:company/backend.git"&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then new hires just run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;hola apply &lt;span class="nt"&gt;--github&lt;/span&gt; company/dotfiles
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Personal Dotfiles Management
&lt;/h3&gt;

&lt;p&gt;Bootstrap your entire environment with one command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Clone repo, install packages, link dotfiles - all in one&lt;/span&gt;
hola apply &lt;span class="nt"&gt;--github&lt;/span&gt; username/dotfiles

&lt;span class="c"&gt;# Hola automatically:&lt;/span&gt;
&lt;span class="c"&gt;# 1. Clones https://github.com/username/dotfiles to ~/.dotfiles&lt;/span&gt;
&lt;span class="c"&gt;# 2. Installs packages from Brewfile&lt;/span&gt;
&lt;span class="c"&gt;# 3. Installs tools from mise.toml&lt;/span&gt;
&lt;span class="c"&gt;# 4. Symlinks dotfiles/ directory to ~/&lt;/span&gt;
&lt;span class="c"&gt;#    ~/.dotfiles/dotfiles/.zshrc → ~/.zshrc&lt;/span&gt;
&lt;span class="c"&gt;#    ~/.dotfiles/dotfiles/.gitconfig → ~/.gitconfig&lt;/span&gt;
&lt;span class="c"&gt;#    ~/.dotfiles/dotfiles/.config/ghostty → ~/.config/ghostty&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Performance That Matters
&lt;/h2&gt;

&lt;p&gt;Built in Zig, Hola is &lt;strong&gt;incredibly fast&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dock configuration: ~50ms (vs seconds with AppleScript)&lt;/li&gt;
&lt;li&gt;Dotfiles linking: &amp;lt;100ms for hundreds of files&lt;/li&gt;
&lt;li&gt;Package installation: Limited only by Homebrew/mise speed&lt;/li&gt;
&lt;li&gt;Memory usage: &amp;lt;10MB resident&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Developers Love It
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;"It's like Chef, but without the baggage"&lt;/strong&gt; – Hola gives you Chef's beautiful Ruby DSL without the heavyweight dependencies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Finally, Dock management that works"&lt;/strong&gt; – No more manual dragging or complex AppleScript. Define your Dock layout in code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Convention over configuration done right"&lt;/strong&gt; – Smart defaults mean less typing. Hola knows where dotfiles should go.&lt;/p&gt;

&lt;h2&gt;
  
  
  Advanced Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Conditional Logic
&lt;/h3&gt;

&lt;p&gt;Use Ruby's full power in provision.rb:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# In ~/.config/hola/provision.rb&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'USER'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;'john'&lt;/span&gt;
  &lt;span class="n"&gt;package&lt;/span&gt; &lt;span class="s2"&gt;"discord"&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'platform'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="k"&gt;when&lt;/span&gt; &lt;span class="s1"&gt;'darwin'&lt;/span&gt;
  &lt;span class="n"&gt;package&lt;/span&gt; &lt;span class="s2"&gt;"mas"&lt;/span&gt;  &lt;span class="c1"&gt;# Mac App Store CLI&lt;/span&gt;
&lt;span class="k"&gt;when&lt;/span&gt; &lt;span class="s1"&gt;'ubuntu'&lt;/span&gt;
  &lt;span class="n"&gt;apt_repository&lt;/span&gt; &lt;span class="s2"&gt;"ppa:graphics-drivers/ppa"&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  File Templates
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;template&lt;/span&gt; &lt;span class="s2"&gt;"/Users/&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'USER'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/.gitconfig"&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="n"&gt;content&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;~&lt;/span&gt;&lt;span class="no"&gt;GITCONFIG&lt;/span&gt;&lt;span class="sh"&gt;
    [user]
      name = &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'GIT_NAME'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="s1"&gt;'Your Name'&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;
      email = &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'GIT_EMAIL'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="s1"&gt;'you@example.com'&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;
    [core]
      editor = nvim
&lt;/span&gt;&lt;span class="no"&gt;  GITCONFIG&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Resource Notifications
&lt;/h3&gt;

&lt;p&gt;Chain resources together:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;file&lt;/span&gt; &lt;span class="s2"&gt;"/etc/app/config.yml"&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="n"&gt;content&lt;/span&gt; &lt;span class="s2"&gt;"production: true"&lt;/span&gt;
  &lt;span class="n"&gt;notify&lt;/span&gt; &lt;span class="ss"&gt;:execute&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"restart-app"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:immediately&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;execute&lt;/span&gt; &lt;span class="s2"&gt;"restart-app"&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="n"&gt;command&lt;/span&gt; &lt;span class="s2"&gt;"systemctl restart app"&lt;/span&gt;
  &lt;span class="n"&gt;action&lt;/span&gt; &lt;span class="ss"&gt;:nothing&lt;/span&gt;  &lt;span class="c1"&gt;# Only runs when notified&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Try It Today
&lt;/h2&gt;

&lt;p&gt;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.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Install&lt;/span&gt;
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://hola.ac/install | bash

&lt;span class="c"&gt;# Bootstrap from your dotfiles repo&lt;/span&gt;
./hola apply &lt;span class="nt"&gt;--github&lt;/span&gt; username/dotfiles
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or start simple with just a Brewfile:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create a Brewfile&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'brew "git"'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; Brewfile
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'cask "ghostty"'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; Brewfile

&lt;span class="c"&gt;# Run apply in current directory&lt;/span&gt;
hola apply
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/ratazzi/hola" rel="noopener noreferrer"&gt;https://github.com/ratazzi/hola&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Installation:&lt;/strong&gt; &lt;a href="https://github.com/ratazzi/hola#installation" rel="noopener noreferrer"&gt;https://github.com/ratazzi/hola#installation&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built with ❤️ in Zig by developers who value their time.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;What's your Mac setup routine? Have you tried Hola? Share your thoughts in the comments!&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
