# ============================================================================ # Fleet Option Definition # ============================================================================ # This module only defines the athenix.fleet option without any dependencies. # Used by fleet.nix to evaluate inventory data without circular dependencies. { inputs, ... }: { lib, ... }: let fleetDefinition = lib.mkOption { description = "Hardware types definitions for the fleet."; type = lib.types.attrsOf (lib.types.submodule ({ name, ...}: { options = { type = lib.mkOption { type = lib.types.oneOf [ lib.types.str lib.types.listOf lib.types.str ]; default = name; description = "Type(s) of system configuration for this device."; }; system = lib.mkOption { type = lib.types.str; default = "x86_64-linux"; description = "NixOS system architecture for this hardware type."; }; devices = lib.mkOption { type = lib.types.oneOf [ lib.types.int (lib.types.attrsOf (lib.types.submodule ({ name, ... }: { freeformType = lib.types.attrs; }) )) ]; }; count = lib.mkOption { type = lib.types.int; default = 0; description = "Number of devices of this type to create."; }; defaultCount = lib.mkOption { type = lib.types.int; default = 0; description = "Default number of devices to create with default configurations and numbered hostnames."; }; overrides = lib.mkOption { type = lib.types.attrs; default = { }; description = "Overrides to apply to all devices of this type."; }; }; })); }; in { options.athenix = { fleet = fleetDefinition; hwTypes = lib.mkOption { description = "Hardware types definitions for the fleet."; type = lib.types.attrs; }; }; config.athenix.fleet = lib.mkDefault (import ../inventory.nix); config.athenix.hwTypes = lib.mkDefault (import ../hw { inherit inputs; }); }