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 Dev Playbook Logo -# 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