Feb 12, 3-4 PM (39)
Feb 12, 4-5 PM (49)
Feb 12, 5-6 PM (82)
Feb 12, 6-7 PM (32)
Feb 12, 7-8 PM (30)
Feb 12, 8-9 PM (20)
Feb 12, 9-10 PM (31)
Feb 12, 10-11 PM (50)
Feb 12, 11-12 AM (29)
Feb 13, 12-1 AM (9)
Feb 13, 1-2 AM (9)
Feb 13, 2-3 AM (15)
Feb 13, 3-4 AM (6)
Feb 13, 4-5 AM (5)
Feb 13, 5-6 AM (29)
Feb 13, 6-7 AM (34)
Feb 13, 7-8 AM (31)
Feb 13, 8-9 AM (39)
Feb 13, 9-10 AM (73)
Feb 13, 10-11 AM (73)
Feb 13, 11-12 PM (43)
Feb 13, 12-1 PM (52)
Feb 13, 1-2 PM (59)
Feb 13, 2-3 PM (49)
Feb 13, 3-4 PM (27)
Feb 13, 4-5 PM (27)
Feb 13, 5-6 PM (27)
Feb 13, 6-7 PM (28)
Feb 13, 7-8 PM (24)
Feb 13, 8-9 PM (18)
Feb 13, 9-10 PM (16)
Feb 13, 10-11 PM (28)
Feb 13, 11-12 AM (21)
Feb 14, 12-1 AM (33)
Feb 14, 1-2 AM (9)
Feb 14, 2-3 AM (12)
Feb 14, 3-4 AM (15)
Feb 14, 4-5 AM (30)
Feb 14, 5-6 AM (3)
Feb 14, 6-7 AM (0)
Feb 14, 7-8 AM (5)
Feb 14, 8-9 AM (3)
Feb 14, 9-10 AM (16)
Feb 14, 10-11 AM (17)
Feb 14, 11-12 PM (5)
Feb 14, 12-1 PM (18)
Feb 14, 1-2 PM (15)
Feb 14, 2-3 PM (11)
Feb 14, 3-4 PM (6)
Feb 14, 4-5 PM (18)
Feb 14, 5-6 PM (28)
Feb 14, 6-7 PM (16)
Feb 14, 7-8 PM (5)
Feb 14, 8-9 PM (5)
Feb 14, 9-10 PM (7)
Feb 14, 10-11 PM (23)
Feb 14, 11-12 AM (27)
Feb 15, 12-1 AM (8)
Feb 15, 1-2 AM (4)
Feb 15, 2-3 AM (7)
Feb 15, 3-4 AM (1)
Feb 15, 4-5 AM (1)
Feb 15, 5-6 AM (0)
Feb 15, 6-7 AM (2)
Feb 15, 7-8 AM (1)
Feb 15, 8-9 AM (5)
Feb 15, 9-10 AM (3)
Feb 15, 10-11 AM (2)
Feb 15, 11-12 PM (13)
Feb 15, 12-1 PM (27)
Feb 15, 1-2 PM (6)
Feb 15, 2-3 PM (9)
Feb 15, 3-4 PM (15)
Feb 15, 4-5 PM (6)
Feb 15, 5-6 PM (8)
Feb 15, 6-7 PM (3)
Feb 15, 7-8 PM (20)
Feb 15, 8-9 PM (6)
Feb 15, 9-10 PM (10)
Feb 15, 10-11 PM (21)
Feb 15, 11-12 AM (23)
Feb 16, 12-1 AM (2)
Feb 16, 1-2 AM (8)
Feb 16, 2-3 AM (15)
Feb 16, 3-4 AM (6)
Feb 16, 4-5 AM (1)
Feb 16, 5-6 AM (6)
Feb 16, 6-7 AM (2)
Feb 16, 7-8 AM (14)
Feb 16, 8-9 AM (33)
Feb 16, 9-10 AM (70)
Feb 16, 10-11 AM (52)
Feb 16, 11-12 PM (50)
Feb 16, 12-1 PM (71)
Feb 16, 1-2 PM (91)
Feb 16, 2-3 PM (64)
Feb 16, 3-4 PM (34)
Feb 16, 4-5 PM (30)
Feb 16, 5-6 PM (29)
Feb 16, 6-7 PM (24)
Feb 16, 7-8 PM (22)
Feb 16, 8-9 PM (10)
Feb 16, 9-10 PM (21)
Feb 16, 10-11 PM (33)
Feb 16, 11-12 AM (32)
Feb 17, 12-1 AM (24)
Feb 17, 1-2 AM (3)
Feb 17, 2-3 AM (8)
Feb 17, 3-4 AM (2)
Feb 17, 4-5 AM (4)
Feb 17, 5-6 AM (8)
Feb 17, 6-7 AM (7)
Feb 17, 7-8 AM (18)
Feb 17, 8-9 AM (38)
Feb 17, 9-10 AM (87)
Feb 17, 10-11 AM (36)
Feb 17, 11-12 PM (38)
Feb 17, 12-1 PM (79)
Feb 17, 1-2 PM (39)
Feb 17, 2-3 PM (50)
Feb 17, 3-4 PM (60)
Feb 17, 4-5 PM (42)
Feb 17, 5-6 PM (30)
Feb 17, 6-7 PM (19)
Feb 17, 7-8 PM (13)
Feb 17, 8-9 PM (23)
Feb 17, 9-10 PM (11)
Feb 17, 10-11 PM (59)
Feb 17, 11-12 AM (44)
Feb 18, 12-1 AM (21)
Feb 18, 1-2 AM (13)
Feb 18, 2-3 AM (16)
Feb 18, 3-4 AM (18)
Feb 18, 4-5 AM (16)
Feb 18, 5-6 AM (15)
Feb 18, 6-7 AM (19)
Feb 18, 7-8 AM (53)
Feb 18, 8-9 AM (93)
Feb 18, 9-10 AM (35)
Feb 18, 10-11 AM (36)
Feb 18, 11-12 PM (62)
Feb 18, 12-1 PM (41)
Feb 18, 1-2 PM (114)
Feb 18, 2-3 PM (61)
Feb 18, 3-4 PM (36)
Feb 18, 4-5 PM (16)
Feb 18, 5-6 PM (40)
Feb 18, 6-7 PM (30)
Feb 18, 7-8 PM (35)
Feb 18, 8-9 PM (47)
Feb 18, 9-10 PM (31)
Feb 18, 10-11 PM (44)
Feb 18, 11-12 AM (23)
Feb 19, 12-1 AM (14)
Feb 19, 1-2 AM (6)
Feb 19, 2-3 AM (6)
Feb 19, 3-4 AM (3)
Feb 19, 4-5 AM (3)
Feb 19, 5-6 AM (3)
Feb 19, 6-7 AM (17)
Feb 19, 7-8 AM (83)
Feb 19, 8-9 AM (51)
Feb 19, 9-10 AM (114)
Feb 19, 10-11 AM (99)
Feb 19, 11-12 PM (94)
Feb 19, 12-1 PM (64)
Feb 19, 1-2 PM (42)
Feb 19, 2-3 PM (59)
Feb 19, 3-4 PM (14)
4,654 commits this week Feb 12, 2026 - Feb 19, 2026
docs: add module-docs auto-generator for NixOS and flake module options
Adds `perSystem/packages/module-docs.nix` which builds
`nixosOptionsDoc`-based Markdown for all cardano-parts options:

  nix build .#module-docs-nixos   # NixOS module options
  nix build .#module-docs-flake   # flake module options
  nix build .#module-docs         # both combined

NixOS modules (Tier 1-3 fully documented):
- profile-cardano-node-topology, module-nginx-vhost-exporter,
  profile-aws-ec2-ephemeral, profile-cardano-postgres,
  profile-mithril-relay, profile-cardano-custom-metrics,
  profile-tcpdump, profile-blockperf, profile-grafana-alloy,
  profile-cardano-node-group, role-block-producer,
  profile-cardano-db-sync, profile-cardano-db-sync-snapshots,
  profile-cardano-webserver, profile-cardano-faucet,
  profile-cardano-metadata, profile-cardano-smash,
  service-cardano-faucet

Flake modules (all four namespaces documented):
- flake.cardano-parts.cluster, flake.cardano-parts.pkgs,
  flake.cardano-parts.lib, flake.cardano-parts.aws

Flake docs use a standalone lib.evalModules with only the four
cardano-parts flake modules rather than the full flake-parts
eval (which would trigger perSystem package evaluation without a
system context, causing a "process-compose option has no value"
error). All complex defaults in flakeModules get defaultText to
prevent stack overflow in generators.toPretty (the self-referential
groupFlake = flake default was the original trigger).

Supporting changes:
- flakeModules/cluster.nix: add defaultText to all complex defaults;
  allow null in optionCheck; fix conditional kms/bucketName defaults;
  fix groupMeta.domain type to nullOr str
- flakeModules/pkgs.nix: add defaultText to mkPkg helper and all
  special function options
- flakeModules/shell.nix: add defaultText to complex shell defaults
- flakeModules/aws.nix: add defaultText with literalExpression to
  rawSpec and spec options
- flake/nixosModules/profile-cardano-parts.nix: drop deprecated
  lib.mdDoc wrappers (plain strings are now implicit Markdown)