Nix Roadmaps (Skill Trees)

Since an acquaintance showed me https://roadmap.sh a couple of weeks ago, I have been brewing on the idea of building different roadmaps with different angles for learning Nix. When I read the Nix Ecosystem Mind Map thread and @hugosenari provided an actual roadmap to their Nix learning some time last year, it prompted me to share this idea.

I see two purposes for making Nix roadmaps:

  1. To improve the process of documenting Nix: to structure learning material, get an overview of common dependencies, so that they can be provided, and so that dependencies are more clearly mapped out. For example, a lot of services depend on secrets, and secrets management isn’t particularly easy.

  2. To make it easier to learn Nix: Roadmaps are made for learners and educators alike. They’re not really meant as a documenter’s working tool, but rather a learner’s overview with which you can interactively track your progress. I’m not necessarily talking specifically about https://roadmap.sh, which is a SaaS, but the general idea of Skill Trees as described in the article Structuring Competency-Based Courses Through Skill Trees by Hildo Bijl.

Roadmaps can reference existing learning material; so it’s a way to structure the wealth of scattered and/or overlooked material. (Had I just known how valuable nix.dev is before I started, and sunk a fair amount of hours into it early on, I would’ve been smarter sooner.)

I’m trying to gather my effort at github.com/nix-tools/nix-roadmaps for now, just so that it’s public.

But if this Discourse thread is a lower barrier to entry, feel free to just write here.

I’m interested in…

  • your Nix roadmaps, if you made any
  • your feedback for some first roadmaps: both titles and content
  • your contributions to shared roadmaps of which there currently are none

I will structure them using https://roadmap.sh to begin with, but am interested in providing them in a more open format. Having a particularly good, coherent roadmap may serve as the basis for improving the currently disabled Nix Exercism track. Before that project is revived, it’d be nice to have an overview, and a roadmap can provide that, since it resembles the way modern Exercism tracks are modelled.

11 Likes

On a semi-related note: I’ve been entertaining the thought of compiling
possible development trajectories for Nixpkgs architecture (or for Nix)
into a similar format. Think a world of warcraft-style character
development tree, but the “skills” you unlock are “late binding in
python3Packages”, “checkPhase derivation”, or “immutable src”, “load
graphics drivers via libcapsule”, “$ORIGIN-relative DT_RUNPATHs”, etc. -
or , for (S)Nix, “FUSE /nix/store” followed by “Lazy input realization”,
or “CDC” followed by either of N variants of “castore GC”, etc. Resp.,
the “modifiers” you get from “skills” can be “# rebuilds reduced by
50%”, or “gdb can now find sources”, or “Run OpenGL apps from a
newer-than-system Nixpkgs revision”, or “Nixpkgs GUI apps work on
Ubuntu”, or “reduce cache.nixos.org size by 70%”

Obviously had no time to even move a finger to make this happen so far…

5 Likes

How do I feel now.

Can you draw that on paper or whiteboard, whatever tool you think could create 5y old, kind of sketch and post the picture here?

3 Likes

Beware!!
You may lose the focus on what matters: Teach something about Nix.

That said, I’d like something Brilliant or Vim Adventure

I started to do that at some point but using a different tool, you can find the post at Life of a pull request against NixOS/nixpkgs

2 Likes

It doesn’t need to be the perfect, they still useful.

Please share more roadmaps.

3 Likes

I have not abandoned making Nix roadmaps. I think that learning Nix is entirely non-linear, so making good roadmaps is difficult and would benefit from a lot of conversation. I’ll see if others are interested in the upcoming documentation team office hours (not yet announced).

1 Like

@hugosenari something along the lines of…

“FN” and “FP” for false-negative and -positive respectively.
“Corrupted references” referring to the risk of screwing things up when e.g. rewriting the outputs (for grafting, cadrvs, et c.), or when computing how many "../"s you need in a relative path.
“Relocatability” here is an in “relocating to a different prefix” (sounds silly, but yup, university clusters, namespaces are only recently becoming a thing and still not widespread…).
“Multitenancy” as in “two libcs in the system”, rather than as in ca derivations.

There’s a hypothetical space to put other stuff like vcpkg, conan, easybuild there.
I’m still not familiar enough to decide what stats Spack is supposed to get. “Frugal” here is a placeholder for how Spack and Guix handle reference rewriting, which I just need to dig into that to know for sure…

A branch for snix-style FUSE/virtiofs store, a branch for “late realization”.
Branches for “late(r) binding” like in pyproject-nix, halving the FPs again; a branch for “sink test derivations down to the leaves” (github search for “amjoseph” and “ninja” iirc).

A tree for dynamism, a tree for different sandboxing, for build scheduling, for resource awareness, for eval memoization…

3 Likes

Amazing,
I’m the kind board writer who you’d think I was writing while in plane in turbulence. So you have impressive writing board skills from my perspective.
I would just add the legend (FP: False Positive Cache, FN: False Negative Cache) to board.

Thanks for your contribution, would be cool tho create a topic about your board and discuss this its content.

1 Like