I’ve published Profiles and Generations, the next free Part of LabCraft’s Nix course. It covers the operational layer on top of the store model: an install publishes a numbered, immutable generation and moves a symlink, so rollback is a symlink flip to an untouched snapshot — instant, offline, nothing re-downloaded — and wiping a profile’s history drops the generation links without freeing disk until a collection runs. The lab has learners predict what each change does before Nix shows them, on a real NixOS machine with no Nix language required. The post is here: Why is a Nix rollback just a symlink flip? — LabCraft Blog I’m building LabCraft and would welcome feedback from Nix users on whether this framing lands for newer learners.
Hi Anand.
Mad respect to you looking out for newbies. I am relatively new to Nix(OS) and confess that I didn’t read super deep. Not sure I’m really your target audience as I’m not at all new to Linux or hermetic/atomic/immutable build, link, & deploy strategies.
Anywho, what stood out to me most clearly was that the post glosses over a lot of implicit Unix (and arguably Nix) knowledge and relies entirely on prose to explain how nix profile generation atomics are structured.
The Nix manual covers a good bit of it and those with firm Unix foundations will find their way, but those who are newer to Unix/Linux in general might struggle.
Perhaps consider a few simple visual aids (simple block or ASCII tree diagram?) showing the structure of those symbolic link pointers and how they relate to the Unix search $PATH.
Just one opinion. Be well.
Hey Rich. Updated the course content based on your feedback, added diagrams for the symlink and PATH structure, and a short Bash prereqs section. Curious to hear your feedback on this, as well as the new part on GC Roots (what keeps a store path alive, and why GC doesn’t always free space).
Would love your take, if/when you get a chance.
Thanks
Hi Anand. I don’t mean this to come across negatively, but personally I find the LabCraft blog’s explanation to be more confusing than this pill in the NixOS docs:
which puts it pretty plainly for those who understand GC in a programming context: a GC root is a symbolic link (i.e. a reference or a tree of references) and if count(references) > 0 then the thing(s) are not garbage collected.
Thanks for the feedback, Richard. No offense taken. I appreciate honest feedback.
Curious if you are referring to just the blog post, or the actual chapters (probably behind the signed-in section)? The latter is supposed to be the actual content, while the blog is simply an invitation to the course. So it may be lacking in material.
I do appreciate all feedback - negative or positive. Helps me fine-tune the content as I go.