Flake schemas
Flake schemas are a way to tell Nix about the structure of your flake’s outputs.
If you have outputs that are not part of the default schema definitions (see the flake-schemas
README for the default flake output types), you can make your own schema, which shows up on your flake’s FlakeHub page.
To add flake schemas to your flake, first add a flake input for the flake-schemas
flake using fh:
fh add DeterminateSystems/flake-schemas
Or manually:
flake.nix
{
inputs = {
flake-schemas = "https://flakehub.com/f/DeterminateSystems/flake-schemas/*.tar.gz";
# other inputs
};
}
Then add a schemas
output:
flake.nix
{
outputs = { flake-schemas, ... }: {
inherit (flake-schemas) schemas;
# other outputs
};
}
Custom flake schemas
Here is an example flake that defines a schema for its superSpecialPackage
output:
{
inputs.nixpkgs.url = "https://flakehub.com/f/NixOS/nixpkgs/*.tar.gz";
outputs = { ... } @ inputs:
let
mkChildren = children: { inherit children; };
in
{
superSpecialPackage.x86_64-linux.default = inputs.nixpkgs.legacyPackages.x86_64-linux.hello;
schemas.superSpecialPackage = {
version = 1;
doc = "The `superSpecialPackage` output defines a [super special package](https://example.org).";
inventory = output: mkChildren (
builtins.mapAttrs
(systemType: packagesForSystem:
{
forSystems = [ systemType ];
children = builtins.mapAttrs
(packageName: package:
{
forSystems = [ systemType ];
what = "super special package";
shortDescription = package.meta.description or "";
derivation = package;
evalChecks.isDerivation =
package.type or null == "derivation"
&& package ? drvPath;
})
packagesForSystem;
})
output);
};
};
}