Back Original

Why I'm moving to a Linux-based, terminal-focused dev workflow - and what it looks like

DISCLOSURE: If you buy through affiliate links, I may earn a small commission. (disclosures)

I recently decided to move to a terminal-based workflow and here I'm going to share a bit about why I decided to make that choice and what my current setup looks like.

Why Linux?

TL;DR - Windows is crufty and I don't like Apple's walled-garden approach.

I switched off Windows last year for Fedora because I was sick and tired of all the ads in the bottom right corner and my computer shutting itself down every couple of days, leading to loss of all my app windows. Plus I was running into some compatibility issues - trying to build some simple games with Raylib but running into issues with WSL (Windows Subsystem for Linux) and graphics and was just kinda like why am I fighting this thing so much?

I will note Windows has some nice things like best in class gaming and driver support and also has the largest array of available commercial software but for a lot of what I do, that's just not a big deal.

While I think Apple devices are nice (I've used Macbooks at work for the last ~7 years), I personally think they're overpriced and the walled garden is generally bad for tech innovation. That said I do understand it can lead to some benefits in terms of privacy and stability but think many of those claims are overblown if you use basic security / privacy / stability approaches to software. I also understand most phone / computer users don't so having a high floor of these fundamentals can protect a bunch of people from bad actors online. So Apple has its place and is very useful for a lot of people but I personally don't see that much benefit myself.

So I've been a PC guy by choice for the past ~decade and have run Linux flavors for about 6 of those 10 years and now I'm back to Linux, this time with Fedora.

Linux flavors

I chose Fedora because I felt it had a nice balance of frequent updates and stability. It gets more frequent updates than Ubuntu/Debian and updates are more tested than they are for Arch. Plus it has good backing in terms of a corporate backer and large user base so there's money and people incentive to keep developing for the ecosystem and most popular packages do ship a Fedora-compatible version.

And 12 months later I'm pretty happy with my choice. Fedora has been remarkably stable for me and is perfectly happy to be left running for days / weeks at a time before restarts or installs which suits some of my long-running AI workloads well. Also games work great - I've got an Nvidia GPU and run my games through Steam, sometimes with its Proton compatibility layer. If Protondb says the game is good to go then it usually works fine out of the box.

Why a terminal-focused workflow?

So I've worked as a professional software engineer for close to a decade and played with computer for much longer than that. I've seen people who worked all in terminals and thought that was cool but never really felt it was that useful / necessary - apps and GUIs are good!

Terminals have a lot of drawbacks:

But some recent developments have started to shift my thinking on this:

What I wanted out of a new workflow:

So all this kinda led me to considering terminals again since that's right where my AI CLIs were already running. Building Phase Golem (my AI orchestrator) further cemented this point as I was impressed with how easy it was to build useful wrappers around these CLIs and that worked all on local files and a bit of code. I was also intrigued based on seeing other Recurser's setups and thought it'd be cool to give them a try and see how they work if nothing else.

My Current Linux-based, terminal-focused setup

Here we'll discuss my current Linux-based, terminal-focused setup.

Note that this is my current setup at time of writing. I've only been back to Linux for a year and only started researching and implementing this setup last week so there's likely going to be some decisions based on partial data / context that will change in the coming months. But I still felt it was useful to share in case anyone else was curious about this route.

So my current setup right now is:

Note that these are all flexible, like sometimes I want an editor or browser or terminal open in the various workspaces so may spin one up to do a specific task but typically these stay regardless of what I'm working on.

Next

So yeah that's my current Linux setup. I'm still getting used to everything but it already feels a lot lighter and more streamlined for managing my windows, workspaces, and various projects so I'm pretty excited about it. Neovim itself will take some getting used to as I switch over from my years of muscle memory with VS Code and I'm not entirely sure how it's going to work with my work stuff so not totally sold on it but will give it a try as I think it's the best current option for a terminal-native editor.

If you're keeping count, this is now the second big undertaking I didn't think I'd be doing during my Recurse Center batch after switching to Rust but here we are and I've gotta say I'm pretty stoked about it.

If you liked this post you might also like: