This document provides a complete reference for all configuration options available across all platforms in the dev-machine-setup project.
Each platform (macOS, Windows, Ubuntu, Debian, and Fedora) uses YAML-based configuration
files (vars.yaml) to define what gets installed and configured.
While the specific variable names may differ between platforms,
the structure and concepts remain consistent.
# Basic Git configuration (all platforms)
git_user_email: '' # Your Git email address
git_user_name: '' # Your Git display name
# Custom commands (all platforms)
custom_commands_user: [] # Commands run as regular user
custom_commands_elevated: [] # Commands run with elevated privileges
custom_script: '' # Path to custom script file
# VS Code extensions (all platforms)
vscode_extensions: [] # List of VS Code extensions
# PowerShell modules (all platforms)
powershell_modules: [] # List of PowerShell modules
# Python packages via pipx (bootstraps uv on Linux; empty on macOS/Windows)
pipx_packages: [] # List of Python packages
# Python CLI tools via uv (all platforms)
uv_tools: [] # List of Python CLI tools# Rosetta 2 installation for Apple Silicon Macs
install_rosetta: false # Set to true to install Rosetta 2# Homebrew package repositories
homebrew_taps:
- aws/tap # AWS CLI tools
- azure/bicep # Azure Bicep tools
- hashicorp/tap # HashiCorp tools
# Command-line tools and libraries
homebrew_formulae:
- git # Version control
- docker # Container runtime
- terraform # Infrastructure as code
- awscli # AWS command line interface
# GUI applications
homebrew_casks:
- visual-studio-code # Code editor
- docker-desktop # Docker GUI
- google-chrome # Web browser
- microsoft-office # Office suite# Node.js global packages
npm_global_packages:
- aws-cdk # AWS CDK toolkit
- '@angular/cli' # Angular CLI
- prettier # Code formatter
# .NET global tools
dotnet_tools:
- Amazon.Lambda.Tools # AWS Lambda tools for .NET
- dotnet-ef # Entity Framework tools# Commands executed as the current user
custom_commands_user:
# Show hidden files in Finder
- defaults write com.apple.finder AppleShowAllFiles -bool true
# Set Finder to list view
- defaults write com.apple.finder FXPreferredViewStyle -string "Nlsv"
# Configure Dock auto-hide
- defaults write com.apple.dock autohide -bool true
# Commands executed with sudo privileges
custom_commands_elevated:
# Add fish to allowed shells
- echo "/opt/homebrew/bin/fish" | sudo tee -a /etc/shellsWindows uses objects with a name key (required)
plus optional parameters and prerelease keys:
# Applications and tools via Chocolatey
choco_packages:
- name: git # Version control
parameters: /WindowsTerminal /NoShellIntegration
- name: vscode # Code editor
- name: docker-desktop # Container platform
- name: terraform # Infrastructure as code
- name: kubernetes-cli # Kubernetes command line
- name: azure-cli # Azure command line
- name: awscli # AWS command lineLegacy modules to install in Windows PowerShell 5.1 (if needed):
windows_powershell_modules:
# - AWS.Tools.Common
# - Az.Accounts# Node.js global packages (installed via npm after Node.js)
npm_global_packages:
- aws-cdk # AWS CDK toolkit
- '@vue/cli' # Vue CLI
- serverless # Serverless frameworkWindows uses a single custom_commands list
(not split into user/elevated) since the script already runs as Administrator:
# Commands executed during setup (runs as Administrator)
custom_commands:
# Enable Dark Mode
- Set-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize -Name SystemUsesLightTheme -Value 0 -Type Dword -Force
# Enable WSL features
- Enable-WindowsOptionalFeature -FeatureName Microsoft-Windows-Subsystem-Linux -Online -NoRestart
# Show file extensions in File Explorer
- Set-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced' -Name HideFileExt -Value 0# Windows Subsystem for Linux specific settings
is_wsl: false # Set to true when running in WSL environment
# AppImage install directory
appimage_install_dir: "{{ ansible_env.HOME }}/.local/bin"# Essential packages installed first
apt_packages_prereqs:
- name: apt-transport-https # HTTPS transport for APT
- name: ca-certificates # Certificate authority certs
- name: curl # HTTP client
- name: software-properties-common # PPA support
- name: libfuse2 # For AppImage packages# Additional repositories using deb822 format
external_apt_repositories:
- name: docker
signed_by: https://download.docker.com/linux/ubuntu/gpg
uris: https://download.docker.com/linux/ubuntu
suites: "{{ ansible_distribution_release }}"
components: stable
architectures: "{{ deb_architecture }}"Ubuntu uses objects with a name key and optional supported_architectures:
# System packages and command-line tools
apt_packages:
- name: git # Version control
- name: build-essential # Compilation tools
- name: docker-ce # Docker engine
- name: code # Visual Studio Code
- name: google-chrome-stable # Web browser
supported_architectures:
- amd64 # Skip on ARM64Snap packages use objects with name, classic, and optional supported_architectures:
# GUI applications via Snap
snap_packages:
- name: drawio
classic: true
supported_architectures:
- amd64
- name: slack
classic: true
supported_architectures:
- amd64# AppImage packages for applications not in other package managers
appimage_packages:
- name: cursor
url: "https://downloader.cursor.sh/linux/appImage/x64"
comment: "Cursor AI Code Editor"
categories: "Development;IDE;"
mime_types: "text/plain;"
# checksum: "sha256:abc123..." # Optional checksum verification
# no_sandbox: true # Optional: disable Chromium sandboxUbuntu uses objects with command and description keys:
# Commands executed as the current user
custom_commands_user:
- command: pipx ensurepath
description: Ensure pipx is in PATH
- command: git lfs install
description: Install Git LFS
# Commands executed with sudo privileges
custom_commands_elevated:
- command: usermod -aG docker $USER
description: Add current user to Docker group# Windows Subsystem for Linux specific settings
is_wsl: false # Set to true when running in WSL environment
# AppImage install directory
appimage_install_dir: "{{ ansible_env.HOME }}/.local/bin"# Essential packages installed first
dnf_packages_prereqs:
- name: ca-certificates # Certificate authority certs
- name: curl # HTTP client
- name: wget # Download utility
- name: dnf-plugins-core # DNF plugin support
- name: fuse-libs # For AppImage packages# Additional DNF repositories (yum_repository format)
external_dnf_repositories: [] # Currently empty; add repos as neededFedora uses objects with a name key:
# System packages and command-line tools
dnf_packages:
- name: git # Version control
- name: cmake # Build tool
- name: golang # Go programming language
- name: nodejs # Node.js runtime
- name: code # Visual Studio CodeFlatpak packages also use objects (currently empty by default):
# GUI applications via Flatpak
flatpak_packages: [] # Add Flathub app IDs as needed# AppImage packages for applications not in other package managers
appimage_packages:
- name: cursor
url: "https://downloader.cursor.sh/linux/appImage/x64"
comment: "Cursor AI Code Editor"
categories: "Development;IDE;"
mime_types: "text/plain;"Fedora uses objects with command and description keys:
# Commands executed as the current user
custom_commands_user:
- command: pipx ensurepath
description: Ensure pipx is in PATH
- command: git lfs install
description: Install Git LFS
# Commands executed with sudo privileges
custom_commands_elevated:
- command: usermod -aG docker $USER
description: Add current user to Docker group# Windows Subsystem for Linux specific settings
is_wsl: false # Set to true when running in WSL environment
# AppImage install directory
appimage_install_dir: "{{ ansible_env.HOME }}/.local/bin"Debian uses gnupg instead of Ubuntu's software-properties-common,
since Ubuntu PPAs are not compatible with Debian:
# Essential packages installed first
apt_packages_prereqs:
- name: apt-transport-https # HTTPS transport for APT
- name: ca-certificates # Certificate authority certs
- name: curl # HTTP client
- name: gnupg # GPG for repository key management
- name: libfuse2 # For AppImage packagesDebian uses the same deb822 format as Ubuntu,
but repository URIs differ (e.g., /linux/debian instead of /linux/ubuntu):
# Additional repositories using deb822 format
external_apt_repositories:
- name: docker
signed_by: https://download.docker.com/linux/debian/gpg
uris: https://download.docker.com/linux/debian
suites: "{{ ansible_distribution_release }}"
components: stable
architectures: "{{ deb_architecture }}"Debian uses objects with a name key and optional supported_architectures:
# System packages and command-line tools
apt_packages:
- name: git # Version control
- name: build-essential # Compilation tools
- name: docker-ce # Docker engine
- name: code # Visual Studio Code
- name: google-chrome-stable # Web browser
supported_architectures:
- amd64 # Skip on ARM64Debian uses Flatpak (not Snap) for GUI applications:
# GUI applications via Flatpak
flatpak_packages:
- name: com.jgraph.drawio.desktop
supported_architectures:
- amd64
- name: com.slack.Slack
supported_architectures:
- amd64# AppImage packages for applications not in other package managers
appimage_packages:
- name: cursor
url: "https://downloader.cursor.sh/linux/appImage/x64"
comment: "Cursor AI Code Editor"
categories: "Development;IDE;"
mime_types: "text/plain;"Debian uses objects with command and description keys:
# Commands executed as the current user
custom_commands_user:
- command: pipx ensurepath
description: Ensure pipx is in PATH
- command: git lfs install
description: Install Git LFS
# Commands executed with sudo privileges
custom_commands_elevated:
- command: usermod -aG docker $USER
description: Add current user to Docker groupExtensions use the same format across all platforms:
vscode_extensions:
# GitHub integration
- github.copilot # GitHub Copilot
- github.copilot-chat # Copilot Chat
- github.vscode-pull-request-github # PR management
# Language support
- ms-python.python # Python
- golang.go # Go
- rust-lang.rust-analyzer # Rust
- ms-dotnettools.csharp # C#
# Development tools
- ms-azuretools.vscode-docker # Docker support
- hashicorp.terraform # Terraform
- ms-kubernetes-tools.vscode-kubernetes-tools # Kubernetes
# Code quality
- esbenp.prettier-vscode # Code formatter
- streetsidesoftware.code-spell-checker # Spell checker
- usernamehw.errorlens # Inline error displayPowerShell modules use consistent names across platforms:
powershell_modules:
# Azure tools
- Az.Accounts # Azure authentication
- Az.Resources # Azure resource management
# AWS tools
- AWS.Tools.Common # AWS PowerShell common
- AWS.Tools.EC2 # AWS EC2 management
# Development tools
- posh-git # Git integration for PowerShell
- PSReadLine # Enhanced command line editing
- PSScriptAnalyzer # PowerShell script analysis
# Utility modules
- powershell-yaml # YAML parsing
- Microsoft.Graph.Authentication # Microsoft GraphPython CLI tools installed via uv tool install.
On macOS and Windows, uv is available via the system package manager
(Homebrew/Chocolatey).
On Linux, pipx bootstraps uv, then uv manages the rest:
uv_tools:
# Development tools
- poetry # Dependency management
- ruff # Linting and formatting
# AWS tools
- taskcat # CloudFormation testing
- cfn-lint # CloudFormation linting
# DevOps tools
- ansible # Automation (where not system package)
- cookiecutter # Project templating# Git user settings
git_user_email: 'user@example.com' # Required: Your Git email
git_user_name: 'Full Name' # Optional: Defaults to system full name
# Advanced Git configuration (via custom commands)
custom_commands_user:
# Set default branch name
- git config --global init.defaultBranch main
# Enable rerere (reuse recorded resolution)
- git config --global rerere.enabled true
# Set pull strategy
- git config --global pull.rebase false# Set environment variables via custom commands
custom_commands_user:
# Set development environment
- echo 'export ENVIRONMENT=development' >> ~/.bashrc
# Configure editor
- echo 'export EDITOR=code' >> ~/.bashrc
# macOS specific
- echo 'export HOMEBREW_NO_ANALYTICS=1' >> ~/.zshrc
# Windows specific (PowerShell profile)
- Add-Content $PROFILE '$env:EDITOR = "code"'# Path to custom script (relative or absolute)
custom_script: './custom_setup.sh' # Unix platforms
custom_script: './custom_setup.ps1' # Windows platformExample custom script structure:
#!/bin/bash
# custom_setup.sh
echo "Running custom setup..."
# Install additional tools not in package managers
curl -sSL https://get.docker.com | sh
# Configure development directories
mkdir -p ~/Development/{personal,work,experiments}
# Set up SSH keys
ssh-keygen -t ed25519 -C "user@example.com" -f ~/.ssh/id_ed25519 -N ""
echo "Custom setup complete!"Some fields are required for proper operation:
# Required on all platforms
git_user_email: 'user@example.com' # Must be set or passed via -e flag
# Platform-specific required fields
# (Most other fields have sensible defaults)# Boolean values
install_rosetta: true # true or false
is_wsl: false # true or false
# String values
git_user_email: 'user@example.com' # Single-quoted strings
custom_script: './setup.sh' # File paths
# Arrays of strings
homebrew_formulae: # YAML array format
- git
- docker
# Arrays of objects (Windows Chocolatey)
choco_packages:
- name: git # Object with 'name' field
- name: docker-desktopYAML files support comments for documentation:
# This is a comment explaining the next section
homebrew_formulae:
- git # Version control system
- docker # Container runtime
# - disabled-package # This package is temporarily disabledThe same software may have different package names:
| Software | macOS (Homebrew) | Windows (Chocolatey) | Ubuntu (APT/Snap) | Debian (APT/Flatpak) | Fedora (DNF/Flatpak) |
|---|---|---|---|---|---|
| VS Code | visual-studio-code |
vscode |
code (snap) |
code (apt) |
com.visualstudio.code (flatpak) |
| Node.js | node |
nodejs |
nodejs (apt) |
nodejs (apt) |
nodejs (dnf) |
| Docker | docker-desktop |
docker-desktop |
docker.io (apt) |
docker-ce (apt) |
docker-ce (dnf) |
| Git | git |
git |
git (apt) |
git (apt) |
git (dnf) |
Custom commands must use platform-appropriate syntax:
# macOS/Ubuntu/Debian (Bash)
custom_commands_user:
- echo "Hello World"
- mkdir -p ~/Development
# Windows (PowerShell)
custom_commands_user:
- Write-Host "Hello World"
- New-Item -ItemType Directory -Path ~/Development -ForceUse appropriate path separators:
# macOS/Ubuntu/Debian
custom_script: './examples/custom_script.sh'
# Windows
custom_script: './examples/custom_script.ps1'# Group related packages together with comments
# =================================
# Version Control and Git Tools
# =================================
homebrew_formulae:
- git
- git-lfs
- gh
# =================================
# Container and Orchestration Tools
# =================================
- docker
- kubectl
- helm# Include version comments for packages with specific requirements
homebrew_formulae:
- terraform # Latest stable version
- node@18 # Specific LTS version required for project compatibility
# Document why packages are included
vscode_extensions:
- github.copilot # AI coding assistance for team productivity
- ms-python.python # Python development support# Avoid hardcoding sensitive information
git_user_email: '' # Set via command line: ./setup.sh -e "user@example.com"
# Don't include credentials in config files
custom_commands_user:
# ❌ Don't do this
# - aws configure set aws_access_key_id AKIA...
# ✅ Do this instead
- echo "Please configure AWS credentials manually: aws configure"This configuration reference provides all the details needed
to customize your development environment setup across all supported platforms.
Use this as a comprehensive guide when creating or modifying your vars.yaml files.