What I Use

I get asked quite a bit about the tools I use for certain tasks, what things are running in a screenshot, or what laptop I recommend to others. Although most of what's here are not recommendations, I'll try to keep this page up to date with what I'm currently using.

Primary Workstation

My primary workstation is a Lenovo ThinkPad X1 Nano (Gen 1) laptop with an Intel i7-1160G7 processor, 16 GB of RAM, and a 512 GB 2TB SSD. I purchased this particular example in early 2023 after the Gen 2 model came out and the Gen 1 models still in stock were heavily discounted. I wish it had a bit better thermals so it wouldn't get warm with the fan off because I do not like fan noises, but otherwise it's a pretty decent machine.

I use it with a right-angle USB-C cable connected to a Lenovo USB-C Dock j5create USB-C Dock under my desk which provides power and USB-A ports, one of which houses the Bolt Receiver for a Logitech Pebble M355 Logitech POP Mouse. I switched from the Pebble to the POP because the wheel on the Pebble rattles when scrolling quickly, and the POP is completely silent. Unfortunately it required purchasing a separate Bolt receiver and the pairing has to be done under Windows, but once paired, it works fine under OpenBSD. The center button on the mouse in front of the wheel sends a button 6 event which conveniently works with tpadnav to generate a back key press, causing Firefox to navigate back when pressed.

Occasionally I plug in a Creative BT-W3 (article) to route audio to my AirPods. Clearly OpenBSD is in need of a Bluetooth stack again so I can eliminate both of these USB dongles.

  • Operating System: OpenBSD-current
    I run a custom branch with some local changes and in-development drivers.

  • Editor: Vim
    I use a monochromatic color scheme and just a few plugins to keep it light.

  • Web Browser: Firefox
    I've been using Mozilla browsers since Netscape Navigator (back when OpenBSD had to run a BSDi binary-emulated version). I especially like using it these days because I switch between macOS and OpenBSD frequently and I like having all of my settings, bookmarks, and add-ons sync between both environments.

    A few about:config settings that I change for OpenBSD:

    • general.autoScroll: true to enable automated scrolling after a middle mouse button click
    • layout.css.devPixelsPerPx: 1.5 to render things larger on my laptop's screen, and enable 2x assets on websites that support them (like this one)
    • mousewheel.default.delta_multiplier_y: 50
    • ui.key.accelKey: 91 to use Super as the primary UI keyboard shortcut modifier, rather than Control (for similar muscle memory with the Command key on a Mac)
    • ui.key.meuAccessKeyFocuses: false to stop random Alt presses from bringing up the menu
    • widget.non-native-theme.scrollbar.style: 4 and widget.non-native-theme.scrollbar.size.override: 12 to make the scrollbars thicker

    I use a few add-ons, though some are just to restore functionality that used to be included in Firefox:

  • E-Mail Client: Mutt
    I've been a happy Mutt user for decades now, and I can't see myself ever switching to anything else, especially for dealing with mailing lists. I'm glad the sidebar functionality was finally merged and it works great with Fastmail's IMAP and SMTP servers.

  • IRC: Irssi
    I'm somehow still on IRC after 20 years, migrating from EFnet, Undernet, back to EFnet, Freenode, and now Libera Chat. I run Irssi on my server in a tmux session and then SSH to it from my laptop or phone to chat. I use a wrapper script to connect so that when my laptop screen locks, it kills the SSH session and then waits until the screen is unlocked before automatically reconnecting. This allows me to use the irssi-pushover plugin which sends me Pushover notifications when I'm mentioned or messaged, but only while nothing is connected to tmux.

    One thing I strongly recommend with Irssi is to /set paste_verify_line_count 1 so that pasting anything (accidentally or not) with a newline requires manual confirmation. Don't be that person (or cat) that accidentally pastes a screenful of garbage into a channel.

  • X11 Window Manager: progman
    A lightweight window manager I created that looks like Windows 3.1's Program Manager. I have been using this more lately to take a break from sdorfehs, my tiling window manager.

  • Miscellaneous Programs

    • Redshift to shift the color temperature at night
    • slock with DPMS functionality added so that it turns the screen off while locked
    • tpadnav to enable two-finger left and right swiping on the touchpad to navigate back and forward in Firefox
    • xbanish to hide the mouse cursor when typing
    • xbatticon and xcalicon for desktop widgets
    • xcalib to load a color calibration profile for my laptop generated from a Spyder X colorimeter
    • xdimmer to automatically turn off the keyboard backlight after a short period, and re-enable it when typing again

Work Programming Workstation

For work programming and other Mac-specific things, I use an Apple iMac 24" (2021) with an 8-core M1 processor, 16 GB of RAM, and a 2 TB SSD. It is fast and quiet, and its blue color matches my wall.

I use Xcode for iOS and Android Studio for Android development. I hate both of them.

I was previously using an M2 MacBook Air which was a great machine, but I never traveled with it and it just took up space on my desk. I switched to the iMac since it has a shallower profile and it shares the keyboard and mouse from my ThinkPad with Synergy. I can move the mouse cursor up to the top of my ThinkPad screen and it appears on the iMac where I can start typing, and vice versa.

Classic Mac Programming Workstation

For System 6 programming, my primary development machine is a Macintosh 512Ke upgraded to Macintosh Plus specs. I tried a 3rd party RAM upgrade but eventually just upgraded it with a full Macintosh Plus logic board and rear case, with 4 MB of RAM. I use it with its original M0110 keyboard and M0100 mouse.

Its SCSI hard drive is a BlueSCSI v2 with a 2 GB disk image on a Samsung PRO Endurance microSD card. It uses the BlueSCSI's Wi-Fi functionality for TCP/IP and EtherTalk for AppleTalk file sharing.

It has an RGBtoHDMI connected to its logic board that is plugged into my jcs.org server (the Mac Mini next to it) to live stream its screen through this website.

It runs System 6.0.8 and MultiFinder. I use THINK C 5 for C programming and Amend for revision control.


In my office, I sit in a Steelcase Gesture chair at a GeekDesk Max adjustable height desk with a "carbonized bamboo" top. I don't recommend this desk top as it is very soft and has many scratches and gouges in it from just a couple years' use. I wish I had ordered the chair with the optional headrest.

If you're wondering why my office photos seem so yellow, I use low Kelvin light bulbs in my lamps because I hate bright white LED bulbs.

Personal Technology

Not specific to one of my main computers, I have a few pieces of technology that are in frequent use:

  • Fastmail
    After decades of running my own e-mail servers and getting fed up with the arms race of dealing with spam, I switched to Fastmail for hosting my e-mail, calendars, and contacts a few years ago. I've been a very happy customer and their IMAP and SMTP service works great with Mutt, and their web interface for calendars and occasional e-mail is very lightweight.

  • Bitwarden
    Once 1Password discontinued its HTML export that I used to access my passwords on OpenBSD, I switched to Bitwarden for password management. It allows me to synchronize my passwords between my OpenBSD laptop (Firefox), my Mac laptop (dedicated macOS client), and my iPhone (iOS app and password filling extension). I ran my own server implementation for a while, but I gave up trying to keep pace with the upstream clients and server.

  • Apple iPhone 13 Mini
    The last of the small iPhones, I have the 512 GB model to be able to keep all of my high-resolution music and all of my photos with me. I'm not a big app user and prefer to use things in a web browser when I can, but here are a few apps on my home screen:

    • Albums to bring back "album shuffle" from the old iPods
    • Apollo to make Reddit tolerable RIP Apollo :(
    • Bitwarden for password management; I miss 1Password's polished UI though
    • Calendars 5 for a high-density monthly view which the default calendar app doesn't provide
    • Home Assistant for home automation things
    • Ice Cubes for Mastodon reading and posting
    • OTP Auth for all those OTP codes; importantly it offers encrypted export/backups
    • Pocket Casts which I've been using since my Android days
    • Prompt 2 for SSHing to my servers on the go
    • Pushover for push notifications
    • Tailscale for secure remote access for Prompt to reach my servers
  • Ruby
    While not really a personal technology, I thought it was worth mentioning Ruby because of how often I use it. When I'm not writing C, I'm writing Ruby, and my brain tends to think in Ruby when I need to map out how to understand something. I use it for one-off scripts, for larger projects like dynamic websites and to generate static websites like this one, and for very large projects like Pushover's API and website.

  • Apple AirPods Pro (2nd Generation)
    I listen to a lot of podcasts and music, and I use these at least a couple hours every day. The noise cancellation is great in loud public places, and the transparency mode is useful when wearing them at home when I still need to hear what's going on. I often just have one AirPod in, listening to a podcast while I do stuff. When the battery gets low, I can just switch to the other ear's AirPod while that one charges.

  • Pushover
    Obviously I use Pushover a lot on my devices and have it integrated into a number of things like my IRC client and cron jobs, though sadly I can't use many of its features for monitoring my own servers because those servers operate Pushover itself.

  • Tailscale
    I use Tailscale on all of my servers and (modern) workstations. It's great not having to deal with IPsec or running SSH on a hidden port, and being able to securely connect to any of my servers remotely when I need to.

  • rsync.net
    All of my dedicated servers around the country backup to rsync.net.

  • Syncthing
    I run this on my laptops and my file server as a way to keep my music, photos, and documents synced and backed up.

  • Amazon Kindle Paperwhite
    My preferred book-reading device. I used to have to jailbreak it to get book covers on the lock screen, but now it's natively supported by the Kindle OS.

  • Apple iPad Pro 11-inch (2nd Generation)
    Mostly just used for recording my Mac Plus, though occasionally used for testing Pushover on iPad OS or watching TV shows in bed.


I used to have a whole rack of equipment in my basement, but these days my network footprint is much smaller and quieter.

  • Router/Firewall

    My main router and firewall is a Protectli FW6 mini fanless server with an Intel Core i5 and six gigabit ethernet ports running OpenBSD. It uses VLANs on most of the ports to segment my network, and connects to AT&T U-Verse for internet access over symmetrical gigabit fiber.

    It runs Asterisk to connect the various telecom equipment in my office to Twilio SIP trunks, such as my Western Electric 1D2 payphone and modems.

    I have three Apple Airport Extreme Wi-Fi base stations throughout the house, two of which are connected back to the router over ethernet.

    A cheap TP-Link TL-SG108E 8-port managed gigabit switch up in my office handles VLANs for various things like my old Macs and a Grandstream HT814 4-port ATA that routes VoIP traffic between my BBS modem and my Asterisk router.

  • jcs.org server
    Previously this website ran on a dedicated server hosted at Vultr, but now that I have gigabit fiber and static IP addresses at home, I moved it to an old Apple Mac Mini (2012) with an Intel Core i5-3210M, 16 GB of RAM, and a Samsung 850 500 GB SSD. The Mac Mini runs OpenBSD, and operates silently on my desk.

  • BBS Server
    Kludge BBS runs on a dedicated Macintosh Plus located next to my desk. It has 4 MB of RAM, a Dayna DaynaPort SCSI/Link-3 ethernet adapter and a US Robotics 56k modem in the case of an old Apple 300/1200 modem.

    It runs my Subtext BBS Server on System 6.0.8 and has a 2 GB BlueSCSI v2 hard drive on a microSD card.

  • Home Assistant Yellow
    I have a handful of Z-Wave light switches and sensors in the house and recently switched to a dedicated Home Assistant Yellow device for controlling everything. The software is pretty terrible, but the Indigo Domotics software that I previously used and had to pay hundreds of dollars a year to keep upgrading was not much better.

  • Brother DCP-7065DN Printer
    I've had this printer/scanner for over a decade now and it's still rock solid. I mostly use it these days to print shipping labels for things, but I can't even remember the last time I've had to change its toner. It doesn't have any of the vendor lock-in like HP printers, and it connects to my network with good old ethernet (though I have it on an Apple Airport Express to bridge to Wi-Fi). I print to it from OpenBSD with CUPS and the brlaser driver which takes all of 30 seconds to setup when I get a new machine.

  • File Server
    An Apple Mac Mini (M1) in the basement primarily handles Time Machine backups from Macs and Restic/SSH backups from OpenBSD machines. It also uses osxphotos to keep a local directory synced with all of my photos from iCloud, that is then exported through Syncthing so they show up automatically on my OpenBSD laptop shortly after I take photos on my iPhone.

    It also hosts a small Linux VM in VMWare Fusion that runs Netatalk 2 for my classic Macs to be able to copy files around, and serves as a bridge between SMB on my new Mac and AppleTalk on the old Macs.


After burning two small holes in my main desk with a mini spot welder, I decided to make a dedicated workbench in my office for soldering and taking things apart. Because it had to fit in a rather particular space, I made a table from a large cutting board attached to two square legs with a drawer.

From left to right, these tools that I am not qualified to use are: a Hakko FR301 desoldering gun, a generic hot air station, a Fluke 117 multimeter, a USB fan with adjustable speed, wire, a Hakko FX888D soldering station, and a generic magnifying glass and lamp.

Not pictured is my Prusa i3 MK3S+ 3D Printer Prusa MK4 3D Printer located in a closet. I like it a lot but I'm not very good with modeling software, so I don't get as much use out of it as I probably could.

Questions or comments?
Please feel free to contact me.