Migrating from Proxmox to NixOS and Incus

wasting_time1 pts0 comments

I've gone full Nix: Proxmox to NixOS + Incus | Bas Nijholt<br>Search

I've gone full Nix: Proxmox to NixOS + Incus<br>Why I replaced my clickable hypervisor with declarative text files<br>Bas Nijholt<br>Last updated on<br>2025-12-01

9 min read

Software Development, DevOps, HomeLab

I&rsquo;ve gone full Nix: Proxmox to NixOS + Incus<br>I have officially decommissioned my Proxmox cluster.<br>After years of running my homelab on Proxmox, starting with a single NUC and expanding to a multi-node cluster, I have migrated everything to NixOS running Incus.<br>From Skeptic to Believer #<br>I wasn&rsquo;t always a Nix evangelist.<br>In fact, I initially despised the language and its syntax.<br>I couldn&rsquo;t figure out how it worked, and I already had my own specific way of setting up my dotfiles.<br>I used Dotbot for symlinking and a tool I wrote called dotbins for managing binaries.<br>I didn&rsquo;t feel like I required Nix for most of my tools.<br>I used nix-darwin on my Mac for a long time, but only to specify Homebrew packages and application settings.<br>My true conversion happened when I bought my gaming PC, as described in my local LLM post.<br>I initially installed Pop!_OS because I wanted to play games and absolutely wanted to avoid Windows.<br>I got some games to work, but I constantly ran into NVIDIA driver issues that required running random, imperative commands to fix.<br>I felt that was a bad solution because I could never reproduce those debugging steps later.<br>Then I did the dumb thing of updating my NVIDIA drivers, not realizing that imperatively managing driver versions and repositories is a recipe for disaster, and got stuck in a GRUB boot loop.<br>Frustrated, I installed NixOS, hoping its promise of atomic updates would solve this.<br>The result was glorious.<br>I never really believed that everything would be byte-for-byte equivalent until I migrated that system to a new disk.<br>I didn&rsquo;t clone the drive; I just applied my Nix configuration to a fresh install.<br>It booted, I copied my data, and everything was identical.<br>That was the moment it clicked.<br>The Friction of Imperative Systems #<br>Proxmox is fantastic software.<br>It lowered the barrier to entry for me and taught me almost everything I know about virtualization, LXC containers, and ZFS.<br>But fundamentally, Proxmox is built around clicking buttons .<br>It is a GUI-first paradigm.<br>While you can automate it with Terraform or Ansible, it often feels like fighting the tool.<br>State drift is real.<br>You change a setting in the UI to debug something, forget about it, and six months later your &ldquo;infrastructure as code&rdquo; is out of sync with reality.<br>For a human maintaining a system manually, this is annoying.<br>But when you introduce AI agents, this becomes a disaster for the operator.<br>An agent running in &ldquo;YOLO mode&rdquo; might execute hundreds of imperative commands to fix a problem.<br>It might succeed, but it leaves your system in an undefined, unreproducible state that no one—not even the agent—can fully understand or replicate later.<br>This friction manifests in hardware management too.<br>On my HP EliteDesk, the Intel I219-LM network card has a known bug where it hangs with hardware offloading enabled.<br>I vaguely remembered fixing this years ago on Proxmox, but I had forgotten the details.<br>When I set up NixOS, I ran into the same issue: the network would randomly drop.<br>This time, however, the fix isn&rsquo;t a forgotten command run in a root shell history.<br>It is a documented systemd service in my configuration.<br>I added a comment explaining exactly why tso off gso off is needed, citing the forum threads.<br>If I ever reinstall this machine, the fix applies automatically.<br>On Proxmox, I would have had to rediscover this pain all over again.<br>Another example is my Intel NUC.<br>Since my homelab lives behind my TV, I wondered if I could also use it as a Home Theater PC (HTPC).<br>On Proxmox, this would have required passing the GPU through to a VM to get video output.<br>But doing so would mean the Proxmox host loses access to the GPU entirely, meaning no local console if things go wrong.<br>It was a strict trade-off: either a media player, or a debuggable hypervisor. I tried it, but it was so much trouble that I quickly reverted.<br>With NixOS, I don&rsquo;t have to choose.<br>The host OS runs Kodi directly, giving me native hardware acceleration and video output.<br>Simultaneously, incus runs in the background, hosting my containers.<br>I get my HTPC and my server on the same metal, without the virtualization tax or the &ldquo;headless host&rdquo; limitation.<br>There is a deeper philosophical difference too.<br>Systems like Proxmox or TrueNAS are designed as appliances.<br>You aren&rsquo;t supposed to run arbitrary commands on the host; installing packages or tweaking config files is discouraged because you might break the middleware or lose changes on upgrade.<br>You are effectively locked out of your own hardware&rsquo;s full potential.<br>With NixOS, the host is fully mine.<br>I can mess with it—installing Kodi, tweaking network drivers, running...

proxmox nixos rsquo incus running host

Related Articles