Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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_unprivilegedprivileged
CT_ID / VMIDvm_id
HNattribute name / name
DISK_SIZE, CORE_COUNT, RAM_SIZEroot_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 vnetinterfaces[].bridge / interfaces[].vnet (+ sdn-zone/sdn-vnet resources)
NET dhcp / static / rangeinterfaces[].ipv4 = "dhcp" / "a.b.c.d/nn" (ranges are not declarative)
GATEinterfaces[].gateway
IPV6_METHOD auto/dhcp/static/none/disableinterfaces[].ipv6.method (disable ≡ none)
MTU, VLAN, MACinterfaces[].mtu, .vlan, .mac
NS, SDdns.servers, dns.domain
ENABLE_FUSE, ENABLE_NESTING, ENABLE_KEYCTL, ENABLE_MKNOD, ALLOW_MOUNT_FSfeatures.{fuse,nesting,keyctl,mknod,mount}
ENABLE_TUN, ENABLE_GPU, Coral, USB serialdevices (+ lxc_extra_conf for hot-plug cgroup rules)
PROTECT_CTprotection
TAGStags
var_post_install hookhook_script (PVE hook), or a NixOS activation script
CT_TIMEZONENixOS time.timeZone in the host’s hostsRegistry entry
PW, SSH, SSH_AUTHORIZED_KEYnot applicable: NixOS hosts are key-only (fleet.network.sysadmin_ssh_key), root has no password
APT_CACHER, HTTP_PROXY, INHERIT_HOST_CANixOS nix.settings.substituters, networking.proxy, security.pki
VM MACHINE, BIOS, CPU_TYPE, DISK_CACHE, scsihw, -tablet 0vm.machine, vm.bios (+ vm.efi), vm.cpu_type, vm.root_disk.cache, vm.scsi_hardware, vm.tablet
VM cloud-init on/offcloud_init.enable, cloud_init.datastore
VM cloud image (qm importdisk)image = "import:<datastore>:import/<file>" with a download resource
START_VM, -onboot 1start_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 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//) — no bucket, no cloud creds; fine for a homelab, but the state only exists on the machine that ran the apply. “s3” (default) is the shared-bucket estate model (ADR-097). “pg” is Postgres, the on-prem option that provides REAL locking via advisory locks — S3-compatible stores that cannot do conditional writes (Garage, by design) leave 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..root_disk_datastore. LEGACY DEFAULT “local-storage” is kept so existing fleets render unchanged; set it explicitly (PVE’s stock thin pool is “local-lvm”) — the default flips to “local-lvm” in the next major release.

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. → an internal IP) are only correct from fleet DNS; a public fallback on the same link would let systemd-resolved’s sticky failover serve the public DNS answer (the WAN IP, which many routers can’t hairpin from the LAN). External names still resolve: fleet DNS forwards them, and a fleet-DNS outage falls back (non-stickily) to systemd-resolved’s built-in global FallbackDNS for external names only. (INFRA-107)

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/**/.nix.

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//) to substitute a consumer playbook instead. Consumer playbooks resolve roles via ANSIBLE_ROLES_PATH, which the fleet CLI points at both the consumer’s ansible/roles and the framework tree. Only consulted for hosts the emitter’s conventions already match — it does not opt additional hosts into Ansible.

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. — not authored by hand.

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:” (full clone of a template VM), or “import::import/” (a raw/qcow2 uploaded to a storage with the 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. Ignored for VMs (the guest kernel names NICs).

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/.conf inside a “# BEGIN/END fleetkit lxc_extra_conf” marker block — the escape hatch for what PVE’s devN passthrough cannot express (hot-plug USB cgroup wildcards, optional bind mounts, autodev hooks). Applied by a terraform_data local-exec over root SSH to the container’s node (fleet.providers.proxmox..cluster.node_addresses maps node names to SSH hosts), re-run whenever the lines change, rebooting the container if it is running. Emptying the list stops managing the block but leaves it in place. LXC only.

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


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: “.” (e.g. “proxmox.dev”).

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..lxc_extra_conf). A node missing here is reached by its name.

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. = { secrets.…; envPrefix?; … }; }). Instances declared here are implicitly consumed by THIS machine; shared/host-less secrets belong in fleet.secrets instead.

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. = { secrets.…; envPrefix?; … }; }). Instances declared here are implicitly consumed by THIS machine; shared/host-less secrets belong in fleet.secrets instead.

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. = { secrets.…; envPrefix?; … }; }). Instances declared here are implicitly consumed by THIS machine; shared/host-less secrets belong in fleet.secrets instead.

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. = { secrets.…; envPrefix?; … }; }). Instances declared here are implicitly consumed by THIS machine; shared/host-less secrets belong in fleet.secrets instead.

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://///terraform.tfstate

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..lxc_extra_conf). A node missing here is reached by its name.

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. = { secrets.…; envPrefix?; … }; }). Instances declared here are implicitly consumed by THIS machine; shared/host-less secrets belong in fleet.secrets instead.

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. = { secrets.…; envPrefix?; … }; }). Instances declared here are implicitly consumed by THIS machine; shared/host-less secrets belong in fleet.secrets instead.

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. = { secrets.…; envPrefix?; … }; }). Instances declared here are implicitly consumed by THIS machine; shared/host-less secrets belong in fleet.secrets instead.

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. = { secrets.…; envPrefix?; … }; }). Instances declared here are implicitly consumed by THIS machine; shared/host-less secrets belong in fleet.secrets instead.

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://///terraform.tfstate

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..lxc_extra_conf). A node missing here is reached by its name.

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. = { secrets.…; envPrefix?; … }; }). Instances declared here are implicitly consumed by THIS machine; shared/host-less secrets belong in fleet.secrets instead.

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. = { secrets.…; envPrefix?; … }; }). Instances declared here are implicitly consumed by THIS machine; shared/host-less secrets belong in fleet.secrets instead.

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. = { secrets.…; envPrefix?; … }; }). Instances declared here are implicitly consumed by THIS machine; shared/host-less secrets belong in fleet.secrets instead.

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. = { secrets.…; envPrefix?; … }; }). Instances declared here are implicitly consumed by THIS machine; shared/host-less secrets belong in fleet.secrets instead.

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://///terraform.tfstate

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..lxc_extra_conf). A node missing here is reached by its name.

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. = { secrets.…; envPrefix?; … }; }). Instances declared here are implicitly consumed by THIS machine; shared/host-less secrets belong in fleet.secrets instead.

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. = { secrets.…; envPrefix?; … }; }). Instances declared here are implicitly consumed by THIS machine; shared/host-less secrets belong in fleet.secrets instead.

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. = { secrets.…; envPrefix?; … }; }). Instances declared here are implicitly consumed by THIS machine; shared/host-less secrets belong in fleet.secrets instead.

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. = { secrets.…; envPrefix?; … }; }). Instances declared here are implicitly consumed by THIS machine; shared/host-less secrets belong in fleet.secrets instead.

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://///terraform.tfstate

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..lxc_extra_conf). A node missing here is reached by its name.

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. = { secrets.…; envPrefix?; … }; }). Instances declared here are implicitly consumed by THIS machine; shared/host-less secrets belong in fleet.secrets instead.

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. = { secrets.…; envPrefix?; … }; }). Instances declared here are implicitly consumed by THIS machine; shared/host-less secrets belong in fleet.secrets instead.

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. = { secrets.…; envPrefix?; … }; }). Instances declared here are implicitly consumed by THIS machine; shared/host-less secrets belong in fleet.secrets instead.

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. = { secrets.…; envPrefix?; … }; }). Instances declared here are implicitly consumed by THIS machine; shared/host-less secrets belong in fleet.secrets instead.

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://///terraform.tfstate

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: “.” (e.g. “proxmox.dev”). Routes the entry to the matching provider emitter.

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: .[.nodes.].resources.., same shape as the top-level tree.

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..lxc_extra_conf). A node missing here is reached by its name.

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. = { secrets.…; envPrefix?; … }; }). Instances declared here are implicitly consumed by THIS machine; shared/host-less secrets belong in fleet.secrets instead.

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. = { secrets.…; envPrefix?; … }; }). Instances declared here are implicitly consumed by THIS machine; shared/host-less secrets belong in fleet.secrets instead.

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. = { secrets.…; envPrefix?; … }; }). Instances declared here are implicitly consumed by THIS machine; shared/host-less secrets belong in fleet.secrets instead.

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. = { secrets.…; envPrefix?; … }; }). Instances declared here are implicitly consumed by THIS machine; shared/host-less secrets belong in fleet.secrets instead.

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://///terraform.tfstate

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: { = { file; consumers?; instances. = { secrets.…; }; }; }. Machine secret facets lift here with consumers.hosts = [ that machine ]. Projections: sops.secrets on consuming hosts, the secrets catalog, env export.

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 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:” and the corresponding tagOwners rule on the headscale server must permit the host’s enrollment user (typically “netgate@”) to apply it. Tags can only be set via 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/tun
  • fetchAuthKey.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.nix
  • extraUpFlags — –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: and outbound tailnet traffic works with no TUN device, no container privilege changes, and no firewall edits.

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 (.<fleet.settings.domain.internal>).

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.“”.path so a rotation re-renders both.

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 . Null reads it from the consumer’s sops.defaultSopsFile. A split-store consumer — one file per resource, each encrypted to only the hosts that need it — sets no defaultSopsFile at all, so leaving this null there fails eval with 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 %). The sudo prompt authenticates against Authentik via SSSD/PAM. Empty = no LDAP user gets sudo. Local wheel accounts (core.nix) are unaffected. See ADR-028. Example: [ “developers” ]

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/; the installer (via the [first-boot] section in answer.toml) downloads the script body, chmods it 0700, executes it once as root, then deletes it.

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 (pbs)” not just “”.

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 (.<fleet.settings.domain.internal>). Defaults to attr name. Null = path-only under host FQDN.

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..devices with /dev/dri/, /dev/kfd or /dev/nvidia). Enables the graphics userland and pins the video / render groups to the gids in 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