# DO NOT EDIT THIS FILE MANUALLY. IT IS GENERATED.
# This file was generated by running `pkgs/clan-cli/clan_lib.inventory/update.sh`
#
# fmt: off
from typing import Any, Literal, NotRequired, TypedDict


# Mimic "unknown".
# 'Any' is unsafe because it allows any operations
# This forces the user to use type-narrowing or casting in the code
class Unknown:
    pass


InventoryInstanceModuleNameType = str
InventoryInstanceModuleInputType = str | None

class InventoryInstanceModule(TypedDict):
    name: str
    input: NotRequired[InventoryInstanceModuleInputType]



InventoryInstanceRoleMachineSettingsType = Unknown

class InventoryInstanceRoleMachine(TypedDict):
    settings: NotRequired[InventoryInstanceRoleMachineSettingsType]



InventoryInstanceRoleExtramodulesType = list[dict[str, Any] | str]
InventoryInstanceRoleMachinesType = dict[str, InventoryInstanceRoleMachine]
InventoryInstanceRoleSettingsType = Unknown
InventoryInstanceRoleTagsType = dict[str, Any] | list[str]

class InventoryInstanceRole(TypedDict):
    extraModules: NotRequired[InventoryInstanceRoleExtramodulesType]
    machines: NotRequired[InventoryInstanceRoleMachinesType]
    settings: NotRequired[InventoryInstanceRoleSettingsType]
    tags: NotRequired[InventoryInstanceRoleTagsType]



InventoryInstanceModuleType = InventoryInstanceModule
InventoryInstanceRolesType = dict[str, InventoryInstanceRole]

class InventoryInstance(TypedDict):
    module: NotRequired[InventoryInstanceModuleType]
    roles: NotRequired[InventoryInstanceRolesType]



InventoryMachineDeployBuildhostType = str | None
InventoryMachineDeployTargethostType = str | None

class InventoryMachineDeploy(TypedDict):
    buildHost: NotRequired[InventoryMachineDeployBuildhostType]
    targetHost: NotRequired[InventoryMachineDeployTargethostType]



InventoryMachineDeployType = InventoryMachineDeploy
InventoryMachineDescriptionType = str | None
InventoryMachineIconType = str | None
InventoryMachineInstalledatType = int | None
InventoryMachineMachineclassType = Literal["nixos", "darwin"]
InventoryMachineNameType = str
InventoryMachineTagsType = list[str]

class InventoryMachine(TypedDict):
    deploy: NotRequired[InventoryMachineDeployType]
    description: NotRequired[InventoryMachineDescriptionType]
    icon: NotRequired[InventoryMachineIconType]
    installedAt: NotRequired[InventoryMachineInstalledatType]
    machineClass: NotRequired[InventoryMachineMachineclassType]
    name: NotRequired[InventoryMachineNameType]
    tags: NotRequired[InventoryMachineTagsType]



InventoryMetaNameType = str
InventoryMetaDescriptionType = str | None
InventoryMetaIconType = str | None

class InventoryMeta(TypedDict):
    name: str
    description: NotRequired[InventoryMetaDescriptionType]
    icon: NotRequired[InventoryMetaIconType]



InventoryInstancesType = dict[str, InventoryInstance]
InventoryMachinesType = dict[str, InventoryMachine]
InventoryMetaType = InventoryMeta
InventoryModulesType = dict[str, dict[str, Any] | list[Any] | bool | float | int | str | None]
InventoryTagsType = dict[str, list[str]]

class Inventory(TypedDict):
    instances: NotRequired[InventoryInstancesType]
    machines: NotRequired[InventoryMachinesType]
    meta: NotRequired[InventoryMetaType]
    modules: NotRequired[InventoryModulesType]
    tags: NotRequired[InventoryTagsType]



OutputModuleformachineType = dict[str, Unknown]

class Output(TypedDict):
    moduleForMachine: NotRequired[OutputModuleformachineType]



SecretAgePluginsType = list[str]

class SecretAge(TypedDict):
    plugins: NotRequired[SecretAgePluginsType]



SecretAgeType = SecretAge

class Secret(TypedDict):
    age: NotRequired[SecretAgeType]



TemplateClanPathType = str
TemplateClanDescriptionType = str

class TemplateClan(TypedDict):
    path: str
    description: NotRequired[TemplateClanDescriptionType]



TemplateDiskoPathType = str
TemplateDiskoDescriptionType = str

class TemplateDisko(TypedDict):
    path: str
    description: NotRequired[TemplateDiskoDescriptionType]



TemplateMachinePathType = str
TemplateMachineDescriptionType = str

class TemplateMachine(TypedDict):
    path: str
    description: NotRequired[TemplateMachineDescriptionType]



TemplateClanType = dict[str, TemplateClan]
TemplateDiskoType = dict[str, TemplateDisko]
TemplateMachineType = dict[str, TemplateMachine]

class Template(TypedDict):
    clan: NotRequired[TemplateClanType]
    disko: NotRequired[TemplateDiskoType]
    machine: NotRequired[TemplateMachineType]



ClanDirectoryType = dict[str, Any] | list[Any] | bool | float | int | str | None
ClanInventoryType = Inventory
ClanMachinesType = dict[str, Unknown]
ClanMetaType = Unknown
ClanModulesType = dict[str, dict[str, Any] | list[Any] | bool | float | int | str | None]
ClanOutputsType = Output
ClanSecretsType = Secret
ClanTemplatesType = Template

class Clan(TypedDict):
    directory: NotRequired[ClanDirectoryType]
    inventory: NotRequired[ClanInventoryType]
    machines: NotRequired[ClanMachinesType]
    meta: NotRequired[ClanMetaType]
    modules: NotRequired[ClanModulesType]
    outputs: NotRequired[ClanOutputsType]
    secrets: NotRequired[ClanSecretsType]
    templates: NotRequired[ClanTemplatesType]
