Ansible is great and all, but I've been using a bash_profile to set up my workstations for years and it's worked great. Doesn't require third-party tools and uses bash, so it can literally run on anything, including Cygwin and LXSS (Windows).
I don't have a problem with third party tools or need to run a setup scrip on Cygwin or LXSS, but shell scripting just seems easier than a tool like ansible because you have a full programming language (albeit a terrible one), and you can use familiar command line utilities to do everything. (You can use them in ansible too, but it is frowned on -- you are supposed to relearn how to do everything using modules that are usually less powerful than the equivalent command line utilities.) I have never had to manage a huge fleet of servers, so maybe ansible has advantages in that setting, but for setting up a single box it just seems to make everything harder.
I'm a fan of Ansible, so let me reply to a few of your points :)
1. Playbooks are not a complete programming language for a good reason. You just get a simple linear flow of tasks with limited loops and conditions, so they're hard to make unreadable, unlike full-blown programming languages, like Python in Fabric or Ruby in Chef.
2. Yes, using shell commands for things that can be done using modules is frowned upon, but nobody is going to physically frown at you, so don't worry about it too much :) I drop down to shell/command/script modules whenever I need to without giving it a single thought.
3. Yes, the modules are often less powerful than the underlying tools. The other side is that they return nicely parsed data and changed/not changed status, so you can analyze their results more easily than shell commands.
4. Yes, ansible has immense advantages over shell scripting whenever one or more applies (generally the "manage a fleet of servers" scenario, not the "set up a dev box" one):
- you need to coordinate configuration between multiple machines (sshing back and forth is just clumsy in comparison)
- the playbook is to be used more than once (e.g. evolving configuration) -- I can't imagine my life right now without diffs and check mode. This also makes developing/debugging playbooks much easier than scripts, e.g. I recently wrote a hairy migration tool as a playbook and could easily see all the changes it would do without applying them
- some things are just easier in ansible (template and lineinfile come to the top of my head, plus everything is parsed for you into easily usable data structures)
5. I'd probably use ansible to set up my own machine if I ever got to automating the task, but you're right: learning ansible just for that makes little sense.
When you have three+ Macs to configure, it starts looking more like a fleet and less like a single computer :)
The main advantage I see is at it's a lot easier to reason with Yaml configuration than shell scripts with a ton of conditionals, and it's also easier to use Ansible's modules to make sure you can reprovision whenever you want to get new things added or old things removed.
Strap is a script to bootstrap a minimal OS X development system. This does not assume you're doing Ruby/Rails/web development but installs the minimal set of software every OS X developer will want.
Since I've been playing with NixOS, this project reminded me of https://github.com/LnL7/nix-darwin which lets you use a system-wide configuration.nix on OS X. Never tried it but it looks neat.
I actually use this, using it to replace my old ansible setup. I've got a lot of things I need to merge into there after more testing but yep its neat.
Not as great as the nixos version but every bit helps.
I thought several times about having an automated environment setup for my personal laptop, but I usually come to the conclusion that the time it would take me to maintain these scripts would probably exceed the time I spend doing the setup every 3-4 years (xkcd https://xkcd.com/1319/).
I usually now just install things as I need them and I feel that it is a smooth process. Installing software and managing packages has become much easier in recent years.
It's not just about whether the initial investment in time is worth it. It's also that your time-to-reinstall is predictable and short.
Once you've got a script, then it'll just be a minor annoyance if you have to reinstall at an inconvenient time. Personally, I've got a combination of a script, plus a set of notes. I haven't automated everything, just the easy parts.
But then again for a REAL quick installation, I've restored from Time Machine as well.
I've got a new workstation that's currently running Ubuntu 16.04 LTS but will soon be replaced with Arch Linux. This is my primary "work" machine so I want it to be back "fully-operational" as quickly as possible.
I performed an installation of Arch Linux on a ThinkPad W530, carefully documenting every little thing I did (lots of minor "tweaks" to get ZFS just the way I want it, my Yubikeys working with LUKS at boot, etc.).
Once that was up and running, I started writing Ansible roles to configure the system exactly to my liking. It was very time consuming at first, as I made sure to do every little thing "the right way" and so on. Eventually I started taking shortcuts in the interest of time, as I can always go back later and clean things up.
Once I get everything I need taken care of by Ansible, I'll reinstall the laptop and let Ansible loose as one last "verification", then I'll do the same thing for my workstation. I should end up with two almost identical machines that are configured exactly how I want them. Changes I make later can be "replicated" to the other host simply by updating my repo and re-running my playbooks. I'm going to try my best to avoid any ad-hoc changes but we'll see how that goes...
I work from home 95% of the time and the laptop is mostly for when SHTF and I have to grab it and go (network engineer for an ISP, so that usually means "something bad has happened"). I'm confident that I won't end up out in the field somewhere without access to certain files I need or documentation or whatever and the environments being almost identical means I won't have to deal with those annoying little inconsistencies between machines at the worst possible time.
It's time-consuming, for sure, but I think the end result will be worth it.
By far the biggest benefit is the easy synchronization between machines. The fact that I can wipe my machine and reinstall in half an hour is just a nice side effect.
I thought the exact same thing and recently put it to the test, and my estimate now is that in my case in about 15 years the time spent on creating the automation will likely have been payed off: 2 machines every 5 years, let's say 2 days to get them manually installed/configured completely vs about 6 days spent on the automation now. At least, if my stack or aplication preferences etc doesn't change too much. As a bonus: I learned some new stuff while doing it. So in the end for me it was worth it because of that learning and because I really dislike repeatedly installing stuff, waiting for installers to complete, customizing, ... But let's see again after a couple of iterations if I still think that way (e.g. if it turns out the automation scripts require too much caretaking, as per xkcd).
Thanks for this. I'm going to have to try these instructions at some point. A while back I was trying to do this, and couldn't make any of the instructions work. TL;DR: Installing macOS in a VM is more trouble than it's worth. I gave up and switched to VMWare instead, but I'd prefer to stick to VirtualBox since it's what I use for everything else.
First one of these in ages I've seen that isn't riddled with settings that will silently reduce system security for anyone foolish enough to run it.
Be aware it does apply some pretty idiosyncratic settings from his dotfiles, though, like disabling sleep and hibernate. I'd take some time to edit those prior to using.
wow - this is really cool, and it is a great initiative.
If someone would take a similar approach to installing (on linux) a particular version of ElementaryOS or linux, and puts together a set of recipes that would get it all souped up for development etc, that would be really great!!
One can even take it further to use an OS like Bodhi Linux which seems stripped down for the task, and use ansible instead of the native scripting etc.
One can get a superb development environment even with an older lower powered laptop; a lot of the grunt work can be automated away.
This has to be an open-sourced effort because a thousand combinations are possible and one needs a easy way to select what one needs, and this was my issue with ninite. It would install everything, and it also would configure etc .
This seems interesting. I use a Makefile to bootstrap my machine and manage my dotfiles.
I understand the appeal of Ansible, but I think it's more robust features are most useful in more complex environments than a personal laptop. My Makefile seems to do the trick.
I'd say that the Windows equivalent is https://chocolatey.org/. It has the largest amount of "packages" from all other similar efforts that I have seen.
It is integrated with mas (the CLI helper for the Mac App Store). You just pass in the IDs of whatever apps you want installed, and it will do the rest (even prompting for the App Store login).
For those interested: https://github.com/carlosonunez/setup