<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>BuildMesh</title>
  <subtitle>A blog about learning AI, written in public.</subtitle>
  <link href="https://blog.buildmesh.dev/feed.xml" rel="self"/>
  <link href="https://blog.buildmesh.dev/"/>
  <id>https://blog.buildmesh.dev/</id>
  <updated>2026-11-04T00:00:00Z</updated>
  <author><name>BuildMesh</name></author>
  <entry>
    <title>A new way of learning? Setting up NixOS with an AI agent</title>
    <link href="https://blog.buildmesh.dev/learning-nixos-with-an-ai-agent/"/>
    <id>https://blog.buildmesh.dev/learning-nixos-with-an-ai-agent/</id>
    <published>2026-11-04T00:00:00Z</published>
    <updated>2026-11-04T00:00:00Z</updated>
    <summary>I had an AI agent teach me NixOS and guide me through setting it up for my desktop.</summary>
    <content type="html">&lt;p&gt;This is a blog about how I am learning AI, following the pattern of &lt;a href=&quot;https://www.swyx.io/learn-in-public&quot;&gt;&amp;#8220;learning in public&amp;#8221;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Somewhat appropriately, this article will be about learning: learning a new topic (NixOS) with an AI agent, and whether this is &amp;#8220;a new way of learning.&amp;#8221;&lt;/p&gt;
&lt;p&gt;Recently, I read &lt;a href=&quot;https://ghuntley.com/nix/&quot;&gt;an article from Geoffrey Huntley about Nix&lt;/a&gt;. In the article, he discusses a Linux distribution based on Nix called NixOS, and how it can essentially configuration control your Linux setup. When I saw that, I was really excited.&lt;/p&gt;
&lt;p&gt;To explain why, I need to talk about my desktop setup. I was running Ubuntu with overlayroot. Every time the computer booted, it would load the installation on the SSD. Any changes, apps installed, and so on went into the overlay in RAM, so if I rebooted, it tossed all of the changes and started fresh from the original installation. If I wanted to keep anything, I put it on HDDs I also attached to the system. I have three 8TB drives because I have a lot of photos and videos.&lt;/p&gt;
&lt;p&gt;This helped with security, especially after I had a close call and typed &amp;#8220;gmai.com&amp;#8221; instead of &amp;#8220;gmail.com&amp;#8221; and thought I might have hit a malware site. Being able to clear everything on reboot was nice (and also since I have &amp;#8220;too good to use syndrome&amp;#8221;, I wanted to minimize writes to the SSD).&lt;/p&gt;
&lt;p&gt;But if I wanted to change anything, it was a huge pain. If there was an &amp;#8220;updates available&amp;#8221; notice, or something I wanted was missing, or I wanted to change some setting, I&amp;#8217;d have to stop what I was doing, reboot without the overlay, install whatever it was I needed, then reboot with the overlay again. And since I was trying to be good about backing up my installations with Clonezilla, that would be another extra step. In practice, I didn&amp;#8217;t end up using Clonezilla beyond backing up the initial install.&lt;/p&gt;
&lt;p&gt;(It turns out the overlayroot package comes with an &lt;a href=&quot;https://manpages.ubuntu.com/manpages/noble/man8/overlayroot-chroot.8.html&quot;&gt;&lt;code&gt;overlayroot-chroot&lt;/code&gt;&lt;/a&gt; command that lets you make changes to the underlying installation on the SSD without rebooting out of the overlay first. I didn&amp;#8217;t know about it at the time, and it would have helped a lot.)&lt;/p&gt;
&lt;p&gt;What this meant was that updates often didn&amp;#8217;t happen. The friction of updating the system just made me keep procrastinating. I&amp;#8217;d just get annoyed at the repeated &amp;#8220;updates available&amp;#8221; notice whenever I booted (since reboot reverted to the original install on the SSD, the fact that I&amp;#8217;d seen the notice was also gone, so it&amp;#8217;d show it &lt;em&gt;every single time&lt;/em&gt;). Anything I needed that wasn&amp;#8217;t in the base system, I&amp;#8217;d have to &lt;code&gt;apt update &amp;amp;&amp;amp; apt install&lt;/code&gt; into the RAM overlay again after every reboot, which was an extra step every time plus it used up my limited (and now very expensive) RAM.&lt;/p&gt;
&lt;p&gt;NixOS promised to change all of this. The entire configuration of the computer could be tracked in git. Trying out software was easy, and &lt;a href=&quot;https://nixos.org/manual/nixos/stable/#sec-changing-config&quot;&gt;applying it to the next boot&lt;/a&gt; was easy. With the community module &lt;a href=&quot;https://github.com/nix-community/impermanence&quot;&gt;Impermanence&lt;/a&gt;, NixOS could persist only specific files and revert everything else back to a clean slate on reboot. Everything was going to be great.&lt;/p&gt;
&lt;p&gt;The catch was that up to now, Nix was really complicated. And I had never tried it before. But now, the idea from Huntley&amp;#8217;s article was that AI coding agents would change all of that. As he says, &amp;#8220;Now that we have AI, things that used to be advanced power tools, hard to use or designed for masters, are now accessible to everyone.&amp;#8221;&lt;/p&gt;
&lt;p&gt;So since I was starting from a blank slate with NixOS, I had two goals. One was to learn about NixOS and its concepts - not all of the nitty gritty details, but enough to be able to do simple everyday tasks, and to know what to tell an AI coding agent that would help me with maintaining the setup. Two would be to actually create the installation on my desktop and make it my primary working computer.&lt;/p&gt;
&lt;p&gt;This started with a long brainstorming session in ChatGPT Chat mode, where I worked out a course on learning NixOS and what I wanted from it. Once we had converged, it wrote a course charter with multiple sections. The intention of the course charter was that I could go through each section of the course with a coding agent to guide me, with the goal of learning NixOS, setting up my computer, and ironing out issues in the course design. In the process, I would also create a course I could put on ChatGPT Sites, so someone else could go through it with their own coding agent without having to build the course as they went along.&lt;/p&gt;
&lt;p&gt;Since I had already brainstormed it, I didn&amp;#8217;t read the charter. I just fired up a ChatGPT Work session, handed it the charter, and started going through each section. The agent developed the course from the charter as we went, and updated it here and there when I provided clarification.&lt;/p&gt;
&lt;p&gt;For each section, the agent explained concepts and asked questions to make sure I understood what I&amp;#8217;d learned. It also gave me commands to run on the computer to illustrate concepts, try out various labs, and eventually set up the computer. So far, I haven&amp;#8217;t felt comfortable actually running an AI agent on my personal desktop. Everything goes through Codex or Claude on an EC2 instance, or the ChatGPT app, so I ran the commands myself. When I was starting, I used ChatGPT Work on my phone, but once I had a working browser, I opened it on the computer, which made copy-pasting commands easier.&lt;/p&gt;
&lt;p&gt;It turned out the learning part was very quick. (These times are rough estimates from memory, since I didn&amp;#8217;t measure anything.) Going through the course took 2-3 hours, but most of that was the agent developing the course and updating it as I went. The time I actually spent learning, answering questions, and doing labs was about 20-30 minutes. That might sound short, but the goal wasn&amp;#8217;t to master NixOS. It was to have enough day-to-day operational knowledge to run basic commands and make simple updates (like installing a new app), while a coding agent helps with the more complex stuff. Getting the actual system up and running took 3-4 hours. A lot of that was waiting for responses from ChatGPT Work, which was probably unavoidable since I was designing the course as I went along. Validating a full system installation from backups without internet took around 1-1.5 hours of that too (I have a slow computer), but it ran in a VM and I walked away once it got going.&lt;/p&gt;
&lt;p&gt;I now have a desktop configuration I can track in git. Changes to the configuration are just commits in git. I also set up Impermanence. It was an important feature I wanted in my computer, so I made it part of the course. Non-secret files I don&amp;#8217;t want to accidentally mess up (like &lt;code&gt;~/.vimrc&lt;/code&gt;) are included in the same repo, using &lt;a href=&quot;https://www.freedesktop.org/software/systemd/man/latest/tmpfiles.d.html&quot;&gt;tmpfiles&lt;/a&gt; rules in &lt;code&gt;configuration.nix&lt;/code&gt;. The agent even walked me through setting up an offline binary cache, which held all of the installed software, meaning if the internet went down, I could still recreate my desktop setup.&lt;/p&gt;
&lt;p&gt;Validating the promise of NixOS meant having the agent walk me through blowing away the entire install and starting with just the NixOS installation media and my git repo with my computer configuration. I tested this in NixOS VMs first, recreating the system with the online binary cache, and again with no networking at all, with just the installation media, my git repo, and the offline cache mounted into the VM. Then I recreated the physical system using the online binary cache. That brought up the same environment, which was pretty amazing.&lt;/p&gt;
&lt;p&gt;I haven&amp;#8217;t done an OS update yet, but I did find additional software I wanted, and it was quite straightforward to add: update a configuration file, test out the change, and then set the new configuration as the boot default. If the new configuration had broken something while I was testing it, rebooting would have brought back the previous configuration, so I wouldn&amp;#8217;t end up with a broken system.&lt;/p&gt;
&lt;p&gt;So far, learning this way has been quite effective. I feel I have a decent understanding of NixOS, and a working computer setup. The course itself still needs testing. The idea is that anyone could go through the finished course with their own AI agent without needing to create it as they go along. I&amp;#8217;ll share the course once it&amp;#8217;s done.&lt;/p&gt;
</content>
  </entry>
</feed>
