My Software Stack

2026-07-28
Kirkland, WA

I have written a few versions of this blog post over the years, and it's the same level of navel gazing as sitting in a camp chair in your garage chatting about the contents of your pegboard with a can of Rainier: At the end of the day, whether you're a Makita or a Milwaukee household and how many drill attachments you have is probably less interesting than the chairs and end tables you build on the workbench.

I'm on sabbatical, so now is the time when navel gazing is permissible, if ever.

Operating Systems

I've been using Linux since 2006, when, after touring a few live CDs proved interesting but insufficiently mature (one memorable standout was a SLAX spin called AlienDrive), I settled on the newly minted Ubuntu 6.06LTS for the Pentium III machine I cobbled together from school dumpster parts. It lived in my parents' kitchen and got the job (email and forums and Quake) done well enough. I remember cobbling together a Pentium 2 from the same dumpster for my sister, which IIRC she picked Mandriva from a book of Linux CDs a kind KSC employee gave my family.

Through high school and college I split my time between Windows and Linux depending on the courses, games, and projects I was working on. Back when Ubuntu would mail you CDs, I would pass them out at school like they were candy brought to share with the class. I know at least one classmate who got one from me that went on to work at my employer's IT department, admin for mission-critical Linux systems.

After college, my home computers were running Ubuntu basically continuously until, ironically, me picking up a System76 laptop, a real Linux-first computer, gave me license to go on a grand tour of Debian, Fedora, Arch, Pop, Endeavor, and Elementary, before settling on NixOS after seeing both friends from work and friends from Jupiter Broadcasting raving about it.

I still mostly use NixOS on my primary laptop, servers, and desktop, a few years later now. As an atomic, config-driven distro, it's awesome to be able to build my base by editing a few text files and running a switch command, all while being able to roll back with just as simple of a command if things go wrong. Using the unstable package set means I get super fresh packages when I want them, and there sure are a lot of them to choose from. If I use Nix flakes, I can even pin the package revs like it's a package-lock file in some programming languages.

The learning curve was rough, it's not for people who don't care about the advantages I mentioned, or don't want to edit config files to change their installed programs. I gather that Claude is pretty good at managing it though, if you're not confident but also have very specific wants from their Linux setup.

I have some large disk arrays using ZFS. ZFS supports snapshotting, encryption, and syncing to remote machines. I have some python scripts that wrap Jim Salter's sanoid and syncoid tools for moving my critical data to backup machines safely. NixOS has great support for ZFS, but I've been using ZFS since my Ubuntu days, big fan and annoyed every day that there's not really a path for it to get into the kernel.

I also have boxes running Ubuntu, SteamOS, and Bazzite, in some specific appliance roles. My phone runs Android but I wish it didn't.

Userland

GNOME for the DE, for the most part, but I enjoy my time on Plasma when I use it. I used to use XFCE a lot, but mostly out of habit.

I use most of the default GNOME apps, but I swap the terminal for ghostty. I use fish-shell with the starship prompt. Mostly the standard GNU coreutils, but do have fd instead of find and ripgrep instead of egrep.

I use VSCode when I need heavy dev type work. For lighter stuff, micro or GNU nano are fine.

I have Libreoffice installed, but never really use it aside from viewing others' documents, or when I need a spreadsheet. I write docs in LaTeX if needed for the most part. I use Xournal++ for PDF editing when my browser's internal or GNOME's built in viewer is insufficient. I use calibre for organizing and managing reference documents and ebooks.

Thunderbird or just webmail for email / calendar. Firefox for web. I used to keep a Chromium instance around for WebSerial support for things like keyboard QMK flashing or ESPHome, but I have been able to ditch it since Firefox added support for WebSerial in release 151- way overdue but I'm happy to see it.

I listen to podcasts exclusively on my phone using the Antennapod app.

Services (self-hosted)

Some of my always-on machines host services that let me not live at my computers, which was helpful when I was in the office every day, but also remains helpful for me to be able to run to ball games or errands or just go for a walk but still be able to get at my digital stuff from my phone browser.

The most impactful one is probably Homeassistant. I am historically a bit of a no-smart-hardware extremist. However, with HASS, I can put all the smart stuff in an isolated, offline VLAN and leave it all locked up there, and the user interface I interact with is never online, accessed only via a VPN. I have devices connected to it directly via WiFi, bridged from Bluetooth via an ESP32, via ZWave, and via Matter-over-thread. Shout out to the matter-js project, who recently added Time Sync support. Warms my in-charge-of-time-sync-for-a-robotic-vehicle heart.

Homeassistant implements machine learning integrations very well, IMO, I can plug in API keys for the big providers to set up voice commands or automations with a little matrix math in the loop. Or, you can bypass all that junk and stand up a whisper and a piper or kokoro and an ollama container to get all the voice command and automation capability entirely offline and privately. Despite FUD from the big companies, qwen3.6:27b on my desktop GPU is a comparatively low cost, completely private, marginally talented LLM for the tasks I need it for. Your ethics for the provenance of those weights are your own, of course, but mine are compatible with using them in my own home.

I recently added an instance of Musicassistant as well, paired with some ESP32-based smart speaker devices for multiroom whole-home audio. My morning automation reads me the weather and my calendar and then starts some music. Even makes me coffee. Best alarm clock ever. Musicassistant allegedly supports sync with Antennapod via the gpodder sync protocol, but I haven't set that up yet and I don't feel a ton of draw to listening to whole home... podcasts.

Finally, I have some security cameras that feed to the Frigate NVR for detection and recording, which connects over to HASS as well.

All of the above services are managed directly by NixOS, which has the capability to manage LXC containers via Docker or Podman as systemd services, with pinned image hashes.

I also have a stack of more traditional web services: Nextcloud for files and calendar/contacts, Immich for backup and access to my photos, Jellyfin for streaming my DVD/Blu-Ray rips (I am the only person I know who still owns an optical drive...), Miniflux RSS reader, and Trilium Notes which is spectacular journaling / note-taking app with programmable frontend, database, and backend capabilities and strong templating capabilities.

Trilium's current maintainer is also a Doran, so, big fan.

Services (third-party)

Most all of my search goes through Kagi. I find the results are better than the big G's these days, better enough to actually pay for them, and it's nice knowing my data is private and not having AI garbage shoved in my face. They do have both AI results summaries and an AI assistant if you want to turn them on, to be clear, and they seem pretty competent, but you can just ignore them or even hard-disable them if you prefer. I'd probably buy email services from them too, just such a big fan.

Kagi maps has not replaced GMaps for me. Kagi doesn't have a navigation app, just search, which is competent but no-frills. I do like the CoMaps app, which uses OpenStreetMaps under the hood, but driving navigation is less current (in terms of identifying backups and proactively rerouting) than GMaps, and search is just not as good. If I know where I am going, I'll use CoMaps (or the app it forked from, Organic Maps), but I will put on GMaps for first-time nav.

I have a Youtube Premium sub, I watch a ton of Youtube videos, probably worth a roundup of my favorite creators sometime. I really do not like the Youtube apps at this point, finding that suggestions are pretty easy to enable my worst couch potato instincts. I'd like to try to connect up Pinchflat to Jellyfin so that my regular subscriptions can show up where my TV and Movies do.

I supplement my existing ripped CD and record collection with the Deezer music service. They take a very principled stance on machine learning, but also they just have a lot of great human-curated playlists and pretty excellent endless algorithmic ones, and of course enough breadth to their library. I'd probably cancel my subscription if they took a strong stance against Musicassistant, however.

Enough navel gazing.

That's the gist of it, but I am sure I've forgotten a ton of things.

This post's content has been largely procrastination. With the Mariners on the road, I've made light but nonzero progress on some projects I want to write about eventually, but I have mostly been burning down a backlog of chores around the house still. For example, yesterday I was crawling around under the kitchen sink tightening a wiggly faucet. I'd been putting that off for six months or so. Perhaps with my chore debt burning towards zero, projects shall advance with a little more vigor.

I was hoping I'd have more travel planned by this point, but I recognize I've been dragging out this plannning a little bit in hopes I could find some friends to travel with. Alas, I shall have to confront the dragon that is solo travel, which guarantees excitement.

I'm not a fan of public comments on websites, but I'd love for you to email your thoughts.

RSS
https://blog.caseydoran.space/posts/feed.xml