Standard is THE opinionated, generic, Nix Flakes framework that will allow you to grow and cultivate Nix Cells with ease. Nix Cells are the fine art of code organization using flakes.
Once your nix
code has evolved into a giant
ball of spaghetti and nobody else except a few
select members of your tribe can still read it
with ease; and once to the rest of your colleagues
it has grown into an impertinence, then std
brings the overdue order to your piece of art
through a well-defined folder structure and
disciplining generic interfaces.
With std
, you'll learn how to organize your nix
flake outputs ('Targets') into Cells and
Organelles — folded into a useful
CLI & TUI to also make the lives of your
colleagues easier.
Through more intuition and less documentation, your team and community will finally find a canonical answer to the everlasting question: What can I do with this repository?
In this repository, you'll find, both, the implementation and an application of Standard.
What is std
? — The well-commented nix
code → ./src
.
That folder implements:
std.grow
: the "smart" importerstd.growOn
:std.grow
-variant that recursively merges all additional variadic argumentsstd.harvest
: harvest your Targets into a different shape for compatibilitystd.incl
: a straight-forward source filter with additive semanticsstd.deSystemize
: a helper to hidesystem
from plain sightstd.<clade>
: builtin Organelle types that implement Actions
What is this crazy verbiage? → Unambiguous identifiers on the phone. ☎️
Dog-fooding? → ./cells
.
- Cells: this is no big monorepo, so
./cells
only implements a single Cell:std
. - Organelles:
std
implements thecli
,devshellProfiles
,devshells
&lib
Organelle. - Targets:
cli
,devshellProfiles
&devshells
each only implement adefault
Target.lib
has more. - Actions: some Targets have Actions derived from the Organelles. See
./flake.nix
for the defined Organelles. Not all Clades implement Actions.
{{#include ../dogfood.nix}}
That's it. std.grow
is a "smart" importer of your nix
code and is designed to keep boilerplate at bay.
TIP: Now, enter the devshell (
What can I do with this repository?direnv allow
) and play with thestd
CLI/TUI companion. It answers one critical question to newcomers and veterans alike:
Where can I find the documentation? → ./docs
.
No, I mean rendered? → The Standard Book.
The documentation is structured around these axes:
For Study | For Work | |
---|---|---|
The Practice | Tutorials | How-To Guides |
The Theory | Explanation | Reference |
What licenses are used? → ./.reuse/dep5
.
And the usual copies? → ./LICENSES
.
You may find releases on the GitHub Release Page of this repository.
If you'd like to see some examples of what a Standard project looks like, take a look at the following:
input-output-hk/bitte-cells
divnix/hive
input-output-hk/tullia
mdbook-kroki-preprocessor
HardenedNixOS-Profile
Julia2Nix.jl
inputs-output-hk/cardano-world
🚧 Work in progress, would like to help us extend this section?
Please enter the development environment:
direnv allow