how i do my computing

students occasionally ask how i do my computing, so here is a brief summary (as of january 2022). i might update this page occasionally, but my setup has not changed much in recent years, so i don't expect this page to change very often.


whenever possible (read: whenever it is not too inconvenient), i prefer to use machines that only run Free/Libre Software.

nowadays, my main desktop computer is a system76 Thelio workstation.

i also use a D16 Workstation, purchased from Vikings. although this machine is old, its main appeal is its ability to run Libreboot, a freedom-respecting replacement for proprietary boot firmware.

i use a "vertical" mouse from Evoluent. i have tried a number of different keyboards, but my current favorite is the V3 from WASD keyboards (with Cherry MX Silent Red switches). i also love the IBM model M, as well as the "New Model M" from Unicomp.

the server powering is a Talos II from Raptor Computing Systems, which also does not rely on proprietary boot firmware.

my main laptop computer is a Librebooted Lenovo Thinkpad X200. i own a number of copies of this machine, purchased from Libiquity and Ministry of Freedom. i also own a Librebooted Thinkpad X200T tablet, which i use occasionally, as well as a Lenovo Carbon X1.

operating system and other software

i run Debian GNU/Linux on all my machines. i typically stick to the "stable" version, but i occasionally jump ahead to "testing." with two machines as exceptions1, i do not enable the "contrib" or "non-free" repositories, as those include non-free software.

while i spend most of my time in a terminal, i usually do so from an X11 environment. i use the Openbox window manager with some custom keybindings, and i use GNOME terminal as a terminal emulator. i use the tako shell, and the hzeep font.

a good amount of my time is spent editing text in one form or another, and i use Vim for those tasks (although i do configure things so that a number of Emacs keybindings are available, primarily because i prefer Emacs's movement commands).


i use Mutt for reading e-mails, Vim for composing e-mails, and msmtp for sending e-mails. i work with local copies of my e-mails, and i use offlineimap to keep those copies in sync with each other. roughly once per semester, i back my e-mails up to a Git repository, so that my actual IMAP mailboxes remain small.

i self-host a server for my personal e-mails, using Postfix and Dovecot.

web browsing

i route some network traffic through Tor, and i try to do most of my browsing through the Tor Browser. i also use GNU Icecat, Mozilla Firefox, or Qutebrowser.


i keep local copies of all of my music library (in the Ogg Vorbis format), and i keep these files in sync across my various machines using Syncthing. i use cmus to play music.


although i dabble in other languages, my go-to programming language for practical use is Python. i use Vim to write programs (i do not use an IDE), and i pretty much exclusively use print for debugging. i prefer Mercurial over Git for version control, but i routinely use both. that said, i often use the hg-git plugin to use Mercurial to interact with Git repositories.

i am strongly opposed to github, and i am also generally opposed to other forms of centralized repository hosting (though more moderately so if they run only Free Software). i prefer using simple decentralized tools like self-hosted repositories and e-mail for coordinating software development.


my lecture slides are primarily created using LaTeX or conTeXt, using a preprocessor that allows me to programmatically generate pieces of the source, to include figures from Metapost and Matplotlib, and to create animations and include video files. i use a small Python program to project my slides. i typeset written exams and problem sets using a similar system.

perhaps not shockingly, CAT-SOOP is my learning management system of choice.


1 i do own and use two machines that run non-free software: a desktop computer that i use for games, and a Lenovo Thinkpad X1 Carbon (which requires non-free drivers for wifi and ethernet).