When asked “what operating system should I use, Windows, Unix, or Mac?”, my answer is usually: “use whatever your friends use.” The advantage you get from learning from your friends will offset any intrinsic difference between OS, or between programming languages. Also consider your future friends: the community of programmers that you will be a part of if you continue. Do you like the people […]? — Peter Norvig
Every new engineer at too Inconsistent gets the same welcome package: access to our private Forgejo instance (more on that in another post) and a Linux starter pack that reflects how we actually work.
Doing this allows us to have a shared vocabulary for our development experience, and it’s also a way to live our company values related to user agency.
Let me explain.
Why we moved (back) to Linux
When I was 14, I’d already been tinkering with electronics and computers for a few years. Discovering an operating system that you could build from the ground up and customise to your liking seemingly forever was impossible to resist.
The infatuation with Linux lasted a good few years, but in my professional life I eventually switched over to MacBooks. For a long time, they were some of the best development machines around hardware-wise. They still are: the M-series chips still make Apple an innovator, but recently the philosophical cracks started to show and Apple started to irk me with their anti-competitive practices (like trying to challenge the EU’s DMA). Not to mention gifting a golden plaque to appease the dictator.
One day I had enough, so I decided: why not align the software I’m using with my philosophy? So I bought a second-hand laptop and switched back to Linux. I got a 7th gen ThinkPad X1 with the 4K screen which is a nice feature after being on MacBooks for so long. The best part is that because it’s a machine from 2019 someone was ready to get rid of their old corporate laptop for just a few hundred euros.
Windows isn’t even an option. Microsoft was never a corporation worth any trust, remember the Halloween documents? I do. Even then, back in the 2000s, Windows was a system that would serve the user. Nowadays, however, it’s become a platform designed to show ads alongside your file explorer. That, to me, violates what an operating system should be all about: a way for you to control your computer, not the other way around.
Lastly, there’s the annoying issue of forced obsolescence via bloated software. Too many developers spend time working on the latest machines and create software that will only run on similarly performant ones. We’ve created a world in which you can have an insanely performant computer which can’t handle the load of a few web apps needed to run your average SaaS. Users feel forced to upgrade frequently, while barely anyone asks how to build faster, more performant software. To put it in perspective: not so long ago we had computers running whole operating systems and multiple applications with the same amount of memory that’s taken today by a chat app. That’s sad.
So back to Linux it is.
Sensible defaults
A blank-slate Linux could take weeks to configure until you get it just right, because everyone’s Linux setup is tailored to them and their needs. In most companies, this would be unacceptable productivity loss. But for us, a few days of getting to know your machine and preferences is not a bad thing if it sets you up for weeks and months of comfort and fun down the line.
While the endless customisation options are great, they can be quite daunting, especially for a newcomer. A bit like those restaurant menus that are pages long. To make onboarding easier, we’ve created an opinionated starting point that invites modification, called Loom.
I’m a huge fan of the idea of malleable software with sensible defaults. Sensible defaults allow you to quickly get up and running, while leaving room to become tailored to exactly how you want it to behave. That’s also a philosophy shared by all our products.
Another side-effect of a common setup for everyone is that we can all contribute and share tools and tricks that we have found. We also do a lot of pair programming, and sharing setups also makes that slightly more seamless, because we have the same tools.
What’s inside
In short, Loom is a setup optimised for a mouseless workflow, inspired by the ability to work anywhere—at home, on the train, or in a mountain cabin—without carrying a mouse or straining your wrists on a trackpad.
The base: Arch Linux
We use Arch, btw. Meme aside, there are a few practical reasons:
- Wide software availability through the AUR (Arch User Repository)
- Rolling release model for up-to-date packages, with its upsides and downsides
- Optimised for x86-64 (we might need to rethink distro if we move to ARM)
- Minimal by design: no telemetry, bloat, or corporate agenda
But ultimately, the distribution matters less than the tools you run on top.
Interface: Niri
Niri is a scroll-based tiling window manager. Unlike traditional tiling WMs that arrange windows in a grid that keeps subdividing within a workspace, Niri uses an infinite horizontal scroll.
Tiling WMs are a bit of an acquired taste, but I believe they are the best option for mouseless workflows. If you’re new to them, expect a few days of adjustment. After that, you’ll wonder why you ever clicked so much.
Editor: Neovim
Neovim is fast, keyboard-centric, and ideal for older hardware. While VS Code can be tuned for keyboard use with plugins, it feels sluggish in comparison and is now just another opportunity to shove Copilot in your face.
Why Neovim? Vim-like keybindings are used everywhere across the setup (Niri, Firefox — through vimium, etc.). And in practice, the Lua-based plugin ecosystem is more active and modern than Vimscript. This matters a lot for further configuration and ease of finding solutions to your problem.
Sublime Text was a close runner-up for its speed, but for now, Neovim fits the mouseless philosophy best, allowing us to keep the focus of the setup on terminal-based tools.
Modal editing, like in vim, is another one of those things that might take a while to get used to. But after pushing through the discomfort and sticking with it for a week or two, you’ll feel like a wizard casting magic spells while editing your code.
A few other mentions
This is by no means an exhaustive list, but we include some other cool tools:
- bat aliased to cat: Adds syntax highlighting, line numbers, and Git integration for more readable file viewing
- eza aliased to ls: A modern upgrade that has colourised output, Git status integration, and better formatting out of the box
- lazygit: Offers an interactive visual interface for Git operations, really useful for auditing what’s going to be in your commit
- zoxide: Eliminates tedious
cd ~/Developer/tooinconsistent/loom/confignavigation by learning your files and lets you jump anywhere with minimal typing like:z loom conf
The tradeoffs
There are of course real losses to choosing Linux, and it would be dishonest not to mention them.
First, gaming on the laptop. This was never really my use case for the laptop, since, well, it’s a 6‑year‑old machine. My Steam Deck and other consoles solve this, as well as the occasional tablet sudoku when travelling (Cracking the Cryptic of course). Having had a Steam Deck for a few years and being thoroughly impressed by it, I’d go so far as to say Valve proving Linux gaming works legitimised the whole ecosystem and breathed new life into it. There are some reports that distros like CachyOS outperform Windows in gaming. So maybe it isn’t even a trade-off anymore.
For Călin on our team, there’s a more annoying problem: digital signatures required to authorise Romanian government operations don’t work, and there’s no timeline for them to offer a Linux solution. He currently solves this by using a Windows VM.
Some specialised tools, like Ableton Live, also don’t work on Linux, but it’s a minor point of friction rather than a hard blocker, since usually there are some open source equivalents (usually not as polished, though).
Lastly, we’re on Linux despite some remaining philosophical discomfort. Linus is a benevolent dictator — power concentrated in one opinionated person. It’s fine while you agree with the opinions, but that’s still a structural vulnerability. We’ve considered FreeBSD for this reason. For now, Linus does push back against corporate BS effectively enough that we stay. But we watch this space.
Why this matters for our work
We build software that respects users, so we want to use software that respects us.
It would be dishonest to say this to clients while running operating systems that serve us ads, track our behaviour, and force obsolescence through bloat. Not only that, but running a 7‑year‑old ThinkPad has a huge impact on our thinking about performance.
Most of our clients and their users don’t have the latest machine, nor can they justify upgrading as often as a Silicon Valley startup. When we tell them their app is slow and frustrates their staff, we’ve already optimised our own tools to the point where a 7‑year‑old laptop feels snappier than a new Mac. We’re not asking them to do anything we haven’t done ourselves.
If you’re considering joining us as an engineer and this setup sounds intriguing rather than horrifying, you’ll fit right in. But if reading ‘Arch + Vim + tiling window manager’ made you immediately recoil and think, ‘hard pass,’ we’re probably not a match — and that’s fine.
Our tooling reflects our values: agency, longevity, understanding our systems from first principles. We want to work with people who find that interesting, even if they haven’t used these specific tools before. The fun is in learning and improving together. You can also always contribute to Loom, and make it support your favourite WM.
Get started
For now Loom lives in our private Forgejo instance. We’re not open-sourcing it just yet because we want it to evolve with the people who use it, and we do want to have flexibility of breaking changes for now. Once it stabilises a bit, we’re definitely going to release it to the commons.
If you join us, ours becomes yours. You get access and you can contribute to it during onboarding. We’re curious to see what you’ll come up with! Get in touch if that sounds interesting.
Not looking to join our coop right now, but still intrigued, would like to give it a try, contribute while understanding the early nature of the pack? Get in touch as well!