Happy Friday everyone!
For those that are unaware, I’m building LabCraft, a hands-on learning platform for infrastructure and systems engineers. I talked about this in a post I made this earlier this week.
Nix is the first course because it is the learning problem in miniature: package management, shells, build systems, OS configuration, and a lot of ecosystem history all overlap.
The opening part is therefore aimed at people who do not know Nix yet. It runs in a non-NixOS environment (Ubuntu), and learners install Nix as a package manager, inspect /nix/store, look at the daemon/build-user/profile model, try ephemeral shells, search nixpkgs, write shell-scripts with shebangs that declare their dependencies, and uninstall cleanly.
The design question I’m unsure about is the command surface.
Should the material be classic-first?
nix-shell -p jq
nix-env -qaP ripgrep
nix-store --query --requisites ...
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p curl jq
The case for this is strong: a lot of existing docs, answers, scripts, and institutional memory use these commands. Beginners will see them in the wild.
Or should it be modern-first?
nix shell nixpkgs#jq --command jq --version
nix search nixpkgs ripgrep
nix path-info --recursive ...
#!/usr/bin/env nix
#! nix shell nixpkgs#bash nixpkgs#curl nixpkgs#jq --command bash
The case for this is also strong: it lines up better with flakes, nix develop, devShells, and the direction many newer projects use and teach.
My current leaning is:
-
Teach the modern CLI as the main path.
-
Show classic equivalents nearby as “you will see this in older docs.”
-
Teach translation explicitly rather than pretending the ecosystem has one settled surface.
-
Avoid making flakes the whole topic too early, but not hide the fact that modern commands and flakes are connected.
I figured the best solution would be to seek community input on this. For people who teach, document, mentor, or onboard new Nix users:
-
Would you prefer beginner material to be classic-first or modern-first?
-
Is it more harmful to introduce
nix-command flakesearly, or to start with commands likenix-shell/nix-env? -
Are there commands you think beginner material should avoid entirely?
-
What classic ↔ modern translation table should every new Nix user learn?
-
Where do new users actually get stuck in practice?
I’m not looking for a purity answer as much as an onboarding answer. The goal is to help a new user build judgment and still be able to read the real-world Nix material they will encounter afterward.
Thanks