From 9e379d5b4325d0afb3ebebf6976fe1b4b5b73300 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Tue, 25 Nov 2025 20:47:01 +0000
Subject: [PATCH 01/21] Initial plan
From d164d575ace0ad56592d5e4d7d4e1cd57e06621c Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Tue, 25 Nov 2025 20:52:20 +0000
Subject: [PATCH 02/21] Add cursor, vscode, figma, claude, claude-cli, and
spotify
Co-authored-by: kltdwrds <5615037+kltdwrds@users.noreply.github.com>
---
default.config.yml | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/default.config.yml b/default.config.yml
index 35aca2970..c29be745f 100644
--- a/default.config.yml
+++ b/default.config.yml
@@ -37,6 +37,7 @@ homebrew_installed_packages:
# - ansible # Installed via Pip.
- autoconf
- bash-completion
+ - claude-cli
- doxygen
- gettext
- gifsicle
@@ -66,16 +67,21 @@ homebrew_taps: []
homebrew_cask_appdir: /Applications
homebrew_cask_apps:
- chromedriver
+ - claude
+ - cursor
- docker
- dropbox
+ - figma
- firefox
- google-chrome
- handbrake
- licecap
- sequel-ace
- slack
+ - spotify
- sublime-text
- transmit
+ - visual-studio-code
# See `geerlingguy.mac.mas` role documentation for usage instructions.
mas_installed_apps: []
From 5701fb740e30d094b12cbb83309e640698d1940d Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Tue, 25 Nov 2025 21:32:31 +0000
Subject: [PATCH 03/21] Change claude-cli to claude-code as cask app
Co-authored-by: kltdwrds <5615037+kltdwrds@users.noreply.github.com>
---
default.config.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/default.config.yml b/default.config.yml
index c29be745f..f608226ab 100644
--- a/default.config.yml
+++ b/default.config.yml
@@ -37,7 +37,6 @@ homebrew_installed_packages:
# - ansible # Installed via Pip.
- autoconf
- bash-completion
- - claude-cli
- doxygen
- gettext
- gifsicle
@@ -68,6 +67,7 @@ homebrew_cask_appdir: /Applications
homebrew_cask_apps:
- chromedriver
- claude
+ - claude-code
- cursor
- docker
- dropbox
From ef358b2b123eb48dd9a65b5c93017e9d06585e2a Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Tue, 25 Nov 2025 22:04:45 +0000
Subject: [PATCH 04/21] Replace docker with orbstack
Co-authored-by: kltdwrds <5615037+kltdwrds@users.noreply.github.com>
---
default.config.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/default.config.yml b/default.config.yml
index f608226ab..ce9d03d0c 100644
--- a/default.config.yml
+++ b/default.config.yml
@@ -69,13 +69,13 @@ homebrew_cask_apps:
- claude
- claude-code
- cursor
- - docker
- dropbox
- figma
- firefox
- google-chrome
- handbrake
- licecap
+ - orbstack
- sequel-ace
- slack
- spotify
From 7c6259438720191854ea0ed22bc9857c54676ecd Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Tue, 25 Nov 2025 22:09:45 +0000
Subject: [PATCH 05/21] Add 1password and loom cask apps
Co-authored-by: kltdwrds <5615037+kltdwrds@users.noreply.github.com>
---
default.config.yml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/default.config.yml b/default.config.yml
index ce9d03d0c..ab60ef68c 100644
--- a/default.config.yml
+++ b/default.config.yml
@@ -65,6 +65,7 @@ homebrew_taps: []
homebrew_cask_appdir: /Applications
homebrew_cask_apps:
+ - 1password
- chromedriver
- claude
- claude-code
@@ -75,6 +76,7 @@ homebrew_cask_apps:
- google-chrome
- handbrake
- licecap
+ - loom
- orbstack
- sequel-ace
- slack
From ec19f622f8cf0905a0ce86e0e153bb7f8188c301 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Sun, 30 Nov 2025 21:20:01 +0000
Subject: [PATCH 06/21] Add development tools: Cursor, VS Code, Figma, Claude,
OrbStack, 1Password, Loom, Spotify, and PlanetScale CLI
Co-authored-by: kltdwrds <5615037+kltdwrds@users.noreply.github.com>
---
default.config.yml | 1 +
1 file changed, 1 insertion(+)
diff --git a/default.config.yml b/default.config.yml
index ab60ef68c..39eea87b7 100644
--- a/default.config.yml
+++ b/default.config.yml
@@ -53,6 +53,7 @@ homebrew_installed_packages:
- nvm
- php
- pngpaste
+ - pscale
- ssh-copy-id
- readline
- openssl
From 744c0474a966e613e93d08fb1298f8ddab1e9ff0 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Sun, 30 Nov 2025 21:29:00 +0000
Subject: [PATCH 07/21] Add notion desktop cask app
Co-authored-by: kltdwrds <5615037+kltdwrds@users.noreply.github.com>
---
default.config.yml | 1 +
1 file changed, 1 insertion(+)
diff --git a/default.config.yml b/default.config.yml
index 39eea87b7..3cd10daa4 100644
--- a/default.config.yml
+++ b/default.config.yml
@@ -78,6 +78,7 @@ homebrew_cask_apps:
- handbrake
- licecap
- loom
+ - notion
- orbstack
- sequel-ace
- slack
From b9610a57925aac76987888c449de090e7cb98bfd Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 3 Dec 2025 18:31:26 +0000
Subject: [PATCH 08/21] Initial plan
From 6496bc06669035da37928a3a427decc2607e75e4 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 3 Dec 2025 18:35:47 +0000
Subject: [PATCH 09/21] Add Granola AI notetaking app to homebrew_cask_apps
Co-authored-by: kltdwrds <5615037+kltdwrds@users.noreply.github.com>
---
default.config.yml | 1 +
1 file changed, 1 insertion(+)
diff --git a/default.config.yml b/default.config.yml
index 3cd10daa4..c1d687c84 100644
--- a/default.config.yml
+++ b/default.config.yml
@@ -75,6 +75,7 @@ homebrew_cask_apps:
- figma
- firefox
- google-chrome
+ - granola
- handbrake
- licecap
- loom
From 7f06cab99a7f23820797cbf5f14c4c291dd672c5 Mon Sep 17 00:00:00 2001
From: "Kyle T. Edwards" <5615037+kltdwrds@users.noreply.github.com>
Date: Mon, 8 Dec 2025 13:04:58 -0500
Subject: [PATCH 10/21] Change title to 'PRZM MacBook Development Ansible
Playbook'
Updated the title of the playbook in README.
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index e848816e7..9c422ea18 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
-# Mac Development Ansible Playbook
+# PRZM MacBook Development Ansible Playbook
[![CI][badge-gh-actions]][link-gh-actions]
From 09559f23a4b33534c606f9e9965bcec3b7129b88 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Mon, 8 Dec 2025 18:19:07 +0000
Subject: [PATCH 11/21] Initial plan
From 578b1f5f4f7e7c6feacc3fcaa51151cf07c54293 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Mon, 8 Dec 2025 18:23:18 +0000
Subject: [PATCH 12/21] Update README with complete list of applications and
packages from default.config.yml
Co-authored-by: kltdwrds <5615037+kltdwrds@users.noreply.github.com>
---
README.md | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)
diff --git a/README.md b/README.md
index 9c422ea18..f08c48325 100644
--- a/README.md
+++ b/README.md
@@ -94,19 +94,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):
@@ -127,6 +135,8 @@ Packages (installed with Homebrew):
- node
- nvm
- php
+ - pngpaste
+ - pscale
- ssh-copy-id
- readline
- openssl
From affdb0a7a80ec80aa9b536b954b34f6ae66e0bac Mon Sep 17 00:00:00 2001
From: Kyle Edwards
Date: Sat, 13 Dec 2025 19:36:13 -0500
Subject: [PATCH 13/21] Improve user onboarding
---
README.md | 32 +++++--
default.config.yml | 9 ++
main.yml | 9 ++
tasks/development-setup.yml | 83 +++++++++++++++++++
templates/Package_Control.sublime-settings.j2 | 13 ---
5 files changed, 124 insertions(+), 22 deletions(-)
create mode 100644 tasks/development-setup.yml
delete mode 100755 templates/Package_Control.sublime-settings.j2
diff --git a/README.md b/README.md
index f08c48325..b54602b23 100644
--- a/README.md
+++ b/README.md
@@ -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.
diff --git a/default.config.yml b/default.config.yml
index c1d687c84..cb807e921 100644
--- a/default.config.yml
+++ b/default.config.yml
@@ -3,6 +3,15 @@ configure_dotfiles: true
configure_terminal: true
configure_osx: true
+# Development setup configuration.
+configure_development_setup: true
+git_user_name: "" # Set your git user name here
+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
+
# Set to 'true' to configure the Dock via dockutil.
configure_dock: false
dockitems_remove: []
diff --git a/main.yml b/main.yml
index a1ec9d64d..bd90601bb 100644
--- a/main.yml
+++ b/main.yml
@@ -2,6 +2,11 @@
- name: Configure host.
hosts: all
+ vars_prompt:
+ - name: work_email
+ prompt: "Enter your work email (@goprzm.com)"
+ private: false
+
vars_files:
- default.config.yml
@@ -46,6 +51,10 @@
when: configure_sublime
tags: ['sublime-text']
+ - import_tasks: tasks/development-setup.yml
+ when: configure_development_setup
+ tags: ['development-setup']
+
- name: Run post-provision task files in a block.
tags: ['post']
block:
diff --git a/tasks/development-setup.yml b/tasks/development-setup.yml
new file mode 100644
index 000000000..23d90e0cd
--- /dev/null
+++ b/tasks/development-setup.yml
@@ -0,0 +1,83 @@
+---
+- name: Ensure ~/Development directory exists.
+ file:
+ path: ~/Development
+ state: directory
+ mode: "0755"
+
+- name: Configure git global user email.
+ community.general.git_config:
+ name: user.email
+ scope: global
+ value: "{{ work_email }}"
+
+- name: Configure git global user name.
+ community.general.git_config:
+ name: user.name
+ scope: global
+ value: "{{ git_user_name }}"
+ when: git_user_name is defined and git_user_name | length > 0
+
+- name: Check GitHub CLI authentication status.
+ command: gh auth status
+ register: gh_auth_status
+ changed_when: false
+ failed_when: false
+
+- name: Prompt user to authenticate with GitHub CLI.
+ when: gh_auth_status.rc != 0
+ block:
+ - name: Display GitHub authentication instructions.
+ pause:
+ prompt: |
+
+ ╔════════════════════════════════════════════════════════════════╗
+ ║ GitHub CLI authentication required ║
+ ╠════════════════════════════════════════════════════════════════╣
+ ║ Please open a NEW terminal window and run: ║
+ ║ ║
+ ║ gh auth login ║
+ ║ ║
+ ║ Once authenticated, press ENTER here to continue... ║
+ ╚════════════════════════════════════════════════════════════════╝
+
+ - name: Verify GitHub CLI authentication after prompt.
+ command: gh auth status
+ changed_when: false
+
+- name: Configure gh git protocol to use https.
+ command: gh config set git_protocol https
+ changed_when: false
+
+- name: Setup gh as git credential helper.
+ command: gh auth setup-git
+ changed_when: false
+
+- name: Clone PRZM repository.
+ git:
+ repo: "{{ przm_repo }}"
+ dest: ~/Development/przm
+ version: "{{ przm_repo_version }}"
+ accept_hostkey: true
+ register: przm_clone_result
+ ignore_errors: true
+
+- name: Display clone result.
+ debug:
+ msg: "PRZM repository cloned successfully to ~/Development/przm"
+ when: przm_clone_result is succeeded
+
+- name: Open VSCode with PRZM repository.
+ command: open -a "Visual Studio Code" ~/Development/przm
+ changed_when: false
+ when: open_vscode_after_clone
+
+- name: Open OrbStack.
+ command: open -a "OrbStack"
+ changed_when: false
+ when: open_orbstack_after_setup
+
+- name: Open Granola.
+ command: open -a "Granola"
+ changed_when: false
+ when: open_granola_after_setup
diff --git a/templates/Package_Control.sublime-settings.j2 b/templates/Package_Control.sublime-settings.j2
deleted file mode 100755
index 5275151e4..000000000
--- a/templates/Package_Control.sublime-settings.j2
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "auto_upgrade_last_run": null,
- "bootstrapped": true,
- "in_process_packages":
- [
- ],
- "installed_packages":
- [
-{% for package in sublime_package_control %}
- "{{ package }}"{% if not loop.last %},{% endif %}
-{% endfor %}
-],
-}
From 90490c7dcc0427cd2b19b88f6fa23221eea1a437 Mon Sep 17 00:00:00 2001
From: Kyle Edwards
Date: Sun, 14 Dec 2025 23:43:48 -0500
Subject: [PATCH 14/21] dev and macos settings
---
default.config.yml | 10 +++++--
main.yml | 4 +++
tasks/development-setup.yml | 52 +++++++++++++++++++++++++++++++++++++
tasks/macos-settings.yml | 28 ++++++++++++++++++++
4 files changed, 92 insertions(+), 2 deletions(-)
create mode 100644 tasks/macos-settings.yml
diff --git a/default.config.yml b/default.config.yml
index cb807e921..a7ada2b03 100644
--- a/default.config.yml
+++ b/default.config.yml
@@ -2,6 +2,10 @@
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
@@ -11,6 +15,9 @@ 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
@@ -58,8 +65,7 @@ homebrew_installed_packages:
- libevent
- sqlite
- nmap
- - node
- - nvm
+ - asdf # Version manager for node, pnpm, etc. Uses .tool-versions
- php
- pngpaste
- pscale
diff --git a/main.yml b/main.yml
index bd90601bb..a95d88015 100644
--- a/main.yml
+++ b/main.yml
@@ -55,6 +55,10 @@
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:
diff --git a/tasks/development-setup.yml b/tasks/development-setup.yml
index 23d90e0cd..cdf27646b 100644
--- a/tasks/development-setup.yml
+++ b/tasks/development-setup.yml
@@ -67,6 +67,48 @@
msg: "PRZM repository cloned successfully to ~/Development/przm"
when: przm_clone_result is succeeded
+- name: Add asdf initialization to shell config.
+ blockinfile:
+ path: ~/.zshrc
+ marker: "# {mark} ANSIBLE MANAGED - asdf"
+ block: |
+ # asdf version manager
+ source $(brew --prefix asdf)/libexec/asdf.sh
+ insertafter: EOF
+
+- name: Add pnpm completion to shell config.
+ blockinfile:
+ path: ~/.zshrc
+ marker: "# {mark} ANSIBLE MANAGED - pnpm completion"
+ block: |
+ # pnpm shell completion
+ source <(pnpm completion zsh)
+ insertafter: EOF
+
+- name: Check if przm repo exists.
+ stat:
+ path: ~/Development/przm/.tool-versions
+ register: przm_tool_versions
+
+- name: Add asdf plugins for nodejs and pnpm.
+ shell: |
+ source $(brew --prefix asdf)/libexec/asdf.sh
+ asdf plugin add nodejs || true
+ asdf plugin add pnpm || true
+ args:
+ executable: /bin/zsh
+ changed_when: false
+ when: przm_tool_versions.stat.exists
+
+- name: Install tools from .tool-versions via asdf.
+ shell: |
+ source $(brew --prefix asdf)/libexec/asdf.sh
+ cd ~/Development/przm
+ asdf install
+ args:
+ executable: /bin/zsh
+ when: przm_tool_versions.stat.exists
+
- name: Open VSCode with PRZM repository.
command: open -a "Visual Studio Code" ~/Development/przm
changed_when: false
@@ -81,3 +123,13 @@
command: open -a "Granola"
changed_when: false
when: open_granola_after_setup
+
+- name: Open Claude.
+ command: open -a "Claude"
+ changed_when: false
+ when: open_claude_after_setup
+
+- name: Open 1Password.
+ command: open -a "1Password"
+ changed_when: false
+ when: open_1password_after_setup
diff --git a/tasks/macos-settings.yml b/tasks/macos-settings.yml
new file mode 100644
index 000000000..97db1291f
--- /dev/null
+++ b/tasks/macos-settings.yml
@@ -0,0 +1,28 @@
+---
+- name: Set mouse tracking speed (0-3, 3 is fastest).
+ community.general.osx_defaults:
+ domain: NSGlobalDomain
+ key: com.apple.mouse.scaling
+ type: float
+ value: 3.0
+
+- name: Set trackpad tracking speed (0-3, 3 is fastest).
+ community.general.osx_defaults:
+ domain: NSGlobalDomain
+ key: com.apple.trackpad.scaling
+ type: float
+ value: 3.0
+
+- name: Set desktop wallpaper.
+ shell: osascript -e 'tell application "Finder" to set desktop picture to POSIX file "/System/Library/Desktop Pictures/Solid Colors/{{ desktop_color }}.png"'
+ changed_when: false
+ when: desktop_color is defined and desktop_color | length > 0
+
+- name: Add Development folder to Finder favorites.
+ shell: |
+ # Use sfltool to add to Finder favorites (macOS built-in)
+ sfltool add-item com.apple.LSSharedFileList.FavoriteItems file://$HOME/Development/
+ args:
+ executable: /bin/zsh
+ changed_when: false
+ ignore_errors: true
From 4ede3199f57c2f64103e7e5a221b12c127b84e41 Mon Sep 17 00:00:00 2001
From: Kyle Edwards
Date: Mon, 15 Dec 2025 00:08:28 -0500
Subject: [PATCH 15/21] fix git configg
---
default.config.yml | 1 -
main.yml | 6 +++++-
tasks/development-setup.yml | 1 -
3 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/default.config.yml b/default.config.yml
index a7ada2b03..ae1daf0e9 100644
--- a/default.config.yml
+++ b/default.config.yml
@@ -9,7 +9,6 @@ homebrew_cask_accept_external_apps: true
# Development setup configuration.
configure_development_setup: true
-git_user_name: "" # Set your git user name here
przm_repo: https://github.com/goprzm/przm.git
przm_repo_version: master
open_vscode_after_clone: true
diff --git a/main.yml b/main.yml
index a95d88015..fda2b051b 100644
--- a/main.yml
+++ b/main.yml
@@ -3,8 +3,12 @@
hosts: all
vars_prompt:
+ - name: git_user_name
+ prompt: "Enter your full name"
+ private: false
+
- name: work_email
- prompt: "Enter your work email (@goprzm.com)"
+ prompt: "Enter your work email"
private: false
vars_files:
diff --git a/tasks/development-setup.yml b/tasks/development-setup.yml
index cdf27646b..63d684616 100644
--- a/tasks/development-setup.yml
+++ b/tasks/development-setup.yml
@@ -16,7 +16,6 @@
name: user.name
scope: global
value: "{{ git_user_name }}"
- when: git_user_name is defined and git_user_name | length > 0
- name: Check GitHub CLI authentication status.
command: gh auth status
From 7f36970bf17b29aaafb198c7768f5fb2b0d26a38 Mon Sep 17 00:00:00 2001
From: Kyle Edwards
Date: Fri, 19 Dec 2025 18:31:03 -0500
Subject: [PATCH 16/21] Enhance development setup by updating PATH and
configuring GitHub PAT in .env.local
---
tasks/development-setup.yml | 64 +++++++++++++++++++++++++++++++++++++
1 file changed, 64 insertions(+)
diff --git a/tasks/development-setup.yml b/tasks/development-setup.yml
index 63d684616..bc346856c 100644
--- a/tasks/development-setup.yml
+++ b/tasks/development-setup.yml
@@ -84,6 +84,35 @@
source <(pnpm completion zsh)
insertafter: EOF
+- name: Add ~/.local/bin to PATH for Claude Code and other local binaries.
+ blockinfile:
+ path: ~/.zshrc
+ marker: "# {mark} ANSIBLE MANAGED - local bin path"
+ block: |
+ # Add ~/.local/bin to PATH (for Claude Code native installation, etc.)
+ export PATH="$HOME/.local/bin:$PATH"
+ insertafter: EOF
+
+- name: Add asdf shims to PATH for npm/pnpm/npx availability.
+ blockinfile:
+ path: ~/.zshrc
+ marker: "# {mark} ANSIBLE MANAGED - asdf shims"
+ block: |
+ # Ensure asdf shims are in PATH for npm, pnpm, npx, node
+ export PATH="$HOME/.asdf/shims:$PATH"
+ insertafter: EOF
+
+- name: Run claude install to configure Claude Code.
+ shell: |
+ export PATH="$HOME/.local/bin:/opt/homebrew/bin:$PATH"
+ if command -v claude &> /dev/null; then
+ claude install --yes 2>/dev/null || true
+ fi
+ args:
+ executable: /bin/zsh
+ changed_when: false
+ ignore_errors: true
+
- name: Check if przm repo exists.
stat:
path: ~/Development/przm/.tool-versions
@@ -108,6 +137,41 @@
executable: /bin/zsh
when: przm_tool_versions.stat.exists
+- name: Get GitHub token from gh CLI for MCP server.
+ command: gh auth token
+ register: gh_token_result
+ changed_when: false
+ failed_when: false
+
+- name: Check if .env.local exists in przm repo.
+ stat:
+ path: ~/Development/przm/.env.local
+ register: przm_env_local
+
+- name: Create .env.local with GitHub PAT if it doesn't exist.
+ copy:
+ dest: ~/Development/przm/.env.local
+ content: |
+ # GitHub Personal Access Token for MCP server
+ GITHUB_PERSONAL_ACCESS_TOKEN={{ gh_token_result.stdout }}
+ mode: "0600"
+ when:
+ - gh_token_result.rc == 0
+ - gh_token_result.stdout | length > 0
+ - not przm_env_local.stat.exists
+
+- name: Add GitHub PAT to existing .env.local if not present.
+ lineinfile:
+ path: ~/Development/przm/.env.local
+ line: "GITHUB_PERSONAL_ACCESS_TOKEN={{ gh_token_result.stdout }}"
+ regexp: "^GITHUB_PERSONAL_ACCESS_TOKEN="
+ state: present
+ mode: "0600"
+ when:
+ - gh_token_result.rc == 0
+ - gh_token_result.stdout | length > 0
+ - przm_env_local.stat.exists
+
- name: Open VSCode with PRZM repository.
command: open -a "Visual Studio Code" ~/Development/przm
changed_when: false
From dedfba1875eeb4e9e9e35ac152d58956b63a83c0 Mon Sep 17 00:00:00 2001
From: Kyle Edwards
Date: Sat, 20 Dec 2025 17:15:13 -0500
Subject: [PATCH 17/21] fix warnings and add a merge git config
---
requirements.yml | 1 +
tasks/development-setup.yml | 6 ++++++
2 files changed, 7 insertions(+)
diff --git a/requirements.yml b/requirements.yml
index f5815ad80..524965dc3 100644
--- a/requirements.yml
+++ b/requirements.yml
@@ -5,3 +5,4 @@ roles:
collections:
- name: geerlingguy.mac
+ version: ">=4.2.0"
diff --git a/tasks/development-setup.yml b/tasks/development-setup.yml
index bc346856c..611e5f016 100644
--- a/tasks/development-setup.yml
+++ b/tasks/development-setup.yml
@@ -17,6 +17,12 @@
scope: global
value: "{{ git_user_name }}"
+- name: Configure git pull strategy to use merge.
+ community.general.git_config:
+ name: pull.rebase
+ scope: global
+ value: "false"
+
- name: Check GitHub CLI authentication status.
command: gh auth status
register: gh_auth_status
From 833f148a557b32a84d0018dffb187d6a517f994f Mon Sep 17 00:00:00 2001
From: Christian Gamboa
Date: Thu, 8 Jan 2026 17:27:17 -0500
Subject: [PATCH 18/21] apply tool-versions globablly
---
tasks/development-setup.yml | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/tasks/development-setup.yml b/tasks/development-setup.yml
index 611e5f016..6ea500132 100644
--- a/tasks/development-setup.yml
+++ b/tasks/development-setup.yml
@@ -143,6 +143,23 @@
executable: /bin/zsh
when: przm_tool_versions.stat.exists
+- name: Copy .tool-versions to home directory for global availability.
+ copy:
+ src: ~/Development/przm/.tool-versions
+ dest: ~/.tool-versions
+ remote_src: yes
+ mode: "0644"
+ when: przm_tool_versions.stat.exists
+
+- name: Install tools globally from ~/.tool-versions.
+ shell: |
+ source $(brew --prefix asdf)/libexec/asdf.sh
+ cd ~
+ asdf install
+ args:
+ executable: /bin/zsh
+ when: przm_tool_versions.stat.exists
+
- name: Get GitHub token from gh CLI for MCP server.
command: gh auth token
register: gh_token_result
From 8ec9bba7778b4e74580ecd89db195b73860ec334 Mon Sep 17 00:00:00 2001
From: Christian Gamboa
Date: Thu, 8 Jan 2026 17:31:22 -0500
Subject: [PATCH 19/21] add superwhisper to installation
---
default.config.yml | 1 +
1 file changed, 1 insertion(+)
diff --git a/default.config.yml b/default.config.yml
index ae1daf0e9..7d712a0b2 100644
--- a/default.config.yml
+++ b/default.config.yml
@@ -99,6 +99,7 @@ homebrew_cask_apps:
- slack
- spotify
- sublime-text
+ - superwhisper
- transmit
- visual-studio-code
From 99fe9091a10425da6ab16351121003d09d4f4e9a Mon Sep 17 00:00:00 2001
From: Christian Gamboa
Date: Thu, 8 Jan 2026 17:42:58 -0500
Subject: [PATCH 20/21] clean up unused apps and add superwhisper
---
mac-dev-playbook/default.config.yml | 149 ++++++++++++++++++++++++++++
1 file changed, 149 insertions(+)
create mode 100644 mac-dev-playbook/default.config.yml
diff --git a/mac-dev-playbook/default.config.yml b/mac-dev-playbook/default.config.yml
new file mode 100644
index 000000000..9fa3ad56e
--- /dev/null
+++ b/mac-dev-playbook/default.config.yml
@@ -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: []
From 3190b54f46bb0fd5775e2b96eeb2c32144cc51f3 Mon Sep 17 00:00:00 2001
From: Christian Gamboa
Date: Thu, 8 Jan 2026 17:48:02 -0500
Subject: [PATCH 21/21] add rectangle (window management software)
---
default.config.yml | 1 +
1 file changed, 1 insertion(+)
diff --git a/default.config.yml b/default.config.yml
index 7d712a0b2..5b31d69a1 100644
--- a/default.config.yml
+++ b/default.config.yml
@@ -95,6 +95,7 @@ homebrew_cask_apps:
- loom
- notion
- orbstack
+ - rectangle
- sequel-ace
- slack
- spotify