Tools I Use
I use computers a lot, and as a result I use a lot of software and hardware tools from day to day. I also have "opinions". This page contains a summary of the software and hardware that I use on a daily basis, as well as some thoughts on why I use it.
Software
Operating System
I consider myself to have two primary operating systems right now: Debian and OpenBSD. I'm also forced to use Ubuntu at work, and from time to time I'll maintain a Windows 10 partition for playing a couple of video games that don't work great on Linux.
I prefer the BSD approach to the Linux one at this point. If I could, I'd love to drop Linux completely and use nothing but OpenBSD. But, unfortunately, I need to keep a mainstream OS around (yes, I just called Linux mainstream) for work reasons.
I used to use Arch Linux, but after a few incidents involving compiler bugs in bleeding-edge versions of gcc costing me hours of life to debugging that I'll never get back, I decided that I'd rather live a release or two behind the curve and switched to Debian.
Shell
My shell of choice is ksh93, the "modern" Korn shell. Note that this is quite different from OpenBSD's ksh, which is based on pdksh (which is itself based on the original Korn shell from the '80s). Some fans have recently restarted development under the name ksh93u+m, and have been fixing bugs, refactoring, and generally breathing new life into this wonderful shell. It's very compatible with bash (a lot of bash's fancier features were first implemented in ksh) and, from day to day, I don't notice much difference in use or scripting. But it is fast, and it supports floating point arithmetic. It also reads scripts in large blocks, reducing the risk of problems happening if a script is updated while it is currently running.
Window Manager
I use a highly customized build of dwm, along with the other usual suspects: slock, dwmblocks, dmenu, tabbed, st, dunst, etc., for my computer's graphical interface. I once used i3, and then spent some time playing with Pop Shell (in the pre-COSMIC days) before realizing that dynamic window management was a far better solution for me. Plus, I enjoy the fact that I personally wrote some of the functionality of the window manager that I use every day. There's something empowering about being able to easily add features to (or fix bugs in) core parts of your system.
To be clear: I wouldn't recommend going the suckless route to most people. But I was already a C programmer before getting into it. So the barrier to entry was basically zero.
Text Editor
Speaking of stability, I use neovim for my text editor along with a couple of plugins. Unfortunately, this means that every morning is a roll of the dice as to whether my editor will work or not... but I'm sufficiently invested in the ecosystem that inertia keeps me there. I was originally drawn into the neovim world from vim (which I have been using forever) with its promises of a "cleaner and refactored codebase" and "more features" and "lua configuration". Unfortunately I didn't realize at the time that I was signing up for a non-stop maintenance extravaganza with constant breaking changes and a plugin-ecosystem that effectively mandates running a nightly development build of the editor and regularly updating configuration files to match the "new" APIs.
I finally cracked after one-too-many broken plugins and have dropped neovim in favor of an editor called Helix. This one is based on Kakoune, and is a modal editor like vim (though the keybindings are different but samey enough to make learning it a bit of a pain). The big advantage is that it has LSP, treesitter, and git integration built right into the editor, so it is entirely plug-and-play. No more broken plugins for me! I've been loving it so far, after I got over the initial hurdle of learning the new keybindings. The only annoying thing is that it isn't in Debian's repositories yet, so I have to install it manually on my desktop.
E-mail and Calendar
My email system is made up of neomutt (for my MUA), msmtp (for sending mail) and mbsync (for receiving it). I use Fastmail for my email provider.
I currently use khard for my address book, because it easily syncs over CardDAV using vdirsyncer. I would prefer to use abook, as I try to avoid Python scripts where I can, but getting synchronization working with abook takes effort, and I haven't put that effort in just yet.
For the same reason I use khal for my calendar, although I did just switch to calcurse on my work computer (which doesn't need CalDAV synchronization). I find I like the interactive interface of calcurse a lot better than khal, and so getting CalDAV synchronization working for it may have just jumped up higher on my priorities list.
Version Control
I use git. I have considered spending some time to figure out mercurial, but, frankly, git is "fine" and its what my collaborators all use, so...
Typesetting
Because I'm in academia, I don't get a ton of say in this. I use LaTex for most of my work-related writing. However, for personal stuff, or for class materials that I don't expect any instructors but me will use, I use groff. I try to avoid office suites.
Programming Languages
In terms of lines of code written, my top programming languages are probably: C++, POSIX shell, Python, C. C++ is what I use for work, shell is shell (hard to use UNIX effectively without writing lots of it), and Python was the language of instruction at a university I used to teach classes at.
C is my favorite language right now, but I don't get a ton of chances to use it, so it's mostly just used for hobby projects or quick, one-off programs.
In the past I have written substantial amounts of COBOL, Java (old job), MatLab, Fortran (engineering degree), and C# (undergrad), but I haven't touched them in so long that I won't even claim to "know" them anymore.
I would very much like to learn Go in the near future. It's nearly useless for the work that I do (lacks manual memory management), but it seems like it would a good alternative to Python for situations where that isn't important. I have no desire to learn Rust.
Music
I used to use Spotify, but I realized that I really don't need a subscription service to support my usual listening habits. I have a small set of music that I listen to repeatedly and that grows slowly. As a result, I'm pretty well served with one-off purchases of CDs or audio files. I ended up canceling Spotify last year, and haven't missed it at all. I purchase a lot of my music on qobuz these days. They sell uncompressed and losslessly compressed downloads without any DRM.
For playback, I use a pretty standard setup: mpd, mpc, and ncmpcpp. I just copy files to my phone and use its built-in audio player and Bluetooth to listen in the car.
I've also recently started getting into radio. I had completely forgotten about it, despite listening to it in the car a lot as a kid, but I'm really enjoying some of the local stations, particularly the classical, jazz, and folk shows on public radio. I'll probably write more about that at some point.
General List of Other Programs
At this rate, this page will be a damn book before I'm done. So let me just list off a bunch of other programs I used in quick succession without commentary. I may "promote" some of these to their own section at some point,
- RSS Feeds: newsboat
- YouTube/Odysee/etc.: newsboat + mpv
- Browser: firefox
- Terminal Multiplexer: tmux
- File Manager: none--I haven't needed to open one in months
- PDF/Document Viewer: zathura
- Image Viewer: feh
- Vector Graphics Editor: inkscape
- Video Editor: kdenlive
- Image Editor: gimp
- Screen Recording: ffmpeg
- IRC: weechat
- Spreadsheet: gnumeric or sc-im, depending on the use
- Plotting: gnuplot -- combine this with scripting and you barely need a spreadsheet program!
- Cryptocurrency: electrum (BTC), monero-cli and feather (XMR)
Hardware
Desktop
I've never really liked laptops (which is very ironic to say, given the state of the next section!), so I spend most of my time on my desktop computer. It's a custom build that I put together back in 2017, though I recently updated the GPU to something more modern. It runs an Intel i7 8700k processor and an AMD RX 7800XT GPU. I'm currently dual booting Windows 10 and Debian Trixie.
Laptop
I actually went for years without a laptop computer, but I finally broke down and purchased one in 2020--a System76 Lemur Pro. It's a decent enough computer, though I'm a bit annoyed at the glued-in battery and poor speakers. Frankly, I haven't touched it in over a year though, because I've since caught the Thinkpad bug.
I currently have three Thinkpads: a T420s, T430, and T480, all running OpenBSD. The T420s is my favorite (I adore the keyboard), but lately I find myself using the T480 the most because of its long battery life and modern conveniences.
Phone
I was very late to the whole smartphone thing. I actually used the same LG Chocolate Touch all the way through high school and college. I didn't get my first Android device until I went to graduate school in 2016 and my mother all but required it of me. I think because of that delay in adoption, I never really got into the whole "app" thing and continued to use my computer for most of what people use a phone for these days (banking, social media, etc.).
So, when support ended on my then current Android (seriously, screw phone manufactures. I hate being forced to buy a new phone every 2-3 years because they stop releasing security updates), I decided that it wasn't worth getting another smartphone, and went back to a feature phone again. I originally purchased a Sunbeam F1 Orchid phone, but last year upgraded it to the newer Horizon model. They're pretty similar, except the newer one has a USB-C port and a wireless hotspot function. It does almost all of what I need a phone for, and has held up incredibly well over the past year. I don't see myself going back to an Android at this point--I'm quite happy with it.
Two-factor Auth
I recently started being more deliberate about my information security posture. Because I don't use a smartphone, I don't have particularly easy access to authenticator apps. Thankfully, most of the services that I care about support Yubikeys, and so I've switched to using those everywhere they are supported. They have been incredibly convenient; I've been evangalizing for them (or similar hardware tokens, I know Yubico has some issues) to everyone who will listen for the past year or so.
For things that don't support my Yubikeys, I use the 2FA plugin for pass, pass-otp, where I can. The residue is, sadly, stuck on email or SMS 2FA.