Core of a distributed framework for writing Nix Flakes.
flake-parts
provides the options that represent standard flake attributes
and establishes a way of working with system
.
Opinionated features are provided by an ecosystem of modules that you can import.
flake-parts
itself has the goal to be a minimal mirror of the Nix flake schema.
Used by itself, it is very lightweight.
Documentation: flake.parts
Flakes are configuration. The module system lets you refactor configuration into modules that ca 92FC n be shared.
It reduces the proliferation of custom Nix glue code, similar to what the module system has done for NixOS configurations.
Unlike NixOS, but following Flakes' spirit, flake-parts
is not a
monorepo with the implied goal of absorbing all of open source, but rather
a single module that other repositories can build upon, while ensuring a
baseline level of compatibility: the core attributes that constitute a flake.
-
Split your
flake.nix
into focused units, each in their own file. -
Take care of system.
-
Allow users of your library flake to easily integrate your generated flake outputs into their flake.
-
Reuse project logic written by others
If your project does not have a flake yet:
nix flake init -t github:hercules-ci/flake-parts
Otherwise, add the input,
flake-parts.url = "github:hercules-ci/flake-parts";
then slide mkFlake
between your outputs function head and body,
outputs = inputs@{ flake-parts, ... }:
flake-parts.lib.mkFlake { inherit inputs; } {
flake = {
# Put your original flake attributes here.
};
systems = [
# systems for which you want to build the `perSystem` attributes
"x86_64-linux"
# ...
];
};
Now you can add the remaining module attributes like in the the template.
See the template.
See the examples/ directory.
- nixd (c++)
- hyperswitch (rust)
- argo-workflows (go)
- nlp-service (python)
- emanote (haskell)