NixOS and other tools

Note: This blog post is old and many things here have been changed and moved on. I will write another post to update.

Before I begin, you must know that my inspiration to move to NixOS was Spacekookie. I had no idea about NixOS before I learned about it from Spacekookie. You can read the NixOS/Home Manager post.

You can see my NixOS and Home Manager configs. This is a big deal!

History

Years ago, I moved to the Apple ecosystem for stability and things like the Time Machine backup system. That is still where my personal computing lives. But I was getting more and more worried about having personal data on the same machine where I download and run code. I was hoping to separate my development setup from my personal computing setup. I could have gone the route of QubesOS but back then I was not ready to shave more yaks than what I was already helping groom. So, I decided to buy a laptop and have been running Ubuntu on it, up until a few months ago, when I removed Ubuntu and moved to NixOS.

Why NixOS

For years I have looked at way too many tools to have a decent backup and restore strategy and nothing stood out. I can manage to backup my home directory and restore it but I needed something that helped reliably reinstall all the applications, dotfiles and other tools that I need day-to-day. Then I can just reinstall in case of a computer crash and fetch the home contents from a backup. This is where NixOS helps. In short, it is a Linux distribution that is based on Nix, a purely functional package manager (it is also a functional programming language). This allows your installations, upgrades, etc. to be atomic, which makes them much more reliable. That is, every time you install or upgrade, NixOS creates a new snapshot. You can clean older snapshots when you feel like it or boot into an older one if you wanted. There is also home-manager which is userspace Nix. I highly recommend you look into that as well.

For those interested here is my Nixos and Home Manager configs. I can give a quick run down.

A build shell script

This is needed because I want to be able to override certain packages and have the config live in my home directory rather than the default /etc.

Root(s)

This is where I store the root configs for various machines. A root config is your configuration.nix and hardware-configuration.nix that is created the first time you bootstrap while installing NixOS. You can use configuration.nix for everything but it is better to have some semblance of order. Programmers, eh!

I have three development machines and at the time of this writing, two of those are on NixOS. Yes, I love wolves and yes I came up with the name Torontula.

Common stuff

This is mostly common stuff for all machines without having to make duplicates. This could go into a configuration.nix but I chose to move it into its module.

Packages

Bonus

If you want to get help, folks on the NixOS IRC channel are very helpful!