Bas Nijholt

Bas Nijholt

Senior Staff Engineer at IonQ

Hi, my name is Bas. I am a: Python and open-source enthusiast, Ph.D. in theoretical quantum mechanics, and full-time nerd. Originally I am from the Netherlands, but currently, I live near Seattle, Washington, USA.

Here (or here ) are some pretty pictures that I took, this is where I did my Ph.D., I work at IonQ (previously at Microsoft Quantum ), and see my LinkedIn for some technical details on my daily activities.

Interests

  • Quantum Mechanics
  • Landscape photography
  • Open-source software
  • Hiking in the mountains
  • Homelab and home automation
  • Artificial Intelligence

Education

  • 2020
    PhD in computational Quantum MechanicsTU Delft
  • 2015
    MSc in Applied PhysicsTU Delft
  • 2012
    BSc in Applied PhysicsTU Delft

Blog Posts

Sparse scribblings on a variety of topics

See all blog posts
  • How to start with AI

    There is a lot of noise about elaborate AI workflows that 99% of people don’t need. Install it, use the best model, and ask it everything. The rest can come later, or never.
  • Whenever I say that self-hosting AI is not economical, people hear that I am against self-hosting. I am not: I run Qwen3.8 27B at home and think open-weight models are great. This post compares it with GPT-6 Luna on the same benchmark, and explains why batching makes datacenters win.
  • MindRoom grew one small group at a time at IonQ, until a company-wide demo made hundreds of people sign up in a day. What surprised me is that the heaviest users include engineers who already live in their coding agents.
  • Friends keep asking how my homelab works, so I wrote it all down, starting from zero. Four NixOS machines run about 150 containers behind one Traefik front door, and with WireGuard and my own Headscale server I reach my self-hosted services from anywhere over encrypted HTTPS connections, while strangers on the internet get nothing. The part I think is the coolest is the balance: everything is declarative and lives in git, but with as little machinery as possible.
  • Two years ago, a friend and I backed each other up through a TrueNAS VM on an iSCSI zvol. Now that I run NixOS, I replaced that machinery with zfs-tenant: OpenZFS delegation and a quota keep him inside one dataset, and a small SSH forced command plus zfs zone make sure he sees nothing else of my pool. His keys never leave his house, and a VM test checks each of those claims.
  • TypeSafe’s Jev, a new fast and cheap classifier model that doesn’t require fine-tuning, was suddenly, literally everywhere I looked, so I tried it in MindRoom. I now use it for small decisions I would never have spent an LLM call on, like whether a “thanks” should interrupt an agent that is still working.
  • I have run coding agents in YOLO mode since I started using them. Instructions in AGENTS.md did not stop them from force-pushing or merging PRs, so hooks do. As the models got better, I added an override the agent may only use after I explicitly approve an action.
  • A small Docker recipe for running Diction’s streaming gateway against Qwen3-ASR through Agent CLI, plus a test from a bar in the Netherlands, an ocean away from the GPU.
  • After replacing Proxmox and TrueNAS with NixOS, my GPU machine was the last one still on btrfs, picked years ago because forum threads had me convinced that ZFS and NixOS were a bad combination. What finally pushed me to fix it: I run AI agents in YOLO mode all day, the stories about frontier models wiping home directories kept coming, and my restic backups needed an hour and a half just to scan a hundred million files. The audit’s first finding: the backups had been silently dead for four months. This is the story of auditing my backups, verifying the restore path end-to-end, and wiping my daily driver so that nine machines share the exact same ZFS setup.
  • TrueNAS was the last appliance OS in my homelab. The build-system change was the last straw, but the itch had been building for a while: too much UI state, unclear defaults, and virtualization churn around Incus. This is the story of how I gave an AI agent root-capable SSH access with strict instructions not to change anything, used it to inspect the live machine, recreated the config declaratively, and built a VM rehearsal to prove disko would only wipe the boot disk.

Projects

Open-source, see my GitHub profile

Many things in my house are automated using the Python Home Assistant framework. I’ve built some interseting automations and app, see my config files and AppDaemon apps 🏠 🤖

adaptive: tools for adaptive parallel sampling of mathematical functions to speed up simulations by orders of magnitude ⚙️

📚 tuitorial: Create interactive code tutorials that run in the terminal, with syntax highlighting and step-by-step focus, configured in Python or YAML. 🖥️

🌱 miflora: Python library for reading moisture, temperature, light, and conductivity from Xiaomi Mi Flora plant sensors over Bluetooth. Originally created under open-homeautomation; I now maintain it. 🌡️

🧠 MindRoom: Self-hostable AI agents that live in Matrix chat rooms, with persistent memory and 100+ tool integrations. Matrix bridges bring the same agents to Slack, Telegram, WhatsApp, and more. 💬

🚜 Compose Farm: Run Docker Compose stacks across multiple hosts over plain SSH, with no agents to install. Stacks stay plain folders you can keep in Git, and cf apply makes the hosts match your config. 🐳

🧰 dotbins: Keep CLI tool binaries in your dotfiles, downloaded from GitHub releases for macOS, Linux, and Windows. No package manager or sudo needed. 📦

unidep: Unified Conda and Pip Dependency Management 🐍

🎙️ agent-cli: Local-first AI tools for your desktop: voice transcription to the clipboard with a hotkey, autocorrect, text-to-speech, RAG and memory proxies, and agent-cli dev for running coding agents in parallel Git worktrees. 🤖

🏠 dotfiles: My NixOS, nix-darwin, Homebrew, and zsh setup that I use on every machine, with modern CLI tools installed through dotbins. 🐚

aiokef: An asyncio Python library that provides an API to communicate KEF speakers 🔈

thesis-cover: each unique copy is designed using quantum simulation data, neural networks, machine learning, and Python

📓 opennb: Open Jupyter notebooks from GitHub repositories or URLs directly in Jupyter. Combined with uvx, the notebook’s dependencies come along too. 🚀

adaptive-scheduler: Run simulations adaptively on many cores (>10k) and easily manage starting and restarting using mpi4py.futures, ipyparallel, or dask-mpi 🎉

instacron: Instagram for the lazy - automatically upload a photo to Instagram with autogenerated caption containing #hashtags, a quote, and camera information 📸🌅

🤝 zfs-tenant: Give a friend a quota-capped corner of your ZFS pool for their raw encrypted backups, without giving them a shell. Their keys never leave their house, so you can’t read what they store. 💾

🔁 pixi-to-conda-lock: Convert a pixi.lock into a conda-lock.yml, so you can use the fast pixi solver and still ship a conda-lock file. 🐍

🕸️ graphviz-anywidget: Interactive Graphviz widget for Jupyter with search, highlighting, and graph traversal, rendered by Graphviz compiled to WebAssembly. Built to visualize pipefunc pipelines. 🔍

🖥️ slurm-usage: Save SLURM job efficiency metrics to Parquet before SLURM purges them after 30 days, and chart CPU, memory, and node usage per user and group. 📈

🔎 CodeStructure: Extract Python code signatures without execution, providing a clear structure overview. 📚

📋 clip-files: Copy all files of a given type in a project to your clipboard, with their paths and a token count, ready to paste into ChatGPT or Claude. 🤖

hpc05: a thin wrapper around ipyparallel to easily start workers remotely on a HPC cluster 🖥

🏷️ calver-auto-release: GitHub Action that creates a release with a Calendar Versioning (CalVer) tag on every commit to main. 📅

🔑 zfs-unlock: Unlock encrypted OpenZFS datasets automatically after every reboot, while the passphrases stay on a separate device (a Raspberry Pi, say) and travel over a restricted SSH channel. 🔒

🧮 trueloc: Count the lines of code you wrote since any date, from your GitHub pull requests and direct commits. It adds up every commit in a PR, so squash merges don’t hide the work. 📊

⬇️ gh-download: Download files or folders from GitHub repositories, including private ones, using your existing gh CLI login. 📁

numthreads: Simple Python package to set the number of threads used by OpenBLAS, MKL, OMP, NumExpr, and Accelerate

📤 fileup: Upload and share a file from the terminal with fu myfile.txt; the URL lands in your clipboard and the file can expire automatically. 🔗

🕵️ privata: Static checker that finds Python code that looks public but is only used privately, so helper() becomes _helper() and __all__ stays honest. 🐍

🔌 matrix-mcp: Lets Claude Code, Codex, and other MCP clients read and write Matrix chats, including end-to-end encrypted rooms, so local coding agents can join MindRoom conversations. 💬

🗃️ github-backup-sync: Mirror every GitHub repository you have access to into local bare clones, with the gh CLI handling authentication. 💽

💬 matty: Matrix chat CLI client where every action (reading threads, replying, reacting) is a single command, which makes it easy to script and easy for AI agents to use. 🤖

⚡ pytest-shm: pytest plugin that puts temporary files on the /dev/shm tmpfs, so test suites that fsync stop waiting on the disk. 🧪

WenFire: WebApp visualizing your path to financial independence, built with personalizable assumptions and interactive visualizations. Ignite your journey to early retirement! 💸

Photography

The hobby

I enjoy traveling and photography. The best photos I would like to share with the world, however, the problem is that I am too lazy to do so, therefore I wrote a program (instacron ) that will do that job for me. It takes a photo and adds: a random quote, camera and location info, and #hashtags related to the photo.

More photos on Instagram.

Publications

Citation metrics at Google Scholar

  1. 2026
    Quantum-classical auxiliary field quantum Monte Carlo with matchgate shadows on trapped ion quantum computers

    Luning Zhao, Joshua J. Goings, Willie Aboumrad, Andrew Arrasmith, Lazaro Calderin, Spencer Churchill, and 35 more, including Bas Nijholt

    Physical Review Research (PRR), July 2026

  2. 2025
    Interferometric single-shot parity measurement in InAs–Al hybrid devices

    Morteza Aghaee, Alejandro Alcaraz Ramirez, Zulfi Alam, Rizwan Ali, Mariusz Andrzejczuk, Andrey E. Antipov, and 156 more, including Bas Nijholt

    Nature, February 2025

  3. 2023
    Pre-screening and tuning heterojunctions for topological quantum computer

    Dmitry I. Pikulin, Mason Thomas, Chetan Nayak, Roman M. Lutchyn, Bas Nijholt, Bernard van Heck, and 6 more

    US Patent 11,808,796 B2, November 2023

  4. 2022
    InAs-Al Hybrid Devices Passing the Topological Gap Protocol

    Morteza Aghaee, Arun Akkala, Zulfi Alam, Rizwan Ali, Alejandro Alcaraz Ramirez, Mariusz Andrzejczuk, and 121 more, including Bas Nijholt

    Physical Review B (PRB), November 2022

  5. 2021
    Adaptive: parallel active learning of mathematical functions

    Bas Nijholt, Joseph Weston and Anton R. Akhmerov

    Preprint, September 2021

  6. 2021
    Protocol to identify a topological superconducting phase in a three-terminal device

    Dmitry I. Pikulin, Bernard van Heck, Torsten Karzig, Esteban A. Martinez, Bas Nijholt, Tom Laeven, and 10 more

    Preprint, March 2021

  7. 2020
    Enhanced proximity effect in zigzag-shaped Majorana Josephson junctions

    Tom Laeven, Bas Nijholt, Michael Wimmer and Anton R. Akhmerov

    Physical Review Letters (PRL), August 2020

  8. 2020
  9. 2019
    Reproducing topological properties with quasi-Majorana states

    Adriaan Vuik, Bas Nijholt, Anton R. Akhmerov and Michael Wimmer

    SciPost Physics (SciPost Phys.), November 2019

  10. 2019
    Spin-Orbit Protection of Induced Superconductivity in Majorana Nanowires

    Jouri D. S. Bommer, Hao Zhang, Önder Gül, Bas Nijholt, Michael Wimmer, Filipp N. Rybakov, and 10 more

    Physical Review Letters (PRL), May 2019

  11. 2017
    Supercurrent interference in few-mode nanowire Josephson junctions

    Kun Zuo, Vincent Mourik, Daniel B. Szombati, Bas Nijholt, David J. van Woerkom, Attila Geresdi, and 9 more

    Physical Review Letters (PRL), November 2017

  12. 2017
    Robustness of Majorana bound states in the short junction limit

    Doru Sticlet, Bas Nijholt and Anton R. Akhmerov

    Physical Review B (PRB), March 2017

  13. 2017
    Annealing helicase HARP closes RPA-stabilized DNA bubbles non-processively

    Daniel R. Burnham, Bas Nijholt, Iwijn De Vlaminck, Jinhua Quan, Timur Yusufzai and Cees Dekker

    Nucleic Acids Research (NAR), February 2017

  14. 2016
    Orbital effect of magnetic field on the Majorana phase diagram

    Bas Nijholt and Anton R. Akhmerov

    Physical Review B (PRB), June 2016

  15. 2016
    Conductance quantization at zero magnetic field in InSb nanowires

    Jakob Kammhuber, Maja C. Cassidy, Hao Zhang, Önder Gül, Fei Pei, Michiel W. A. de Moor, and 7 more, including Bas Nijholt

    Nano letters (Nano Lett.), April 2016

Contact

Map of the area around Kirkland, Washington, with a marker on it © OpenStreetMap contributors Kirkland, WashingtonOpenStreetMap