<?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>Forem: David</title>
    <description>The latest articles on Forem by David (@david_1d47a807f7674275e5d).</description>
    <link>https://forem.com/david_1d47a807f7674275e5d</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%2F3534930%2F5ca10d5a-0508-4601-8e0b-571bf6e6467c.png</url>
      <title>Forem: David</title>
      <link>https://forem.com/david_1d47a807f7674275e5d</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/david_1d47a807f7674275e5d"/>
    <language>en</language>
    <item>
      <title>Environment Setup v1.0 - Production-Ready macOS Development Environment</title>
      <dc:creator>David</dc:creator>
      <pubDate>Sun, 28 Sep 2025 08:54:48 +0000</pubDate>
      <link>https://forem.com/david_1d47a807f7674275e5d/environment-setup-v10-production-ready-macos-development-environment-4b0p</link>
      <guid>https://forem.com/david_1d47a807f7674275e5d/environment-setup-v10-production-ready-macos-development-environment-4b0p</guid>
      <description>&lt;h1&gt;
  
  
  Environment Setup v1.0 - Production-Ready macOS Development Environment
&lt;/h1&gt;

&lt;p&gt;As a developer, I was tired of manually setting up development environments on new Macs. The process was always the same: install Homebrew, configure Git, set up Node.js, install VS Code, configure the shell, and on and on. It was repetitive, error-prone, and time-consuming.&lt;/p&gt;

&lt;p&gt;So I built a solution: &lt;strong&gt;Environment Setup v1.0&lt;/strong&gt; - a comprehensive, production-ready tool that automatically configures a complete development environment on macOS with just one command.&lt;/p&gt;

&lt;h2&gt;
  
  
  🎯 The Problem
&lt;/h2&gt;

&lt;p&gt;Every time I got a new Mac or helped a colleague set up their development environment, I found myself:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Manually installing dozens of packages&lt;/li&gt;
&lt;li&gt;Configuring shell environments&lt;/li&gt;
&lt;li&gt;Setting up Git and SSH&lt;/li&gt;
&lt;li&gt;Installing and configuring editors&lt;/li&gt;
&lt;li&gt;Managing database services&lt;/li&gt;
&lt;li&gt;Dealing with version conflicts&lt;/li&gt;
&lt;li&gt;Forgetting essential tools&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This process could take hours, and I'd often forget important tools or configurations.&lt;/p&gt;

&lt;h2&gt;
  
  
  ✨ The Solution
&lt;/h2&gt;

&lt;p&gt;Environment Setup v1.0 solves this with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;🎯 10 Preset Configurations&lt;/strong&gt;: From minimal (~20 packages) to everything (113+ packages)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🤖 AI-Powered Tools&lt;/strong&gt;: Local LLMs (Ollama, LM Studio), AI coding tools&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;💻 Modern Terminals&lt;/strong&gt;: Warp (AI-powered), iTerm2, Alacritty, WezTerm, Kitty&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🔄 One-Command Setup&lt;/strong&gt;: Install everything with a single script&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🛡️ Production-Ready&lt;/strong&gt;: Zero ShellCheck errors, comprehensive error handling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;⚙️ Highly Configurable&lt;/strong&gt;: YAML-driven, easy to customize&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🚀 Quick Start
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Clone the repository&lt;/span&gt;
git clone https://github.com/davidsilvestrehenao-hub/env-setup.git
&lt;span class="nb"&gt;cd &lt;/span&gt;env-setup

&lt;span class="c"&gt;# Choose your configuration&lt;/span&gt;
./setup-env.sh &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--config&lt;/span&gt; configs/webdev.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it! The tool handles everything else.&lt;/p&gt;

&lt;h2&gt;
  
  
  📦 What's Included
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Core Development Tools
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Version Control&lt;/strong&gt;: Git, GitHub CLI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Runtimes&lt;/strong&gt;: Node.js, Bun, Python&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Package Managers&lt;/strong&gt;: pnpm, Yarn, pipx&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Containers&lt;/strong&gt;: Docker, Colima&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Databases&lt;/strong&gt;: PostgreSQL, MongoDB, Redis, SQLite, ClickHouse, DuckDB&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  AI &amp;amp; Productivity
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AI Tools&lt;/strong&gt;: Ollama, LM Studio, Cursor, Void&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Productivity&lt;/strong&gt;: Raycast, Rectangle, Notion, Obsidian&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Communication&lt;/strong&gt;: Slack, Discord, Signal, Telegram&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Development Environment
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Editors&lt;/strong&gt;: VS Code, Cursor, Void&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Terminals&lt;/strong&gt;: Warp, iTerm2, Alacritty, WezTerm, Kitty&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shell&lt;/strong&gt;: Starship, eza, bat, fzf, ripgrep, fd, zoxide&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DevOps&lt;/strong&gt;: kubectl, helm, k9s, AWS CLI, Azure CLI&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🎯 Configuration System
&lt;/h2&gt;

&lt;p&gt;The tool comes with 10 preset configurations for different user types:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration&lt;/th&gt;
&lt;th&gt;Packages&lt;/th&gt;
&lt;th&gt;Perfect For&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;minimal&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~20&lt;/td&gt;
&lt;td&gt;Quick setup, basic development&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;webdev&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~50&lt;/td&gt;
&lt;td&gt;Frontend/backend developers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ai&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~60&lt;/td&gt;
&lt;td&gt;AI researchers, data scientists&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;devops&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~80&lt;/td&gt;
&lt;td&gt;DevOps engineers, SREs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;student&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~50&lt;/td&gt;
&lt;td&gt;Students, bootcamp participants&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;everything&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;113+&lt;/td&gt;
&lt;td&gt;Power users, complete setups&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Example: Web Developer Configuration
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# configs/webdev.yaml&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Web&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Development&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Setup"&lt;/span&gt;
  &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Complete&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;web&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;development&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;environment"&lt;/span&gt;
  &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1.0.0"&lt;/span&gt;

&lt;span class="na"&gt;packages&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;core&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;brew&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;git"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;node"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;pnpm"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;bun"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;yarn"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;docker"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;postgresql"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;redis"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gh"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;starship"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;bat"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;eza"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;fzf"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ripgrep"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;fd"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;zoxide"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;jump"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;chezmoi"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;direnv"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;pre-commit"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;shellcheck"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;shfmt"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;git-delta"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;jq"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;yq"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;httpie"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;watchman"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;entr"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tmux"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;volta"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;uv"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tldr"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tree"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;htop"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;neofetch"&lt;/span&gt;
  &lt;span class="na"&gt;frontend&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;brew&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;yarn"&lt;/span&gt;
    &lt;span class="na"&gt;cask&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;visual-studio-code"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;warp"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;iterm2"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;alacritty"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;wezterm"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;kitty"&lt;/span&gt;
  &lt;span class="na"&gt;backend&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;brew&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mongosh"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;redis"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sqlite"&lt;/span&gt;
    &lt;span class="na"&gt;cask&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tableplus"&lt;/span&gt;
  &lt;span class="na"&gt;business&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;brew&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;
    &lt;span class="na"&gt;cask&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cursor"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rectangle"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;raycast"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;insomnia"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;slack"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;discord"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;notion"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;obsidian"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🔧 Customization Made Easy
&lt;/h2&gt;

&lt;p&gt;Creating your own configuration is 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;# Copy a preset as starting point&lt;/span&gt;
&lt;span class="nb"&gt;cp &lt;/span&gt;configs/webdev.yaml configs/my-custom.yaml

&lt;span class="c"&gt;# Edit to your needs&lt;/span&gt;
nano configs/my-custom.yaml

&lt;span class="c"&gt;# Use your custom config&lt;/span&gt;
./setup-env.sh &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--config&lt;/span&gt; configs/my-custom.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Custom Configuration Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# configs/my-custom.yaml&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;My&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Custom&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Setup"&lt;/span&gt;
  &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Personal&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;development&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;environment"&lt;/span&gt;
  &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1.0.0"&lt;/span&gt;

&lt;span class="c1"&gt;# Use the main config as base&lt;/span&gt;
&lt;span class="na"&gt;include&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;../config.yaml"&lt;/span&gt;

&lt;span class="c1"&gt;# Override specific packages&lt;/span&gt;
&lt;span class="na"&gt;packages&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;core&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;brew&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;git"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;node"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;pnpm"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;docker"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gh"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;starship"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;bat"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;fzf"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ripgrep"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tmux"&lt;/span&gt;
  &lt;span class="na"&gt;frontend&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;cask&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;visual-studio-code"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;warp"&lt;/span&gt;
  &lt;span class="na"&gt;business&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;cask&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rectangle"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;raycast"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🛡️ Production Quality
&lt;/h2&gt;

&lt;p&gt;The tool is built with production quality in mind:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Zero ShellCheck errors/warnings&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Comprehensive error handling&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Idempotent&lt;/strong&gt; (safe to run multiple times)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Parallel processing&lt;/strong&gt; with CPU detection&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Complete documentation&lt;/strong&gt; with examples&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Atomic file operations&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Retry mechanisms&lt;/strong&gt; for network operations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Progress tracking&lt;/strong&gt; and logging&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Error Handling Example
&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;# The tool handles errors gracefully&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt; command_exists brew&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
    &lt;/span&gt;log &lt;span class="s2"&gt;"ERROR"&lt;/span&gt; &lt;span class="s2"&gt;"Homebrew not found. Installing..."&lt;/span&gt;
    install_homebrew
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nv"&gt;$?&lt;/span&gt; &lt;span class="nt"&gt;-ne&lt;/span&gt; 0 &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
        &lt;/span&gt;log &lt;span class="s2"&gt;"ERROR"&lt;/span&gt; &lt;span class="s2"&gt;"Failed to install Homebrew"&lt;/span&gt;
        &lt;span class="nb"&gt;exit &lt;/span&gt;1
    &lt;span class="k"&gt;fi
fi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🎉 Perfect For
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;New Mac setups&lt;/strong&gt; - Get productive immediately&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Team onboarding&lt;/strong&gt; - Consistent environments across team members&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Students&lt;/strong&gt; - Learn with minimal setup friction&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Senior developers&lt;/strong&gt; - Advanced tools and customization options&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anyone&lt;/strong&gt; wanting a modern development environment&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📚 Documentation
&lt;/h2&gt;

&lt;p&gt;The tool includes comprehensive documentation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Repository&lt;/strong&gt;: &lt;a href="https://github.com/davidsilvestrehenao-hub/env-setup" rel="noopener noreferrer"&gt;https://github.com/davidsilvestrehenao-hub/env-setup&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Configuration Guide&lt;/strong&gt;: &lt;a href="https://github.com/davidsilvestrehenao-hub/env-setup/tree/main/configs" rel="noopener noreferrer"&gt;https://github.com/davidsilvestrehenao-hub/env-setup/tree/main/configs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auto-generated Docs&lt;/strong&gt;: Complete setup documentation&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🤔 Why I Built This
&lt;/h2&gt;

&lt;p&gt;I wanted something that:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Works out of the box&lt;/strong&gt; - No configuration needed for basic usage&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Is highly configurable&lt;/strong&gt; - Easy to customize for specific needs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Supports different user types&lt;/strong&gt; - From students to senior developers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Is production-ready and reliable&lt;/strong&gt; - Zero errors, comprehensive testing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Serves as a learning example&lt;/strong&gt; - Shows how to build robust shell scripts&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  🚀 Getting Started
&lt;/h2&gt;

&lt;p&gt;Ready to try it out? Here's how:&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 the repository&lt;/span&gt;
git clone https://github.com/davidsilvestrehenao-hub/env-setup.git
&lt;span class="nb"&gt;cd &lt;/span&gt;env-setup

&lt;span class="c"&gt;# Preview what would be installed&lt;/span&gt;
./setup-env.sh preview &lt;span class="nt"&gt;--config&lt;/span&gt; configs/webdev.yaml

&lt;span class="c"&gt;# Install your chosen configuration&lt;/span&gt;
./setup-env.sh &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--config&lt;/span&gt; configs/webdev.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🔗 Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub&lt;/strong&gt;: &lt;a href="https://github.com/davidsilvestrehenao-hub/env-setup" rel="noopener noreferrer"&gt;https://github.com/davidsilvestrehenao-hub/env-setup&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Issues&lt;/strong&gt;: &lt;a href="https://github.com/davidsilvestrehenao-hub/env-setup/issues" rel="noopener noreferrer"&gt;https://github.com/davidsilvestrehenao-hub/env-setup/issues&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Discussions&lt;/strong&gt;: &lt;a href="https://github.com/davidsilvestrehenao-hub/env-setup/discussions" rel="noopener noreferrer"&gt;https://github.com/davidsilvestrehenao-hub/env-setup/discussions&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  💬 What's Next?
&lt;/h2&gt;

&lt;p&gt;I'm planning to add:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Windows support&lt;/strong&gt; (WSL2)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Linux support&lt;/strong&gt; (Ubuntu, Fedora)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;More preset configurations&lt;/strong&gt; (gaming, design, etc.)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GUI configuration tool&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Team configuration sharing&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What do you think? Any features you'd like to see added? Any configurations that would be useful for your workflow?&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Tags&lt;/strong&gt;: #macos #devtools #automation #bash #productivity&lt;/p&gt;

</description>
      <category>devtools</category>
      <category>automation</category>
      <category>bash</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
