Flake attributes
The flake outputs the panel entrypoint (./panel#...) exposes. This page is
generated from the entrypoint itself every time the docs are built, so it always
reflects the current outputs. Descriptions come from each attribute's
meta.description.
Two kinds of attribute
The generated lists at the end of this page are panel/'s own leaf outputs: the
Django package, the forms-island bundle, the generated openapi-client, the
checks. They are not the whole of ./panel#.
Alongside them the entrypoint carries a deploy family: a full set of
<group>-<effect>-<machine> attributes that provision the hosting-provider
machines with BOTH the api and panel services registered. This is the full
mono-repo composition, and the repo-root default.nix re-exports exactly this
family as its top-level deploy attributes (with the authoritative whole-repo
pin baked in). So at the repository root:
nix run '.#<group>-<effect>-<machine>' # resolves to panel's deploy family
or against the leaf directly:
nix run './panel#apps.<group>-<effect>-<machine>'
How the two sets combine:
apps,nixosConfigurationsanddeploymentAttributeNamescome verbatim from the rendered deploy family.packagesanddevShellsaredeploy.<x> // <panel's own>, so panel/'s leaf attributes win. The deploy names are all group- and effect-prefixed, so they sit alongside the flat leaf names without collision; the single overlap isdevShells.default, which stays the panel devShell.
The names follow core's grammar
panel/ does not invent attribute names: they follow core's
<group>-<effect>-<machine>[-<verb>] grammar exactly, described at
https://core.pages.git.fediversity.eu/flake-attributes.html. The derivations
differ, because this family is rendered from a group set that has both api/ and
panel/ folded in, but the naming, the all/combined aggregate targets and the
verbs are the same. They are not enumerated here: the family is on the order of
a thousand attributes, and core's page documents the pattern rather than the
list. For the flat enumeration:
nix eval --json ./panel#deploymentAttributeNames
How it is built (and how to extend it)
panel/ maintains no deployment topology of its own. It reuses core's pure
render combinator. Rather than re-fold api's application onto the
frontend-free base itself, panel/ extends api's pre-extended group
(api.lib.composedGroups, which is base + api's application) with only its OWN
application, then re-renders:
core = import ../core { inherit system sources pkgs; };
apiLeaf = import ../api { inherit system sources pkgs; };
composedGroups = core.lib.foldGroupComponents apiLeaf.lib.composedGroups {
hosting-provider = [ component ]; # panel's own fragment only
};
deploy = core.lib.render { inherit system sources groups = composedGroups; };
core is downward-only (it never names a front-end leaf), so this fold happens
in the leaf, by name (panel -> api -> core, acyclic). foldGroupComponents
appends, so folding [panel] onto api's already-[...base, api] group
reproduces the exact [...base, api, panel] merge order -- hence a
byte-identical deploy -- that a single [api, panel] fold produced.
A downstream extends the model the same way -- onto api.lib.composedGroups to
keep api/ registered, or onto core.lib.baseGroups to stay api-independent. No
fork of core. Both routes are spelled out at
https://api.pages.git.fediversity.eu/flake-attributes.html.
Packages
- default
- docs
- docs-with-screenshots
- manage
- openapi-client: Generated Python client for the fediversity-api HTTP surface
- screenshots
Checks
- apps-panel: Deploy applications through the panel web UI and verify the result.
- panel-basic: Smoke-test the operator panel (Django) boots and serves.
- panel-docs
- panel-migrations: Check the panel's Django migrations are complete and apply cleanly.
- panel-python-tests: Run the panel's Django test suite against sqlite, with no VM.
- panel-screenshots: Capture the documentation screenshots from the panel web UI.
- treefmt: Check that the project tree is formatted