Up to this point, we’ve discussed installing NixOS, organizing my system’s configuration using Home Manager and Flakes, and configuring neovim with NVF. I have the bulk of my system configured to my liking, and I’ve begun to configure the tools that I need to round out my development environment. There’s a decent amount of nix configuration that we’ve put together to get to this state – this rate of progress was only possible because I was able to leverage LLMs to help me debug and drive my configuration.
Working with NixOS requires spending a decent amount of time digging into documentation and scouring the internet for tips and tricks. Nix has a reputation for having a high learning curve, and working with nix means becoming intimately familiar with the language. The combination of having to apply nix’s concepts (which are markedly different from other package managers and operating systems), with the nix language (functional in nature, but with its own syntax and idioms), make getting productive quite difficult for beginners. This is exactly the type of scenario where LLMs can help accelerate progress.
I spent a decent amount of time digging into documentation, forums, and reddit threads to get a sense of how to approach things on my nix journey. These were invaluable resources in helping me orient myself in this vast ecosystem of unfamiliar terrain. In any application of LLMs to development work, it’s very important for you as the main operator to understand enough about what you’re working on to properly translate your intentions to the LLM. In standard feature work, this means being rigorous with code review to ensure you aren’t pushing AI slop, but when configuring NixOS, this means ensuring your system isn’t literally built using slop. In configuring my system, I would often have claude code open on a split terminal and ask it questions about my configuration. Although I haven’t done any very advanced things using the nix language, I found cloud code to be quite good at answering my questions and giving me working snippets. I did find myself having to sometimes re-feed it initialization context (such as the breakdown of my nixos-config repo structure), to help it immediately orient itself as opposed to having to read a bunch of files and wasting additional tokens each time it needed to find something – this is likely a good candidate to use a claude.md file to automate providing this context.
Claude (on Sonnet 4.5) was great at helping me find specific configurations I needed, but also in helping explain snippets or configurations I found online. This combo of helping me write code and also grok code was a definite super power in developing my configuration. Of course, this wouldn’t have been very effective if I hadn’t done the ground work of exploring nix myself and reading things like the reference manual. When using LLMs in development work, while you may not need to stress the minute details, but it is very important to know what it is you’re trying to build, and ensure that you are able to provide quality code reviews for LLM suggestions. The ultimate goal is to leverage the LLM as a tool to help supercharge my own understanding of context. The LLM shouldn’t just abstract away complexity from me blindly, it should help me understand the complexity, and then take my instructions to build proper abstractions using relevant design patterns. Working with LLMs to build complex software (and systems) requires judgement, taste, and discernment – all things that experienced engineers develop with time, not tokens.
Working with LLMs is absolute must in this day and age if you have any desire to build a competitive skill set and/or a competitive product. As engineers, it’s important for us to always keep our fingers on the pulse of new and innovative technologies – technology is ever-evolving and we need to evolve with it. Nix and NixOS are incredibly powerful tools, but require a fair bit of training to get used to them. When wielded properly, it’s incredible how easy software development becomes. – per directory system level configuration is something I’ve tried to achieve with other tools on MacOS, but there’s few things quite like what nix can help you achieve. So once you are up and running with nix and NixOS, things are great, but getting to that stage is like climbing Everest. With a bit of help from LLMs, it’s more like walking up a flight of stairs.