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.