├── .ansible-lint
├── .github
├── FUNDING.yml
├── stale.yml
└── workflows
│ └── ci.yml
├── .gitignore
├── .yamllint
├── LICENSE
├── README.md
├── ansible.cfg
├── default.config.yml
├── files
├── Mac-Dev-Playbook-Logo.png
├── sublime
│ ├── Cobalt (SL).tmTheme
│ ├── Markdown.sublime-settings
│ ├── Plain text.sublime-settings
│ ├── Preferences.sublime-settings
│ └── WordCount.sublime-settings
└── terminal
│ └── JJG-Term.terminal
├── inventory
├── main.yml
├── requirements.yml
├── tasks
├── extra-packages.yml
├── osx.yml
├── sublime-text.yml
├── sudoers.yml
└── terminal.yml
├── templates
└── Package_Control.sublime-settings.j2
└── tests
├── ansible.cfg
├── config.yml
├── inventory
└── uninstall-homebrew.sh
/.ansible-lint:
--------------------------------------------------------------------------------
1 | ---
2 | skip_list:
3 | - experimental
4 |
--------------------------------------------------------------------------------
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | # These are supported funding model platforms
2 | ---
3 | github: geerlingguy
4 | patreon: geerlingguy
5 |
--------------------------------------------------------------------------------
/.github/stale.yml:
--------------------------------------------------------------------------------
1 | # Configuration for probot-stale - https://github.com/probot/stale
2 |
3 | # Number of days of inactivity before an Issue or Pull Request becomes stale
4 | daysUntilStale: 90
5 |
6 | # Number of days of inactivity before an Issue or Pull Request with the stale label is closed.
7 | # Set to false to disable. If disabled, issues still need to be closed manually, but will remain marked as stale.
8 | daysUntilClose: 30
9 |
10 | # Only issues or pull requests with all of these labels are check if stale. Defaults to `[]` (disabled)
11 | onlyLabels: []
12 |
13 | # Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable
14 | exemptLabels:
15 | - pinned
16 | - security
17 | - planned
18 |
19 | # Set to true to ignore issues in a project (defaults to false)
20 | exemptProjects: false
21 |
22 | # Set to true to ignore issues in a milestone (defaults to false)
23 | exemptMilestones: false
24 |
25 | # Set to true to ignore issues with an assignee (defaults to false)
26 | exemptAssignees: false
27 |
28 | # Label to use when marking as stale
29 | staleLabel: stale
30 |
31 | # Limit the number of actions per hour, from 1-30. Default is 30
32 | limitPerRun: 30
33 |
34 | pulls:
35 | markComment: |-
36 | This pull request has been marked 'stale' due to lack of recent activity. If there is no further activity, the PR will be closed in another 30 days. Thank you for your contribution!
37 |
38 | Please read [this blog post](https://www.jeffgeerling.com/blog/2020/enabling-stale-issue-bot-on-my-github-repositories) to see the reasons why I mark pull requests as stale.
39 |
40 | unmarkComment: >-
41 | This pull request is no longer marked for closure.
42 |
43 | closeComment: >-
44 | This pull request has been closed due to inactivity. If you feel this is in error, please reopen the pull request or file a new PR with the relevant details.
45 |
46 | issues:
47 | markComment: |-
48 | This issue has been marked 'stale' due to lack of recent activity. If there is no further activity, the issue will be closed in another 30 days. Thank you for your contribution!
49 |
50 | Please read [this blog post](https://www.jeffgeerling.com/blog/2020/enabling-stale-issue-bot-on-my-github-repositories) to see the reasons why I mark issues as stale.
51 |
52 | unmarkComment: >-
53 | This issue is no longer marked for closure.
54 |
55 | closeComment: >-
56 | This issue has been closed due to inactivity. If you feel this is in error, please reopen the issue or file a new issue with the relevant details.
57 |
--------------------------------------------------------------------------------
/.github/workflows/ci.yml:
--------------------------------------------------------------------------------
1 | ---
2 | name: CI
3 | 'on':
4 | pull_request:
5 | push:
6 | branches:
7 | - master
8 | schedule:
9 | - cron: "0 5 * * 4"
10 |
11 | jobs:
12 |
13 | lint:
14 | name: Lint
15 | runs-on: ubuntu-latest
16 | steps:
17 | - name: Check out the codebase.
18 | uses: actions/checkout@v2
19 |
20 | - name: Set up Python 3.
21 | uses: actions/setup-python@v2
22 | with:
23 | python-version: '3.x'
24 |
25 | - name: Install test dependencies.
26 | run: pip3 install yamllint ansible ansible-lint
27 |
28 | - name: Lint code.
29 | run: |
30 | yamllint .
31 | ansible-lint
32 |
33 | integration:
34 | name: Integration
35 | runs-on: ${{ matrix.os }}
36 | strategy:
37 | matrix:
38 | os:
39 | - macos-10.15
40 |
41 | steps:
42 | - name: Check out the codebase.
43 | uses: actions/checkout@v2
44 |
45 | - name: Uninstall GitHub Actions' built-in Homebrew.
46 | run: tests/uninstall-homebrew.sh
47 |
48 | - name: Uninstall GitHub Actions' built-in browser installs.
49 | run: |
50 | sudo rm -rf /Applications/Firefox.app
51 | sudo rm -rf /Applications/Google\ Chrome.app
52 |
53 | - name: Install test dependencies.
54 | run: sudo pip3 install ansible
55 |
56 | - name: Set up the test environment.
57 | run: |
58 | cp tests/ansible.cfg ./ansible.cfg
59 | cp tests/inventory ./inventory
60 | cp tests/config.yml ./config.yml
61 | ansible-galaxy install -r requirements.yml
62 |
63 | - name: Test the playbook's syntax.
64 | run: ansible-playbook main.yml --syntax-check
65 |
66 | - name: Test the playbook.
67 | run: ansible-playbook main.yml
68 | env:
69 | ANSIBLE_FORCE_COLOR: '1'
70 |
71 | - name: Idempotence check.
72 | run: |
73 | idempotence=$(mktemp)
74 | ansible-playbook main.yml | tee -a ${idempotence}
75 | tail ${idempotence} | grep -q 'changed=0.*failed=0' && (echo 'Idempotence test: pass' && exit 0) || (echo 'Idempotence test: fail' && exit 1)
76 | env:
77 | ANSIBLE_FORCE_COLOR: '1'
78 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.vagrant
2 | .DS_Store
3 | *.retry
4 | roles*
5 | config.yml
6 |
--------------------------------------------------------------------------------
/.yamllint:
--------------------------------------------------------------------------------
1 | ---
2 | extends: default
3 |
4 | rules:
5 | line-length:
6 | max: 180
7 | level: warning
8 |
9 | ignore: |
10 | .github/stale.yml
11 | roles/**/*
12 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2013 Michael Griffin
2 | http://mwgriffin.com
3 |
4 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
5 |
6 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
7 |
8 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | # Mac Development Ansible Playbook
4 |
5 | [![CI][badge-gh-actions]][link-gh-actions]
6 |
7 | This playbook installs and configures most of the software I use on my Mac for web and software development. Some things in macOS are slightly difficult to automate, so I still have a few manual installation steps, but at least it's all documented here.
8 |
9 | ## Installation
10 |
11 | 1. Ensure Apple's command line tools are installed (`xcode-select --install` to launch the installer).
12 | 2. [Install Ansible](https://docs.ansible.com/ansible/latest/installation_guide/index.html):
13 |
14 | 1. Run the following command to add Python 3 to your $PATH: `export PATH="$HOME/Library/Python/3.8/bin:/opt/homebrew/bin:$PATH"`
15 | 2. Upgrade Pip: `sudo pip3 install --upgrade pip`
16 | 3. Install Ansible: `pip3 install ansible`
17 |
18 | 3. Clone or download this repository to your local drive.
19 | 4. Run `ansible-galaxy install -r requirements.yml` inside this directory to install required Ansible roles.
20 | 5. Run `ansible-playbook main.yml --ask-become-pass` inside this directory. Enter your macOS account password when prompted for the 'BECOME' password.
21 |
22 | > 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.
23 |
24 | ### Use with a remote Mac
25 |
26 | You can use this playbook to manage other Macs as well; the playbook doesn't even need to be run from a Mac at all! If you want to manage a remote Mac, either another Mac on your network, or a hosted Mac like the ones from [MacStadium](https://www.macstadium.com), you just need to make sure you can connect to it with SSH:
27 |
28 | 1. (On the Mac you want to connect to:) Go to System Preferences > Sharing.
29 | 2. Enable 'Remote Login'.
30 |
31 | > You can also enable remote login on the command line:
32 | >
33 | > sudo systemsetup -setremotelogin on
34 |
35 | Then edit the `inventory` file in this repository and change the line that starts with `127.0.0.1` to:
36 |
37 | ```
38 | [ip address or hostname of mac] ansible_user=[mac ssh username]
39 | ```
40 |
41 | If you need to supply an SSH password (if you don't use SSH keys), make sure to pass the `--ask-pass` parameter to the `ansible-playbook` command.
42 |
43 | ### Running a specific set of tagged tasks
44 |
45 | You can filter which part of the provisioning process to run by specifying a set of tags using `ansible-playbook`'s `--tags` flag. The tags available are `dotfiles`, `homebrew`, `mas`, `extra-packages` and `osx`.
46 |
47 | ansible-playbook main.yml -K --tags "dotfiles,homebrew"
48 |
49 | ## Overriding Defaults
50 |
51 | Not everyone's development environment and preferred software configuration is the same.
52 |
53 | You can override any of the defaults configured in `default.config.yml` by creating a `config.yml` file and setting the overrides in that file. For example, you can customize the installed packages and apps with something like:
54 |
55 | ```yaml
56 | homebrew_installed_packages:
57 | - cowsay
58 | - git
59 | - go
60 |
61 | mas_installed_apps:
62 | - { id: 443987910, name: "1Password" }
63 | - { id: 498486288, name: "Quick Resizer" }
64 | - { id: 557168941, name: "Tweetbot" }
65 | - { id: 497799835, name: "Xcode" }
66 |
67 | composer_packages:
68 | - name: hirak/prestissimo
69 | - name: drush/drush
70 | version: '^8.1'
71 |
72 | gem_packages:
73 | - name: bundler
74 | state: latest
75 |
76 | npm_packages:
77 | - name: webpack
78 |
79 | pip_packages:
80 | - name: mkdocs
81 |
82 | configure_dock: true
83 | dockitems_remove:
84 | - Launchpad
85 | - TV
86 | dockitems_persist:
87 | - name: "Sublime Text"
88 | path: "/Applications/Sublime Text.app/"
89 | pos: 5
90 | ```
91 |
92 | Any variable can be overridden in `config.yml`; see the supporting roles' documentation for a complete list of available variables.
93 |
94 | ## Included Applications / Configuration (Default)
95 |
96 | Applications (installed with Homebrew Cask):
97 |
98 | - [ChromeDriver](https://sites.google.com/chromium.org/driver/)
99 | - [Docker](https://www.docker.com/)
100 | - [Dropbox](https://www.dropbox.com/)
101 | - [Firefox](https://www.mozilla.org/en-US/firefox/new/)
102 | - [Google Chrome](https://www.google.com/chrome/)
103 | - [Handbrake](https://handbrake.fr/)
104 | - [Homebrew](http://brew.sh/)
105 | - [LICEcap](http://www.cockos.com/licecap/)
106 | - [LimeChat](http://limechat.net/mac/)
107 | - [MacVim](http://macvim-dev.github.io/macvim/)
108 | - [nvALT](http://brettterpstra.com/projects/nvalt/)
109 | - [Sequel Ace](https://sequel-ace.com) (MySQL client)
110 | - [Skitch](https://evernote.com/skitch/)
111 | - [Slack](https://slack.com/)
112 | - [Sublime Text](https://www.sublimetext.com/)
113 | - [Transmit](https://panic.com/transmit/) (S/FTP client)
114 | - [Vagrant](https://www.vagrantup.com/)
115 |
116 | Packages (installed with Homebrew):
117 |
118 | - autoconf
119 | - bash-completion
120 | - doxygen
121 | - gettext
122 | - gifsicle
123 | - git
124 | - go
125 | - gpg
126 | - hub
127 | - httpie
128 | - iperf
129 | - libevent
130 | - sqlite
131 | - mcrypt
132 | - nmap
133 | - node
134 | - nvm
135 | - php
136 | - ssh-copy-id
137 | - cowsay
138 | - readline
139 | - openssl
140 | - pv
141 | - wget
142 |
143 | My [dotfiles](https://github.com/geerlingguy/dotfiles) are also installed into the current user's home directory, including the `.osx` dotfile for configuring many aspects of macOS for better performance and ease of use. You can disable dotfiles management by setting `configure_dotfiles: no` in your configuration.
144 |
145 | Finally, there are a few other preferences and settings added on for various apps and services.
146 |
147 | ## Future additions
148 |
149 | ### Things that still need to be done manually
150 |
151 | It's my hope that I can get the rest of these things wrapped up into Ansible playbooks soon, but for now, these steps need to be completed manually (assuming you already have Xcode and Ansible installed, and have run this playbook).
152 |
153 | 1. Set JJG-Term as the default Terminal theme (it's installed, but not set as default automatically).
154 | 3. Install all the apps that aren't yet in this setup (see below).
155 | 4. Remap Caps Lock to Escape (requires macOS Sierra 10.12.1+).
156 | 5. Set trackpad tracking rate.
157 | 6. Set mouse tracking rate.
158 | 7. Configure extra Mail and/or Calendar accounts (e.g. Google, Exchange, etc.).
159 |
160 | ### Configuration to be added:
161 |
162 | - I have vim configuration in the repo, but I still need to add the actual installation:
163 | ```
164 | mkdir -p ~/.vim/autoload
165 | mkdir -p ~/.vim/bundle
166 | cd ~/.vim/autoload
167 | curl https://raw.githubusercontent.com/tpope/vim-pathogen/master/autoload/pathogen.vim > pathogen.vim
168 | cd ~/.vim/bundle
169 | git clone git://github.com/scrooloose/nerdtree.git
170 | ```
171 |
172 | ## Testing the Playbook
173 |
174 | Many people have asked me if I often wipe my entire workstation and start from scratch just to test changes to the playbook. Nope! Instead, I posted instructions for how I build a [Mac OS X VirtualBox VM](https://github.com/geerlingguy/mac-osx-virtualbox-vm), on which I can continually run and re-run this playbook to test changes and make sure things work correctly.
175 |
176 | Additionally, this project is [continuously tested on GitHub Actions' macOS infrastructure](https://github.com/geerlingguy/mac-dev-playbook/actions?query=workflow%3ACI).
177 |
178 | ## Ansible for DevOps
179 |
180 | Check out [Ansible for DevOps](https://www.ansiblefordevops.com/), which teaches you how to automate almost anything with Ansible.
181 |
182 | ## Author
183 |
184 | This project was created by [Jeff Geerling](https://www.jeffgeerling.com/) (originally inspired by [MWGriffin/ansible-playbooks](https://github.com/MWGriffin/ansible-playbooks)).
185 |
186 | [badge-gh-actions]: https://github.com/geerlingguy/mac-dev-playbook/workflows/CI/badge.svg?event=push
187 | [link-gh-actions]: https://github.com/geerlingguy/mac-dev-playbook/actions?query=workflow%3ACI
188 |
--------------------------------------------------------------------------------
/ansible.cfg:
--------------------------------------------------------------------------------
1 | [defaults]
2 | nocows = True
3 | roles_path = ./roles:/etc/ansible/roles
4 | inventory = inventory
5 | become = true
6 | stdout_callback = yaml
7 |
--------------------------------------------------------------------------------
/default.config.yml:
--------------------------------------------------------------------------------
1 | ---
2 | downloads: ~/.ansible-downloads/
3 |
4 | configure_dotfiles: true
5 | configure_terminal: true
6 | configure_osx: true
7 |
8 | # Set to 'true' to configure the Dock via dockutil.
9 | configure_dock: false
10 | dockitems_remove: []
11 | # - Launchpad
12 | # - TV
13 | # - Podcasts
14 | # - 'App Store'
15 | dockitems_persist: []
16 | # - name: "Sublime Text"
17 | # path: "/Applications/Sublime Text.app/"
18 | # pos: 5
19 |
20 | configure_sudoers: true
21 | sudoers_custom_config: |
22 | amagalhaes ALL=(root) NOPASSWD: /opt/homebrew/bin/yabai --load-sa
23 |
24 | dotfiles_repo: https://github.com/armand1m/dotfiles.git
25 | dotfiles_repo_accept_hostkey: true
26 | dotfiles_repo_local_destination: ~/Projects/Personal/dotfiles
27 | dotfiles_files:
28 | - .yabairc
29 | - .skhdrc
30 | - .config
31 | - .zshrc
32 | - .gitignore
33 | - .gitconfig
34 | - .inputrc
35 | - .osx
36 | - .vimrc
37 |
38 | homebrew_installed_packages:
39 | - dockutil
40 | - bash-completion
41 | - gpg
42 | - sqlite
43 | - nmap
44 | - eza
45 | - openssl
46 | - htop
47 | - bat
48 | - istioctl
49 | - terraform
50 | - pwgen
51 | - pgcli
52 | - dbmate
53 | - neovim
54 | - ffmpeg
55 | - pure
56 | - koekeishiya/formulae/yabai
57 | - koekeishiya/formulae/skhd
58 | - FelixKratz/formulae/sketchybar
59 |
60 | homebrew_taps:
61 |
62 | homebrew_cask_appdir: /Applications
63 | homebrew_cask_apps:
64 | - google-chrome
65 | - google-drive
66 | - zed
67 | - warp
68 | - chromedriver
69 | - docker
70 | - telegram
71 | - visual-studio-code
72 | - discord
73 | - spotify
74 | - google-cloud-sdk
75 | - karabiner-elements
76 | - remarkable
77 | - elgato-control-center
78 | - displaylink
79 | - ubersicht
80 | - font-hack-nerd-font
81 | - sf-symbols
82 | - raycast
83 |
84 | # See `geerlingguy.mas` role documentation for usage instructions.
85 | mas_installed_apps: []
86 | mas_email: ''
87 | mas_password: ''
88 |
89 | osx_script: ~/.osx --no-restart
90 |
91 | # Install packages from other package managers.
92 | # Note: You are responsible for making sure the required package managers are
93 | # installed, eg. through homebrew.
94 | composer_packages: []
95 | # - name: drush
96 | # state: present # present/absent, default: present
97 | # version: "^8.1" # default: N/A
98 | gem_packages: []
99 | # - name: bundler
100 | # state: present # present/absent/latest, default: present
101 | # version: "~> 1.15.1" # default: N/A
102 | npm_packages: []
103 | # - name: webpack
104 | # state: present # present/absent/latest, default: present
105 | # version: "^2.6" # default: N/A
106 | pip_packages: []
107 | # - name: mkdocs
108 | # state: present # present/absent/latest, default: present
109 | # version: "0.16.3" # default: N/A
110 |
111 | # Set to 'true' to configure Sublime Text.
112 | configure_sublime: false
113 |
114 | # Glob pattern to ansible task files to run after all other tasks are finished.
115 | post_provision_tasks: []
116 |
--------------------------------------------------------------------------------
/files/Mac-Dev-Playbook-Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/armand1m/mac-dev-playbook/922f211cef82977ee13820f32edc5c9978077032/files/Mac-Dev-Playbook-Logo.png
--------------------------------------------------------------------------------
/files/sublime/Cobalt (SL).tmTheme:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | comment
6 | Created by Jacob Rus. Based on ‘Slate’ by Wilson Miner
7 | author
8 | Jacob Rus
9 | name
10 | Cobalt
11 | settings
12 |
13 |
14 | settings
15 |
16 | background
17 | #002240
18 | caret
19 | #FFFFFF
20 | foreground
21 | #FFFFFF
22 | invisibles
23 | #FFFFFF26
24 | lineHighlight
25 | #00000059
26 | selection
27 | #B36539BF
28 |
29 |
30 |
31 | name
32 | Punctuation
33 | scope
34 | punctuation - (punctuation.definition.string || punctuation.definition.comment)
35 | settings
36 |
37 | fontStyle
38 |
39 | foreground
40 | #E1EFFF
41 |
42 |
43 |
44 | name
45 | Constant
46 | scope
47 | constant
48 | settings
49 |
50 | fontStyle
51 |
52 | foreground
53 | #FF628C
54 |
55 |
56 |
57 | name
58 | Entity
59 | scope
60 | entity
61 | settings
62 |
63 | fontStyle
64 |
65 | foreground
66 | #FFDD00
67 |
68 |
69 |
70 | name
71 | Keyword
72 | scope
73 | keyword
74 | settings
75 |
76 | fontStyle
77 |
78 | foreground
79 | #FF9D00
80 |
81 |
82 |
83 | name
84 | Storage
85 | scope
86 | storage
87 | settings
88 |
89 | fontStyle
90 |
91 | foreground
92 | #FFEE80
93 |
94 |
95 |
96 | name
97 | String
98 | scope
99 | string -string.unquoted.old-plist -string.unquoted.heredoc, string.unquoted.heredoc string
100 | settings
101 |
102 | fontStyle
103 |
104 | foreground
105 | #3AD900
106 |
107 |
108 |
109 | name
110 | Comment
111 | scope
112 | comment
113 | settings
114 |
115 | fontStyle
116 | italic
117 | foreground
118 | #0088FF
119 |
120 |
121 |
122 | name
123 | Support
124 | scope
125 | support
126 | settings
127 |
128 | fontStyle
129 |
130 | foreground
131 | #80FFBB
132 |
133 |
134 |
135 | name
136 | Variable
137 | scope
138 | variable
139 | settings
140 |
141 | fontStyle
142 |
143 | foreground
144 | #CCCCCC
145 |
146 |
147 |
148 | name
149 | Lang Variable
150 | scope
151 | variable.language
152 | settings
153 |
154 | fontStyle
155 |
156 | foreground
157 | #FF80E1
158 |
159 |
160 |
161 | name
162 | Function Call
163 | scope
164 | meta.function-call
165 | settings
166 |
167 | foreground
168 | #FFEE80
169 |
170 |
171 |
172 | name
173 | Invalid
174 | scope
175 | invalid
176 | settings
177 |
178 | background
179 | #800F00
180 | foreground
181 | #F8F8F8
182 |
183 |
184 |
185 | name
186 | Embedded Source
187 | scope
188 | text source, string.unquoted.heredoc, source source
189 | settings
190 |
191 | background
192 | #223545
193 | fontStyle
194 |
195 | foreground
196 | #FFFFFF
197 |
198 |
199 |
200 | name
201 | Entity inherited-class
202 | scope
203 | entity.other.inherited-class
204 | settings
205 |
206 | fontStyle
207 | italic
208 | foreground
209 | #80FCFF
210 |
211 |
212 |
213 | name
214 | String embedded-source
215 | scope
216 | string.quoted source
217 | settings
218 |
219 | fontStyle
220 |
221 | foreground
222 | #9EFF80
223 |
224 |
225 |
226 | name
227 | String constant
228 | scope
229 | string constant
230 | settings
231 |
232 | foreground
233 | #80FF82
234 |
235 |
236 |
237 | name
238 | String.regexp
239 | scope
240 | string.regexp
241 | settings
242 |
243 | foreground
244 | #80FFC2
245 |
246 |
247 |
248 | name
249 | String variable
250 | scope
251 | string variable
252 | settings
253 |
254 | foreground
255 | #EDEF7D
256 |
257 |
258 |
259 | name
260 | Support.function
261 | scope
262 | support.function
263 | settings
264 |
265 | fontStyle
266 |
267 | foreground
268 | #FFB054
269 |
270 |
271 |
272 | name
273 | Support.constant
274 | scope
275 | support.constant
276 | settings
277 |
278 | fontStyle
279 |
280 | foreground
281 | #EB939A
282 |
283 |
284 |
285 | name
286 | Exception
287 | scope
288 | support.type.exception
289 | settings
290 |
291 | foreground
292 | #FF1E00
293 |
294 |
295 |
296 | name
297 | C/C++ Preprocessor Line
298 | scope
299 | meta.preprocessor.c
300 | settings
301 |
302 | foreground
303 | #8996A8
304 |
305 |
306 |
307 | name
308 | C/C++ Preprocessor Directive
309 | scope
310 | meta.preprocessor.c keyword
311 | settings
312 |
313 | foreground
314 | #AFC4DB
315 |
316 |
317 |
318 | name
319 | Doctype/XML Processing
320 | scope
321 | meta.sgml.html meta.doctype, meta.sgml.html meta.doctype entity, meta.sgml.html meta.doctype string, meta.xml-processing, meta.xml-processing entity, meta.xml-processing string
322 | settings
323 |
324 | foreground
325 | #73817D
326 |
327 |
328 |
329 | name
330 | Meta.tag.A
331 | scope
332 | meta.tag, meta.tag entity
333 | settings
334 |
335 | foreground
336 | #9EFFFF
337 |
338 |
339 |
340 | name
341 | css tag-name
342 | scope
343 | meta.selector.css entity.name.tag
344 | settings
345 |
346 | foreground
347 | #9EFFFF
348 |
349 |
350 |
351 | name
352 | css#id
353 | scope
354 | meta.selector.css entity.other.attribute-name.id
355 | settings
356 |
357 | foreground
358 | #FFB454
359 |
360 |
361 |
362 | name
363 | css.class
364 | scope
365 | meta.selector.css entity.other.attribute-name.class
366 | settings
367 |
368 | foreground
369 | #5FE461
370 |
371 |
372 |
373 | name
374 | css property-name:
375 | scope
376 | support.type.property-name.css
377 | settings
378 |
379 | foreground
380 | #9DF39F
381 |
382 |
383 |
384 | name
385 | css property-value;
386 | scope
387 | meta.property-group support.constant.property-value.css, meta.property-value support.constant.property-value.css
388 | settings
389 |
390 | foreground
391 | #F6F080
392 |
393 |
394 |
395 | name
396 | css @at-rule
397 | scope
398 | meta.preprocessor.at-rule keyword.control.at-rule
399 | settings
400 |
401 | foreground
402 | #F6AA11
403 |
404 |
405 |
406 | name
407 | css additional-constants
408 | scope
409 | meta.property-value support.constant.named-color.css, meta.property-value constant
410 | settings
411 |
412 | foreground
413 | #EDF080
414 |
415 |
416 |
417 | name
418 | css constructor.argument
419 | scope
420 | meta.constructor.argument.css
421 | settings
422 |
423 | foreground
424 | #EB939A
425 |
426 |
427 |
428 | name
429 | diff.header
430 | scope
431 | meta.diff, meta.diff.header
432 | settings
433 |
434 | background
435 | #000E1A
436 | fontStyle
437 |
438 | foreground
439 | #F8F8F8
440 |
441 |
442 |
443 | name
444 | diff.deleted
445 | scope
446 | markup.deleted
447 | settings
448 |
449 | background
450 | #4C0900
451 | foreground
452 | #F8F8F8
453 |
454 |
455 |
456 | name
457 | diff.changed
458 | scope
459 | markup.changed
460 | settings
461 |
462 | background
463 | #806F00
464 | foreground
465 | #F8F8F8
466 |
467 |
468 |
469 | name
470 | diff.inserted
471 | scope
472 | markup.inserted
473 | settings
474 |
475 | background
476 | #154F00
477 | foreground
478 | #F8F8F8
479 |
480 |
481 |
482 | name
483 | Raw Markup
484 | scope
485 | markup.raw
486 | settings
487 |
488 | background
489 | #8FDDF630
490 |
491 |
492 |
493 | name
494 | Block Quote
495 | scope
496 | markup.quote
497 | settings
498 |
499 | background
500 | #004480
501 |
502 |
503 |
504 | name
505 | List
506 | scope
507 | markup.list
508 | settings
509 |
510 | background
511 | #130D26
512 |
513 |
514 |
515 | name
516 | Bold Markup
517 | scope
518 | markup.bold
519 | settings
520 |
521 | fontStyle
522 | bold
523 | foreground
524 | #C1AFFF
525 |
526 |
527 |
528 | name
529 | Italic Markup
530 | scope
531 | markup.italic
532 | settings
533 |
534 | fontStyle
535 | italic
536 | foreground
537 | #B8FFD9
538 |
539 |
540 |
541 | name
542 | Heading Markup
543 | scope
544 | markup.heading
545 | settings
546 |
547 | background
548 | #001221
549 | fontStyle
550 | bold
551 | foreground
552 | #C8E4FD
553 |
554 |
555 |
556 | name
557 | SublimeLinter Error
558 | scope
559 | sublimelinter.mark.error
560 | settings
561 |
562 | foreground
563 | #DA2000
564 |
565 |
566 | name
567 | SublimeLinter Warning
568 | scope
569 | sublimelinter.mark.warning
570 | settings
571 |
572 | foreground
573 | #EDBA00
574 |
575 |
576 | name
577 | SublimeLinter Gutter Mark
578 | scope
579 | sublimelinter.gutter-mark
580 | settings
581 |
582 | foreground
583 | #FFFFFF
584 |
585 |
586 | uuid
587 | 06CD1FB2-A00A-4F8C-97B2-60E131980454
588 |
589 |
--------------------------------------------------------------------------------
/files/sublime/Markdown.sublime-settings:
--------------------------------------------------------------------------------
1 | {
2 | "auto_complete": false,
3 | "extensions":
4 | [
5 | "txt"
6 | ]
7 | }
8 |
--------------------------------------------------------------------------------
/files/sublime/Plain text.sublime-settings:
--------------------------------------------------------------------------------
1 | {
2 | "extensions":
3 | [
4 | ]
5 | }
6 |
--------------------------------------------------------------------------------
/files/sublime/Preferences.sublime-settings:
--------------------------------------------------------------------------------
1 | {
2 | "added_words":
3 | [
4 | "Kubernetes",
5 | "Ansible",
6 | "Mesos",
7 | "de",
8 | "K8s",
9 | "stateful",
10 | "filesystem",
11 | "cron",
12 | "kubeadm",
13 | "kops",
14 | "Terraform",
15 | "geerlingguy",
16 | "kubernetes",
17 | "playbooks",
18 | "Vagrantfile",
19 | "lang",
20 | "config",
21 | "debian9",
22 | "vm",
23 | "virtualbox",
24 | "cpus",
25 | "ip",
26 | "hostname",
27 | "k8s",
28 | "ansible",
29 | "playbook",
30 | "yml",
31 | "terabyte",
32 | "plugin",
33 | "kube",
34 | "pre",
35 | "kubelet",
36 | "playbook's",
37 | "dev",
38 | "debian",
39 | "ce",
40 | "amd64",
41 | "src",
42 | "cidr",
43 | "kubectl",
44 | "sudo",
45 | "su",
46 | "v1",
47 | "etcd",
48 | "Ansible's",
49 | "openshift",
50 | "nginx",
51 | "metadata",
52 | "apps",
53 | "app",
54 | "namespace",
55 | "a4d",
56 | "yaml",
57 | "linenos",
58 | "3m",
59 | "inline",
60 | "http",
61 | "api",
62 | "ok",
63 | "init",
64 | "rbac",
65 | "gz",
66 | "linux",
67 | "v2",
68 | "https",
69 | "unarchive",
70 | "usr",
71 | "dest",
72 | "tmp",
73 | "cp",
74 | "stdout",
75 | "admin",
76 | "io",
77 | "dns",
78 | "phpmyadmin",
79 | "wordpress",
80 | "jenkins",
81 | "drupal",
82 | "Ceph",
83 | "Gluster",
84 | "Dramble",
85 | "Plugins",
86 | "Jinja",
87 | "templating",
88 | "Dockerfiles",
89 | "Dockerfile",
90 | "Geerling",
91 | "busybox",
92 | "rmi",
93 | "ps",
94 | "localhost",
95 | "python2",
96 | "ubuntu1604",
97 | "angstwad",
98 | "Ubuntu",
99 | "Angstwad's",
100 | "www",
101 | "mysql",
102 | "env",
103 | "py",
104 | "mkdir",
105 | "Werkzeug",
106 | "sqlalchemy",
107 | "html",
108 | "Jinja2",
109 | "libmysqlclient",
110 | "j2",
111 | "ubuntu16",
112 | "awk",
113 | "sbin",
114 | "everything's",
115 | "cd",
116 | "plugins",
117 | "winrm",
118 | "saltstack",
119 | "Hubot",
120 | "hubot",
121 | "args",
122 | "js",
123 | "npm",
124 | "chdir",
125 | "lineinfile",
126 | "json",
127 | "regexp",
128 | "redis",
129 | "heroku",
130 | "a4dbot",
131 | "Slack's",
132 | "bot's",
133 | "lifecycle",
134 | "microservices",
135 | "wildcard",
136 | "Encrypt's",
137 | "crypto",
138 | "ssl",
139 | "privkey",
140 | "pem",
141 | "csr",
142 | "fullchain",
143 | "selfsigned",
144 | "pyopenssl",
145 | "libssl",
146 | "distros",
147 | "iptables",
148 | "cfg",
149 | "tcp",
150 | "python3",
151 | "distro",
152 | "vhosts",
153 | "docroot",
154 | "dir",
155 | "refactor",
156 | "idempotently",
157 | "conf",
158 | "Keychain",
159 | "webservers",
160 | "xyz",
161 | "dbservers",
162 | "httpd",
163 | "rgb",
164 | "dict",
165 | "jinja",
166 | "blog",
167 | "Mazer's",
168 | "Cisco",
169 | "mv",
170 | "endif",
171 | "plugin's",
172 | "versioning",
173 | "namespaced",
174 | "md",
175 | "ruleset",
176 | "ntp",
177 | "parseable",
178 | "foo",
179 | "apache2",
180 | "Diff",
181 | "diffing",
182 | "drush",
183 | "php",
184 | "url",
185 | "multiline",
186 | "nocows",
187 | "java",
188 | "workflows",
189 | "devops",
190 | "username",
191 | "online",
192 | "github",
193 | "awx",
194 | "cowsay",
195 | "workflow",
196 | "Rackspace",
197 | "Uninstalling",
198 | "uninstall",
199 | "walkthrough",
200 | "webhooks",
201 | "Grafana",
202 | "Rundeck",
203 | "Drupal's",
204 | "Symfony",
205 | "Laravel",
206 | "Joomla",
207 | "idempotence",
208 | "Drush's",
209 | "Solr",
210 | "solr",
211 | "sha512",
212 | "Solr's",
213 | "openjdk",
214 | "jdk",
215 | "Ubuntu's",
216 | "org",
217 | "lucene",
218 | "tgz",
219 | "wget",
220 | "txt",
221 | "Andretti",
222 | "devel",
223 | "chkconfig",
224 | "dicts",
225 | "atl",
226 | "subdomains",
227 | "janedoe",
228 | "vvvv",
229 | "Vagrantfiles",
230 | "admins",
231 | "Remi",
232 | "repo",
233 | "epel",
234 | "remi",
235 | "rpms",
236 | "remirepo",
237 | "pki",
238 | "gpg",
239 | "enablerepo",
240 | "nogpgcheck",
241 | "firewalld",
242 | "Remi's",
243 | "disablerepo",
244 | "req",
245 | "scp",
246 | "rsync",
247 | "stderr",
248 | "Forever's",
249 | "nohup",
250 | "app's",
251 | "nodejs",
252 | "pycurl",
253 | "acl",
254 | "ondrej",
255 | "ppa",
256 | "sendmail",
257 | "php7",
258 | "cli",
259 | "gd",
260 | "opcache",
261 | "xml",
262 | "mbstring",
263 | "pdo",
264 | "apcu",
265 | "libpcre3",
266 | "libapache2",
267 | "mysqldb",
268 | "ufw",
269 | "a2enmod",
270 | "virtualhost",
271 | "a2ensite",
272 | "a2dissite",
273 | "symlinking",
274 | "webmaster",
275 | "ini",
276 | "codebase",
277 | "priv",
278 | "cnf",
279 | "phar"
280 | ],
281 | "auto_complete_commit_on_tab": true,
282 | "auto_complete_delay": 200,
283 | "auto_indent": true,
284 | "auto_match_enabled": true,
285 | "binary_file_patterns":
286 | [
287 | "generated/*",
288 | "*.tbz2",
289 | "*.gzip",
290 | "*.jpg",
291 | "*.jpeg",
292 | "*.png",
293 | "*.gif",
294 | "*.ttf",
295 | "*.tga",
296 | "*.dds",
297 | "*.ico",
298 | "*.eot",
299 | "*.pdf",
300 | "*.swf",
301 | "*.jar",
302 | "*.zip"
303 | ],
304 | "close_windows_when_empty": true,
305 | "color_scheme": "Packages/User/Cobalt (SL).tmTheme",
306 | "create_window_at_startup": false,
307 | "detect_indentation": true,
308 | "draw_minimap_border": false,
309 | "draw_white_space": "selection",
310 | "ensure_newline_at_eof_on_save": false,
311 | "fade_fold_buttons": true,
312 | "file_exclude_patterns":
313 | [
314 | "*.pyc",
315 | "*.pyo",
316 | "*.exe",
317 | "*.dll",
318 | "*.obj",
319 | "*.o",
320 | "*.a",
321 | "*.lib",
322 | "*.so",
323 | "*.dylib",
324 | "*.ncb",
325 | "*.sdf",
326 | "*.suo",
327 | "*.pdb",
328 | "*.idb",
329 | ".DS_Store",
330 | "*.class",
331 | "*.psd",
332 | "*.db",
333 | "*.sublime-workspace"
334 | ],
335 | "fold_buttons": true,
336 | "folder_exclude_patterns":
337 | [
338 | "node_modules",
339 | ".svn",
340 | ".git",
341 | ".hg",
342 | "CVS",
343 | "vendor",
344 | ".bundle",
345 | ".vagrant"
346 | ],
347 | "font_size": 15.0,
348 | "gpu_window_buffer": false,
349 | "gutter": true,
350 | "highlight_line": true,
351 | "ignored_packages":
352 | [
353 | "Vintage",
354 | ],
355 | "ignored_words":
356 | [
357 | "0000ff",
358 | "00f",
359 | "12m",
360 | "13m",
361 | "5d",
362 | "5m",
363 | "6d",
364 | "Phergie",
365 | "Sutcliffe's",
366 | "Uvh",
367 | "ansicolor",
368 | "awxcompose",
369 | "configfile",
370 | "examplenodeapp",
371 | "getcomposer",
372 | "googleapis",
373 | "johndoe",
374 | "johndoe1234",
375 | "modifyvm",
376 | "modulename",
377 | "msg",
378 | "node1",
379 | "node2",
380 | "oo",
381 | "phergie",
382 | "rf",
383 | "rolename",
384 | "si",
385 | "v1beta1",
386 | "var1",
387 | "var2",
388 | "varname",
389 | "vg"
390 | ],
391 | "line_numbers": true,
392 | "margin": 4,
393 | "match_brackets": true,
394 | "match_selection": true,
395 | "rulers":
396 | [
397 | 80
398 | ],
399 | "smart_indent": true,
400 | "spell_check": false,
401 | "tab_size": 2,
402 | "theme": "auto",
403 | "translate_tabs_to_spaces": true,
404 | "trim_automatic_white_space": false,
405 | "trim_trailing_white_space_on_save": false,
406 | }
407 |
--------------------------------------------------------------------------------
/files/sublime/WordCount.sublime-settings:
--------------------------------------------------------------------------------
1 | {
2 | "whitelist_syntaxes": ["Plain text", "Markdown"]
3 | }
4 |
--------------------------------------------------------------------------------
/files/terminal/JJG-Term.terminal:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | ANSIBlackColor
6 |
7 | YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMS
8 | AAGGoF8QD05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGmCwwXHR4lVSRudWxs1Q0ODxAR
9 | EhMUFRZcTlNDb21wb25lbnRzVU5TUkdCXE5TQ29sb3JTcGFjZV8QEk5TQ3VzdG9tQ29s
10 | b3JTcGFjZVYkY2xhc3NPECgwLjM4NDE0MzI4NDQgMC4zOTIzMTY1NDU4IDAuMzkyMzE2
11 | NTQ1OCAxTxAmMC4zMTA5OTExNjggMC4zMTg2NzQ4NjI0IDAuMzE4NTE0MDQ5MQAQAYAC
12 | gAXTGBkRGhscVE5TSURVTlNJQ0MQB4ADgARPEQxIAAAMSExpbm8CEAAAbW50clJHQiBY
13 | WVogB84AAgAJAAYAMQAAYWNzcE1TRlQAAAAASUVDIHNSR0IAAAAAAAAAAAAAAAAAAPbW
14 | AAEAAAAA0y1IUCAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
15 | AAAAAAAAAAARY3BydAAAAVAAAAAzZGVzYwAAAYQAAABsd3RwdAAAAfAAAAAUYmtwdAAA
16 | AgQAAAAUclhZWgAAAhgAAAAUZ1hZWgAAAiwAAAAUYlhZWgAAAkAAAAAUZG1uZAAAAlQA
17 | AABwZG1kZAAAAsQAAACIdnVlZAAAA0wAAACGdmlldwAAA9QAAAAkbHVtaQAAA/gAAAAU
18 | bWVhcwAABAwAAAAkdGVjaAAABDAAAAAMclRSQwAABDwAAAgMZ1RSQwAABDwAAAgMYlRS
19 | QwAABDwAAAgMdGV4dAAAAABDb3B5cmlnaHQgKGMpIDE5OTggSGV3bGV0dC1QYWNrYXJk
20 | IENvbXBhbnkAAGRlc2MAAAAAAAAAEnNSR0IgSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAS
21 | c1JHQiBJRUM2MTk2Ni0yLjEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
22 | AAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAADzUQABAAAAARbMWFlaIAAAAAAAAAAAAAAA
23 | AAAAAABYWVogAAAAAAAAb6IAADj1AAADkFhZWiAAAAAAAABimQAAt4UAABjaWFlaIAAA
24 | AAAAACSgAAAPhAAAts9kZXNjAAAAAAAAABZJRUMgaHR0cDovL3d3dy5pZWMuY2gAAAAA
25 | AAAAAAAAABZJRUMgaHR0cDovL3d3dy5pZWMuY2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
26 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZGVzYwAAAAAAAAAuSUVDIDYxOTY2LTIuMSBE
27 | ZWZhdWx0IFJHQiBjb2xvdXIgc3BhY2UgLSBzUkdCAAAAAAAAAAAAAAAuSUVDIDYxOTY2
28 | LTIuMSBEZWZhdWx0IFJHQiBjb2xvdXIgc3BhY2UgLSBzUkdCAAAAAAAAAAAAAAAAAAAA
29 | AAAAAAAAAGRlc2MAAAAAAAAALFJlZmVyZW5jZSBWaWV3aW5nIENvbmRpdGlvbiBpbiBJ
30 | RUM2MTk2Ni0yLjEAAAAAAAAAAAAAACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24g
31 | aW4gSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2aWV3AAAAAAAT
32 | pP4AFF8uABDPFAAD7cwABBMLAANcngAAAAFYWVogAAAAAABMCVYAUAAAAFcf521lYXMA
33 | AAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAKPAAAAAnNpZyAAAAAAQ1JUIGN1cnYAAAAA
34 | AAAEAAAAAAUACgAPABQAGQAeACMAKAAtADIANwA7AEAARQBKAE8AVABZAF4AYwBoAG0A
35 | cgB3AHwAgQCGAIsAkACVAJoAnwCkAKkArgCyALcAvADBAMYAywDQANUA2wDgAOUA6wDw
36 | APYA+wEBAQcBDQETARkBHwElASsBMgE4AT4BRQFMAVIBWQFgAWcBbgF1AXwBgwGLAZIB
37 | mgGhAakBsQG5AcEByQHRAdkB4QHpAfIB+gIDAgwCFAIdAiYCLwI4AkECSwJUAl0CZwJx
38 | AnoChAKOApgCogKsArYCwQLLAtUC4ALrAvUDAAMLAxYDIQMtAzgDQwNPA1oDZgNyA34D
39 | igOWA6IDrgO6A8cD0wPgA+wD+QQGBBMEIAQtBDsESARVBGMEcQR+BIwEmgSoBLYExATT
40 | BOEE8AT+BQ0FHAUrBToFSQVYBWcFdwWGBZYFpgW1BcUF1QXlBfYGBgYWBicGNwZIBlkG
41 | agZ7BowGnQavBsAG0QbjBvUHBwcZBysHPQdPB2EHdAeGB5kHrAe/B9IH5Qf4CAsIHwgy
42 | CEYIWghuCIIIlgiqCL4I0gjnCPsJEAklCToJTwlkCXkJjwmkCboJzwnlCfsKEQonCj0K
43 | VApqCoEKmAquCsUK3ArzCwsLIgs5C1ELaQuAC5gLsAvIC+EL+QwSDCoMQwxcDHUMjgyn
44 | DMAM2QzzDQ0NJg1ADVoNdA2ODakNww3eDfgOEw4uDkkOZA5/DpsOtg7SDu4PCQ8lD0EP
45 | Xg96D5YPsw/PD+wQCRAmEEMQYRB+EJsQuRDXEPURExExEU8RbRGMEaoRyRHoEgcSJhJF
46 | EmQShBKjEsMS4xMDEyMTQxNjE4MTpBPFE+UUBhQnFEkUahSLFK0UzhTwFRIVNBVWFXgV
47 | mxW9FeAWAxYmFkkWbBaPFrIW1hb6Fx0XQRdlF4kXrhfSF/cYGxhAGGUYihivGNUY+hkg
48 | GUUZaxmRGbcZ3RoEGioaURp3Gp4axRrsGxQbOxtjG4obshvaHAIcKhxSHHscoxzMHPUd
49 | Hh1HHXAdmR3DHeweFh5AHmoelB6+HukfEx8+H2kflB+/H+ogFSBBIGwgmCDEIPAhHCFI
50 | IXUhoSHOIfsiJyJVIoIiryLdIwojOCNmI5QjwiPwJB8kTSR8JKsk2iUJJTglaCWXJccl
51 | 9yYnJlcmhya3JugnGCdJJ3onqyfcKA0oPyhxKKIo1CkGKTgpaymdKdAqAio1KmgqmyrP
52 | KwIrNitpK50r0SwFLDksbiyiLNctDC1BLXYtqy3hLhYuTC6CLrcu7i8kL1ovkS/HL/4w
53 | NTBsMKQw2zESMUoxgjG6MfIyKjJjMpsy1DMNM0YzfzO4M/E0KzRlNJ402DUTNU01hzXC
54 | Nf02NzZyNq426TckN2A3nDfXOBQ4UDiMOMg5BTlCOX85vDn5OjY6dDqyOu87LTtrO6o7
55 | 6DwnPGU8pDzjPSI9YT2hPeA+ID5gPqA+4D8hP2E/oj/iQCNAZECmQOdBKUFqQaxB7kIw
56 | QnJCtUL3QzpDfUPARANER0SKRM5FEkVVRZpF3kYiRmdGq0bwRzVHe0fASAVIS0iRSNdJ
57 | HUljSalJ8Eo3Sn1KxEsMS1NLmkviTCpMcky6TQJNSk2TTdxOJU5uTrdPAE9JT5NP3VAn
58 | UHFQu1EGUVBRm1HmUjFSfFLHUxNTX1OqU/ZUQlSPVNtVKFV1VcJWD1ZcVqlW91dEV5JX
59 | 4FgvWH1Yy1kaWWlZuFoHWlZaplr1W0VblVvlXDVchlzWXSddeF3JXhpebF69Xw9fYV+z
60 | YAVgV2CqYPxhT2GiYfViSWKcYvBjQ2OXY+tkQGSUZOllPWWSZedmPWaSZuhnPWeTZ+lo
61 | P2iWaOxpQ2maafFqSGqfavdrT2una/9sV2yvbQhtYG25bhJua27Ebx5veG/RcCtwhnDg
62 | cTpxlXHwcktypnMBc11zuHQUdHB0zHUodYV14XY+dpt2+HdWd7N4EXhueMx5KnmJeed6
63 | RnqlewR7Y3vCfCF8gXzhfUF9oX4BfmJ+wn8jf4R/5YBHgKiBCoFrgc2CMIKSgvSDV4O6
64 | hB2EgITjhUeFq4YOhnKG14c7h5+IBIhpiM6JM4mZif6KZIrKizCLlov8jGOMyo0xjZiN
65 | /45mjs6PNo+ekAaQbpDWkT+RqJIRknqS45NNk7aUIJSKlPSVX5XJljSWn5cKl3WX4JhM
66 | mLiZJJmQmfyaaJrVm0Kbr5wcnImc951kndKeQJ6unx2fi5/6oGmg2KFHobaiJqKWowaj
67 | dqPmpFakx6U4pammGqaLpv2nbqfgqFKoxKk3qamqHKqPqwKrdavprFys0K1ErbiuLa6h
68 | rxavi7AAsHWw6rFgsdayS7LCszizrrQltJy1E7WKtgG2ebbwt2i34LhZuNG5SrnCuju6
69 | tbsuu6e8IbybvRW9j74KvoS+/796v/XAcMDswWfB48JfwtvDWMPUxFHEzsVLxcjGRsbD
70 | x0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TT
71 | xtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp22vvbgNwF3IrdEN2W3hzeot8p36/gNuC9
72 | 4UThzOJT4tvjY+Pr5HPk/OWE5g3mlucf56noMui86Ubp0Opb6uXrcOv77IbtEe2c7iju
73 | tO9A78zwWPDl8XLx//KM8xnzp/Q09ML1UPXe9m32+/eK+Bn4qPk4+cf6V/rn+3f8B/yY
74 | /Sn9uv5L/tz/bf//0h8gISJaJGNsYXNzbmFtZVgkY2xhc3Nlc1xOU0NvbG9yU3BhY2Wi
75 | IyRcTlNDb2xvclNwYWNlWE5TT2JqZWN00h8gJidXTlNDb2xvcqImJAAIABEAGgAkACkA
76 | MgA3AEkATABRAFMAWgBgAGsAeAB+AIsAoACnANIA+wD9AP8BAQEIAQ0BEwEVARcBGQ1l
77 | DWoNdQ1+DYsNjg2bDaQNqQ2xAAAAAAAAAgEAAAAAAAAAKAAAAAAAAAAAAAAAAAAADbQ=
78 |
79 | ANSIBrightBlackColor
80 |
81 | YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMS
82 | AAGGoF8QD05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGmCwwXHR4lVSRudWxs1Q0ODxAR
83 | EhMUFRZcTlNDb21wb25lbnRzVU5TUkdCXE5TQ29sb3JTcGFjZV8QEk5TQ3VzdG9tQ29s
84 | b3JTcGFjZVYkY2xhc3NPECgwLjU5MjQ0MjEwMzggMC41OTI0NDIxMDM4IDAuNTkyNDQy
85 | MTAzOCAxTxAnMC41MjE1MTQ1OTQ2IDAuNTIxNDk5MDM3NyAwLjUyMTUwNzc5OTYAEAGA
86 | AoAF0xgZERobHFROU0lEVU5TSUNDEAeAA4AETxEMSAAADEhMaW5vAhAAAG1udHJSR0Ig
87 | WFlaIAfOAAIACQAGADEAAGFjc3BNU0ZUAAAAAElFQyBzUkdCAAAAAAAAAAAAAAAAAAD2
88 | 1gABAAAAANMtSFAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
89 | AAAAAAAAAAAAEWNwcnQAAAFQAAAAM2Rlc2MAAAGEAAAAbHd0cHQAAAHwAAAAFGJrcHQA
90 | AAIEAAAAFHJYWVoAAAIYAAAAFGdYWVoAAAIsAAAAFGJYWVoAAAJAAAAAFGRtbmQAAAJU
91 | AAAAcGRtZGQAAALEAAAAiHZ1ZWQAAANMAAAAhnZpZXcAAAPUAAAAJGx1bWkAAAP4AAAA
92 | FG1lYXMAAAQMAAAAJHRlY2gAAAQwAAAADHJUUkMAAAQ8AAAIDGdUUkMAAAQ8AAAIDGJU
93 | UkMAAAQ8AAAIDHRleHQAAAAAQ29weXJpZ2h0IChjKSAxOTk4IEhld2xldHQtUGFja2Fy
94 | ZCBDb21wYW55AABkZXNjAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAA
95 | EnNSR0IgSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
96 | AAAAAAAAAAAAAAAAAAAAAABYWVogAAAAAAAA81EAAQAAAAEWzFhZWiAAAAAAAAAAAAAA
97 | AAAAAAAAWFlaIAAAAAAAAG+iAAA49QAAA5BYWVogAAAAAAAAYpkAALeFAAAY2lhZWiAA
98 | AAAAAAAkoAAAD4QAALbPZGVzYwAAAAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAA
99 | AAAAAAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAAAAAAAAAAAAAA
100 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRlc2MAAAAAAAAALklFQyA2MTk2Ni0yLjEg
101 | RGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAALklFQyA2MTk2
102 | Ni0yLjEgRGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAAAAAA
103 | AAAAAAAAAABkZXNjAAAAAAAAACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24gaW4g
104 | SUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAsUmVmZXJlbmNlIFZpZXdpbmcgQ29uZGl0aW9u
105 | IGluIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdmlldwAAAAAA
106 | E6T+ABRfLgAQzxQAA+3MAAQTCwADXJ4AAAABWFlaIAAAAAAATAlWAFAAAABXH+dtZWFz
107 | AAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAACjwAAAAJzaWcgAAAAAENSVCBjdXJ2AAAA
108 | AAAABAAAAAAFAAoADwAUABkAHgAjACgALQAyADcAOwBAAEUASgBPAFQAWQBeAGMAaABt
109 | AHIAdwB8AIEAhgCLAJAAlQCaAJ8ApACpAK4AsgC3ALwAwQDGAMsA0ADVANsA4ADlAOsA
110 | 8AD2APsBAQEHAQ0BEwEZAR8BJQErATIBOAE+AUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGS
111 | AZoBoQGpAbEBuQHBAckB0QHZAeEB6QHyAfoCAwIMAhQCHQImAi8COAJBAksCVAJdAmcC
112 | cQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN+
113 | A4oDlgOiA64DugPHA9MD4APsA/kEBgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE
114 | 0wThBPAE/gUNBRwFKwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZ
115 | BmoGewaMBp0GrwbABtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8I
116 | MghGCFoIbgiCCJYIqgi+CNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9
117 | ClQKagqBCpgKrgrFCtwK8wsLCyILOQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4M
118 | pwzADNkM8w0NDSYNQA1aDXQNjg2pDcMN3g34DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9B
119 | D14Peg+WD7MPzw/sEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR6BIHEiYS
120 | RRJkEoQSoxLDEuMTAxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4
121 | FZsVvRXgFgMWJhZJFmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZ
122 | IBlFGWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1
123 | HR4dRx1wHZkdwx3sHhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwh
124 | SCF1IaEhziH7IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXH
125 | JfcmJyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWspnSnQKgIqNSpoKpsq
126 | zysCKzYraSudK9EsBSw5LG4soizXLQwtQS12Last4S4WLkwugi63Lu4vJC9aL5Evxy/+
127 | MDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1
128 | wjX9Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrvOy07azuq
129 | O+g8JzxlPKQ84z0iPWE9oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlBakGsQe5C
130 | MEJyQrVC90M6Q31DwEQDREdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjX
131 | SR1JY0mpSfBKN0p9SsRLDEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+TT91Q
132 | J1BxULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeS
133 | V+BYL1h9WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ff
134 | s2AFYFdgqmD8YU9homH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fp
135 | aD9olmjsaUNpmmnxakhqn2r3a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw
136 | 4HE6cZVx8HJLcqZzAXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnn
137 | ekZ6pXsEe2N7wnwhfIF84X1BfaF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eD
138 | uoQdhICE44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn+imSKyoswi5aL/IxjjMqNMY2Y
139 | jf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+XCpd1l+CY
140 | TJi4mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2oiailqMG
141 | o3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2u
142 | oa8Wr4uwALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm28Ldot+C4WbjRuUq5wro7
143 | urW7LrunvCG8m70VvY++Cr6Evv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbG
144 | w8dBx7/IPci8yTrJuco4yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE
145 | 08bUSdTL1U7V0dZV1tjXXNfg2GTY6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd+v4Dbg
146 | veFE4cziU+Lb42Pj6+Rz5PzlhOYN5pbnH+ep6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o
147 | 7rTvQO/M8Fjw5fFy8f/yjPMZ86f0NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3/Af8
148 | mP0p/br+S/7c/23//9IfICEiWiRjbGFzc25hbWVYJGNsYXNzZXNcTlNDb2xvclNwYWNl
149 | oiMkXE5TQ29sb3JTcGFjZVhOU09iamVjdNIfICYnV05TQ29sb3KiJiQACAARABoAJAAp
150 | ADIANwBJAEwAUQBTAFoAYABrAHgAfgCLAKAApwDSAPwA/gEAAQIBCQEOARQBFgEYARoN
151 | Zg1rDXYNfw2MDY8NnA2lDaoNsgAAAAAAAAIBAAAAAAAAACgAAAAAAAAAAAAAAAAAAA21
152 |
153 | BackgroundAlphaInactive
154 | 0.73865855823863635
155 | BackgroundBlur
156 | 0.0
157 | BackgroundBlurInactive
158 | 0.50397283380681823
159 | BackgroundColor
160 |
161 | YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMS
162 | AAGGoF8QD05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGjCwwTVSRudWxs0w0ODxARElVO
163 | U1JHQlxOU0NvbG9yU3BhY2VWJGNsYXNzTxAqMC4wNzg3MTk0MjkzNSAwLjA3ODcxOTQy
164 | OTM1IDAuMDc4NzE5NDI5MzUAEAGAAtIUFRYXWiRjbGFzc25hbWVYJGNsYXNzZXNXTlND
165 | b2xvcqIWGFhOU09iamVjdAgRGiQpMjdJTFFTV11kand+q62vtL/I0NMAAAAAAAABAQAA
166 | AAAAAAAZAAAAAAAAAAAAAAAAAAAA3A==
167 |
168 | BackgroundSettingsForInactiveWindows
169 |
170 | CursorColor
171 |
172 | YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMS
173 | AAGGoF8QD05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGjCwwTVSRudWxs0w0ODxAREldO
174 | U1doaXRlXE5TQ29sb3JTcGFjZVYkY2xhc3NLMC4zMDI0MTkzNgAQA4AC0hQVFhdaJGNs
175 | YXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohYYWE5TT2JqZWN0CBEaJCkyN0lMUVNXXWRs
176 | eYCMjpCVoKmxtAAAAAAAAAEBAAAAAAAAABkAAAAAAAAAAAAAAAAAAAC9
177 |
178 | Font
179 |
180 | YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMS
181 | AAGGoF8QD05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGkCwwVFlUkbnVsbNQNDg8QERIT
182 | FFZOU1NpemVYTlNmRmxhZ3NWTlNOYW1lViRjbGFzcyNALAAAAAAAABAQgAKAA11TRk1v
183 | bm8tTWVkaXVt0hcYGRpaJGNsYXNzbmFtZVgkY2xhc3Nlc1ZOU0ZvbnSiGRtYTlNPYmpl
184 | Y3QIERokKTI3SUxRU1heZ253foWOkJKUoqeyu8LFAAAAAAAAAQEAAAAAAAAAHAAAAAAA
185 | AAAAAAAAAAAAAM4=
186 |
187 | FontAntialias
188 |
189 | FontWidthSpacing
190 | 0.99596774193548387
191 | Linewrap
192 |
193 | ProfileCurrentVersion
194 | 2.0699999999999998
195 | RestoreLines
196 | 2000
197 | ScrollbackLines
198 | 50000
199 | SelectionColor
200 |
201 | YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMS
202 | AAGGoF8QD05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGjCwwTVSRudWxs0w0ODxAREldO
203 | U1doaXRlXE5TQ29sb3JTcGFjZVYkY2xhc3NLMC4yNTQwMzIyNQAQA4AC0hQVFhdaJGNs
204 | YXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohYYWE5TT2JqZWN0CBEaJCkyN0lMUVNXXWRs
205 | eYCMjpCVoKmxtAAAAAAAAAEBAAAAAAAAABkAAAAAAAAAAAAAAAAAAAC9
206 |
207 | ShouldLimitScrollback
208 | 1
209 | ShowWindowSettingsNameInTitle
210 |
211 | TerminalType
212 | xterm-color
213 | TextBoldColor
214 |
215 | YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMS
216 | AAGGoF8QD05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGjCwwTVSRudWxs0w0ODxAREldO
217 | U1doaXRlXE5TQ29sb3JTcGFjZVYkY2xhc3NCMQAQA4AC0hQVFhdaJGNsYXNzbmFtZVgk
218 | Y2xhc3Nlc1dOU0NvbG9yohYYWE5TT2JqZWN0CBEaJCkyN0lMUVNXXWRseYCDhYeMl6Co
219 | qwAAAAAAAAEBAAAAAAAAABkAAAAAAAAAAAAAAAAAAAC0
220 |
221 | TextColor
222 |
223 | YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMS
224 | AAGGoF8QD05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGjCwwTVSRudWxs0w0ODxAREldO
225 | U1doaXRlXE5TQ29sb3JTcGFjZVYkY2xhc3NLMC45NDc1ODA2NAAQA4AC0hQVFhdaJGNs
226 | YXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohYYWE5TT2JqZWN0CBEaJCkyN0lMUVNXXWRs
227 | eYCMjpCVoKmxtAAAAAAAAAEBAAAAAAAAABkAAAAAAAAAAAAAAAAAAAC9
228 |
229 | UseBrightBold
230 |
231 | columnCount
232 | 120
233 | name
234 | JJG-Term
235 | rowCount
236 | 30
237 | shellExitAction
238 | 1
239 | type
240 | Window Settings
241 |
242 |
243 |
--------------------------------------------------------------------------------
/inventory:
--------------------------------------------------------------------------------
1 | [all]
2 | 127.0.0.1 ansible_connection=local
3 |
--------------------------------------------------------------------------------
/main.yml:
--------------------------------------------------------------------------------
1 | ---
2 | - hosts: all
3 |
4 | vars_files:
5 | - default.config.yml
6 |
7 | pre_tasks:
8 | - name: Include playbook configuration.
9 | include_vars: "{{ item }}"
10 | with_fileglob:
11 | - "{{ playbook_dir }}/config.yml"
12 | tags: ['always']
13 |
14 | roles:
15 | - role: elliotweiser.osx-command-line-tools
16 | - role: geerlingguy.mac.homebrew
17 | tags: ['homebrew']
18 | - role: geerlingguy.dotfiles
19 | when: configure_dotfiles
20 | tags: ['dotfiles']
21 | - role: geerlingguy.mac.mas
22 | when: mas_installed_apps or mas_installed_app_ids
23 | tags: ['mas']
24 | - role: geerlingguy.mac.dock
25 | when: configure_dock
26 | tags: ['dock']
27 |
28 | tasks:
29 | - import_tasks: tasks/sudoers.yml
30 | when: configure_sudoers
31 | tags: ['sudoers']
32 |
33 | - import_tasks: tasks/terminal.yml
34 | when: configure_terminal
35 | tags: ['terminal']
36 |
37 | - import_tasks: tasks/osx.yml
38 | when: configure_osx
39 | tags: ['osx']
40 |
41 | - import_tasks: tasks/extra-packages.yml
42 | tags: ['extra-packages']
43 |
44 | - import_tasks: tasks/sublime-text.yml
45 | when: configure_sublime
46 | tags: ['sublime-text']
47 |
48 | - name: Run configured post-provision ansible task files.
49 | include_tasks: "{{ outer_item }}"
50 | loop_control:
51 | loop_var: outer_item
52 | with_fileglob: "{{ post_provision_tasks|default(omit) }}"
53 | tags: ['post']
54 |
--------------------------------------------------------------------------------
/requirements.yml:
--------------------------------------------------------------------------------
1 | ---
2 | roles:
3 | - name: elliotweiser.osx-command-line-tools
4 | - name: geerlingguy.dotfiles
5 |
6 | collections:
7 | - name: geerlingguy.mac
8 |
--------------------------------------------------------------------------------
/tasks/extra-packages.yml:
--------------------------------------------------------------------------------
1 | ---
2 | - name: Install global Composer packages.
3 | composer:
4 | command: "{{ (item.state | default('present') == 'absent') | ternary('remove', 'require') }}"
5 | arguments: "{{ item.name | default(item) }} {{ item.version | default('@stable') }}"
6 | # Ansible 2.4 supports `global_command` making `working_dir` optional.
7 | working_dir: "{{ lookup('env', 'COMPOSER_HOME') | default('~/.composer', true) }}"
8 | loop: "{{ composer_packages }}"
9 |
10 | - name: Install global NPM packages.
11 | npm:
12 | name: "{{ item.name | default(item) }}"
13 | state: "{{ item.state | default('present') }}"
14 | version: "{{ item.version | default(omit) }}"
15 | global: true
16 | executable: "{{ item.executable | default(omit) }}"
17 | loop: "{{ npm_packages }}"
18 |
19 | - name: Install global Pip packages.
20 | pip:
21 | name: "{{ item.name | default(item) }}"
22 | state: "{{ item.state | default('present') }}"
23 | version: "{{ item.version | default(omit) }}"
24 | executable: "{{ item.executable | default(omit) }}"
25 | loop: "{{ pip_packages }}"
26 |
27 | - name: Install global Ruby gems.
28 | gem:
29 | name: "{{ item.name | default(item) }}"
30 | state: "{{ item.state | default('present') }}"
31 | version: "{{ item.version | default(omit) }}"
32 | user_install: false
33 | executable: "{{ item.executable | default(omit) }}"
34 | loop: "{{ gem_packages }}"
35 |
--------------------------------------------------------------------------------
/tasks/osx.yml:
--------------------------------------------------------------------------------
1 | ---
2 | # TODO: Use sudo once .osx can be run via root with no user interaction.
3 | - name: Run .osx dotfiles.
4 | command: "{{ osx_script }}"
5 | changed_when: false
6 |
--------------------------------------------------------------------------------
/tasks/sublime-text.yml:
--------------------------------------------------------------------------------
1 | ---
2 | - name: Ensure Sublime Text directories exist.
3 | file:
4 | path: "{{ item }}"
5 | state: directory
6 | loop:
7 | - "{{ sublime_base_path }}/{{ sublime_config_path }}"
8 | - "{{ sublime_base_path }}/Installed Packages"
9 |
10 | - name: Ensure Sublime Package Control is installed.
11 | get_url:
12 | url: "https://packagecontrol.io/Package%20Control.sublime-package"
13 | dest: "{{ sublime_base_path }}/Installed Packages/Package Control.sublime-package"
14 |
15 | - name: Ensure Sublime Package Control Packages are configured.
16 | template:
17 | src: templates/Package_Control.sublime-settings.j2
18 | dest: "{{ sublime_base_path }}/{{ sublime_config_path }}/Package Control.sublime-settings"
19 |
20 | - name: Ensure Sublime text user Preferences and theme are set.
21 | copy:
22 | src: "files/sublime/{{ item }}"
23 | dest: "{{ sublime_base_path }}/{{ sublime_config_path }}/{{ item }}"
24 | loop:
25 | - "Cobalt (SL).tmTheme"
26 | - "Markdown.sublime-settings"
27 | - "Plain text.sublime-settings"
28 | - "Preferences.sublime-settings"
29 | - "WordCount.sublime-settings"
30 |
--------------------------------------------------------------------------------
/tasks/sudoers.yml:
--------------------------------------------------------------------------------
1 | ---
2 | # If the user installs GNU sed through homebrew the path is different.
3 | - name: Register path to sed.
4 | command: which sed
5 | register: sed_which_result
6 | changed_when: false
7 | when: sed_path is undefined
8 |
9 | - name: Define sed_path variable.
10 | set_fact:
11 | sed_path: "{{ sed_which_result.stdout }}"
12 | when: sed_path is undefined
13 |
14 | # Sudoers configuration.
15 | - name: Copy sudoers configuration into place.
16 | copy:
17 | content: "{{ sudoers_custom_config }}"
18 | dest: /private/etc/sudoers.d/custom
19 | mode: 0440
20 | validate: 'visudo -cf %s'
21 | become: true
22 |
--------------------------------------------------------------------------------
/tasks/terminal.yml:
--------------------------------------------------------------------------------
1 | ---
2 | # Custom Terminal theme.
3 | - name: Get current Terminal profile.
4 | command: defaults read com.apple.terminal 'Default Window Settings'
5 | register: terminal_theme
6 | changed_when: false
7 | check_mode: false
8 |
9 | - name: Ensure custom Terminal profile is added.
10 | copy:
11 | src: files/terminal/JJG-Term.terminal
12 | dest: /tmp/JJG-Term.terminal
13 | changed_when: false
14 | when: "'JJG-Term' not in terminal_theme.stdout"
15 |
16 | - name: Ensure custom Terminal profile is added.
17 | command: open /tmp/JJG-Term.terminal
18 | changed_when: false
19 | when: "'JJG-Term' not in terminal_theme.stdout"
20 |
21 | # TODO: This doesn't work in Yosemite. Consider a different solution?
22 | - name: Ensure custom Terminal profile is set as default.
23 | command: "{{ item }}"
24 | with_items:
25 | - defaults write com.apple.terminal 'Default Window Settings' -string JJG-Term
26 | - defaults write com.apple.terminal 'Startup Window Settings' -string JJG-Term
27 | changed_when: false
28 | when: "'JJG-Term' not in terminal_theme.stdout"
29 |
--------------------------------------------------------------------------------
/templates/Package_Control.sublime-settings.j2:
--------------------------------------------------------------------------------
1 | {
2 | "auto_upgrade_last_run": null,
3 | "bootstrapped": true,
4 | "in_process_packages":
5 | [
6 | ],
7 | "installed_packages":
8 | [
9 | {% for package in sublime_package_control %}
10 | "{{ package }}"{% if not loop.last %},{% endif %}
11 | {% endfor %}
12 | ],
13 | }
14 |
--------------------------------------------------------------------------------
/tests/ansible.cfg:
--------------------------------------------------------------------------------
1 | [defaults]
2 | inventory = inventory
3 |
--------------------------------------------------------------------------------
/tests/config.yml:
--------------------------------------------------------------------------------
1 | ---
2 | downloads: ~/.ansible-downloads/
3 |
4 | configure_dotfiles: true
5 | configure_terminal: true
6 | configure_osx: true
7 |
8 | # Set to 'true' to configure the Dock via dockutil.
9 | configure_dock: false
10 | dockitems_remove: []
11 | # - Launchpad
12 | # - TV
13 | # - Podcasts
14 | # - 'App Store'
15 | dockitems_persist: []
16 | # - name: "Sublime Text"
17 | # path: "/Applications/Sublime Text.app/"
18 | # pos: 5
19 |
20 | configure_sudoers: false
21 | sudoers_custom_config: |
22 | amagalhaes ALL = (root) NOPASSWD: /opt/homebrew/bin/yabai --load-sa
23 |
24 | dotfiles_repo: https://github.com/armand1m/dotfiles.git
25 | dotfiles_repo_accept_hostkey: true
26 | dotfiles_repo_local_destination: ~/Projects/Personal/dotfiles
27 | dotfiles_files:
28 | - .yabairc
29 | - .skhdrc
30 | - .config
31 | - .zshrc
32 | - .gitignore
33 | - .gitconfig
34 | - .inputrc
35 | - .osx
36 | - .vimrc
37 |
38 | homebrew_installed_packages:
39 | - dockutil
40 | - bash-completion
41 | - gpg
42 | - sqlite
43 | - nmap
44 | - openssl
45 | - htop
46 | - exa
47 | - bat
48 | - istioctl
49 | - terraform
50 | - pwgen
51 | - pgcli
52 | - dbmate
53 | - neovim
54 | - koekeishiya/formulae/yabai
55 | - koekeishiya/formulae/skhd
56 |
57 | homebrew_taps:
58 | - homebrew/core
59 | - homebrew/cask
60 | - homebrew/cask-drivers
61 | - koekeishiya/formulae
62 |
63 | homebrew_cask_appdir: /Applications
64 | homebrew_cask_apps:
65 | - chromedriver
66 | - docker
67 | - telegram
68 | - visual-studio-code
69 | - discord
70 | - spotify
71 | - google-cloud-sdk
72 | - karabiner-elements
73 | - remarkable
74 | - elgato-control-center
75 | - displaylink
76 | - ubersicht
77 | - lens
78 |
79 | # See `geerlingguy.mas` role documentation for usage instructions.
80 | mas_installed_apps: []
81 | mas_email: ''
82 | mas_password: ''
83 |
84 | osx_script: ~/.osx --no-restart
85 |
86 | # Install packages from other package managers.
87 | # Note: You are responsible for making sure the required package managers are
88 | # installed, eg. through homebrew.
89 | composer_packages: []
90 | # - name: drush
91 | # state: present # present/absent, default: present
92 | # version: "^8.1" # default: N/A
93 | gem_packages: []
94 | # - name: bundler
95 | # state: present # present/absent/latest, default: present
96 | # version: "~> 1.15.1" # default: N/A
97 | npm_packages: []
98 | # - name: webpack
99 | # state: present # present/absent/latest, default: present
100 | # version: "^2.6" # default: N/A
101 | pip_packages: []
102 | # - name: mkdocs
103 | # state: present # present/absent/latest, default: present
104 | # version: "0.16.3" # default: N/A
105 |
106 | # Set to 'true' to configure Sublime Text.
107 | configure_sublime: false
108 |
109 | # Glob pattern to ansible task files to run after all other tasks are finished.
110 | post_provision_tasks: []
111 |
--------------------------------------------------------------------------------
/tests/inventory:
--------------------------------------------------------------------------------
1 | [local]
2 | localhost ansible_connection=local
3 |
--------------------------------------------------------------------------------
/tests/uninstall-homebrew.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | #
3 | # Uninstalls Homebrew using the official uninstall script.
4 |
5 | # Download and run the uninstall script.
6 | curl -sLO https://raw.githubusercontent.com/Homebrew/install/master/uninstall.sh
7 | chmod +x ./uninstall.sh
8 | sudo ./uninstall.sh --force
9 |
10 | # Clean up Homebrew directories.
11 | sudo rm -rf /usr/local/Homebrew
12 | sudo rm -rf /usr/local/Caskroom
13 | sudo rm -rf /usr/local/bin/brew
14 | sudo rm -rf /usr/local/bin/chromedriver
15 |
--------------------------------------------------------------------------------