I've been running NixOS for a few years now. The pitch of NixOS is that your entire operating system is declared in config files, versioned in git, reproducible, and easy to roll back if things go wrong. I ran arch previously and broke my system enough that this was such a huge benefit I had to have it even if it meant learning the baroque nix language (which has grown on me since, but was initially a massive downside)
I soon discovered that there was a side benefit, which was that my changes to the OS no longer went into the aether. My interest in fiddling with my desktop os waxes and wanes, I'll get busy with life / work or whatever and come back to a custom system a year and a half later with no earthly idea how things work.
NixOS fixed this desktop attention deficit for me. Now there was a very clear centralized set of documents configuring everything. When I got the urge to fiddle I could sit down and pick right back up pretty easily. Also, a new laptop wasn't a chore, just change some hardware values and I can keep on fiddling with a more ram and cpus.
Recently though, NixOS has paid off in a new way. Being scriptable in principle was nice, but having a family and a fulltime job really limits the ambition of your fiddling. Either I'd get ambitious and leave a half-completed mess laying around, or I'd keep my ambitions small (usually one evening) and land them.
With claude code, in the last couple weeks I've added:
- A health service that talks to the garmin api and gets my sleep and heartrate and other health metrics and pulls it into a postgresql database
- a car charge service that talks to Hyundai and gets my car's charge level. (With desktop widget of course)
- A network health service that tells me if my wifi is bad, my network os overloaded or if comcast is having trouble on their backbone
- a desktop wallpaper changer that talks to gemini's nano banana and makes a new wallpaper every day with a configurable style and aesthetic (on my media laptop it generated pixel art, on my laptop is generates voynich manuscript inspired diagrams)
- I built an importer for years of garmin data that they provide in a huge dump file. I loaded it into postgres and built a trend dashboard on top.
- I converted and merged notes from 5 different note taking apps I've used over the years (roam, dynalist, obsidian, workflowy, logseq), plus data dumps of old blogs.
- I merged 3 nested layers of desktop backups which consisted of copying the home directory into the new home directory and calling it "Old Computer". Threw out all the junk and saved the good stuff.
I've been writing software for 20 years or so, none of these tasks were impossible, just a ton of mental energy I didnt have to tackle in my precious spare time. All of them have the difficulty profile of "google a lot for 15 different config options" "poke at this opaque data dump for its schema, then make a db schema based on it". Time consuming and sloggish, but not particularly difficult.
# My ambitions for desktop fiddling have been raised
Now I am kind of in the mindset of "how do I build this into my computer?". How do I get information I need surfaced easily. How do I get monitoring and alerting for my life? People have done this before, I'm not original here, but it actually seems tractable now.
## A thought about free software
Free software always had a conceit at its core that I've found a little unsatisfying: if you weren't a programmer yourself, you could hire one. The source code was available, and so in principle anyone could benefit from the freedom to modify and customize their software.
In practice, the friction involved in hiring a programmer to (say) write you a systemd service that talks to your car was pretty absurd relative to the value of the task. The transaction costs meant that for most people, the freedom to modify was theoretical. You had the right to do it, which is meaningful in its own way, but you probably weren't going to exercise that right for most of the small things that would actually improve your day-to-day computing experience.
I find it personally gratifying that this friction is mostly gone now. I can sit on my couch and describe what I want, and in a few minutes I have a working service, right there in my Nix config. If it breaks, I fix it the same way I wrote it. The gap between "the source is available" and "I can actually do something with it" has gotten meaningfully smaller for a much larger set of tasks. I'm not sure this was the way anyone expected free software's promise to get fulfilled, but it seems like it might be happening anyway.