👨‍💻 Wesley Moore

Tech Stack 2024

·updated

Inspired by Alex Chan’s Tools of the trade post I thought I’d note down my current tech stack and then revisit it in a few years to see how things evolve. As per Alex’s post I’ll break it down into three sections: software, (development) tech stack, and hardware.

A photo of my desk. There's two displays, the one on the right is rotated into a portait orientation, the left on is on a wooden monitor stand. In front of the monitors are: a PS4 controller, TI-89, tenkeyless mechanical keyboard, mouse, and Kobo e-Reader.
My desk. The computer is behind the displays.

Software

My dotfiles are public so if you’re curious about the configuration of some of the tools mentioned below check out https://github.com/wezm/dotfiles.

Linux

I use Linux for everything. On my desktop machine, which I use for work as well as personal computing I run Arch Linux. On my laptop, which is more of an ancillary device that I use for tinkering and occasional travel I run Chimera Linux. My goal is to run Chimera on the desktop too (it actually dual boots already) but I need to get my work development environment working on it before I can do that. My desktop is my primary computer, the rest of the post will focus on that.

Awesome

I’ve been using the Awesome window manager since 2019. It’s deceptively good. When I try out other desktop environments it’s surprising how many little details that Awesome gets right. It’s also very stable, meaning I don’t get surprise updates to my UI in new releases.

However the writing is on the wall for X11. My current arrangement of two 4K 24" displays running at 2x scaling with one of them rotated to a portrait orientation is really pushing the limits of X11. It’s my goal to switch to a Wayland based system at some point in the future. Most likely System 76’s COSMIC desktop, which I’ve been periodically testing during its development.

Alacritty

Somewhere around 75% of the windows I have open at any time are terminal windows. I like Alacritty because it’s devoid of UI chrome and features like tabs. Awesome takes care of all window organisation so there is no need for tabs, splits and things like that. I also like that it’s responsive to use.

Z Shell

I’ve used the Z shell since at least 2008. I’ve tried out some of the newer shells but quickly run into limitations or things I miss from Z shell. Some things I like about it:

Espanso

Espanso is a text expander. It allows me to do things like type ;mdl and have that be replaced with a Markdown link using the contents of the clipboard (E.g. [](<clipboard url>)), or ;em and have that be replaced with my email address.

CLI

I use a bunch of CLI tools, aside from standard POSIX/UNIX tools I use these a lot:

Obsidian

I note down ideas, thoughts, howtos, and things in Obsidian. I picked it because the notes store is just plain Markdown files and they sync between Linux and iOS.

ZFS

/home on my system is a mirror of two 2Tb NVMe drives. I use ZFS for its data integrity (resistance to bit rot), redundancy (I can lose a drive an not lose data), compression (compressratio is 1.40x at the time of writing), and lightweight snapshots.

I use zfs-autosnap to periodically take snapshots of /home, which allows me roll back files if I get them into an undesirable state.

Text Editing

I’m currently in a bit of transitional period with text editors:

I have started using Zed for Rust development. Ideally it would be my primary editor but it doesn’t support enough languages yet. I imagine I will shift more tasks to it as it continues to improve.

1Password

I returned to 1Password when they released the Linux version. Not a lot say here, it’s reliable and works across all the devices I use.

Firefox

Like everyone I use a web browser a lot. I use Firefox as it’s fast, works well, is mostly user focused, has built-in ad blocking, and is not a made by Google.

Multi-account containers are a killer Firefox feature that allows me to segregate things like Google and Facebook off into their own little container. This separates them so that for my usual browsing I’m not logged into a Google or Facebook account so it’s harder for them to associate my activities across the web and on first-party sites (like Google Maps) with my account.

I’ve read some people say that they can’t use Firefox because too many websites don’t work with it but I don’t run into this problem at all with the sites I visit.

Stylus

I don’t use a lot of browser extensions but Stylus is a great one. It lets me apply custom styles to websites (or all sites). This enables me to fix poor font choices or hide that annoying Sign-In With Google across all websites.

Shotwell

I recently got a new DSLR and did some research to find a decent non-destructive photo editor and library manager. I settled on Shotwell and while I still dearly miss Aperture, Shotwell gets the job done.

keyd

keyd lets me customise and remap keys on my keyboard at the system level so that it works everywhere. I previously relied solely on programmable mechanical keyboards for this functionality but I’ve now been able to use a board that does not have a customisable firmware with the help of keyd.

CopyQ

Clipboard history is an essential part of any desktop computing environment and CopyQ is what provides it for me.

Dev Stack

Rust

Pretty much all software I write these days in done with Rust. I also use a lot of software written in Rust as it tends to be efficient with resources, reliable, and easy for me to delve into the code if needed.

mold

Linking is slow, I do a lot of linking working on personal and work projects. Mold makes this faster.

Rocket

For building web applications my go-to is Rocket. It’s not quite as batteries included as something like Rails but it includes a lot of stuff that’s missing from other Rust options.

Zola

For blogs and simple static sites I love Zola. It’s full-featured, customisable, and super fast.

Gleam

On occasions I need to write code targeting JavaScript. When that is non-trivial I’ve been reaching for Gleam. It’s kinda of like Elm but actively maintained and with fewer restrictions.

Hardware

Desktop Computer

My computer is a desktop machine that I assembled myself in 2023:

All of this is packed into a monstrous Fractal Design Torrent case with a lot of slow, quiet fans to try to keep all the hot things under control. This build was optimised for my development activities (both work and personal) with occasional gaming. For future comparisons it does a clean Prince build1 in 1m50s and scores 2966/20174 in Geekbench 6.

In early 2024 I started having trouble with pain in my hands from mousing. For nearly 20 odd years I’ve alternated mouse hands to load balance the wear on my hands. However this was an issue in both. That led me to try a vertical mouse, which didn’t initially help. I then tried a wrist rest but it was super hard and the pain remained. I got a different softer one and now the vertical mouse is comfortable and my hands have stopped complaining.

Laptop

My laptop is a 13“ HP Pavilion Aero Laptop 13-be0203AU I bought it because it was cheap (~AU$1000), had an 8 core AMD CPU, and was lightweight (~1kg). The case construction is not great as parts of it are painted plastic, which has dings and scratches on it now. In contrast to my old 2013 MacBook Pro, which still looks new.

I’ve pre-ordered a Lenovo Yoga Slim 7x (14“, Gen 9) Snapdragon to replace this machine. It’s got one of the new Snapdragon X Elite ARM CPUs in it. I expect I’ll have to make do with Windows & WSL until Linux support for this new hardware catches up.

1

time ./bin/build prince with mold as linker.

Stay in touch!

Follow me on the Fediverse, subscribe to the feed, or send me an email.