{"id":13753217,"url":"https://github.com/mroth/bootslap","last_synced_at":"2025-09-11T14:21:25.383Z","repository":{"id":65566094,"uuid":"2192413","full_name":"mroth/bootslap","owner":"mroth","description":":coffee: bootstraps macOS to be usable","archived":false,"fork":false,"pushed_at":"2021-12-10T03:15:55.000Z","size":311,"stargazers_count":120,"open_issues_count":2,"forks_count":26,"subscribers_count":6,"default_branch":"master","last_synced_at":"2024-08-03T09:05:03.146Z","etag":null,"topics":["ansible","devops","homebrew","macos"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mroth.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2011-08-11T16:56:03.000Z","updated_at":"2024-02-07T11:30:21.000Z","dependencies_parsed_at":"2023-01-29T23:55:11.028Z","dependency_job_id":null,"html_url":"https://github.com/mroth/bootslap","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mroth%2Fbootslap","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mroth%2Fbootslap/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mroth%2Fbootslap/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mroth%2Fbootslap/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mroth","download_url":"https://codeload.github.com/mroth/bootslap/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224280857,"owners_count":17285534,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ansible","devops","homebrew","macos"],"created_at":"2024-08-03T09:01:18.498Z","updated_at":"2024-11-12T13:26:25.324Z","avatar_url":"https://github.com/mroth.png","language":"Shell","readme":"# bootslap\nOpinionated scripts to bootstrap my new Mac workstations when I get them. This\ndoesn't happen all too often, but in between home, work, desktops, laptops,\ncatastrophic hardware failures, etc., it happens more often than I'd like!\n\n\u003cimg width=\"682\" alt=\"bootslap screenshot\" src=\"https://user-images.githubusercontent.com/40650/36055303-9668f8ce-0dc9-11e8-94f8-f1790203d024.png\"\u003e\n\n[![Build Status](https://travis-ci.org/mroth/bootslap.svg?branch=master)](https://travis-ci.org/mroth/bootslap)\n\n## Core Philosophy\nAfter years of messing with various solutions for this problem, I've tried a lot\nof different solutions and evaluated a bunch of different approaches.\n\nAs a result of these forays, there are a few things bootslap is opinionated\nabout:\n\n - **Stand on the shoulders of giants.**\n   [Homebrew][homebrew] is the best way to manage CLI tools on OSX.\n   [Homebrew Cask][brewcask] is the best way to manage binary applications on OSX.\n   Make sure these providers are used for automatic installations as well, so\n   that we can take advantage of their expansive and well maintained libraries.\n\n - **Install as much as possible via default tools in default locations.**\n   Doing things in a nonstandard way or putting files in a nonstandard location\n   means you might hit state bugs the general populace won't. This also means\n   you aren't tied to bootslap in the future -- you can use it once to set stuff\n   up and then throw it away later.\n\n - **Do everything in an idempotent way.**\n   Tasks should be runnable at any time, creating/repairing installations when\n   needed, ignoring stuff if already exists.  You should be able to run the\n   bootstrap script on a fully up-to-date workstation after making a single\n   change, only only that one change will be applied to the machine, and it will\n   happen _fast_.\n\n - **Favor simplicity over modularity.**\n   Goal is for the entire codebase to be understandable and *modifiable*\n   directly by anyone seeking to repurpose this, instead of them relying on me\n   building in configuration options for whatever they might want to do.\n\n - **Use the same tools for automatic and interactive modes.**\n   Want to remove something later?  Don't need to mess with finding an uninstall\n   script (assuming one even exists) or going searching all over the hard disk\n   to figure out where your clever bootstrapper script put stuff.  Just `brew\n   uninstall foo` and it's gone.\n\n[homebrew]: http://brew.sh\n[brewcask]: http://caskroom.io\n\n\n## Quick Installation\n\n![factory](http://f.cl.ly/items/1u3a1A1X0K2k0y0K3a0z/giphy.gif)\n\n### Boostrap script :dizzy:\n\nFor an absolute pristine new Mac, it should be possible to just clone the repo\nand then run `bootslap.sh`.  This will install XCode Command Line Dev Tools,\nHomebrew, Ansible, and then run all the playbooks.  You can even do it without\ncloning the repo first (useful since MacOSX still doesn't have git by default):\n\n    curl -sL http://git.io/bootslap \u003e /tmp/bootslap; bash /tmp/bootslap\n\nBe sure to stick around for first minute or two so you can give Ansible your\nsudo password when it starts running playbooks.\n\n\n### Manual bootstrapping :hammer:\nDon't like running bash scripts piped off the interwebs? Or maybe you hate ASCII\nart and emoji? Either way, you can bootstrap the initial steps by hand as well\ntoo.\n\n 1. Install Homebrew:\n    `/bin/bash -c \"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)\"`\n 2. Install Ansible via Homebrew:\n    `brew install ansible`\n 3. Clone this repo, run the playbooks you want and go make yourself a coffee.\n    `ansible-playbook -K install.yml shell.yml configure.yml`\n\n\n## So what gets installed?\n\nI no longer keep an up to date summary list. But that shouldn't matter, since\nthe actual files are easy to read and modify.  As a starting point, look at:\n\n- `install.yml` for everything that I \"install\" to the machine\n- `shell.yml` for my shell setup and modifications\n- `configure.yml` for macOS system configuration twiddling\n\nNote that this repo is only half the story, some of magic happens in my\n[dotfiles](https://github.com/mroth/dotfiles) as well. (Which these scripts\nautomatically install for me).\n\nBut that's just what mine does! While I've certainly spent an inordinate amount\nof time obsessing about tooling and coming up with what I think they best tools\nand configuration for the job are, you probably have a different opinion.  These\nscripts are designed and written in a way to hopefully be a good starting point\nto write your own version, that sets  up things the way _you_ like them.  Check\nout the nascent [Customization Guide](CUSTOMIZING.md) for pointers.\n\n\n## More complex installation topics\n\n### Manual playbook runs\nPlays can be run individually if needed.\n\nFor example, to just do software installation (in case you don't have a dotfile\nrepo), you can do run the `install.yml` playbook.  Individual tasks are also\ntagged within the playbook so you can even do a\n`ansible-playbook install.yml --tags ruby` for example.\n\n### Configuration management\nUser dotfiles are managed via [homeshick](https://github.com/andsens/homeshick).\n\nBy default we look for `$USERNAME/dotfiles` on GitHub when getting things setup,\nand we infer your GitHub username from your system environment. You can manually\noverride this in the `shell.yml` playbook is desired.\n\n\n## What's New in version 5?\n\n### Version History\nI've investigated many possible approaches to this over time. A rough chronology\nfor historical purposes:\n\n - version5: Current ansible script solution. Rename to bootslap.\n - [version4][v4] A year of working with the Boxen project instead.\n - [version3][v3]: Moved to using chef recipes for software installation,\n   backporting recipes into the `pivotal_workstation` project.\n - [version2][v2]: Fancy Rakefiles version.\n - version1: Mostly just shell scripts (lost to time)\n\n[v4]: https://github.com/mroth/my-boxen\n[v3]: https://github.com/mroth/bootstrapper/tree/version3\n[v2]: https://github.com/mroth/bootstrapper/tree/version2\n\n\n### So why didn't you use?....\nIn other words, alternatives.\n\n#### Boxen\nAfter a year of struggling with Boxen for year (and contributing to the project)\nI've decided to abandon it.  Some of the \"highlights\":\n\n - Relies upon **custom versions of common packages** (e.g. git) that lag behind\n   official point releases.\n - **Needs to own way too much of the system configuration.** Uses it's own git\n   credential helper, for example, and overrides your `.gitconfig` to enable it.\n - **Way too much enabled by default.** Much of it to support the GitHub way of\n   doing project development (dnsmasq and nginx for project switching). I\n   stripped most of it out, but it was quite a lot of effort to do so.\n - **PITA to maintain updates.**  Require constant management of versions in\n   Puppetfile.\n - **Custom configurations for many tools.** This results in difficulty\n   troubleshooting due to a nonstandard configuration.  Also it breaks lots of\n   stuff, for example, Homebrew can't use precompiled bottles due to nonstandard\n   paths.\n - **Complex codebase.** Sure, it's mostly puppet recipes, but the way\n   everything is strung together makes it complex to understand whats happening\n   when something goes wrong.\n\nThat said, some of the stuff Boxen does is _very cool_ for large organizations\n(automatic GitHub Issue filing on install errors, for example).  If you have a\nfulltime sysadmin to manage your configuration and deployments it's probably\nworth looking into.\n\n#### Battleschool\nPretty close to what I want, but utilizes its own playbooks for installing\ncommon software.  I'd much rather just depend on homebrew and homebrew-cask.\n","funding_links":[],"categories":["Shell","macos"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmroth%2Fbootslap","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmroth%2Fbootslap","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmroth%2Fbootslap/lists"}