Tools

This page covers the tools I use research and development including NeoVim and NixOS which provides my full AI integration. I also cover the Zed and VSCodium configurations I created to support teaching, before turning to LaTeX and Typst for document typesetting as well as Zotero for reference management.

NeoVim

My NeoVim configuration is built for both development and research work, providing a fast, fully customizable editor rather than a heavier IDE. It is built on lazy.nvim, with several dozen curated plugins organized across five to six categories — editor, LSP, text, tools, UI, and AI — plus Mason-managed language servers covering a wide range of languages, a complete LaTeX and Typst environment, Jupyter notebook support, Lean 4 theorem proving, and Zotero citation integration.

AI assistance comes from two complementary agent systems rather than one plugin. Claude Code is the primary integration, with terminal session management, session persistence across restarts, git-worktree-per-session support, and a hierarchical Telescope-based command and session picker. OpenCode contributes an embedded terminal-UI alternative, giving the same agent-driven workflow a second, independently maintained backend. Email is handled by two further integrations working side by side: Himalaya provides a full in-editor client with dual-account support, while Aerc runs alongside it as a terminal-based client for the same mail workflow.

The most distinctive part of the setup is a personally built agent system: a research → plan → implement task-orchestration framework, loaded on demand through a Telescope-based extension picker (<leader>ac). The picker draws on a library of roughly fifteen self-contained domain extensions.

Zed

For most of NeoVim's speed and AI integration without the learning curve, Zed is an easier place to start. It is a fast, native editor written in Rust, and my configuration is deliberately minimal: a single install script sets everything up, the extensions I use install automatically on first launch, and a preset theme and font mean there is almost nothing to hand-configure before you start writing. Where the NeoVim setup relies on lazy.nvim, Mason, and several dozen plugins, the Zed configuration is just three small files — settings.json, keymap.json, and tasks.json.

It stays minimal without giving up customization: per-language language servers and formatters, custom themes, and the same Claude Code agent system described above are all still available, each reached with a single shortcut. The result is a lower-friction alternative to NeoVim — quick to install, easy to learn, and fast to work in, while remaining as customizable as you care to make it.

VSCodium

VSCodium — the open-source, community-maintained build of Microsoft's VS Code — is the easiest entry point of the three editors, requiring very little configuration to become productive. It is a significant step up from Overleaf and TeXShop/TeXMaker for anyone writing LaTeX or Markdown, with far more editor functionality for not much extra setup. To streamline getting started, I maintain a repository with detailed installation instructions.

Typesetting

For document preparation I rely on two typesetting tools: LaTeX for its mature, decades-deep ecosystem, and Typst for its faster, single-pass compilation and modern scripting syntax. Both separate composition from formatting, both are configured in my NeoVim setup behind the same <leader>l keymap prefix, and both are installed system-wide through NixOS (see below) rather than a per-project install — a full TeX Live distribution with the texlab language server for LaTeX, and the typst compiler with the tinymist language server for Typst.

LaTeX

Writing formal symbols is by no means the only reason to use LaTeX, which is an extremely powerful and flexible typesetting tool. To get started, I recommend Zed or VSCodium above as the gentlest on-ramp for beginners. For a more integrated setup, my NeoVim configuration wires up VimTeX with latexmk as the compiler backend, SyncTeX for forward/inverse search, and Sioyek as the PDF viewer.

Typst

Typst is a newer typesetting language that trades LaTeX's macro system for a #-prefixed scripting syntax and near-instant recompilation. My NeoVim configuration includes a custom filetype plugin for Typst that handles multi-file project detection, compile/watch wrappers with quickfix-populated diagnostics, and integration with the tinymist language server. Editing is paired with a live, cursor-synced preview in the browser, so the rendered document updates and scrolls to match your cursor position as you type.

NixOS

NixOS revolutionizes system configuration through its declarative, functional approach to package management and system administration. Unlike traditional Linux distributions where packages are installed imperatively and configurations are set piecemeal, NixOS configures the entire system for reproducible builds that can be versioned, rolled back, and easily maintained across different machines. My dotfiles are a single flake that builds three physical machines plus a bootable USB installer image from a shared set of modules, split cleanly into modules/system/ (NixOS proper) and modules/home/ (Home Manager, for the per-user environment). Home Manager manages the NeoVim package itself, while ~/.config/nvim/ remains a separate, independently maintained git repository — the configuration described above.

Beyond the standard desktop and terminal setup (GNOME on Wayland, WezTerm and Kitty), the flake defines several custom package derivations that are not in nixpkgs: wrappers for the Claude Code and OpenCode CLIs, a search tool for Lean's Mathlib library, and an offline text-to-speech/speech-to-text pipeline used for AI-assistant notifications and voice input. The result is a reproducible system that can be rebuilt, rolled back, and kept consistent across every machine I use.

Zotero

Even if you have no interest in typesetting, Zotero is worth adopting for managing bibliographic data and PDFs on its own. It is open-source reference-management software that handles the bookkeeping for you: bibliographic records, PDFs, and notes are all saved and organized automatically rather than piling up as loose files on your hard drive. Project folders can be created and dissolved freely without spawning duplicate copies of the same paper, and a single click in the browser captures both a reference and its associated PDF in one step, so your library grows passively as you read. Selected folders or files can then be turned into a bibliography compatible with most word processors.