Last couple of nights I spent coding a configuration tool for myself and named it
grind. I thought the best way to write about it is just answering questions, some were actually made to me and others I'm just guessing.
grind is a tool to help you configure your machine. Machine configuration is basically setting preferences, copying configuration files and installing software. A tool for this aim to help you to automate these actions and allow you to replicate the same steps on another machine. It also helps you repeat all over again if you start your system from scratch.
Yet another machine configuration tool? What about puppet, chef, ansible, cfengine and others?
These tools are designed for be generic and scale to complex environments. My scenario, or a development machine scenario to be more precise, doesn't require all these features. Basically the problem is using a tool that can do something but wasn't designed for it, doing that results in unintended complexity.
bash as a language and not
Go or other language?
bash is ubiquitous on Unix like systems and available by default on most of them. Chances are if you are using a Unix like system,
bash is available to you.
grind needs to start running in a bare system so
bash fits these requirements and is a language which I'm familiar with.
Why configure my machine with scripts or tools?
The goal of automating configuration is consistence and repeatability. Manually doing so assumes a couple of premisses like, you won't do it again and when you need to do it you know how to. Both of those turn out to be false in my case. Often I need to research all again how to do certain configurations and caught myself doing it again and again more often than expected.
I'm still not convinced, what else?
As most utilities, they are created because someone once need it, this is my case. I'm a big fan of automation and I believe things like having the computer setup shouldn't be a struggle. Also I need a way to record my configuration decisions, be faster in configuring for new projects and so on.
grind is a product of this necessity plus a desire to simplify, and allow extension, beyond what I had at my disposal. Ideally any person who feel the same would do the same, create an utility for helping out on these tasks. It might be your case, it might not be your case. Anyhow,
grind is available and it might be something on the lines you are looking for to scratch your itchy.