I love Linux! For those who know me, that's somewhat of an understatement. That's because, over the years, I've been known run almost every Linux distro you can think of, on devices you probably didn't think of. I actually enjoy the process of installing and configuring the system because every distro and device/platform has its quirks and unique challenges to get it working.
Over the years, I've compiled a list of useful software packages that I've grown to like and can't live without. However, I didn't much enjoy manually installing the same list of packages every time. I often found myself comparing the newly installed system with the current one to figure out what needed to be installed and configured. I got tired of this few years back and so that's why I created Install Buddy!
Think bootstrapping, not a configuration management
Configuration management systems are great for managing clusters of machines, each converging on a system specification. Most have complex features to address complex deployment scenarios - an overkill for my hobby requirements. In contrast, I wanted a simple tool to help me bootstrap a freshly installed system and bring it up to speed.
My design goals were to have a simple YAML config file that would work across many Linux (and even other UNIX like) systems and made use of the underlying package management system to take care of the installation.
How I use Install Buddy
To give a real-world example, I recently bought a new raspberry pi 4 and booted it with a fresh install of Raspberry Pi OS. These are the steps I'd follow in order to bootstrap it with my favorite packages.
Step 2 - Install ruby runtime
Step 3 - Install packages using Install Buddy
Step 4 (optional) - Copy other config files such as .bashrc, .vimrc, etc from mydotfiles repo to my home directory.
And that's it! So far I've used this to set up several Macs running OSX (via homebrew), laptops running Linux (Fedora, Debian/Ubuntu, Arch/Manjaro, Solus, etc.), Raspberry Pis, iPhone running iSH (via x86 emulation using Alpine) and inside of Docker. In doing so, I've been able to fix numerous bugs and add a few features along the way.