homelab/pkgs/homelab-docs/nodes.nix
plasmagoat 73d2f44d74
Some checks failed
Test / tests (push) Failing after 2m27s
/ OpenTofu (push) Successful in 9s
updated docs
2025-07-29 16:58:09 +02:00

123 lines
4.4 KiB
Nix

{
writeShellScriptBin,
jq,
}:
writeShellScriptBin "homelab-docs-nodes" ''
#!/usr/bin/env bash
set -euo pipefail
cat << 'EOF'
# Node Configurations
> Detailed per-node configuration
>
> Generated on: $(date)
EOF
# Get all node information
node_info=$(colmena eval -E '{ nodes, pkgs, lib, ... }:
lib.mapAttrs (name: node: {
# Basic system info
nixosVersion = node.config.system.nixos.version;
hostName = node.config.networking.hostName;
system = node.config.nixpkgs.system;
# Homelab config (safe extraction)
homelab = if (node.config.homelab.enable or false) then {
enabled = true;
hostname = node.config.homelab.hostname or null;
domain = node.config.homelab.domain or null;
externalDomain = node.config.homelab.externalDomain or null;
environment = node.config.homelab.environment or null;
location = node.config.homelab.location or null;
tags = node.config.homelab.tags or [];
} else {
enabled = false;
};
# Services (safe extraction)
services = if (node.config.homelab.enable or false) then
lib.mapAttrs (svcName: svc: {
enabled = svc.enable or false;
port = svc.port or null;
description = svc.description or svcName;
tags = svc.tags or [];
}) (node.config.homelab.services or {})
else {};
}) nodes')
echo "$node_info" | ${jq}/bin/jq -r 'to_entries[] | .key' | while read -r node; do
echo "## Node: $node"
echo
# Basic system information
echo "### System Information"
echo
nixos_version=$(echo "$node_info" | ${jq}/bin/jq -r ".[\"$node\"].nixosVersion")
hostname=$(echo "$node_info" | ${jq}/bin/jq -r ".[\"$node\"].hostName")
system=$(echo "$node_info" | ${jq}/bin/jq -r ".[\"$node\"].system")
echo "| Property | Value |"
echo "|----------|-------|"
echo "| NixOS Version | \`$nixos_version\` |"
echo "| Hostname | \`$hostname\` |"
echo "| System | \`$system\` |"
echo
# Homelab configuration
homelab_enabled=$(echo "$node_info" | ${jq}/bin/jq -r ".[\"$node\"].homelab.enabled")
if [[ "$homelab_enabled" == "true" ]]; then
echo "### Homelab Configuration"
echo
hl_hostname=$(echo "$node_info" | ${jq}/bin/jq -r ".[\"$node\"].homelab.hostname // \"N/A\"")
hl_domain=$(echo "$node_info" | ${jq}/bin/jq -r ".[\"$node\"].homelab.domain // \"N/A\"")
hl_external=$(echo "$node_info" | ${jq}/bin/jq -r ".[\"$node\"].homelab.externalDomain // \"N/A\"")
hl_env=$(echo "$node_info" | ${jq}/bin/jq -r ".[\"$node\"].homelab.environment // \"N/A\"")
hl_location=$(echo "$node_info" | ${jq}/bin/jq -r ".[\"$node\"].homelab.location // \"N/A\"")
hl_tags=$(echo "$node_info" | ${jq}/bin/jq -r ".[\"$node\"].homelab.tags | join(\", \")")
echo "| Property | Value |"
echo "|----------|-------|"
echo "| Homelab Hostname | \`$hl_hostname\` |"
echo "| Domain | \`$hl_domain\` |"
echo "| External Domain | \`$hl_external\` |"
echo "| Environment | \`$hl_env\` |"
echo "| Location | \`$hl_location\` |"
echo "| Tags | $hl_tags |"
echo
# Services
echo "### Services"
echo
services_data=$(echo "$node_info" | ${jq}/bin/jq -r ".[\"$node\"].services")
service_count=$(echo "$services_data" | ${jq}/bin/jq 'length')
if [[ "$service_count" -gt 0 ]]; then
echo "| Service | Enabled | Port | Description | Tags |"
echo "|---------|---------|------|-------------|------|"
echo "$services_data" | ${jq}/bin/jq -r 'to_entries[] |
[.key, (.value.enabled | tostring), (.value.port // "N/A" | tostring), (.value.description // "N/A"), (.value.tags | join(", "))] |
@tsv' | while IFS=$'\t' read -r service enabled port description tags; do
enabled_icon=$(if [[ "$enabled" == "true" ]]; then echo ""; else echo ""; fi)
echo "| \`$service\` | $enabled_icon | $port | $description | $tags |"
done
else
echo "No services configured."
fi
else
echo "### Homelab Configuration"
echo
echo " Homelab is not enabled on this node."
fi
echo
echo "---"
echo
done
''