wezm.net/v2/content/posts/2024/tech-stack/index.md
2024-06-04 07:58:50 +10:00

267 lines
11 KiB
Markdown

+++
title = "Tech Stack 2024"
date = 2024-06-01T10:13:48+10:00
[extra]
updated = 2024-06-04T07:49:36+10:00
+++
Inspired by Alex Chan's [Tools of the trade][achan] 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.") }}
<!-- more -->
### 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][Awesome] 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&quot; 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][COSMIC], 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][zsh] 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](https://github.com/sharkdp/bat) — `cat` with syntax highlighting
- [fd](https://github.com/sharkdp/fd) — file finder
- [fzf](https://github.com/junegunn/fzf) — fuzzy finder (integrated with zsh and vim)
- [lsd](https://github.com/lsd-rs/lsd) — `ls` but better
- [ripgrep](https://github.com/BurntSushi/ripgrep) — clever regex search
- [tig](https://github.com/jonas/tig) — git TUI
- [paru](https://github.com/Morganamilo/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][firefox-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:
- AMD Ryzen 9 7950X 16-Core/32-Thread 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 PCIe Gen4 NVMe in ZFS mirror
- AMD Radeon RX 6700 XT GPU with 12Gb VRAM
- 2x Dell 24&quot; 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][WK870] with Gateron G Pro 2.0 brown switches
All of this is packed into a monstrous [Fractal Design Torrent case][torrent]
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] build[^1]
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.
[1Password]: https://1password.com/
[achan]: https://www.alexchantastic.com/tools-of-the-trade
[Alacritty]: https://alacritty.org/
[Aperture]: https://web.archive.org/web/20150407001931/http://www.apple.com/aperture/
[Arch Linux]: https://archlinux.org/
[Awesome]: https://awesomewm.org/
[Chimera Linux]: https://chimera-linux.org/
[CopyQ]: https://hluk.github.io/CopyQ/
[COSMIC]: https://blog.system76.com/tags/COSMIC%20DE
[Espanso]: https://espanso.org/
[firefox-containers]: https://support.mozilla.org/en-US/kb/containers
[Firefox]: https://getfirefox.com/
[Gleam]: https://gleam.run/
[keyd]: https://github.com/rvaiya/keyd
[Mold]: https://github.com/rui314/mold
[Neovim]: https://neovim.io/
[Obsidian]: https://obsidian.md/
[Prince]: https://www.princexml.com/
[Rails]: https://rubyonrails.org/
[Rocket]: https://rocket.rs/
[Rust Rover]: https://www.jetbrains.com/rust/
[Rust]: https://www.rust-lang.org/
[Shotwell]: https://wiki.gnome.org/Apps/Shotwell
[Stylus]: https://github.com/openstyles/stylus
[Sylus]: https://github.com/openstyles/stylus
[torrent]: https://www.fractal-design.com/products/cases/torrent/
[WK870]: https://www.keebmonkey.com/en-au/products/wk870?syclid=ck4d58iusvis73cshbug
[Zed]: https://zed.dev/
[zfs-autosnap]: https://github.com/wezm/zfs-autosnap
[ZFS]: https://openzfs.org/
[Zola]: https://www.getzola.org/
[zsh]: https://www.zsh.org/