diff --git a/roles/darwin/README.md b/roles/darwin/README.md new file mode 100644 index 0000000..b278459 --- /dev/null +++ b/roles/darwin/README.md @@ -0,0 +1,20 @@ +# Darwin (macOS) + +Baseline macOS hosts through Homebrew. No-op on non-Darwin targets. + +Configure in `inventory/host_vars//vars.yml`: + +```yaml +darwin_homebrew_update: false # update formula metadata before installing +darwin_taps: + - anomalyco/tap +darwin_formulae: + - jq + - ripgrep +darwin_casks: + - iterm2 +``` + +Casks install GUI apps; leave the list empty if you don't want them managed. +Requires the `community.general` collection (`homebrew`, `homebrew_tap`, +`homebrew_cask`). Must run as the Homebrew-owning user — never with `become`. diff --git a/roles/darwin/defaults/main.yml b/roles/darwin/defaults/main.yml new file mode 100644 index 0000000..a18161a --- /dev/null +++ b/roles/darwin/defaults/main.yml @@ -0,0 +1,6 @@ +--- +# macOS baseline managed through Homebrew. No-op on non-Darwin hosts. +darwin_homebrew_update: false +darwin_taps: [] +darwin_formulae: [] +darwin_casks: [] diff --git a/roles/darwin/meta/main.yml b/roles/darwin/meta/main.yml new file mode 100644 index 0000000..2ecd922 --- /dev/null +++ b/roles/darwin/meta/main.yml @@ -0,0 +1,14 @@ +--- +galaxy_info: + author: Jokester + description: macOS baseline via Homebrew (taps, formulae, casks) + license: MIT + min_ansible_version: "2.15" + galaxy_tags: + - macos + - homebrew + platforms: + - name: MacOSX + versions: + - all +dependencies: [] diff --git a/roles/darwin/tasks/main.yml b/roles/darwin/tasks/main.yml new file mode 100644 index 0000000..65fb318 --- /dev/null +++ b/roles/darwin/tasks/main.yml @@ -0,0 +1,31 @@ +--- +- name: Assert the target is macOS + ansible.builtin.assert: + that: + - ansible_facts['os_family'] == 'Darwin' + fail_msg: "The darwin role only supports macOS (ansible_os_family == 'Darwin')." + success_msg: "macOS target validated" + +# Homebrew refuses to run as root: keep this role out of any become context. +- name: Update Homebrew metadata + community.general.homebrew: + update_homebrew: true + when: darwin_homebrew_update | bool + +- name: Tap Homebrew repositories + community.general.homebrew_tap: + name: "{{ item }}" + state: present + loop: "{{ darwin_taps }}" + +- name: Install Homebrew formulae + community.general.homebrew: + name: "{{ darwin_formulae }}" + state: present + when: darwin_formulae | length > 0 + +- name: Install Homebrew casks + community.general.homebrew_cask: + name: "{{ darwin_casks }}" + state: present + when: darwin_casks | length > 0