Well, it’s also just in the making. I’m not even using it for myself, so it might be a bit early.
But I can still say something about it.
First, std
hasn’t been made with NixOS configurations in mind. This might be a potential use-case, though, and hence, I’m trying out stuff in divnix/hive
.
You’ve got to understand how std
does imports as a prerequisite. And probably familiarize with its few conventions.
Then, in the cellBlocks
secion of divnix/hive
we kind of see a pattern that should be familiar to divnix/digga
/ divnix/DevOS
users: the distinction in modules, profiles & suites.
Then, we also have the “final” configurations. So in a way it’s 4 layers: module → profile → suite → configuration. (If “4 layers” triggers somebody in another context, please send me a )
Ignore (devshells "devshells")
, it’s for the dev environment for the flake itself: rather standard Standard .
So what you’ve been looking at so far is the hive’s output type system that is intelligently leveraged by the importer. Just as any type system, this gives you a decent, but abstract overview over the semantic organization of this particular repo.
Next, the “# soil
”. The soil are all additional variadic arguments (after the first one) to the growOn
function, and not by coincidence is the soil located down (towards the earth). It’s the “soil”, after all. Easy to reference, easy to find (across all std
repos). It is designed to host all the compatibility things, where some tooling X (including the nix
CLI’s defaults) expects things. So if you know std
and you see a “#soil
”, it tells you something about tooling schemata (or just “legacy” stuff).
So in divnix/hive/flake.nix
’ #soil
, you see adapters for colmena, nixos-generators & home-manager (in the making, so maybe not yet). The functions have absolutely unrelated and undocumented fantasynames for a purpose: they are prototypes and by not choosing a final naming, they are less likely to slip into a mental corsette, already. Other than maybe making the reader dizzy lol!
So what does make-{mead,honey,moonshine}.nix
do? They harvest the cells in the schematic ways that each of the tools expect. This is where you read unlimited variations of boilerplate in those other repositories, that look “easier” at first glance. Yeah, each time, you’d be looking mostly at some variation of boilerplate in such a prime estate like a flake.nix
, such as if “using Nix” was about “writing boilerplate”…
So if you drop the mental presumption of the primacy of the tooling schema (read: “tool centric”), then what you’re left with is a perfectly “problem” or “domain”-centric (and typed, sic!) file organization with a compatibility layer of “#soil
”. And the best: the problem domain is yours to explore. No opinion whatsoever does std
have (as opposed to, for example, the Nix CLI).
At this point: nix repl
/ :lf .
/ outputs.<TAB>
tells the rest of the story (and makes the small bits of magic that std
actually really does intuitively experiencable). I’m afraid, that’s probably the “cost” of learning Standard.
std
TUI/CLI? Won’t be helpful in divnix/hive
, we have quite well-established vertical tooling (colmena
/nixos-generator
/home-manager
). No need to wrap them in a horizontal one. The use case for the CLI/TUI is rather the one of a “nix” service provider to a “non-nix” configuration consumer.