Things I Use

A /uses page that describes the tools I use

This is a /uses page that describes the tools I use (or have used, or hope to use, or am curious about, or have opinions on), ranging from computing hardware and software to more general products I recommend.

Computer hardware

In general, I optimize for high performance, low price, high durability, reasonable future-proofing, and aesthetics, in that order. For environmental reasons—as well as a general sense of frugality—I prefer to buy used/refurbished hardware when available, though my risk-aversion tends to prevent me from exercising that option unless I’m confident in the return policy of whatever e-commerce platform I’m using.

Desktop

This workstation (hostname desktop) is my primary general-purpose computing device: it’s reasonably powerful, always on, and moonlights as my homelab. I built it in early 2024, using the following parts:

I’m quite satisfied with its current performance and have no plans to upgrade anything anytime soon—except perhaps adding more storage for redundancy. This is probably a suboptimal configuration, but it was my first computer build, so cut me some slack 🤷; if you have any feedback or suggestions, though, feel free to reach out!

desktop—in a surprisingly apt display of nominative determinism—sits atop my desk, and is connected to the following peripheral devices:

Monitor

Lenovo G34w-10 curved 34-inch ultrawide monitor (21:9 aspect ratio) with a VA LCD panel, connected via DisplayPort 1.x (3440×1440 resolution @ 144 Hz refresh rate)

I really enjoy using an ultrawide monitor (especially in combination with my scrolling window manager), but if I were to upgrade, I’d prefer an OLED monitor with perfect inky blacks, something I’ve taken for granted ever since my first smartphone—a Samsung Galaxy SII. Of course, OLED monitors degrade more rapidly, so perhaps the ever-present non-uniform dark gray on my screen is a (tarnished) silver lining. My monitor is rather chonky and rests on its original base: even the central arm of an incredibly solid triple-monitor mount I’d once purchased failed to support it without dipping.

Mouse

Logitech MX Master 3S mouse with left/right buttons, vertical/horizontal scrollwheels, and forward/back thumb buttons; connected via its 2.4 GHz wireless dongle

My mouse is great: I love how it feels in my (admittedly rather small) hand despite its large size. The forward/back thumb buttons get a lot of use, as does the thumb-controlled horizontal scrollwheel—finally, my opposable right thumb is put to good use! I use the “free-spin” mode of the vertical scrollwheel and don’t think I could switch back to a ratcheting scrollwheel. My one complaint is the rubberized surface material which absorbs skin oils and sweat and is reported to degrade with age—I have a sneaking suspicion that this is Logitech’s planned obsolescence strategy for this mouse, because it’s perfect in every other way.

I’m curious about other types of pointing devices, including trackballs; if I decide to explore that rabbithole, I’d strongly consider using a Ploopy device, since they provide open-source hardware and software. I expect the pointing interface of the future will be high-resolution eye-tracking: reactions to modern virtual reality (VR)/augmented reality (AR) headsets—especially the Apple Vision Pro—suggest that using gaze to interact with the environment affords incredible UX. Of course, unless the immense problems with head-mounted eye-tracking gear can be overcome—say with webcam-based solutions or lightweight eyeglasses—this will never be the most convenient way to interact with a computer: mice are good enough.

Keyboard

GMMK Pro 75% mechanical keyboard with QMK firmware, Gazzew Boba U4T tactile switches (unlubed and unmodded) and white PBT doubleshot keycaps (LTC Lavacaps), connected via USB

My keyboard is excellent: it’s lovely to type on because it provides very satisfying tactile feedback and makes deep thocky sounds (though some keys do ping a bit). The keycap lettering is impeccable—large and centered uppercase Latin characters that are translucent, allowing the backlight to shine through the letters in the dark! The keeb’s build quality is phenomenal: I could probably bludgeon someone to death with it without causing any damage to its ✨ CNC-machined anodized aluminum body ✨. As the keyboard is elevated pretty high above the desk, I also use a wrist rest to ensure that my forearms are coplanar with its upper surface and avoid wrist strain. Unfortunately, the cloth-covered wrist rest, while comfortable, is permeable to various bodily secretions and gets icky, and is also difficult to clean. When it finally wears out, I’ll switch to a wooden wrist rest as god surely intended.

Of course, a row-staggered keyboard is just an evolutionary spandrel, a mere anachronistic vestige of the QWERTY typewriters that once freely roamed the savannahs. To transcend the mundane and experience the divine, I spent many months building my own Ferris Sweep, an ergonomic 34-key mechanical split keyboard with a Colemak-DH layout—but as is tradition, I have yet to actually configure and use it 😔.

Webcam

Logitech C920S HD Pro webcam that doubles as a microphone, connected via USB

My webcam is perfectly adequate (too good for my face!) and has a physical cover for privacy. Its inbuilt microphone is also very handy, though I have had complaints about background noise when I type on my thocky mechanical keyboard during conference calls. I also scored a free ring light from a friend, which I’ve carefully balanced on my monitor stand centered around my webcam; its latter half is occluded by my monitor, which makes this a semiring light, I guess. Its brightness and color temperature (warm/neutral/cold white) are adjustable with a physical switch, but cannot be controlled via USB, as far as I can tell.

Speaker

boAt Stone 200 portable wireless speaker, connected via Bluetooth

My speaker is fine—I’m no audiophile—but a minor convenience is that it only has a micro-USB charging port, forcing me to keep a micro-USB cable around (though I suppose I also use it for my Kindle, so it’s not entirely wasted).

Headphones

JBL Tune 710BT wireless over-ear headphones, connected via Bluetooth

My headphones are also fine—they’re my daily drivers (heh). Bluetooth latency is sometimes annoying, but I’m used to it now. I think it’s supposed to have a microphone too, but I’m not sure if it’s ever worked for me. Note to self: figure out how to get Bluetooth headset mode (speaker + mic) working on NixOS.

Earbuds

TOZO A1 wireless earbuds, connected via Bluetooth

I also use these earbuds on occasion, though I usually prefer the headphones. They failed to connect to one of my smartphones running an (old) version of LineageOS (perhaps a Bluetooth version issue?) but do connect to my computers and Pixel 8 smartphone. Again, I’m unsure if the integrated microphone works: I think I’ve never quite gotten it to work, but I have to check.

Gamepad

[none—yet.]

I haven’t really used a gamepad much: most of the games I play work perfectly fine with a keyboard and mouse—but friends have told me that using a gamepad makes playing some games much better. If I were to take the plunge, I would likely purchase an Alpakka-series device from Input Labs, who create open-source gamepads with gyroscopic controls—as well as a single-handed gamepad for those with accessibility issues.

Laptop

My secondary general-purpose computer is a hefty 15-inch laptop (hostname laptop, purchased around 2020) that I travel with, though I often leave it at work due to its bulk, which is exacerbated by a chonky non-USB-C charging brick. Usually, I use its integrated display as a secondary monitor, raised to eye level with a cheap ventilated laptop stand that supports various angles of elevation.

The laptop is specced reasonably well, but I use it primarily as a thin client to connect to desktop at home or other workstations/clusters at work. Since it has a discrete graphics card, I also use it as a portable gaming computer on occasion.

If I were to get a new laptop, I would likely opt for one from Framework—I appreciate their repairability ethos and Linux support. Of their products, I think I would most prefer a Framework Laptop 13, especially if an OLED touchscreen option is released. The Framework Laptop 12 has a stylus and touchscreen, but is unfortunately quite under-specced relative to its price—especially given the current RAMpocalypse—and I likely wouldn’t be able to use it as a decent portable gaming machine. The Framework Laptop 16 is an interesting, highly modular laptop with upgradable discrete graphics (!) but it’s too expensive and also too bulky for (my) everyday use.

Computer software

On both desktop and laptop, I use almost entirely free and open-source (FOSS) software, with some notable exceptions for GPU computing (CUDA libraries) and gaming (Steam client)—and whatever closed source firmware and blobs are unfortunately required to run modern hardware.

Operating system

I use a GNU/Linux operating system that is configured and built declaratively using Nix, an implementation of a purely functional software deployment model.

Previously, I used Debian and Arch Linux—configured with an ad-hoc combination of shell scripts and Ansible playbooks—before the allure of declarative configuration drew me to NixOS.

Perhaps I might try using Guix—a declarative package manager and GNU/Linux distribution inspired by Nix—in the future. I’ve also heard great things about FreeBSD and experimental operating systems like RedoxOS and Haiku, but have no plans to try them unless they achieve feature parity with NixOS in terms of system configuration.

Networking

My basic networking stack is pretty standard, though a notable omission is NetworkManager—I find it unnecessary when iwd exists, even for portable computers.

I still know very little about networking, perhaps just enough to hurt myself. I’ve read through this excellent primer to how the Internet works and am slowly working through Computer Networks: A Systems Approach. I want to understand enough about DNS, (reverse) proxies, firewalls, and (mesh) VPNs—and how they interact with containers and VMs—to confidently configure my network without fear of compromising it.

(I also don’t like “networking” in general—I prefer “making friends”.)

Command-line tools

I spend a decent amount of time interacting with the command line, so I use modern CLI tools to make the experience comfortable and productive.

Desktop environment

I use a minimalistic desktop environment that is largely keyboard-driven:

(Previously, I used Qtile—an excellent tiling window manager written and configured in Python—but occasional screen-sharing bugs kept biting me, and I decided to switch to Niri.)

Web browser

My browser of choice is Firefox, though I’ve previously used qutebrowser and hope to use Servo in the future. Firefox is augmented with several plugins for privacy and convenience:

Multimedia

My multimedia backend is pipewire with wireplumber, supporting ALSA, PulseAudio and JACK APIs; I have almost no idea what all these are and what they do, but everything I need seems to work.

I use several standard multimedia applications, listed here from most- to least-frequently used:

I rarely—if ever—edit audio/video or screencast or work with 3D graphics, but I keep these amazing programs installed anyway on the off chance that I’ll need them:

Productivity software

Homelab services

TODO

Software development

Scientists are not software engineers, and the code we write certainly shows it.

But writing good code is important: creating a well-documented, reproducible computational pipeline from raw data to research outputs is—in my opinion—the foundation of high-quality science. During my PhD, I happened upon The Good Research Code Handbook, which inspired me to hone my axe software development skills.

“Give me six hours to chop down a tree and I will spend the first four sharpening the axe.”

not Abraham Lincoln

Integrated Development Environment (IDEs)

My primary GUI text editor is VSCodium (a FOSS-licensed build of Visual Studio Code), which also doubles as an IDE with the following plugins (sourced from the Open VSX Registry, a FOSS extension marketplace integrated into NixOS via nix-vscode-extensions):

I’m also interested in trying out the Zed editor.

Version control

git is my distributed version control system of choice, though I use it poorly—mostly as a crude versioning + backup + sync tool. As I mostly work on solo projects, this hasn’t been a hindrance, but I should really learn to use it better.

I’m also hoping to learn to use jujutsu, which can apparently be effectively used in parallel with an existing git repository.

Environment management

Nix with nix-direnv

I want to use Nix to automate pre-commit hooks and also set up self-hosted CI for my projects

Python ecosystem

As a scientist, I program almost entirely in Python, a language acclaimed for its simple design, incredible ecosystem and ease-of-use, but reviled for its hodgepodge of unstandardized tooling.

Modern Python tools, however, have broken this curse—and I think the glory days are here to stay:

Python standard library

Parts of the Python standard library are amazing and incredibly well-designed. The following standard library modules are ones I use often or am familiar with:

Alternatives to the standard library

Several parts of the standard library are annoying to use, with poor UX—often involving tons of boilerplate—so some excellent third-party libraries have filled the gap:

Basic scientific computing

The ubiquity of Python in the sciences comes down to the incredible scientific computing ecosystem:

High-performance numerical computing

Much science depends on high-performance numerical computing, which often takes advantage of parallel processing using GPUs and TPUs. Thankfully, the array API standard ensures compatibility across a variety of scientific computing libraries:

Visualization libraries

Python also has several excellent visualization libraries that produce high-quality figures:

Interactive computing

Interactive computing is an integral part of scientific data analysis: being able to iterate rapidly over data and visualize the results in a single unified interface is very handy.

Data science

As a computational vision scientist, I analyze data and build computational models using a combination of machine learning, deep learning, and traditional statistics, all of which have great Python libraries:

Cognitive neuroscience

As a cognitive neuroscientist, I also use several excellent domain-specific Python libraries and non-Python tools:

Smartphones

Hardware

I use a Google Pixel 8 smartphone running GrapheneOS, a security- and privacy-focused Android-based operating system. The phone itself is safely ensconced in a bulky OtterBox case that has already protected it from dozens of gravity-induced collisions with a wide variety of solid surfaces, and will hopefully keep up its valiant efforts in the future.

I also have a Samsung Galaxy M31 purchased in India that is currently running an unofficial build of LineageOS 22. I’ve stopped using it because it doesn’t support cellular bands in the US, but I’d like to repurpose it and put its compute to good use—as a cheap web server, perhaps?

Software

On both phones, in the spirit of using only free privacy-respecting software, Google Play services are not installed—and no free alternatives such as MicroG are used either. This prevents several proprietary applications from working on my phone—and thus nothing of value is lost 😉.

App stores

F-Droid and IzzyOnDroid are the primary application repositories where I find free and open source software. On occasion, I use Obtainium to download app releases directly from their authors. Some default software is also provided directly from GrapheneOS’ AppStore. To download the few non-free apps that I am forced to use, I use Aurora Store, a privacy-preserving frontend to the Google Play Store, where most Android applications are published.

TODO phone apps

Other computing devices

Smartwatch

Pinetime running InfiniTime firmware, though I’m curious about WASP-OS

e-reader

I have a Kindle PaperWhite 4 (2018) with 8 GB storage, wireless connectivity through WiFi, and a backlight, which I purchased in India.

Of course, I followed rather poorly formatted instructions in a thread on a shady forum for e-readers to jailbreak the device: this worked! Then, I installed KOReader and a variety of plugins for the e-reader. Now all that’s left is to start using it! 🙃

Microcontrollers

I have an 8 GB Raspberry Pi 4 gathering dust, as well as several ESP8266 NodeMCU 12-E boards that are awaiting decent projects.

Hosted services

Domain name registrar

I use Namecheap as my domain name registrar for raj-magesh.org—I purchased the domain for ~10 years. Namecheap has been fine and has decent customer service—they provided me with API access despite not meeting their minimum purchase criterion.

If I needed a new domain, I would probably switch to Njalla—a privacy-respecting registrar that supports anonymous payments through cryptocurrency. However, Njalla would be the actual registrant of the domain, though they claim that supreme executive power full control would be provided to their customers.

Wireguard VPN

I’ve been using Mullvad VPN for ~2 years now.

I’m satisfied with their

I wish they would

I hope to use my Mullvad account as an exit node for Tailscale. This isn’t currently supported: one has to purchase a Mullvad VPN plan via Tailscale—forgoing anonymous payments—to avail this feature. Luckily, there appears to be a work-in-progress pull request providing this feature in Headscale, a self-hosted control plane for a Tailscale network.

Email

I’ve been using Fastmail as my email provider for the past couple of years. All email directed to raj-magesh.org and its subdomains get forwarded to my personal email account there.

I’m satisfied with their

I have no specific complaints about Fastmail’s service, but wish the email ecosystem as a whole would support:

I am currently forced to use Outlook and Gmail accounts for work. As a silver lining, the University of Pittsburgh and Carnegie Mellon University both support using Thunderbird on the desktop—though for some reason not on Android.

Messaging

My Matrix account @raj-magesh:matrix.org is hosted on the matrix.org homeserver, though I hope to self-host my own homeserver using Continuwuity, a community-driven Matrix server implementation.

On both the web and Android, I use the Matrix clients provided by Element. They are still finicky—especially during key verification—but generally suffice for basic communication. Matrix is not yet as full-featured as WhatsApp or Telegram or Signal, but it is gradually improving and I hope it will eventually reach feature parity with the closed-source messaging platforms.

Microblogging

I created a profile on Bluesky to advertise my research in neuroscience. While I was reluctant to dip my toes into the cesspool of social media, the community of scientists I follow is generally very pleasant and I often find interesting discussions and literature on the platform.

Bluesky is open-source, permissively licensed, and is based on the AT protocol, which supports decentralized networking. At the same time, the existing platform is largely monopolized by a single entity, and I am wary of enshittification. At some point soon™, I’ll start self-hosting Fediverse services and use the POSSE approach to Publish On my own site, and Syndicate Elsewhere.

Software forge

I use Codeberg, a Forgejo-based git forge operated by a community-driven non-profit association focused on hosting free and open-source (FOSS) software. All my personal projects are hosted on Codeberg!

Additionally, I use Codeberg Pages (an instance of git-pages) to host my personal website (where you’re likely reading this!)

Unfortunately, most open-source development still occurs on GitHub, which is now owned by Microsoft and is becoming increasingly user-hostile. I maintain a GitHub account to contribute to software hosted there, but urge maintainers to consider switching to free alternatives such as Codeberg, SourceHut, or even Radiclegit is a distributed version control system, after all.

Miscellaneous items

Fonts