Posts
About Me
Hi, I'm Xavier and I live in Boston. I currently work in the e-commerce space, building tools to make stores fast, accessible, and well-tested. In my free time, I like to play board games, try new foods, and fiddle with my dotfiles.
I also help run bostonts.club, a monthly meetup for all things TypeScript and web development.
You can reach me at [email protected], or find me on GitHub and LinkedIn.
Projects
-
himalaya-nvim
February 2026 – Present
An email client that runs inside Neovim. Threaded message lists, structured per-field search, in-buffer composing with auto-saved drafts, background sync, and an extensible hooks system. Picker integrations (telescope, fzf, native) and a mock mode for trying it without a real account. Heavily modified fork of pimalaya/himalaya-vim with 90%+ test coverage in CI.
Technologies: Lua, Neovim, Nix
-
virtual-headset
December 2025 – Present
A virtual HID headset device driver in Rust. Forwards the mic through PipeWire on a keyboard mute toggle and exposes a D-Bus control surface plus a Home Manager module for Waybar integration.
Technologies: Rust, PipeWire, D-Bus, Nix
-
dots
September 2023 – Present
My NixOS configuration and self-hosted homelab. Runs Traefik, Cloudflare Tunnel, and a half-dozen services via quadlet-nix, plus dozens of small per-machine packages I keep tucked away in here.
Technologies: Nix, NixOS, quadlet-nix, Traefik
-
nuenv
July 2025 – Present
A Nushell environment for Nix derivations. I forked the original after it went unmaintained to keep it usable and add features like environment binding.
Technologies: Nushell, Nix, Bash
-
browser-session-mcp
April 2026 – Present
An MCP server that gives each caller an isolated, long-lived browser session against one shared Chrome. The session is a tool argument, not a transport concept — addressed by an id you pass into every call, so it survives reconnects and even MCP-subprocess restarts. A separate daemon captures every console + network event to disk losslessly, and the stack is tuned to drive real sites without tripping bot gates.
Technologies: Rust, CDP, MCP
-
image.nvim
June 2026 – Present
A fork of 3rd/image.nvim, which displays real images inside Neovim. I hardened it for the setups upstream handles worst — scrolling through images in tmux, over SSH — so they stay sharp instead of flickering, tearing, or vanishing when you scroll or switch tmux windows.
Technologies: Lua, Neovim, Kitty Graphics, tmux
-
xnixvim
January 2024 – Present
My Neovim config managed entirely through Nix via nixvim. Reproducible across machines, modular, and shaped around how I actually work in TypeScript, Rust, and Lua.
Technologies: Nix, nixvim, Lua, Neovim
-
Spoo
Key Board June 2024
A small Python tool that reads ANSI escape sequences over SSH and replays them as keystrokes on the receiving machine via Linux uinput — essentially a remote keyboard pipeline.
Technologies: Python, uinput, ANSI escapes
Open-Source Contributions
- atuinsh/atuin (opens in new tab) Brought Nushell support to `atuin hex` and OSC 7 cwd mirroring
- agentstation/vhs (opens in new tab) Fixed SVG animation timing
- korotovsky/slack-mcp-server (opens in new tab) Integrated the Slack reactions API
- nolanderc/glsl_analyzer (opens in new tab) Created a CLI formatter
- catgoose/nvim-colorizer.lua (opens in new tab) Added oklch color highlighting
- Alexays/Waybar (opens in new tab) Fixed audio visualizer bugs
- lewis6991/gitsigns.nvim (opens in new tab) Fixed blame text overflow
- fzakaria/nix-auto-follow (opens in new tab) Fixed dependency duplication bugs
Art and Doodles
-
Smart Rockets
May 2020
Little rockets 'learn' to hit a target through a genetic algorithm. Each generation is mutated from the fittest rockets of the last. Adapted from a Dan Shiffman tutorial.
Technologies: JavaScript, p5.js
-
Moiré Effect
August 2018
Two sets of horizontal lines rotated against each other. The vertical lines that appear are an optical illusion — the Moiré effect.
Technologies: JavaScript, p5.js
-
Binary Numbers
March 2019
A binary representation of a number, with the decimal in the center. Mouse events shift the bits left and right, or you can type a decimal and watch it convert.
Technologies: JavaScript, p5.js
-
Pong
May 2019
Two-player Pong. WASD for player one, arrow keys for player two.
Technologies: JavaScript, p5.js
-
Raycasting
May 2019
A raycasting demo following Dan Shiffman. Not original work, but a satisfying one to step through.
Technologies: JavaScript, p5.js