Fediversity Options
data-model Link copied!
submoduleThe Fediversity data model's own options, declared in core/lib/data-model.nix.
lib/data-model.nixdata-model.components Link copied!
attribute set of (submodule)Collection of Fediversity components
lib/data-model.nixdata-model.components.<name>.description Link copied!
stringDescription to be shown in the component overview
lib/data-model.nixdata-model.components.<name>.module Link copied!
moduleOperator-facing configuration options for the component
<function>lib/data-model.nixdata-model.components.<name>.operatorFacing Link copied!
booleanWhether this component is an application in the glossary sense: software the
operator picks, configures and toggles. Components left at false are
infrastructure the applications need and the operator never chooses.
falselib/data-model.nixdata-model.configuration Link copied!
optionTypeConfiguration type declaring options to be set by operators. Carries every declared component, so the deploy path (default-configuration, which enables every roster node including the infrastructure nodes) type-checks against it.
lib/data-model.nixdata-model.environments Link copied!
attribute set of (submodule)Run-time environments for Fediversity components to be deployed to
lib/data-model.nixdata-model.environments.<name>.config-mapping Link copied!
type-checked function type (configuration -> deployment)The mapping from an operator configuration to a deployment: it
resolves each enabled component's required resources and then
applies this environment's resource-mapping. Declared as a
type-checked function whose output is a deployment
(env-output).
lib/data-model.nixdata-model.environments.<name>.deployment Link copied!
function: configuration -> deployment (applies the env's policies)Generates a deployment from a configuration by applying this
environment's resource policies to the components' resource
mappings. By default this is just config-mapping applied, i.e.
the end-to-end "configuration in, deployment out" entry point for
the environment.
lib/data-model.nixdata-model.environments.<name>.implementation Link copied!
function: required component resources -> deploymentMaps the resources required by the deployed components to the
resources this environment actually offers, producing something
that can be deployed. This is the environment-specific glue a
hosting provider writes; its exact function type
(resource-mapping.function-type) is fixed per deployment.
lib/data-model.nixdata-model.environments.<name>.resource-mapping Link copied!
type-checked function type (resources -> deployment)The function type for implementation: it takes the
components' required resources (plus a deployment name) and
returns a deployment (env-output). Declared as a type-checked
function so inputs and outputs are validated.
lib/data-model.nixdata-model.environments.<name>.resources Link copied!
per-resource policies the hosting provider makes available (shape set by each resource's policy module)Resources the hosting provider makes available in this
environment, keyed by resource name, each holding that resource's
policy (how the provider supplies it). Setting this is optional;
it is a place to declare provider-side resource information for use
in the resource mapping. The concrete shape of each entry is fixed
by the matching resource's policy module under core/resources,
so it depends on which resources the environment wires in.
lib/data-model.nixdata-model.resources Link copied!
attribute set of (submodule)Collection of deployment resources that can be required by components and policed by hosting providers
lib/data-model.nixdata-model.resources.<name>.description Link copied!
stringDescription of the resource to help component module authors and hosting providers to work with it
lib/data-model.nixdata-model.resources.<name>.policy Link copied!
moduleOptions for configuring the resource policy for the hosting provider, a description of how the resource is made available
lib/data-model.nixdata-model.resources.<name>.policy.apply Link copied!
function that evaluates to a(n) unspecified valueApply the policy to a request
lib/data-model.nixdata-model.resources.<name>.policy.process Link copied!
function that evaluates to a(n) unspecified valueCollect the relevant requests across all components, then apply the policy to them
lib/data-model.nixdata-model.resources.<name>.policy.resource-type Link copied!
optionTypeThe type of resource this policy configures
lib/data-model.nixdata-model.resources.<name>.request Link copied!
moduleOptions for declaring resource requirements by a component, a description of how the resource is consumed or accessed
{ }lib/data-model.nixdata-model.supportingRequests Link copied!
moduleSupporting resource requests not tied to a single component, made available to every environment.
{
options = { };
}lib/data-model.nixoperator-config Link copied!
submoduleOperator-facing configuration for a Fediversity deployment, as set through the hosting provider's panel. This is the schema that drives the frontend form.
setupsoperator-config.deployment-method Link copied!
attribute-tagged union with choices: octodns-zone, ssh-hosts, tf-hosts, tf-incus-hosts, tf-incus-image, tf-incus-operator-hostsWhat to run: a deployment method (ssh-hosts / tf-hosts /
tf-incus-hosts) or a non-deploy operator effect
(tf-incus-image / octodns-zone). Pick one, then fill in its
settings. The tag key is the method/effect; its value is that
entry's settings. A method deploys the enabled applications; an
effect runs a standalone action. Always set -- there is no "no
selection" state (issue #723).
{
tf-incus-operator-hosts = { };
}setupsoperator-config.deployment-method.octodns-zone Link copied!
submoduleManage DNS records for a zone via OctoDNS.
operator-config.deployment-method.octodns-zoneoperator-config.deployment-method.octodns-zone.apiTokenFile Link copied!
stringPath, on the deployer, to the file holding the service's API token. A
PATH and never a value, so no credential reaches the Nix store: the
effect reads it at run time. Empty means the provider needs no token
(the self-hosted bind path authenticates with a TSIG key instead).
"""/run/secrets/dns-api-token"setupsoperator-config.deployment-method.octodns-zone.domain Link copied!
stringThe DNS domain (zone) to manage.
"example.tld"setupsoperator-config.deployment-method.octodns-zone.provider Link copied!
stringThe OctoDNS provider to use, see <https://octodns.readthedocs.io/en/latest/#providers>.
"powerdns"setupsoperator-config.deployment-method.octodns-zone.secretFiles Link copied!
attribute set of stringThe files from which to read the secrets to use with the provider.
{ }{
token = "/path/to/token";
}setupsoperator-config.deployment-method.octodns-zone.serverUrl Link copied!
stringURL of the authoritative-DNS service's API, scheme and port included.
Empty means the domain is served by the deployment's own bind node.
"""https://pdns.example.org"setupsoperator-config.deployment-method.ssh-hosts Link copied!
submoduleDeploy over SSH to existing hosts: a shared SSH identity plus, per node, where to reach it and any identity override.
operator-config.deployment-method.ssh-hostsoperator-config.deployment-method.ssh-hosts.applications Link copied!
null or (submodule)Per-application configuration the operator sets to enable and configure each Fediversity application.
nullsetupsoperator-config.deployment-method.ssh-hosts.applications.mastodon Link copied!
submoduleYour self-hosted, globally interconnected microblogging community
{ }setupsoperator-config.deployment-method.ssh-hosts.applications.mastodon.domain Link copied!
stringFully-qualified domain name the Mastodon instance is served from (e.g. mastodon.example.org). Used as the instance's canonical host in generated URLs, certificates, and federation identifiers.
"mastodon.fediversity.net"components/operator/mastodonoperator-config.deployment-method.ssh-hosts.applications.mastodon.enable Link copied!
booleanWhether to enable Enable a Mastodon server on the machine.
falsetruecomponents/operator/mastodonoperator-config.deployment-method.ssh-hosts.applications.mastodon.mediaAutoRemove.enable Link copied!
booleanAutomatically remove remote media attachments and preview cards older than the configured amount of days.
Recommended in <https://docs.joinmastodon.org/admin/setup/>.
truefalsecomponents/operator/mastodonoperator-config.deployment-method.ssh-hosts.applications.mastodon.mediaAutoRemove.olderThanDays Link copied!
signed integerHow old remote media needs to be in order to be removed.
3014components/operator/mastodonoperator-config.deployment-method.ssh-hosts.applications.peertube Link copied!
submoduleActivityPub-federated video streaming platform using P2P directly in your web browser
{ }setupsoperator-config.deployment-method.ssh-hosts.applications.peertube.domain Link copied!
stringFully-qualified domain name the Peertube instance is served from (e.g. mastodon.example.org). Used as the instance's canonical host in generated URLs, certificates, and federation identifiers.
"peertube.fediversity.net"components/operator/peertubeoperator-config.deployment-method.ssh-hosts.applications.peertube.enable Link copied!
booleanWhether to enable Enable a Peertube server on the machine.
falsetruecomponents/operator/peertubeoperator-config.deployment-method.ssh-hosts.applications.peertube.settings Link copied!
peertube's instance settingsInstance settings, from PeerTube's own configuration file.
nullcomponents/operator/peertubeoperator-config.deployment-method.ssh-hosts.applications.pixelfed Link copied!
submodulePhoto Sharing. For Everyone.
{ }setupsoperator-config.deployment-method.ssh-hosts.applications.pixelfed.domain Link copied!
stringFully-qualified domain name the Pixelfed instance is served from (e.g. mastodon.example.org). Used as the instance's canonical host in generated URLs, certificates, and federation identifiers.
"pixelfed.fediversity.net"components/operator/pixelfedoperator-config.deployment-method.ssh-hosts.applications.pixelfed.enable Link copied!
booleanWhether to enable Enable a Pixelfed server on the machine.
falsetruecomponents/operator/pixelfedoperator-config.deployment-method.ssh-hosts.applications.pixelfed.maxUploadSize Link copied!
stringMax upload size with units.
"8M"components/operator/pixelfedoperator-config.deployment-method.ssh-hosts.defaults Link copied!
submoduleShared SSH identity applied to every node, unless a node overrides it.
{ }setupsoperator-config.deployment-method.ssh-hosts.defaults.keyFile Link copied!
null or stringPath to the SSH private key the deployer reads (a reference, not key material). Null uses an agent / the deployer default.
nullsetupsoperator-config.deployment-method.ssh-hosts.defaults.sshOpts Link copied!
list of stringExtra SSH options (-o) applied to every node.
[ ]setupsoperator-config.deployment-method.ssh-hosts.defaults.username Link copied!
null or stringSSH user to connect as. Null uses the deployer default.
nullsetupsoperator-config.deployment-method.ssh-hosts.domain Link copied!
stringApex domain under which the services will be deployed.
"fediversity.net"setupsoperator-config.deployment-method.ssh-hosts.email Link copied!
stringRecovery email of the seeded directory administrator.
The central LDAP directory is seeded with a single
administrator user at deploy time, named after the deployment
group (operator in an operator deployment) and added to
authelia-users so it can log into every SSO-enabled
application (mastodon, peertube, pixelfed) through authelia
OIDC. The username follows the group; only this recovery email is
operator-facing. No password is set declaratively -- the
operator establishes it with "Forgot password?" on the
authelia portal, which mails a single-use link here, so this
address must be deliverable.
setupsoperator-config.deployment-method.ssh-hosts.nodes Link copied!
submodulePer-node SSH connection info, one optional entry per node in the operator group's roster. Each set node's host is required; identity fields fall back to defaults.
{ }setupsoperator-config.deployment-method.ssh-hosts.nodes.authelia Link copied!
null or (submodule)SSH connection info for this node. Omit to inherit defaults and the roster FQDN.
nullsetupsoperator-config.deployment-method.ssh-hosts.nodes.authelia.host Link copied!
stringHost (address) to reach this node over SSH.
setupsoperator-config.deployment-method.ssh-hosts.nodes.authelia.keyFile Link copied!
null or stringPath to the SSH private key for this node. Null inherits defaults.keyFile.
nullsetupsoperator-config.deployment-method.ssh-hosts.nodes.authelia.sshOpts Link copied!
list of stringExtra SSH options (-o) for this node, appended to defaults.sshOpts.
[ ]setupsoperator-config.deployment-method.ssh-hosts.nodes.authelia.username Link copied!
null or stringSSH user to connect as for this node. Null inherits defaults.username.
nullsetupsoperator-config.deployment-method.ssh-hosts.nodes.lldap Link copied!
null or (submodule)SSH connection info for this node. Omit to inherit defaults and the roster FQDN.
nullsetupsoperator-config.deployment-method.ssh-hosts.nodes.lldap.host Link copied!
stringHost (address) to reach this node over SSH.
setupsoperator-config.deployment-method.ssh-hosts.nodes.lldap.keyFile Link copied!
null or stringPath to the SSH private key for this node. Null inherits defaults.keyFile.
nullsetupsoperator-config.deployment-method.ssh-hosts.nodes.lldap.sshOpts Link copied!
list of stringExtra SSH options (-o) for this node, appended to defaults.sshOpts.
[ ]setupsoperator-config.deployment-method.ssh-hosts.nodes.lldap.username Link copied!
null or stringSSH user to connect as for this node. Null inherits defaults.username.
nullsetupsoperator-config.deployment-method.ssh-hosts.nodes.mastodon Link copied!
null or (submodule)SSH connection info for this node. Omit to inherit defaults and the roster FQDN.
nullsetupsoperator-config.deployment-method.ssh-hosts.nodes.mastodon.host Link copied!
stringHost (address) to reach this node over SSH.
setupsoperator-config.deployment-method.ssh-hosts.nodes.mastodon.keyFile Link copied!
null or stringPath to the SSH private key for this node. Null inherits defaults.keyFile.
nullsetupsoperator-config.deployment-method.ssh-hosts.nodes.mastodon.sshOpts Link copied!
list of stringExtra SSH options (-o) for this node, appended to defaults.sshOpts.
[ ]setupsoperator-config.deployment-method.ssh-hosts.nodes.mastodon.username Link copied!
null or stringSSH user to connect as for this node. Null inherits defaults.username.
nullsetupsoperator-config.deployment-method.ssh-hosts.nodes.peertube Link copied!
null or (submodule)SSH connection info for this node. Omit to inherit defaults and the roster FQDN.
nullsetupsoperator-config.deployment-method.ssh-hosts.nodes.peertube.host Link copied!
stringHost (address) to reach this node over SSH.
setupsoperator-config.deployment-method.ssh-hosts.nodes.peertube.keyFile Link copied!
null or stringPath to the SSH private key for this node. Null inherits defaults.keyFile.
nullsetupsoperator-config.deployment-method.ssh-hosts.nodes.peertube.sshOpts Link copied!
list of stringExtra SSH options (-o) for this node, appended to defaults.sshOpts.
[ ]setupsoperator-config.deployment-method.ssh-hosts.nodes.peertube.username Link copied!
null or stringSSH user to connect as for this node. Null inherits defaults.username.
nullsetupsoperator-config.deployment-method.ssh-hosts.nodes.pixelfed Link copied!
null or (submodule)SSH connection info for this node. Omit to inherit defaults and the roster FQDN.
nullsetupsoperator-config.deployment-method.ssh-hosts.nodes.pixelfed.host Link copied!
stringHost (address) to reach this node over SSH.
setupsoperator-config.deployment-method.ssh-hosts.nodes.pixelfed.keyFile Link copied!
null or stringPath to the SSH private key for this node. Null inherits defaults.keyFile.
nullsetupsoperator-config.deployment-method.ssh-hosts.nodes.pixelfed.sshOpts Link copied!
list of stringExtra SSH options (-o) for this node, appended to defaults.sshOpts.
[ ]setupsoperator-config.deployment-method.ssh-hosts.nodes.pixelfed.username Link copied!
null or stringSSH user to connect as for this node. Null inherits defaults.username.
nullsetupsoperator-config.deployment-method.ssh-hosts.nodes.smtp Link copied!
null or (submodule)SSH connection info for this node. Omit to inherit defaults and the roster FQDN.
nullsetupsoperator-config.deployment-method.ssh-hosts.nodes.smtp.host Link copied!
stringHost (address) to reach this node over SSH.
setupsoperator-config.deployment-method.ssh-hosts.nodes.smtp.keyFile Link copied!
null or stringPath to the SSH private key for this node. Null inherits defaults.keyFile.
nullsetupsoperator-config.deployment-method.ssh-hosts.nodes.smtp.sshOpts Link copied!
list of stringExtra SSH options (-o) for this node, appended to defaults.sshOpts.
[ ]setupsoperator-config.deployment-method.ssh-hosts.nodes.smtp.username Link copied!
null or stringSSH user to connect as for this node. Null inherits defaults.username.
nullsetupsoperator-config.deployment-method.ssh-hosts.nodes.valkey Link copied!
null or (submodule)SSH connection info for this node. Omit to inherit defaults and the roster FQDN.
nullsetupsoperator-config.deployment-method.ssh-hosts.nodes.valkey.host Link copied!
stringHost (address) to reach this node over SSH.
setupsoperator-config.deployment-method.ssh-hosts.nodes.valkey.keyFile Link copied!
null or stringPath to the SSH private key for this node. Null inherits defaults.keyFile.
nullsetupsoperator-config.deployment-method.ssh-hosts.nodes.valkey.sshOpts Link copied!
list of stringExtra SSH options (-o) for this node, appended to defaults.sshOpts.
[ ]setupsoperator-config.deployment-method.ssh-hosts.nodes.valkey.username Link copied!
null or stringSSH user to connect as for this node. Null inherits defaults.username.
nullsetupsoperator-config.deployment-method.tf-hosts Link copied!
submoduleDeploy via OpenTofu to existing hosts over SSH, with an HTTP state backend.
operator-config.deployment-method.tf-hostsoperator-config.deployment-method.tf-hosts.applications Link copied!
null or (submodule)Per-application configuration the operator sets to enable and configure each Fediversity application.
nullsetupsoperator-config.deployment-method.tf-hosts.applications.mastodon Link copied!
submoduleYour self-hosted, globally interconnected microblogging community
{ }setupsoperator-config.deployment-method.tf-hosts.applications.mastodon.domain Link copied!
stringFully-qualified domain name the Mastodon instance is served from (e.g. mastodon.example.org). Used as the instance's canonical host in generated URLs, certificates, and federation identifiers.
"mastodon.fediversity.net"components/operator/mastodonoperator-config.deployment-method.tf-hosts.applications.mastodon.enable Link copied!
booleanWhether to enable Enable a Mastodon server on the machine.
falsetruecomponents/operator/mastodonoperator-config.deployment-method.tf-hosts.applications.mastodon.mediaAutoRemove.enable Link copied!
booleanAutomatically remove remote media attachments and preview cards older than the configured amount of days.
Recommended in <https://docs.joinmastodon.org/admin/setup/>.
truefalsecomponents/operator/mastodonoperator-config.deployment-method.tf-hosts.applications.mastodon.mediaAutoRemove.olderThanDays Link copied!
signed integerHow old remote media needs to be in order to be removed.
3014components/operator/mastodonoperator-config.deployment-method.tf-hosts.applications.peertube Link copied!
submoduleActivityPub-federated video streaming platform using P2P directly in your web browser
{ }setupsoperator-config.deployment-method.tf-hosts.applications.peertube.domain Link copied!
stringFully-qualified domain name the Peertube instance is served from (e.g. mastodon.example.org). Used as the instance's canonical host in generated URLs, certificates, and federation identifiers.
"peertube.fediversity.net"components/operator/peertubeoperator-config.deployment-method.tf-hosts.applications.peertube.enable Link copied!
booleanWhether to enable Enable a Peertube server on the machine.
falsetruecomponents/operator/peertubeoperator-config.deployment-method.tf-hosts.applications.peertube.settings Link copied!
peertube's instance settingsInstance settings, from PeerTube's own configuration file.
nullcomponents/operator/peertubeoperator-config.deployment-method.tf-hosts.applications.pixelfed Link copied!
submodulePhoto Sharing. For Everyone.
{ }setupsoperator-config.deployment-method.tf-hosts.applications.pixelfed.domain Link copied!
stringFully-qualified domain name the Pixelfed instance is served from (e.g. mastodon.example.org). Used as the instance's canonical host in generated URLs, certificates, and federation identifiers.
"pixelfed.fediversity.net"components/operator/pixelfedoperator-config.deployment-method.tf-hosts.applications.pixelfed.enable Link copied!
booleanWhether to enable Enable a Pixelfed server on the machine.
falsetruecomponents/operator/pixelfedoperator-config.deployment-method.tf-hosts.applications.pixelfed.maxUploadSize Link copied!
stringMax upload size with units.
"8M"components/operator/pixelfedoperator-config.deployment-method.tf-hosts.defaults Link copied!
submoduleShared SSH identity applied to every node, unless a node overrides it.
{ }setupsoperator-config.deployment-method.tf-hosts.defaults.keyFile Link copied!
null or stringPath to the SSH private key the deployer reads (a reference, not key material). Null uses an agent / the deployer default.
nullsetupsoperator-config.deployment-method.tf-hosts.defaults.sshOpts Link copied!
list of stringExtra SSH options (-o) applied to every node.
[ ]setupsoperator-config.deployment-method.tf-hosts.defaults.username Link copied!
null or stringSSH user to connect as. Null uses the deployer default.
nullsetupsoperator-config.deployment-method.tf-hosts.domain Link copied!
stringApex domain under which the services will be deployed.
"fediversity.net"setupsoperator-config.deployment-method.tf-hosts.email Link copied!
stringRecovery email of the seeded directory administrator.
The central LDAP directory is seeded with a single
administrator user at deploy time, named after the deployment
group (operator in an operator deployment) and added to
authelia-users so it can log into every SSO-enabled
application (mastodon, peertube, pixelfed) through authelia
OIDC. The username follows the group; only this recovery email is
operator-facing. No password is set declaratively -- the
operator establishes it with "Forgot password?" on the
authelia portal, which mails a single-use link here, so this
address must be deliverable.
setupsoperator-config.deployment-method.tf-hosts.httpBackendAddress Link copied!
null or stringAddress of the OpenTofu HTTP state backend REST endpoint (TF_HTTP_ADDRESS).
nullsetupsoperator-config.deployment-method.tf-hosts.nodes Link copied!
submodulePer-node SSH connection info, one optional entry per node in the operator group's roster. Each set node's host is required; identity fields fall back to defaults.
{ }setupsoperator-config.deployment-method.tf-hosts.nodes.authelia Link copied!
null or (submodule)SSH connection info for this node. Omit to inherit defaults and the roster FQDN.
nullsetupsoperator-config.deployment-method.tf-hosts.nodes.authelia.host Link copied!
stringHost (address) to reach this node over SSH.
setupsoperator-config.deployment-method.tf-hosts.nodes.authelia.keyFile Link copied!
null or stringPath to the SSH private key for this node. Null inherits defaults.keyFile.
nullsetupsoperator-config.deployment-method.tf-hosts.nodes.authelia.sshOpts Link copied!
list of stringExtra SSH options (-o) for this node, appended to defaults.sshOpts.
[ ]setupsoperator-config.deployment-method.tf-hosts.nodes.authelia.username Link copied!
null or stringSSH user to connect as for this node. Null inherits defaults.username.
nullsetupsoperator-config.deployment-method.tf-hosts.nodes.lldap Link copied!
null or (submodule)SSH connection info for this node. Omit to inherit defaults and the roster FQDN.
nullsetupsoperator-config.deployment-method.tf-hosts.nodes.lldap.host Link copied!
stringHost (address) to reach this node over SSH.
setupsoperator-config.deployment-method.tf-hosts.nodes.lldap.keyFile Link copied!
null or stringPath to the SSH private key for this node. Null inherits defaults.keyFile.
nullsetupsoperator-config.deployment-method.tf-hosts.nodes.lldap.sshOpts Link copied!
list of stringExtra SSH options (-o) for this node, appended to defaults.sshOpts.
[ ]setupsoperator-config.deployment-method.tf-hosts.nodes.lldap.username Link copied!
null or stringSSH user to connect as for this node. Null inherits defaults.username.
nullsetupsoperator-config.deployment-method.tf-hosts.nodes.mastodon Link copied!
null or (submodule)SSH connection info for this node. Omit to inherit defaults and the roster FQDN.
nullsetupsoperator-config.deployment-method.tf-hosts.nodes.mastodon.host Link copied!
stringHost (address) to reach this node over SSH.
setupsoperator-config.deployment-method.tf-hosts.nodes.mastodon.keyFile Link copied!
null or stringPath to the SSH private key for this node. Null inherits defaults.keyFile.
nullsetupsoperator-config.deployment-method.tf-hosts.nodes.mastodon.sshOpts Link copied!
list of stringExtra SSH options (-o) for this node, appended to defaults.sshOpts.
[ ]setupsoperator-config.deployment-method.tf-hosts.nodes.mastodon.username Link copied!
null or stringSSH user to connect as for this node. Null inherits defaults.username.
nullsetupsoperator-config.deployment-method.tf-hosts.nodes.peertube Link copied!
null or (submodule)SSH connection info for this node. Omit to inherit defaults and the roster FQDN.
nullsetupsoperator-config.deployment-method.tf-hosts.nodes.peertube.host Link copied!
stringHost (address) to reach this node over SSH.
setupsoperator-config.deployment-method.tf-hosts.nodes.peertube.keyFile Link copied!
null or stringPath to the SSH private key for this node. Null inherits defaults.keyFile.
nullsetupsoperator-config.deployment-method.tf-hosts.nodes.peertube.sshOpts Link copied!
list of stringExtra SSH options (-o) for this node, appended to defaults.sshOpts.
[ ]setupsoperator-config.deployment-method.tf-hosts.nodes.peertube.username Link copied!
null or stringSSH user to connect as for this node. Null inherits defaults.username.
nullsetupsoperator-config.deployment-method.tf-hosts.nodes.pixelfed Link copied!
null or (submodule)SSH connection info for this node. Omit to inherit defaults and the roster FQDN.
nullsetupsoperator-config.deployment-method.tf-hosts.nodes.pixelfed.host Link copied!
stringHost (address) to reach this node over SSH.
setupsoperator-config.deployment-method.tf-hosts.nodes.pixelfed.keyFile Link copied!
null or stringPath to the SSH private key for this node. Null inherits defaults.keyFile.
nullsetupsoperator-config.deployment-method.tf-hosts.nodes.pixelfed.sshOpts Link copied!
list of stringExtra SSH options (-o) for this node, appended to defaults.sshOpts.
[ ]setupsoperator-config.deployment-method.tf-hosts.nodes.pixelfed.username Link copied!
null or stringSSH user to connect as for this node. Null inherits defaults.username.
nullsetupsoperator-config.deployment-method.tf-hosts.nodes.smtp Link copied!
null or (submodule)SSH connection info for this node. Omit to inherit defaults and the roster FQDN.
nullsetupsoperator-config.deployment-method.tf-hosts.nodes.smtp.host Link copied!
stringHost (address) to reach this node over SSH.
setupsoperator-config.deployment-method.tf-hosts.nodes.smtp.keyFile Link copied!
null or stringPath to the SSH private key for this node. Null inherits defaults.keyFile.
nullsetupsoperator-config.deployment-method.tf-hosts.nodes.smtp.sshOpts Link copied!
list of stringExtra SSH options (-o) for this node, appended to defaults.sshOpts.
[ ]setupsoperator-config.deployment-method.tf-hosts.nodes.smtp.username Link copied!
null or stringSSH user to connect as for this node. Null inherits defaults.username.
nullsetupsoperator-config.deployment-method.tf-hosts.nodes.valkey Link copied!
null or (submodule)SSH connection info for this node. Omit to inherit defaults and the roster FQDN.
nullsetupsoperator-config.deployment-method.tf-hosts.nodes.valkey.host Link copied!
stringHost (address) to reach this node over SSH.
setupsoperator-config.deployment-method.tf-hosts.nodes.valkey.keyFile Link copied!
null or stringPath to the SSH private key for this node. Null inherits defaults.keyFile.
nullsetupsoperator-config.deployment-method.tf-hosts.nodes.valkey.sshOpts Link copied!
list of stringExtra SSH options (-o) for this node, appended to defaults.sshOpts.
[ ]setupsoperator-config.deployment-method.tf-hosts.nodes.valkey.username Link copied!
null or stringSSH user to connect as for this node. Null inherits defaults.username.
nullsetupsoperator-config.deployment-method.tf-incus-hosts Link copied!
submoduleDeploy via OpenTofu to Incus-provisioned hosts: Incus connection and instance settings.
operator-config.deployment-method.tf-incus-hostsoperator-config.deployment-method.tf-incus-hosts.applications Link copied!
null or (submodule)Per-application configuration the operator sets to enable and configure each Fediversity application.
nullsetupsoperator-config.deployment-method.tf-incus-hosts.applications.mastodon Link copied!
submoduleYour self-hosted, globally interconnected microblogging community
{ }setupsoperator-config.deployment-method.tf-incus-hosts.applications.mastodon.domain Link copied!
stringFully-qualified domain name the Mastodon instance is served from (e.g. mastodon.example.org). Used as the instance's canonical host in generated URLs, certificates, and federation identifiers.
"mastodon.fediversity.net"components/operator/mastodonoperator-config.deployment-method.tf-incus-hosts.applications.mastodon.enable Link copied!
booleanWhether to enable Enable a Mastodon server on the machine.
falsetruecomponents/operator/mastodonoperator-config.deployment-method.tf-incus-hosts.applications.mastodon.mediaAutoRemove.enable Link copied!
booleanAutomatically remove remote media attachments and preview cards older than the configured amount of days.
Recommended in <https://docs.joinmastodon.org/admin/setup/>.
truefalsecomponents/operator/mastodonoperator-config.deployment-method.tf-incus-hosts.applications.mastodon.mediaAutoRemove.olderThanDays Link copied!
signed integerHow old remote media needs to be in order to be removed.
3014components/operator/mastodonoperator-config.deployment-method.tf-incus-hosts.applications.peertube Link copied!
submoduleActivityPub-federated video streaming platform using P2P directly in your web browser
{ }setupsoperator-config.deployment-method.tf-incus-hosts.applications.peertube.domain Link copied!
stringFully-qualified domain name the Peertube instance is served from (e.g. mastodon.example.org). Used as the instance's canonical host in generated URLs, certificates, and federation identifiers.
"peertube.fediversity.net"components/operator/peertubeoperator-config.deployment-method.tf-incus-hosts.applications.peertube.enable Link copied!
booleanWhether to enable Enable a Peertube server on the machine.
falsetruecomponents/operator/peertubeoperator-config.deployment-method.tf-incus-hosts.applications.peertube.settings Link copied!
peertube's instance settingsInstance settings, from PeerTube's own configuration file.
nullcomponents/operator/peertubeoperator-config.deployment-method.tf-incus-hosts.applications.pixelfed Link copied!
submodulePhoto Sharing. For Everyone.
{ }setupsoperator-config.deployment-method.tf-incus-hosts.applications.pixelfed.domain Link copied!
stringFully-qualified domain name the Pixelfed instance is served from (e.g. mastodon.example.org). Used as the instance's canonical host in generated URLs, certificates, and federation identifiers.
"pixelfed.fediversity.net"components/operator/pixelfedoperator-config.deployment-method.tf-incus-hosts.applications.pixelfed.enable Link copied!
booleanWhether to enable Enable a Pixelfed server on the machine.
falsetruecomponents/operator/pixelfedoperator-config.deployment-method.tf-incus-hosts.applications.pixelfed.maxUploadSize Link copied!
stringMax upload size with units.
"8M"components/operator/pixelfedoperator-config.deployment-method.tf-incus-hosts.domain Link copied!
stringApex domain under which the services will be deployed.
"fediversity.net"setupsoperator-config.deployment-method.tf-incus-hosts.email Link copied!
stringRecovery email of the seeded directory administrator.
The central LDAP directory is seeded with a single
administrator user at deploy time, named after the deployment
group (operator in an operator deployment) and added to
authelia-users so it can log into every SSO-enabled
application (mastodon, peertube, pixelfed) through authelia
OIDC. The username follows the group; only this recovery email is
operator-facing. No password is set declaratively -- the
operator establishes it with "Forgot password?" on the
authelia portal, which mails a single-use link here, so this
address must be deliverable.
setupsoperator-config.deployment-method.tf-incus-hosts.enableTpm Link copied!
booleanAttach a software-TPM 2.0 device to each container, enabling SPIRE TPM node attestation. Only emitted for container instances.
truesetupsoperator-config.deployment-method.tf-incus-hosts.host Link copied!
stringAddress of the Incus server.
"localhost"setupsoperator-config.deployment-method.tf-incus-hosts.hostSsh Link copied!
submoduleSSH identity for the Incus host's own store, used by nodes that share it.
{ }setupsoperator-config.deployment-method.tf-incus-hosts.hostSsh.address Link copied!
null or stringAddress of the Incus host's SSH service. Null (the default) reuses host, the address its Incus API is reached at.
nullsetupsoperator-config.deployment-method.tf-incus-hosts.hostSsh.keyFile Link copied!
null or stringDeployer-side path to the private half of the scoped store-serve identity, which the Incus host minted and published to KV. Null offers whatever the deployer's ssh is otherwise configured with.
nullsetupsoperator-config.deployment-method.tf-incus-hosts.hostSsh.signingKeyFile Link copied!
null or stringDeployer-side path to the Nix secret signing key the Incus host's trusted-public-keys lists the public half of. The scoped identity is not one of that host's trusted-users, so its daemon checks the signature on every path it is handed; unsigned, a shared-store copy is refused. Null signs nothing.
nullsetupsoperator-config.deployment-method.tf-incus-hosts.hostSsh.sshOpts Link copied!
list of stringExtra SSH options (-o) used to reach the Incus host.
[ ]setupsoperator-config.deployment-method.tf-incus-hosts.hostSsh.user Link copied!
stringSSH user on the Incus host. The default suits a hosting provider's own deploy, which reaches its hypervisor by the identity it deployed it with. incus-store is the scoped alternative that host can mint (core/components/hosting-provider/incus-store-serve.nix), whose whole vocabulary is the closure copy and the two profile verbs a shared-store deploy needs, and which is what a deployer that is not the machine's administrator gets. core/setups/tf-incus-operator-hosts.nix defaults its own lane to it, an operator's deployer being one of those by definition.
"root"setupsoperator-config.deployment-method.tf-incus-hosts.imageAlias Link copied!
stringAlias resolved to a fingerprint on the target daemon when imageFingerprint is null. tf-incus-image uploads under this name.
"nixos-fediversity"setupsoperator-config.deployment-method.tf-incus-hosts.imageFingerprint Link copied!
null or stringFingerprint of the Incus image to use. Null (the default) resolves imageAlias on the target daemon; set one only to pin an exact image.
nullsetupsoperator-config.deployment-method.tf-incus-hosts.instanceType Link copied!
one of "container", "virtual-machine"Incus instance type: container or virtual-machine.
"container"setupsoperator-config.deployment-method.tf-incus-hosts.network Link copied!
stringName of the Incus network bridge to attach to.
"incusbr0"setupsoperator-config.deployment-method.tf-incus-hosts.port Link copied!
signed integerPort of the Incus HTTPS API.
8443setupsoperator-config.deployment-method.tf-incus-image Link copied!
submoduleUpload a NixOS image to an Incus server.
operator-config.deployment-method.tf-incus-imageoperator-config.deployment-method.tf-incus-image.alias Link copied!
stringAlias name for the uploaded image.
"nixos-fediversity"setupsoperator-config.deployment-method.tf-incus-image.host Link copied!
stringAddress of the Incus server.
"localhost"setupsoperator-config.deployment-method.tf-incus-image.node Link copied!
null or one of "authelia", "lldap", "mastodon", "peertube", "pixelfed", "smtp", "valkey"Which of the group's nodes to build the image from. Null uses the group's first node.
nullsetupsoperator-config.deployment-method.tf-incus-image.port Link copied!
signed integerPort of the Incus HTTPS API.
8443setupsoperator-config.deployment-method.tf-incus-operator-hosts Link copied!
submoduleDeploy via OpenTofu to Incus-provisioned hosts, provisioning the operator's per-namespace garage alongside: Incus connection and instance settings.
operator-config.deployment-method.tf-incus-operator-hostsoperator-config.deployment-method.tf-incus-operator-hosts.applications Link copied!
null or (submodule)Per-application configuration the operator sets to enable and configure each Fediversity application.
nullsetupsoperator-config.deployment-method.tf-incus-operator-hosts.applications.mastodon Link copied!
submoduleYour self-hosted, globally interconnected microblogging community
{ }setupsoperator-config.deployment-method.tf-incus-operator-hosts.applications.mastodon.domain Link copied!
stringFully-qualified domain name the Mastodon instance is served from (e.g. mastodon.example.org). Used as the instance's canonical host in generated URLs, certificates, and federation identifiers.
"mastodon.fediversity.net"components/operator/mastodonoperator-config.deployment-method.tf-incus-operator-hosts.applications.mastodon.enable Link copied!
booleanWhether to enable Enable a Mastodon server on the machine.
falsetruecomponents/operator/mastodonoperator-config.deployment-method.tf-incus-operator-hosts.applications.mastodon.mediaAutoRemove.enable Link copied!
booleanAutomatically remove remote media attachments and preview cards older than the configured amount of days.
Recommended in <https://docs.joinmastodon.org/admin/setup/>.
truefalsecomponents/operator/mastodonoperator-config.deployment-method.tf-incus-operator-hosts.applications.mastodon.mediaAutoRemove.olderThanDays Link copied!
signed integerHow old remote media needs to be in order to be removed.
3014components/operator/mastodonoperator-config.deployment-method.tf-incus-operator-hosts.applications.peertube Link copied!
submoduleActivityPub-federated video streaming platform using P2P directly in your web browser
{ }setupsoperator-config.deployment-method.tf-incus-operator-hosts.applications.peertube.domain Link copied!
stringFully-qualified domain name the Peertube instance is served from (e.g. mastodon.example.org). Used as the instance's canonical host in generated URLs, certificates, and federation identifiers.
"peertube.fediversity.net"components/operator/peertubeoperator-config.deployment-method.tf-incus-operator-hosts.applications.peertube.enable Link copied!
booleanWhether to enable Enable a Peertube server on the machine.
falsetruecomponents/operator/peertubeoperator-config.deployment-method.tf-incus-operator-hosts.applications.peertube.settings Link copied!
peertube's instance settingsInstance settings, from PeerTube's own configuration file.
nullcomponents/operator/peertubeoperator-config.deployment-method.tf-incus-operator-hosts.applications.pixelfed Link copied!
submodulePhoto Sharing. For Everyone.
{ }setupsoperator-config.deployment-method.tf-incus-operator-hosts.applications.pixelfed.domain Link copied!
stringFully-qualified domain name the Pixelfed instance is served from (e.g. mastodon.example.org). Used as the instance's canonical host in generated URLs, certificates, and federation identifiers.
"pixelfed.fediversity.net"components/operator/pixelfedoperator-config.deployment-method.tf-incus-operator-hosts.applications.pixelfed.enable Link copied!
booleanWhether to enable Enable a Pixelfed server on the machine.
falsetruecomponents/operator/pixelfedoperator-config.deployment-method.tf-incus-operator-hosts.applications.pixelfed.maxUploadSize Link copied!
stringMax upload size with units.
"8M"components/operator/pixelfedoperator-config.deployment-method.tf-incus-operator-hosts.domain Link copied!
stringApex domain under which the services will be deployed.
"fediversity.net"setupsoperator-config.deployment-method.tf-incus-operator-hosts.email Link copied!
stringRecovery email of the seeded directory administrator.
The central LDAP directory is seeded with a single
administrator user at deploy time, named after the deployment
group (operator in an operator deployment) and added to
authelia-users so it can log into every SSO-enabled
application (mastodon, peertube, pixelfed) through authelia
OIDC. The username follows the group; only this recovery email is
operator-facing. No password is set declaratively -- the
operator establishes it with "Forgot password?" on the
authelia portal, which mails a single-use link here, so this
address must be deliverable.
setupsoperator-config.deployment-method.tf-incus-operator-hosts.enableTpm Link copied!
booleanAttach a software-TPM 2.0 device to each container, enabling SPIRE TPM node attestation. Only emitted for container instances.
truesetupsoperator-config.deployment-method.tf-incus-operator-hosts.host Link copied!
stringAddress of the Incus server.
"localhost"setupsoperator-config.deployment-method.tf-incus-operator-hosts.hostSsh Link copied!
submoduleSSH identity for the Incus host's own store, used by nodes that share it.
{ }setupsoperator-config.deployment-method.tf-incus-operator-hosts.hostSsh.address Link copied!
null or stringAddress of the Incus host's SSH service. Null (the default) reuses host, the address its Incus API is reached at.
nullsetupsoperator-config.deployment-method.tf-incus-operator-hosts.hostSsh.keyFile Link copied!
null or stringDeployer-side path to the private half of the scoped store-serve identity, which the Incus host minted and published to KV. Null offers whatever the deployer's ssh is otherwise configured with.
nullsetupsoperator-config.deployment-method.tf-incus-operator-hosts.hostSsh.signingKeyFile Link copied!
null or stringDeployer-side path to the Nix secret signing key the Incus host's trusted-public-keys lists the public half of. The scoped identity is not one of that host's trusted-users, so its daemon checks the signature on every path it is handed; unsigned, a shared-store copy is refused. Null signs nothing.
nullsetupsoperator-config.deployment-method.tf-incus-operator-hosts.hostSsh.sshOpts Link copied!
list of stringExtra SSH options (-o) used to reach the Incus host.
[ ]setupsoperator-config.deployment-method.tf-incus-operator-hosts.hostSsh.user Link copied!
stringSSH user on the Incus host. The default suits a hosting provider's own deploy, which reaches its hypervisor by the identity it deployed it with. incus-store is the scoped alternative that host can mint (core/components/hosting-provider/incus-store-serve.nix), whose whole vocabulary is the closure copy and the two profile verbs a shared-store deploy needs, and which is what a deployer that is not the machine's administrator gets. core/setups/tf-incus-operator-hosts.nix defaults its own lane to it, an operator's deployer being one of those by definition.
"root"setupsoperator-config.deployment-method.tf-incus-operator-hosts.imageAlias Link copied!
stringAlias resolved to a fingerprint on the target daemon when imageFingerprint is null. tf-incus-image uploads under this name.
"nixos-fediversity"setupsoperator-config.deployment-method.tf-incus-operator-hosts.imageFingerprint Link copied!
null or stringFingerprint of the Incus image to use. Null (the default) resolves imageAlias on the target daemon; set one only to pin an exact image.
nullsetupsoperator-config.deployment-method.tf-incus-operator-hosts.instanceType Link copied!
one of "container", "virtual-machine"Incus instance type: container or virtual-machine.
"container"setupsoperator-config.deployment-method.tf-incus-operator-hosts.network Link copied!
stringName of the Incus network bridge to attach to.
"incusbr0"setupsoperator-config.deployment-method.tf-incus-operator-hosts.port Link copied!
signed integerPort of the Incus HTTPS API.
8443setupsoperator-config.enable Link copied!
booleanWhether to enable your Fediversity configuration.
falsetruesetupsresource Link copied!
submoduleConcrete request options declared by each resource module.
resourcesresource.dns Link copied!
submoduleAuthoritative-DNS coordinates for an application, fulfilled by either a self-hosted bind node or an external service, through the local dns contract.
resourcesresource.dns.request Link copied!
submoduleOptions a component sets to request this resource.
resourcesresource.dns.request.consumerName Link copied!
stringUnique consumer name for this app (analog of ldap's/redis's
consumerName), used as the contracts.dns.want.<consumerName>
key.
resources/dnsresource.dns.request.enable Link copied!
booleanWhether to enable authoritative-DNS coordinates on this application's host.
falsetrueresources/dnsresource.dns.request.nixos-configuration Link copied!
function that evaluates to a(n) unspecified valueNixOS configuration module merged onto the application node, fed
the resolved contract result ({ provider; host; port; scheme; apiTokenFile; domain; }) so the application
can address the group's authoritative-DNS.
resources/dnsresource.firewall Link copied!
submoduleWhich sources reach a node, and which of the ports it serves are published beyond them.
resourcesresource.firewall.request Link copied!
submoduleOptions a component sets to request this resource.
resourcesresource.firewall.request.publicTCPPorts Link copied!
list of 16 bit unsigned integer; between 0 and 65535 (both inclusive)TCP ports this application needs reachable from the whole internet rather than from the deployment's own peers only.
Request this only for a port whose users are outside the
deployment by nature -- an ingest, a federation endpoint, a
browser-facing listener. Everything else is reachable from
internalSources without asking.
The application still has to serve the port the ordinary way
(networking.firewall.allowedTCPPorts, or an upstream module's
openFirewall); this says who may reach it, not that it exists.
[ ][
1935
]resources/firewallresource.firewall.request.publicUDPPorts Link copied!
list of 16 bit unsigned integer; between 0 and 65535 (both inclusive)UDP counterpart of publicTCPPorts.
[ ][
53
]resources/firewallresource.garage Link copied!
submoduleGarage storage configuration for an application.
resourcesresource.garage.request Link copied!
submoduleOptions a component sets to request this resource.
resourcesresource.garage.request.enable Link copied!
booleanWhether to enable Enable a Garage server on the machine.
falsetrueresources/garageresource.garage.request.ensureBuckets Link copied!
attribute set of (submodule)S3 buckets to create on Garage for this application, keyed by bucket name. Each entry is provisioned (and configured for website serving, CORS, and aliases) when the deployment runs.
{ }resources/garageresource.garage.request.ensureBuckets.<name>.aliases Link copied!
list of stringAdditional global bucket aliases (alternative names) to register for this bucket in Garage.
[ ]resources/garageresource.garage.request.ensureBuckets.<name>.corsRules.allowedHeaders Link copied!
list of stringRequest headers permitted by the bucket's CORS policy (the AllowedHeaders of the S3 CORS rule).
[ ]resources/garageresource.garage.request.ensureBuckets.<name>.corsRules.allowedMethods Link copied!
list of stringHTTP methods (e.g. GET, PUT) permitted by the bucket's CORS policy.
[ ]resources/garageresource.garage.request.ensureBuckets.<name>.corsRules.allowedOrigins Link copied!
list of stringOrigins (e.g. https://app.example.org) allowed to make cross-origin requests to the bucket.
[ ]resources/garageresource.garage.request.ensureBuckets.<name>.corsRules.enable Link copied!
booleanWhether to enable CORS rules on this bucket, allowing other origins (e.g. a frontend) to fetch its objects from the browser.
falsetrueresources/garageresource.garage.request.ensureBuckets.<name>.serveAsWebsite Link copied!
booleanWhether to serve this bucket's contents as a static website over HTTP, so its objects are publicly reachable by URL.
falseresources/garageresource.garage.request.ensureKeys Link copied!
attribute set of (submodule)S3 access keys to provision on Garage for this application, keyed by key name. Each key is imported from the given credential files and granted the configured per-bucket access.
{ }resources/garageresource.garage.request.ensureKeys.<name>.ensureAccess Link copied!
attribute set of (submodule)Per-bucket access this key is granted, keyed by bucket name. At least one of read/write/owner should be set per bucket.
[ ]resources/garageresource.garage.request.ensureKeys.<name>.ensureAccess.<name>.owner Link copied!
booleanGrant this key owner permission on the bucket (manage the bucket itself, not just its objects).
falseresources/garageresource.garage.request.ensureKeys.<name>.ensureAccess.<name>.read Link copied!
booleanGrant this key permission to read objects from the bucket.
falseresources/garageresource.garage.request.ensureKeys.<name>.ensureAccess.<name>.write Link copied!
booleanGrant this key permission to write objects to the bucket.
falseresources/garageresource.garage.request.ensureKeys.<name>.kvName Link copied!
stringOpenBao KV instance stem the key's credentials publish under (<kvName>-s3). Defaults to the key name; not tenant-prefixed.
"‹name›"resources/garageresource.garage.request.ensureKeys.<name>.s3AccessKeyFile Link copied!
null or absolute pathPath to a file holding the S3 access key id to import
for this key. The in-Nix (garageSide) provisioner
imports a pre-generated key from it; the tf
provisioner has garage create the key and captures the
secret from state, so it leaves this null. The path is
the rendered read-back location, not a generation
source.
nullresources/garageresource.garage.request.ensureKeys.<name>.s3SecretKeyFile Link copied!
null or absolute pathPath to a file containing the S3 secret access key paired with s3AccessKeyFile. Null for the tf provisioner (see s3AccessKeyFile).
nullresources/garageresource.garage.request.nixos-configuration Link copied!
function that evaluates to a(n) unspecified valueThe NixOS configuration module to include.
resources/garageresource.generateFiles Link copied!
submoduleDeclarative generation of an application's secret files, via the generateFiles contract.
resourcesresource.generateFiles.request Link copied!
submoduleOptions a component sets to request this resource.
resourcesresource.generateFiles.request.instances Link copied!
attribute set of (submodule)Generation instances this application needs run on its host, keyed
by name. Each mirrors a contracts.generateFiles request: a
script producing the named files under $out/. The vars
provider bridges each generated file into
contracts.fileSecrets.want.vars.<name>_<file>, read back via
config.contracts.fileSecrets.results.vars.<name>_<file>.path.
{ }resources/generateFilesresource.generateFiles.request.instances.<name>.dependencies Link copied!
list of stringNames of other instances whose outputs are made available under $in/<name>/.
[ ]resources/generateFilesresource.generateFiles.request.instances.<name>.files Link copied!
attribute set of (submodule)Files to generate; keys are file names the script must write under $out/.
resources/generateFilesresource.generateFiles.request.instances.<name>.files.<name>.group Link copied!
stringUnix group that must own the generated file.
"root"resources/generateFilesresource.generateFiles.request.instances.<name>.files.<name>.mode Link copied!
stringFile permissions as an octal string.
"0400"resources/generateFilesresource.generateFiles.request.instances.<name>.files.<name>.owner Link copied!
stringUnix user that must own the generated file.
"root"resources/generateFilesresource.generateFiles.request.instances.<name>.files.<name>.secret Link copied!
booleanWhether the file contains sensitive data.
trueresources/generateFilesresource.generateFiles.request.instances.<name>.independent Link copied!
booleanWhether the instance's files stand on their own. An atomic instance (the default) refuses to run in a partial state; an independent one generates only what is missing, so it can grow a file without rotating its siblings.
falseresources/generateFilesresource.generateFiles.request.instances.<name>.runtimeInputs Link copied!
list of packagePackages available in PATH during script execution.
[ ]resources/generateFilesresource.generateFiles.request.instances.<name>.script Link copied!
stringShell script writing each declared file to $out/<name>.
Dependency outputs are available under $in/<dep>/.
resources/generateFilesresource.ldap Link copied!
submoduleLDAP directory access for an application, fulfilled by an lldap-backed provider of the nixpkgs ldap contract.
resourcesresource.ldap.request Link copied!
submoduleOptions a component sets to request this resource.
resourcesresource.ldap.request.consumerName Link copied!
stringUnique consumer name for this app (analog of oidc's clientID),
used as the contracts.ldap.want.<consumerName> key.
resources/ldapresource.ldap.request.enable Link copied!
booleanWhether to enable LDAP directory access for the application.
falsetrueresources/ldapresource.ldap.request.group Link copied!
stringLDAP group the application requires. The provider creates this
group. Carried verbatim by the nixpkgs ldap contract request.
resources/ldapresource.ldap.request.nixos-configuration Link copied!
function that evaluates to a(n) unspecified valueNixOS configuration module merged onto the application node, fed the
cross-node-resolved contract result (host, port, baseDN, bindDN,
bindPasswordFile) so the application can configure its LDAP client.
resources/ldapresource.netbox Link copied!
submoduleNetBox IPAM coordinates for an application, fulfilled by either a self-hosted NetBox node or an external instance, through the local netbox contract.
resourcesresource.netbox.request Link copied!
submoduleOptions a component sets to request this resource.
resourcesresource.netbox.request.consumerName Link copied!
stringUnique consumer name for this app (analog of ldap's/redis's
consumerName), used as the contracts.netbox.want.<consumerName>
key.
resources/netboxresource.netbox.request.enable Link copied!
booleanWhether to enable NetBox IPAM coordinates on this application's host.
falsetrueresources/netboxresource.netbox.request.nixos-configuration Link copied!
function that evaluates to a(n) unspecified valueNixOS configuration module merged onto the application node, fed
the resolved contract result ({ serverUrl; apiTokenFile; clusterName; tenant; prefixSelector; rangeSelector; }) so the application
can address the group's NetBox IPAM.
resources/netboxresource.network.request Link copied!
submoduleOptions a component sets to request this resource.
resourcesresource.nixos-module Link copied!
submoduleA NixOS configuration module to include as-is.
resourcesresource.nixos-module.request Link copied!
submoduleOptions a component sets to request this resource.
resourcesresource.nixos-module.request.module Link copied!
unspecified valueThe NixOS configuration module to include.
resources/nixos-moduleresource.oidc Link copied!
submoduleSingle sign-on (OIDC) for an application, fulfilled by an authelia-backed provider of the nixpkgs oidc contract.
resourcesresource.oidc.request Link copied!
submoduleOptions a component sets to request this resource.
resourcesresource.oidc.request.authorizationPolicy Link copied!
stringAuthelia authorization policy applied to the client
(one_factor, two_factor, or a named policy).
"two_factor"resources/oidcresource.oidc.request.clientID Link copied!
null or stringClient ID to register with the OIDC provider. Null for a
forwardAuth request (which registers no OIDC client -- authelia
protects the vhost through nginx auth_request, not a redirect
flow).
nullresources/oidcresource.oidc.request.enable Link copied!
booleanWhether to enable an OIDC single-sign-on client for the application.
falsetrueresources/oidcresource.oidc.request.forwardAuth Link copied!
null or (submodule)Forward-auth protection for a plain (non-OIDC) admin UI vhost,
instead of an OIDC client. A request is EITHER an OIDC client
(clientID/redirectURI set) OR a forward-auth protection
(forwardAuth.enable). When set, nginx fronts upstream with an
auth_request to authelia's /api/authz/auth-request endpoint, so
only authenticated sessions reach the UI -- used for services with
no native OIDC (garage-webui, pgweb, redis-commander, windmill).
nullresources/oidcresource.oidc.request.forwardAuth.adminUI Link copied!
booleanWhether this vhost belongs to the hosting provider's
admin-UI category, which deployAdminUIs gates as a whole.
True for a prod convenience fronting a backend with no native OIDC (garage-webui, pgweb, redis-commander). Set false for a UI that is part of the service it fronts and that every group running that service needs -- lldap's own web UI, which is the directory's self-service surface.
trueresources/oidcresource.oidc.request.forwardAuth.allowedGroups Link copied!
list of stringRestrict access to members of these authelia groups. Empty
(the default) allows any authenticated user (subject to
authorizationPolicy).
[ ]resources/oidcresource.oidc.request.forwardAuth.authorizationPolicy Link copied!
stringAuthelia authorization policy for this domain (one_factor
suffices for any authenticated user; two_factor for MFA).
"one_factor"resources/oidcresource.oidc.request.forwardAuth.domain Link copied!
null or stringPublic domain the protected UI is served under, stated in
full (e.g. garage-webui.example.org). For a UI published
in a zone this deployment does not own; subdomain below
is what names one under the deployment's own domain.
Exactly one of the two is set -- see
./forward-auth-domain.nix, which resolves them.
nullresources/oidcresource.oidc.request.forwardAuth.enable Link copied!
booleanWhether to enable forward-auth protection for this UI vhost.
falsetrueresources/oidcresource.oidc.request.forwardAuth.nixos-configuration Link copied!
function that evaluates to a(n) unspecified valueNixOS configuration module merged onto the node serving the
protected UI (e.g. the systemd service running the UI). A
function of the resource policy config.
resources/oidcresource.oidc.request.forwardAuth.proxyWebsockets Link copied!
booleanPass websocket upgrades through to the protected UI. Needed by a UI that streams over a websocket -- the windmill UI's job logs -- and off by default, since the plain admin UIs (garage-webui, pgweb, redis-commander, lldap) do not.
falseresources/oidcresource.oidc.request.forwardAuth.subdomain Link copied!
null or stringThe label the protected UI is served under, hung off the
deployment's own deploymentDomain.
What a component SHARED between groups states: a tenant
deployment's domain is the tenant's own name, and a shared
component that instead reaches for the static apex
(core/apex.nix) names the hosting provider's node from
inside the tenant's deployment -- a name the tenant may
neither publish nor hold a certificate for.
nullresources/oidcresource.oidc.request.forwardAuth.upstream Link copied!
stringProxy target nginx forwards to once authenticated (e.g. 127.0.0.1:3909).
resources/oidcresource.oidc.request.forwardAuth.upstreamAuthorizationInclude Link copied!
null or stringnginx include pattern pulled into location /, for a
protected UI that cannot log a user in itself: one who has
just cleared the portal would otherwise be met by a second,
unrelated login form. A unit on the node drops a
proxy_set_header Authorization ...; line matching this
pattern once it holds a token to present, and the gate then
presents it on that user's behalf.
A glob rather than a fixed path, because nginx has to start
before that unit has ever run: an include of a missing
file refuses to load, while one whose mask matches nothing
is not an error.
Null (the default) leaves the gate a plain proxy, which is
what a UI that authenticates the forwarded Remote-User
itself wants.
nullresources/oidcresource.oidc.request.jwtAccessTokens Link copied!
booleanIssue RFC 9068 JWT-profile access tokens to this client
(access_token_signed_response_alg: RS256) instead of
authelia's default opaque tokens. For consumers that verify
the bearer access token locally as a JWT against the issuer's
JWKS, e.g. the incus daemon, which parses every bearer token
and rejects an opaque one with "token contains an invalid
number of segments".
falseresources/oidcresource.oidc.request.nixos-configuration Link copied!
function that evaluates to a(n) unspecified valueNixOS configuration module merged onto the application node, so the
application can read back its fulfilled contract result via
config.contracts.oidc.results.<app>.<instance>.
resources/oidcresource.oidc.request.public Link copied!
booleanRegister the client as a public OIDC client (no client
secret; token_endpoint_auth_method: none, PKCE enforced).
For consumers that cannot hold a secret, e.g. the incus UI,
whose token exchange sends no client authentication.
falseresources/oidcresource.oidc.request.redirectURI Link copied!
null or stringPrimary callback URI the provider should redirect to after
authentication. This is the value carried by the nixpkgs oidc
contract request; additional URIs go in redirectURIs. Null for a
forwardAuth request (no redirect flow).
nullresources/oidcresource.oidc.request.redirectURIs Link copied!
list of stringExtra callback URIs to register on the OIDC client, beyond
redirectURI. Authelia registers the union of redirectURI and
these. These ride alongside the contract (which only models a
single redirectURI) and are applied by the authelia provider.
[ ]resources/oidcresource.oidc.request.scopes Link copied!
list of stringOIDC scopes the client may request. Defaults to the standard OpenID Connect profile scopes.
[
"openid"
"profile"
"email"
]resources/oidcresource.otel Link copied!
submoduleOpenTelemetry collector endpoint for emitting telemetry signals from an
application. The policy carries the collector's OTLP endpoint; each
application that opts in contributes a nixos-configuration function
that, given the endpoint, returns its per-service OTel wiring as a
NixOS module. The resource emits those modules onto the application's
host.
resourcesresource.otel.request Link copied!
submoduleOptions a component sets to request this resource.
resourcesresource.otel.request.enable Link copied!
booleanWhether to enable emitting OpenTelemetry signals from this application to the configured collector.
falsetrueresources/otelresource.otel.request.nixos-configuration Link copied!
function that evaluates to a(n) unspecified valueFunction endpoint -> nixos-module returning the per-service
OTel wiring for this application.
resources/otelresource.postgresql Link copied!
submodulePostgreSQL database access for an application, fulfilled by a postgres-backed provider of the postgresql contract on a dedicated database node.
resourcesresource.postgresql.request Link copied!
submoduleOptions a component sets to request this resource.
resourcesresource.postgresql.request.bootstrapSQL Link copied!
strings concatenated with "\n"Application-specific SQL run as the postgres superuser against this
app's database, after it is created and before any consumer
connects. Some upstream service modules ship migrations assuming
roles or objects their NixOS module creates only under a
createLocally = true path a remote consumer disables. Has to be
idempotent, being re-applied every deploy. @username@ and
@database@ are replaced by the request's username and
database as created, namespacePrefix included; quote them as
identifiers, since a prefixed name carries a hyphen.
""resources/postgresqlresource.postgresql.request.consumerName Link copied!
stringUnique consumer name for this app (analog of oidc's clientID),
used as the contracts.postgresql.want.<consumerName> key.
resources/postgresqlresource.postgresql.request.credentialMode Link copied!
one of "rotating", "dynamic"How the central OpenBao database engine issues this consumer's credential:
-
rotating(default): a fixed-namedatabase/static-roles/<role>whose password the engine rotates onrotation_period; the consumer readsdatabase/static-creds/<role>and the login name never changes. Required wherever a consumer pins a fixed database user. -
dynamic: adatabase/roles/<role>minting a short-lived role with a random per-lease username on each read ofdatabase/creds/<role>. Usable by a consumer that takes the full DSN (result.urlFile) and pins no user, buying per-lease revocation at the cost of a stable username.
TODO: extend dynamic coverage. A fixed-user consumer needs an
indirection such as a connection pooler holding the leased DSN
behind a stable local socket, so those stay on rotating, with
shorter rotation_periods as the interim containment knob.
"rotating"resources/postgresqlresource.postgresql.request.database Link copied!
stringPostgreSQL database the application requires; the provider creates
it. Carried verbatim by the postgresql contract request.
resources/postgresqlresource.postgresql.request.dynamicOwnerRole Link copied!
stringPersistent NOLOGIN role owning every object this app creates
under dynamic credentials. Each lease role is granted membership
in it and gets ALTER ROLE ... SET role = '<owner>', so objects
land on the persistent role rather than the random per-lease role,
whose objects become unreachable once revoked. The provider node
creates the role and re-owns stranded objects to it. Empty derives
<username>_owner. Ignored for rotating consumers.
""resources/postgresqlresource.postgresql.request.dynamicRoleGrants Link copied!
list of stringExisting roles each freshly-minted dynamic lease role is granted
membership in, folded into the engine's dynamic
creation_statements as GRANT <role> TO "{{name}}". A dynamic
consumer connects as a random per-lease role, so any group role it
expects to SET ROLE to has to be granted per lease rather than
once to a fixed user. Pair with bootstrapSQL, which creates
those roles: they have to exist when a lease is minted, or role
creation fails. Ignored for rotating consumers.
[ ]resources/postgresqlresource.postgresql.request.enable Link copied!
booleanWhether to enable PostgreSQL database access for the application.
falsetrueresources/postgresqlresource.postgresql.request.nixos-configuration Link copied!
function that evaluates to a(n) unspecified valueNixOS configuration module merged onto the application node, fed the
cross-node-resolved contract result so the application can
configure its database client.
resources/postgresqlresource.postgresql.request.passwordFileMode Link copied!
stringMode of the rendered passwordFile/urlFile. Defaults to 0640,
root-owned and group-readable, which suits consumers reading it
via systemd LoadCredential. Set 0400 with a non-root
passwordFileOwner for an app reading the file as its own service
user.
"0640"resources/postgresqlresource.postgresql.request.passwordFileOwner Link copied!
stringOwner of the rendered passwordFile/urlFile. Defaults to root;
set to the app's service user when that user cats the file
directly. The agent gives the file to this owner on every render,
and again before it starts, so a change to this value reaches a
file the render leaves alone.
"root"resources/postgresqlresource.postgresql.request.reloadUnits Link copied!
list of stringSystemd units the openbao agent restarts after it re-renders this
consumer's credential. Every consumer reads the credential once at
process start, so one holding the previous credential starts
failing with password authentication failed.
List the app service plus any unit baking the credential into a
derived file the app reads; they are restarted in one systemd
transaction, which honors their own After=. Empty means the
consumer does not converge on rotation, correct only where it reads
the credential afresh on each use.
[ ]resources/postgresqlresource.postgresql.request.username Link copied!
stringPostgreSQL role the application connects as. Defaults to the
consumerName. Carried by the postgresql contract request.
config.consumerNameresources/postgresqlresource.redis Link copied!
submoduleRedis-compatible cache access for an application, fulfilled by an external provider (shared valkey node, OpenBao-brokered per-namespace credentials) of the nixpkgs redis contract.
resourcesresource.redis.request Link copied!
submoduleOptions a component sets to request this resource.
resourcesresource.redis.request.consumerName Link copied!
stringUnique consumer name for this app (analog of ldap's consumerName),
used as the contracts.redis.want.<consumerName> key.
resources/redisresource.redis.request.gateUnits Link copied!
list of stringUnits that must not start until this namespace's valkey listener
completes a TLS handshake the consumer node can verify, and answers.
Each named unit gets an ExecStartPre probe
(./wait-reachable.sh), which spends a short budget inside that
unit's own start timeout.
For a database migration runner. A Laravel migration can change the schema and then dispatch a queued job, and MySQL does not roll back DDL, so a dispatch that fails on a TLS error leaves the schema changed and the ledger row unwritten. Each later run then stops on a duplicate column, a state no configuration repairs. The gate makes the unit fail before its first statement instead.
[ ]resources/redisresource.redis.request.namespace Link copied!
stringThe application's logical cache identity. Selects the application's
own valkey@<namespace> instance -- its own process and port on the
group's valkey node -- so namespaces are isolated by process, not by
an ACL key-scope. Also the OpenBao static-role name that rotates the
instance's password. The multi-operator case folds the operator id in
via namespacePrefix.
resources/redisresource.redis.request.nixos-configuration Link copied!
function that evaluates to a(n) unspecified valueNixOS configuration module merged onto the application node, fed the
cross-node-resolved contract result (host, port, passwordFile) so
the application can configure its redis client and wire the
openbao-agent to render the rotated password.
resources/redisresource.secrets Link copied!
submoduleSecrets provisioning for an application, via the fileSecrets contract.
resourcesresource.secrets.request Link copied!
submoduleOptions a component sets to request this resource.
resourcesresource.secrets.request.secrets Link copied!
attribute set of (submodule)Secrets this application needs provisioned on its host, keyed by
name. Each becomes a contracts.fileSecrets.want.<app>.<name>
request, read back from
config.contracts.fileSecrets.results.<app>.<name>.path.
{ }resources/secretsresource.secrets.request.secrets.<name>.file Link copied!
null or absolute pathEncrypted .age source. Defaults to ./<name>.age for the agenix provider.
nullresources/secretsresource.secrets.request.secrets.<name>.group Link copied!
stringLinux group that must own the secret file. Defaults to the owner's primary group, as agenix does.
ownerresources/secretsresource.secrets.request.secrets.<name>.mode Link copied!
stringMode the secret file must have.
"0400"resources/secretsresource.secrets.request.secrets.<name>.owner Link copied!
stringLinux user that must own the secret file.
resources/secretsresource.smtp Link copied!
submoduleOutbound SMTP mail submission for an application, fulfilled by a maddy-backed (or external) provider of the nixpkgs smtp contract.
resourcesresource.smtp.request Link copied!
submoduleOptions a component sets to request this resource.
resourcesresource.smtp.request.enable Link copied!
booleanWhether to enable outbound SMTP mail submission for the application.
falsetrueresources/smtpresource.smtp.request.nixos-configuration Link copied!
function that evaluates to a(n) unspecified valueNixOS configuration module merged onto the application node, which
reads its fulfilled result back from
config.contracts.smtp.results.<app>.default.
resources/smtpresource.smtp.request.sender Link copied!
stringEmail address used as the sender (From header), carried verbatim
by the nixpkgs smtp contract request.
"noreply@example.com"resources/smtpresource.spiffe Link copied!
submoduleSPIFFE workload identity (spire-agent) provisioning for an application's host.
resourcesresource.spiffe.request Link copied!
submoduleOptions a component sets to request this resource.
resourcesresource.spiffe.request.enable Link copied!
booleanWhether to enable a spire-agent on this host for SPIFFE workload identity.
falsetrueresources/spifferesource.ssl Link copied!
submoduleTLS certificate provisioning for an application's vhosts.
resourcesresource.ssl.request Link copied!
submoduleOptions a component sets to request this resource.
resourcesresource.ssl.request.domains Link copied!
list of stringDomains this application terminates TLS for (its own vhosts).
[ ]resources/sslresource.ssl.request.trustDomains Link copied!
list of stringDomains served by another node this node must trust as a client (e.g. the garage bucket endpoints). Drives cross-node trust baking.
[ ]resources/ssl