Fediversity Options

data-model Link copied!

Type: submodule

The Fediversity data model's own options, declared in core/lib/data-model.nix.

Declared in: lib/data-model.nix

data-model.components Link copied!

Type: attribute set of (submodule)

Collection of Fediversity components

Declared in: lib/data-model.nix

data-model.components.<name>.description Link copied!

Type: string

Description to be shown in the component overview

Declared in: lib/data-model.nix

data-model.components.<name>.module Link copied!

Type: module

Operator-facing configuration options for the component

Default: <function>
Declared in: lib/data-model.nix

data-model.components.<name>.operatorFacing Link copied!

Type: boolean

Whether 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.

Default: false
Declared in: lib/data-model.nix

data-model.configuration Link copied!

Type: optionType

Configuration 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.

Declared in: lib/data-model.nix

data-model.environments Link copied!

Type: attribute set of (submodule)

Run-time environments for Fediversity components to be deployed to

Declared in: lib/data-model.nix

data-model.environments.<name>.config-mapping Link copied!

Type: 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).

Declared in: lib/data-model.nix

data-model.environments.<name>.deployment Link copied!

Type: 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.

Declared in: lib/data-model.nix

data-model.environments.<name>.implementation Link copied!

Type: function: required component resources -> deployment

Maps 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.

Declared in: lib/data-model.nix

data-model.environments.<name>.resource-mapping Link copied!

Type: 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.

Declared in: lib/data-model.nix

data-model.environments.<name>.resources Link copied!

Type: 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.

Declared in: lib/data-model.nix

data-model.resources Link copied!

Type: attribute set of (submodule)

Collection of deployment resources that can be required by components and policed by hosting providers

Declared in: lib/data-model.nix

data-model.resources.<name>.description Link copied!

Type: string

Description of the resource to help component module authors and hosting providers to work with it

Declared in: lib/data-model.nix

data-model.resources.<name>.policy Link copied!

Type: module

Options for configuring the resource policy for the hosting provider, a description of how the resource is made available

Declared in: lib/data-model.nix

data-model.resources.<name>.policy.apply Link copied!

Type: function that evaluates to a(n) unspecified value

Apply the policy to a request

Declared in: lib/data-model.nix

data-model.resources.<name>.policy.process Link copied!

Type: function that evaluates to a(n) unspecified value

Collect the relevant requests across all components, then apply the policy to them

Declared in: lib/data-model.nix

data-model.resources.<name>.policy.resource-type Link copied!

Type: optionType

The type of resource this policy configures

Declared in: lib/data-model.nix

data-model.resources.<name>.request Link copied!

Type: module

Options for declaring resource requirements by a component, a description of how the resource is consumed or accessed

Default: { }
Declared in: lib/data-model.nix

data-model.supportingRequests Link copied!

Type: module

Supporting resource requests not tied to a single component, made available to every environment.

Default: { options = { }; }
Declared in: lib/data-model.nix

operator-config Link copied!

Type: submodule

Operator-facing configuration for a Fediversity deployment, as set through the hosting provider's panel. This is the schema that drives the frontend form.

Declared in: setups

operator-config.deployment-method Link copied!

Type: attribute-tagged union with choices: octodns-zone, ssh-hosts, tf-hosts, tf-incus-hosts, tf-incus-image, tf-incus-operator-hosts

What 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).

Default: { tf-incus-operator-hosts = { }; }
Declared in: setups

operator-config.deployment-method.octodns-zone Link copied!

Type: submodule

Manage DNS records for a zone via OctoDNS.

Declared in: operator-config.deployment-method.octodns-zone

operator-config.deployment-method.octodns-zone.apiTokenFile Link copied!

Type: string

Path, 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).

Default: ""
Example: "/run/secrets/dns-api-token"
Declared in: setups

operator-config.deployment-method.octodns-zone.domain Link copied!

Type: string

The DNS domain (zone) to manage.

Example: "example.tld"
Declared in: setups

operator-config.deployment-method.octodns-zone.provider Link copied!

Type: string

The OctoDNS provider to use, see <https://octodns.readthedocs.io/en/latest/#providers>.

Example: "powerdns"
Declared in: setups

operator-config.deployment-method.octodns-zone.secretFiles Link copied!

Type: attribute set of string

The files from which to read the secrets to use with the provider.

Default: { }
Example:
{
  token = "/path/to/token";
}
Declared in: setups

operator-config.deployment-method.octodns-zone.serverUrl Link copied!

Type: string

URL of the authoritative-DNS service's API, scheme and port included. Empty means the domain is served by the deployment's own bind node.

Default: ""
Example: "https://pdns.example.org"
Declared in: setups

operator-config.deployment-method.ssh-hosts Link copied!

Type: submodule

Deploy over SSH to existing hosts: a shared SSH identity plus, per node, where to reach it and any identity override.

Declared in: operator-config.deployment-method.ssh-hosts

operator-config.deployment-method.ssh-hosts.applications Link copied!

Type: null or (submodule)

Per-application configuration the operator sets to enable and configure each Fediversity application.

Default: null
Declared in: setups

operator-config.deployment-method.ssh-hosts.applications.mastodon Link copied!

Type: submodule

Your self-hosted, globally interconnected microblogging community

Default: { }
Declared in: setups

operator-config.deployment-method.ssh-hosts.applications.mastodon.domain Link copied!

Type: string

Fully-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.

Default: "mastodon.fediversity.net"

operator-config.deployment-method.ssh-hosts.applications.mastodon.enable Link copied!

Type: boolean

Whether to enable Enable a Mastodon server on the machine.

Default: false
Example: true

operator-config.deployment-method.ssh-hosts.applications.mastodon.mediaAutoRemove.enable Link copied!

Type: boolean

Automatically remove remote media attachments and preview cards older than the configured amount of days.

Recommended in <https://docs.joinmastodon.org/admin/setup/>.

Default: true
Example: false

operator-config.deployment-method.ssh-hosts.applications.mastodon.mediaAutoRemove.olderThanDays Link copied!

Type: signed integer

How old remote media needs to be in order to be removed.

Default: 30
Example: 14

operator-config.deployment-method.ssh-hosts.applications.peertube Link copied!

Type: submodule

ActivityPub-federated video streaming platform using P2P directly in your web browser

Default: { }
Declared in: setups

operator-config.deployment-method.ssh-hosts.applications.peertube.domain Link copied!

Type: string

Fully-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.

Default: "peertube.fediversity.net"

operator-config.deployment-method.ssh-hosts.applications.peertube.enable Link copied!

Type: boolean

Whether to enable Enable a Peertube server on the machine.

Default: false
Example: true

operator-config.deployment-method.ssh-hosts.applications.peertube.settings Link copied!

Type: peertube's instance settings

Instance settings, from PeerTube's own configuration file.

Default: null

operator-config.deployment-method.ssh-hosts.applications.pixelfed Link copied!

Type: submodule

Photo Sharing. For Everyone.

Default: { }
Declared in: setups

operator-config.deployment-method.ssh-hosts.applications.pixelfed.domain Link copied!

Type: string

Fully-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.

Default: "pixelfed.fediversity.net"

operator-config.deployment-method.ssh-hosts.applications.pixelfed.enable Link copied!

Type: boolean

Whether to enable Enable a Pixelfed server on the machine.

Default: false
Example: true

operator-config.deployment-method.ssh-hosts.applications.pixelfed.maxUploadSize Link copied!

Type: string

Max upload size with units.

Default: "8M"

operator-config.deployment-method.ssh-hosts.defaults Link copied!

Type: submodule

Shared SSH identity applied to every node, unless a node overrides it.

Default: { }
Declared in: setups

operator-config.deployment-method.ssh-hosts.defaults.keyFile Link copied!

Type: null or string

Path to the SSH private key the deployer reads (a reference, not key material). Null uses an agent / the deployer default.

Default: null
Declared in: setups

operator-config.deployment-method.ssh-hosts.defaults.sshOpts Link copied!

Type: list of string

Extra SSH options (-o) applied to every node.

Default: [ ]
Declared in: setups

operator-config.deployment-method.ssh-hosts.defaults.username Link copied!

Type: null or string

SSH user to connect as. Null uses the deployer default.

Default: null
Declared in: setups

operator-config.deployment-method.ssh-hosts.domain Link copied!

Type: string

Apex domain under which the services will be deployed.

Default: "fediversity.net"
Declared in: setups

operator-config.deployment-method.ssh-hosts.email Link copied!

Type: string

Recovery 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.

Declared in: setups

operator-config.deployment-method.ssh-hosts.nodes Link copied!

Type: submodule

Per-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.

Default: { }
Declared in: setups

operator-config.deployment-method.ssh-hosts.nodes.authelia Link copied!

Type: null or (submodule)

SSH connection info for this node. Omit to inherit defaults and the roster FQDN.

Default: null
Declared in: setups

operator-config.deployment-method.ssh-hosts.nodes.authelia.host Link copied!

Type: string

Host (address) to reach this node over SSH.

Declared in: setups

operator-config.deployment-method.ssh-hosts.nodes.authelia.keyFile Link copied!

Type: null or string

Path to the SSH private key for this node. Null inherits defaults.keyFile.

Default: null
Declared in: setups

operator-config.deployment-method.ssh-hosts.nodes.authelia.sshOpts Link copied!

Type: list of string

Extra SSH options (-o) for this node, appended to defaults.sshOpts.

Default: [ ]
Declared in: setups

operator-config.deployment-method.ssh-hosts.nodes.authelia.username Link copied!

Type: null or string

SSH user to connect as for this node. Null inherits defaults.username.

Default: null
Declared in: setups

operator-config.deployment-method.ssh-hosts.nodes.lldap Link copied!

Type: null or (submodule)

SSH connection info for this node. Omit to inherit defaults and the roster FQDN.

Default: null
Declared in: setups

operator-config.deployment-method.ssh-hosts.nodes.lldap.host Link copied!

Type: string

Host (address) to reach this node over SSH.

Declared in: setups

operator-config.deployment-method.ssh-hosts.nodes.lldap.keyFile Link copied!

Type: null or string

Path to the SSH private key for this node. Null inherits defaults.keyFile.

Default: null
Declared in: setups

operator-config.deployment-method.ssh-hosts.nodes.lldap.sshOpts Link copied!

Type: list of string

Extra SSH options (-o) for this node, appended to defaults.sshOpts.

Default: [ ]
Declared in: setups

operator-config.deployment-method.ssh-hosts.nodes.lldap.username Link copied!

Type: null or string

SSH user to connect as for this node. Null inherits defaults.username.

Default: null
Declared in: setups

operator-config.deployment-method.ssh-hosts.nodes.mastodon Link copied!

Type: null or (submodule)

SSH connection info for this node. Omit to inherit defaults and the roster FQDN.

Default: null
Declared in: setups

operator-config.deployment-method.ssh-hosts.nodes.mastodon.host Link copied!

Type: string

Host (address) to reach this node over SSH.

Declared in: setups

operator-config.deployment-method.ssh-hosts.nodes.mastodon.keyFile Link copied!

Type: null or string

Path to the SSH private key for this node. Null inherits defaults.keyFile.

Default: null
Declared in: setups

operator-config.deployment-method.ssh-hosts.nodes.mastodon.sshOpts Link copied!

Type: list of string

Extra SSH options (-o) for this node, appended to defaults.sshOpts.

Default: [ ]
Declared in: setups

operator-config.deployment-method.ssh-hosts.nodes.mastodon.username Link copied!

Type: null or string

SSH user to connect as for this node. Null inherits defaults.username.

Default: null
Declared in: setups

operator-config.deployment-method.ssh-hosts.nodes.peertube Link copied!

Type: null or (submodule)

SSH connection info for this node. Omit to inherit defaults and the roster FQDN.

Default: null
Declared in: setups

operator-config.deployment-method.ssh-hosts.nodes.peertube.host Link copied!

Type: string

Host (address) to reach this node over SSH.

Declared in: setups

operator-config.deployment-method.ssh-hosts.nodes.peertube.keyFile Link copied!

Type: null or string

Path to the SSH private key for this node. Null inherits defaults.keyFile.

Default: null
Declared in: setups

operator-config.deployment-method.ssh-hosts.nodes.peertube.sshOpts Link copied!

Type: list of string

Extra SSH options (-o) for this node, appended to defaults.sshOpts.

Default: [ ]
Declared in: setups

operator-config.deployment-method.ssh-hosts.nodes.peertube.username Link copied!

Type: null or string

SSH user to connect as for this node. Null inherits defaults.username.

Default: null
Declared in: setups

operator-config.deployment-method.ssh-hosts.nodes.pixelfed Link copied!

Type: null or (submodule)

SSH connection info for this node. Omit to inherit defaults and the roster FQDN.

Default: null
Declared in: setups

operator-config.deployment-method.ssh-hosts.nodes.pixelfed.host Link copied!

Type: string

Host (address) to reach this node over SSH.

Declared in: setups

operator-config.deployment-method.ssh-hosts.nodes.pixelfed.keyFile Link copied!

Type: null or string

Path to the SSH private key for this node. Null inherits defaults.keyFile.

Default: null
Declared in: setups

operator-config.deployment-method.ssh-hosts.nodes.pixelfed.sshOpts Link copied!

Type: list of string

Extra SSH options (-o) for this node, appended to defaults.sshOpts.

Default: [ ]
Declared in: setups

operator-config.deployment-method.ssh-hosts.nodes.pixelfed.username Link copied!

Type: null or string

SSH user to connect as for this node. Null inherits defaults.username.

Default: null
Declared in: setups

operator-config.deployment-method.ssh-hosts.nodes.smtp Link copied!

Type: null or (submodule)

SSH connection info for this node. Omit to inherit defaults and the roster FQDN.

Default: null
Declared in: setups

operator-config.deployment-method.ssh-hosts.nodes.smtp.host Link copied!

Type: string

Host (address) to reach this node over SSH.

Declared in: setups

operator-config.deployment-method.ssh-hosts.nodes.smtp.keyFile Link copied!

Type: null or string

Path to the SSH private key for this node. Null inherits defaults.keyFile.

Default: null
Declared in: setups

operator-config.deployment-method.ssh-hosts.nodes.smtp.sshOpts Link copied!

Type: list of string

Extra SSH options (-o) for this node, appended to defaults.sshOpts.

Default: [ ]
Declared in: setups

operator-config.deployment-method.ssh-hosts.nodes.smtp.username Link copied!

Type: null or string

SSH user to connect as for this node. Null inherits defaults.username.

Default: null
Declared in: setups

operator-config.deployment-method.ssh-hosts.nodes.valkey Link copied!

Type: null or (submodule)

SSH connection info for this node. Omit to inherit defaults and the roster FQDN.

Default: null
Declared in: setups

operator-config.deployment-method.ssh-hosts.nodes.valkey.host Link copied!

Type: string

Host (address) to reach this node over SSH.

Declared in: setups

operator-config.deployment-method.ssh-hosts.nodes.valkey.keyFile Link copied!

Type: null or string

Path to the SSH private key for this node. Null inherits defaults.keyFile.

Default: null
Declared in: setups

operator-config.deployment-method.ssh-hosts.nodes.valkey.sshOpts Link copied!

Type: list of string

Extra SSH options (-o) for this node, appended to defaults.sshOpts.

Default: [ ]
Declared in: setups

operator-config.deployment-method.ssh-hosts.nodes.valkey.username Link copied!

Type: null or string

SSH user to connect as for this node. Null inherits defaults.username.

Default: null
Declared in: setups

operator-config.deployment-method.tf-hosts Link copied!

Type: submodule

Deploy via OpenTofu to existing hosts over SSH, with an HTTP state backend.

Declared in: operator-config.deployment-method.tf-hosts

operator-config.deployment-method.tf-hosts.applications Link copied!

Type: null or (submodule)

Per-application configuration the operator sets to enable and configure each Fediversity application.

Default: null
Declared in: setups

operator-config.deployment-method.tf-hosts.applications.mastodon Link copied!

Type: submodule

Your self-hosted, globally interconnected microblogging community

Default: { }
Declared in: setups

operator-config.deployment-method.tf-hosts.applications.mastodon.domain Link copied!

Type: string

Fully-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.

Default: "mastodon.fediversity.net"

operator-config.deployment-method.tf-hosts.applications.mastodon.enable Link copied!

Type: boolean

Whether to enable Enable a Mastodon server on the machine.

Default: false
Example: true

operator-config.deployment-method.tf-hosts.applications.mastodon.mediaAutoRemove.enable Link copied!

Type: boolean

Automatically remove remote media attachments and preview cards older than the configured amount of days.

Recommended in <https://docs.joinmastodon.org/admin/setup/>.

Default: true
Example: false

operator-config.deployment-method.tf-hosts.applications.mastodon.mediaAutoRemove.olderThanDays Link copied!

Type: signed integer

How old remote media needs to be in order to be removed.

Default: 30
Example: 14

operator-config.deployment-method.tf-hosts.applications.peertube Link copied!

Type: submodule

ActivityPub-federated video streaming platform using P2P directly in your web browser

Default: { }
Declared in: setups

operator-config.deployment-method.tf-hosts.applications.peertube.domain Link copied!

Type: string

Fully-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.

Default: "peertube.fediversity.net"

operator-config.deployment-method.tf-hosts.applications.peertube.enable Link copied!

Type: boolean

Whether to enable Enable a Peertube server on the machine.

Default: false
Example: true

operator-config.deployment-method.tf-hosts.applications.peertube.settings Link copied!

Type: peertube's instance settings

Instance settings, from PeerTube's own configuration file.

Default: null

operator-config.deployment-method.tf-hosts.applications.pixelfed Link copied!

Type: submodule

Photo Sharing. For Everyone.

Default: { }
Declared in: setups

operator-config.deployment-method.tf-hosts.applications.pixelfed.domain Link copied!

Type: string

Fully-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.

Default: "pixelfed.fediversity.net"

operator-config.deployment-method.tf-hosts.applications.pixelfed.enable Link copied!

Type: boolean

Whether to enable Enable a Pixelfed server on the machine.

Default: false
Example: true

operator-config.deployment-method.tf-hosts.applications.pixelfed.maxUploadSize Link copied!

Type: string

Max upload size with units.

Default: "8M"

operator-config.deployment-method.tf-hosts.defaults Link copied!

Type: submodule

Shared SSH identity applied to every node, unless a node overrides it.

Default: { }
Declared in: setups

operator-config.deployment-method.tf-hosts.defaults.keyFile Link copied!

Type: null or string

Path to the SSH private key the deployer reads (a reference, not key material). Null uses an agent / the deployer default.

Default: null
Declared in: setups

operator-config.deployment-method.tf-hosts.defaults.sshOpts Link copied!

Type: list of string

Extra SSH options (-o) applied to every node.

Default: [ ]
Declared in: setups

operator-config.deployment-method.tf-hosts.defaults.username Link copied!

Type: null or string

SSH user to connect as. Null uses the deployer default.

Default: null
Declared in: setups

operator-config.deployment-method.tf-hosts.domain Link copied!

Type: string

Apex domain under which the services will be deployed.

Default: "fediversity.net"
Declared in: setups

operator-config.deployment-method.tf-hosts.email Link copied!

Type: string

Recovery 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.

Declared in: setups

operator-config.deployment-method.tf-hosts.httpBackendAddress Link copied!

Type: null or string

Address of the OpenTofu HTTP state backend REST endpoint (TF_HTTP_ADDRESS).

Default: null
Declared in: setups

operator-config.deployment-method.tf-hosts.nodes Link copied!

Type: submodule

Per-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.

Default: { }
Declared in: setups

operator-config.deployment-method.tf-hosts.nodes.authelia Link copied!

Type: null or (submodule)

SSH connection info for this node. Omit to inherit defaults and the roster FQDN.

Default: null
Declared in: setups

operator-config.deployment-method.tf-hosts.nodes.authelia.host Link copied!

Type: string

Host (address) to reach this node over SSH.

Declared in: setups

operator-config.deployment-method.tf-hosts.nodes.authelia.keyFile Link copied!

Type: null or string

Path to the SSH private key for this node. Null inherits defaults.keyFile.

Default: null
Declared in: setups

operator-config.deployment-method.tf-hosts.nodes.authelia.sshOpts Link copied!

Type: list of string

Extra SSH options (-o) for this node, appended to defaults.sshOpts.

Default: [ ]
Declared in: setups

operator-config.deployment-method.tf-hosts.nodes.authelia.username Link copied!

Type: null or string

SSH user to connect as for this node. Null inherits defaults.username.

Default: null
Declared in: setups

operator-config.deployment-method.tf-hosts.nodes.lldap Link copied!

Type: null or (submodule)

SSH connection info for this node. Omit to inherit defaults and the roster FQDN.

Default: null
Declared in: setups

operator-config.deployment-method.tf-hosts.nodes.lldap.host Link copied!

Type: string

Host (address) to reach this node over SSH.

Declared in: setups

operator-config.deployment-method.tf-hosts.nodes.lldap.keyFile Link copied!

Type: null or string

Path to the SSH private key for this node. Null inherits defaults.keyFile.

Default: null
Declared in: setups

operator-config.deployment-method.tf-hosts.nodes.lldap.sshOpts Link copied!

Type: list of string

Extra SSH options (-o) for this node, appended to defaults.sshOpts.

Default: [ ]
Declared in: setups

operator-config.deployment-method.tf-hosts.nodes.lldap.username Link copied!

Type: null or string

SSH user to connect as for this node. Null inherits defaults.username.

Default: null
Declared in: setups

operator-config.deployment-method.tf-hosts.nodes.mastodon Link copied!

Type: null or (submodule)

SSH connection info for this node. Omit to inherit defaults and the roster FQDN.

Default: null
Declared in: setups

operator-config.deployment-method.tf-hosts.nodes.mastodon.host Link copied!

Type: string

Host (address) to reach this node over SSH.

Declared in: setups

operator-config.deployment-method.tf-hosts.nodes.mastodon.keyFile Link copied!

Type: null or string

Path to the SSH private key for this node. Null inherits defaults.keyFile.

Default: null
Declared in: setups

operator-config.deployment-method.tf-hosts.nodes.mastodon.sshOpts Link copied!

Type: list of string

Extra SSH options (-o) for this node, appended to defaults.sshOpts.

Default: [ ]
Declared in: setups

operator-config.deployment-method.tf-hosts.nodes.mastodon.username Link copied!

Type: null or string

SSH user to connect as for this node. Null inherits defaults.username.

Default: null
Declared in: setups

operator-config.deployment-method.tf-hosts.nodes.peertube Link copied!

Type: null or (submodule)

SSH connection info for this node. Omit to inherit defaults and the roster FQDN.

Default: null
Declared in: setups

operator-config.deployment-method.tf-hosts.nodes.peertube.host Link copied!

Type: string

Host (address) to reach this node over SSH.

Declared in: setups

operator-config.deployment-method.tf-hosts.nodes.peertube.keyFile Link copied!

Type: null or string

Path to the SSH private key for this node. Null inherits defaults.keyFile.

Default: null
Declared in: setups

operator-config.deployment-method.tf-hosts.nodes.peertube.sshOpts Link copied!

Type: list of string

Extra SSH options (-o) for this node, appended to defaults.sshOpts.

Default: [ ]
Declared in: setups

operator-config.deployment-method.tf-hosts.nodes.peertube.username Link copied!

Type: null or string

SSH user to connect as for this node. Null inherits defaults.username.

Default: null
Declared in: setups

operator-config.deployment-method.tf-hosts.nodes.pixelfed Link copied!

Type: null or (submodule)

SSH connection info for this node. Omit to inherit defaults and the roster FQDN.

Default: null
Declared in: setups

operator-config.deployment-method.tf-hosts.nodes.pixelfed.host Link copied!

Type: string

Host (address) to reach this node over SSH.

Declared in: setups

operator-config.deployment-method.tf-hosts.nodes.pixelfed.keyFile Link copied!

Type: null or string

Path to the SSH private key for this node. Null inherits defaults.keyFile.

Default: null
Declared in: setups

operator-config.deployment-method.tf-hosts.nodes.pixelfed.sshOpts Link copied!

Type: list of string

Extra SSH options (-o) for this node, appended to defaults.sshOpts.

Default: [ ]
Declared in: setups

operator-config.deployment-method.tf-hosts.nodes.pixelfed.username Link copied!

Type: null or string

SSH user to connect as for this node. Null inherits defaults.username.

Default: null
Declared in: setups

operator-config.deployment-method.tf-hosts.nodes.smtp Link copied!

Type: null or (submodule)

SSH connection info for this node. Omit to inherit defaults and the roster FQDN.

Default: null
Declared in: setups

operator-config.deployment-method.tf-hosts.nodes.smtp.host Link copied!

Type: string

Host (address) to reach this node over SSH.

Declared in: setups

operator-config.deployment-method.tf-hosts.nodes.smtp.keyFile Link copied!

Type: null or string

Path to the SSH private key for this node. Null inherits defaults.keyFile.

Default: null
Declared in: setups

operator-config.deployment-method.tf-hosts.nodes.smtp.sshOpts Link copied!

Type: list of string

Extra SSH options (-o) for this node, appended to defaults.sshOpts.

Default: [ ]
Declared in: setups

operator-config.deployment-method.tf-hosts.nodes.smtp.username Link copied!

Type: null or string

SSH user to connect as for this node. Null inherits defaults.username.

Default: null
Declared in: setups

operator-config.deployment-method.tf-hosts.nodes.valkey Link copied!

Type: null or (submodule)

SSH connection info for this node. Omit to inherit defaults and the roster FQDN.

Default: null
Declared in: setups

operator-config.deployment-method.tf-hosts.nodes.valkey.host Link copied!

Type: string

Host (address) to reach this node over SSH.

Declared in: setups

operator-config.deployment-method.tf-hosts.nodes.valkey.keyFile Link copied!

Type: null or string

Path to the SSH private key for this node. Null inherits defaults.keyFile.

Default: null
Declared in: setups

operator-config.deployment-method.tf-hosts.nodes.valkey.sshOpts Link copied!

Type: list of string

Extra SSH options (-o) for this node, appended to defaults.sshOpts.

Default: [ ]
Declared in: setups

operator-config.deployment-method.tf-hosts.nodes.valkey.username Link copied!

Type: null or string

SSH user to connect as for this node. Null inherits defaults.username.

Default: null
Declared in: setups

operator-config.deployment-method.tf-incus-hosts Link copied!

Type: submodule

Deploy via OpenTofu to Incus-provisioned hosts: Incus connection and instance settings.

Declared in: operator-config.deployment-method.tf-incus-hosts

operator-config.deployment-method.tf-incus-hosts.applications Link copied!

Type: null or (submodule)

Per-application configuration the operator sets to enable and configure each Fediversity application.

Default: null
Declared in: setups

operator-config.deployment-method.tf-incus-hosts.applications.mastodon Link copied!

Type: submodule

Your self-hosted, globally interconnected microblogging community

Default: { }
Declared in: setups

operator-config.deployment-method.tf-incus-hosts.applications.mastodon.domain Link copied!

Type: string

Fully-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.

Default: "mastodon.fediversity.net"

operator-config.deployment-method.tf-incus-hosts.applications.mastodon.enable Link copied!

Type: boolean

Whether to enable Enable a Mastodon server on the machine.

Default: false
Example: true

operator-config.deployment-method.tf-incus-hosts.applications.mastodon.mediaAutoRemove.enable Link copied!

Type: boolean

Automatically remove remote media attachments and preview cards older than the configured amount of days.

Recommended in <https://docs.joinmastodon.org/admin/setup/>.

Default: true
Example: false

operator-config.deployment-method.tf-incus-hosts.applications.mastodon.mediaAutoRemove.olderThanDays Link copied!

Type: signed integer

How old remote media needs to be in order to be removed.

Default: 30
Example: 14

operator-config.deployment-method.tf-incus-hosts.applications.peertube Link copied!

Type: submodule

ActivityPub-federated video streaming platform using P2P directly in your web browser

Default: { }
Declared in: setups

operator-config.deployment-method.tf-incus-hosts.applications.peertube.domain Link copied!

Type: string

Fully-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.

Default: "peertube.fediversity.net"

operator-config.deployment-method.tf-incus-hosts.applications.peertube.enable Link copied!

Type: boolean

Whether to enable Enable a Peertube server on the machine.

Default: false
Example: true

operator-config.deployment-method.tf-incus-hosts.applications.peertube.settings Link copied!

Type: peertube's instance settings

Instance settings, from PeerTube's own configuration file.

Default: null

operator-config.deployment-method.tf-incus-hosts.applications.pixelfed Link copied!

Type: submodule

Photo Sharing. For Everyone.

Default: { }
Declared in: setups

operator-config.deployment-method.tf-incus-hosts.applications.pixelfed.domain Link copied!

Type: string

Fully-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.

Default: "pixelfed.fediversity.net"

operator-config.deployment-method.tf-incus-hosts.applications.pixelfed.enable Link copied!

Type: boolean

Whether to enable Enable a Pixelfed server on the machine.

Default: false
Example: true

operator-config.deployment-method.tf-incus-hosts.applications.pixelfed.maxUploadSize Link copied!

Type: string

Max upload size with units.

Default: "8M"

operator-config.deployment-method.tf-incus-hosts.domain Link copied!

Type: string

Apex domain under which the services will be deployed.

Default: "fediversity.net"
Declared in: setups

operator-config.deployment-method.tf-incus-hosts.email Link copied!

Type: string

Recovery 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.

Declared in: setups

operator-config.deployment-method.tf-incus-hosts.enableTpm Link copied!

Type: boolean

Attach a software-TPM 2.0 device to each container, enabling SPIRE TPM node attestation. Only emitted for container instances.

Default: true
Declared in: setups

operator-config.deployment-method.tf-incus-hosts.host Link copied!

Type: string

Address of the Incus server.

Default: "localhost"
Declared in: setups

operator-config.deployment-method.tf-incus-hosts.hostSsh Link copied!

Type: submodule

SSH identity for the Incus host's own store, used by nodes that share it.

Default: { }
Declared in: setups

operator-config.deployment-method.tf-incus-hosts.hostSsh.address Link copied!

Type: null or string

Address of the Incus host's SSH service. Null (the default) reuses host, the address its Incus API is reached at.

Default: null
Declared in: setups

operator-config.deployment-method.tf-incus-hosts.hostSsh.keyFile Link copied!

Type: null or string

Deployer-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.

Default: null
Declared in: setups

operator-config.deployment-method.tf-incus-hosts.hostSsh.signingKeyFile Link copied!

Type: null or string

Deployer-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.

Default: null
Declared in: setups

operator-config.deployment-method.tf-incus-hosts.hostSsh.sshOpts Link copied!

Type: list of string

Extra SSH options (-o) used to reach the Incus host.

Default: [ ]
Declared in: setups

operator-config.deployment-method.tf-incus-hosts.hostSsh.user Link copied!

Type: string

SSH 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.

Default: "root"
Declared in: setups

operator-config.deployment-method.tf-incus-hosts.imageAlias Link copied!

Type: string

Alias resolved to a fingerprint on the target daemon when imageFingerprint is null. tf-incus-image uploads under this name.

Default: "nixos-fediversity"
Declared in: setups

operator-config.deployment-method.tf-incus-hosts.imageFingerprint Link copied!

Type: null or string

Fingerprint of the Incus image to use. Null (the default) resolves imageAlias on the target daemon; set one only to pin an exact image.

Default: null
Declared in: setups

operator-config.deployment-method.tf-incus-hosts.instanceType Link copied!

Type: one of "container", "virtual-machine"

Incus instance type: container or virtual-machine.

Default: "container"
Declared in: setups

operator-config.deployment-method.tf-incus-hosts.network Link copied!

Type: string

Name of the Incus network bridge to attach to.

Default: "incusbr0"
Declared in: setups

operator-config.deployment-method.tf-incus-hosts.port Link copied!

Type: signed integer

Port of the Incus HTTPS API.

Default: 8443
Declared in: setups

operator-config.deployment-method.tf-incus-image Link copied!

Type: submodule

Upload a NixOS image to an Incus server.

Declared in: operator-config.deployment-method.tf-incus-image

operator-config.deployment-method.tf-incus-image.alias Link copied!

Type: string

Alias name for the uploaded image.

Default: "nixos-fediversity"
Declared in: setups

operator-config.deployment-method.tf-incus-image.host Link copied!

Type: string

Address of the Incus server.

Default: "localhost"
Declared in: setups

operator-config.deployment-method.tf-incus-image.node Link copied!

Type: 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.

Default: null
Declared in: setups

operator-config.deployment-method.tf-incus-image.port Link copied!

Type: signed integer

Port of the Incus HTTPS API.

Default: 8443
Declared in: setups

operator-config.deployment-method.tf-incus-operator-hosts Link copied!

Type: submodule

Deploy via OpenTofu to Incus-provisioned hosts, provisioning the operator's per-namespace garage alongside: Incus connection and instance settings.

Declared in: operator-config.deployment-method.tf-incus-operator-hosts

operator-config.deployment-method.tf-incus-operator-hosts.applications Link copied!

Type: null or (submodule)

Per-application configuration the operator sets to enable and configure each Fediversity application.

Default: null
Declared in: setups

operator-config.deployment-method.tf-incus-operator-hosts.applications.mastodon Link copied!

Type: submodule

Your self-hosted, globally interconnected microblogging community

Default: { }
Declared in: setups

operator-config.deployment-method.tf-incus-operator-hosts.applications.mastodon.domain Link copied!

Type: string

Fully-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.

Default: "mastodon.fediversity.net"

operator-config.deployment-method.tf-incus-operator-hosts.applications.mastodon.enable Link copied!

Type: boolean

Whether to enable Enable a Mastodon server on the machine.

Default: false
Example: true

operator-config.deployment-method.tf-incus-operator-hosts.applications.mastodon.mediaAutoRemove.enable Link copied!

Type: boolean

Automatically remove remote media attachments and preview cards older than the configured amount of days.

Recommended in <https://docs.joinmastodon.org/admin/setup/>.

Default: true
Example: false

operator-config.deployment-method.tf-incus-operator-hosts.applications.mastodon.mediaAutoRemove.olderThanDays Link copied!

Type: signed integer

How old remote media needs to be in order to be removed.

Default: 30
Example: 14

operator-config.deployment-method.tf-incus-operator-hosts.applications.peertube Link copied!

Type: submodule

ActivityPub-federated video streaming platform using P2P directly in your web browser

Default: { }
Declared in: setups

operator-config.deployment-method.tf-incus-operator-hosts.applications.peertube.domain Link copied!

Type: string

Fully-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.

Default: "peertube.fediversity.net"

operator-config.deployment-method.tf-incus-operator-hosts.applications.peertube.enable Link copied!

Type: boolean

Whether to enable Enable a Peertube server on the machine.

Default: false
Example: true

operator-config.deployment-method.tf-incus-operator-hosts.applications.peertube.settings Link copied!

Type: peertube's instance settings

Instance settings, from PeerTube's own configuration file.

Default: null

operator-config.deployment-method.tf-incus-operator-hosts.applications.pixelfed Link copied!

Type: submodule

Photo Sharing. For Everyone.

Default: { }
Declared in: setups

operator-config.deployment-method.tf-incus-operator-hosts.applications.pixelfed.domain Link copied!

Type: string

Fully-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.

Default: "pixelfed.fediversity.net"

operator-config.deployment-method.tf-incus-operator-hosts.applications.pixelfed.enable Link copied!

Type: boolean

Whether to enable Enable a Pixelfed server on the machine.

Default: false
Example: true

operator-config.deployment-method.tf-incus-operator-hosts.applications.pixelfed.maxUploadSize Link copied!

Type: string

Max upload size with units.

Default: "8M"

operator-config.deployment-method.tf-incus-operator-hosts.domain Link copied!

Type: string

Apex domain under which the services will be deployed.

Default: "fediversity.net"
Declared in: setups

operator-config.deployment-method.tf-incus-operator-hosts.email Link copied!

Type: string

Recovery 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.

Declared in: setups

operator-config.deployment-method.tf-incus-operator-hosts.enableTpm Link copied!

Type: boolean

Attach a software-TPM 2.0 device to each container, enabling SPIRE TPM node attestation. Only emitted for container instances.

Default: true
Declared in: setups

operator-config.deployment-method.tf-incus-operator-hosts.host Link copied!

Type: string

Address of the Incus server.

Default: "localhost"
Declared in: setups

operator-config.deployment-method.tf-incus-operator-hosts.hostSsh Link copied!

Type: submodule

SSH identity for the Incus host's own store, used by nodes that share it.

Default: { }
Declared in: setups

operator-config.deployment-method.tf-incus-operator-hosts.hostSsh.address Link copied!

Type: null or string

Address of the Incus host's SSH service. Null (the default) reuses host, the address its Incus API is reached at.

Default: null
Declared in: setups

operator-config.deployment-method.tf-incus-operator-hosts.hostSsh.keyFile Link copied!

Type: null or string

Deployer-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.

Default: null
Declared in: setups

operator-config.deployment-method.tf-incus-operator-hosts.hostSsh.signingKeyFile Link copied!

Type: null or string

Deployer-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.

Default: null
Declared in: setups

operator-config.deployment-method.tf-incus-operator-hosts.hostSsh.sshOpts Link copied!

Type: list of string

Extra SSH options (-o) used to reach the Incus host.

Default: [ ]
Declared in: setups

operator-config.deployment-method.tf-incus-operator-hosts.hostSsh.user Link copied!

Type: string

SSH 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.

Default: "root"
Declared in: setups

operator-config.deployment-method.tf-incus-operator-hosts.imageAlias Link copied!

Type: string

Alias resolved to a fingerprint on the target daemon when imageFingerprint is null. tf-incus-image uploads under this name.

Default: "nixos-fediversity"
Declared in: setups

operator-config.deployment-method.tf-incus-operator-hosts.imageFingerprint Link copied!

Type: null or string

Fingerprint of the Incus image to use. Null (the default) resolves imageAlias on the target daemon; set one only to pin an exact image.

Default: null
Declared in: setups

operator-config.deployment-method.tf-incus-operator-hosts.instanceType Link copied!

Type: one of "container", "virtual-machine"

Incus instance type: container or virtual-machine.

Default: "container"
Declared in: setups

operator-config.deployment-method.tf-incus-operator-hosts.network Link copied!

Type: string

Name of the Incus network bridge to attach to.

Default: "incusbr0"
Declared in: setups

operator-config.deployment-method.tf-incus-operator-hosts.port Link copied!

Type: signed integer

Port of the Incus HTTPS API.

Default: 8443
Declared in: setups

operator-config.enable Link copied!

Type: boolean

Whether to enable your Fediversity configuration.

Default: false
Example: true
Declared in: setups

resource Link copied!

Type: submodule

Concrete request options declared by each resource module.

Declared in: resources

resource.dns Link copied!

Type: submodule

Authoritative-DNS coordinates for an application, fulfilled by either a self-hosted bind node or an external service, through the local dns contract.

Declared in: resources

resource.dns.request Link copied!

Type: submodule

Options a component sets to request this resource.

Declared in: resources

resource.dns.request.consumerName Link copied!

Type: string

Unique consumer name for this app (analog of ldap's/redis's consumerName), used as the contracts.dns.want.<consumerName> key.

Declared in: resources/dns

resource.dns.request.enable Link copied!

Type: boolean

Whether to enable authoritative-DNS coordinates on this application's host.

Default: false
Example: true
Declared in: resources/dns

resource.dns.request.nixos-configuration Link copied!

Type: function that evaluates to a(n) unspecified value

NixOS 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.

Declared in: resources/dns

resource.firewall Link copied!

Type: submodule

Which sources reach a node, and which of the ports it serves are published beyond them.

Declared in: resources

resource.firewall.request Link copied!

Type: submodule

Options a component sets to request this resource.

Declared in: resources

resource.firewall.request.publicTCPPorts Link copied!

Type: 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.

Default: [ ]
Example:
[
  1935
]
Declared in: resources/firewall

resource.firewall.request.publicUDPPorts Link copied!

Type: list of 16 bit unsigned integer; between 0 and 65535 (both inclusive)

UDP counterpart of publicTCPPorts.

Default: [ ]
Example:
[
  53
]
Declared in: resources/firewall

resource.garage Link copied!

Type: submodule

Garage storage configuration for an application.

Declared in: resources

resource.garage.request Link copied!

Type: submodule

Options a component sets to request this resource.

Declared in: resources

resource.garage.request.enable Link copied!

Type: boolean

Whether to enable Enable a Garage server on the machine.

Default: false
Example: true
Declared in: resources/garage

resource.garage.request.ensureBuckets Link copied!

Type: 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.

Default: { }
Declared in: resources/garage

resource.garage.request.ensureBuckets.<name>.aliases Link copied!

Type: list of string

Additional global bucket aliases (alternative names) to register for this bucket in Garage.

Default: [ ]
Declared in: resources/garage

resource.garage.request.ensureBuckets.<name>.corsRules.allowedHeaders Link copied!

Type: list of string

Request headers permitted by the bucket's CORS policy (the AllowedHeaders of the S3 CORS rule).

Default: [ ]
Declared in: resources/garage

resource.garage.request.ensureBuckets.<name>.corsRules.allowedMethods Link copied!

Type: list of string

HTTP methods (e.g. GET, PUT) permitted by the bucket's CORS policy.

Default: [ ]
Declared in: resources/garage

resource.garage.request.ensureBuckets.<name>.corsRules.allowedOrigins Link copied!

Type: list of string

Origins (e.g. https://app.example.org) allowed to make cross-origin requests to the bucket.

Default: [ ]
Declared in: resources/garage

resource.garage.request.ensureBuckets.<name>.corsRules.enable Link copied!

Type: boolean

Whether to enable CORS rules on this bucket, allowing other origins (e.g. a frontend) to fetch its objects from the browser.

Default: false
Example: true
Declared in: resources/garage

resource.garage.request.ensureBuckets.<name>.serveAsWebsite Link copied!

Type: boolean

Whether to serve this bucket's contents as a static website over HTTP, so its objects are publicly reachable by URL.

Default: false
Declared in: resources/garage

resource.garage.request.ensureKeys Link copied!

Type: 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.

Default: { }
Declared in: resources/garage

resource.garage.request.ensureKeys.<name>.ensureAccess Link copied!

Type: 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.

Default: [ ]
Declared in: resources/garage

resource.garage.request.ensureKeys.<name>.ensureAccess.<name>.owner Link copied!

Type: boolean

Grant this key owner permission on the bucket (manage the bucket itself, not just its objects).

Default: false
Declared in: resources/garage

resource.garage.request.ensureKeys.<name>.ensureAccess.<name>.read Link copied!

Type: boolean

Grant this key permission to read objects from the bucket.

Default: false
Declared in: resources/garage

resource.garage.request.ensureKeys.<name>.ensureAccess.<name>.write Link copied!

Type: boolean

Grant this key permission to write objects to the bucket.

Default: false
Declared in: resources/garage

resource.garage.request.ensureKeys.<name>.kvName Link copied!

Type: string

OpenBao KV instance stem the key's credentials publish under (<kvName>-s3). Defaults to the key name; not tenant-prefixed.

Default: "‹name›"
Declared in: resources/garage

resource.garage.request.ensureKeys.<name>.s3AccessKeyFile Link copied!

Type: null or absolute path

Path 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.

Default: null
Declared in: resources/garage

resource.garage.request.ensureKeys.<name>.s3SecretKeyFile Link copied!

Type: null or absolute path

Path to a file containing the S3 secret access key paired with s3AccessKeyFile. Null for the tf provisioner (see s3AccessKeyFile).

Default: null
Declared in: resources/garage

resource.garage.request.nixos-configuration Link copied!

Type: function that evaluates to a(n) unspecified value

The NixOS configuration module to include.

Declared in: resources/garage

resource.generateFiles Link copied!

Type: submodule

Declarative generation of an application's secret files, via the generateFiles contract.

Declared in: resources

resource.generateFiles.request Link copied!

Type: submodule

Options a component sets to request this resource.

Declared in: resources

resource.generateFiles.request.instances Link copied!

Type: 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.

Default: { }

resource.generateFiles.request.instances.<name>.dependencies Link copied!

Type: list of string

Names of other instances whose outputs are made available under $in/<name>/.

Default: [ ]

resource.generateFiles.request.instances.<name>.files Link copied!

Type: attribute set of (submodule)

Files to generate; keys are file names the script must write under $out/.

resource.generateFiles.request.instances.<name>.files.<name>.group Link copied!

Type: string

Unix group that must own the generated file.

Default: "root"

resource.generateFiles.request.instances.<name>.files.<name>.mode Link copied!

Type: string

File permissions as an octal string.

Default: "0400"

resource.generateFiles.request.instances.<name>.files.<name>.owner Link copied!

Type: string

Unix user that must own the generated file.

Default: "root"

resource.generateFiles.request.instances.<name>.files.<name>.secret Link copied!

Type: boolean

Whether the file contains sensitive data.

Default: true

resource.generateFiles.request.instances.<name>.independent Link copied!

Type: boolean

Whether 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.

Default: false

resource.generateFiles.request.instances.<name>.runtimeInputs Link copied!

Type: list of package

Packages available in PATH during script execution.

Default: [ ]

resource.generateFiles.request.instances.<name>.script Link copied!

Type: string

Shell script writing each declared file to $out/<name>. Dependency outputs are available under $in/<dep>/.

resource.ldap Link copied!

Type: submodule

LDAP directory access for an application, fulfilled by an lldap-backed provider of the nixpkgs ldap contract.

Declared in: resources

resource.ldap.request Link copied!

Type: submodule

Options a component sets to request this resource.

Declared in: resources

resource.ldap.request.consumerName Link copied!

Type: string

Unique consumer name for this app (analog of oidc's clientID), used as the contracts.ldap.want.<consumerName> key.

Declared in: resources/ldap

resource.ldap.request.enable Link copied!

Type: boolean

Whether to enable LDAP directory access for the application.

Default: false
Example: true
Declared in: resources/ldap

resource.ldap.request.group Link copied!

Type: string

LDAP group the application requires. The provider creates this group. Carried verbatim by the nixpkgs ldap contract request.

Declared in: resources/ldap

resource.ldap.request.nixos-configuration Link copied!

Type: function that evaluates to a(n) unspecified value

NixOS 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.

Declared in: resources/ldap

resource.netbox Link copied!

Type: submodule

NetBox IPAM coordinates for an application, fulfilled by either a self-hosted NetBox node or an external instance, through the local netbox contract.

Declared in: resources

resource.netbox.request Link copied!

Type: submodule

Options a component sets to request this resource.

Declared in: resources

resource.netbox.request.consumerName Link copied!

Type: string

Unique consumer name for this app (analog of ldap's/redis's consumerName), used as the contracts.netbox.want.<consumerName> key.

Declared in: resources/netbox

resource.netbox.request.enable Link copied!

Type: boolean

Whether to enable NetBox IPAM coordinates on this application's host.

Default: false
Example: true
Declared in: resources/netbox

resource.netbox.request.nixos-configuration Link copied!

Type: function that evaluates to a(n) unspecified value

NixOS 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.

Declared in: resources/netbox

resource.network Link copied!

Type: submodule

Networking info.

Declared in: resources

resource.network.request Link copied!

Type: submodule

Options a component sets to request this resource.

Declared in: resources

resource.nixos-module Link copied!

Type: submodule

A NixOS configuration module to include as-is.

Declared in: resources

resource.nixos-module.request Link copied!

Type: submodule

Options a component sets to request this resource.

Declared in: resources

resource.nixos-module.request.module Link copied!

Type: unspecified value

The NixOS configuration module to include.

resource.oidc Link copied!

Type: submodule

Single sign-on (OIDC) for an application, fulfilled by an authelia-backed provider of the nixpkgs oidc contract.

Declared in: resources

resource.oidc.request Link copied!

Type: submodule

Options a component sets to request this resource.

Declared in: resources

resource.oidc.request.authorizationPolicy Link copied!

Type: string

Authelia authorization policy applied to the client (one_factor, two_factor, or a named policy).

Default: "two_factor"
Declared in: resources/oidc

resource.oidc.request.clientID Link copied!

Type: null or string

Client 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).

Default: null
Declared in: resources/oidc

resource.oidc.request.enable Link copied!

Type: boolean

Whether to enable an OIDC single-sign-on client for the application.

Default: false
Example: true
Declared in: resources/oidc

resource.oidc.request.forwardAuth Link copied!

Type: 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).

Default: null
Declared in: resources/oidc

resource.oidc.request.forwardAuth.adminUI Link copied!

Type: boolean

Whether 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.

Default: true
Declared in: resources/oidc

resource.oidc.request.forwardAuth.allowedGroups Link copied!

Type: list of string

Restrict access to members of these authelia groups. Empty (the default) allows any authenticated user (subject to authorizationPolicy).

Default: [ ]
Declared in: resources/oidc

resource.oidc.request.forwardAuth.authorizationPolicy Link copied!

Type: string

Authelia authorization policy for this domain (one_factor suffices for any authenticated user; two_factor for MFA).

Default: "one_factor"
Declared in: resources/oidc

resource.oidc.request.forwardAuth.domain Link copied!

Type: null or string

Public 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.

Default: null
Declared in: resources/oidc

resource.oidc.request.forwardAuth.enable Link copied!

Type: boolean

Whether to enable forward-auth protection for this UI vhost.

Default: false
Example: true
Declared in: resources/oidc

resource.oidc.request.forwardAuth.nixos-configuration Link copied!

Type: function that evaluates to a(n) unspecified value

NixOS 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.

Declared in: resources/oidc

resource.oidc.request.forwardAuth.proxyWebsockets Link copied!

Type: boolean

Pass 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.

Default: false
Declared in: resources/oidc

resource.oidc.request.forwardAuth.subdomain Link copied!

Type: null or string

The 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.

Default: null
Declared in: resources/oidc

resource.oidc.request.forwardAuth.upstream Link copied!

Type: string

Proxy target nginx forwards to once authenticated (e.g. 127.0.0.1:3909).

Declared in: resources/oidc

resource.oidc.request.forwardAuth.upstreamAuthorizationInclude Link copied!

Type: null or string

nginx 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.

Default: null
Declared in: resources/oidc

resource.oidc.request.jwtAccessTokens Link copied!

Type: boolean

Issue 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".

Default: false
Declared in: resources/oidc

resource.oidc.request.nixos-configuration Link copied!

Type: function that evaluates to a(n) unspecified value

NixOS configuration module merged onto the application node, so the application can read back its fulfilled contract result via config.contracts.oidc.results.<app>.<instance>.

Declared in: resources/oidc

resource.oidc.request.public Link copied!

Type: boolean

Register 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.

Default: false
Declared in: resources/oidc

resource.oidc.request.redirectURI Link copied!

Type: null or string

Primary 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).

Default: null
Declared in: resources/oidc

resource.oidc.request.redirectURIs Link copied!

Type: list of string

Extra 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.

Default: [ ]
Declared in: resources/oidc

resource.oidc.request.scopes Link copied!

Type: list of string

OIDC scopes the client may request. Defaults to the standard OpenID Connect profile scopes.

Default: [ "openid" "profile" "email" ]
Declared in: resources/oidc

resource.otel Link copied!

Type: submodule

OpenTelemetry 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.

Declared in: resources

resource.otel.request Link copied!

Type: submodule

Options a component sets to request this resource.

Declared in: resources

resource.otel.request.enable Link copied!

Type: boolean

Whether to enable emitting OpenTelemetry signals from this application to the configured collector.

Default: false
Example: true
Declared in: resources/otel

resource.otel.request.nixos-configuration Link copied!

Type: function that evaluates to a(n) unspecified value

Function endpoint -> nixos-module returning the per-service OTel wiring for this application.

Declared in: resources/otel

resource.postgresql Link copied!

Type: submodule

PostgreSQL database access for an application, fulfilled by a postgres-backed provider of the postgresql contract on a dedicated database node.

Declared in: resources

resource.postgresql.request Link copied!

Type: submodule

Options a component sets to request this resource.

Declared in: resources

resource.postgresql.request.bootstrapSQL Link copied!

Type: 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.

Default: ""

resource.postgresql.request.consumerName Link copied!

Type: string

Unique consumer name for this app (analog of oidc's clientID), used as the contracts.postgresql.want.<consumerName> key.

resource.postgresql.request.credentialMode Link copied!

Type: one of "rotating", "dynamic"

How the central OpenBao database engine issues this consumer's credential:

  • rotating (default): a fixed-name database/static-roles/<role> whose password the engine rotates on rotation_period; the consumer reads database/static-creds/<role> and the login name never changes. Required wherever a consumer pins a fixed database user.

  • dynamic: a database/roles/<role> minting a short-lived role with a random per-lease username on each read of database/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.

Default: "rotating"

resource.postgresql.request.database Link copied!

Type: string

PostgreSQL database the application requires; the provider creates it. Carried verbatim by the postgresql contract request.

resource.postgresql.request.dynamicOwnerRole Link copied!

Type: string

Persistent 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.

Default: ""

resource.postgresql.request.dynamicRoleGrants Link copied!

Type: list of string

Existing 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.

Default: [ ]

resource.postgresql.request.enable Link copied!

Type: boolean

Whether to enable PostgreSQL database access for the application.

Default: false
Example: true

resource.postgresql.request.nixos-configuration Link copied!

Type: function that evaluates to a(n) unspecified value

NixOS configuration module merged onto the application node, fed the cross-node-resolved contract result so the application can configure its database client.

resource.postgresql.request.passwordFileMode Link copied!

Type: string

Mode 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.

Default: "0640"

resource.postgresql.request.passwordFileOwner Link copied!

Type: string

Owner 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.

Default: "root"

resource.postgresql.request.reloadUnits Link copied!

Type: list of string

Systemd 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.

Default: [ ]

resource.postgresql.request.username Link copied!

Type: string

PostgreSQL role the application connects as. Defaults to the consumerName. Carried by the postgresql contract request.

Default: config.consumerName

resource.redis Link copied!

Type: submodule

Redis-compatible cache access for an application, fulfilled by an external provider (shared valkey node, OpenBao-brokered per-namespace credentials) of the nixpkgs redis contract.

Declared in: resources

resource.redis.request Link copied!

Type: submodule

Options a component sets to request this resource.

Declared in: resources

resource.redis.request.consumerName Link copied!

Type: string

Unique consumer name for this app (analog of ldap's consumerName), used as the contracts.redis.want.<consumerName> key.

Declared in: resources/redis

resource.redis.request.gateUnits Link copied!

Type: list of string

Units 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.

Default: [ ]
Declared in: resources/redis

resource.redis.request.namespace Link copied!

Type: string

The 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.

Declared in: resources/redis

resource.redis.request.nixos-configuration Link copied!

Type: function that evaluates to a(n) unspecified value

NixOS 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.

Declared in: resources/redis

resource.secrets Link copied!

Type: submodule

Secrets provisioning for an application, via the fileSecrets contract.

Declared in: resources

resource.secrets.request Link copied!

Type: submodule

Options a component sets to request this resource.

Declared in: resources

resource.secrets.request.secrets Link copied!

Type: 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.

Default: { }
Declared in: resources/secrets

resource.secrets.request.secrets.<name>.file Link copied!

Type: null or absolute path

Encrypted .age source. Defaults to ./<name>.age for the agenix provider.

Default: null
Declared in: resources/secrets

resource.secrets.request.secrets.<name>.group Link copied!

Type: string

Linux group that must own the secret file. Defaults to the owner's primary group, as agenix does.

Default: owner
Declared in: resources/secrets

resource.secrets.request.secrets.<name>.mode Link copied!

Type: string

Mode the secret file must have.

Default: "0400"
Declared in: resources/secrets

resource.secrets.request.secrets.<name>.owner Link copied!

Type: string

Linux user that must own the secret file.

Declared in: resources/secrets

resource.smtp Link copied!

Type: submodule

Outbound SMTP mail submission for an application, fulfilled by a maddy-backed (or external) provider of the nixpkgs smtp contract.

Declared in: resources

resource.smtp.request Link copied!

Type: submodule

Options a component sets to request this resource.

Declared in: resources

resource.smtp.request.enable Link copied!

Type: boolean

Whether to enable outbound SMTP mail submission for the application.

Default: false
Example: true
Declared in: resources/smtp

resource.smtp.request.nixos-configuration Link copied!

Type: function that evaluates to a(n) unspecified value

NixOS configuration module merged onto the application node, which reads its fulfilled result back from config.contracts.smtp.results.<app>.default.

Declared in: resources/smtp

resource.smtp.request.sender Link copied!

Type: string

Email address used as the sender (From header), carried verbatim by the nixpkgs smtp contract request.

Example: "noreply@example.com"
Declared in: resources/smtp

resource.spiffe Link copied!

Type: submodule

SPIFFE workload identity (spire-agent) provisioning for an application's host.

Declared in: resources

resource.spiffe.request Link copied!

Type: submodule

Options a component sets to request this resource.

Declared in: resources

resource.spiffe.request.enable Link copied!

Type: boolean

Whether to enable a spire-agent on this host for SPIFFE workload identity.

Default: false
Example: true
Declared in: resources/spiffe

resource.ssl Link copied!

Type: submodule

TLS certificate provisioning for an application's vhosts.

Declared in: resources

resource.ssl.request Link copied!

Type: submodule

Options a component sets to request this resource.

Declared in: resources

resource.ssl.request.domains Link copied!

Type: list of string

Domains this application terminates TLS for (its own vhosts).

Default: [ ]
Declared in: resources/ssl

resource.ssl.request.trustDomains Link copied!

Type: list of string

Domains served by another node this node must trust as a client (e.g. the garage bucket endpoints). Drives cross-node trust baking.

Default: [ ]
Declared in: resources/ssl