Introducing `grind`
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.
What is grind
?
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?
Long story short I did use some of these tools before for my personal machine. Boxen a tool made by GitHub uses Puppet, and stayed using it from Dec 2013 to about a month ago.
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.
Why 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.
I'm convinced, what should I do now?
Navigate to grind
and clone or download
grind
to your machine. There's also plenty documentation on how to use it in
the grind
wiki and if you like it
(or not) send feedbacks.