fleetkit
A parameterized NixOS fleet framework: fleet manifest schema, terranix
emitters (Proxmox VE, Xen Orchestra, Cloudflare, Grafana), colmena
integration via lib.mkFleet, an operator CLI (fleet), and a generic
infra module tree.
Every site-specific value lives behind the options documented here —
fleet.* (the manifest schema: compute, network, settings) and
infra.* (the NixOS service modules). Nothing is baked in.
Start from the template:
$ nix flake init -t github:alexanderjerome/fleetkit
$ fleet secrets init
The Fleet manifest and Infra modules references are generated from the module declarations on every build — they cannot drift from the code.
Compute surface and networking modes
Every knob the community-scripts LXC/VM wizard asked for has a home in
fleet.compute.<name> (see the fleet.compute
reference). This page maps the two.
From the wizard to fleet.compute
community-scripts (build.func / vm-core.func) | fleetkit |
|---|---|
CT_TYPE / var_unprivileged | privileged |
CT_ID / VMID | vm_id |
HN | attribute name / name |
DISK_SIZE, CORE_COUNT, RAM_SIZE | root_disk_gb, cpu_cores, memory_mb (+ swap_mb) |
storage picker (var_container_storage) | root_disk_datastore (default fleet.settings.providers.proxmox.defaultDatastore) |
template storage (var_template_storage) | fleet.settings.providers.proxmox.lxcTemplateDatastore |
BRG / SDN vnet | interfaces[].bridge / interfaces[].vnet (+ sdn-zone/sdn-vnet resources) |
NET dhcp / static / range | interfaces[].ipv4 = "dhcp" / "a.b.c.d/nn" (ranges are not declarative) |
GATE | interfaces[].gateway |
IPV6_METHOD auto/dhcp/static/none/disable | interfaces[].ipv6.method (disable ≡ none) |
MTU, VLAN, MAC | interfaces[].mtu, .vlan, .mac |
NS, SD | dns.servers, dns.domain |
ENABLE_FUSE, ENABLE_NESTING, ENABLE_KEYCTL, ENABLE_MKNOD, ALLOW_MOUNT_FS | features.{fuse,nesting,keyctl,mknod,mount} |
ENABLE_TUN, ENABLE_GPU, Coral, USB serial | devices (+ lxc_extra_conf for hot-plug cgroup rules) |
PROTECT_CT | protection |
TAGS | tags |
var_post_install hook | hook_script (PVE hook), or a NixOS activation script |
CT_TIMEZONE | NixOS time.timeZone in the host’s hostsRegistry entry |
PW, SSH, SSH_AUTHORIZED_KEY | not applicable: NixOS hosts are key-only (fleet.network.sysadmin_ssh_key), root has no password |
APT_CACHER, HTTP_PROXY, INHERIT_HOST_CA | NixOS nix.settings.substituters, networking.proxy, security.pki |
VM MACHINE, BIOS, CPU_TYPE, DISK_CACHE, scsihw, -tablet 0 | vm.machine, vm.bios (+ vm.efi), vm.cpu_type, vm.root_disk.cache, vm.scsi_hardware, vm.tablet |
| VM cloud-init on/off | cloud_init.enable, cloud_init.datastore |
VM cloud image (qm importdisk) | image = "import:<datastore>:import/<file>" with a download resource |
START_VM, -onboot 1 | start_on_create, onboot, startup |
Network modes
network_mode = "declared" is the general form: interfaces lists every
NIC with its bridge or VNet, IPv4 (dhcp, manual, or a CIDR with an
explicit prefix), gateway, IPv6, VLAN, MTU, MAC and firewall flag; entry
i becomes net<i> (LXC: eth<i>).
The fixed shapes (single-internal, single-external, dual,
lxc-router, custom-*) predate it and remain for existing fleets. They
append fleet.network.internal_prefix_len / lan_prefix_len (derived
from the CIDRs, else 24) to the bare internal_ip / ip. New hosts
should use declared; the legacy modes will be deprecated once the
origin fleet has migrated.
Escape hatch
lxc_extra_conf writes raw lines into /etc/pve/lxc/<vmid>.conf inside a
marker block through a terraform_data local-exec over root SSH to the
node (fleet.providers.proxmox.<inst>.cluster.node_addresses). Use it
only for what devices cannot express.
Fleet manifest
The declarative fleet description: what your fleet is. Consumers set these in the modules passed to mkFleet.
fleet.settings— 62 optionsfleet.network— 18 optionsfleet.compute— 154 optionsfleet.providers— 285 optionsfleet.resources— 8 optionsfleet.other— 65 options
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
fleet.network
18 options
fleet.network.dns_domain
Internal search domain. null ⇒ no internal zone: fleet links pin no search domain, provisioned guests get no create-time DNS domain, and infra.network.dhcp (asserted) needs an explicit domain.
Type: null or string
Default:
null
Example:
"example.internal"
Declared by: nix/fleet/network
fleet.network.dns_servers
BOOTSTRAP/CREATE-TIME resolver list only: written into every VM’s cloud-init network-config drive and the PVE container/VM dnsConfig at create time (nix/lib/tf/proxmox.nix). Primary is the fleet DNS host (CoreDNS); a public resolver (e.g. 1.1.1.1) as fallback lets a fresh host resolve (nix cache, etc.) before its first Colmena deploy even if fleet DNS is briefly unreachable.
NOTE: this list is deliberately NOT used for the running
systemd-networkd link DNS — see internal_resolvers and INFRA-107.
A public resolver on the same link as the fleet routing domains
causes systemd-resolved’s sticky per-link failover to leak internal
names to public DNS (which may serve a real public zone of the same
name → WAN IP → un-hairpinnable), taking hosts offline.
Type: list of string
Default:
[
"1.1.1.1"
"9.9.9.9"
]
Declared by: nix/fleet/network
fleet.network.gateway
Internal network gateway (typically a dedicated router host on the internal bridge; ADR-021 Phase 1.b). null ⇒ internal-bridge hosts get no default route (isolated lab fleets); set it for any fleet that expects egress.
Type: null or string
Default:
null
Example:
"192.0.2.1"
Declared by: nix/fleet/network
fleet.network.internal_cidr
Internal service network CIDR (vmbr1 bridge). Informational — no framework module consumes it today; consumed by the CLI catalog (ADR-097).
Type: null or string
Default:
null
Example:
"192.0.2.0/24"
Declared by: nix/fleet/network
fleet.network.internal_prefix_len
Prefix length for the internal bridge (vmbr1) network: appended to every bare internal_ip by the legacy network modes and by the fleet-member networkd config. Default: taken from internal_cidr, else 24.
Type: integer between 0 and 32 (both inclusive)
Default:
prefix length of fleet.network.internal_cidr, else 24
Example:
22
Declared by: nix/fleet/network
fleet.network.internal_resolvers
[] (default) ⇒ no fleet DNS: fleet links carry no per-link DNS and hosts fall back to systemd-resolved defaults. Set to your CoreDNS host(s) once fleet DNS exists.
Resolver(s) for the RUNNING systemd-networkd link config on fleet
hosts (nix/modules/infra/base/fleet-member.nix). Must be fleet-DNS-only
(CoreDNS) — never a public resolver. The search_domains zones are
pinned to the link as routing domains, and the internal split-DNS
answers (e.g. vpn.
Type: list of string
Default:
[ ]
Example:
[
"192.0.2.103"
]
Declared by: nix/fleet/network
fleet.network.lan_cidr
LAN CIDR (vmbr0 bridge). Informational — no framework module consumes it today; consumed by the CLI catalog (ADR-097).
Type: null or string
Default:
null
Example:
"198.51.100.0/24"
Declared by: nix/fleet/network
fleet.network.lan_gateway
LAN gateway (UDM router). Used by single-NIC hosts on vmbr0
(network_mode = “single-external”, e.g. landing-page) and by
the dual-NIC + WAN-side branches of router/netgate.
null ⇒ those host shapes get no WAN-side default route; set it
before declaring any vmbr0-facing host.
Type: null or string
Default:
null
Example:
"198.51.100.1"
Declared by: nix/fleet/network
fleet.network.lan_prefix_len
Prefix length for the LAN bridge (vmbr0) network: appended to every bare ip by the single-external / dual / router / netgate paths and by the fleet-member networkd config. Default: taken from lan_cidr, else 24.
Type: integer between 0 and 32 (both inclusive)
Default:
prefix length of fleet.network.lan_cidr, else 24
Example:
24
Declared by: nix/fleet/network
fleet.network.ldap.base_dn
LDAP base DN for user/group searches. null ⇒ no LDAP directory; required (asserted) when infra.auth.sssd is enabled.
Type: null or string
Default:
null
Example:
"dc=ldap,dc=example,dc=com"
Declared by: nix/fleet/network
fleet.network.ldap.group_ou
OU holding group entries, relative to base_dn.
Type: string
Default:
"ou=groups"
Declared by: nix/fleet/network
fleet.network.ldap.ssh_pubkey_attr
LDAP attribute sssd reads for SSH public keys.
Type: string
Default:
"sshPublicKey"
Declared by: nix/fleet/network
fleet.network.ldap.uri
Authentik LDAP outpost URI (used by sssd + Proxmox realm). null ⇒ no LDAP directory; required (asserted) when infra.auth.sssd is enabled.
Type: null or string
Default:
null
Example:
"ldap://auth.example.internal:389"
Declared by: nix/fleet/network
fleet.network.ldap.user_ou
OU holding user entries, relative to base_dn.
Type: string
Default:
"ou=users"
Declared by: nix/fleet/network
fleet.network.ntp_server
null ⇒ no fleet NTP: non-container hosts keep chrony disabled and rely on their own time sources.
Fleet NTP server IP. Every NixOS host’s chrony client (wired
in nix/modules/infra/base/core/default.nix) targets this address. The
host running the chrony server overrides its own
services.chrony.servers to public upstream pools.
Type: null or string
Default:
null
Example:
"192.0.2.101"
Declared by: nix/fleet/network
fleet.network.search_domains
DNS zones pinned as systemd-resolved routing domains on single-NIC fleet links (nix/modules/infra/base/fleet-member.nix), so queries for every fleet-served zone go to fleet DNS — including public zones the fleet answers with split-DNS internal IPs. Defaults to [ dns_domain ]; add the public base domain (and any other fleet-served zones) when fleet DNS serves split-DNS answers for them. (INFRA-107)
Type: list of string
Default:
lib.optional (config.fleet.network.dns_domain != null) config.fleet.network.dns_domain
Example:
[
"example.pve"
"example.dev"
]
Declared by: nix/fleet/network
fleet.network.sysadmin_key_file
Operator-local path to the sysadmin SSH private key. Single source of
truth: the devShell (nix/shell.nix) loads it into ssh-agent; the
terranix ansible emitter (nix/tf/compute/ansible.nix) and the
launcher’s generated inventory both read it as
ansible_ssh_private_key_file. A leading ~ is expanded by each
consumer (Ansible expanduser; the devShell expands it for bash).
The framework exports no environment variable for this. A consumer with a hand-written Ansible inventory that resolves the key from the environment should export it as FLEET_SYSADMIN_KEY_FILE (INFRA-218 — this description previously named SK_SYSADMIN_KEY_FILE, an export that only ever existed in consumer-side shell.nix, never here).
Type: string
Default:
"~/.ssh/sysadmin-key"
Declared by: nix/fleet/network
fleet.network.sysadmin_ssh_key
sysadmin SSH public key — baked into every CT/VM by nix/images/bootstrap.nix and referenced by Colmena. REQUIRED BY THE PROVISIONING LAYER — rendering any provider stack (image bake + create-time key injection) forces this option.
Type: string
Default: none (required when its feature is enabled)
Example:
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIExampleExampleExampleExampleExampleExa sysadmin@example.com"
Declared by: nix/fleet/network
fleet.compute
154 options
fleet.compute
Every LXC/VM across all providers and envs. Entries live in nix/hosts/**/
Type: attribute set of (submodule)
Default:
{ }
Example:
{
app-db = {
env = "platform";
stack = "core";
provider_instance = "proxmox.dev";
kind = "container";
vm_id = 204;
internal_ip = "192.0.2.104";
cpu_cores = 4;
memory_mb = 8192;
tags = [ "postgres" ];
protect = true;
mount_points = [
{ datastore = "local-storage"; path = "/data"; size = "64G"; }
];
};
}
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.ansible_playbook
Override the Ansible playbook the terranix ansible_playbook
emitter chains to this host after provisioning. By convention
the framework playbooks apply (non-NixOS containers →
fleetkit’s ansible/playbooks/developer.yml, VMs tagged
“pve-host” → ansible/playbooks/pve.yml); set this to a path
string (absolute, or relative to the tofu working dir
.tf/
Type: null or string
Default:
null
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.arch
Container CPU architecture (PVE arch, bpg cpu.architecture). Emitted only when not amd64. LXC only.
Type: one of "amd64", "arm64", "armhf", "i386"
Default:
"amd64"
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.bootOrder
XO VMs: explicit boot order (c=disk n=network d=dvd); null derives from tags (transient => dnc). Authored form of what the post-create boot-order hook applies.
Type: null or one of "cnd", "dnc"
Default:
null
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.cloneFrom
If non-null, clone from this source VMID at provision time.
Type: null or signed integer
Default:
null
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.cloud_init
Cloud-init user-data for VM guests (users, write_files, runcmd, hostname, VyOS config commands). Ignored for entries that don’t render cloud-init (e.g. LXC containers).
Type: submodule
Default:
{ }
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.cloud_init.datastore
PVE storage the cloud-init drive is allocated on. null = fleet.settings.providers.proxmox.defaultDatastore.
Type: null or string
Default:
null
Example:
"local"
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.cloud_init.enable
Attach a cloud-init drive and emit the initialization block (hostname, DNS, ip_config, identity). false = no cloud-init at all — appliance images that configure themselves (the legacy CLOUD_INIT=no).
Type: boolean
Default:
true
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.cloud_init.hostname
Override hostname (defaults to fleet.compute key).
Type: string
Default:
""
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.cloud_init.install_nix
If true, append a Determinate Nix install command to cloud-init runcmd.
Type: boolean
Default:
false
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.cloud_init.runcmd
Extra runcmd lines appended after install_nix. YAML quoting is the caller’s responsibility.
Type: list of string
Default:
[ ]
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.cloud_init.users
Local users created by cloud-init’s users: directive.
Type: list of (submodule)
Default:
[ ]
Example:
[ { ref = "alice"; extra_groups = [ "docker" ]; } ]
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.cloud_init.users.*.extra_groups
Linux groups added on this VM (e.g. “docker”). Independent of LDAP groups in fleet.access.users.
Type: list of string
Default:
[ ]
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.cloud_init.users.*.name
Username (inline mode; ignored when ref is set).
Type: null or string
Default:
null
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.cloud_init.users.*.ref
Registry key into fleet.access.users.
Type: null or string
Default:
null
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.cloud_init.users.*.ssh_keys
SSH keys (inline mode; ignored when ref is set).
Type: list of string
Default:
[ ]
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.cloud_init.users.*.sudo
Grant passwordless sudo on this VM.
Type: boolean
Default:
true
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.cloud_init.vyos_config_commands
VyOS-specific cloud-init: a list of VyOS configuration tree
commands (e.g. “set system host-name ‘router’”). When non-empty,
renders as a top-level vyos_config_commands: block in the
user-data — VyOS’s cloud-init module reads this and applies the
commands at first boot inside a config transaction (load → set
→ commit → save). Non-VyOS substrates ignore the block. Used
to bootstrap hostname, HTTPS API + token, base interface IPs,
and SSH on a fresh VyOS install so the Terraform provider can
take over from there.
Type: list of string
Default:
[ ]
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.cloud_init.write_files
Files written to the VM filesystem before runcmd runs.
Type: list of (submodule)
Default:
[ ]
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.cloud_init.write_files.*.content
Literal file contents, embedded verbatim in the cloud-init user-data.
Type: string
Default: none (required when its feature is enabled)
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.cloud_init.write_files.*.owner
“user:group” ownership passed to cloud-init write_files.
Type: string
Default:
"root:root"
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.cloud_init.write_files.*.path
Absolute destination path of the file inside the guest.
Type: string
Default: none (required when its feature is enabled)
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.cloud_init.write_files.*.permissions
Octal file mode string passed to cloud-init write_files.
Type: string
Default:
"0644"
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.cpu_cores
Number of CPU cores allocated to the guest.
Type: signed integer
Default:
2
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.data_disks
Additional virtio data disks. Emitted as virtio1, virtio2, … and formatted/mounted by cloud-init.
Type: list of (submodule)
Default:
[ ]
Example:
[ { size_gb = 100; mount_path = "/data"; } ]
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.data_disks.*.datastore_id
PVE storage to allocate the disk on. Defaults to fleet.settings.providers.proxmox.defaultDatastore.
Type: string
Default:
config.fleet.settings.providers.proxmox.defaultDatastore
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.data_disks.*.filesystem
Filesystem to format with on first boot.
Type: string
Default:
"ext4"
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.data_disks.*.mount_path
Mountpoint (e.g. /data).
Type: string
Default: none (required when its feature is enabled)
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.data_disks.*.size_gb
Disk size in GiB.
Type: signed integer
Default: none (required when its feature is enabled)
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.devices
Host device nodes passed through into the container (bpg device_passthrough → PVE devN entries): TUN for VPN software, /dev/dri + /dev/kfd + /dev/nvidia* for GPU transcoding, /dev/apex_0 for a Coral TPU. Replaces the lxc.conf edits the community scripts made. LXC only.
Type: list of (submodule)
Default:
[ ]
Example:
[ { path = "/dev/net/tun"; }
{ path = "/dev/dri/renderD128"; gid = 44; }
{ path = "/dev/dri/card0"; gid = 44; } ]
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.devices.*.deny_write
Expose the device read-only.
Type: boolean
Default:
false
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.devices.*.gid
Owner gid of the node inside the container (community scripts use 44 = video for /dev/dri). Unprivileged CTs need this to match the guest’s group.
Type: null or integer between 0 and 65535 (both inclusive)
Default:
null
Example:
44
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.devices.*.mode
Access mode of the node inside the container. null = PVE default.
Type: null or string matching the pattern ^0[0-7]{3}$
Default:
null
Example:
"0660"
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.devices.*.path
Host device node passed through into the LXC (PVE devN: entry). Examples: /dev/net/tun, /dev/dri/renderD128, /dev/dri/card0, /dev/kfd, /dev/apex_0.
Type: string matching the pattern ^/dev/.+
Default: none (required when its feature is enabled)
Example:
"/dev/dri/renderD128"
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.devices.*.uid
Owner uid of the node inside the container. null = PVE default (root).
Type: null or integer between 0 and 65535 (both inclusive)
Default:
null
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.dns
Per-guest create-time DNS override ({ servers, domain }); nulls inherit fleet.network.dns_servers / dns_domain. The declarative twin of the legacy var_ns / var_searchdomain.
Type: submodule
Default:
{ }
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.dns.domain
Create-time DNS search domain for this guest. null = inherit fleet.network.dns_domain; “” = explicitly none.
Type: null or string
Default:
null
Example:
"lab.example.internal"
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.dns.servers
Create-time resolvers written into this guest’s PVE config. null = inherit fleet.network.dns_servers.
Type: null or (list of string)
Default:
null
Example:
[
"192.0.2.53"
"1.1.1.1"
]
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.enabled
Toggle for build-on-demand entries. When false, the entry is
filtered out before validation + emission, so fleet deploy tf apply <stack> neither provisions nor preserves it. Flip to
true to materialise; flip back to false (and apply) to
destroy. See nix/hosts/xoa/xo-installer-v10.nix for the
canonical pattern.
Type: boolean
Default:
true
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.env
Logical env (infra / platform / dev / prod / …).
Type: string
Default: none (required when its feature is enabled)
Example:
"platform"
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.features
PVE container feature flags ({ nesting, fuse, keyctl } default true; { mknod, mount } default off; LXC only).
Type: submodule
Default:
{ }
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.features.fuse
Allow FUSE filesystem mounts inside the LXC (PVE fuse feature).
Type: boolean
Default:
true
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.features.keyctl
Allow the keyctl() syscall inside the LXC (PVE keyctl feature; needed by systemd-based guests).
Type: boolean
Default:
true
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.features.mknod
Allow creating device nodes inside the LXC (PVE mknod feature). Emitted only when true — a non-root API token 403s on the field otherwise.
Type: boolean
Default:
false
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.features.mount
Filesystem types the LXC may mount itself (PVE mount feature). PVE accepts nfs and cifs; FUSE is the separate fuse flag. Emitted only when non-empty.
Type: list of (one of "nfs", "cifs")
Default:
[ ]
Example:
[
"nfs"
"cifs"
]
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.features.nesting
Allow nested containers/namespaces inside the LXC (PVE nesting feature; needed for systemd-nspawn, Docker, nix sandboxed builds).
Type: boolean
Default:
true
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.fleet_ns
Fleet namespace this entry belongs to (ADR-097). null = the incumbent/default fleet (top-level provider tree; unprefixed stacks + legacy state keys). Set by the v2 normaliser when lifting from fleet.fleets.
Type: null or string
Default:
null
Example:
"jeirslab"
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.hook_script
PVE hook script file id (a snippets file, e.g. a kind = "file" resource) run by PVE at the guest’s lifecycle phases. LXC only.
Type: null or string
Default:
null
Example:
"local:snippets/post-create.sh"
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.host_managed
Override bpg-provider network_interface.host_managed for this host. null = use provider default (host_managed=0). true = let PVE configure the in-container interface from ip_config (legacy / bootstrap-friendly).
Type: null or boolean
Default:
null
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.ignore_changes
Terraform attribute paths emitted into lifecycle.ignore_changes — drift on these attributes is ignored at plan time.
Type: list of string
Default:
[ ]
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.image
Explicit guest image. VMs: “file:<file_id>” (a disk image file
resource), “clone:import content type, e.g. through a
kind = "download" resource — the appliance-image path; PVE 8.4+).
Containers: a vztmpl reference for a non-NixOS rootfs.
Type: null or string
Default:
null
Example:
"import:local:import/example-cloud-amd64.qcow2"
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.import
Cross-provider import settings ({ from_uuid }). Set from_uuid to adopt an existing XO VM instead of creating a fresh one.
Type: submodule
Default:
{ }
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.import.from_uuid
XO VM UUID for cross-provider imports (e.g. pve-prod).
Type: string
Default:
""
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.interfaces
Ordered NIC list for network_mode = "declared"; index i becomes net (LXC: eth unless name says otherwise). Empty for every other mode (validator-enforced).
Type: list of (submodule)
Default:
[ ]
Example:
[ { bridge = "vmbr1"; ipv4 = "192.0.2.10/24"; gateway = "192.0.2.1"; vlan = 42; }
{ bridge = "vmbr0"; ipv4 = "dhcp"; ipv6.method = "auto"; mac = "BC:24:11:00:00:10"; } ]
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.interfaces.*.bridge
PVE bridge this NIC attaches to (PVE’s stock default bridge is vmbr0). Ignored when vnet is set.
Type: string
Default:
"vmbr0"
Example:
"vmbr1"
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.interfaces.*.firewall
Enable the PVE firewall on this NIC.
Type: boolean
Default:
false
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.interfaces.*.gateway
IPv4 default gateway (only with a static CIDR; at most one NIC per guest).
Type: null or string
Default:
null
Example:
"192.0.2.1"
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.interfaces.*.ipv4
IPv4 config: “dhcp”, “manual” (PVE ip=manual, the guest configures itself), a CIDR (the prefix is explicit — no hidden /24), or null (no IPv4 block).
Type: null or one of "dhcp", "manual" or string matching the pattern ^([0-9]{1,3}\.){3}[0-9]{1,3}/([0-9]|[12][0-9]|3[0-2])$
Default:
"dhcp"
Example:
"192.0.2.10/24"
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.interfaces.*.ipv6
IPv6 config ({ method, address, gateway }).
Type: submodule
Default:
{ }
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.interfaces.*.ipv6.address
Static IPv6 address in CIDR notation (method = static).
Type: null or string
Default:
null
Example:
"2001:db8::10/64"
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.interfaces.*.ipv6.gateway
IPv6 default gateway (method = static only).
Type: null or string
Default:
null
Example:
"2001:db8::1"
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.interfaces.*.ipv6.method
IPv6 configuration for this NIC: none (nothing emitted — the legacy “disable” too), auto (SLAAC), dhcp, or static (address required).
Type: one of "none", "auto", "dhcp", "static"
Default:
"none"
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.interfaces.*.mac
Pinned MAC address, uppercase colon-separated. null = PVE assigns one.
Type: null or string matching the pattern ^([0-9A-F]{2}:){5}[0-9A-F]{2}$
Default:
null
Example:
"BC:24:11:00:00:10"
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.interfaces.*.model
Virtual NIC model (VMs only; LXC NICs are veth).
Type: one of "virtio", "e1000", "e1000e", "rtl8139", "vmxnet3"
Default:
"virtio"
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.interfaces.*.mtu
NIC MTU (PVE mtu=): 576-65535, or 1 on a VM NIC to inherit the bridge MTU.
Type: null or signed integer
Default:
null
Example:
1400
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.interfaces.*.name
In-guest interface name (LXC). null = eth
Type: null or string
Default:
null
Example:
"eth0"
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.interfaces.*.rate_limit_mbps
Egress rate limit in MB/s (PVE rate=).
Type: null or (positive integer, meaning >0)
Default:
null
Example:
100
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.interfaces.*.vlan
802.1Q VLAN tag (PVE tag=).
Type: null or integer between 1 and 4094 (both inclusive)
Default:
null
Example:
42
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.interfaces.*.vnet
PVE SDN VNet id to attach to instead of a bridge (PVE writes it into the bridge= field). Declare the VNet as a kind = "sdn-vnet" resource on the same provider instance.
Type: null or string
Default:
null
Example:
"lab"
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.internal_bridge
Bridge the legacy single-internal mode attaches eth0 to. null = vmbr1, or vmbr0 when the provider instance is listed in fleet.settings.providers.proxmox.singleBridgeInstances. (Declared-mode hosts set the bridge per interface instead.)
Type: null or string
Default:
null
Example:
"vmbr2"
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.internal_ip
Internal fleet-LAN IPv4 address (bare, no prefix). Statically configured into the guest at create time and used as the host’s inventory/SSH address (hosts.json, DNS A records). Empty for hosts without an internal interface (e.g. DHCP’d XCP-ng VMs).
Type: string
Default:
""
Example:
"192.0.2.104"
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.ip
External/LAN IPv4 address (bare, no prefix — the emitter appends the prefix length). Used by the external leg of the dual / single-external / custom network modes. Empty when the host has no external interface.
Type: string
Default:
""
Example:
"198.51.100.20"
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.kind
LXC container or KVM VM.
Type: one of "container", "vm"
Default: none (required when its feature is enabled)
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.lxc_extra_conf
Raw lines appended to /etc/pve/lxc/optional bind mounts, autodev hooks).
Applied by a terraform_data local-exec over root SSH to the
container’s node (fleet.providers.proxmox.
Type: list of string
Default:
[ ]
Example:
[ "lxc.cgroup2.devices.allow: c 188:* rwm"
"lxc.mount.entry: /dev/serial/by-id dev/serial/by-id none bind,optional,create=dir" ]
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.mac_address_eth0
Pin the eth0 MAC address (uppercase colon-separated, e.g. “BC:24:11:5B:EA:26”). null = bpg-provider auto-assigns. Currently honoured by lxc-router mode; extend the network-mode emitters as needed for other modes.
Type: null or string
Default:
null
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.mac_address_eth1
Pin the eth1 MAC address. Required by internal-plus-lan-mac mode (a second NIC on the internal bridge carrying an ingress identity a LAN-router port-forward targets by MAC).
Type: null or string
Default:
null
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.memory_mb
RAM in MiB. LXC containers pick up changes without a restart; VMs need a reboot.
Type: signed integer
Default:
2048
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.mount_points
Extra PVE mount-point volumes ({ datastore, path, size, backup }) attached to the container (LXC only).
Type: list of (submodule)
Default:
[ ]
Example:
[ { datastore = "local-storage"; path = "/data"; size = "64G"; } ]
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.mount_points.*.backup
Include this volume in vzdump backups.
Type: boolean
Default:
true
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.mount_points.*.datastore
PVE storage the mount-point volume is allocated on (e.g. “local-storage”).
Type: string
Default: none (required when its feature is enabled)
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.mount_points.*.path
Mountpoint inside the container (e.g. “/data”).
Type: string
Default: none (required when its feature is enabled)
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.mount_points.*.size
Size like “256G”. Stringly-typed to match bpg input.
Type: string
Default: none (required when its feature is enabled)
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.name
Hostname for the machine (defaults to the fleet attrset key).
Type: string
Default:
"‹name›"
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.network_mode
Which NIC/bridge layout the emitter generates. “declared” = the NICs come from interfaces (any bridge/VNet, DHCP or explicit CIDR, VLAN, MTU, MAC, IPv6) — the general form; single-internal (one NIC on the internal bridge), single-external (one NIC on the LAN bridge), dual (both) and the custom/special-case layouts are the legacy fixed shapes kept for compatibility.
Type: one of "single-internal", "single-external", "dual", "custom-netgate", "custom-btc-testnet", "custom-vm", "lxc-router", "declared", "internal-plus-lan-mac"
Default:
"single-internal"
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.node
PVE cluster member name (e.g. “pve-data”). Empty = defaults to provider’s cluster.primary_node.
Type: string
Default:
""
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.note
Structured PVE Notes content. Takes precedence over notes when set.
Type: null or (submodule)
Default:
null
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.note.extra
Free-form markdown appended last.
Type: string
Default:
""
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.note.links
Related links (dashboards, runbooks, tickets) rendered as a bullet list.
Type: list of (submodule)
Default:
[ ]
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.note.links.*.text
Link label as rendered in the Notes markdown.
Type: string
Default: none (required when its feature is enabled)
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.note.links.*.url
Link target URL.
Type: string
Default: none (required when its feature is enabled)
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.note.services
Services running on the host, rendered as a bullet list (name, address, port).
Type: list of (submodule)
Default:
[ ]
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.note.services.*.address
Address/URL the service is reachable at. Empty = omitted from the rendered line.
Type: string
Default:
""
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.note.services.*.name
Service name shown in the Notes services table.
Type: string
Default: none (required when its feature is enabled)
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.note.services.*.port
Service port. null = omitted from the rendered line.
Type: null or signed integer
Default:
null
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.note.stateful
Render the STATEFUL/protected warning banner in the Notes panel. Informational only — destruction protection itself comes from protect / STATEFUL_TAGS.
Type: boolean
Default:
false
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.note.summary
One-paragraph description rendered under the title.
Type: string
Default:
""
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.note.title
Heading of the rendered Notes markdown. Empty = falls back to the host name.
Type: string
Default:
""
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.notes
Free-text audit note. Plain-string fallback rendered in the PVE Notes panel (Summary tab) when the structured note is null.
Type: string
Default:
""
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.onboot
Start the guest when the PVE node boots (onboot).
Type: boolean
Default:
true
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.pool
Pool membership — pool_id of a fleet.resources pool entry.
Type: null or string
Default:
null
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.privileged
Run this LXC in privileged mode (sets unprivileged = false in the Proxmox container). Only needed for hosts that run NAT or other kernel-capability-sensitive workloads.
Type: boolean
Default:
false
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.protect
Emit lifecycle.prevent_destroy = true on the generated Terraform resource. Required (or a strict-destruction-policy provider) for entries carrying a fleet.STATEFUL_TAGS tag; fleet tf destroy refuses to target protected resources.
Type: boolean
Default:
false
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.protection
PVE guest protection flag (blocks destroy/remove in the PVE UI and API). Distinct from protect, which is the Terraform prevent_destroy lifecycle. Emitted only when true.
Type: boolean
Default:
false
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.provider_instance
Pointer to fleet.providers: “
Type: string matching the pattern ^[a-z-]+\.[a-z][a-z0-9-]*$
Default: none (required when its feature is enabled)
Example:
"proxmox.dev"
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.provides
This machine IS a member (node) of the named provider instance — the ADR-096 recursive estate link. Its resource name must equal the member/node name it provides. Drives derived hypervisor scrape targets and layer-dependency queries.
Type: null or string
Default:
null
Example:
"proxmox.prod"
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.provisioning
“managed” = terranix/tofu-provisioned by this repo; “external” = provisioned elsewhere, NixOS-managed only.
Type: one of "managed", "external"
Default:
"managed"
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.root_disk_datastore
PVE storage the root disk is allocated on. Defaults to fleet.settings.providers.proxmox.defaultDatastore.
Type: string
Default:
config.fleet.settings.providers.proxmox.defaultDatastore
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.root_disk_gb
Root disk size in GiB.
Type: signed integer
Default:
16
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.scope
ADR-097 derivation contract: an “estate”-scoped resource is a singleton serving every fleet on this substrate (router/DNS edge, builder, observability) and may fold ALL fleets’ manifests into its config; “fleet”-scoped resources see only their own namespace. Enforcement lands with the second fleet — today this is declared intent + docs surface.
Type: one of "fleet", "estate"
Default:
"fleet"
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.ssh_groups
Authentik groups allowed SSH access (sssd simple_allow_groups).
Type: list of string
Default:
[
"platform-admins"
]
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.stack
Dot-path stack label within env.
Type: string
Default: none (required when its feature is enabled)
Example:
"bitcoin.mainnet"
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.start_on_create
Start the guest right after Terraform creates it. false = create stopped (appliance images that need a first manual step).
Type: boolean
Default:
true
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.startup
PVE startup ordering ({ order, up_delay, down_delay }). null = not managed.
Type: null or (submodule)
Default:
null
Example:
{ order = 10; up_delay = 30; }
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.startup.down_delay
Seconds PVE waits after stopping this guest before stopping the next one.
Type: null or (unsigned integer, meaning >=0)
Default:
null
Example:
30
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.startup.order
PVE start/shutdown order (lower starts first). null = PVE default (any order).
Type: null or (unsigned integer, meaning >=0)
Default:
null
Example:
10
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.startup.up_delay
Seconds PVE waits after starting this guest before starting the next one.
Type: null or (unsigned integer, meaning >=0)
Default:
null
Example:
30
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.startup_order
Deprecated flat alias of startup.order — PVE LXC boot ordering (lower boots first). null = PVE default ordering. Prefer the structured startup option.
Type: null or signed integer
Default:
null
Example:
3
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.sudo_groups
Authentik groups granted password-required sudo on this host (sssd → security.sudo.extraRules). In practice a subset of ssh_groups (you cannot sudo on a host you cannot log into). Empty = no LDAP user gets sudo here; local wheel accounts (core.nix) are unaffected. See ADR-028.
Type: list of string
Default:
[ ]
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.swap_mb
Swap in MiB (LXC only).
Type: signed integer
Default:
2048
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.tags
Free-form tags (shown in the PVE UI, usable as Colmena deploy targets). Tags listed in fleet.STATEFUL_TAGS additionally force destruction protection (validator-enforced).
Type: list of string
Default:
[ ]
Example:
[
"postgres"
"monitoring"
]
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.vm
VM-only hardware settings ({ machine, bios, efi, cpu_type, scsi_hardware, root_disk, serial_console, agent, boot_order, tablet }). Ignored for containers (validator rejects non-defaults there).
Type: submodule
Default:
{ }
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.vm.agent
QEMU guest agent enabled. null = fleetkit’s rule (on for image-based and NixOS-template VMs).
Type: null or boolean
Default:
null
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.vm.bios
Firmware. “ovmf” (UEFI) also emits an EFI vars disk from efi. null = PVE default (seabios).
Type: null or one of "seabios", "ovmf"
Default:
null
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.vm.boot_order
Explicit boot device order (PVE boot: order=). null = PVE default.
Type: null or (list of string)
Default:
null
Example:
[
"scsi0"
"net0"
]
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.vm.cpu_type
QEMU CPU model (PVE cpu:). “host” (fleetkit default) passes the node’s CPU through; community VMs default to kvm64 for migratability.
Type: string
Default:
"host"
Example:
"x86-64-v2-AES"
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.vm.efi
EFI vars disk settings, used when bios = ovmf.
Type: submodule
Default:
{ }
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.vm.efi.datastore
PVE storage for the EFI vars disk. null = fleet.settings.providers.proxmox.defaultDatastore.
Type: null or string
Default:
null
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.vm.efi.pre_enrolled_keys
Pre-enrol the distribution Secure Boot keys into the EFI vars disk (community default: off).
Type: boolean
Default:
false
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.vm.efi.type
EFI vars disk size/type (PVE efitype; community default 4m).
Type: one of "2m", "4m"
Default:
"4m"
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.vm.machine
QEMU machine type: pc (i440fx, community default) or q35. null = PVE default.
Type: null or one of "pc", "q35"
Default:
null
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.vm.root_disk
Root disk attributes beyond size/datastore ({ interface, cache, discard, iothread, ssd }).
Type: submodule
Default:
{ }
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.vm.root_disk.cache
Disk cache mode (PVE cache=). null = PVE default.
Type: null or one of "none", "directsync", "writethrough", "writeback", "unsafe"
Default:
null
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.vm.root_disk.discard
Pass discard/TRIM through to the storage (PVE discard=).
Type: null or one of "on", "ignore"
Default:
null
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.vm.root_disk.interface
Bus/device of the root disk (community VMs use scsi0 with virtio-scsi-pci; fleetkit’s NixOS images boot from virtio0).
Type: string
Default:
"virtio0"
Example:
"scsi0"
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.vm.root_disk.iothread
Use a dedicated I/O thread (PVE iothread=).
Type: null or boolean
Default:
null
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.vm.root_disk.ssd
Present the disk as an SSD to the guest (PVE ssd=).
Type: null or boolean
Default:
null
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.vm.scsi_hardware
SCSI controller model (PVE scsihw). null = PVE default.
Type: null or one of "virtio-scsi-pci", "virtio-scsi-single", "lsi", "lsi53c810", "megasas", "pvscsi"
Default:
null
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.vm.serial_console
Attach a serial socket so qm terminal <vmid> reaches the guest console.
Type: boolean
Default:
true
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.vm.tablet
USB tablet device (community VMs pass -tablet 0). null = PVE default (on).
Type: null or boolean
Default:
null
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.vm_id
Proxmox VMID.
Type: signed integer
Default: none (required when its feature is enabled)
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.vm_template
Legacy: “nixos” clones VMID 9000, “debian-13” imports the prepared Debian qcow2 (ADR-013/018). Prefer image for new entries.
Type: one of "nixos", "debian-13"
Default:
"debian-13"
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.xoa
XCP-ng/XOA-specific compute config. Active when provider_instance starts with xen-orchestra.
Type: submodule
Default:
{ }
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.xoa.cloud_network_config
Cloud-init network-config (v2 YAML) passed verbatim to
xenorchestra_vm.cloud_network_config. Only meaningful for
cloud-init guests (non-NixOS); use match: {macaddress: ...}
stanzas against pinned xoa.networks[*].mac so the config is
immune to guest interface naming (eth0 vs enX0 on Xen).
NixOS VMs leave this null — networkd owns their config.
(INFRA-194; also the path INFRA-174’s Ubuntu dev box needs.)
Type: null or string
Default:
null
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.xoa.disks
Additional VDIs beyond the cloned template root disk.
Type: list of (submodule)
Default:
[ ]
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.xoa.disks.*.name
VDI name label as shown in Xen Orchestra.
Type: string
Default: none (required when its feature is enabled)
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.xoa.disks.*.size_add_gb
Additional GiB layered on top of size_gb, applied
IMPERATIVELY by xoa-cli reconcile-disks (never by
terraform — INFRA-172 / ADR-081). Live target =
size_gb + size_add_gb; the reconciler grows the VDI
when live < target and never shrinks. Grow a disk by
editing this field and running the reconciler.
Type: signed integer
Default:
0
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.xoa.disks.*.size_gb
BASE size in GiB — what terranix provisions at CREATE time. ForceNew in the vatesfr/xenorchestra provider; ignored for drift afterwards (mkXoLifecycle). Do NOT bump this to grow a live disk — use size_add_gb.
Type: signed integer
Default: none (required when its feature is enabled)
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.xoa.disks.*.sr_ref
Full fleet.resources key for the SR (e.g. “xo-sr-main”).
Type: string
Default: none (required when its feature is enabled)
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.xoa.iso_ref
Optional fleet.resources key for an ISO to attach as a CDROM
(e.g. “xo-iso-nixos-minimal”). When set, the VM is created
with the ISO pre-attached and the underlying VM’s boot order
(“dc” — CD then disk in XOA’s UEFI default) makes it boot
from the ISO on first power-on. Used for one-shot OS installs
onto blank disks. After install, eject via xo-cli vm.ejectCd
and the VM boots from disk on next start.
Type: null or string
Default:
null
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.xoa.networks
Ordered NIC list. First entry becomes eth0 inside the guest.
Type: list of (submodule)
Default:
[ ]
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.xoa.networks.*.mac
Pin MAC address; null = XCP-ng assigns one.
Type: null or string
Default:
null
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.xoa.networks.*.ref
Full fleet.resources key for the network (e.g. “xo-network-wan”).
Type: string
Default: none (required when its feature is enabled)
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.xoa.pool_ref
Full fleet.resources key for the target XCP-ng pool (e.g. “xo-pool-main”).
Type: string
Default:
"xo-pool-main"
Declared by: nix/fleet/compute.nix
fleet.compute.<name>.xoa.template
Full fleet.resources key for the source template (e.g. “xo-template-nixos”). Required for kind=vm on XOA.
Type: null or string
Default:
null
Declared by: nix/fleet/compute.nix
fleet.providers
285 options
fleet.providers.ansible
ansible/ansible — runs ansible-playbook from a terraform resource
(ansible_playbook). Used to chain post-install Ansible against
compute resources tofu just created, so fleet deploy tf apply does
the whole “create the host + converge its config” cycle in one
shot. The provider runs ansible-playbook locally on whoever
runs tofu, so SSH key + inventory must be reachable there.
Type: null or (submodule)
Default:
null
Declared by: nix/fleet/providers
fleet.providers.ansible.endpoint
Daemon/host URL — docker only (e.g. ssh://root@192.0.2.50 or tcp://host:2376).
Type: null or string
Default:
null
Example:
"ssh://root@192.0.2.50"
Declared by: nix/fleet/providers
fleet.providers.ansible.secrets
Map of provider-config-key → SOPS path (docker TLS certs, etc.).
Type: attribute set of string
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.ansible.source
Terraform provider source address (e.g. hashicorp/random).
Type: string
Default: none (required when its feature is enabled)
Example:
"hashicorp/random"
Declared by: nix/fleet/providers
fleet.providers.ansible.version
Version constraint for required_providers.
Type: string
Default: none (required when its feature is enabled)
Example:
"3.6.2"
Declared by: nix/fleet/providers
fleet.providers.cloudflare
Cloudflare provider instances, keyed by name (e.g. prod).
Type: attribute set of (submodule)
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.cluster
Proxmox-cluster-specific info. Empty for non-Proxmox providers.
Type: submodule
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.cluster.ha_manager
Whether the cluster runs the PVE HA manager. Informational — not consumed by any emitter yet.
Type: boolean
Default:
false
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.cluster.node_addresses
Node name → SSH host used by out-of-band local-exec steps (fleet.compute.
Type: attribute set of string
Default:
{ }
Example:
{
pve1 = "198.51.100.11";
pve2 = "pve2.mgmt.example.internal";
}
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.cluster.nodes
Cluster member names. More than one entry makes the instance multi-node, which forces every compute entry on it to set node explicitly (validator-enforced).
Type: list of string
Default:
[ ]
Example:
[
"pve-alpha"
"pve-beta"
]
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.cluster.primary_node
Fallback placement target: compute/resource entries that leave node empty are provisioned here.
Type: string
Default:
""
Example:
"pve-alpha"
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.destruction_policy
- strict: emit prevent_destroy=true on EVERY resource in this instance
- standard: emit prevent_destroy=true only on stateful-tagged resources
- permissive: emit prevent_destroy only on explicit protect=true
Type: one of "strict", "standard", "permissive"
Default:
"standard"
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.endpoint
API endpoint URL. Optional — provider may derive from secrets.
Type: null or string
Default:
null
Example:
"https://192.0.2.10:8006/"
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.insecure
Skip TLS verification (internal step-ca cert).
Type: boolean
Default:
true
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.minVersion
Lowest Proxmox VE major.minor this instance is expected to run. fleetkit’s zero-touch NixOS LXC first boot needs PVE 9 (its NixOS LXC setup plugin writes the guest’s eth0.network from the container’s net0 at create time); fleet pve status warns when the live node is older. Informational for non-PVE providers.
Type: string
Default:
"9.0"
Example:
"9.0"
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.nodes
Hypervisor members of this instance, as typed objects (mgmt_ip, placed machines). Complements cluster.nodes (names only); a name present in either counts as a member.
Type: attribute set of (submodule)
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.nodes.<name>.mgmt_ip
Management/API address of this hypervisor node. Feeds derived scrape targets when the node is not provides-linked to a fleet VM.
Type: null or string
Default:
null
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.nodes.<name>.resources
Machines placed on this node.
Type: submodule
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.nodes.<name>.resources.lxc
LXC containers placed on this node.
Type: attribute set of (open submodule of attribute set of raw value)
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.nodes.<name>.resources.lxc.<name>.bootOrder
XO VMs: explicit boot order (c=disk n=network d=dvd). null = derived from tags (transient ⇒ dnc). Replaces the tag heuristic as the authored form; emitted via the post-create fix hook either way.
Type: null or one of "cnd", "dnc"
Default:
null
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.nodes.<name>.resources.lxc.<name>.env
Logical environment label; with stack selects the leaf tf stack (“env.stack”).
Type: string
Default: none (required when its feature is enabled)
Example:
"platform"
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.nodes.<name>.resources.lxc.<name>.nixos
This machine’s NixOS module function ({ config, helpers, … }: { … }). Replaces the parallel fleet.hostsRegistry entry; null = not colmena-managed (installer-provisioned, non-NixOS, …).
Type: null or unspecified value
Default:
null
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.nodes.<name>.resources.lxc.<name>.provides
This machine IS a member of the named provider instance — the recursive estate link (a PVE node that is itself an XO VM). Drives derived defaults (hypervisor scrape targets) and makes the layer dependency queryable.
Type: null or string
Default:
null
Example:
"proxmox.skrybit-pve"
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.nodes.<name>.resources.lxc.<name>.scope
ADR-097: “estate” marks a singleton serving every fleet on this substrate (may derive from all fleets’ manifests); “fleet” (default) sees only its own namespace.
Type: one of "fleet", "estate"
Default:
"fleet"
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.nodes.<name>.resources.lxc.<name>.secrets
Secret declaration facet ({ file; instances.
Type: null or (attribute set of raw value)
Default:
null
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.nodes.<name>.resources.lxc.<name>.stack
Stack grouping within env.
Type: string
Default: none (required when its feature is enabled)
Example:
"core"
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.nodes.<name>.resources.vm
KVM/QEMU VMs placed on this node.
Type: attribute set of (open submodule of attribute set of raw value)
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.nodes.<name>.resources.vm.<name>.bootOrder
XO VMs: explicit boot order (c=disk n=network d=dvd). null = derived from tags (transient ⇒ dnc). Replaces the tag heuristic as the authored form; emitted via the post-create fix hook either way.
Type: null or one of "cnd", "dnc"
Default:
null
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.nodes.<name>.resources.vm.<name>.env
Logical environment label; with stack selects the leaf tf stack (“env.stack”).
Type: string
Default: none (required when its feature is enabled)
Example:
"platform"
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.nodes.<name>.resources.vm.<name>.nixos
This machine’s NixOS module function ({ config, helpers, … }: { … }). Replaces the parallel fleet.hostsRegistry entry; null = not colmena-managed (installer-provisioned, non-NixOS, …).
Type: null or unspecified value
Default:
null
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.nodes.<name>.resources.vm.<name>.provides
This machine IS a member of the named provider instance — the recursive estate link (a PVE node that is itself an XO VM). Drives derived defaults (hypervisor scrape targets) and makes the layer dependency queryable.
Type: null or string
Default:
null
Example:
"proxmox.skrybit-pve"
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.nodes.<name>.resources.vm.<name>.scope
ADR-097: “estate” marks a singleton serving every fleet on this substrate (may derive from all fleets’ manifests); “fleet” (default) sees only its own namespace.
Type: one of "fleet", "estate"
Default:
"fleet"
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.nodes.<name>.resources.vm.<name>.secrets
Secret declaration facet ({ file; instances.
Type: null or (attribute set of raw value)
Default:
null
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.nodes.<name>.resources.vm.<name>.stack
Stack grouping within env.
Type: string
Default: none (required when its feature is enabled)
Example:
"core"
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.pool
XCP-ng pool info (master host, primary SR/network). Empty for non-XO providers.
Type: attribute set
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.resources
Provider-scoped resources by kind — pools/acls/zones/checks per this provider’s kind map (v2-types.nix), plus lxc/vm.
Type: open submodule of attribute set of attribute set of attribute set of raw value
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.resources.lxc
Instance-scoped containers (single-node instances; multi-node clusters place under nodes.
Type: attribute set of (open submodule of attribute set of raw value)
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.resources.lxc.<name>.bootOrder
XO VMs: explicit boot order (c=disk n=network d=dvd). null = derived from tags (transient ⇒ dnc). Replaces the tag heuristic as the authored form; emitted via the post-create fix hook either way.
Type: null or one of "cnd", "dnc"
Default:
null
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.resources.lxc.<name>.env
Logical environment label; with stack selects the leaf tf stack (“env.stack”).
Type: string
Default: none (required when its feature is enabled)
Example:
"platform"
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.resources.lxc.<name>.nixos
This machine’s NixOS module function ({ config, helpers, … }: { … }). Replaces the parallel fleet.hostsRegistry entry; null = not colmena-managed (installer-provisioned, non-NixOS, …).
Type: null or unspecified value
Default:
null
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.resources.lxc.<name>.provides
This machine IS a member of the named provider instance — the recursive estate link (a PVE node that is itself an XO VM). Drives derived defaults (hypervisor scrape targets) and makes the layer dependency queryable.
Type: null or string
Default:
null
Example:
"proxmox.skrybit-pve"
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.resources.lxc.<name>.scope
ADR-097: “estate” marks a singleton serving every fleet on this substrate (may derive from all fleets’ manifests); “fleet” (default) sees only its own namespace.
Type: one of "fleet", "estate"
Default:
"fleet"
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.resources.lxc.<name>.secrets
Secret declaration facet ({ file; instances.
Type: null or (attribute set of raw value)
Default:
null
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.resources.lxc.<name>.stack
Stack grouping within env.
Type: string
Default: none (required when its feature is enabled)
Example:
"core"
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.resources.vm
Instance-scoped VMs (XO VMs are pool-placed, so they belong here).
Type: attribute set of (open submodule of attribute set of raw value)
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.resources.vm.<name>.bootOrder
XO VMs: explicit boot order (c=disk n=network d=dvd). null = derived from tags (transient ⇒ dnc). Replaces the tag heuristic as the authored form; emitted via the post-create fix hook either way.
Type: null or one of "cnd", "dnc"
Default:
null
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.resources.vm.<name>.env
Logical environment label; with stack selects the leaf tf stack (“env.stack”).
Type: string
Default: none (required when its feature is enabled)
Example:
"platform"
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.resources.vm.<name>.nixos
This machine’s NixOS module function ({ config, helpers, … }: { … }). Replaces the parallel fleet.hostsRegistry entry; null = not colmena-managed (installer-provisioned, non-NixOS, …).
Type: null or unspecified value
Default:
null
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.resources.vm.<name>.provides
This machine IS a member of the named provider instance — the recursive estate link (a PVE node that is itself an XO VM). Drives derived defaults (hypervisor scrape targets) and makes the layer dependency queryable.
Type: null or string
Default:
null
Example:
"proxmox.skrybit-pve"
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.resources.vm.<name>.scope
ADR-097: “estate” marks a singleton serving every fleet on this substrate (may derive from all fleets’ manifests); “fleet” (default) sees only its own namespace.
Type: one of "fleet", "estate"
Default:
"fleet"
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.resources.vm.<name>.secrets
Secret declaration facet ({ file; instances.
Type: null or (attribute set of raw value)
Default:
null
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.resources.vm.<name>.stack
Stack grouping within env.
Type: string
Default: none (required when its feature is enabled)
Example:
"core"
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.secrets
Map of provider-config-key → SOPS path. Emitter resolves each
to $${data.sops_file.secrets.data["<dotted-path>"]} so secrets
never appear in config.tf.json.
Type: attribute set of string
Default:
{ }
Example:
{ api_token = "integrations/proxmox/api_token"; }
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.source
Terraform provider source address (e.g. bpg/proxmox).
Type: string
Default: none (required when its feature is enabled)
Example:
"bpg/proxmox"
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.state.prefix
S3 key prefix for this instance’s tfstate(s). Full path: s3://
Type: string
Default: none (required when its feature is enabled)
Example:
"proxmox-dev"
Declared by: nix/fleet/providers
fleet.providers.cloudflare.<name>.version
Version constraint for required_providers.
Type: string
Default: none (required when its feature is enabled)
Example:
"0.66.3"
Declared by: nix/fleet/providers
fleet.providers.cloudinit
hashicorp/cloudinit — renders multipart cloud-config (for dev VMs / Debian first-boot).
Type: null or (submodule)
Default:
null
Declared by: nix/fleet/providers
fleet.providers.cloudinit.endpoint
Daemon/host URL — docker only (e.g. ssh://root@192.0.2.50 or tcp://host:2376).
Type: null or string
Default:
null
Example:
"ssh://root@192.0.2.50"
Declared by: nix/fleet/providers
fleet.providers.cloudinit.secrets
Map of provider-config-key → SOPS path (docker TLS certs, etc.).
Type: attribute set of string
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.cloudinit.source
Terraform provider source address (e.g. hashicorp/random).
Type: string
Default: none (required when its feature is enabled)
Example:
"hashicorp/random"
Declared by: nix/fleet/providers
fleet.providers.cloudinit.version
Version constraint for required_providers.
Type: string
Default: none (required when its feature is enabled)
Example:
"3.6.2"
Declared by: nix/fleet/providers
fleet.providers.docker
kreuzwerker/docker provider instances, keyed by daemon host.
Manages docker RESOURCES (containers, images, networks, volumes)
on a target daemon — NOT the daemon’s own config, which stays in
the host’s NixOS module / cloud-init. Each instance’s endpoint
is the daemon URL (ssh:// or tcp://).
Type: attribute set of (submodule)
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.docker.<name>.endpoint
Daemon/host URL — docker only (e.g. ssh://root@192.0.2.50 or tcp://host:2376).
Type: null or string
Default:
null
Example:
"ssh://root@192.0.2.50"
Declared by: nix/fleet/providers
fleet.providers.docker.<name>.secrets
Map of provider-config-key → SOPS path (docker TLS certs, etc.).
Type: attribute set of string
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.docker.<name>.source
Terraform provider source address (e.g. hashicorp/random).
Type: string
Default: none (required when its feature is enabled)
Example:
"hashicorp/random"
Declared by: nix/fleet/providers
fleet.providers.docker.<name>.version
Version constraint for required_providers.
Type: string
Default: none (required when its feature is enabled)
Example:
"3.6.2"
Declared by: nix/fleet/providers
fleet.providers.grafana
Grafana provider instances, keyed by name (e.g. cloud). Manages Grafana Cloud stack resources: synthetic monitoring checks, alerting contact points, notification templates (INFRA-144).
Type: attribute set of (submodule)
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.cluster
Proxmox-cluster-specific info. Empty for non-Proxmox providers.
Type: submodule
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.cluster.ha_manager
Whether the cluster runs the PVE HA manager. Informational — not consumed by any emitter yet.
Type: boolean
Default:
false
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.cluster.node_addresses
Node name → SSH host used by out-of-band local-exec steps (fleet.compute.
Type: attribute set of string
Default:
{ }
Example:
{
pve1 = "198.51.100.11";
pve2 = "pve2.mgmt.example.internal";
}
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.cluster.nodes
Cluster member names. More than one entry makes the instance multi-node, which forces every compute entry on it to set node explicitly (validator-enforced).
Type: list of string
Default:
[ ]
Example:
[
"pve-alpha"
"pve-beta"
]
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.cluster.primary_node
Fallback placement target: compute/resource entries that leave node empty are provisioned here.
Type: string
Default:
""
Example:
"pve-alpha"
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.destruction_policy
- strict: emit prevent_destroy=true on EVERY resource in this instance
- standard: emit prevent_destroy=true only on stateful-tagged resources
- permissive: emit prevent_destroy only on explicit protect=true
Type: one of "strict", "standard", "permissive"
Default:
"standard"
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.endpoint
API endpoint URL. Optional — provider may derive from secrets.
Type: null or string
Default:
null
Example:
"https://192.0.2.10:8006/"
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.insecure
Skip TLS verification (internal step-ca cert).
Type: boolean
Default:
true
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.minVersion
Lowest Proxmox VE major.minor this instance is expected to run. fleetkit’s zero-touch NixOS LXC first boot needs PVE 9 (its NixOS LXC setup plugin writes the guest’s eth0.network from the container’s net0 at create time); fleet pve status warns when the live node is older. Informational for non-PVE providers.
Type: string
Default:
"9.0"
Example:
"9.0"
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.nodes
Hypervisor members of this instance, as typed objects (mgmt_ip, placed machines). Complements cluster.nodes (names only); a name present in either counts as a member.
Type: attribute set of (submodule)
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.nodes.<name>.mgmt_ip
Management/API address of this hypervisor node. Feeds derived scrape targets when the node is not provides-linked to a fleet VM.
Type: null or string
Default:
null
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.nodes.<name>.resources
Machines placed on this node.
Type: submodule
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.nodes.<name>.resources.lxc
LXC containers placed on this node.
Type: attribute set of (open submodule of attribute set of raw value)
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.nodes.<name>.resources.lxc.<name>.bootOrder
XO VMs: explicit boot order (c=disk n=network d=dvd). null = derived from tags (transient ⇒ dnc). Replaces the tag heuristic as the authored form; emitted via the post-create fix hook either way.
Type: null or one of "cnd", "dnc"
Default:
null
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.nodes.<name>.resources.lxc.<name>.env
Logical environment label; with stack selects the leaf tf stack (“env.stack”).
Type: string
Default: none (required when its feature is enabled)
Example:
"platform"
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.nodes.<name>.resources.lxc.<name>.nixos
This machine’s NixOS module function ({ config, helpers, … }: { … }). Replaces the parallel fleet.hostsRegistry entry; null = not colmena-managed (installer-provisioned, non-NixOS, …).
Type: null or unspecified value
Default:
null
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.nodes.<name>.resources.lxc.<name>.provides
This machine IS a member of the named provider instance — the recursive estate link (a PVE node that is itself an XO VM). Drives derived defaults (hypervisor scrape targets) and makes the layer dependency queryable.
Type: null or string
Default:
null
Example:
"proxmox.skrybit-pve"
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.nodes.<name>.resources.lxc.<name>.scope
ADR-097: “estate” marks a singleton serving every fleet on this substrate (may derive from all fleets’ manifests); “fleet” (default) sees only its own namespace.
Type: one of "fleet", "estate"
Default:
"fleet"
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.nodes.<name>.resources.lxc.<name>.secrets
Secret declaration facet ({ file; instances.
Type: null or (attribute set of raw value)
Default:
null
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.nodes.<name>.resources.lxc.<name>.stack
Stack grouping within env.
Type: string
Default: none (required when its feature is enabled)
Example:
"core"
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.nodes.<name>.resources.vm
KVM/QEMU VMs placed on this node.
Type: attribute set of (open submodule of attribute set of raw value)
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.nodes.<name>.resources.vm.<name>.bootOrder
XO VMs: explicit boot order (c=disk n=network d=dvd). null = derived from tags (transient ⇒ dnc). Replaces the tag heuristic as the authored form; emitted via the post-create fix hook either way.
Type: null or one of "cnd", "dnc"
Default:
null
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.nodes.<name>.resources.vm.<name>.env
Logical environment label; with stack selects the leaf tf stack (“env.stack”).
Type: string
Default: none (required when its feature is enabled)
Example:
"platform"
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.nodes.<name>.resources.vm.<name>.nixos
This machine’s NixOS module function ({ config, helpers, … }: { … }). Replaces the parallel fleet.hostsRegistry entry; null = not colmena-managed (installer-provisioned, non-NixOS, …).
Type: null or unspecified value
Default:
null
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.nodes.<name>.resources.vm.<name>.provides
This machine IS a member of the named provider instance — the recursive estate link (a PVE node that is itself an XO VM). Drives derived defaults (hypervisor scrape targets) and makes the layer dependency queryable.
Type: null or string
Default:
null
Example:
"proxmox.skrybit-pve"
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.nodes.<name>.resources.vm.<name>.scope
ADR-097: “estate” marks a singleton serving every fleet on this substrate (may derive from all fleets’ manifests); “fleet” (default) sees only its own namespace.
Type: one of "fleet", "estate"
Default:
"fleet"
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.nodes.<name>.resources.vm.<name>.secrets
Secret declaration facet ({ file; instances.
Type: null or (attribute set of raw value)
Default:
null
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.nodes.<name>.resources.vm.<name>.stack
Stack grouping within env.
Type: string
Default: none (required when its feature is enabled)
Example:
"core"
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.pool
XCP-ng pool info (master host, primary SR/network). Empty for non-XO providers.
Type: attribute set
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.resources
Provider-scoped resources by kind — pools/acls/zones/checks per this provider’s kind map (v2-types.nix), plus lxc/vm.
Type: open submodule of attribute set of attribute set of attribute set of raw value
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.resources.lxc
Instance-scoped containers (single-node instances; multi-node clusters place under nodes.
Type: attribute set of (open submodule of attribute set of raw value)
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.resources.lxc.<name>.bootOrder
XO VMs: explicit boot order (c=disk n=network d=dvd). null = derived from tags (transient ⇒ dnc). Replaces the tag heuristic as the authored form; emitted via the post-create fix hook either way.
Type: null or one of "cnd", "dnc"
Default:
null
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.resources.lxc.<name>.env
Logical environment label; with stack selects the leaf tf stack (“env.stack”).
Type: string
Default: none (required when its feature is enabled)
Example:
"platform"
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.resources.lxc.<name>.nixos
This machine’s NixOS module function ({ config, helpers, … }: { … }). Replaces the parallel fleet.hostsRegistry entry; null = not colmena-managed (installer-provisioned, non-NixOS, …).
Type: null or unspecified value
Default:
null
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.resources.lxc.<name>.provides
This machine IS a member of the named provider instance — the recursive estate link (a PVE node that is itself an XO VM). Drives derived defaults (hypervisor scrape targets) and makes the layer dependency queryable.
Type: null or string
Default:
null
Example:
"proxmox.skrybit-pve"
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.resources.lxc.<name>.scope
ADR-097: “estate” marks a singleton serving every fleet on this substrate (may derive from all fleets’ manifests); “fleet” (default) sees only its own namespace.
Type: one of "fleet", "estate"
Default:
"fleet"
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.resources.lxc.<name>.secrets
Secret declaration facet ({ file; instances.
Type: null or (attribute set of raw value)
Default:
null
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.resources.lxc.<name>.stack
Stack grouping within env.
Type: string
Default: none (required when its feature is enabled)
Example:
"core"
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.resources.vm
Instance-scoped VMs (XO VMs are pool-placed, so they belong here).
Type: attribute set of (open submodule of attribute set of raw value)
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.resources.vm.<name>.bootOrder
XO VMs: explicit boot order (c=disk n=network d=dvd). null = derived from tags (transient ⇒ dnc). Replaces the tag heuristic as the authored form; emitted via the post-create fix hook either way.
Type: null or one of "cnd", "dnc"
Default:
null
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.resources.vm.<name>.env
Logical environment label; with stack selects the leaf tf stack (“env.stack”).
Type: string
Default: none (required when its feature is enabled)
Example:
"platform"
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.resources.vm.<name>.nixos
This machine’s NixOS module function ({ config, helpers, … }: { … }). Replaces the parallel fleet.hostsRegistry entry; null = not colmena-managed (installer-provisioned, non-NixOS, …).
Type: null or unspecified value
Default:
null
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.resources.vm.<name>.provides
This machine IS a member of the named provider instance — the recursive estate link (a PVE node that is itself an XO VM). Drives derived defaults (hypervisor scrape targets) and makes the layer dependency queryable.
Type: null or string
Default:
null
Example:
"proxmox.skrybit-pve"
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.resources.vm.<name>.scope
ADR-097: “estate” marks a singleton serving every fleet on this substrate (may derive from all fleets’ manifests); “fleet” (default) sees only its own namespace.
Type: one of "fleet", "estate"
Default:
"fleet"
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.resources.vm.<name>.secrets
Secret declaration facet ({ file; instances.
Type: null or (attribute set of raw value)
Default:
null
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.resources.vm.<name>.stack
Stack grouping within env.
Type: string
Default: none (required when its feature is enabled)
Example:
"core"
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.secrets
Map of provider-config-key → SOPS path. Emitter resolves each
to $${data.sops_file.secrets.data["<dotted-path>"]} so secrets
never appear in config.tf.json.
Type: attribute set of string
Default:
{ }
Example:
{ api_token = "integrations/proxmox/api_token"; }
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.source
Terraform provider source address (e.g. bpg/proxmox).
Type: string
Default: none (required when its feature is enabled)
Example:
"bpg/proxmox"
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.state.prefix
S3 key prefix for this instance’s tfstate(s). Full path: s3://
Type: string
Default: none (required when its feature is enabled)
Example:
"proxmox-dev"
Declared by: nix/fleet/providers
fleet.providers.grafana.<name>.version
Version constraint for required_providers.
Type: string
Default: none (required when its feature is enabled)
Example:
"0.66.3"
Declared by: nix/fleet/providers
fleet.providers.proxmox
Proxmox provider instances, keyed by name (e.g. prod, dev).
Type: attribute set of (submodule)
Default:
{ }
Example:
{
dev = {
source = "bpg/proxmox";
version = "0.66.3";
endpoint = "https://192.0.2.10:8006/";
secrets.api_token = "integrations/proxmox/api_token";
state.prefix = "proxmox-dev";
cluster.primary_node = "pve";
};
}
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server
Proxmox Backup Server provider instances, keyed by name. Separate
from proxmox because PBS runs on a different daemon (port 8007)
and uses a different provider (Tinyblargon/proxmox-backup-server).
Type: attribute set of (submodule)
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.cluster
Proxmox-cluster-specific info. Empty for non-Proxmox providers.
Type: submodule
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.cluster.ha_manager
Whether the cluster runs the PVE HA manager. Informational — not consumed by any emitter yet.
Type: boolean
Default:
false
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.cluster.node_addresses
Node name → SSH host used by out-of-band local-exec steps (fleet.compute.
Type: attribute set of string
Default:
{ }
Example:
{
pve1 = "198.51.100.11";
pve2 = "pve2.mgmt.example.internal";
}
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.cluster.nodes
Cluster member names. More than one entry makes the instance multi-node, which forces every compute entry on it to set node explicitly (validator-enforced).
Type: list of string
Default:
[ ]
Example:
[
"pve-alpha"
"pve-beta"
]
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.cluster.primary_node
Fallback placement target: compute/resource entries that leave node empty are provisioned here.
Type: string
Default:
""
Example:
"pve-alpha"
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.destruction_policy
- strict: emit prevent_destroy=true on EVERY resource in this instance
- standard: emit prevent_destroy=true only on stateful-tagged resources
- permissive: emit prevent_destroy only on explicit protect=true
Type: one of "strict", "standard", "permissive"
Default:
"standard"
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.endpoint
API endpoint URL. Optional — provider may derive from secrets.
Type: null or string
Default:
null
Example:
"https://192.0.2.10:8006/"
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.insecure
Skip TLS verification (internal step-ca cert).
Type: boolean
Default:
true
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.minVersion
Lowest Proxmox VE major.minor this instance is expected to run. fleetkit’s zero-touch NixOS LXC first boot needs PVE 9 (its NixOS LXC setup plugin writes the guest’s eth0.network from the container’s net0 at create time); fleet pve status warns when the live node is older. Informational for non-PVE providers.
Type: string
Default:
"9.0"
Example:
"9.0"
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.nodes
Hypervisor members of this instance, as typed objects (mgmt_ip, placed machines). Complements cluster.nodes (names only); a name present in either counts as a member.
Type: attribute set of (submodule)
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.nodes.<name>.mgmt_ip
Management/API address of this hypervisor node. Feeds derived scrape targets when the node is not provides-linked to a fleet VM.
Type: null or string
Default:
null
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.nodes.<name>.resources
Machines placed on this node.
Type: submodule
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.nodes.<name>.resources.lxc
LXC containers placed on this node.
Type: attribute set of (open submodule of attribute set of raw value)
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.nodes.<name>.resources.lxc.<name>.bootOrder
XO VMs: explicit boot order (c=disk n=network d=dvd). null = derived from tags (transient ⇒ dnc). Replaces the tag heuristic as the authored form; emitted via the post-create fix hook either way.
Type: null or one of "cnd", "dnc"
Default:
null
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.nodes.<name>.resources.lxc.<name>.env
Logical environment label; with stack selects the leaf tf stack (“env.stack”).
Type: string
Default: none (required when its feature is enabled)
Example:
"platform"
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.nodes.<name>.resources.lxc.<name>.nixos
This machine’s NixOS module function ({ config, helpers, … }: { … }). Replaces the parallel fleet.hostsRegistry entry; null = not colmena-managed (installer-provisioned, non-NixOS, …).
Type: null or unspecified value
Default:
null
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.nodes.<name>.resources.lxc.<name>.provides
This machine IS a member of the named provider instance — the recursive estate link (a PVE node that is itself an XO VM). Drives derived defaults (hypervisor scrape targets) and makes the layer dependency queryable.
Type: null or string
Default:
null
Example:
"proxmox.skrybit-pve"
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.nodes.<name>.resources.lxc.<name>.scope
ADR-097: “estate” marks a singleton serving every fleet on this substrate (may derive from all fleets’ manifests); “fleet” (default) sees only its own namespace.
Type: one of "fleet", "estate"
Default:
"fleet"
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.nodes.<name>.resources.lxc.<name>.secrets
Secret declaration facet ({ file; instances.
Type: null or (attribute set of raw value)
Default:
null
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.nodes.<name>.resources.lxc.<name>.stack
Stack grouping within env.
Type: string
Default: none (required when its feature is enabled)
Example:
"core"
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.nodes.<name>.resources.vm
KVM/QEMU VMs placed on this node.
Type: attribute set of (open submodule of attribute set of raw value)
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.nodes.<name>.resources.vm.<name>.bootOrder
XO VMs: explicit boot order (c=disk n=network d=dvd). null = derived from tags (transient ⇒ dnc). Replaces the tag heuristic as the authored form; emitted via the post-create fix hook either way.
Type: null or one of "cnd", "dnc"
Default:
null
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.nodes.<name>.resources.vm.<name>.env
Logical environment label; with stack selects the leaf tf stack (“env.stack”).
Type: string
Default: none (required when its feature is enabled)
Example:
"platform"
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.nodes.<name>.resources.vm.<name>.nixos
This machine’s NixOS module function ({ config, helpers, … }: { … }). Replaces the parallel fleet.hostsRegistry entry; null = not colmena-managed (installer-provisioned, non-NixOS, …).
Type: null or unspecified value
Default:
null
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.nodes.<name>.resources.vm.<name>.provides
This machine IS a member of the named provider instance — the recursive estate link (a PVE node that is itself an XO VM). Drives derived defaults (hypervisor scrape targets) and makes the layer dependency queryable.
Type: null or string
Default:
null
Example:
"proxmox.skrybit-pve"
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.nodes.<name>.resources.vm.<name>.scope
ADR-097: “estate” marks a singleton serving every fleet on this substrate (may derive from all fleets’ manifests); “fleet” (default) sees only its own namespace.
Type: one of "fleet", "estate"
Default:
"fleet"
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.nodes.<name>.resources.vm.<name>.secrets
Secret declaration facet ({ file; instances.
Type: null or (attribute set of raw value)
Default:
null
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.nodes.<name>.resources.vm.<name>.stack
Stack grouping within env.
Type: string
Default: none (required when its feature is enabled)
Example:
"core"
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.pool
XCP-ng pool info (master host, primary SR/network). Empty for non-XO providers.
Type: attribute set
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.resources
Provider-scoped resources by kind — pools/acls/zones/checks per this provider’s kind map (v2-types.nix), plus lxc/vm.
Type: open submodule of attribute set of attribute set of attribute set of raw value
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.resources.lxc
Instance-scoped containers (single-node instances; multi-node clusters place under nodes.
Type: attribute set of (open submodule of attribute set of raw value)
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.resources.lxc.<name>.bootOrder
XO VMs: explicit boot order (c=disk n=network d=dvd). null = derived from tags (transient ⇒ dnc). Replaces the tag heuristic as the authored form; emitted via the post-create fix hook either way.
Type: null or one of "cnd", "dnc"
Default:
null
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.resources.lxc.<name>.env
Logical environment label; with stack selects the leaf tf stack (“env.stack”).
Type: string
Default: none (required when its feature is enabled)
Example:
"platform"
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.resources.lxc.<name>.nixos
This machine’s NixOS module function ({ config, helpers, … }: { … }). Replaces the parallel fleet.hostsRegistry entry; null = not colmena-managed (installer-provisioned, non-NixOS, …).
Type: null or unspecified value
Default:
null
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.resources.lxc.<name>.provides
This machine IS a member of the named provider instance — the recursive estate link (a PVE node that is itself an XO VM). Drives derived defaults (hypervisor scrape targets) and makes the layer dependency queryable.
Type: null or string
Default:
null
Example:
"proxmox.skrybit-pve"
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.resources.lxc.<name>.scope
ADR-097: “estate” marks a singleton serving every fleet on this substrate (may derive from all fleets’ manifests); “fleet” (default) sees only its own namespace.
Type: one of "fleet", "estate"
Default:
"fleet"
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.resources.lxc.<name>.secrets
Secret declaration facet ({ file; instances.
Type: null or (attribute set of raw value)
Default:
null
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.resources.lxc.<name>.stack
Stack grouping within env.
Type: string
Default: none (required when its feature is enabled)
Example:
"core"
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.resources.vm
Instance-scoped VMs (XO VMs are pool-placed, so they belong here).
Type: attribute set of (open submodule of attribute set of raw value)
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.resources.vm.<name>.bootOrder
XO VMs: explicit boot order (c=disk n=network d=dvd). null = derived from tags (transient ⇒ dnc). Replaces the tag heuristic as the authored form; emitted via the post-create fix hook either way.
Type: null or one of "cnd", "dnc"
Default:
null
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.resources.vm.<name>.env
Logical environment label; with stack selects the leaf tf stack (“env.stack”).
Type: string
Default: none (required when its feature is enabled)
Example:
"platform"
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.resources.vm.<name>.nixos
This machine’s NixOS module function ({ config, helpers, … }: { … }). Replaces the parallel fleet.hostsRegistry entry; null = not colmena-managed (installer-provisioned, non-NixOS, …).
Type: null or unspecified value
Default:
null
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.resources.vm.<name>.provides
This machine IS a member of the named provider instance — the recursive estate link (a PVE node that is itself an XO VM). Drives derived defaults (hypervisor scrape targets) and makes the layer dependency queryable.
Type: null or string
Default:
null
Example:
"proxmox.skrybit-pve"
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.resources.vm.<name>.scope
ADR-097: “estate” marks a singleton serving every fleet on this substrate (may derive from all fleets’ manifests); “fleet” (default) sees only its own namespace.
Type: one of "fleet", "estate"
Default:
"fleet"
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.resources.vm.<name>.secrets
Secret declaration facet ({ file; instances.
Type: null or (attribute set of raw value)
Default:
null
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.resources.vm.<name>.stack
Stack grouping within env.
Type: string
Default: none (required when its feature is enabled)
Example:
"core"
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.secrets
Map of provider-config-key → SOPS path. Emitter resolves each
to $${data.sops_file.secrets.data["<dotted-path>"]} so secrets
never appear in config.tf.json.
Type: attribute set of string
Default:
{ }
Example:
{ api_token = "integrations/proxmox/api_token"; }
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.source
Terraform provider source address (e.g. bpg/proxmox).
Type: string
Default: none (required when its feature is enabled)
Example:
"bpg/proxmox"
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.state.prefix
S3 key prefix for this instance’s tfstate(s). Full path: s3://
Type: string
Default: none (required when its feature is enabled)
Example:
"proxmox-dev"
Declared by: nix/fleet/providers
fleet.providers.proxmox-backup-server.<name>.version
Version constraint for required_providers.
Type: string
Default: none (required when its feature is enabled)
Example:
"0.66.3"
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.cluster
Proxmox-cluster-specific info. Empty for non-Proxmox providers.
Type: submodule
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.cluster.ha_manager
Whether the cluster runs the PVE HA manager. Informational — not consumed by any emitter yet.
Type: boolean
Default:
false
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.cluster.node_addresses
Node name → SSH host used by out-of-band local-exec steps (fleet.compute.
Type: attribute set of string
Default:
{ }
Example:
{
pve1 = "198.51.100.11";
pve2 = "pve2.mgmt.example.internal";
}
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.cluster.nodes
Cluster member names. More than one entry makes the instance multi-node, which forces every compute entry on it to set node explicitly (validator-enforced).
Type: list of string
Default:
[ ]
Example:
[
"pve-alpha"
"pve-beta"
]
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.cluster.primary_node
Fallback placement target: compute/resource entries that leave node empty are provisioned here.
Type: string
Default:
""
Example:
"pve-alpha"
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.destruction_policy
- strict: emit prevent_destroy=true on EVERY resource in this instance
- standard: emit prevent_destroy=true only on stateful-tagged resources
- permissive: emit prevent_destroy only on explicit protect=true
Type: one of "strict", "standard", "permissive"
Default:
"standard"
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.endpoint
API endpoint URL. Optional — provider may derive from secrets.
Type: null or string
Default:
null
Example:
"https://192.0.2.10:8006/"
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.insecure
Skip TLS verification (internal step-ca cert).
Type: boolean
Default:
true
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.minVersion
Lowest Proxmox VE major.minor this instance is expected to run. fleetkit’s zero-touch NixOS LXC first boot needs PVE 9 (its NixOS LXC setup plugin writes the guest’s eth0.network from the container’s net0 at create time); fleet pve status warns when the live node is older. Informational for non-PVE providers.
Type: string
Default:
"9.0"
Example:
"9.0"
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.nodes
Hypervisor members of this instance, as typed objects (mgmt_ip, placed machines). Complements cluster.nodes (names only); a name present in either counts as a member.
Type: attribute set of (submodule)
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.nodes.<name>.mgmt_ip
Management/API address of this hypervisor node. Feeds derived scrape targets when the node is not provides-linked to a fleet VM.
Type: null or string
Default:
null
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.nodes.<name>.resources
Machines placed on this node.
Type: submodule
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.nodes.<name>.resources.lxc
LXC containers placed on this node.
Type: attribute set of (open submodule of attribute set of raw value)
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.nodes.<name>.resources.lxc.<name>.bootOrder
XO VMs: explicit boot order (c=disk n=network d=dvd). null = derived from tags (transient ⇒ dnc). Replaces the tag heuristic as the authored form; emitted via the post-create fix hook either way.
Type: null or one of "cnd", "dnc"
Default:
null
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.nodes.<name>.resources.lxc.<name>.env
Logical environment label; with stack selects the leaf tf stack (“env.stack”).
Type: string
Default: none (required when its feature is enabled)
Example:
"platform"
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.nodes.<name>.resources.lxc.<name>.nixos
This machine’s NixOS module function ({ config, helpers, … }: { … }). Replaces the parallel fleet.hostsRegistry entry; null = not colmena-managed (installer-provisioned, non-NixOS, …).
Type: null or unspecified value
Default:
null
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.nodes.<name>.resources.lxc.<name>.provides
This machine IS a member of the named provider instance — the recursive estate link (a PVE node that is itself an XO VM). Drives derived defaults (hypervisor scrape targets) and makes the layer dependency queryable.
Type: null or string
Default:
null
Example:
"proxmox.skrybit-pve"
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.nodes.<name>.resources.lxc.<name>.scope
ADR-097: “estate” marks a singleton serving every fleet on this substrate (may derive from all fleets’ manifests); “fleet” (default) sees only its own namespace.
Type: one of "fleet", "estate"
Default:
"fleet"
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.nodes.<name>.resources.lxc.<name>.secrets
Secret declaration facet ({ file; instances.
Type: null or (attribute set of raw value)
Default:
null
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.nodes.<name>.resources.lxc.<name>.stack
Stack grouping within env.
Type: string
Default: none (required when its feature is enabled)
Example:
"core"
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.nodes.<name>.resources.vm
KVM/QEMU VMs placed on this node.
Type: attribute set of (open submodule of attribute set of raw value)
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.nodes.<name>.resources.vm.<name>.bootOrder
XO VMs: explicit boot order (c=disk n=network d=dvd). null = derived from tags (transient ⇒ dnc). Replaces the tag heuristic as the authored form; emitted via the post-create fix hook either way.
Type: null or one of "cnd", "dnc"
Default:
null
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.nodes.<name>.resources.vm.<name>.env
Logical environment label; with stack selects the leaf tf stack (“env.stack”).
Type: string
Default: none (required when its feature is enabled)
Example:
"platform"
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.nodes.<name>.resources.vm.<name>.nixos
This machine’s NixOS module function ({ config, helpers, … }: { … }). Replaces the parallel fleet.hostsRegistry entry; null = not colmena-managed (installer-provisioned, non-NixOS, …).
Type: null or unspecified value
Default:
null
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.nodes.<name>.resources.vm.<name>.provides
This machine IS a member of the named provider instance — the recursive estate link (a PVE node that is itself an XO VM). Drives derived defaults (hypervisor scrape targets) and makes the layer dependency queryable.
Type: null or string
Default:
null
Example:
"proxmox.skrybit-pve"
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.nodes.<name>.resources.vm.<name>.scope
ADR-097: “estate” marks a singleton serving every fleet on this substrate (may derive from all fleets’ manifests); “fleet” (default) sees only its own namespace.
Type: one of "fleet", "estate"
Default:
"fleet"
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.nodes.<name>.resources.vm.<name>.secrets
Secret declaration facet ({ file; instances.
Type: null or (attribute set of raw value)
Default:
null
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.nodes.<name>.resources.vm.<name>.stack
Stack grouping within env.
Type: string
Default: none (required when its feature is enabled)
Example:
"core"
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.pool
XCP-ng pool info (master host, primary SR/network). Empty for non-XO providers.
Type: attribute set
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.resources
Provider-scoped resources by kind — pools/acls/zones/checks per this provider’s kind map (v2-types.nix), plus lxc/vm.
Type: open submodule of attribute set of attribute set of attribute set of raw value
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.resources.lxc
Instance-scoped containers (single-node instances; multi-node clusters place under nodes.
Type: attribute set of (open submodule of attribute set of raw value)
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.resources.lxc.<name>.bootOrder
XO VMs: explicit boot order (c=disk n=network d=dvd). null = derived from tags (transient ⇒ dnc). Replaces the tag heuristic as the authored form; emitted via the post-create fix hook either way.
Type: null or one of "cnd", "dnc"
Default:
null
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.resources.lxc.<name>.env
Logical environment label; with stack selects the leaf tf stack (“env.stack”).
Type: string
Default: none (required when its feature is enabled)
Example:
"platform"
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.resources.lxc.<name>.nixos
This machine’s NixOS module function ({ config, helpers, … }: { … }). Replaces the parallel fleet.hostsRegistry entry; null = not colmena-managed (installer-provisioned, non-NixOS, …).
Type: null or unspecified value
Default:
null
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.resources.lxc.<name>.provides
This machine IS a member of the named provider instance — the recursive estate link (a PVE node that is itself an XO VM). Drives derived defaults (hypervisor scrape targets) and makes the layer dependency queryable.
Type: null or string
Default:
null
Example:
"proxmox.skrybit-pve"
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.resources.lxc.<name>.scope
ADR-097: “estate” marks a singleton serving every fleet on this substrate (may derive from all fleets’ manifests); “fleet” (default) sees only its own namespace.
Type: one of "fleet", "estate"
Default:
"fleet"
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.resources.lxc.<name>.secrets
Secret declaration facet ({ file; instances.
Type: null or (attribute set of raw value)
Default:
null
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.resources.lxc.<name>.stack
Stack grouping within env.
Type: string
Default: none (required when its feature is enabled)
Example:
"core"
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.resources.vm
Instance-scoped VMs (XO VMs are pool-placed, so they belong here).
Type: attribute set of (open submodule of attribute set of raw value)
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.resources.vm.<name>.bootOrder
XO VMs: explicit boot order (c=disk n=network d=dvd). null = derived from tags (transient ⇒ dnc). Replaces the tag heuristic as the authored form; emitted via the post-create fix hook either way.
Type: null or one of "cnd", "dnc"
Default:
null
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.resources.vm.<name>.env
Logical environment label; with stack selects the leaf tf stack (“env.stack”).
Type: string
Default: none (required when its feature is enabled)
Example:
"platform"
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.resources.vm.<name>.nixos
This machine’s NixOS module function ({ config, helpers, … }: { … }). Replaces the parallel fleet.hostsRegistry entry; null = not colmena-managed (installer-provisioned, non-NixOS, …).
Type: null or unspecified value
Default:
null
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.resources.vm.<name>.provides
This machine IS a member of the named provider instance — the recursive estate link (a PVE node that is itself an XO VM). Drives derived defaults (hypervisor scrape targets) and makes the layer dependency queryable.
Type: null or string
Default:
null
Example:
"proxmox.skrybit-pve"
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.resources.vm.<name>.scope
ADR-097: “estate” marks a singleton serving every fleet on this substrate (may derive from all fleets’ manifests); “fleet” (default) sees only its own namespace.
Type: one of "fleet", "estate"
Default:
"fleet"
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.resources.vm.<name>.secrets
Secret declaration facet ({ file; instances.
Type: null or (attribute set of raw value)
Default:
null
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.resources.vm.<name>.stack
Stack grouping within env.
Type: string
Default: none (required when its feature is enabled)
Example:
"core"
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.secrets
Map of provider-config-key → SOPS path. Emitter resolves each
to $${data.sops_file.secrets.data["<dotted-path>"]} so secrets
never appear in config.tf.json.
Type: attribute set of string
Default:
{ }
Example:
{ api_token = "integrations/proxmox/api_token"; }
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.source
Terraform provider source address (e.g. bpg/proxmox).
Type: string
Default: none (required when its feature is enabled)
Example:
"bpg/proxmox"
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.state.prefix
S3 key prefix for this instance’s tfstate(s). Full path: s3://
Type: string
Default: none (required when its feature is enabled)
Example:
"proxmox-dev"
Declared by: nix/fleet/providers
fleet.providers.proxmox.<name>.version
Version constraint for required_providers.
Type: string
Default: none (required when its feature is enabled)
Example:
"0.66.3"
Declared by: nix/fleet/providers
fleet.providers.random
hashicorp/random — random_password/id/uuid/string/bytes generated in-plan.
Type: null or (submodule)
Default:
null
Declared by: nix/fleet/providers
fleet.providers.random.endpoint
Daemon/host URL — docker only (e.g. ssh://root@192.0.2.50 or tcp://host:2376).
Type: null or string
Default:
null
Example:
"ssh://root@192.0.2.50"
Declared by: nix/fleet/providers
fleet.providers.random.secrets
Map of provider-config-key → SOPS path (docker TLS certs, etc.).
Type: attribute set of string
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.random.source
Terraform provider source address (e.g. hashicorp/random).
Type: string
Default: none (required when its feature is enabled)
Example:
"hashicorp/random"
Declared by: nix/fleet/providers
fleet.providers.random.version
Version constraint for required_providers.
Type: string
Default: none (required when its feature is enabled)
Example:
"3.6.2"
Declared by: nix/fleet/providers
fleet.providers.time
hashicorp/time — time_sleep (post-create waits), time_static/rotating.
Type: null or (submodule)
Default:
null
Declared by: nix/fleet/providers
fleet.providers.time.endpoint
Daemon/host URL — docker only (e.g. ssh://root@192.0.2.50 or tcp://host:2376).
Type: null or string
Default:
null
Example:
"ssh://root@192.0.2.50"
Declared by: nix/fleet/providers
fleet.providers.time.secrets
Map of provider-config-key → SOPS path (docker TLS certs, etc.).
Type: attribute set of string
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.time.source
Terraform provider source address (e.g. hashicorp/random).
Type: string
Default: none (required when its feature is enabled)
Example:
"hashicorp/random"
Declared by: nix/fleet/providers
fleet.providers.time.version
Version constraint for required_providers.
Type: string
Default: none (required when its feature is enabled)
Example:
"3.6.2"
Declared by: nix/fleet/providers
fleet.providers.tls
hashicorp/tls — private keys, CSRs, self-/locally-signed certs (feeds step-ca).
Type: null or (submodule)
Default:
null
Declared by: nix/fleet/providers
fleet.providers.tls.endpoint
Daemon/host URL — docker only (e.g. ssh://root@192.0.2.50 or tcp://host:2376).
Type: null or string
Default:
null
Example:
"ssh://root@192.0.2.50"
Declared by: nix/fleet/providers
fleet.providers.tls.secrets
Map of provider-config-key → SOPS path (docker TLS certs, etc.).
Type: attribute set of string
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.tls.source
Terraform provider source address (e.g. hashicorp/random).
Type: string
Default: none (required when its feature is enabled)
Example:
"hashicorp/random"
Declared by: nix/fleet/providers
fleet.providers.tls.version
Version constraint for required_providers.
Type: string
Default: none (required when its feature is enabled)
Example:
"3.6.2"
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra
Xen Orchestra provider instances, keyed by name (e.g. main).
Type: attribute set of (submodule)
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.cluster
Proxmox-cluster-specific info. Empty for non-Proxmox providers.
Type: submodule
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.cluster.ha_manager
Whether the cluster runs the PVE HA manager. Informational — not consumed by any emitter yet.
Type: boolean
Default:
false
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.cluster.node_addresses
Node name → SSH host used by out-of-band local-exec steps (fleet.compute.
Type: attribute set of string
Default:
{ }
Example:
{
pve1 = "198.51.100.11";
pve2 = "pve2.mgmt.example.internal";
}
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.cluster.nodes
Cluster member names. More than one entry makes the instance multi-node, which forces every compute entry on it to set node explicitly (validator-enforced).
Type: list of string
Default:
[ ]
Example:
[
"pve-alpha"
"pve-beta"
]
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.cluster.primary_node
Fallback placement target: compute/resource entries that leave node empty are provisioned here.
Type: string
Default:
""
Example:
"pve-alpha"
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.destruction_policy
- strict: emit prevent_destroy=true on EVERY resource in this instance
- standard: emit prevent_destroy=true only on stateful-tagged resources
- permissive: emit prevent_destroy only on explicit protect=true
Type: one of "strict", "standard", "permissive"
Default:
"standard"
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.endpoint
API endpoint URL. Optional — provider may derive from secrets.
Type: null or string
Default:
null
Example:
"https://192.0.2.10:8006/"
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.insecure
Skip TLS verification (internal step-ca cert).
Type: boolean
Default:
true
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.minVersion
Lowest Proxmox VE major.minor this instance is expected to run. fleetkit’s zero-touch NixOS LXC first boot needs PVE 9 (its NixOS LXC setup plugin writes the guest’s eth0.network from the container’s net0 at create time); fleet pve status warns when the live node is older. Informational for non-PVE providers.
Type: string
Default:
"9.0"
Example:
"9.0"
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.nodes
Hypervisor members of this instance, as typed objects (mgmt_ip, placed machines). Complements cluster.nodes (names only); a name present in either counts as a member.
Type: attribute set of (submodule)
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.nodes.<name>.mgmt_ip
Management/API address of this hypervisor node. Feeds derived scrape targets when the node is not provides-linked to a fleet VM.
Type: null or string
Default:
null
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.nodes.<name>.resources
Machines placed on this node.
Type: submodule
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.nodes.<name>.resources.lxc
LXC containers placed on this node.
Type: attribute set of (open submodule of attribute set of raw value)
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.nodes.<name>.resources.lxc.<name>.bootOrder
XO VMs: explicit boot order (c=disk n=network d=dvd). null = derived from tags (transient ⇒ dnc). Replaces the tag heuristic as the authored form; emitted via the post-create fix hook either way.
Type: null or one of "cnd", "dnc"
Default:
null
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.nodes.<name>.resources.lxc.<name>.env
Logical environment label; with stack selects the leaf tf stack (“env.stack”).
Type: string
Default: none (required when its feature is enabled)
Example:
"platform"
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.nodes.<name>.resources.lxc.<name>.nixos
This machine’s NixOS module function ({ config, helpers, … }: { … }). Replaces the parallel fleet.hostsRegistry entry; null = not colmena-managed (installer-provisioned, non-NixOS, …).
Type: null or unspecified value
Default:
null
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.nodes.<name>.resources.lxc.<name>.provides
This machine IS a member of the named provider instance — the recursive estate link (a PVE node that is itself an XO VM). Drives derived defaults (hypervisor scrape targets) and makes the layer dependency queryable.
Type: null or string
Default:
null
Example:
"proxmox.skrybit-pve"
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.nodes.<name>.resources.lxc.<name>.scope
ADR-097: “estate” marks a singleton serving every fleet on this substrate (may derive from all fleets’ manifests); “fleet” (default) sees only its own namespace.
Type: one of "fleet", "estate"
Default:
"fleet"
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.nodes.<name>.resources.lxc.<name>.secrets
Secret declaration facet ({ file; instances.
Type: null or (attribute set of raw value)
Default:
null
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.nodes.<name>.resources.lxc.<name>.stack
Stack grouping within env.
Type: string
Default: none (required when its feature is enabled)
Example:
"core"
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.nodes.<name>.resources.vm
KVM/QEMU VMs placed on this node.
Type: attribute set of (open submodule of attribute set of raw value)
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.nodes.<name>.resources.vm.<name>.bootOrder
XO VMs: explicit boot order (c=disk n=network d=dvd). null = derived from tags (transient ⇒ dnc). Replaces the tag heuristic as the authored form; emitted via the post-create fix hook either way.
Type: null or one of "cnd", "dnc"
Default:
null
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.nodes.<name>.resources.vm.<name>.env
Logical environment label; with stack selects the leaf tf stack (“env.stack”).
Type: string
Default: none (required when its feature is enabled)
Example:
"platform"
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.nodes.<name>.resources.vm.<name>.nixos
This machine’s NixOS module function ({ config, helpers, … }: { … }). Replaces the parallel fleet.hostsRegistry entry; null = not colmena-managed (installer-provisioned, non-NixOS, …).
Type: null or unspecified value
Default:
null
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.nodes.<name>.resources.vm.<name>.provides
This machine IS a member of the named provider instance — the recursive estate link (a PVE node that is itself an XO VM). Drives derived defaults (hypervisor scrape targets) and makes the layer dependency queryable.
Type: null or string
Default:
null
Example:
"proxmox.skrybit-pve"
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.nodes.<name>.resources.vm.<name>.scope
ADR-097: “estate” marks a singleton serving every fleet on this substrate (may derive from all fleets’ manifests); “fleet” (default) sees only its own namespace.
Type: one of "fleet", "estate"
Default:
"fleet"
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.nodes.<name>.resources.vm.<name>.secrets
Secret declaration facet ({ file; instances.
Type: null or (attribute set of raw value)
Default:
null
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.nodes.<name>.resources.vm.<name>.stack
Stack grouping within env.
Type: string
Default: none (required when its feature is enabled)
Example:
"core"
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.pool
XCP-ng pool info (master host, primary SR/network). Empty for non-XO providers.
Type: attribute set
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.resources
Provider-scoped resources by kind — pools/acls/zones/checks per this provider’s kind map (v2-types.nix), plus lxc/vm.
Type: open submodule of attribute set of attribute set of attribute set of raw value
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.resources.lxc
Instance-scoped containers (single-node instances; multi-node clusters place under nodes.
Type: attribute set of (open submodule of attribute set of raw value)
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.resources.lxc.<name>.bootOrder
XO VMs: explicit boot order (c=disk n=network d=dvd). null = derived from tags (transient ⇒ dnc). Replaces the tag heuristic as the authored form; emitted via the post-create fix hook either way.
Type: null or one of "cnd", "dnc"
Default:
null
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.resources.lxc.<name>.env
Logical environment label; with stack selects the leaf tf stack (“env.stack”).
Type: string
Default: none (required when its feature is enabled)
Example:
"platform"
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.resources.lxc.<name>.nixos
This machine’s NixOS module function ({ config, helpers, … }: { … }). Replaces the parallel fleet.hostsRegistry entry; null = not colmena-managed (installer-provisioned, non-NixOS, …).
Type: null or unspecified value
Default:
null
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.resources.lxc.<name>.provides
This machine IS a member of the named provider instance — the recursive estate link (a PVE node that is itself an XO VM). Drives derived defaults (hypervisor scrape targets) and makes the layer dependency queryable.
Type: null or string
Default:
null
Example:
"proxmox.skrybit-pve"
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.resources.lxc.<name>.scope
ADR-097: “estate” marks a singleton serving every fleet on this substrate (may derive from all fleets’ manifests); “fleet” (default) sees only its own namespace.
Type: one of "fleet", "estate"
Default:
"fleet"
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.resources.lxc.<name>.secrets
Secret declaration facet ({ file; instances.
Type: null or (attribute set of raw value)
Default:
null
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.resources.lxc.<name>.stack
Stack grouping within env.
Type: string
Default: none (required when its feature is enabled)
Example:
"core"
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.resources.vm
Instance-scoped VMs (XO VMs are pool-placed, so they belong here).
Type: attribute set of (open submodule of attribute set of raw value)
Default:
{ }
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.resources.vm.<name>.bootOrder
XO VMs: explicit boot order (c=disk n=network d=dvd). null = derived from tags (transient ⇒ dnc). Replaces the tag heuristic as the authored form; emitted via the post-create fix hook either way.
Type: null or one of "cnd", "dnc"
Default:
null
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.resources.vm.<name>.env
Logical environment label; with stack selects the leaf tf stack (“env.stack”).
Type: string
Default: none (required when its feature is enabled)
Example:
"platform"
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.resources.vm.<name>.nixos
This machine’s NixOS module function ({ config, helpers, … }: { … }). Replaces the parallel fleet.hostsRegistry entry; null = not colmena-managed (installer-provisioned, non-NixOS, …).
Type: null or unspecified value
Default:
null
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.resources.vm.<name>.provides
This machine IS a member of the named provider instance — the recursive estate link (a PVE node that is itself an XO VM). Drives derived defaults (hypervisor scrape targets) and makes the layer dependency queryable.
Type: null or string
Default:
null
Example:
"proxmox.skrybit-pve"
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.resources.vm.<name>.scope
ADR-097: “estate” marks a singleton serving every fleet on this substrate (may derive from all fleets’ manifests); “fleet” (default) sees only its own namespace.
Type: one of "fleet", "estate"
Default:
"fleet"
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.resources.vm.<name>.secrets
Secret declaration facet ({ file; instances.
Type: null or (attribute set of raw value)
Default:
null
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.resources.vm.<name>.stack
Stack grouping within env.
Type: string
Default: none (required when its feature is enabled)
Example:
"core"
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.secrets
Map of provider-config-key → SOPS path. Emitter resolves each
to $${data.sops_file.secrets.data["<dotted-path>"]} so secrets
never appear in config.tf.json.
Type: attribute set of string
Default:
{ }
Example:
{ api_token = "integrations/proxmox/api_token"; }
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.source
Terraform provider source address (e.g. bpg/proxmox).
Type: string
Default: none (required when its feature is enabled)
Example:
"bpg/proxmox"
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.state.prefix
S3 key prefix for this instance’s tfstate(s). Full path: s3://
Type: string
Default: none (required when its feature is enabled)
Example:
"proxmox-dev"
Declared by: nix/fleet/providers
fleet.providers.xen-orchestra.<name>.version
Version constraint for required_providers.
Type: string
Default: none (required when its feature is enabled)
Example:
"0.66.3"
Declared by: nix/fleet/providers
fleet.resources
8 options
fleet.resources
Non-OS resources across all providers. Entries live in nix/hosts/**/resources/ and nix/fleet/dns/inputs.nix.
Type: attribute set of (open submodule of (attribute set))
Default:
{ }
Example:
{
pool-platform = {
env = "infra";
stack = "core";
provider_instance = "proxmox.dev";
kind = "pool";
pool_id = "platform";
comment = "Platform-tier containers";
};
}
Declared by: nix/fleet/resources.nix
fleet.resources.<name>.env
Logical env (infra / platform / dev / prod / …). Together with stack forms the leaf stack id <env>.<stack>.
Type: string
Default: none (required when its feature is enabled)
Example:
"infra"
Declared by: nix/fleet/resources.nix
fleet.resources.<name>.kind
What the resource is. Selects the emitter code path and the kind-specific freeform fields it expects (validated in the emitter, not here).
Type: one of "bridge", "pool", "group", "acl", "realm", "dns", "download", "file", "cluster-options", "metrics-server", "sdn-zone", "sdn-vnet", "sdn-subnet", "linux-vlan", "storage-nfs", "storage-dir", "xo-pool", "xo-network", "xo-sr", "xo-template", "xo-iso", "cloudflare-zone", "sm-check", "grafana-contact-point", "grafana-message-template", "grafana-folder", "grafana-rule-group"
Default: none (required when its feature is enabled)
Declared by: nix/fleet/resources.nix
fleet.resources.<name>.node
PVE cluster member name for node-scoped resources. Empty = cluster.primary_node.
Type: string
Default:
""
Declared by: nix/fleet/resources.nix
fleet.resources.<name>.notes
Free-text audit note (why the resource exists, tickets, caveats). Informational only — never affects the emitted Terraform.
Type: string
Default:
""
Declared by: nix/fleet/resources.nix
fleet.resources.<name>.protect
Emit lifecycle.prevent_destroy = true on the generated Terraform resource. The fleet tf destroy preflight refuses to target protected resources.
Type: boolean
Default:
false
Declared by: nix/fleet/resources.nix
fleet.resources.<name>.provider_instance
Pointer to fleet.providers: “
Type: string matching the pattern ^[a-z-]+\.[a-z][a-z0-9-]*$
Default: none (required when its feature is enabled)
Example:
"proxmox.dev"
Declared by: nix/fleet/resources.nix
fleet.resources.<name>.stack
Dot-path stack label within env (e.g. “core”, “bitcoin.mainnet”). Selects which fleet tf leaf stack emits this resource.
Type: string
Default: none (required when its feature is enabled)
Example:
"core"
Declared by: nix/fleet/resources.nix
fleet.other
65 options
fleet.STATEFUL_TAGS
Tags whose presence forces protect=true (enforced by validator).
Type: list of string
Default:
[
"bitcoin"
"indexer"
"postgres"
"timescaledb"
"messaging"
"auth"
"backup"
"storage"
]
Declared by: nix/fleet
fleet.access.apps
OIDC application slug → list of Authentik groups allowed to log in (null = any authenticated user).
Type: attribute set of (null or (list of string))
Default:
{ }
Example:
{
grafana = [ "platform-admins" ];
wiki = null; # any authenticated user
}
Declared by: nix/fleet/users
fleet.access.users
Fleet identity registry. Keyed by Authentik username.
Type: attribute set of (submodule)
Default:
{ }
Example:
{
alice = {
email = "alice@example.com";
groups = [ "platform-admins" ];
ssh_keys = [ "ssh-ed25519 AAAA... alice@laptop" ];
};
}
Declared by: nix/fleet/users
fleet.access.users.<name>.email
Primary email address. Required by Authentik user.email.
Type: string
Default: none (required when its feature is enabled)
Example:
"alice@example.com"
Declared by: nix/fleet/users
fleet.access.users.<name>.groups
Authentik groups (LDAP-side membership). NOT the same as Linux groups on a VM — those are declared on cloud_init.users[*].extra_groups.
Type: list of string
Default:
[ ]
Example:
[
"platform-admins"
]
Declared by: nix/fleet/users
fleet.access.users.<name>.ssh_keys
SSH public keys. Published as Authentik attributes.sshPublicKey for SSSD; injected into dev-VM cloud-init.
Type: list of string
Default:
[ ]
Example:
[
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIExampleExampleExampleExampleExampleExa alice@laptop"
]
Declared by: nix/fleet/users
fleet.access.users.<name>.type
Maps to Authentik’s user.type field.
Type: one of "internal", "service_account"
Default:
"internal"
Declared by: nix/fleet/users
fleet.dnsPublicOverrides
name → literal IP, merged into publicDnsRecords last. Split-DNS overrides for names whose public zone answer (WAN IP) is not reachable from inside the fleet (no NAT hairpin) — point them at the internal ingress instead.
Type: attribute set of string
Default:
{ }
Example:
{ vpn = "192.0.2.2"; }
Declared by: nix/fleet/dns
fleet.dnsStaticRecords
name → literal IP, merged into dnsRecords last. For service aliases pinned to an address rather than a fleet host (edge services like ca/ntp/dns on the ingress box).
Type: attribute set of string
Default:
{ }
Example:
{ ntp = "192.0.2.2"; ca = "192.0.2.2"; }
Declared by: nix/fleet/dns
fleet.fleets
Named fleet namespaces sharing this estate’s substrate (ADR-097).
Type: attribute set of (submodule)
Default:
{ }
Example:
{ jeirslab.providers.proxmox.main.nodes.pve1.resources.lxc.foo = { vm_id = 9101; }; }
Declared by: nix/fleet/providers
fleet.fleets.<name>.description
What / whose namespace this is (shown in docs projections).
Type: null or string
Default:
null
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers
Provider forest of this fleet:
Type: attribute set of attribute set of (submodule)
Default:
{ }
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.cluster
Proxmox-cluster-specific info. Empty for non-Proxmox providers.
Type: submodule
Default:
{ }
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.cluster.ha_manager
Whether the cluster runs the PVE HA manager. Informational — not consumed by any emitter yet.
Type: boolean
Default:
false
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.cluster.node_addresses
Node name → SSH host used by out-of-band local-exec steps (fleet.compute.
Type: attribute set of string
Default:
{ }
Example:
{
pve1 = "198.51.100.11";
pve2 = "pve2.mgmt.example.internal";
}
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.cluster.nodes
Cluster member names. More than one entry makes the instance multi-node, which forces every compute entry on it to set node explicitly (validator-enforced).
Type: list of string
Default:
[ ]
Example:
[
"pve-alpha"
"pve-beta"
]
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.cluster.primary_node
Fallback placement target: compute/resource entries that leave node empty are provisioned here.
Type: string
Default:
""
Example:
"pve-alpha"
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.destruction_policy
- strict: emit prevent_destroy=true on EVERY resource in this instance
- standard: emit prevent_destroy=true only on stateful-tagged resources
- permissive: emit prevent_destroy only on explicit protect=true
Type: one of "strict", "standard", "permissive"
Default:
"standard"
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.endpoint
API endpoint URL. Optional — provider may derive from secrets.
Type: null or string
Default:
null
Example:
"https://192.0.2.10:8006/"
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.insecure
Skip TLS verification (internal step-ca cert).
Type: boolean
Default:
true
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.minVersion
Lowest Proxmox VE major.minor this instance is expected to run. fleetkit’s zero-touch NixOS LXC first boot needs PVE 9 (its NixOS LXC setup plugin writes the guest’s eth0.network from the container’s net0 at create time); fleet pve status warns when the live node is older. Informational for non-PVE providers.
Type: string
Default:
"9.0"
Example:
"9.0"
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.nodes
Hypervisor members of this instance, as typed objects (mgmt_ip, placed machines). Complements cluster.nodes (names only); a name present in either counts as a member.
Type: attribute set of (submodule)
Default:
{ }
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.nodes.<name>.mgmt_ip
Management/API address of this hypervisor node. Feeds derived scrape targets when the node is not provides-linked to a fleet VM.
Type: null or string
Default:
null
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.nodes.<name>.resources
Machines placed on this node.
Type: submodule
Default:
{ }
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.nodes.<name>.resources.lxc
LXC containers placed on this node.
Type: attribute set of (open submodule of attribute set of raw value)
Default:
{ }
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.nodes.<name>.resources.lxc.<name>.bootOrder
XO VMs: explicit boot order (c=disk n=network d=dvd). null = derived from tags (transient ⇒ dnc). Replaces the tag heuristic as the authored form; emitted via the post-create fix hook either way.
Type: null or one of "cnd", "dnc"
Default:
null
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.nodes.<name>.resources.lxc.<name>.env
Logical environment label; with stack selects the leaf tf stack (“env.stack”).
Type: string
Default: none (required when its feature is enabled)
Example:
"platform"
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.nodes.<name>.resources.lxc.<name>.nixos
This machine’s NixOS module function ({ config, helpers, … }: { … }). Replaces the parallel fleet.hostsRegistry entry; null = not colmena-managed (installer-provisioned, non-NixOS, …).
Type: null or unspecified value
Default:
null
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.nodes.<name>.resources.lxc.<name>.provides
This machine IS a member of the named provider instance — the recursive estate link (a PVE node that is itself an XO VM). Drives derived defaults (hypervisor scrape targets) and makes the layer dependency queryable.
Type: null or string
Default:
null
Example:
"proxmox.skrybit-pve"
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.nodes.<name>.resources.lxc.<name>.scope
ADR-097: “estate” marks a singleton serving every fleet on this substrate (may derive from all fleets’ manifests); “fleet” (default) sees only its own namespace.
Type: one of "fleet", "estate"
Default:
"fleet"
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.nodes.<name>.resources.lxc.<name>.secrets
Secret declaration facet ({ file; instances.
Type: null or (attribute set of raw value)
Default:
null
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.nodes.<name>.resources.lxc.<name>.stack
Stack grouping within env.
Type: string
Default: none (required when its feature is enabled)
Example:
"core"
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.nodes.<name>.resources.vm
KVM/QEMU VMs placed on this node.
Type: attribute set of (open submodule of attribute set of raw value)
Default:
{ }
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.nodes.<name>.resources.vm.<name>.bootOrder
XO VMs: explicit boot order (c=disk n=network d=dvd). null = derived from tags (transient ⇒ dnc). Replaces the tag heuristic as the authored form; emitted via the post-create fix hook either way.
Type: null or one of "cnd", "dnc"
Default:
null
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.nodes.<name>.resources.vm.<name>.env
Logical environment label; with stack selects the leaf tf stack (“env.stack”).
Type: string
Default: none (required when its feature is enabled)
Example:
"platform"
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.nodes.<name>.resources.vm.<name>.nixos
This machine’s NixOS module function ({ config, helpers, … }: { … }). Replaces the parallel fleet.hostsRegistry entry; null = not colmena-managed (installer-provisioned, non-NixOS, …).
Type: null or unspecified value
Default:
null
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.nodes.<name>.resources.vm.<name>.provides
This machine IS a member of the named provider instance — the recursive estate link (a PVE node that is itself an XO VM). Drives derived defaults (hypervisor scrape targets) and makes the layer dependency queryable.
Type: null or string
Default:
null
Example:
"proxmox.skrybit-pve"
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.nodes.<name>.resources.vm.<name>.scope
ADR-097: “estate” marks a singleton serving every fleet on this substrate (may derive from all fleets’ manifests); “fleet” (default) sees only its own namespace.
Type: one of "fleet", "estate"
Default:
"fleet"
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.nodes.<name>.resources.vm.<name>.secrets
Secret declaration facet ({ file; instances.
Type: null or (attribute set of raw value)
Default:
null
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.nodes.<name>.resources.vm.<name>.stack
Stack grouping within env.
Type: string
Default: none (required when its feature is enabled)
Example:
"core"
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.pool
XCP-ng pool info (master host, primary SR/network). Empty for non-XO providers.
Type: attribute set
Default:
{ }
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.resources
Provider-scoped resources by kind — pools/acls/zones/checks per this provider’s kind map (v2-types.nix), plus lxc/vm.
Type: open submodule of attribute set of attribute set of attribute set of raw value
Default:
{ }
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.resources.lxc
Instance-scoped containers (single-node instances; multi-node clusters place under nodes.
Type: attribute set of (open submodule of attribute set of raw value)
Default:
{ }
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.resources.lxc.<name>.bootOrder
XO VMs: explicit boot order (c=disk n=network d=dvd). null = derived from tags (transient ⇒ dnc). Replaces the tag heuristic as the authored form; emitted via the post-create fix hook either way.
Type: null or one of "cnd", "dnc"
Default:
null
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.resources.lxc.<name>.env
Logical environment label; with stack selects the leaf tf stack (“env.stack”).
Type: string
Default: none (required when its feature is enabled)
Example:
"platform"
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.resources.lxc.<name>.nixos
This machine’s NixOS module function ({ config, helpers, … }: { … }). Replaces the parallel fleet.hostsRegistry entry; null = not colmena-managed (installer-provisioned, non-NixOS, …).
Type: null or unspecified value
Default:
null
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.resources.lxc.<name>.provides
This machine IS a member of the named provider instance — the recursive estate link (a PVE node that is itself an XO VM). Drives derived defaults (hypervisor scrape targets) and makes the layer dependency queryable.
Type: null or string
Default:
null
Example:
"proxmox.skrybit-pve"
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.resources.lxc.<name>.scope
ADR-097: “estate” marks a singleton serving every fleet on this substrate (may derive from all fleets’ manifests); “fleet” (default) sees only its own namespace.
Type: one of "fleet", "estate"
Default:
"fleet"
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.resources.lxc.<name>.secrets
Secret declaration facet ({ file; instances.
Type: null or (attribute set of raw value)
Default:
null
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.resources.lxc.<name>.stack
Stack grouping within env.
Type: string
Default: none (required when its feature is enabled)
Example:
"core"
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.resources.vm
Instance-scoped VMs (XO VMs are pool-placed, so they belong here).
Type: attribute set of (open submodule of attribute set of raw value)
Default:
{ }
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.resources.vm.<name>.bootOrder
XO VMs: explicit boot order (c=disk n=network d=dvd). null = derived from tags (transient ⇒ dnc). Replaces the tag heuristic as the authored form; emitted via the post-create fix hook either way.
Type: null or one of "cnd", "dnc"
Default:
null
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.resources.vm.<name>.env
Logical environment label; with stack selects the leaf tf stack (“env.stack”).
Type: string
Default: none (required when its feature is enabled)
Example:
"platform"
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.resources.vm.<name>.nixos
This machine’s NixOS module function ({ config, helpers, … }: { … }). Replaces the parallel fleet.hostsRegistry entry; null = not colmena-managed (installer-provisioned, non-NixOS, …).
Type: null or unspecified value
Default:
null
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.resources.vm.<name>.provides
This machine IS a member of the named provider instance — the recursive estate link (a PVE node that is itself an XO VM). Drives derived defaults (hypervisor scrape targets) and makes the layer dependency queryable.
Type: null or string
Default:
null
Example:
"proxmox.skrybit-pve"
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.resources.vm.<name>.scope
ADR-097: “estate” marks a singleton serving every fleet on this substrate (may derive from all fleets’ manifests); “fleet” (default) sees only its own namespace.
Type: one of "fleet", "estate"
Default:
"fleet"
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.resources.vm.<name>.secrets
Secret declaration facet ({ file; instances.
Type: null or (attribute set of raw value)
Default:
null
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.resources.vm.<name>.stack
Stack grouping within env.
Type: string
Default: none (required when its feature is enabled)
Example:
"core"
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.secrets
Map of provider-config-key → SOPS path. Emitter resolves each
to $${data.sops_file.secrets.data["<dotted-path>"]} so secrets
never appear in config.tf.json.
Type: attribute set of string
Default:
{ }
Example:
{ api_token = "integrations/proxmox/api_token"; }
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.source
Terraform provider source address (e.g. bpg/proxmox).
Type: string
Default: none (required when its feature is enabled)
Example:
"bpg/proxmox"
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.state.prefix
S3 key prefix for this instance’s tfstate(s). Full path: s3://
Type: string
Default: none (required when its feature is enabled)
Example:
"proxmox-dev"
Declared by: nix/fleet/providers
fleet.fleets.<name>.providers.<name>.<name>.version
Version constraint for required_providers.
Type: string
Default: none (required when its feature is enabled)
Example:
"0.66.3"
Declared by: nix/fleet/providers
fleet.hostsRegistry
{ hostName -> NixOS module function }. Consumed by nix/lib/default.nix mkHosts. Populated by each host file under nix/hosts/**/.
Type: attribute set of unspecified value
Default:
{ }
Example:
{
app-db = { config, pkgs, helpers, ... }: {
infra.data.postgresql.enable = true;
};
}
Declared by: nix/fleet/hosts-registry.nix
fleet.secrets
Secret resources: {
Type: attribute set of attribute set of raw value
Default:
{ }
Declared by: nix/fleet/v2-normalize.nix
fleet.serviceAliasMap
subdomain → fleet.compute key. Each alias resolves to that host’s internal IP in both dnsRecords and publicDnsRecords. Single source of truth for “which fleet host hosts which service” — also readable by external-DNS zone resources so public and internal record sets stay consistent.
Type: attribute set of string
Default:
{ }
Example:
{ grafana = "observe"; wiki = "docs-host"; }
Declared by: nix/fleet/dns
Infra modules
NixOS service modules every fleet host can enable, grouped into strata (infra.<stratum>.<module>). Each module reads its site values from fleet.settings.*.
infra.network— 53 optionsinfra.ingress— 25 optionsinfra.pki— 16 optionsinfra.observability— 38 optionsinfra.data— 57 optionsinfra.build— 43 optionsinfra.mail— 9 optionsinfra.auth— 8 optionsinfra.provisioning— 21 optionsinfra.integrations— 8 optionsinfra.services— 14 optionsinfra.networking— 4 optionsinfra.platform— 3 optionsinfra.githubAccessToken— 1 optionsinfra.nix— 1 options
infra.network
53 options
infra.network.dhcp
infra.network.dhcp.dnsServers
DNS servers advertised to clients (fleet DNS + public fallback).
Type: list of string
Default:
config.fleet.network.dns_servers
Example:
[
"192.0.2.100"
"1.1.1.1"
]
Declared by: nix/modules/infra/network/dhcp
infra.network.dhcp.domain
Domain name advertised to clients. Must be non-null when infra.network.dhcp is enabled (asserted).
Type: null or string
Default:
config.fleet.network.dns_domain
Example:
"example.lan"
Declared by: nix/modules/infra/network/dhcp
infra.network.dhcp.enable
Whether to enable Kea DHCPv4 server.
Type: boolean
Default:
false
Example:
true
Declared by: nix/modules/infra/network/dhcp
infra.network.dhcp.gateway
Default gateway advertised to clients.
Type: string
Default: none (required when its feature is enabled)
Example:
"192.0.2.1"
Declared by: nix/modules/infra/network/dhcp
infra.network.dhcp.interface
Network interface to listen on.
Type: string
Default:
"eth1"
Declared by: nix/modules/infra/network/dhcp
infra.network.dhcp.poolEnd
End of DHCP pool range.
Type: string
Default: none (required when its feature is enabled)
Example:
"192.0.2.99"
Declared by: nix/modules/infra/network/dhcp
infra.network.dhcp.poolStart
Start of DHCP pool range.
Type: string
Default: none (required when its feature is enabled)
Example:
"192.0.2.50"
Declared by: nix/modules/infra/network/dhcp
infra.network.dhcp.reservations
Static DHCP reservations (MAC → IP).
Type: list of (submodule)
Default:
[ ]
Example:
[ { hostname = "printer"; hw-address = "52:54:00:12:34:56"; ip-address = "192.0.2.240"; } ]
Declared by: nix/modules/infra/network/dhcp
infra.network.dhcp.reservations.*.hostname
Hostname handed to the client in the lease (Kea hostname reservation field).
Type: string
Default: none (required when its feature is enabled)
Declared by: nix/modules/infra/network/dhcp
infra.network.dhcp.reservations.*.hw-address
Client MAC address the reservation matches on (colon-separated hex, e.g. “52:54:00:12:34:56”).
Type: string
Default: none (required when its feature is enabled)
Declared by: nix/modules/infra/network/dhcp
infra.network.dhcp.reservations.*.ip-address
Fixed IPv4 address assigned to the matching client. Must lie inside the served subnet.
Type: string
Default: none (required when its feature is enabled)
Declared by: nix/modules/infra/network/dhcp
infra.network.dhcp.subnet
CIDR subnet for DHCP allocation.
Type: string
Default: none (required when its feature is enabled)
Example:
"192.0.2.0/24"
Declared by: nix/modules/infra/network/dhcp
infra.network.dhcp.validLifetime
DHCP lease valid lifetime in seconds.
Type: signed integer
Default:
43200
Declared by: nix/modules/infra/network/dhcp
infra.network.dns
infra.network.dns.domain
DNS zone to serve. Must be non-null when infra.network.dns is enabled (asserted).
Type: null or string
Default:
config.fleet.settings.domain.internal
Declared by: nix/modules/infra/network/dns
infra.network.dns.enable
Whether to enable CoreDNS internal DNS server.
Type: boolean
Default:
false
Example:
true
Declared by: nix/modules/infra/network/dns
infra.network.dns.extraZones
Additional internal DNS zones beyond domain. Outer attrset
key is the zone name; inner attrset is record-name → IP.
Record names can be multi-label (e.g., “platform.pve”,
“nodes.btc.pve”) to express hierarchy within the zone.
Empty IPs are skipped, same as records.
Type: attribute set of attribute set of string
Default:
{ }
Example:
{ "example.xen" = { pbs = "192.0.2.99"; "platform.pve" = "192.0.2.98"; }; }
Declared by: nix/modules/infra/network/dns
infra.network.dns.forwarders
Upstream DNS servers for non-local queries.
Type: list of string
Default:
config.fleet.settings.network.upstreamResolvers
Declared by: nix/modules/infra/network/dns
infra.network.dns.listenAddress
Address CoreDNS listens on.
Type: string
Default:
"0.0.0.0"
Declared by: nix/modules/infra/network/dns
infra.network.dns.port
Port CoreDNS listens on.
Type: 16 bit unsigned integer; between 0 and 65535 (both inclusive)
Default:
53
Declared by: nix/modules/infra/network/dns
infra.network.dns.publicDomain
Public DNS zone for internal (split-horizon) resolution of public names. Only forced when publicRecords is non-empty (asserted non-null then).
Type: null or string
Default:
config.fleet.settings.domain.base
Declared by: nix/modules/infra/network/dns
infra.network.dns.publicRecords
Hostname → IP mapping for the public domain zone (internal resolution only).
Type: attribute set of string
Default:
{ }
Example:
{ vpn = "192.0.2.2"; }
Declared by: nix/modules/infra/network/dns
infra.network.dns.records
Hostname → IP mapping for A records in the internal zone.
Type: attribute set of string
Default:
{ }
Example:
{ app-db = "192.0.2.104"; grafana = "192.0.2.4"; }
Declared by: nix/modules/infra/network/dns
infra.network.tailnet
infra.network.tailnet.advertiseExitNode
Advertise this node as an exit node.
Type: boolean
Default:
false
Declared by: nix/modules/infra/network/tailnet
infra.network.tailnet.advertiseRoutes
CIDR routes this node should advertise.
Type: list of string
Default:
[ ]
Example:
[
"192.0.2.0/24"
]
Declared by: nix/modules/infra/network/tailnet
infra.network.tailnet.advertiseTags
Tailscale ACL tags this node should advertise. Each entry must
be of the form “tag:tailscale up — the drift-fix oneshot below re-runs up
when this list changes so rebuilds reliably re-tag the node.
Type: list of string
Default:
[ ]
Example:
[
"tag:env-dev"
"tag:role-postgres"
]
Declared by: nix/modules/infra/network/tailnet
infra.network.tailnet.authKeyFile
Path to file containing Tailscale/Headscale preauth key.
Type: null or absolute path
Default:
null
Example:
config.sops.secrets."services/tailscale/preauth_key".path
Declared by: nix/modules/infra/network/tailnet
infra.network.tailnet.enable
Whether to enable Tailscale client.
Type: boolean
Default:
false
Example:
true
Declared by: nix/modules/infra/network/tailnet
infra.network.tailnet.extraUpFlags
Extra flags appended to tailscale up.
Type: list of string
Default:
[ ]
Example:
[
"--login-server=https://vpn.example.dev"
"--accept-dns=false"
]
Declared by: nix/modules/infra/network/tailnet
infra.network.tailnet.fetchAuthKey
Fetch the tailnet preauth key over HTTPS at boot instead of carrying a SOPS copy on every host: a pre-autoconnect oneshot curls url, writes the body to outputPath (mode 0400), and authKeyFile defaults to that path. null disables fetching.
Type: null or (submodule)
Default:
null
Declared by: nix/modules/infra/network/tailnet
infra.network.tailnet.fetchAuthKey.outputPath
Where the fetched key is persisted on disk (mode 0400).
Type: string
Default:
"/var/lib/tailscale-fetch/preauth.key"
Declared by: nix/modules/infra/network/tailnet
infra.network.tailnet.fetchAuthKey.url
HTTPS endpoint that returns the preauth key as raw text body.
Type: string
Default: none (required when its feature is enabled)
Example:
"https://headscale.example.lan/internal/preauth/fleet-bot"
Declared by: nix/modules/infra/network/tailnet
infra.network.tailnet.fleetNode
One-line fleet tailnet enrollment. When true this implies
enable and derives the following — all via mkDefault, so
any individual knob stays overridable per-host:
userspace = true— LXC containers have no /dev/net/tunfetchAuthKey.url— fleet.settings.tailnet.preauthKeyUrl (when set; else SOPS auth key)advertiseTags— this host’s ACL tags, from the fleet manifest via lib/headscale-policy.nixextraUpFlags— –login-server (from fleet.settings.tailnet.controlUrl), –hostname=, –accept-dns=false Turns the per-host tailnet rollout into a single line per host regardless of that host’s module structure.
Type: boolean
Default:
false
Declared by: nix/modules/infra/network/tailnet
infra.network.tailnet.funnel.enable
Whether to enable Tailscale Funnel (public internet exposure).
Type: boolean
Default:
false
Example:
true
Declared by: nix/modules/infra/network/tailnet
infra.network.tailnet.funnel.routes
Path-based routes to expose via Tailscale Funnel.
Type: attribute set of (submodule)
Default:
{ }
Example:
{
headplane = {
backendPort = 3100;
path = "/admin";
};
headscale = {
backendPort = 8080;
path = "/";
};
}
Declared by: nix/modules/infra/network/tailnet
infra.network.tailnet.funnel.routes.<name>.backendAddress
Address the route proxies to (combined with backendPort). Default targets loopback on this host.
Type: string
Default:
"127.0.0.1"
Declared by: nix/modules/infra/network/tailnet
infra.network.tailnet.funnel.routes.<name>.backendPort
Local port to proxy to.
Type: 16 bit unsigned integer; between 0 and 65535 (both inclusive)
Default: none (required when its feature is enabled)
Declared by: nix/modules/infra/network/tailnet
infra.network.tailnet.funnel.routes.<name>.path
URL path to serve on the ts.net hostname.
Type: string
Default:
"/"
Declared by: nix/modules/infra/network/tailnet
infra.network.tailnet.outboundProxy
Local port for tailscaled’s outbound HTTP proxy
(--outbound-http-proxy-listen). Set this when a service on a
USERSPACE node needs to make outbound connections to tailnet peers.
In userspace mode tailscaled installs no kernel routes, so the host
cannot originate ordinary TCP to a tailnet IP at all — there is no
interface to send it out of. The node is reachable INBOUND (that is
what serveUI relies on) while every outbound connection fails, which
is a confusing asymmetry to debug: tailscale ping succeeds, because
it goes through the daemon rather than the kernel datapath, while
curl http://<tailnet-ip>/ has nowhere to send the packet.
With this set, point the client at http://localhost:
Type: null or 16 bit unsigned integer; between 0 and 65535 (both inclusive)
Default:
null
Example:
1055
Declared by: nix/modules/infra/network/tailnet
infra.network.tailnet.serve
Declarative Tailscale Serve raw-TCP forwarders — tailnet-only, never
funnelled to the public internet. Each entry exposes
tcp://<hostname>.<base-domain>:<servePort> over the tailnet and
forwards raw bytes to a local backend. In userspace mode (all fleet
LXCs) serve is the only way to accept inbound tailnet connections.
See ADR-036 (tailnet-only admin plane).
Type: attribute set of (submodule)
Default:
{ }
Example:
{ caddy = { servePort = 443; backendPort = 443; }; }
Declared by: nix/modules/infra/network/tailnet
infra.network.tailnet.serve.<name>.backendAddress
Local address to forward to.
Type: string
Default:
"127.0.0.1"
Declared by: nix/modules/infra/network/tailnet
infra.network.tailnet.serve.<name>.backendPort
Local TCP port to forward raw bytes to.
Type: 16 bit unsigned integer; between 0 and 65535 (both inclusive)
Default: none (required when its feature is enabled)
Declared by: nix/modules/infra/network/tailnet
infra.network.tailnet.serve.<name>.enable
Enable this Tailscale Serve forwarder.
Type: boolean
Default:
true
Declared by: nix/modules/infra/network/tailnet
infra.network.tailnet.serve.<name>.servePort
Tailnet-side TCP port exposed on this node’s MagicDNS name
(<hostname>.<base-domain>). This is a raw passthrough: TLS is
terminated by the backend (typically a local Caddy holding the
tailnet-suffix wildcard cert), NOT by tailscaled. headscale has
no tailscale cert/serve-HTTPS support (upstream #2527), so
--https/--tls-terminated-tcp are unusable here — this is
always a raw --tcp forwarder. See ADR-036.
Type: 16 bit unsigned integer; between 0 and 65535 (both inclusive)
Default:
443
Declared by: nix/modules/infra/network/tailnet
infra.network.tailnet.serveUI
Tailnet-only browser UIs. Each entry produces a Caddy vhost on this
host’s MagicDNS name with a browser-trusted per-host cert, fronted
by tailscale serve. Reachable only from tailnet members (no public
DNS record). The network is the gate — see ADR-036.
Type: attribute set of (submodule)
Default:
{ }
Example:
{ pgweb.backendPort = 8081; }
Declared by: nix/modules/infra/network/tailnet
infra.network.tailnet.serveUI.<name>.backendAddress
Local backend address.
Type: string
Default:
"127.0.0.1"
Declared by: nix/modules/infra/network/tailnet
infra.network.tailnet.serveUI.<name>.backendPort
Local backend port the UI listens on.
Type: 16 bit unsigned integer; between 0 and 65535 (both inclusive)
Default: none (required when its feature is enabled)
Declared by: nix/modules/infra/network/tailnet
infra.network.tailnet.serveUI.<name>.description
One-line, human-facing summary of what this UI is for.
Surfaced in the developer handbook by
nix run .#wiki-services. Keep it dev-facing (what you’d
use it for), not infra detail. Falls back to the matching
infra.services.<name>.description when left blank.
Type: string
Default:
""
Declared by: nix/modules/infra/network/tailnet
infra.network.tailnet.serveUI.<name>.enable
Expose this UI over the tailnet.
Type: boolean
Default:
true
Declared by: nix/modules/infra/network/tailnet
infra.network.tailnet.serveUI.<name>.path
URL path within the servePort vhost. “/” = the whole vhost
(at most one per (host, servePort)). “/foo” = a handle /foo*
block. Prefer distinct servePorts over paths unless the app
explicitly supports a base path.
Type: string
Default:
"/"
Declared by: nix/modules/infra/network/tailnet
infra.network.tailnet.serveUI.<name>.servePort
Tailnet-side TCP port. Reached at
https://<hostname>.<serveUIDomain>[:servePort]. For a host
running more than one UI, give each a distinct port (e.g. 443
and 8443) so every UI sits at its own vhost root — avoids the
sub-path breakage common to SPAs. Entries sharing a port are
combined into one vhost and disambiguated by path.
Type: 16 bit unsigned integer; between 0 and 65535 (both inclusive)
Default:
443
Declared by: nix/modules/infra/network/tailnet
infra.network.tailnet.serveUIDomain
MagicDNS base domain for serveUI hostnames (<hostname>.<this>). Must be non-null when serveUI entries exist (asserted).
Type: null or string
Default:
config.fleet.settings.domain.tailnetSuffix
Declared by: nix/modules/infra/network/tailnet
infra.network.tailnet.tailnetName
Tailnet or Headscale namespace name.
Type: null or string
Default:
null
Example:
"fleet-bot"
Declared by: nix/modules/infra/network/tailnet
infra.network.tailnet.userspace
Run tailscaled in userspace networking mode
(--tun=userspace-networking). Required for LXC containers
that don’t have /dev/net/tun passed through. Strongly preferred
on LXC anyway: the Proxmox host runs its own kernel-mode
tailscaled on a separate (cloud) tailnet, and granting LXCs
TUN passthrough breaks that isolation.
In userspace mode tailscaled does not install kernel routes
for tailnet IPs, so applications must use tailscale’s built-in
proxies — tailscale ssh, tailscale serve, or the SOCKS5
proxy at 127.0.0.1:1055 — rather than direct routing.
Type: boolean
Default:
false
Declared by: nix/modules/infra/network/tailnet
infra.ingress
25 options
infra.ingress.acmeCA
ACME CA directory URL (default: fleet.settings.internalCa.acmeDirectory). null ⇒ Let’s Encrypt production.
Type: null or string
Default:
config.fleet.settings.internalCa.acmeDirectory
Example:
"https://ca.example.internal:9000/acme/acme/directory"
Declared by: nix/modules/infra/ingress
infra.ingress.acmeCARootCert
Path to the ACME CA’s root certificate (default: fleet.settings.internalCa.certFile). Required with an internal CA.
Type: null or string
Default:
`config.fleet.settings.internalCa.certFile` (as a string) when set, else `null`
Declared by: nix/modules/infra/ingress
infra.ingress.acmeDnsApiBase
acme-dns update API base URL (the edge acme-dns host). Used by the acmedns DNS-01 provider to write _acme-challenge TXT records.
Type: string
Default:
"http://ingress.${config.fleet.settings.domain.internal}:8081"
Declared by: nix/modules/infra/ingress
infra.ingress.dataDir
Directory for Caddy data (certs, OCSP staples).
Type: string
Default:
"/var/lib/caddy"
Declared by: nix/modules/infra/ingress
infra.ingress.devCertIssuer
DNS-01 provider for public base-domain Let’s Encrypt certs:
- “cloudflare” (default, legacy): raw zone-wide Cloudflare token on this host. Being retired per ADR-026.
- “acmedns”: scoped per-host acme-dns credential (from
fleet pki acme-dns register <host>), no Cloudflare token on the host. Flip per-host during rollout, then make it the default.
Type: one of "cloudflare", "acmedns"
Default:
"cloudflare"
Declared by: nix/modules/infra/ingress
infra.ingress.devDomain
Auto-add public base-domain vhosts with Let’s Encrypt DNS-01 certs alongside the internal-domain ones.
Type: boolean
Default:
true
Declared by: nix/modules/infra/ingress
infra.ingress.email
Email for ACME account registration. Must be non-null when infra.ingress is enabled (asserted).
Type: null or string
Default:
config.fleet.settings.acmeEmail
Declared by: nix/modules/infra/ingress
infra.ingress.enable
Whether to enable Caddy reverse proxy with automatic HTTPS.
Type: boolean
Default:
false
Example:
true
Declared by: nix/modules/infra/ingress
infra.ingress.forwardAuth
When set, inject Authentik forward_auth into all auto-generated public base-domain vhosts. Defaults to enabled with the fleet’s configured outpost (fleet.settings.auth.outpostUrl). Set to null to disable.
Type: null or (submodule)
Default:
{ }
Declared by: nix/modules/infra/ingress
infra.ingress.forwardAuth.exclude
Service names (caddy.hostname values) to skip forward_auth. auth and headscale excluded by default to avoid redirect loops.
Type: list of string
Default:
[
"auth"
"headscale"
]
Declared by: nix/modules/infra/ingress
infra.ingress.forwardAuth.outpostUrl
Authentik embedded outpost base URL. null ⇒ no forward_auth injected.
Type: null or string
Default:
config.fleet.settings.auth.outpostUrl
Declared by: nix/modules/infra/ingress
infra.ingress.globalConfig
Extra global Caddyfile directives.
Type: strings concatenated with "\n"
Default:
""
Declared by: nix/modules/infra/ingress
infra.ingress.letsencryptDirectory
ACME directory for public Let’s Encrypt issuance (publicHttp01VirtualHosts). Point at the staging directory to test without burning prod rate limits.
Type: string
Default:
"https://acme-v02.api.letsencrypt.org/directory"
Example:
"https://acme-staging-v02.api.letsencrypt.org/directory"
Declared by: nix/modules/infra/ingress
infra.ingress.publicHttp01VirtualHosts
Public virtual hosts whose Let’s Encrypt cert is obtained over HTTP-01 / TLS-ALPN-01 — no DNS provider, no Cloudflare token, no acme-dns credential, no wildcard. Use for public names whose DNS is not in a zone we control. Each vhost overrides the global acme_ca (internal step-ca) with the public LE directory.
Type: attribute set of (submodule)
Default:
{ }
Example:
{ "www.example.org".extraConfig = "reverse_proxy http://127.0.0.1:8080"; }
Declared by: nix/modules/infra/ingress
infra.ingress.publicHttp01VirtualHosts.<name>.extraConfig
Caddyfile directives for this vhost (TLS handled by the injected Let’s Encrypt HTTP-01/TLS-ALPN-01 issuer).
Type: strings concatenated with "\n"
Default:
""
Declared by: nix/modules/infra/ingress
infra.ingress.publicVirtualHosts
Virtual hosts with Let’s Encrypt certs via Cloudflare DNS-01.
Type: attribute set of (submodule)
Default:
{ }
Example:
{ "app.example.dev".extraConfig = "reverse_proxy http://127.0.0.1:8080"; }
Declared by: nix/modules/infra/ingress
infra.ingress.publicVirtualHosts.<name>.extraConfig
Caddyfile directives for this public virtual host.
Type: strings concatenated with "\n"
Default:
""
Declared by: nix/modules/infra/ingress
infra.ingress.redirectPveToDev
Emit 301 redirects from internal-domain service vhosts to their public base-domain equivalents.
Type: boolean
Default:
false
Declared by: nix/modules/infra/ingress
infra.ingress.services
Services to reverse-proxy. Set automatically by infra modules.
Type: attribute set of (submodule)
Default:
{ }
Example:
{ grafana = { name = "grafana"; port = 3000; }; }
Declared by: nix/modules/infra/ingress
infra.ingress.services.<name>.host
Upstream host. Defaults to localhost.
Type: string
Default:
"127.0.0.1"
Declared by: nix/modules/infra/ingress
infra.ingress.services.<name>.name
Service name — becomes the FQDN prefix (
Type: string
Default: none (required when its feature is enabled)
Declared by: nix/modules/infra/ingress
infra.ingress.services.<name>.path
URL path. ‘/’ = own vhost. ‘/foo’ = path under hostname vhost.
Type: string
Default:
"/"
Declared by: nix/modules/infra/ingress
infra.ingress.services.<name>.port
Backend port on this host.
Type: 16 bit unsigned integer; between 0 and 65535 (both inclusive)
Default: none (required when its feature is enabled)
Declared by: nix/modules/infra/ingress
infra.ingress.virtualHosts
Additional manual virtual host definitions.
Type: attribute set of (submodule)
Default:
{ }
Example:
{ "wiki.example.pve".extraConfig = "reverse_proxy http://127.0.0.1:8000"; }
Declared by: nix/modules/infra/ingress
infra.ingress.virtualHosts.<name>.extraConfig
Caddyfile directives for this virtual host.
Type: strings concatenated with "\n"
Default:
""
Declared by: nix/modules/infra/ingress
infra.pki
16 options
infra.pki.acmeDns
infra.pki.acmeDns.apiAddress
Bind IP for the registration/update HTTP API. Internal interface — reachable on the LAN/tailnet, never WAN.
Type: string
Default:
config.infra.networking.internalIp
Declared by: nix/modules/infra/pki/acme-dns
infra.pki.acmeDns.apiPort
Port for the registration/update HTTP API.
Type: 16 bit unsigned integer; between 0 and 65535 (both inclusive)
Default:
8081
Declared by: nix/modules/infra/pki/acme-dns
infra.pki.acmeDns.dnsListen
Public DNS listener. Must be reachable from the internet (edge-router WAN :53 forward).
Type: string
Default:
"0.0.0.0:53"
Declared by: nix/modules/infra/pki/acme-dns
infra.pki.acmeDns.domain
Delegated subdomain acme-dns is authoritative for (NS-delegated from the parent zone in Cloudflare). Must be non-null when enabled (asserted).
Type: null or string
Default:
"acme-dns.${config.fleet.settings.domain.base}"
Declared by: nix/modules/infra/pki/acme-dns
infra.pki.acmeDns.enable
Whether to enable acme-dns DNS-01 delegation server (ADR-026).
Type: boolean
Default:
false
Example:
true
Declared by: nix/modules/infra/pki/acme-dns
infra.pki.acmeDns.nsadmin
SOA RNAME (admin contact; ‘@’ written as ‘.’). Must be non-null when enabled (asserted).
Type: null or string
Default:
"admin.${config.fleet.settings.domain.base}"
Declared by: nix/modules/infra/pki/acme-dns
infra.pki.acmeDns.nsname
Authoritative nameserver FQDN. Needs a public glue A record (emitted by the Cloudflare resource) pointing at publicIp. Must be non-null when enabled (asserted).
Type: null or string
Default:
"ns.acme-dns.${config.fleet.settings.domain.base}"
Declared by: nix/modules/infra/pki/acme-dns
infra.pki.acmeDns.publicIp
Public IP returned for the apex/NS A records and used as the glue target. For an edge host this is the fleet WAN IP. Must be non-null when enabled (asserted).
Type: null or string
Default:
config.fleet.settings.network.wanIp
Declared by: nix/modules/infra/pki/acme-dns
infra.pki.acmeDns.stateDir
State directory (SQLite registration DB).
Type: string
Default:
"/var/lib/acme-dns"
Declared by: nix/modules/infra/pki/acme-dns
infra.pki.ca
infra.pki.ca.address
Address step-ca listens on.
Type: string
Default:
"0.0.0.0"
Declared by: nix/modules/infra/pki/ca
infra.pki.ca.caName
Human-readable name for the Certificate Authority.
Type: string
Default:
"${config.fleet.settings.name} Internal CA"
Declared by: nix/modules/infra/pki/ca
infra.pki.ca.domain
FQDN for the CA server. Must be non-null when infra.pki.ca is enabled (asserted).
Type: null or string
Default:
"ca.${config.fleet.settings.domain.internal}"
Declared by: nix/modules/infra/pki/ca
infra.pki.ca.enable
Whether to enable Smallstep step-ca internal ACME server.
Type: boolean
Default:
false
Example:
true
Declared by: nix/modules/infra/pki/ca
infra.pki.ca.metricsPort
Port for the Prometheus metrics listener. step-ca exposes /metrics on a separate plain-HTTP listener (not the main HTTPS API port). Bound to 127.0.0.1 so it isn’t reachable off-host.
Type: 16 bit unsigned integer; between 0 and 65535 (both inclusive)
Default:
2400
Declared by: nix/modules/infra/pki/ca
infra.pki.ca.port
Port step-ca listens on.
Type: 16 bit unsigned integer; between 0 and 65535 (both inclusive)
Default:
9000
Declared by: nix/modules/infra/pki/ca
infra.pki.ca.provisioner
Default provisioner name.
Type: string
Default:
"acme"
Declared by: nix/modules/infra/pki/ca
infra.observability
38 options
infra.observability.alerts
infra.observability.alerts.enable
Whether this host contributes its alert rules to the fleet. When false,
none of this host’s infra.observability.alerts.rules are collected/provisioned by the
grafana host. Use to opt a host out of alerting entirely (e.g. signet).
Type: boolean
Default:
true
Declared by: nix/modules/infra/observability/alerts
infra.observability.alerts.group
Grafana alert group name these contributed rules land in.
Type: string
Default:
"Fleet — module-contributed"
Declared by: nix/modules/infra/observability/alerts
infra.observability.alerts.rules
Grafana alert-rule attrsets (built via grafana.mkAlertRule) contributed
by the modules enabled on this host. Mergeable — every module that wants
an alert appends to it. Consumed centrally by the grafana-stack module,
which gathers this across all nodes with infra.observability.alerts.enable = true.
Type: list of (attribute set)
Default:
[ ]
Example:
[ (grafana.mkAlertRule {
uid = "svc-down";
title = "Service down";
expr = "up{job=\"myservice\"} == 0";
for = "5m";
}) ]
Declared by: nix/modules/infra/observability/alerts
infra.observability.alloy
infra.observability.alloy.enable
Whether to enable Grafana Alloy telemetry agent.
Type: boolean
Default:
false
Example:
true
Declared by: nix/modules/infra/observability/alloy
infra.observability.alloy.extraConfig
Extra Alloy config appended to the main config. Use for additional scrape targets.
Type: strings concatenated with "\n"
Default:
""
Declared by: nix/modules/infra/observability/alloy
infra.observability.alloy.gateway.enable
Whether to enable OTLP gateway mode — central OTLP ingest fanning metrics/logs/traces into Prometheus/Loki/Tempo (INFRA-47 / ADR-038).
Type: boolean
Default:
false
Example:
true
Declared by: nix/modules/infra/observability/alloy
infra.observability.alloy.gateway.otlpGrpcAddress
Listen address for the OTLP/gRPC receiver. Public on the internal admin net.
Type: string
Default:
"0.0.0.0:4317"
Declared by: nix/modules/infra/observability/alloy
infra.observability.alloy.gateway.otlpHttpAddress
Listen address for the OTLP/HTTP receiver (the PVE metric server pushes here).
Type: string
Default:
"0.0.0.0:4318"
Declared by: nix/modules/infra/observability/alloy
infra.observability.alloy.gateway.tempoOtlpEndpoint
OTLP/gRPC endpoint of the local Tempo trace store. Loopback + non-default port so Tempo’s receiver does not collide with the gateway’s own :4317. Must match nix/modules/tempo otlpGrpcAddress.
Type: string
Default:
"127.0.0.1:14317"
Declared by: nix/modules/infra/observability/alloy
infra.observability.alloy.lokiUrl
Loki push endpoint URL. Must be non-null when infra.observability.alloy is enabled (asserted).
Type: null or string
Default:
config.fleet.settings.observability.lokiPushUrl
Declared by: nix/modules/infra/observability/alloy
infra.observability.alloy.prometheusUrl
Prometheus remote-write endpoint URL. Must be non-null when infra.observability.alloy is enabled (asserted).
Type: null or string
Default:
config.fleet.settings.observability.prometheusRemoteWriteUrl
Declared by: nix/modules/infra/observability/alloy
infra.observability.stack
infra.observability.stack.alertRulesDirs
Consumer-supplied directories of Grafana alert-rule provisioning YAML files (*.yaml). Merged with the framework’s Nix-built alert catalog into the single provisioned alerting path.
Type: list of absolute path
Default:
[ ]
Example:
[ ./alerts ]
Declared by: nix/modules/infra/observability/stack
infra.observability.stack.alerting.groupByAlertnameOnly
Alert titles grouped by alertname only (the tree default is
[alertname instance]): one Slack post per firing alert name across
all hosts, so a single host outage that fails 25 units is one message
listing them rather than 25 messages. Applied under both severity
routes.
Type: list of string
Default:
[
"Systemd Unit Failed"
]
Example:
[
"Systemd Unit Failed"
"Disk Low (warning)"
]
Declared by: nix/modules/infra/observability/stack
infra.observability.stack.alerting.repeatIntervals.critical
repeat_interval for the severity=critical route.
Type: string
Default:
"1h"
Declared by: nix/modules/infra/observability/stack
infra.observability.stack.alerting.repeatIntervals.default
Root notification policy repeat_interval — alerts without a severity label (or with one no tier matches).
Type: string
Default:
"4h"
Declared by: nix/modules/infra/observability/stack
infra.observability.stack.alerting.repeatIntervals.warning
repeat_interval for the severity=warning route.
Type: string
Default:
"24h"
Declared by: nix/modules/infra/observability/stack
infra.observability.stack.alerting.slack.criticalWebhookSecret
SOPS key (in sops.defaultSopsFile) holding a SECOND Slack incoming
webhook, bound to the channel that must see severity=critical
alerts. Provisions contact point slack-alerts and routes criticals
to it; every other severity stays on slack-fleet
(services/grafana/slack_webhook). A Slack webhook is bound to one
channel, so two channels need two webhooks — create the second in
Slack (App → Incoming Webhooks → Add to channel) and store it with
fleet devtools secrets keys add <this path> <webhook url>.
null keeps the single-channel setup. If the key is set but not yet
present in the sops file, evaluation WARNS and criticals fall back
to slack-fleet (so the deploy still succeeds); once the key exists
the next deploy wires the second channel automatically.
Type: null or string
Default:
null
Example:
"services/grafana/slack_webhook_alerts"
Declared by: nix/modules/infra/observability/stack
infra.observability.stack.dashboardsDirs
Consumer-supplied dashboards: Grafana folder name → directory of pre-rendered dashboard JSON files. Each entry becomes its own file provider (same mechanism as the built-in Fleet folder) and shows up as a folder of that name in the Grafana UI.
Type: attribute set of absolute path
Default:
{ }
Example:
{ "My App" = ./dashboards/my-app; }
Declared by: nix/modules/infra/observability/stack
infra.observability.stack.dataDir
Root directory for all observability data.
Type: string
Default:
"/var/lib/observability"
Declared by: nix/modules/infra/observability/stack
infra.observability.stack.enable
Whether to enable Self-hosted Grafana observability stack (Grafana + Loki + Prometheus).
Type: boolean
Default:
false
Example:
true
Declared by: nix/modules/infra/observability/stack
infra.observability.stack.extraDatasources
Extra Grafana datasources (verbatim provisioning attrsets) appended to the built-in Prometheus/Loki/Tempo ones — e.g. read-only PostgreSQL datasources for consumer dashboards. Secrets can be referenced with $__file{…} against SOPS-provisioned paths.
Type: list of (attribute set)
Default:
[ ]
Example:
[ { name = "app-db"; type = "postgres"; url = "192.0.2.104:5432"; jsonData.sslmode = "disable"; } ]
Declared by: nix/modules/infra/observability/stack
infra.observability.stack.grafana.domain
Grafana server domain for URL generation. Must be non-null when infra.observability.stack is enabled (asserted).
Type: null or string
Default:
config.fleet.settings.observability.grafanaDomain
Declared by: nix/modules/infra/observability/stack
infra.observability.stack.grafana.httpPort
Grafana HTTP listen port.
Type: 16 bit unsigned integer; between 0 and 65535 (both inclusive)
Default:
3000
Declared by: nix/modules/infra/observability/stack
infra.observability.stack.loki.httpPort
Loki HTTP listen port.
Type: 16 bit unsigned integer; between 0 and 65535 (both inclusive)
Default:
3100
Declared by: nix/modules/infra/observability/stack
infra.observability.stack.loki.retentionPeriod
How long to retain log data.
Type: string
Default:
"90d"
Declared by: nix/modules/infra/observability/stack
infra.observability.stack.oidc.clientId
OAuth2 client ID registered in Authentik.
Type: string
Default:
"grafana"
Declared by: nix/modules/infra/observability/stack
infra.observability.stack.oidc.enable
Whether to enable OIDC authentication via Authentik.
Type: boolean
Default:
false
Example:
true
Declared by: nix/modules/infra/observability/stack
infra.observability.stack.prometheus.httpPort
Prometheus HTTP listen port.
Type: 16 bit unsigned integer; between 0 and 65535 (both inclusive)
Default:
9090
Declared by: nix/modules/infra/observability/stack
infra.observability.stack.prometheus.retentionPeriod
How long to retain metric data.
Type: string
Default:
"14d"
Declared by: nix/modules/infra/observability/stack
infra.observability.stack.prometheus.scrapeInterval
Default scrape interval.
Type: string
Default:
"15s"
Declared by: nix/modules/infra/observability/stack
infra.observability.stack.smtp.enable
Whether to enable SMTP email via Resend for Grafana alert notifications.
Type: boolean
Default:
false
Example:
true
Declared by: nix/modules/infra/observability/stack
infra.observability.stack.smtp.fromAddress
Sender email address for Grafana alerts. Must be non-null when smtp.enable is set (asserted).
Type: null or string
Default:
"grafana@${config.fleet.settings.domain.base}"
Declared by: nix/modules/infra/observability/stack
infra.observability.stack.smtp.fromName
Sender display name for Grafana alert emails.
Type: string
Default:
"Grafana"
Declared by: nix/modules/infra/observability/stack
infra.observability.tempo
infra.observability.tempo.enable
Whether to enable Tempo trace store (INFRA-47 / ADR-038).
Type: boolean
Default:
false
Example:
true
Declared by: nix/modules/infra/observability/tempo
infra.observability.tempo.httpPort
Tempo HTTP/query API port — the Grafana Tempo datasource target.
Type: 16 bit unsigned integer; between 0 and 65535 (both inclusive)
Default:
3200
Declared by: nix/modules/infra/observability/tempo
infra.observability.tempo.mcpServer.enable
Whether to enable Tempo’s built-in MCP server (streamable HTTP at /api/mcp on the query frontend). Lets AI tooling run TraceQL against this Tempo over MCP. Opt-in per host so it only runs where we want it.
Type: boolean
Default:
false
Example:
true
Declared by: nix/modules/infra/observability/tempo
infra.observability.tempo.otlpGrpcAddress
OTLP/gRPC receiver address. Loopback + non-default port: only the local Alloy gateway writes here, and it must not clash with the gateway’s own :4317. Must match infra.observability.alloy.gateway.tempoOtlpEndpoint.
Type: string
Default:
"127.0.0.1:14317"
Declared by: nix/modules/infra/observability/tempo
infra.observability.tempo.retention
Trace block retention (compactor block_retention). Default 7 days.
Type: string
Default:
"168h"
Declared by: nix/modules/infra/observability/tempo
infra.data
57 options
infra.data.pgbouncer
infra.data.pgbouncer.authType
PgBouncer client auth type (must match the server’s; userlist holds the verifiers).
Type: string
Default:
"scram-sha-256"
Declared by: nix/modules/infra/data/pgbouncer
infra.data.pgbouncer.backendPort
Port the local PostgreSQL listens on (PgBouncer connects here).
Type: 16 bit unsigned integer; between 0 and 65535 (both inclusive)
Default:
5432
Declared by: nix/modules/infra/data/pgbouncer
infra.data.pgbouncer.databases
Database names to expose through PgBouncer (routed to the local PostgreSQL).
Type: list of string
Default:
[ ]
Example:
[
"app_db"
]
Declared by: nix/modules/infra/data/pgbouncer
infra.data.pgbouncer.defaultPoolSize
Server connections kept per (database, user) pair.
Type: signed integer
Default:
20
Declared by: nix/modules/infra/data/pgbouncer
infra.data.pgbouncer.enable
Whether to enable co-located PgBouncer connection pooler.
Type: boolean
Default:
false
Example:
true
Declared by: nix/modules/infra/data/pgbouncer
infra.data.pgbouncer.listenPort
Port PgBouncer listens on (the pooled port clients connect to).
Type: 16 bit unsigned integer; between 0 and 65535 (both inclusive)
Default:
6432
Declared by: nix/modules/infra/data/pgbouncer
infra.data.pgbouncer.maxClientConn
Max simultaneous client connections to PgBouncer.
Type: signed integer
Default:
200
Declared by: nix/modules/infra/data/pgbouncer
infra.data.pgbouncer.poolMode
Pooling mode. transaction = return the server connection after each TX (recommended for query/CRUD; not for session-state-dependent clients).
Type: one of "session", "transaction", "statement"
Default:
"transaction"
Declared by: nix/modules/infra/data/pgbouncer
infra.data.pgweb
infra.data.pgweb.auth.enable
HTTP basic auth in front of pgweb. Set false to rely solely on the
network gate — tailnet reachability via tailscale serve + the
headscale ACL (ADR-036). Acceptable for this read-only,
--bookmarks-only UI; note the ACL is currently wide-open *:*,
so “on the tailnet” today means any tailnet node, not just admins.
Type: boolean
Default:
true
Declared by: nix/modules/infra/data/pgweb
infra.data.pgweb.authUser
HTTP basic auth username (password from SOPS services/pgweb/auth_password). Only used when auth.enable.
Type: string
Default:
config.fleet.settings.name
Declared by: nix/modules/infra/data/pgweb
infra.data.pgweb.enable
Whether to enable pgweb — read-only Postgres web UI for the whole fleet.
Type: boolean
Default:
false
Example:
true
Declared by: nix/modules/infra/data/pgweb
infra.data.pgweb.httpPort
Local HTTP port (proxied by the per-host Caddy).
Type: 16 bit unsigned integer; between 0 and 65535 (both inclusive)
Default:
8081
Declared by: nix/modules/infra/data/pgweb
infra.data.postgresql
infra.data.postgresql.allowedSubnets
Subnets allowed to connect via TCP. Defaults to the fleet LAN CIDR when fleet.settings.network.lanCidr is set, otherwise [] (local connections only).
Type: list of string
Default:
[ config.fleet.settings.network.lanCidr ]
Example:
[
"192.0.2.0/24"
]
Declared by: nix/modules/infra/data/postgresql
infra.data.postgresql.authMethod
Authentication method for network connections.
Type: one of "scram-sha-256", "md5", "trust"
Default:
"scram-sha-256"
Declared by: nix/modules/infra/data/postgresql
infra.data.postgresql.backup.enable
Whether to enable pgbackrest → Garage S3 backup for this PG host.
Type: boolean
Default:
false
Example:
true
Declared by: nix/modules/infra/data/postgresql/pgbackrest.nix
infra.data.postgresql.backup.retention.profile
Retention profile — switchable per-host without re-bootstrapping the stanza. Bumping the profile keeps existing backups; lowering it prunes on next run.
- lean — 1 full + WAL covering it (~7d window). MVP / disk-constrained default. ~10 GB stored per DB.
- standard — 2 fulls + WAL covering them (~14d window). Production default. ~25 GB stored per DB.
- conservative — 4 fulls + WAL covering them (~28d window). Bug-mitigation cushion. ~50 GB stored per DB.
WAL archive retention follows the kept fulls automatically via
repo1-retention-archive-type=full.
Type: one of "lean", "standard", "conservative"
Default:
"lean"
Declared by: nix/modules/infra/data/postgresql/pgbackrest.nix
infra.data.postgresql.backup.s3.accessKeyIdSecret
SOPS path whose decrypted file contains the S3 access key id.
Type: string
Default: none (required when its feature is enabled)
Example:
"integrations/pgbackrest/analytics/access_key_id"
Declared by: nix/modules/infra/data/postgresql/pgbackrest.nix
infra.data.postgresql.backup.s3.bucket
Garage bucket. Provisioned by infra.data.s3 on the s3 host.
Type: string
Default:
"pg-backups"
Declared by: nix/modules/infra/data/postgresql/pgbackrest.nix
infra.data.postgresql.backup.s3.endpoint
S3 endpoint URL. Typically an in-fleet Garage behind Caddy TLS
(an s3.<zone> vhost with a step-ca cert trusted fleet-wide
via security.pki). pgbackrest’s S3 client REQUIRES
https (it rejects an http:// endpoint with a FormatError and
has no plaintext mode), so we must go through the TLS front —
Garage’s direct :3900 is plaintext and cannot be used here.
This name resolves via the fleet’s normal DNS (CoreDNS). We do NOT pin it in /etc/hosts: a brief CoreDNS gap (e.g. a netgate redeploy) is one the postgres WAL archiver simply retries and drains, and hardcoding the s3 host IP would silently SHADOW correct DNS if that host ever moved — a worse failure than the one it guards. The durable safeguard for a sustained S3/DNS outage (the INFRA-91 scenario, where WAL piled to 123 GB unnoticed) is archive-failure alerting, tracked in INFRA-133 — not a static hosts entry.
Type: string
Default: none (required when its feature is enabled)
Example:
"https://s3.example.lan"
Declared by: nix/modules/infra/data/postgresql/pgbackrest.nix
infra.data.postgresql.backup.s3.region
S3 region label. Garage ignores it; SDK clients require some value.
Type: string
Default:
"us-east-1"
Declared by: nix/modules/infra/data/postgresql/pgbackrest.nix
infra.data.postgresql.backup.s3.secretAccessKeySecret
SOPS path whose decrypted file contains the S3 secret access key.
Type: string
Default: none (required when its feature is enabled)
Example:
"integrations/pgbackrest/analytics/secret_access_key"
Declared by: nix/modules/infra/data/postgresql/pgbackrest.nix
infra.data.postgresql.backup.schedule.diff
systemd OnCalendar expression for differential backups. Each diff captures changes since the most recent full, so on Sunday it inherits from Saturday’s full.
Type: string
Default:
"Mon..Sat 02:00"
Declared by: nix/modules/infra/data/postgresql/pgbackrest.nix
infra.data.postgresql.backup.schedule.full
systemd OnCalendar expression for weekly full backups.
Type: string
Default:
"Sun 02:00"
Declared by: nix/modules/infra/data/postgresql/pgbackrest.nix
infra.data.postgresql.backup.stanza
pgbackrest stanza name. Conventionally the short DB role (e.g. “analytics”, “app”, “timescale”). Used as the S3 prefix inside the shared pg-backups bucket so multiple DB hosts can coexist without colliding on object names.
Type: string
Default: none (required when its feature is enabled)
Example:
"analytics"
Declared by: nix/modules/infra/data/postgresql/pgbackrest.nix
infra.data.postgresql.dataDir
Directory for PostgreSQL data.
Type: string
Default:
"/var/lib/postgresql/16"
Declared by: nix/modules/infra/data/postgresql
infra.data.postgresql.databases
Databases to provision declaratively. Each key is the database name. Roles are created with login privileges and passwords set from sops secrets. The role is granted ownership of its database.
Type: attribute set of (submodule)
Default:
{ }
Example:
{
komodo = {
passwordSecret = "komodo/db_password";
user = "komodo";
};
}
Declared by: nix/modules/infra/data/postgresql
infra.data.postgresql.databases.<name>.passwordSecret
Sops key path whose decrypted file contains the role password.
Type: string
Default: none (required when its feature is enabled)
Example:
"dbs/app/password"
Declared by: nix/modules/infra/data/postgresql
infra.data.postgresql.databases.<name>.user
Role name (created with LOGIN and DB ownership).
Type: string
Default: none (required when its feature is enabled)
Example:
"appuser"
Declared by: nix/modules/infra/data/postgresql
infra.data.postgresql.effectiveCacheSize
Planner estimate of OS file cache size.
Type: string
Default:
"3GB"
Declared by: nix/modules/infra/data/postgresql
infra.data.postgresql.enable
Whether to enable PostgreSQL server for platform services.
Type: boolean
Default:
false
Example:
true
Declared by: nix/modules/infra/data/postgresql
infra.data.postgresql.maintenanceWorkMem
Memory for maintenance operations (VACUUM, CREATE INDEX).
Type: string
Default:
"256MB"
Declared by: nix/modules/infra/data/postgresql
infra.data.postgresql.maxConnections
Maximum number of concurrent connections.
Type: signed integer
Default:
100
Declared by: nix/modules/infra/data/postgresql
infra.data.postgresql.package
PostgreSQL package to use.
Type: package
Default:
pkgs.postgresql_16
Declared by: nix/modules/infra/data/postgresql
infra.data.postgresql.pgwebAccess.databases
Database names to expose in pgweb. The core module exports attrNames of infra.data.postgresql.databases automatically; hosts whose databases exist only at runtime (pgbackrest restores) list them explicitly in their host file. List definitions merge by concatenation.
Type: list of string
Default:
[ ]
Example:
[
"appdb"
"analytics"
]
Declared by: nix/modules/infra/data/postgresql/pgweb-access.nix
infra.data.postgresql.pgwebAccess.enable
Advertise this host’s databases to the fleet pgweb instance and
provision the read-only pgweb role. Inert while databases
is empty. Set false to keep a Postgres host out of pgweb.
Type: boolean
Default:
true
Declared by: nix/modules/infra/data/postgresql/pgweb-access.nix
infra.data.postgresql.pgwebAccess.pgwebHostIp
Internal IP of the pgweb LXC — pg_hba scope for the pgweb role.
Type: string
Default: none (required when its feature is enabled)
Example:
"192.0.2.10"
Declared by: nix/modules/infra/data/postgresql/pgweb-access.nix
infra.data.postgresql.pgwebAccess.port
Port the pgweb LXC should connect to.
Type: 16 bit unsigned integer; between 0 and 65535 (both inclusive)
Default:
5432
Declared by: nix/modules/infra/data/postgresql/pgweb-access.nix
infra.data.postgresql.sharedBuffers
Shared buffer pool size.
Type: string
Default:
"1GB"
Declared by: nix/modules/infra/data/postgresql
infra.data.postgresql.tcpPort
TCP port PostgreSQL listens on.
Type: 16 bit unsigned integer; between 0 and 65535 (both inclusive)
Default:
5432
Declared by: nix/modules/infra/data/postgresql
infra.data.postgresql.walBuffers
WAL buffer size.
Type: string
Default:
"16MB"
Declared by: nix/modules/infra/data/postgresql
infra.data.postgresql.workMem
Memory per sort/hash operation.
Type: string
Default:
"10MB"
Declared by: nix/modules/infra/data/postgresql
infra.data.rabbitmq
infra.data.rabbitmq.appPassword
Password for the application user. WARNING: lands world-readable in the nix store via the provisioning script — acceptable only because the broker is reachable solely from the fleet-internal network. Rotate to a SOPS-sourced mechanism if that changes.
Type: string
Default: none (required when its feature is enabled)
Example:
"change-me"
Declared by: nix/modules/infra/data/rabbitmq
infra.data.rabbitmq.appUser
Application user provisioned with full permissions on the / vhost and the management tag.
Type: string
Default:
config.fleet.settings.name
Declared by: nix/modules/infra/data/rabbitmq
infra.data.rabbitmq.enable
Whether to enable RabbitMQ message broker.
Type: boolean
Default:
false
Example:
true
Declared by: nix/modules/infra/data/rabbitmq
infra.data.rabbitmq.managementPort
Management-plugin HTTP port. Opened in the firewall and reverse-proxied by the rabbitmq.<domain.internal> Caddy vhost.
Type: 16 bit unsigned integer; between 0 and 65535 (both inclusive)
Default:
15672
Declared by: nix/modules/infra/data/rabbitmq
infra.data.rabbitmq.port
AMQP listener port. Opened in the firewall; RabbitMQ binds it on all interfaces.
Type: 16 bit unsigned integer; between 0 and 65535 (both inclusive)
Default:
5672
Declared by: nix/modules/infra/data/rabbitmq
infra.data.s3
infra.data.s3.buckets
Bucket names to ensure exist. Idempotent — bucket info is
used to skip already-existing buckets so a re-run on every
boot is harmless.
Type: list of string
Default:
[ ]
Example:
[
"pg-backups"
"pbs-chunkstore"
]
Declared by: nix/modules/infra/data/s3
infra.data.s3.enable
Whether to enable Garage layout + bucket bootstrap oneshots.
Type: boolean
Default:
false
Example:
true
Declared by: nix/modules/infra/data/s3
infra.data.s3.environmentFile
Path to the env file carrying GARAGE_RPC_SECRET. Almost always
the same value the host module passes to
services.garage.environmentFile — set them from the same
sops.templates.“
Type: absolute path
Default: none (required when its feature is enabled)
Example:
config.sops.templates."garage-env".path
Declared by: nix/modules/infra/data/s3
infra.data.s3.layout
Single-node layout to assign on first boot. Set to null on multi-node clusters where the operator owns layout out-of-band.
Type: null or (submodule)
Default:
null
Declared by: nix/modules/infra/data/s3
infra.data.s3.layout.capacity
Capacity advertised for this node (Garage units, e.g. “500G”, “2T”). Match the disk size of the /data mount.
Type: string
Default: none (required when its feature is enabled)
Example:
"500G"
Declared by: nix/modules/infra/data/s3
infra.data.s3.layout.zone
Garage zone label (logical placement region).
Type: string
Default:
"dc1"
Declared by: nix/modules/infra/data/s3
infra.data.valkey
infra.data.valkey.allowedSubnets
CIDRs allowed to reach the valkey port at the firewall level. Empty (default) keeps the port closed everywhere — appropriate for bindAddress = 127.0.0.1. Open to the fleet LAN CIDR (fleet.settings.network.lanCidr) for a dedicated cache host.
Type: list of string
Default:
[ ]
Example:
[
"192.0.2.0/24"
]
Declared by: nix/modules/infra/data/valkey
infra.data.valkey.bindAddress
Address valkey binds to. Default is loopback (sidecar form). Set to the host’s internal IP for a dedicated cache LXC reachable from sibling LXCs on the internal subnet.
Type: string
Default:
"127.0.0.1"
Example:
"192.0.2.16"
Declared by: nix/modules/infra/data/valkey
infra.data.valkey.enable
Whether to enable Valkey cache (Redis-compatible).
Type: boolean
Default:
false
Example:
true
Declared by: nix/modules/infra/data/valkey
infra.data.valkey.maxMemory
Maximum memory for cache. Evicts LRU when full.
Type: string
Default:
"256mb"
Declared by: nix/modules/infra/data/valkey
infra.data.valkey.port
TCP port valkey listens on. Only opened in the firewall (scoped to allowedSubnets) in the dedicated-host form; the loopback sidecar form needs no firewall opening.
Type: 16 bit unsigned integer; between 0 and 65535 (both inclusive)
Default:
6379
Declared by: nix/modules/infra/data/valkey
infra.build
43 options
infra.build.aptCache
infra.build.aptCache.bindAddress
Address to bind to. Default 0.0.0.0 so internal VMs can reach it.
Type: string
Default:
"0.0.0.0"
Declared by: nix/modules/infra/build/apt-cache
infra.build.aptCache.cacheDir
Cache directory.
Type: absolute path
Default:
"/var/cache/apt-cacher-ng"
Declared by: nix/modules/infra/build/apt-cache
infra.build.aptCache.enable
Whether to enable apt-cacher-ng caching proxy for apt repos.
Type: boolean
Default:
false
Example:
true
Declared by: nix/modules/infra/build/apt-cache
infra.build.aptCache.expireDays
Days before stale cache entries are eligible for expiry.
Type: signed integer
Default:
4
Declared by: nix/modules/infra/build/apt-cache
infra.build.aptCache.logDir
Log directory.
Type: absolute path
Default:
"/var/log/apt-cacher-ng"
Declared by: nix/modules/infra/build/apt-cache
infra.build.aptCache.port
TCP port apt-cacher-ng listens on.
Type: 16 bit unsigned integer; between 0 and 65535 (both inclusive)
Default:
3142
Declared by: nix/modules/infra/build/apt-cache
infra.build.attic
infra.build.attic.cacheName
Logical cache name inside atticd (created out-of-band via attic CLI).
Type: string
Default:
config.fleet.settings.name
Declared by: nix/modules/infra/build/attic
infra.build.attic.enable
Whether to enable atticd Nix binary cache (push target, Garage S3 backend).
Type: boolean
Default:
false
Example:
true
Declared by: nix/modules/infra/build/attic
infra.build.attic.fqdn
Cache FQDN. If atticd runs on a substrate outside the fleet’s
internal zone (e.g. an XCP-ng tier-0 builder), pick a name in
the substrate zone and have the hosting module register the A
record (e.g. fleet.xenZoneRecords.attic = "<ip>";) so fleet
DNS resolves it.
Type: string
Default: none (required when its feature is enabled)
Example:
"attic.example.lan"
Declared by: nix/modules/infra/build/attic
infra.build.attic.listenPort
Local TCP port atticd listens on. Clients reach the cache via the Caddy vhost at fqdn, which reverse-proxies to this port on loopback.
Type: 16 bit unsigned integer; between 0 and 65535 (both inclusive)
Default:
8080
Declared by: nix/modules/infra/build/attic
infra.build.attic.postBuildHook
Install a post-build-hook so every local build uploads to atticd.
Type: boolean
Default:
true
Declared by: nix/modules/infra/build/attic
infra.build.attic.s3Bucket
Bucket in the S3 store (s3Endpoint) that holds the cache NARs. Must match the bucket the minted access key was granted on (bootstrap step 1).
Type: string
Default:
"nix-cache"
Declared by: nix/modules/infra/build/attic
infra.build.attic.s3Endpoint
S3 endpoint (e.g. in-fleet Garage). HTTP-direct to the store’s native port is fine for fleet-internal traffic on a trusted L2 — no need to round-trip a TLS terminator. Switch to an https:// endpoint when atticd is co-located with an untrusted boundary.
Type: string
Default: none (required when its feature is enabled)
Example:
"http://s3.example.lan:3900"
Declared by: nix/modules/infra/build/attic
infra.build.builder
infra.build.builder.cacheBindAddress
Address:port harmonia binary cache listens on.
Type: string
Default:
"[::]:5000"
Declared by: nix/modules/infra/build/builder
infra.build.builder.cores
Number of CPU cores per build job.
Type: signed integer
Default:
2
Declared by: nix/modules/infra/build/builder
infra.build.builder.enable
Whether to enable Nix remote builder + harmonia binary cache.
Type: boolean
Default:
false
Example:
true
Declared by: nix/modules/infra/build/builder
infra.build.builder.maxJobs
Maximum number of parallel nix build jobs.
Type: signed integer
Default:
4
Declared by: nix/modules/infra/build/builder
infra.build.builder.trustedUsers
Users trusted to manage the Nix store.
Type: list of string
Default:
[
"root"
"sysadmin"
]
Declared by: nix/modules/infra/build/builder
infra.build.hydra
infra.build.hydra.enable
Whether to enable Hydra CI server on the builder host.
Type: boolean
Default:
false
Example:
true
Declared by: nix/modules/infra/build/hydra.nix
infra.build.hydra.hydraUrl
Canonical external URL Hydra advertises for itself (links in the UI and notification emails). Asserted non-null when the module is enabled — set it explicitly if fleet.settings.domain.internal is null.
Type: null or string
Default:
"https://hydra.${config.fleet.settings.domain.internal}"
Declared by: nix/modules/infra/build/hydra.nix
infra.build.hydra.listenHost
Address hydra-server binds to. Default listens on all interfaces; set to 127.0.0.1 to serve only through the Caddy vhost.
Type: string
Default:
"0.0.0.0"
Declared by: nix/modules/infra/build/hydra.nix
infra.build.hydra.maxConcurrentEvals
Value for Hydra’s max_concurrent_evals — how many jobset evaluations may run in parallel. Keep low on builder hosts that also run real builds; each eval can use gigabytes of memory.
Type: signed integer
Default:
2
Declared by: nix/modules/infra/build/hydra.nix
infra.build.hydra.notificationSender
From: address for Hydra build-notification emails (also used as the msmtp envelope sender when smtp.enable is set). Asserted non-null when the module is enabled.
Type: null or string
Default:
"hydra@${config.fleet.settings.domain.base}"
Declared by: nix/modules/infra/build/hydra.nix
infra.build.hydra.port
TCP port for the hydra-server web UI. Opened in the firewall, reverse-proxied by the hydra.<domain.internal> Caddy vhost, and scraped by Alloy for HTTP metrics.
Type: 16 bit unsigned integer; between 0 and 65535 (both inclusive)
Default:
3000
Declared by: nix/modules/infra/build/hydra.nix
infra.build.hydra.project
Name of the Hydra project that holds the declaratively-managed jobsets (spec.json in the repo).
Type: string
Default:
config.fleet.settings.name
Declared by: nix/modules/infra/build/hydra.nix
infra.build.hydra.smtp.enable
Whether to enable SMTP email relay via Resend (msmtp) for Hydra build notifications.
Type: boolean
Default:
false
Example:
true
Declared by: nix/modules/infra/build/hydra.nix
infra.build.lxcTemplateFactory
infra.build.lxcTemplateFactory.enable
Whether to enable automatic NixOS LXC template builds published to the NFS template store.
Type: boolean
Default:
false
Example:
true
Declared by: nix/modules/infra/build/lxc-template-factory.nix
infra.build.lxcTemplateFactory.interval
systemd OnCalendar cadence for the freshness check.
Type: string
Default:
"daily"
Declared by: nix/modules/infra/build/lxc-template-factory.nix
infra.build.lxcTemplateFactory.nfsTemplateDir
PVE vztmpl directory inside the NFS export to publish templates into.
Type: string
Default:
"/data/nfs/store/template/cache"
Declared by: nix/modules/infra/build/lxc-template-factory.nix
infra.build.registryProxy
infra.build.registryProxy.cacheDir
Directory for cached Docker images.
Type: string
Default:
"/var/lib/docker-registry-proxy"
Declared by: nix/modules/infra/build/registry-proxy.nix
infra.build.registryProxy.enable
Whether to enable Docker registry pull-through proxy (caches Docker Hub, ghcr.io, etc.).
Type: boolean
Default:
false
Example:
true
Declared by: nix/modules/infra/build/registry-proxy.nix
infra.build.registryProxy.port
Port the registry proxy listens on.
Type: 16 bit unsigned integer; between 0 and 65535 (both inclusive)
Default:
3128
Declared by: nix/modules/infra/build/registry-proxy.nix
infra.build.registryProxy.registries
Space-separated list of registries to cache.
Type: string
Default:
"k8s.gcr.io gcr.io quay.io ghcr.io docker.io"
Declared by: nix/modules/infra/build/registry-proxy.nix
infra.build.remote
infra.build.remote.enable
Whether to enable offloading nix builds to the fleet’s remote build machines.
Type: boolean
Default:
false
Example:
true
Declared by: nix/modules/infra/build/remote
infra.build.remote.sshKeySopsFile
Encrypted file holding sops.defaultSopsFile was accessed but has no value defined. That is the point of the split: the offload key is a fleet-wide credential and belongs in a file encrypted to the few hosts that opt in, not in one every host can read.
Type: null or absolute path
Default:
null
Example:
"../secrets/build-offload.yaml"
Declared by: nix/modules/infra/build/remote
infra.build.remote.sshKeySopsPath
Sops key path of the private key the nix-daemon uses to reach the build machines. Read as root, since the daemon — not the invoking user — opens the connection.
Type: string
Default:
"services/builder/ssh_priv_key"
Declared by: nix/modules/infra/build/remote
infra.build.wikiPublisher
infra.build.wikiPublisher.branch
Branch whose tip the handbook is built from.
Type: string
Default:
"nightly"
Declared by: nix/modules/infra/build/wiki-publisher.nix
infra.build.wikiPublisher.enable
Whether to enable timer that rebuilds the handbook from the repo tip and rsyncs it to the docs host (INFRA-150).
Type: boolean
Default:
false
Example:
true
Declared by: nix/modules/infra/build/wiki-publisher.nix
infra.build.wikiPublisher.repoUrl
HTTPS clone URL for the deployments repo (token auth).
Type: string
Default: none (required when its feature is enabled)
Example:
"https://github.com/example-org/deployments.git"
Declared by: nix/modules/infra/build/wiki-publisher.nix
infra.build.wikiPublisher.schedule
systemd OnCalendar expression for the refresh.
Type: string
Default:
"*-*-* 06:15:00"
Declared by: nix/modules/infra/build/wiki-publisher.nix
infra.build.wikiPublisher.siteFlakeAttr
Flake package attribute that builds the static handbook site in the consumer repo.
Type: string
Default:
"wiki-site"
Example:
"docs-site"
Declared by: nix/modules/infra/build/wiki-publisher.nix
infra.build.wikiPublisher.target
rsync/ssh destination for the docs host.
Type: string
Default: none (required when its feature is enabled)
Example:
"root@192.0.2.25"
Declared by: nix/modules/infra/build/wiki-publisher.nix
infra.build.wikiPublisher.targetDir
Directory the docs host serves the handbook from.
Type: string
Default:
"/var/lib/wiki/site"
Declared by: nix/modules/infra/build/wiki-publisher.nix
infra.mail
9 options
infra.mail.protonmailBridge
infra.mail.protonmailBridge.enable
Whether to enable headless Proton Mail Bridge (IMAP/SMTP gateway to a Proton account).
Type: boolean
Default:
false
Example:
true
Declared by: nix/modules/infra/mail/protonmail-bridge
infra.mail.protonmailBridge.imap.bridgePort
Loopback port the bridge itself serves IMAP on. See smtp.bridgePort.
Type: 16 bit unsigned integer; between 0 and 65535 (both inclusive)
Default:
1143
Declared by: nix/modules/infra/mail/protonmail-bridge
infra.mail.protonmailBridge.imap.enable
Expose IMAP as well as SMTP. Turn it off for a send-only relay — an Infisical or alerting host has no mailbox to read.
Type: boolean
Default:
true
Declared by: nix/modules/infra/mail/protonmail-bridge
infra.mail.protonmailBridge.imap.port
Port the IMAP proxy listens on.
Type: 16 bit unsigned integer; between 0 and 65535 (both inclusive)
Default:
143
Declared by: nix/modules/infra/mail/protonmail-bridge
infra.mail.protonmailBridge.listenAddress
Address the socket proxies bind. The bridge itself always listens on 127.0.0.1 and cannot be told otherwise, so this is the only place the exposure is decided. Set it to 127.0.0.1 to keep the bridge host-local; the default serves the fleet, which is the point of running it on its own host.
Type: string
Default:
"0.0.0.0"
Example:
"10.0.0.5"
Declared by: nix/modules/infra/mail/protonmail-bridge
infra.mail.protonmailBridge.logLevel
Bridge log level. Null leaves the bridge’s own default.
Type: null or one of "panic", "fatal", "error", "warn", "info", "debug"
Default:
null
Declared by: nix/modules/infra/mail/protonmail-bridge
infra.mail.protonmailBridge.package
Proton Mail Bridge package. The headless build, not the Qt GUI one.
Type: package
Default:
pkgs.protonmail-bridge
Declared by: nix/modules/infra/mail/protonmail-bridge
infra.mail.protonmailBridge.smtp.bridgePort
Loopback port the bridge itself serves SMTP on. Change this only to match a bridge whose own setting was moved; it is the proxy’s upstream, not a listener this module creates.
Type: 16 bit unsigned integer; between 0 and 65535 (both inclusive)
Default:
1025
Declared by: nix/modules/infra/mail/protonmail-bridge
infra.mail.protonmailBridge.smtp.port
Port the SMTP proxy listens on, for clients and services.
Type: 16 bit unsigned integer; between 0 and 65535 (both inclusive)
Default:
587
Declared by: nix/modules/infra/mail/protonmail-bridge
infra.auth
8 options
infra.auth.sssd
infra.auth.sssd.allowedGroups
Authentik group names allowed to SSH into this machine. Empty list allows any authenticated LDAP user. Example: [ “developers” “platform-admins” ]
Type: list of string
Default:
[ ]
Example:
[
"developers"
"platform-admins"
]
Declared by: nix/modules/infra/auth/sssd
infra.auth.sssd.baseDn
LDAP base DN for user/group searches. Must be non-null when infra.auth.sssd is enabled (asserted).
Type: null or string
Default:
config.fleet.network.ldap.base_dn
Example:
"dc=ldap,dc=example,dc=com"
Declared by: nix/modules/infra/auth/sssd
infra.auth.sssd.enable
Whether to enable SSSD LDAP authentication via Authentik.
Type: boolean
Default:
false
Example:
true
Declared by: nix/modules/infra/auth/sssd
infra.auth.sssd.ldapUri
URI of the Authentik LDAP outpost. Must be non-null when infra.auth.sssd is enabled (asserted).
Type: null or string
Default:
config.fleet.network.ldap.uri
Example:
"ldap://auth.example.internal:389"
Declared by: nix/modules/infra/auth/sssd
infra.auth.sssd.probe.enable
Whether to enable scheduled fleet directory-auth probe (INFRA-200).
Type: boolean
Default:
false
Example:
true
Declared by: nix/modules/infra/auth/sssd/probe.nix
infra.auth.sssd.probe.interval
Probe cadence (systemd OnUnitActiveSec).
Type: string
Default:
"15min"
Declared by: nix/modules/infra/auth/sssd/probe.nix
infra.auth.sssd.probe.targets
Hosts to probe: metric target name → IP. Only add hosts that carry the INFRA-190 sssd config (ldap-bind + wrapper integration) — a not-yet-converged host fails by design, which is signal during a rollout but noise as a steady state.
Type: attribute set of string
Default:
{ }
Example:
{
dash = "192.0.2.20";
}
Declared by: nix/modules/infra/auth/sssd/probe.nix
infra.auth.sssd.sudoGroups
Authentik group names whose members get password-required sudo
on this machine (rendered as security.sudo.extraRules matching
%
Type: list of string
Default:
[ ]
Example:
[
"developers"
]
Declared by: nix/modules/infra/auth/sssd
infra.provisioning
21 options
infra.provisioning.pveInstallerAnswers
infra.provisioning.pveInstallerAnswers.bindAddress
IP the answer service binds to. Defaults to loopback; host configs (netcore) set this to the LAN-facing IP so PVE/PBS installers can fetch directly.
Type: string
Default:
"127.0.0.1"
Declared by: nix/modules/infra/provisioning/pve-installer-answers
infra.provisioning.pveInstallerAnswers.enable
Whether to enable PVE auto-install answer-file HTTP server.
Type: boolean
Default:
false
Example:
true
Declared by: nix/modules/infra/provisioning/pve-installer-answers
infra.provisioning.pveInstallerAnswers.hosts
List of PVE/PBS hosts the server has answers for. Each entry
must have a matching SOPS entry at
services/pve-installer-answers/passwords/<hostname> populated
before deploy — sops-nix activation fails closed otherwise.
Type: list of (submodule)
Default:
[ ]
Example:
[{
hostname = "pve-alpha";
productType = "pve";
mac = "52:54:00:12:34:56";
ip = "198.51.100.30";
cidr = "198.51.100.30/24";
domain = "example.lan";
}]
Declared by: nix/modules/infra/provisioning/pve-installer-answers
infra.provisioning.pveInstallerAnswers.hosts.*.cidr
CIDR notation <ip>/<prefix> for the management network.
E.g., “192.0.2.99/24”.
Type: string
Default: none (required when its feature is enabled)
Declared by: nix/modules/infra/provisioning/pve-installer-answers
infra.provisioning.pveInstallerAnswers.hosts.*.country
Two-letter country code written to the answer file’s [global] section; the installer derives mirror and locale defaults from it.
Type: string
Default:
"us"
Declared by: nix/modules/infra/provisioning/pve-installer-answers
infra.provisioning.pveInstallerAnswers.hosts.*.dns
DNS server (the fleet’s internal DNS by default). Must be non-null for every declared host (asserted).
Type: null or string
Default:
lib.head config.fleet.network.internal_resolvers
Declared by: nix/modules/infra/provisioning/pve-installer-answers
infra.provisioning.pveInstallerAnswers.hosts.*.domain
DNS domain used to build the FQDN.
Type: string
Default: none (required when its feature is enabled)
Declared by: nix/modules/infra/provisioning/pve-installer-answers
infra.provisioning.pveInstallerAnswers.hosts.*.filesystem
Root filesystem for the install.
Type: one of "ext4", "xfs", "zfs (raid0)", "zfs (raid1)", "zfs (raid10)", "zfs (raidz-1)", "zfs (raidz-2)", "zfs (raidz-3)", "btrfs (raid0)", "btrfs (raid1)", "btrfs (raid10)"
Default:
"ext4"
Declared by: nix/modules/infra/provisioning/pve-installer-answers
infra.provisioning.pveInstallerAnswers.hosts.*.firstBootScript
Shell script body executed once at the host’s first boot
after install. Served at GET /first-boot/
Empty (default) means no [first-boot] section is emitted in this host’s answer.toml and the GET endpoint returns 404 for this hostname.
Typical use: install + enable a systemd unit that runs
growpart + pvresize + lvresize on every boot, so disk
resizes (via terranix’s useDeploySizes = false flip) are
picked up automatically without operator intervention.
Type: string
Default:
""
Declared by: nix/modules/infra/provisioning/pve-installer-answers
infra.provisioning.pveInstallerAnswers.hosts.*.gateway
Default gateway (the fleet’s internal gateway by default). Must be non-null for every declared host (asserted).
Type: null or string
Default:
config.fleet.network.gateway
Declared by: nix/modules/infra/provisioning/pve-installer-answers
infra.provisioning.pveInstallerAnswers.hosts.*.hostname
Short hostname; combined with domain for FQDN.
ALSO used as the lookup key for the root-password SOPS entry
at services/pve-installer-answers/passwords/<hostname>.
Type: string
Default: none (required when its feature is enabled)
Declared by: nix/modules/infra/provisioning/pve-installer-answers
infra.provisioning.pveInstallerAnswers.hosts.*.installDisk
Block device to install onto. XCP-ng VMs use xvda; PVE-on-
metal would be sda or nvme0n1. Must match what the kernel
sees at install time — wrong device aborts the installer
with “disk in ‘disk-selection’ not found”.
Type: string
Default:
"xvda"
Declared by: nix/modules/infra/provisioning/pve-installer-answers
infra.provisioning.pveInstallerAnswers.hosts.*.ip
Management IPv4 address (no CIDR suffix).
Type: string
Default: none (required when its feature is enabled)
Declared by: nix/modules/infra/provisioning/pve-installer-answers
infra.provisioning.pveInstallerAnswers.hosts.*.keyboard
Keyboard layout code written to the answer file’s [global] section (Proxmox installer layout id, e.g. “en-us”, “de”).
Type: string
Default:
"en-us"
Declared by: nix/modules/infra/provisioning/pve-installer-answers
infra.provisioning.pveInstallerAnswers.hosts.*.mac
MAC address of the install NIC, lowercase preferred (the
matcher lowercases both sides). Substring-matched against
the installer’s POSTed system_info JSON. Must be unique
across hosts or the first match wins.
Type: string matching the pattern ^[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}$
Default: none (required when its feature is enabled)
Declared by: nix/modules/infra/provisioning/pve-installer-answers
infra.provisioning.pveInstallerAnswers.hosts.*.mailto
Notification address baked into the answer file. Must be non-null for every declared host (asserted).
Type: null or string
Default:
"ops@${config.fleet.settings.domain.base}"
Declared by: nix/modules/infra/provisioning/pve-installer-answers
infra.provisioning.pveInstallerAnswers.hosts.*.productType
Which Proxmox product the answer is for. Doesn’t affect the
answer.toml schema today (all three share it), but kept
explicit so future per-product divergences are trivial and
so log lines say “matched
Type: one of "pve", "pbs", "pmg"
Default: none (required when its feature is enabled)
Declared by: nix/modules/infra/provisioning/pve-installer-answers
infra.provisioning.pveInstallerAnswers.hosts.*.rootSshKeys
List of authorized SSH keys for root on the freshly-installed PVE/PBS host. Typically a singleton with fleet.network.sysadmin_ssh_key.
Type: list of string
Default:
[ ]
Declared by: nix/modules/infra/provisioning/pve-installer-answers
infra.provisioning.pveInstallerAnswers.hosts.*.timezone
Timezone written to the answer file’s [global] section (IANA name, e.g. “Europe/Madrid”).
Type: string
Default:
"UTC"
Declared by: nix/modules/infra/provisioning/pve-installer-answers
infra.provisioning.pveInstallerAnswers.port
TCP port the answer service binds to.
Type: signed integer
Default:
8081
Declared by: nix/modules/infra/provisioning/pve-installer-answers
infra.provisioning.pveInstallerAnswers.publicUrl
Base URL the PVE installer uses to reach this server. Embedded
into the [first-boot] url field in answer.toml so the installed
host can fetch its per-host first-boot script at
<publicUrl>/first-boot/<hostname>. Default matches an
answers.<internal-domain> ingress on the serving host.
Type: null or string
Default:
"http://answers.${config.fleet.settings.domain.internal}"
Declared by: nix/modules/infra/provisioning/pve-installer-answers
infra.integrations
8 options
infra.integrations.argocd
infra.integrations.argocd.argocdVersion
Argo CD Helm chart version.
Type: string
Default:
"7.7.15"
Declared by: nix/modules/infra/integrations/argocd.nix
infra.integrations.argocd.clusterName
Logical cluster name. Used for token lookup and IP discovery.
Type: string
Default:
"argocd"
Declared by: nix/modules/infra/integrations/argocd.nix
infra.integrations.argocd.enable
Whether to enable ArgoCD cluster node (k3s + ArgoCD).
Type: boolean
Default:
false
Example:
true
Declared by: nix/modules/infra/integrations/argocd.nix
infra.integrations.argocd.nodeIndex
Node index within the cluster. 0 = server, 1+ = agents.
Type: signed integer
Default:
0
Declared by: nix/modules/infra/integrations/argocd.nix
infra.integrations.docker
infra.integrations.docker.dataRoot
Root directory for Docker storage.
Type: string
Default:
"/var/lib/docker"
Declared by: nix/modules/infra/integrations/docker.nix
infra.integrations.docker.enable
Whether to enable Docker daemon.
Type: boolean
Default:
false
Example:
true
Declared by: nix/modules/infra/integrations/docker.nix
infra.integrations.docker.logDriver
Docker logging driver.
Type: string
Default:
"journald"
Declared by: nix/modules/infra/integrations/docker.nix
infra.integrations.docker.registryMirror
URL of a Docker registry pull-through proxy (e.g. an in-fleet cache). Empty string (default) disables the mirror.
Type: string
Default:
""
Example:
"http://192.0.2.11:3128"
Declared by: nix/modules/infra/integrations/docker.nix
infra.services
14 options
infra.services
Service registry. Infra modules register here; firewall, Caddy, and docs are derived automatically.
Type: attribute set of (submodule)
Default:
{ }
Example:
{
myapp = {
port = 8080;
description = "Example web app";
category = "workload";
};
}
Declared by: nix/modules/infra/services.nix
infra.services.<name>.caddy.enable
Also reverse-proxy the primary port through the local Caddy.
Type: boolean
Default:
true
Declared by: nix/modules/infra/services.nix
infra.services.<name>.caddy.hostname
FQDN prefix under the internal domain (
Type: null or string
Default:
"‹name›"
Declared by: nix/modules/infra/services.nix
infra.services.<name>.caddy.path
URL path. ‘/’ = own vhost. ‘/foo’ = path under the service hostname on the internal domain.
Type: string
Default:
"/"
Declared by: nix/modules/infra/services.nix
infra.services.<name>.category
Service category (e.g., platform, observability, workload, network).
Type: string
Default:
"uncategorized"
Declared by: nix/modules/infra/services.nix
infra.services.<name>.description
Human-readable description. Shows up in the service catalog.
Type: string
Default:
""
Declared by: nix/modules/infra/services.nix
infra.services.<name>.extraPorts
Additional ports to open in the firewall (e.g., HTTPS, metrics, gRPC).
Type: list of (submodule)
Default:
[ ]
Declared by: nix/modules/infra/services.nix
infra.services.<name>.extraPorts.*.name
Short label for this port, distinguishing it from the service’s other ports. Consumed by generated env files and the service catalog: a service with several ports otherwise exports a single ambiguous PORT, which is useless to anyone wiring an application against it (RabbitMQ’s AMQP 5672 and management 15672 are the obvious case).
null keeps the port firewall-only and unnamed — fine for a metrics or gRPC port nothing external configures against.
Type: null or string
Default:
null
Example:
"mgmt"
Declared by: nix/modules/infra/services.nix
infra.services.<name>.extraPorts.*.port
Additional port to open in the firewall.
Type: 16 bit unsigned integer; between 0 and 65535 (both inclusive)
Default: none (required when its feature is enabled)
Declared by: nix/modules/infra/services.nix
infra.services.<name>.extraPorts.*.protocol
Protocol hint for documentation (e.g., http, https, grpc, tcp).
Type: string
Default:
"tcp"
Declared by: nix/modules/infra/services.nix
infra.services.<name>.extraPorts.*.ui
Whether this port serves a UI (for catalog display).
Type: boolean
Default:
false
Declared by: nix/modules/infra/services.nix
infra.services.<name>.host
Upstream host for Caddy. Defaults to localhost.
Type: string
Default:
"127.0.0.1"
Declared by: nix/modules/infra/services.nix
infra.services.<name>.port
Primary port. Opened in firewall; proxied by Caddy when caddy.enable = true.
Type: 16 bit unsigned integer; between 0 and 65535 (both inclusive)
Default: none (required when its feature is enabled)
Declared by: nix/modules/infra/services.nix
infra.services.<name>.tags
Freeform tags for filtering (e.g., [ “internal” “docker” ]).
Type: list of string
Default:
[ ]
Declared by: nix/modules/infra/services.nix
infra.networking
4 options
infra.networking.externalIp
LAN-side IPv4 address for vmbr0-only single-NIC hosts.
Auto-wired from the fleet’s ip field by nix/lib/default.nix
when internalIp is unset. Ignored unless singleInterface is
true and internalIp is empty.
Type: string
Default:
""
Example:
"198.51.100.20"
Declared by: nix/modules/infra/base/fleet-member.nix
infra.networking.internalGateway
Gateway for internal network. Only set on netgate.
Type: string
Default:
""
Example:
"192.0.2.1"
Declared by: nix/modules/infra/base/fleet-member.nix
infra.networking.internalIp
Static IP for the internal service network (vmbr1). Set automatically from hosts.json by nix/lib/default.nix.
Type: string
Default:
""
Example:
"192.0.2.104"
Declared by: nix/modules/infra/base/fleet-member.nix
infra.networking.singleInterface
When true, host has one NIC. Default placement is eth0 on vmbr1
with the static internalIp + internal gateway. If externalIp
is also set (and internalIp is empty), eth0 is placed on
vmbr0 with the static externalIp + LAN gateway instead
(vmbr0-only hosts, e.g. a public landing page).
Type: boolean
Default:
false
Declared by: nix/modules/infra/base/fleet-member.nix
infra.platform
3 options
infra.platform.pve.lxc.deviceGids
Group ids the guest uses for /dev/dri/card* (video) and /dev/dri/renderD* + /dev/kfd (render). The fleet side must pass the same numbers as devices[].gid; NixOS’ ids are 26 and 303 (Debian’s 44 / 104 in the community scripts).
Type: attribute set of signed integer
Read-only: computed by fleetkit; not settable.
Default:
{ video = config.ids.gids.video; render = config.ids.gids.render; }
Declared by: nix/modules/infra/base/platform/pve/lxc.nix
infra.platform.pve.lxc.gpu.enable
The PVE host passes GPU nodes through to this container
(fleet.compute.deviceGids, which is what the
passthrough entries must carry as gid so the nodes are usable
inside the (unprivileged) container.
Type: boolean
Default:
false
Declared by: nix/modules/infra/base/platform/pve/lxc.nix
infra.platform.type
Virtualisation substrate this host runs on:
- pve.lxc : Proxmox-hosted unprivileged LXC container
- pve.qemu : Proxmox-hosted KVM/QEMU VM
- xcpng.vm : XCP-ng-hosted Xen HVM VM (tier-0 + select tier-1)
Auto-wired by nix/lib/default.nix from the fleet entry; override per-host only when the auto-detection is wrong.
Type: one of "pve.lxc", "pve.qemu", "xcpng.vm"
Default:
"pve.lxc"
Declared by: nix/modules/infra/base/platform
infra.githubAccessToken
1 options
infra.githubAccessToken
Provision the GitHub machine-user token (SOPS integrations/github/machine_user_token) into nix access-tokens on THIS host. Needed only where nix itself fetches private GitHub repos: a builder, or a machine deploys are run from. Defaults to the fleet-wide fleet.settings.githubAccessTokens so a fleet can flip the default off and opt individual hosts in.
Type: boolean
Default:
config.fleet.settings.githubAccessTokens
Declared by: nix/modules/infra/base/fleet-member.nix
infra.nix
1 options
infra.nix.gc.keepGenerations
How many system-profile generations to keep, regardless of age.
Trimmed immediately before each automatic GC run (as an
ExecStartPre on nix-gc.service) so the collector frees the
unlinked paths in the same pass.
This bounds what the age window cannot. --delete-older-than is
purely age-based, so a host deployed a dozen times inside the
retention window keeps a dozen generations, all of them “recent”.
The two bounds compose: a generation is kept only if it is both
young enough and new enough.
Set to null to disable the count bound and retain by age alone.
Has no effect when nix.gc.automatic is false.
Type: null or (positive integer, meaning >0)
Default:
10
Example:
3
Declared by: nix/modules/infra/base/core/gc.nix