fleet.settings
62 options
fleet.settings.acmeEmail
Email for ACME account registration (internal CA and public Let’s Encrypt). null ⇒ no ACME issuance; required (asserted) by infra.ingress and by host-cert when an internal CA is configured.
Type: null or string
Default:
null
Example:
"admin@example.com"
Declared by: nix/fleet/settings.nix
fleet.settings.adminSshKeys
SSH public keys authorized for the built-in operator accounts (sysadmin / colmena / dev / root) on every fleet host. REQUIRED BY THE BASE LAYER — every NixOS fleet host creates these accounts, so building any host toplevel forces this option.
Type: list of string
Default:
[ ]
Example:
[
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIREPLACEMEexamplekeyexamplekeyexample operator@example.com"
]
Declared by: nix/fleet/settings.nix
fleet.settings.auth.oidcBaseUrl
Base URL of the fleet’s OIDC identity provider (e.g. Authentik). Required by modules that enable OIDC login (e.g. infra.observability.stack.oidc).
Type: null or string
Default:
null
Example:
"https://auth.example.dev"
Declared by: nix/fleet/settings.nix
fleet.settings.auth.outpostUrl
Base URL of the identity provider’s forward-auth outpost (e.g. the Authentik embedded outpost). null ⇒ no forward_auth injection by default.
Type: null or string
Default:
null
Example:
"http://192.0.2.13:9000"
Declared by: nix/fleet/settings.nix
fleet.settings.backend.bucket
Tofu S3 state bucket (type = s3). Shared estate substrate (ADR-097) — fleet separation is the state KEY prefix, not the bucket. When set, mkFleet’s backend argument may be omitted.
Type: null or string
Default:
null
Example:
"acme-tofu"
Declared by: nix/fleet/settings.nix
fleet.settings.backend.perStack
Per-stack backend overrides, keyed by stack SLUG (the dot-path with
“.” replaced by “-”, e.g. “platform.core” -> “platform-core”). Each
value is merged over the fleet-wide backend, so an override may set
only what differs (usually just type).
The backend block is already emitted per stack, so this costs nothing structurally. Two uses it exists for:
- Keep working when the shared bucket is unreachable — provision a
NEW stack on
type = "local"while every existing stack stays pointed at the remote it already lives in. - Break a bootstrap cycle — a stack that provisions the fleet’s own object storage should not keep its state inside that storage.
DELIBERATE ACT, NOT A FALLBACK. Pointing an EXISTING stack at an empty backend makes tofu read its entire inventory as “not created yet”, and an apply from there would recreate the fleet. Override a stack that has no remote state yet, or migrate the state first and record that you did.
Type: attribute set of attribute set of raw value
Default:
{ }
Example:
{ "platform-mcp" = { type = "local"; }; }
Declared by: nix/fleet/settings.nix
fleet.settings.backend.pg.connStrSopsPath
SOPS path to the libpq connection string, exported as PG_CONN_STR at run time.
The connection string is DELIBERATELY not emitted into the backend block: config.tf.json is built by Nix and therefore lands in /nix/store, which is world-readable. A password baked in there is readable by every user on every machine that builds the stack, and no amount of file permissions afterwards takes it back. OpenTofu reads PG_CONN_STR from the environment for exactly this reason.
Type: null or string
Default:
null
Example:
"[\"dbs\"][\"tofu-db\"][\"tofu\"][\"conn_str\"]"
Declared by: nix/fleet/settings.nix
fleet.settings.backend.pg.schemaPrefix
Schema-name prefix for the pg backend. Each stack gets its own
schema (<prefix><slug>), which is how stacks stay isolated in one
database — the equivalent of the S3 key prefix.
Type: string
Default:
"tf_"
Declared by: nix/fleet/settings.nix
fleet.settings.backend.region
AWS region of the state bucket (type = s3).
Type: string
Default:
"us-east-1"
Declared by: nix/fleet/settings.nix
fleet.settings.backend.s3.credsSopsPath
SOPS path to the S3 state-backend credentials — a mapping with
access_key_id, secret_access_key, and optionally region —
exported as AWS_* at run time. Defaults to ["integrations"]["aws"].
This is a setting rather than a constant because the AWS name is a site opinion, not a fact about the backend: a fleet whose state lives in Garage or MinIO files those keys under its own tree. When the CLI guessed, the extract simply returned non-zero and the credentials silently stayed unset — surfacing much later as tofu reporting no valid credential sources, with nothing pointing at the real cause.
Type: null or string
Default:
null
Example:
"[\"integrations\"][\"tofu\"][\"garage\"]"
Declared by: nix/fleet/settings.nix
fleet.settings.backend.type
Tofu state backend kind. “local” keeps terraform.tfstate inside each stack’s working dir (.tf/use_lockfile silently ineffective, which is unsafe wherever more than one operator or agent applies.
Type: one of "s3", "local", "pg"
Default:
"s3"
Declared by: nix/fleet/settings.nix
fleet.settings.build.machines
Remote build machines available to the fleet. Listing one here does NOT make any host use it: a host opts in via infra.build.remote.enable, because offloading means shipping that host an SSH private key.
Type: list of (submodule)
Default:
[ ]
Declared by: nix/fleet/settings.nix
fleet.settings.build.machines.*.hostName
Address the offloading host connects to over SSH. An in-fleet IP, not a public name.
Type: string
Default: none (required when its feature is enabled)
Example:
"192.0.2.101"
Declared by: nix/fleet/settings.nix
fleet.settings.build.machines.*.maxJobs
Jobs the offloading host may run on this machine concurrently.
Type: signed integer
Default:
4
Declared by: nix/fleet/settings.nix
fleet.settings.build.machines.*.publicHostKey
Base64 of the machine’s SSH host key line, produced by base64 -w0 < /etc/ssh/ssh_host_ed25519_key.pub. Leaving this null makes the offload depend on the client’s known_hosts, which nothing in the fleet populates — the first build then hangs on host-key verification rather than failing.
Type: null or string
Default:
null
Example:
"c3NoLWVkMjU1MTkgQUFBQUV4YW1wbGVFeGFtcGxlRXhhbXBsZQ=="
Declared by: nix/fleet/settings.nix
fleet.settings.build.machines.*.speedFactor
Relative speed weight. Only meaningful when more than one machine can serve the same system.
Type: signed integer
Default:
1
Declared by: nix/fleet/settings.nix
fleet.settings.build.machines.*.sshUser
User to connect as. Must appear in the builder’s infra.build.builder.trustedUsers, or its daemon refuses the store operations an offloaded build needs.
Type: string
Default:
"root"
Declared by: nix/fleet/settings.nix
fleet.settings.build.machines.*.supportedFeatures
Features this machine advertises. A derivation requiring a feature absent here is never sent to it. Do not advertise kvm on an unprivileged LXC builder.
Type: list of string
Default:
[
"nixos-test"
"benchmark"
"big-parallel"
]
Example:
[
"nixos-test"
"benchmark"
"big-parallel"
"kvm"
]
Declared by: nix/fleet/settings.nix
fleet.settings.build.machines.*.systems
Platforms this machine will build for.
Type: list of string
Default:
[
"x86_64-linux"
]
Declared by: nix/fleet/settings.nix
fleet.settings.cache.substituters
In-fleet nix binary caches trusted by fleet hosts (harmonia/attic/…).
Type: list of string
Default:
[ ]
Example:
[
"http://192.0.2.101:5000"
]
Declared by: nix/fleet/settings.nix
fleet.settings.cache.trustedPublicKeys
Public keys matching substituters.
Type: list of string
Default:
[ ]
Example:
[
"cache.example.dev:MExampleExampleExampleExampleExampleExampleExa="
]
Declared by: nix/fleet/settings.nix
fleet.settings.cli.extensionsDir
Repo-relative directory of consumer CLI extension modules (ADR-095 COMMANDS/ATTACH files).
Type: string
Default:
"cli-ext"
Declared by: nix/fleet/settings.nix
fleet.settings.domain.base
Public base domain (external DNS zone). null ⇒ no public-name features; required (asserted) by modules that mint public names: caddy devDomain vhosts, coredns split-horizon zone, acme-dns, hydra/grafana mail senders, pve-installer-answers.
Type: null or string
Default:
null
Example:
"example.dev"
Declared by: nix/fleet/settings.nix
fleet.settings.domain.internal
Internal search/zone domain served by fleet DNS. null ⇒ no internal-FQDN features; required (asserted) by caddy, coredns, host-cert (internal CA), step-ca, hydra, rabbitmq management vhosts.
Type: null or string
Default:
null
Example:
"example.pve"
Declared by: nix/fleet/settings.nix
fleet.settings.domain.tailnetSuffix
MagicDNS base domain of the fleet tailnet (headscale base_domain). null ⇒ no tailnet serveUI names; required (asserted) when infra.network.tailnet.serveUI entries exist.
Type: null or string
Default:
null
Example:
"hs.example.dev"
Declared by: nix/fleet/settings.nix
fleet.settings.githubAccessTokens
Provision a GitHub machine-user token (SOPS integrations/github/machine_user_token) into nix access-tokens on every host — needed when flake inputs fetch private GitHub repos.
Type: boolean
Default:
false
Declared by: nix/fleet/settings.nix
fleet.settings.internalCa.acmeDirectory
ACME directory URL of the internal CA. null ⇒ modules default to public Let’s Encrypt.
Type: null or string
Default:
null
Example:
"https://ca.example.lan:9000/acme/acme/directory"
Declared by: nix/fleet/settings.nix
fleet.settings.internalCa.certFile
Root certificate of the fleet-internal CA (step-ca). Trusted on every host and used as the Caddy ACME root when set.
Type: null or absolute path
Default:
null
Example:
./certs/fleet-root-ca.crt
Declared by: nix/fleet/settings.nix
fleet.settings.mcp.grafanaTokenSopsPath
Sops key path of the read-only Grafana service-account token used by fleet mcp config.
Type: null or string
Default:
null
Example:
"services/grafana/mcp_token"
Declared by: nix/fleet/settings.nix
fleet.settings.name
Short fleet/org slug. Used for branding and resource-name prefixes (attic cache name, hydra project, step-ca CA name, pgweb bookmarks).
Type: string
Default:
"fleet"
Example:
"acme"
Declared by: nix/fleet/settings.nix
fleet.settings.network.lanCidr
Fleet LAN CIDR (mirrors fleet.network.internal_cidr for module convenience). null ⇒ modules that default network ACLs from it (e.g. infra.data.postgresql.allowedSubnets) default to an empty list instead.
Type: null or string
Default:
null
Example:
"192.0.2.0/24"
Declared by: nix/fleet/settings.nix
fleet.settings.network.mgmtCidr
Hypervisor/management network CIDR, if separate from the LAN.
Type: null or string
Default:
null
Example:
"198.51.100.0/24"
Declared by: nix/fleet/settings.nix
fleet.settings.network.staticWanCidrs
VM name → WAN-side CIDR for legacy name-dispatch VMs whose
fleet entry keeps ip = "" (so Colmena resolves internal_ip)
but still needs a pinned WAN address on eth0. Consumed by the
headscale-router branch of nix/lib/tf/proxmox.nix mkVm.
{} ⇒ no pins; the emitter throws if a VM hits that branch
without an entry here.
Type: attribute set of string
Default:
{ }
Example:
{
headscale-router = "198.51.100.7/24";
}
Declared by: nix/fleet/settings.nix
fleet.settings.network.upstreamResolvers
Upstream DNS servers the fleet DNS forwards non-fleet queries to (e.g. the LAN gateway or public resolvers).
Type: list of string
Default:
[
"1.1.1.1"
"9.9.9.9"
]
Example:
[
"198.51.100.1"
"1.1.1.1"
]
Declared by: nix/fleet/settings.nix
fleet.settings.network.wanIp
Public WAN IP of the fleet edge (stable pointer for public DNS pins). null ⇒ no public-edge features; required (asserted) by infra.pki.acmeDns (glue/apex A records).
Type: null or string
Default:
null
Example:
"203.0.113.10"
Declared by: nix/fleet/settings.nix
fleet.settings.observability.cpuAlertExcludeRegex
Prometheus instance-label regex excluded from the fleet-wide high-CPU alert (hosts that legitimately run hot). “” ⇒ no exclusions.
Type: string
Default:
""
Example:
"chain-node-.*|miner-.*"
Declared by: nix/fleet/settings.nix
fleet.settings.observability.grafanaDomain
Domain Grafana serves on (server.domain / root_url). null ⇒ no observability stack; required (asserted) when infra.observability.stack is enabled.
Type: null or string
Default:
null
Example:
"grafana.example.pve"
Declared by: nix/fleet/settings.nix
fleet.settings.observability.lokiPushUrl
Loki push endpoint every fleet host’s Alloy agent ships logs to (usually the grafana-stack host). null (together with prometheusRemoteWriteUrl = null) ⇒ Alloy stays disabled by default fleet-wide; required (asserted) when infra.observability.alloy is enabled.
Type: null or string
Default:
null
Example:
"http://192.0.2.4:3100/loki/api/v1/push"
Declared by: nix/fleet/settings.nix
fleet.settings.observability.lokiS3Endpoint
S3-compatible endpoint (e.g. in-fleet Garage) Loki writes chunks and index to. null ⇒ no Loki chunk store; required (asserted) when infra.observability.stack is enabled.
Type: null or string
Default:
null
Example:
"http://s3.example.lan:3900"
Declared by: nix/fleet/settings.nix
fleet.settings.observability.prometheusRemoteWriteUrl
Prometheus remote-write endpoint every fleet host’s Alloy agent ships metrics to (usually the grafana-stack host). null (together with lokiPushUrl = null) ⇒ Alloy stays disabled by default fleet-wide; required (asserted) when infra.observability.alloy is enabled.
Type: null or string
Default:
null
Example:
"http://192.0.2.4:9090/api/v1/write"
Declared by: nix/fleet/settings.nix
fleet.settings.observability.pveScrapeTargets
Proxmox VE hypervisors scraped via prometheus-pve-exporter: instance label → node API address. {} ⇒ no PVE targets.
Type: attribute set of string
Default:
{ }
Example:
{
pve1 = "198.51.100.1";
pve2 = "198.51.100.2";
}
Declared by: nix/fleet/settings.nix
fleet.settings.observability.tempoUrl
HTTP URL of the fleet’s Tempo trace store. null ⇒ no Tempo datasource is provisioned in Grafana.
Type: null or string
Default:
null
Example:
"http://192.0.2.9:3200"
Declared by: nix/fleet/settings.nix
fleet.settings.opsEmail
Operations contact. null ⇒ the CLI derives ops@<domain.base>.
Type: null or string
Default:
null
Example:
"ops@example.dev"
Declared by: nix/fleet/settings.nix
fleet.settings.pki.acmeDnsApiBase
acme-dns registration API on the fleet’s DNS edge. Consumed by fleet pki (required, asserted there).
Type: null or string
Default:
null
Example:
"http://192.0.2.100:8081"
Declared by: nix/fleet/settings.nix
fleet.settings.providers.proxmox.defaultDatastore
PVE storage used wherever a compute entry does not name one:
VM root/EFI/data disks, the cloud-init drive, clone targets,
and the default of fleet.compute.
Type: string
Default:
"local-storage"
Example:
"local-lvm"
Declared by: nix/fleet/settings.nix
fleet.settings.providers.proxmox.hostTweaks
Hypervisor-side conveniences the community tools/pve/*.sh scripts used to apply by hand, now driven by ansible (roles proxmox/base and proxmox/pve) from these values. fleet ansible inventory exports them as the fleet_pve_host_tweaks variable.
Type: submodule
Default:
{ }
Declared by: nix/fleet/settings.nix
fleet.settings.providers.proxmox.hostTweaks.diskHealth
Install smartmontools + nvme-cli and run a weekly SMART short self-test on every disk. Legacy disk-health.sh.
Type: boolean
Default:
false
Declared by: nix/fleet/settings.nix
fleet.settings.providers.proxmox.hostTweaks.ipTag
Run the IP-Tag service that keeps a <ip> tag on every guest in the PVE UI. Legacy add-iptag.sh. PVE nodes only.
Type: boolean
Default:
false
Declared by: nix/fleet/settings.nix
fleet.settings.providers.proxmox.hostTweaks.kernelClean
Purge old PVE kernels on each ansible run, keeping the running one and the newest. Legacy kernel-clean.sh.
Type: boolean
Default:
false
Declared by: nix/fleet/settings.nix
fleet.settings.providers.proxmox.hostTweaks.kernelPin
Pin the node to this kernel version with proxmox-boot-tool (null = unpinned). Legacy kernel-pin.sh.
Type: null or string
Default:
null
Example:
"6.14.8-2-pve"
Declared by: nix/fleet/settings.nix
fleet.settings.providers.proxmox.hostTweaks.microcode
Install the CPU microcode package for the node’s vendor (intel-microcode / amd64-microcode; enables non-free-firmware). Legacy microcode.sh.
Type: boolean
Default:
false
Declared by: nix/fleet/settings.nix
fleet.settings.providers.proxmox.hostTweaks.monitorAll
Run the ping-instances service that restarts guests that stop answering. Legacy monitor-all.sh. PVE nodes only.
Type: boolean
Default:
false
Declared by: nix/fleet/settings.nix
fleet.settings.providers.proxmox.hostTweaks.nicOffloadingFix
Disable NIC offloading (ethtool) on Intel e1000/e1000e adapters at boot to work around hangs. Legacy nic-offloading-fix.sh.
Type: boolean
Default:
false
Declared by: nix/fleet/settings.nix
fleet.settings.providers.proxmox.hostTweaks.scalingGovernor
CPU frequency scaling governor applied at boot (null = leave the kernel default). Legacy scaling-governor.sh.
Type: null or one of "performance", "powersave", "ondemand", "conservative", "schedutil"
Default:
null
Declared by: nix/fleet/settings.nix
fleet.settings.providers.proxmox.lxcTemplateDatastore
PVE storage (content type vztmpl) that holds the NixOS LXC
template nixos-lxc-template-x86_64.tar.xz every NixOS container
is created from. LEGACY DEFAULT “nix-store” (a cluster-wide NFS
SR registered by the ansible proxmox/pve nfs-storage task); a
single-node fleet uploads the template to “local” instead via a
kind = "file" resource with source = “nixos-lxc-image”.
Type: string
Default:
"nix-store"
Example:
"local"
Declared by: nix/fleet/settings.nix
fleet.settings.providers.proxmox.singleBridgeInstances
Proxmox provider-instance names (the <inst> in a fleet
entry’s provider_instance = "proxmox.<inst>") whose PVE
nodes carry the internal LAN directly on vmbr0 (single-NIC
nodes, e.g. PVE-on-XCP-ng VMs). Containers on these
instances default their internal bridge to vmbr0 instead
of vmbr1; a per-host internal_bridge override still wins.
Type: list of string
Default:
[ ]
Example:
[
"colo"
]
Declared by: nix/fleet/settings.nix
fleet.settings.pveInstall
Unattended-PVE-install constants for fleet pve install (serve_host, iso_sr_uuid, iso_sr_name, main_sr_name, network_name, installer_iso, presets). Freeform: substrate constants whose long-term home is the typed provider nodes (ADR-096); keys pass to the catalog verbatim.
Type: attribute set of raw value
Default:
{ }
Example:
{
iso_sr_name = "NFS ISO Library";
serve_host = "192.0.2.91";
}
Declared by: nix/fleet/settings.nix
fleet.settings.sopsFiles
Which SOPS file owns which TOP-LEVEL key tree, for fleets that split
their store by resource group. Keys are tree names (“integrations”,
“services”, “dbs”, …); values are repo-relative paths. Anything not
listed falls back to sopsSecretsFile.
Splitting a store and leaving the original populated is the trap this exists to close: a consumer aimed at the old file ERRORS when the key is gone, but returns a diverged old value when a stale duplicate survives — and that case never fails. Declaring routes once means a consumer cannot hold a private, wrong opinion about where a tree lives.
Type: attribute set of string
Default:
{ }
Example:
{ integrations = "nix/secrets/integrations.yaml"; }
Declared by: nix/fleet/settings.nix
fleet.settings.sopsSecretsFile
Repo-relative path of the default sops file the CLI’s secrets commands operate on.
Type: string
Default:
"nix/secrets/secrets.yaml"
Declared by: nix/fleet/settings.nix
fleet.settings.tailnet.controlUrl
Login/control server URL of the fleet tailnet (headscale). Used as –login-server by infra.network.tailnet.fleetNode. null ⇒ fleetNode emits no –login-server flag.
Type: null or string
Default:
null
Example:
"https://vpn.example.dev"
Declared by: nix/fleet/settings.nix
fleet.settings.tailnet.preauthKeyUrl
HTTPS endpoint returning a tailnet preauth key as raw text (e.g. a source-IP-gated headscale vhost). Used by infra.network.tailnet.fleetNode to auto-fetch enrollment keys. null ⇒ hosts fall back to a SOPS-held auth key.
Type: null or string
Default:
null
Example:
"https://vpn.example.dev/internal/preauth/fleet-bot"
Declared by: nix/fleet/settings.nix
fleet.settings.tfSopsFile
Repo-relative SOPS file the TERRANIX layer reads at tofu apply time
(the data.sops_file.secrets source). These are provider credentials —
integrations.* — which need not live in the same file NixOS hosts
default to. A fleet that splits its SOPS store per resource group must
point this at whichever file holds the integrations tree, or every
tofu plan fails with “The given key does not identify an element in
this collection value”.
Type: string
Default:
"nix/secrets/secrets.yaml"
Example:
"nix/secrets/integrations.yaml"
Declared by: nix/fleet/settings.nix