11 KiB
+++ title = "Tech Stack 2024" date = 2024-06-01T10:13:48+10:00
#[extra] #updated = 2024-02-21T10:05:19+10:00 +++
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.
{{ figure(image="posts/2024/tech-stack/desktop.jpg", link="posts/2024/tech-stack/desktop.jpg", resize_width=1600, alt="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.", caption="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:
- Extensive, full-featured completion support
- Spelling correction/did you mean
- Synced history: history across all shells is added to history after every command and available in all running shells.
- Path expansion:
ls /h/w/P/rss<Tab>
→ls /home/wmoore/Projects/rsspls
- Command stack (
Esc-q
)
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:
- bat —
cat
with syntax highlighting - fd — file finder
- fzf — fuzzy finder (integrated with zsh and vim)
- lsd —
ls
but better - ripgrep — clever regex search
- tig — git TUI
- paru —
pacman
wrapper
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:
- Rust Rover for Rust
- Zed migration in progress for Rust
- Neovim for everything else, it's hard to beat
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 websites (or all sites). This lets do things like 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. Also I 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 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 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:
- AMD Ryzen 9 7950X 16-Core Processor
- 64 Gb DDR5 6000 MT/s RAM
- Storage:
- Root disk: Crucial T700 1TB PCIe Gen5 NVMe M.2 SSD
- /home: 2x WD_BLACK 2TB SN850X NVMe in ZFS mirror
- AMD Radeon RX 6700 XT GPU with 12Gb VRAM
- 2x Dell 24" 4K displays, one in portrait orientation
- Razer Kiyo web cam
- Audio Technica ATR2100X microphone
- Logi Lift vertical mouse + BenQ ZOWIE FK2-C mouse
- WK870 mechanical keyboard with Gateron G Pro 2.0 brown switches
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 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.
-
time ./bin/build prince
withmold
as linker. ↩︎