Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
9e379d5
Initial plan
Copilot Nov 25, 2025
d164d57
Add cursor, vscode, figma, claude, claude-cli, and spotify
Copilot Nov 25, 2025
5701fb7
Change claude-cli to claude-code as cask app
Copilot Nov 25, 2025
ef358b2
Replace docker with orbstack
Copilot Nov 25, 2025
7c62594
Add 1password and loom cask apps
Copilot Nov 25, 2025
ec19f62
Add development tools: Cursor, VS Code, Figma, Claude, OrbStack, 1Pas…
Copilot Nov 30, 2025
744c047
Add notion desktop cask app
Copilot Nov 30, 2025
ade0016
Merge pull request #1 from goprzm/copilot/add-cursor-support
kltdwrds Dec 1, 2025
0193447
Merge branch 'geerlingguy:master' into master
kltdwrds Dec 3, 2025
b9610a5
Initial plan
Copilot Dec 3, 2025
6496bc0
Add Granola AI notetaking app to homebrew_cask_apps
Copilot Dec 3, 2025
7f06cab
Change title to 'PRZM MacBook Development Ansible Playbook'
kltdwrds Dec 8, 2025
1bf2b86
Merge pull request #2 from goprzm/copilot/add-granola-ai-notetaking
kltdwrds Dec 8, 2025
09559f2
Initial plan
Copilot Dec 8, 2025
578b1f5
Update README with complete list of applications and packages from de…
Copilot Dec 8, 2025
b8b0d78
Merge pull request #3 from goprzm/copilot/update-readme-installs
kltdwrds Dec 8, 2025
affdb0a
Improve user onboarding
kltdwrds Dec 14, 2025
90490c7
dev and macos settings
kltdwrds Dec 15, 2025
4ede319
fix git configg
kltdwrds Dec 15, 2025
7f36970
Enhance development setup by updating PATH and configuring GitHub PAT…
kltdwrds Dec 19, 2025
0e533f3
Merge pull request #4 from goprzm/magical-tu
kltdwrds Dec 19, 2025
dedfba1
fix warnings and add a merge git config
kltdwrds Dec 20, 2025
833f148
apply tool-versions globablly
Jan 8, 2026
8ec9bba
add superwhisper to installation
Jan 8, 2026
99fe909
clean up unused apps and add superwhisper
Jan 8, 2026
3190b54
add rectangle (window management software)
Jan 8, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 37 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<img src="https://raw.githubusercontent.com/geerlingguy/mac-dev-playbook/master/files/Mac-Dev-Playbook-Logo.png" width="250" height="156" alt="Mac Dev Playbook Logo" />

# Mac Development Ansible Playbook
# PRZM MacBook Development Ansible Playbook

[![CI][badge-gh-actions]][link-gh-actions]

Expand All @@ -9,15 +9,29 @@ This playbook installs and configures most of the software I use on my Mac for w
## Installation

1. Ensure Apple's command line tools are installed (`xcode-select --install` to launch the installer).
2. [Install Ansible](https://docs.ansible.com/ansible/latest/installation_guide/index.html):

1. Run the following command to add Python 3 to your $PATH: `export PATH="$HOME/Library/Python/3.9/bin:/opt/homebrew/bin:$PATH"`
2. Upgrade Pip: `sudo pip3 install --upgrade pip`
3. Install Ansible: `pip3 install ansible`

3. Clone or download this repository to your local drive.
4. Run `ansible-galaxy install -r requirements.yml` inside this directory to install required Ansible roles.
5. Run `ansible-playbook main.yml --ask-become-pass` inside this directory. Enter your macOS account password when prompted for the 'BECOME' password.
2. Install Homebrew (if not already installed):
```bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```
After installation, follow the instructions to add Homebrew to your PATH (or open a new terminal).
3. Install Ansible via Homebrew:
```bash
brew install ansible
```
4. Clone this repository:
```bash
git clone https://github.com/goprzm/mac-dev-playbook.git
cd mac-dev-playbook
```
5. Install required Ansible roles:
```bash
ansible-galaxy install -r requirements.yml
```
6. Run the playbook:
```bash
ansible-playbook main.yml --ask-become-pass
```
Enter your macOS account password when prompted for the 'BECOME' password.

> Note: If some Homebrew commands fail, you might need to agree to Xcode's license or fix some other Brew issue. Run `brew doctor` to see if this is the case.

Expand Down Expand Up @@ -94,19 +108,27 @@ Any variable can be overridden in `config.yml`; see the supporting roles' docume

Applications (installed with Homebrew Cask):

- [1Password](https://1password.com/)
- [ChromeDriver](https://sites.google.com/chromium.org/driver/)
- [Docker](https://www.docker.com/)
- [Claude](https://claude.ai/)
- [Claude Code](https://www.anthropic.com/)
- [Cursor](https://cursor.sh/)
- [Dropbox](https://www.dropbox.com/)
- [Figma](https://www.figma.com/)
- [Firefox](https://www.mozilla.org/en-US/firefox/new/)
- [Google Chrome](https://www.google.com/chrome/)
- [Granola](https://www.granola.so/)
- [Handbrake](https://handbrake.fr/)
- [Homebrew](http://brew.sh/)
- [LICEcap](http://www.cockos.com/licecap/)
- [nvALT](http://brettterpstra.com/projects/nvalt/)
- [Loom](https://www.loom.com/)
- [Notion](https://www.notion.so/)
- [OrbStack](https://orbstack.dev/)
- [Sequel Ace](https://sequel-ace.com) (MySQL client)
- [Slack](https://slack.com/)
- [Spotify](https://www.spotify.com/)
- [Sublime Text](https://www.sublimetext.com/)
- [Transmit](https://panic.com/transmit/) (S/FTP client)
- [Visual Studio Code](https://code.visualstudio.com/)

Packages (installed with Homebrew):

Expand All @@ -127,6 +149,8 @@ Packages (installed with Homebrew):
- node
- nvm
- php
- pngpaste
- pscale
- ssh-copy-id
- readline
- openssl
Expand Down
33 changes: 30 additions & 3 deletions default.config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,21 @@
configure_dotfiles: true
configure_terminal: true
configure_osx: true
configure_macos_settings: true

# Accept apps that were installed outside of Homebrew (adopts existing apps).
homebrew_cask_accept_external_apps: true

# Development setup configuration.
configure_development_setup: true
przm_repo: https://github.com/goprzm/przm.git
przm_repo_version: master
open_vscode_after_clone: true
open_orbstack_after_setup: true
open_granola_after_setup: true
open_claude_after_setup: true
open_1password_after_setup: true
desktop_color: Black # Options: Black, Silver, Stone, Teal, Space Gray, etc.

# Set to 'true' to configure the Dock via dockutil.
configure_dock: false
Expand Down Expand Up @@ -49,10 +64,10 @@ homebrew_installed_packages:
- libevent
- sqlite
- nmap
- node
- nvm
- asdf # Version manager for node, pnpm, etc. Uses .tool-versions
- php
- pngpaste
- pscale
- ssh-copy-id
- readline
- openssl
Expand All @@ -65,17 +80,29 @@ homebrew_taps: []

homebrew_cask_appdir: /Applications
homebrew_cask_apps:
- 1password
- chromedriver
- docker
- claude
- claude-code
- cursor
- dropbox
- figma
- firefox
- google-chrome
- granola
- handbrake
- licecap
- loom
- notion
- orbstack
- rectangle
- sequel-ace
- slack
- spotify
- sublime-text
- superwhisper
- transmit
- visual-studio-code

# See `geerlingguy.mac.mas` role documentation for usage instructions.
mas_installed_apps: []
Expand Down
149 changes: 149 additions & 0 deletions mac-dev-playbook/default.config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
---
configure_dotfiles: true
configure_terminal: true
configure_osx: true
configure_macos_settings: true

# Accept apps that were installed outside of Homebrew (adopts existing apps).
homebrew_cask_accept_external_apps: true

# Development setup configuration.
configure_development_setup: true
przm_repo: https://github.com/goprzm/przm.git
przm_repo_version: master
open_vscode_after_clone: true
open_orbstack_after_setup: true
open_granola_after_setup: true
open_claude_after_setup: true
open_1password_after_setup: true
desktop_color: Black # Options: Black, Silver, Stone, Teal, Space Gray, etc.

# Set to 'true' to configure the Dock via dockutil.
configure_dock: false
dockitems_remove: []
# - Launchpad
# - TV
# - Podcasts
# - 'App Store'
dockitems_persist: []
# - name: "Sublime Text"
# path: "/Applications/Sublime Text.app/"
# pos: 5

configure_sudoers: false
sudoers_custom_config: ""
# Example:
# sudoers_custom_config: |
# # Allow users in admin group to use sudo with no password.
# %admin ALL=(ALL) NOPASSWD: ALL

dotfiles_repo: https://github.com/geerlingguy/dotfiles.git
dotfiles_repo_accept_hostkey: true
dotfiles_repo_local_destination: ~/Development/GitHub/dotfiles
dotfiles_repo_version: master # Replace with your default branch
dotfiles_files:
- .zshrc
- .gitignore
- .inputrc
- .osx
- .vimrc

homebrew_installed_packages:
# - ansible # Installed via Pip.
- autoconf
- bash-completion
- doxygen
- gettext
- gifsicle
- git
- gh
- go
- gpg
- httpie
- iperf
- libevent
- sqlite
- nmap
- asdf # Version manager for node, pnpm, etc. Uses .tool-versions
- php
- pngpaste
- pscale
- ssh-copy-id
- readline
- openssl
- pv
- wget
- wrk
- zsh-history-substring-search

homebrew_taps: []

homebrew_cask_appdir: /Applications
homebrew_cask_apps:
- 1password
- chromedriver
- claude
- claude-code
- cursor
- dropbox
- figma
- firefox
- google-chrome
- granola
- licecap
- loom
- notion
- orbstack
- sequel-ace
- slack
- spotify
- superwhisper
- visual-studio-code

# See `geerlingguy.mac.mas` role documentation for usage instructions.
mas_installed_apps: []
mas_email: ""
mas_password: ""

osx_script: "~/.osx --no-restart"

# Install packages from other package managers.
# Note: You are responsible for making sure the required package managers are
# installed, eg. through homebrew.
composer_packages: []
# - name: drush
# state: present # present/absent, default: present
# version: "^8.1" # default: N/A
gem_packages: []
# - name: bundler
# state: present # present/absent/latest, default: present
# version: "~> 1.15.1" # default: N/A
npm_packages: []
# - name: webpack
# state: present # present/absent/latest, default: present
# version: "^2.6" # default: N/A
pip_packages: []
# - name: mkdocs
# state: present # present/absent/latest, default: present
# version: "0.16.3" # default: N/A

# Set to 'true' to configure Sublime Text.
configure_sublime: false
sublime_base_path: "~/Library/Application Support/Sublime Text"
sublime_config_path: "Packages/User"
sublime_package_control:
- "DocBlockr"
- "Dockerfile Syntax Highlighting"
- "FileDiffs"
- "GitHub Flavored Markdown Preview"
- "Jinja2"
- "Package Control"
- "Pretty JSON"
- "SublimeLinter"
- "SublimeLinter-contrib-yamllint"
- "Theme - Cobalt2"
- "TrailingSpaces"
- "WordingStatus"

# Glob pattern to ansible task files to run after all other tasks are finished.
post_provision_tasks: []
17 changes: 17 additions & 0 deletions main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,15 @@
- name: Configure host.
hosts: all

vars_prompt:
- name: git_user_name
prompt: "Enter your full name"
private: false

- name: work_email
prompt: "Enter your work email"
private: false

vars_files:
- default.config.yml

Expand Down Expand Up @@ -46,6 +55,14 @@
when: configure_sublime
tags: ['sublime-text']

- import_tasks: tasks/development-setup.yml
when: configure_development_setup
tags: ['development-setup']

- import_tasks: tasks/macos-settings.yml
when: configure_macos_settings
tags: ['macos-settings']

- name: Run post-provision task files in a block.
tags: ['post']
block:
Expand Down
1 change: 1 addition & 0 deletions requirements.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,4 @@ roles:

collections:
- name: geerlingguy.mac
version: ">=4.2.0"
Loading
Loading