Repository files navigation

MacOS-Setup

MacOS-Setup is a shell script and Ansible playbook to set up a fresh macOS environment. It installs and configures most of the software I use on my Mac.

It can be run multiple times on the same machine safely. It installs, upgrades, or skips packages based on what is already installed on the machine.

To kick off this process, simply start the install.sh script with:

sh -c "$(curl -fsSL https://raw.githubusercontent.com/jmaaks/macos-setup/master/install.sh)"

Requirements

I've tested it on:

  • macOS High Sierra (10.13.4)

Bootstrap Script: install.sh

The install.sh script bootstraps a new macOS installation by performing the following tasks:

  • Install Xcode Command Line Developer Tools
  • Install Homebrew
  • Install Pip
  • Add Python 2.7 user bin directory to the PATH variable (for pip)
  • Install Ansible via pip
  • Clone this repository locally
  • Call playbook.yml via Ansible to continue the installation/configuration process

TO-DO for install.sh

  • Verify sudo keep-alive is working
  • See whether pip installation needed (since now included in Python by default)

Ansible playbook: playbook.yml

This is the main Ansible installation/configuration script. It contains the following sections:

  • hosts: all
  • vars:
    • applications: the list of all applications that should be installed (using "brew cask install")
    • brew_taps: additional Homebrew repositories
    • brew_utils:
    • docitems_to_remove: list of apps to remove from the Mac dock
    • docitems_to_persist: list of apps to keep in Mac dock
    • home: user home directory
  • tasks:
    • Check Homebrew is installed
    • Install Homebrew
    • Install required Homebrew taps
    • Install libraries/utils with Homebrew
    • Cleanup after brewing
    • Check for installed apps (casks)
    • Install apps with brew-cask
    • Remove items from Mac dock (using dockutil)
    • Add items to dock (if needed)
    • Fix dock item order
    • Configure system settings (via scripts/system_settings.sh)

If you want to add/remove to the list of apps/utils installed, simple edit playbook.yml and re-run the bootstrap script.

You can do this as many times as you like and re-run the ansible-playbook command. Ansible is smart enough to skip installed apps, so subsequent runs are super fast.

TO-DO for playbook.yml

  • Find a fix for installing VirtualBox via Homebrew without GUI permission granting
  • Modularize playbook contents

Included Applications / Configuration

Applications

Apps installed with Homebrew Cask:

Packages/Utilities

Things installed with Homebrew:

  • autoconf

There are several more utils listed in the playbook.yml - simply uncomment them to include them in your install.

System Settings

It also installs a few useful system preferences/settings/tweaks with a toned-down verson of Matt Mueller's OSX-for Hackers script.

It does some reasonably gnarly stuff e.g.

  • hide spotlight icon
  • disable app Gate Keeper
  • change stand-by delay from 1hr to 12hrs.
  • Set trackpad tracking rate.
  • Set mouse tracking rate.
  • and lots more...

so you need read it very carefully first. (see scripts/system_settings.sh)

TODO: moar sick settings with https://github.com/ryanmaclean/OSX-Post-Install-Script

User Preferences

It then syncs your user prefs with dotfiles+rcm

It grabs the thoughttbot/dotfiles repo, saves it in ~/src/thoughtbot/dotfiles and symlinks it to ~/dotfiles.

It then grabs glennr/dotfiles repo, saves it in ~/src/glennr/dotfiles and symlinks it to ~/dotfiles-local

You probably want to change the dotfile_repo_username variable to match your github username :-)

It then runs rcup to initialize your dotfiles.

MacStore Apps (WIP)

These apps only available via the App Store: *

mas from Homebrew will install Mac App Store apps

Application Settings (WIP)

Keep your application settings in sync.

TODO: Add Mackup task

Other

Development

You shouldn't wipe your entire workstation and start from scratch just to test changes to the playbook.

Instead, you can follow theses instructions for how to build a Mac OS X VirtualBox VM, on which you can continually run and re-run this playbook to test changes and make sure things work correctly.

Approach

We've tested it using an OSX 10.10 Vagrant/Virtualbox VM for developing & testing the Ansible scripts.

Simply spin up the Yosemite box in a VM, and have vagrant kick off the laptop setup.

Whats included?

Nada. Well not much. The whole point is to test the process of getting our OSX dev machines from zero to hero.

The Vagrant box we use is a clean-ish install of OSX. However the setup notes above uses Packer, which installs Xcode CLI tools. This can't be automated in an actual test run, and needs user intervention to install.

Test Setup

  1. Get Homebrew Cask

     brew install caskroom/cask/brew-cask
    
  2. Install Vagrant

     brew cask install --appdir="/Applications" vagrant
    
  3. Install VirtualBox;

     brew cask install --appdir="/Applications" virtualbox
    
  4. cd into this project directory;

  5. Run

     vagrant init http://files.dryga.com/boxes/osx-yosemite-10.10.3.0.box;
    
  6. The Vagrantfile should be ready as soon as Vagrant downloads the box;

  7. Start VM

     vagrant up
    

Notes

  • VirtualBox doesn't have Guest additions for Mac OS X, so you can't have shared folders. Instead you can use normal network shared folders.

  • If you are rolling your own box with the OSX VM template, this is the Packer config;

    ```
    packer build \
    -var iso_checksum=aaaabbbbbbcccccccdddddddddd \
    -var iso_url=../out/OSX_InstallESD_10.10.4_14E46.dmg \
    -var update_system=0 \
    -var autologin=true \
    template.json
    ```
    

Author

Jeff Maaks, 2018.

Credits

This project is based off the work of the following folks;

See also:

  • Battleschool is a more general solution than what I've built here. (It may be a better option if you don't want to fork this repo and hack it for your own workstation...).
  • osxc is another more general solution, set up so you can fork the xc-custom repo and get your own local environment bootstrapped quickly.
  • MWGriffin/ansible-playbooks was the original inspiration for this repository, but this project has since been completely rewritten.

About

MacOS setup via Ansible

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

MacOS-Setup

MacOS-Setup is a shell script and Ansible playbook to set up a fresh macOS environment. It installs and configures most of the software I use on my Mac.

It can be run multiple times on the same machine safely. It installs, upgrades, or skips packages based on what is already installed on the machine.

To kick off this process, simply start the install.sh script with:

sh -c "$(curl -fsSL https://raw.githubusercontent.com/jmaaks/macos-setup/master/install.sh)"

Requirements

I've tested it on:

  • macOS High Sierra (10.13.4)

Bootstrap Script: install.sh

The install.sh script bootstraps a new macOS installation by performing the following tasks:

  • Install Xcode Command Line Developer Tools
  • Install Homebrew
  • Install Pip
  • Add Python 2.7 user bin directory to the PATH variable (for pip)
  • Install Ansible via pip
  • Clone this repository locally
  • Call playbook.yml via Ansible to continue the installation/configuration process

TO-DO for install.sh

  • Verify sudo keep-alive is working
  • See whether pip installation needed (since now included in Python by default)

Ansible playbook: playbook.yml

This is the main Ansible installation/configuration script. It contains the following sections:

  • hosts: all
  • vars:
    • applications: the list of all applications that should be installed (using "brew cask install")
    • brew_taps: additional Homebrew repositories
    • brew_utils:
    • docitems_to_remove: list of apps to remove from the Mac dock
    • docitems_to_persist: list of apps to keep in Mac dock
    • home: user home directory
  • tasks:
    • Check Homebrew is installed
    • Install Homebrew
    • Install required Homebrew taps
    • Install libraries/utils with Homebrew
    • Cleanup after brewing
    • Check for installed apps (casks)
    • Install apps with brew-cask
    • Remove items from Mac dock (using dockutil)
    • Add items to dock (if needed)
    • Fix dock item order
    • Configure system settings (via scripts/system_settings.sh)

If you want to add/remove to the list of apps/utils installed, simple edit playbook.yml and re-run the bootstrap script.

You can do this as many times as you like and re-run the ansible-playbook command. Ansible is smart enough to skip installed apps, so subsequent runs are super fast.

TO-DO for playbook.yml

  • Find a fix for installing VirtualBox via Homebrew without GUI permission granting
  • Modularize playbook contents

Included Applications / Configuration

Applications

Apps installed with Homebrew Cask:

Packages/Utilities

Things installed with Homebrew:

  • autoconf

There are several more utils listed in the playbook.yml - simply uncomment them to include them in your install.

System Settings

It also installs a few useful system preferences/settings/tweaks with a toned-down verson of Matt Mueller's OSX-for Hackers script.

It does some reasonably gnarly stuff e.g.

  • hide spotlight icon
  • disable app Gate Keeper
  • change stand-by delay from 1hr to 12hrs.
  • Set trackpad tracking rate.
  • Set mouse tracking rate.
  • and lots more...

so you need read it very carefully first. (see scripts/system_settings.sh)

TODO: moar sick settings with https://github.com/ryanmaclean/OSX-Post-Install-Script

User Preferences

It then syncs your user prefs with dotfiles+rcm

It grabs the thoughttbot/dotfiles repo, saves it in ~/src/thoughtbot/dotfiles and symlinks it to ~/dotfiles.

It then grabs glennr/dotfiles repo, saves it in ~/src/glennr/dotfiles and symlinks it to ~/dotfiles-local

You probably want to change the dotfile_repo_username variable to match your github username :-)

It then runs rcup to initialize your dotfiles.

MacStore Apps (WIP)

These apps only available via the App Store: *

mas from Homebrew will install Mac App Store apps

Application Settings (WIP)

Keep your application settings in sync.

TODO: Add Mackup task

Other

Development

You shouldn't wipe your entire workstation and start from scratch just to test changes to the playbook.

Instead, you can follow theses instructions for how to build a Mac OS X VirtualBox VM, on which you can continually run and re-run this playbook to test changes and make sure things work correctly.

Approach

We've tested it using an OSX 10.10 Vagrant/Virtualbox VM for developing & testing the Ansible scripts.

Simply spin up the Yosemite box in a VM, and have vagrant kick off the laptop setup.

Whats included?

Nada. Well not much. The whole point is to test the process of getting our OSX dev machines from zero to hero.

The Vagrant box we use is a clean-ish install of OSX. However the setup notes above uses Packer, which installs Xcode CLI tools. This can't be automated in an actual test run, and needs user intervention to install.

Test Setup

  1. Get Homebrew Cask

     brew install caskroom/cask/brew-cask
    
  2. Install Vagrant

     brew cask install --appdir="/Applications" vagrant
    
  3. Install VirtualBox;

     brew cask install --appdir="/Applications" virtualbox
    
  4. cd into this project directory;

  5. Run

     vagrant init http://files.dryga.com/boxes/osx-yosemite-10.10.3.0.box;
    
  6. The Vagrantfile should be ready as soon as Vagrant downloads the box;

  7. Start VM

     vagrant up
    

Notes

  • VirtualBox doesn't have Guest additions for Mac OS X, so you can't have shared folders. Instead you can use normal network shared folders.

  • If you are rolling your own box with the OSX VM template, this is the Packer config;

    ```
    packer build \
    -var iso_checksum=aaaabbbbbbcccccccdddddddddd \
    -var iso_url=../out/OSX_InstallESD_10.10.4_14E46.dmg \
    -var update_system=0 \
    -var autologin=true \
    template.json
    ```
    

Author

Jeff Maaks, 2018.

Credits

This project is based off the work of the following folks;

See also:

  • Battleschool is a more general solution than what I've built here. (It may be a better option if you don't want to fork this repo and hack it for your own workstation...).
  • osxc is another more general solution, set up so you can fork the xc-custom repo and get your own local environment bootstrapped quickly.
  • MWGriffin/ansible-playbooks was the original inspiration for this repository, but this project has since been completely rewritten.

About

MacOS setup via Ansible

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

MacOS-Setup

MacOS-Setup is a shell script and Ansible playbook to set up a fresh macOS environment. It installs and configures most of the software I use on my Mac.

It can be run multiple times on the same machine safely. It installs, upgrades, or skips packages based on what is already installed on the machine.

To kick off this process, simply start the install.sh script with:

sh -c "$(curl -fsSL https://raw.githubusercontent.com/jmaaks/macos-setup/master/install.sh)"

Requirements

I've tested it on:

  • macOS High Sierra (10.13.4)

Bootstrap Script: install.sh

The install.sh script bootstraps a new macOS installation by performing the following tasks:

  • Install Xcode Command Line Developer Tools
  • Install Homebrew
  • Install Pip
  • Add Python 2.7 user bin directory to the PATH variable (for pip)
  • Install Ansible via pip
  • Clone this repository locally
  • Call playbook.yml via Ansible to continue the installation/configuration process

TO-DO for install.sh

  • Verify sudo keep-alive is working
  • See whether pip installation needed (since now included in Python by default)

Ansible playbook: playbook.yml

This is the main Ansible installation/configuration script. It contains the following sections:

  • hosts: all
  • vars:
    • applications: the list of all applications that should be installed (using "brew cask install")
    • brew_taps: additional Homebrew repositories
    • brew_utils:
    • docitems_to_remove: list of apps to remove from the Mac dock
    • docitems_to_persist: list of apps to keep in Mac dock
    • home: user home directory
  • tasks:
    • Check Homebrew is installed
    • Install Homebrew
    • Install required Homebrew taps
    • Install libraries/utils with Homebrew
    • Cleanup after brewing
    • Check for installed apps (casks)
    • Install apps with brew-cask
    • Remove items from Mac dock (using dockutil)
    • Add items to dock (if needed)
    • Fix dock item order
    • Configure system settings (via scripts/system_settings.sh)

If you want to add/remove to the list of apps/utils installed, simple edit playbook.yml and re-run the bootstrap script.

You can do this as many times as you like and re-run the ansible-playbook command. Ansible is smart enough to skip installed apps, so subsequent runs are super fast.

TO-DO for playbook.yml

  • Find a fix for installing VirtualBox via Homebrew without GUI permission granting
  • Modularize playbook contents

Included Applications / Configuration

Applications

Apps installed with Homebrew Cask:

Packages/Utilities

Things installed with Homebrew:

  • autoconf

There are several more utils listed in the playbook.yml - simply uncomment them to include them in your install.

System Settings

It also installs a few useful system preferences/settings/tweaks with a toned-down verson of Matt Mueller's OSX-for Hackers script.

It does some reasonably gnarly stuff e.g.

  • hide spotlight icon
  • disable app Gate Keeper
  • change stand-by delay from 1hr to 12hrs.
  • Set trackpad tracking rate.
  • Set mouse tracking rate.
  • and lots more...

so you need read it very carefully first. (see scripts/system_settings.sh)

TODO: moar sick settings with https://github.com/ryanmaclean/OSX-Post-Install-Script

User Preferences

It then syncs your user prefs with dotfiles+rcm

It grabs the thoughttbot/dotfiles repo, saves it in ~/src/thoughtbot/dotfiles and symlinks it to ~/dotfiles.

It then grabs glennr/dotfiles repo, saves it in ~/src/glennr/dotfiles and symlinks it to ~/dotfiles-local

You probably want to change the dotfile_repo_username variable to match your github username :-)

It then runs rcup to initialize your dotfiles.

MacStore Apps (WIP)

These apps only available via the App Store: *

mas from Homebrew will install Mac App Store apps

Application Settings (WIP)

Keep your application settings in sync.

TODO: Add Mackup task

Other

Development

You shouldn't wipe your entire workstation and start from scratch just to test changes to the playbook.

Instead, you can follow theses instructions for how to build a Mac OS X VirtualBox VM, on which you can continually run and re-run this playbook to test changes and make sure things work correctly.

Approach

We've tested it using an OSX 10.10 Vagrant/Virtualbox VM for developing & testing the Ansible scripts.

Simply spin up the Yosemite box in a VM, and have vagrant kick off the laptop setup.

Whats included?

Nada. Well not much. The whole point is to test the process of getting our OSX dev machines from zero to hero.

The Vagrant box we use is a clean-ish install of OSX. However the setup notes above uses Packer, which installs Xcode CLI tools. This can't be automated in an actual test run, and needs user intervention to install.

Test Setup

  1. Get Homebrew Cask

     brew install caskroom/cask/brew-cask
    
  2. Install Vagrant

     brew cask install --appdir="/Applications" vagrant
    
  3. Install VirtualBox;

     brew cask install --appdir="/Applications" virtualbox
    
  4. cd into this project directory;

  5. Run

     vagrant init http://files.dryga.com/boxes/osx-yosemite-10.10.3.0.box;
    
  6. The Vagrantfile should be ready as soon as Vagrant downloads the box;

  7. Start VM

     vagrant up
    

Notes

  • VirtualBox doesn't have Guest additions for Mac OS X, so you can't have shared folders. Instead you can use normal network shared folders.

  • If you are rolling your own box with the OSX VM template, this is the Packer config;

    ```
    packer build \
    -var iso_checksum=aaaabbbbbbcccccccdddddddddd \
    -var iso_url=../out/OSX_InstallESD_10.10.4_14E46.dmg \
    -var update_system=0 \
    -var autologin=true \
    template.json
    ```
    

Author

Jeff Maaks, 2018.

Credits

This project is based off the work of the following folks;

See also:

  • Battleschool is a more general solution than what I've built here. (It may be a better option if you don't want to fork this repo and hack it for your own workstation...).
  • osxc is another more general solution, set up so you can fork the xc-custom repo and get your own local environment bootstrapped quickly.
  • MWGriffin/ansible-playbooks was the original inspiration for this repository, but this project has since been completely rewritten.

About

MacOS setup via Ansible

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

MacOS-Setup

MacOS-Setup is a shell script and Ansible playbook to set up a fresh macOS environment. It installs and configures most of the software I use on my Mac.

It can be run multiple times on the same machine safely. It installs, upgrades, or skips packages based on what is already installed on the machine.

To kick off this process, simply start the install.sh script with:

sh -c "$(curl -fsSL https://raw.githubusercontent.com/jmaaks/macos-setup/master/install.sh)"

Requirements

I've tested it on:

  • macOS High Sierra (10.13.4)

Bootstrap Script: install.sh

The install.sh script bootstraps a new macOS installation by performing the following tasks:

  • Install Xcode Command Line Developer Tools
  • Install Homebrew
  • Install Pip
  • Add Python 2.7 user bin directory to the PATH variable (for pip)
  • Install Ansible via pip
  • Clone this repository locally
  • Call playbook.yml via Ansible to continue the installation/configuration process

TO-DO for install.sh

  • Verify sudo keep-alive is working
  • See whether pip installation needed (since now included in Python by default)

Ansible playbook: playbook.yml

This is the main Ansible installation/configuration script. It contains the following sections:

  • hosts: all
  • vars:
    • applications: the list of all applications that should be installed (using "brew cask install")
    • brew_taps: additional Homebrew repositories
    • brew_utils:
    • docitems_to_remove: list of apps to remove from the Mac dock
    • docitems_to_persist: list of apps to keep in Mac dock
    • home: user home directory
  • tasks:
    • Check Homebrew is installed
    • Install Homebrew
    • Install required Homebrew taps
    • Install libraries/utils with Homebrew
    • Cleanup after brewing
    • Check for installed apps (casks)
    • Install apps with brew-cask
    • Remove items from Mac dock (using dockutil)
    • Add items to dock (if needed)
    • Fix dock item order
    • Configure system settings (via scripts/system_settings.sh)

If you want to add/remove to the list of apps/utils installed, simple edit playbook.yml and re-run the bootstrap script.

You can do this as many times as you like and re-run the ansible-playbook command. Ansible is smart enough to skip installed apps, so subsequent runs are super fast.

TO-DO for playbook.yml

  • Find a fix for installing VirtualBox via Homebrew without GUI permission granting
  • Modularize playbook contents

Included Applications / Configuration

Applications

Apps installed with Homebrew Cask:

Packages/Utilities

Things installed with Homebrew:

  • autoconf

There are several more utils listed in the playbook.yml - simply uncomment them to include them in your install.

System Settings

It also installs a few useful system preferences/settings/tweaks with a toned-down verson of Matt Mueller's OSX-for Hackers script.

It does some reasonably gnarly stuff e.g.

  • hide spotlight icon
  • disable app Gate Keeper
  • change stand-by delay from 1hr to 12hrs.
  • Set trackpad tracking rate.
  • Set mouse tracking rate.
  • and lots more...

so you need read it very carefully first. (see scripts/system_settings.sh)

TODO: moar sick settings with https://github.com/ryanmaclean/OSX-Post-Install-Script

User Preferences

It then syncs your user prefs with dotfiles+rcm

It grabs the thoughttbot/dotfiles repo, saves it in ~/src/thoughtbot/dotfiles and symlinks it to ~/dotfiles.

It then grabs glennr/dotfiles repo, saves it in ~/src/glennr/dotfiles and symlinks it to ~/dotfiles-local

You probably want to change the dotfile_repo_username variable to match your github username :-)

It then runs rcup to initialize your dotfiles.

MacStore Apps (WIP)

These apps only available via the App Store: *

mas from Homebrew will install Mac App Store apps

Application Settings (WIP)

Keep your application settings in sync.

TODO: Add Mackup task

Other

Development

You shouldn't wipe your entire workstation and start from scratch just to test changes to the playbook.

Instead, you can follow theses instructions for how to build a Mac OS X VirtualBox VM, on which you can continually run and re-run this playbook to test changes and make sure things work correctly.

Approach

We've tested it using an OSX 10.10 Vagrant/Virtualbox VM for developing & testing the Ansible scripts.

Simply spin up the Yosemite box in a VM, and have vagrant kick off the laptop setup.

Whats included?

Nada. Well not much. The whole point is to test the process of getting our OSX dev machines from zero to hero.

The Vagrant box we use is a clean-ish install of OSX. However the setup notes above uses Packer, which installs Xcode CLI tools. This can't be automated in an actual test run, and needs user intervention to install.

Test Setup

  1. Get Homebrew Cask

     brew install caskroom/cask/brew-cask
    
  2. Install Vagrant

     brew cask install --appdir="/Applications" vagrant
    
  3. Install VirtualBox;

     brew cask install --appdir="/Applications" virtualbox
    
  4. cd into this project directory;

  5. Run

     vagrant init http://files.dryga.com/boxes/osx-yosemite-10.10.3.0.box;
    
  6. The Vagrantfile should be ready as soon as Vagrant downloads the box;

  7. Start VM

     vagrant up
    

Notes

  • VirtualBox doesn't have Guest additions for Mac OS X, so you can't have shared folders. Instead you can use normal network shared folders.

  • If you are rolling your own box with the OSX VM template, this is the Packer config;

    ```
    packer build \
    -var iso_checksum=aaaabbbbbbcccccccdddddddddd \
    -var iso_url=../out/OSX_InstallESD_10.10.4_14E46.dmg \
    -var update_system=0 \
    -var autologin=true \
    template.json
    ```
    

Author

Jeff Maaks, 2018.

Credits

This project is based off the work of the following folks;

See also:

  • Battleschool is a more general solution than what I've built here. (It may be a better option if you don't want to fork this repo and hack it for your own workstation...).
  • osxc is another more general solution, set up so you can fork the xc-custom repo and get your own local environment bootstrapped quickly.
  • MWGriffin/ansible-playbooks was the original inspiration for this repository, but this project has since been completely rewritten.

About

MacOS setup via Ansible

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

MacOS-Setup

MacOS-Setup is a shell script and Ansible playbook to set up a fresh macOS environment. It installs and configures most of the software I use on my Mac.

It can be run multiple times on the same machine safely. It installs, upgrades, or skips packages based on what is already installed on the machine.

To kick off this process, simply start the install.sh script with:

sh -c "$(curl -fsSL https://raw.githubusercontent.com/jmaaks/macos-setup/master/install.sh)"

Requirements

I've tested it on:

  • macOS High Sierra (10.13.4)

Bootstrap Script: install.sh

The install.sh script bootstraps a new macOS installation by performing the following tasks:

  • Install Xcode Command Line Developer Tools
  • Install Homebrew
  • Install Pip
  • Add Python 2.7 user bin directory to the PATH variable (for pip)
  • Install Ansible via pip
  • Clone this repository locally
  • Call playbook.yml via Ansible to continue the installation/configuration process

TO-DO for install.sh

  • Verify sudo keep-alive is working
  • See whether pip installation needed (since now included in Python by default)

Ansible playbook: playbook.yml

This is the main Ansible installation/configuration script. It contains the following sections:

  • hosts: all
  • vars:
    • applications: the list of all applications that should be installed (using "brew cask install")
    • brew_taps: additional Homebrew repositories
    • brew_utils:
    • docitems_to_remove: list of apps to remove from the Mac dock
    • docitems_to_persist: list of apps to keep in Mac dock
    • home: user home directory
  • tasks:
    • Check Homebrew is installed
    • Install Homebrew
    • Install required Homebrew taps
    • Install libraries/utils with Homebrew
    • Cleanup after brewing
    • Check for installed apps (casks)
    • Install apps with brew-cask
    • Remove items from Mac dock (using dockutil)
    • Add items to dock (if needed)
    • Fix dock item order
    • Configure system settings (via scripts/system_settings.sh)

If you want to add/remove to the list of apps/utils installed, simple edit playbook.yml and re-run the bootstrap script.

You can do this as many times as you like and re-run the ansible-playbook command. Ansible is smart enough to skip installed apps, so subsequent runs are super fast.

TO-DO for playbook.yml

  • Find a fix for installing VirtualBox via Homebrew without GUI permission granting
  • Modularize playbook contents

Included Applications / Configuration

Applications

Apps installed with Homebrew Cask:

Packages/Utilities

Things installed with Homebrew:

  • autoconf

There are several more utils listed in the playbook.yml - simply uncomment them to include them in your install.

System Settings

It also installs a few useful system preferences/settings/tweaks with a toned-down verson of Matt Mueller's OSX-for Hackers script.

It does some reasonably gnarly stuff e.g.

  • hide spotlight icon
  • disable app Gate Keeper
  • change stand-by delay from 1hr to 12hrs.
  • Set trackpad tracking rate.
  • Set mouse tracking rate.
  • and lots more...

so you need read it very carefully first. (see scripts/system_settings.sh)

TODO: moar sick settings with https://github.com/ryanmaclean/OSX-Post-Install-Script

User Preferences

It then syncs your user prefs with dotfiles+rcm

It grabs the thoughttbot/dotfiles repo, saves it in ~/src/thoughtbot/dotfiles and symlinks it to ~/dotfiles.

It then grabs glennr/dotfiles repo, saves it in ~/src/glennr/dotfiles and symlinks it to ~/dotfiles-local

You probably want to change the dotfile_repo_username variable to match your github username :-)

It then runs rcup to initialize your dotfiles.

MacStore Apps (WIP)

These apps only available via the App Store: *

mas from Homebrew will install Mac App Store apps

Application Settings (WIP)

Keep your application settings in sync.

TODO: Add Mackup task

Other

Development

You shouldn't wipe your entire workstation and start from scratch just to test changes to the playbook.

Instead, you can follow theses instructions for how to build a Mac OS X VirtualBox VM, on which you can continually run and re-run this playbook to test changes and make sure things work correctly.

Approach

We've tested it using an OSX 10.10 Vagrant/Virtualbox VM for developing & testing the Ansible scripts.

Simply spin up the Yosemite box in a VM, and have vagrant kick off the laptop setup.

Whats included?

Nada. Well not much. The whole point is to test the process of getting our OSX dev machines from zero to hero.

The Vagrant box we use is a clean-ish install of OSX. However the setup notes above uses Packer, which installs Xcode CLI tools. This can't be automated in an actual test run, and needs user intervention to install.

Test Setup

  1. Get Homebrew Cask

     brew install caskroom/cask/brew-cask
    
  2. Install Vagrant

     brew cask install --appdir="/Applications" vagrant
    
  3. Install VirtualBox;

     brew cask install --appdir="/Applications" virtualbox
    
  4. cd into this project directory;

  5. Run

     vagrant init http://files.dryga.com/boxes/osx-yosemite-10.10.3.0.box;
    
  6. The Vagrantfile should be ready as soon as Vagrant downloads the box;

  7. Start VM

     vagrant up
    

Notes

  • VirtualBox doesn't have Guest additions for Mac OS X, so you can't have shared folders. Instead you can use normal network shared folders.

  • If you are rolling your own box with the OSX VM template, this is the Packer config;

    ```
    packer build \
    -var iso_checksum=aaaabbbbbbcccccccdddddddddd \
    -var iso_url=../out/OSX_InstallESD_10.10.4_14E46.dmg \
    -var update_system=0 \
    -var autologin=true \
    template.json
    ```
    

Author

Jeff Maaks, 2018.

Credits

This project is based off the work of the following folks;

See also:

  • Battleschool is a more general solution than what I've built here. (It may be a better option if you don't want to fork this repo and hack it for your own workstation...).
  • osxc is another more general solution, set up so you can fork the xc-custom repo and get your own local environment bootstrapped quickly.
  • MWGriffin/ansible-playbooks was the original inspiration for this repository, but this project has since been completely rewritten.

About

MacOS setup via Ansible

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

MacOS-Setup

MacOS-Setup is a shell script and Ansible playbook to set up a fresh macOS environment. It installs and configures most of the software I use on my Mac.

It can be run multiple times on the same machine safely. It installs, upgrades, or skips packages based on what is already installed on the machine.

To kick off this process, simply start the install.sh script with:

sh -c "$(curl -fsSL https://raw.githubusercontent.com/jmaaks/macos-setup/master/install.sh)"

Requirements

I've tested it on:

  • macOS High Sierra (10.13.4)

Bootstrap Script: install.sh

The install.sh script bootstraps a new macOS installation by performing the following tasks:

  • Install Xcode Command Line Developer Tools
  • Install Homebrew
  • Install Pip
  • Add Python 2.7 user bin directory to the PATH variable (for pip)
  • Install Ansible via pip
  • Clone this repository locally
  • Call playbook.yml via Ansible to continue the installation/configuration process

TO-DO for install.sh

  • Verify sudo keep-alive is working
  • See whether pip installation needed (since now included in Python by default)

Ansible playbook: playbook.yml

This is the main Ansible installation/configuration script. It contains the following sections:

  • hosts: all
  • vars:
    • applications: the list of all applications that should be installed (using "brew cask install")
    • brew_taps: additional Homebrew repositories
    • brew_utils:
    • docitems_to_remove: list of apps to remove from the Mac dock
    • docitems_to_persist: list of apps to keep in Mac dock
    • home: user home directory
  • tasks:
    • Check Homebrew is installed
    • Install Homebrew
    • Install required Homebrew taps
    • Install libraries/utils with Homebrew
    • Cleanup after brewing
    • Check for installed apps (casks)
    • Install apps with brew-cask
    • Remove items from Mac dock (using dockutil)
    • Add items to dock (if needed)
    • Fix dock item order
    • Configure system settings (via scripts/system_settings.sh)

If you want to add/remove to the list of apps/utils installed, simple edit playbook.yml and re-run the bootstrap script.

You can do this as many times as you like and re-run the ansible-playbook command. Ansible is smart enough to skip installed apps, so subsequent runs are super fast.

TO-DO for playbook.yml

  • Find a fix for installing VirtualBox via Homebrew without GUI permission granting
  • Modularize playbook contents

Included Applications / Configuration

Applications

Apps installed with Homebrew Cask:

Packages/Utilities

Things installed with Homebrew:

  • autoconf

There are several more utils listed in the playbook.yml - simply uncomment them to include them in your install.

System Settings

It also installs a few useful system preferences/settings/tweaks with a toned-down verson of Matt Mueller's OSX-for Hackers script.

It does some reasonably gnarly stuff e.g.

  • hide spotlight icon
  • disable app Gate Keeper
  • change stand-by delay from 1hr to 12hrs.
  • Set trackpad tracking rate.
  • Set mouse tracking rate.
  • and lots more...

so you need read it very carefully first. (see scripts/system_settings.sh)

TODO: moar sick settings with https://github.com/ryanmaclean/OSX-Post-Install-Script

User Preferences

It then syncs your user prefs with dotfiles+rcm

It grabs the thoughttbot/dotfiles repo, saves it in ~/src/thoughtbot/dotfiles and symlinks it to ~/dotfiles.

It then grabs glennr/dotfiles repo, saves it in ~/src/glennr/dotfiles and symlinks it to ~/dotfiles-local

You probably want to change the dotfile_repo_username variable to match your github username :-)

It then runs rcup to initialize your dotfiles.

MacStore Apps (WIP)

These apps only available via the App Store: *

mas from Homebrew will install Mac App Store apps

Application Settings (WIP)

Keep your application settings in sync.

TODO: Add Mackup task

Other

Development

You shouldn't wipe your entire workstation and start from scratch just to test changes to the playbook.

Instead, you can follow theses instructions for how to build a Mac OS X VirtualBox VM, on which you can continually run and re-run this playbook to test changes and make sure things work correctly.

Approach

We've tested it using an OSX 10.10 Vagrant/Virtualbox VM for developing & testing the Ansible scripts.

Simply spin up the Yosemite box in a VM, and have vagrant kick off the laptop setup.

Whats included?

Nada. Well not much. The whole point is to test the process of getting our OSX dev machines from zero to hero.

The Vagrant box we use is a clean-ish install of OSX. However the setup notes above uses Packer, which installs Xcode CLI tools. This can't be automated in an actual test run, and needs user intervention to install.

Test Setup

  1. Get Homebrew Cask

     brew install caskroom/cask/brew-cask
    
  2. Install Vagrant

     brew cask install --appdir="/Applications" vagrant
    
  3. Install VirtualBox;

     brew cask install --appdir="/Applications" virtualbox
    
  4. cd into this project directory;

  5. Run

     vagrant init http://files.dryga.com/boxes/osx-yosemite-10.10.3.0.box;
    
  6. The Vagrantfile should be ready as soon as Vagrant downloads the box;

  7. Start VM

     vagrant up
    

Notes

  • VirtualBox doesn't have Guest additions for Mac OS X, so you can't have shared folders. Instead you can use normal network shared folders.

  • If you are rolling your own box with the OSX VM template, this is the Packer config;

    ```
    packer build \
    -var iso_checksum=aaaabbbbbbcccccccdddddddddd \
    -var iso_url=../out/OSX_InstallESD_10.10.4_14E46.dmg \
    -var update_system=0 \
    -var autologin=true \
    template.json
    ```
    

Author

Jeff Maaks, 2018.

Credits

This project is based off the work of the following folks;

See also:

  • Battleschool is a more general solution than what I've built here. (It may be a better option if you don't want to fork this repo and hack it for your own workstation...).
  • osxc is another more general solution, set up so you can fork the xc-custom repo and get your own local environment bootstrapped quickly.
  • MWGriffin/ansible-playbooks was the original inspiration for this repository, but this project has since been completely rewritten.

About

MacOS setup via Ansible

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

MacOS-Setup

MacOS-Setup is a shell script and Ansible playbook to set up a fresh macOS environment. It installs and configures most of the software I use on my Mac.

It can be run multiple times on the same machine safely. It installs, upgrades, or skips packages based on what is already installed on the machine.

To kick off this process, simply start the install.sh script with:

sh -c "$(curl -fsSL https://raw.githubusercontent.com/jmaaks/macos-setup/master/install.sh)"

Requirements

I've tested it on:

  • macOS High Sierra (10.13.4)

Bootstrap Script: install.sh

The install.sh script bootstraps a new macOS installation by performing the following tasks:

  • Install Xcode Command Line Developer Tools
  • Install Homebrew
  • Install Pip
  • Add Python 2.7 user bin directory to the PATH variable (for pip)
  • Install Ansible via pip
  • Clone this repository locally
  • Call playbook.yml via Ansible to continue the installation/configuration process

TO-DO for install.sh

  • Verify sudo keep-alive is working
  • See whether pip installation needed (since now included in Python by default)

Ansible playbook: playbook.yml

This is the main Ansible installation/configuration script. It contains the following sections:

  • hosts: all
  • vars:
    • applications: the list of all applications that should be installed (using "brew cask install")
    • brew_taps: additional Homebrew repositories
    • brew_utils:
    • docitems_to_remove: list of apps to remove from the Mac dock
    • docitems_to_persist: list of apps to keep in Mac dock
    • home: user home directory
  • tasks:
    • Check Homebrew is installed
    • Install Homebrew
    • Install required Homebrew taps
    • Install libraries/utils with Homebrew
    • Cleanup after brewing
    • Check for installed apps (casks)
    • Install apps with brew-cask
    • Remove items from Mac dock (using dockutil)
    • Add items to dock (if needed)
    • Fix dock item order
    • Configure system settings (via scripts/system_settings.sh)

If you want to add/remove to the list of apps/utils installed, simple edit playbook.yml and re-run the bootstrap script.

You can do this as many times as you like and re-run the ansible-playbook command. Ansible is smart enough to skip installed apps, so subsequent runs are super fast.

TO-DO for playbook.yml

  • Find a fix for installing VirtualBox via Homebrew without GUI permission granting
  • Modularize playbook contents

Included Applications / Configuration

Applications

Apps installed with Homebrew Cask:

Packages/Utilities

Things installed with Homebrew:

  • autoconf

There are several more utils listed in the playbook.yml - simply uncomment them to include them in your install.

System Settings

It also installs a few useful system preferences/settings/tweaks with a toned-down verson of Matt Mueller's OSX-for Hackers script.

It does some reasonably gnarly stuff e.g.

  • hide spotlight icon
  • disable app Gate Keeper
  • change stand-by delay from 1hr to 12hrs.
  • Set trackpad tracking rate.
  • Set mouse tracking rate.
  • and lots more...

so you need read it very carefully first. (see scripts/system_settings.sh)

TODO: moar sick settings with https://github.com/ryanmaclean/OSX-Post-Install-Script

User Preferences

It then syncs your user prefs with dotfiles+rcm

It grabs the thoughttbot/dotfiles repo, saves it in ~/src/thoughtbot/dotfiles and symlinks it to ~/dotfiles.

It then grabs glennr/dotfiles repo, saves it in ~/src/glennr/dotfiles and symlinks it to ~/dotfiles-local

You probably want to change the dotfile_repo_username variable to match your github username :-)

It then runs rcup to initialize your dotfiles.

MacStore Apps (WIP)

These apps only available via the App Store: *

mas from Homebrew will install Mac App Store apps

Application Settings (WIP)

Keep your application settings in sync.

TODO: Add Mackup task

Other

Development

You shouldn't wipe your entire workstation and start from scratch just to test changes to the playbook.

Instead, you can follow theses instructions for how to build a Mac OS X VirtualBox VM, on which you can continually run and re-run this playbook to test changes and make sure things work correctly.

Approach

We've tested it using an OSX 10.10 Vagrant/Virtualbox VM for developing & testing the Ansible scripts.

Simply spin up the Yosemite box in a VM, and have vagrant kick off the laptop setup.

Whats included?

Nada. Well not much. The whole point is to test the process of getting our OSX dev machines from zero to hero.

The Vagrant box we use is a clean-ish install of OSX. However the setup notes above uses Packer, which installs Xcode CLI tools. This can't be automated in an actual test run, and needs user intervention to install.

Test Setup

  1. Get Homebrew Cask

     brew install caskroom/cask/brew-cask
    
  2. Install Vagrant

     brew cask install --appdir="/Applications" vagrant
    
  3. Install VirtualBox;

     brew cask install --appdir="/Applications" virtualbox
    
  4. cd into this project directory;

  5. Run

     vagrant init http://files.dryga.com/boxes/osx-yosemite-10.10.3.0.box;
    
  6. The Vagrantfile should be ready as soon as Vagrant downloads the box;

  7. Start VM

     vagrant up
    

Notes

  • VirtualBox doesn't have Guest additions for Mac OS X, so you can't have shared folders. Instead you can use normal network shared folders.

  • If you are rolling your own box with the OSX VM template, this is the Packer config;

    ```
    packer build \
    -var iso_checksum=aaaabbbbbbcccccccdddddddddd \
    -var iso_url=../out/OSX_InstallESD_10.10.4_14E46.dmg \
    -var update_system=0 \
    -var autologin=true \
    template.json
    ```
    

Author

Jeff Maaks, 2018.

Credits

This project is based off the work of the following folks;

See also:

  • Battleschool is a more general solution than what I've built here. (It may be a better option if you don't want to fork this repo and hack it for your own workstation...).
  • osxc is another more general solution, set up so you can fork the xc-custom repo and get your own local environment bootstrapped quickly.
  • MWGriffin/ansible-playbooks was the original inspiration for this repository, but this project has since been completely rewritten.

About

MacOS setup via Ansible

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

MacOS-Setup

MacOS-Setup is a shell script and Ansible playbook to set up a fresh macOS environment. It installs and configures most of the software I use on my Mac.

It can be run multiple times on the same machine safely. It installs, upgrades, or skips packages based on what is already installed on the machine.

To kick off this process, simply start the install.sh script with:

sh -c "$(curl -fsSL https://raw.githubusercontent.com/jmaaks/macos-setup/master/install.sh)"

Requirements

I've tested it on:

  • macOS High Sierra (10.13.4)

Bootstrap Script: install.sh

The install.sh script bootstraps a new macOS installation by performing the following tasks:

  • Install Xcode Command Line Developer Tools
  • Install Homebrew
  • Install Pip
  • Add Python 2.7 user bin directory to the PATH variable (for pip)
  • Install Ansible via pip
  • Clone this repository locally
  • Call playbook.yml via Ansible to continue the installation/configuration process

TO-DO for install.sh

  • Verify sudo keep-alive is working
  • See whether pip installation needed (since now included in Python by default)

Ansible playbook: playbook.yml

This is the main Ansible installation/configuration script. It contains the following sections:

  • hosts: all
  • vars:
    • applications: the list of all applications that should be installed (using "brew cask install")
    • brew_taps: additional Homebrew repositories
    • brew_utils:
    • docitems_to_remove: list of apps to remove from the Mac dock
    • docitems_to_persist: list of apps to keep in Mac dock
    • home: user home directory
  • tasks:
    • Check Homebrew is installed
    • Install Homebrew
    • Install required Homebrew taps
    • Install libraries/utils with Homebrew
    • Cleanup after brewing
    • Check for installed apps (casks)
    • Install apps with brew-cask
    • Remove items from Mac dock (using dockutil)
    • Add items to dock (if needed)
    • Fix dock item order
    • Configure system settings (via scripts/system_settings.sh)

If you want to add/remove to the list of apps/utils installed, simple edit playbook.yml and re-run the bootstrap script.

You can do this as many times as you like and re-run the ansible-playbook command. Ansible is smart enough to skip installed apps, so subsequent runs are super fast.

TO-DO for playbook.yml

  • Find a fix for installing VirtualBox via Homebrew without GUI permission granting
  • Modularize playbook contents

Included Applications / Configuration

Applications

Apps installed with Homebrew Cask:

Packages/Utilities

Things installed with Homebrew:

  • autoconf

There are several more utils listed in the playbook.yml - simply uncomment them to include them in your install.

System Settings

It also installs a few useful system preferences/settings/tweaks with a toned-down verson of Matt Mueller's OSX-for Hackers script.

It does some reasonably gnarly stuff e.g.

  • hide spotlight icon
  • disable app Gate Keeper
  • change stand-by delay from 1hr to 12hrs.
  • Set trackpad tracking rate.
  • Set mouse tracking rate.
  • and lots more...

so you need read it very carefully first. (see scripts/system_settings.sh)

TODO: moar sick settings with https://github.com/ryanmaclean/OSX-Post-Install-Script

User Preferences

It then syncs your user prefs with dotfiles+rcm

It grabs the thoughttbot/dotfiles repo, saves it in ~/src/thoughtbot/dotfiles and symlinks it to ~/dotfiles.

It then grabs glennr/dotfiles repo, saves it in ~/src/glennr/dotfiles and symlinks it to ~/dotfiles-local

You probably want to change the dotfile_repo_username variable to match your github username :-)

It then runs rcup to initialize your dotfiles.

MacStore Apps (WIP)

These apps only available via the App Store: *

mas from Homebrew will install Mac App Store apps

Application Settings (WIP)

Keep your application settings in sync.

TODO: Add Mackup task

Other

Development

You shouldn't wipe your entire workstation and start from scratch just to test changes to the playbook.

Instead, you can follow theses instructions for how to build a Mac OS X VirtualBox VM, on which you can continually run and re-run this playbook to test changes and make sure things work correctly.

Approach

We've tested it using an OSX 10.10 Vagrant/Virtualbox VM for developing & testing the Ansible scripts.

Simply spin up the Yosemite box in a VM, and have vagrant kick off the laptop setup.

Whats included?

Nada. Well not much. The whole point is to test the process of getting our OSX dev machines from zero to hero.

The Vagrant box we use is a clean-ish install of OSX. However the setup notes above uses Packer, which installs Xcode CLI tools. This can't be automated in an actual test run, and needs user intervention to install.

Test Setup

  1. Get Homebrew Cask

     brew install caskroom/cask/brew-cask
    
  2. Install Vagrant

     brew cask install --appdir="/Applications" vagrant
    
  3. Install VirtualBox;

     brew cask install --appdir="/Applications" virtualbox
    
  4. cd into this project directory;

  5. Run

     vagrant init http://files.dryga.com/boxes/osx-yosemite-10.10.3.0.box;
    
  6. The Vagrantfile should be ready as soon as Vagrant downloads the box;

  7. Start VM

     vagrant up
    

Notes

  • VirtualBox doesn't have Guest additions for Mac OS X, so you can't have shared folders. Instead you can use normal network shared folders.

  • If you are rolling your own box with the OSX VM template, this is the Packer config;

    ```
    packer build \
    -var iso_checksum=aaaabbbbbbcccccccdddddddddd \
    -var iso_url=../out/OSX_InstallESD_10.10.4_14E46.dmg \
    -var update_system=0 \
    -var autologin=true \
    template.json
    ```
    

Author

Jeff Maaks, 2018.

Credits

This project is based off the work of the following folks;

See also:

  • Battleschool is a more general solution than what I've built here. (It may be a better option if you don't want to fork this repo and hack it for your own workstation...).
  • osxc is another more general solution, set up so you can fork the xc-custom repo and get your own local environment bootstrapped quickly.
  • MWGriffin/ansible-playbooks was the original inspiration for this repository, but this project has since been completely rewritten.

About

MacOS setup via Ansible

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages