/* eslint-disable */
/**
 * This file was automatically generated by json-schema-to-typescript.
 * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,
 * and run json-schema-to-typescript to regenerate this file.
 */

export type AdminConfig = AdminConfigRoleDefault;
export type AdminConfig1 = AdminConfigRoleDefault1;
export type AutoUpgradeConfig = AutoUpgradeConfigRoleDefault;
export type AutoUpgradeConfig1 = AutoUpgradeConfigRoleDefault1;
export type BorgbackupConfig =
  | BorgbackupConfigRoleClient
  | BorgbackupConfigRoleServer;
export type BorgbackupConfig1 =
  | BorgbackupConfigRoleClient1
  | BorgbackupConfigRoleServer1;
export type DataMesherConfig =
  | DataMesherConfigRoleAdmin
  | DataMesherConfigRolePeer
  | DataMesherConfigRoleSigner;
export type DataMesherConfig1 =
  | DataMesherConfigRoleAdmin1
  | DataMesherConfigRolePeer1
  | DataMesherConfigRoleSigner1;
export type DeltachatConfig = DeltachatConfigRoleDefault;
export type DeltachatConfig1 = DeltachatConfigRoleDefault1;
export type DiskIdConfig = DiskIdConfigRoleDefault;
export type DiskIdConfig1 = DiskIdConfigRoleDefault1;
export type ErgochatConfig = ErgochatConfigRoleDefault;
export type ErgochatConfig1 = ErgochatConfigRoleDefault1;
export type GarageConfig = GarageConfigRoleDefault;
export type GarageConfig1 = GarageConfigRoleDefault1;
export type HeisenbridgeConfig = HeisenbridgeConfigRoleDefault;
export type HeisenbridgeConfig1 = HeisenbridgeConfigRoleDefault1;
export type ImporterConfig = ImporterConfigRoleDefault;
export type ImporterConfig1 = ImporterConfigRoleDefault1;
export type IwdConfig = IwdConfigRoleDefault;
export type IwdConfig1 = IwdConfigRoleDefault1;
export type LocalsendConfig = LocalsendConfigRoleDefault;
export type LocalsendConfig1 = LocalsendConfigRoleDefault1;
export type MumbleConfig = MumbleConfigRoleServer;
export type MumbleConfig1 = MumbleConfigRoleServer1;
export type MyceliumConfig = MyceliumConfigRolePeer;
export type MyceliumConfig1 = MyceliumConfigRolePeer1;
export type PackagesConfig = PackagesConfigRoleDefault;
export type PackagesConfig1 = PackagesConfigRoleDefault1;
export type RootPasswordConfig = RootPasswordConfigRoleDefault;
export type RootPasswordConfig1 = RootPasswordConfigRoleDefault1;
export type SingleDiskConfig = SingleDiskConfigRoleDefault;
export type SingleDiskConfig1 = SingleDiskConfigRoleDefault1;
export type SshdConfig = SshdConfigRoleClient | SshdConfigRoleServer;
export type SshdConfig1 = SshdConfigRoleClient1 | SshdConfigRoleServer1;
export type StateVersionConfig = StateVersionConfigRoleDefault;
export type StateVersionConfig1 = StateVersionConfigRoleDefault1;
export type SyncthingConfig =
  | SyncthingConfigRoleIntroducer
  | SyncthingConfigRolePeer;
export type SyncthingConfig1 =
  | SyncthingConfigRoleIntroducer1
  | SyncthingConfigRolePeer1;
export type UserPasswordConfig = UserPasswordConfigRoleDefault;
export type UserPasswordConfig1 = UserPasswordConfigRoleDefault1;
export type ZerotierConfig =
  | ZerotierConfigRoleController
  | ZerotierConfigRoleMoon
  | ZerotierConfigRolePeer;
export type ZerotierConfig1 =
  | ZerotierConfigRoleController1
  | ZerotierConfigRoleMoon1
  | ZerotierConfigRolePeer1;

export interface Schema {
  /**
   * Multi host service module instances
   */
  instances?: {
    [k: string]: {
      module?: {
        /**
         * Name of the input. Default to 'null' which means the module is local
         *
         */
        input?: null | string;
        /**
         * Attribute of the clan service module imported from the chosen input.
         *
         * Defaults to the name of the instance.
         *
         */
        name?: string;
      };
      roles?: {
        [k: string]: {
          /**
           * List of additionally imported `.nix` expressions.
           *
           * Supported types:
           *
           * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
           * - **Paths**: should be relative to the current file.
           * - **Any**: Nix expression must be serializable to JSON.
           *
           * !!! Note
           *     **The import only happens if the machine is part of the service or role.**
           *
           * Other types are passed through to the nixos configuration.
           *
           * ???+ Example
           *     To import the `special.nix` file
           *
           *     ```
           *     . Clan Directory
           *     ├── flake.nix
           *     ...
           *     └── modules
           *         ├── special.nix
           *         └── ...
           *     ```
           *
           *     ```nix
           *     {
           *       extraModules = [ "modules/special.nix" ];
           *     }
           *     ```
           *
           */
          extraModules?: (
            | string
            | {
                [k: string]:
                  | boolean
                  | number
                  | string
                  | unknown[]
                  | {
                      [k: string]: unknown;
                    }
                  | null;
              }
          )[];
          machines?: {
            [k: string]: {
              settings?: unknown;
            };
          };
          settings?: unknown;
          tags?: {
            [k: string]: {};
          };
        };
      };
    };
  };
  /**
   * Machines in the inventory.
   *
   * Each machine declared here can be referencd via its `attributeName` by the `inventory.service`s `roles`.
   *
   */
  machines?: {
    [k: string]: {
      deploy: {
        /**
         * SSH address of the host to build the machine on
         */
        buildHost?: null | string;
        /**
         * SSH address of the host to deploy the machine to
         */
        targetHost?: null | string;
      };
      /**
       * Optional freeform description
       *
       */
      description?: null | string;
      /**
       * Under construction, will be used for the UI
       *
       */
      icon?: null | string;
      /**
       * The module system that should be used to construct the machine
       *
       * Set this to `darwin` for macOS machines
       *
       */
      machineClass?: "nixos" | "darwin";
      /**
       * Name of the machine or service
       *
       */
      name?: string;
      /**
       * List of tags for the machine.
       *
       * The machine can be referenced by its tags in `inventory.services`
       *
       * ???+ Example
       *     ```nix
       *     inventory.machines.machineA.tags = [ "tag1" "tag2" ];
       *     ```
       *
       *     ```nix
       *     services.borgbackup."instance_1".roles.client.tags = [ "tag1" ];
       *     ```
       *
       * !!! Note
       *     Tags can be used to determine the membership of the machine in the services.
       *     Without changing the service configuration, the machine can be added to a service by adding the correct tags to the machine.
       *
       *
       */
      tags?: string[];
    };
  };
  meta: {
    /**
     * Optional freeform description
     *
     */
    description?: null | string;
    /**
     * Under construction, will be used for the UI
     *
     */
    icon?: null | string;
    /**
     * Name of the clan.
     *
     * Needs to be (globally) unique, as this determines the folder name where the flake gets downloaded to.
     *
     * Should only contain alphanumeric characters, `_` and `-`.
     *
     */
    name: string;
  };
  /**
   * A mapping of module names to their path.
   *
   * Each module can be referenced by its `attributeName` in the `inventory.services` attribute set.
   *
   * !!! Important
   *     Each module MUST fulfill the following requirements to be usable with the inventory:
   *
   *     - The module MUST have a `README.md` file with a `description`.
   *     - The module MUST have at least `features = [ "inventory" ]` in the frontmatter section.
   *     - The module MUST have a subfolder `roles` with at least one `{roleName}.nix` file.
   *
   *     For further information see: [Module Authoring Guide](../../guides/services/community.md).
   *
   * ???+ example
   *     ```nix
   *     clan-core.lib.clan {
   *         # 1. Add the module to the available inventory modules
   *         inventory.modules = {
   *           custom-module = ./modules/my_module;
   *         };
   *         # 2. Use the module in the inventory
   *         inventory.services = {
   *           custom-module.instance_1 = {
   *               roles.default.machines = [ "machineA" ];
   *           };
   *         };
   *     };
   *     ```
   *
   */
  modules?: {
    [k: string]:
      | boolean
      | number
      | string
      | unknown[]
      | {
          [k: string]: unknown;
        }
      | null;
  };
  services?: {
    admin?: {
      [k: string]: {
        config?: AdminConfig;
        /**
         * Enable or disable the complete service.
         *
         * If the service is disabled, it will not be added to any machine.
         *
         * !!! Note
         *     This flag is primarily used to temporarily disable a service.
         *     I.e. A 'backup service' without any 'server' might be incomplete and would cause failure if enabled.
         *
         */
        enabled?: boolean;
        /**
         * List of additionally imported `.nix` expressions.
         *
         * Supported types:
         *
         * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
         * - **Paths**: should be relative to the current file.
         * - **Any**: Nix expression must be serializable to JSON.
         *
         * !!! Note
         *     **The import only happens if the machine is part of the service or role.**
         *
         * Other types are passed through to the nixos configuration.
         *
         * ???+ Example
         *     To import the `special.nix` file
         *
         *     ```
         *     . Clan Directory
         *     ├── flake.nix
         *     ...
         *     └── modules
         *         ├── special.nix
         *         └── ...
         *     ```
         *
         *     ```nix
         *     {
         *       extraModules = [ "modules/special.nix" ];
         *     }
         *     ```
         *
         */
        extraModules?: (
          | string
          | (
              | boolean
              | number
              | string
              | unknown[]
              | {
                  [k: string]: unknown;
                }
              | null
            )
        )[];
        machines?: {
          [k: string]: {
            config?: AdminConfig1;
            /**
             * List of additionally imported `.nix` expressions.
             *
             * Supported types:
             *
             * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
             * - **Paths**: should be relative to the current file.
             * - **Any**: Nix expression must be serializable to JSON.
             *
             * !!! Note
             *     **The import only happens if the machine is part of the service or role.**
             *
             * Other types are passed through to the nixos configuration.
             *
             * ???+ Example
             *     To import the `special.nix` file
             *
             *     ```
             *     . Clan Directory
             *     ├── flake.nix
             *     ...
             *     └── modules
             *         ├── special.nix
             *         └── ...
             *     ```
             *
             *     ```nix
             *     {
             *       extraModules = [ "modules/special.nix" ];
             *     }
             *     ```
             *
             */
            extraModules?: (
              | string
              | (
                  | boolean
                  | number
                  | string
                  | unknown[]
                  | {
                      [k: string]: unknown;
                    }
                  | null
                )
            )[];
            [k: string]: unknown;
          };
        };
        meta?: {
          /**
           * Optional freeform description
           *
           */
          description?: null | string;
          /**
           * Under construction, will be used for the UI
           *
           */
          icon?: null | string;
          /**
           * Name of the machine or service
           *
           */
          name?: string;
        };
        roles?: AdminRoles;
      };
    };
    "auto-upgrade"?: {
      [k: string]: {
        config?: AutoUpgradeConfig;
        /**
         * Enable or disable the complete service.
         *
         * If the service is disabled, it will not be added to any machine.
         *
         * !!! Note
         *     This flag is primarily used to temporarily disable a service.
         *     I.e. A 'backup service' without any 'server' might be incomplete and would cause failure if enabled.
         *
         */
        enabled?: boolean;
        /**
         * List of additionally imported `.nix` expressions.
         *
         * Supported types:
         *
         * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
         * - **Paths**: should be relative to the current file.
         * - **Any**: Nix expression must be serializable to JSON.
         *
         * !!! Note
         *     **The import only happens if the machine is part of the service or role.**
         *
         * Other types are passed through to the nixos configuration.
         *
         * ???+ Example
         *     To import the `special.nix` file
         *
         *     ```
         *     . Clan Directory
         *     ├── flake.nix
         *     ...
         *     └── modules
         *         ├── special.nix
         *         └── ...
         *     ```
         *
         *     ```nix
         *     {
         *       extraModules = [ "modules/special.nix" ];
         *     }
         *     ```
         *
         */
        extraModules?: (
          | string
          | (
              | boolean
              | number
              | string
              | unknown[]
              | {
                  [k: string]: unknown;
                }
              | null
            )
        )[];
        machines?: {
          [k: string]: {
            config?: AutoUpgradeConfig1;
            /**
             * List of additionally imported `.nix` expressions.
             *
             * Supported types:
             *
             * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
             * - **Paths**: should be relative to the current file.
             * - **Any**: Nix expression must be serializable to JSON.
             *
             * !!! Note
             *     **The import only happens if the machine is part of the service or role.**
             *
             * Other types are passed through to the nixos configuration.
             *
             * ???+ Example
             *     To import the `special.nix` file
             *
             *     ```
             *     . Clan Directory
             *     ├── flake.nix
             *     ...
             *     └── modules
             *         ├── special.nix
             *         └── ...
             *     ```
             *
             *     ```nix
             *     {
             *       extraModules = [ "modules/special.nix" ];
             *     }
             *     ```
             *
             */
            extraModules?: (
              | string
              | (
                  | boolean
                  | number
                  | string
                  | unknown[]
                  | {
                      [k: string]: unknown;
                    }
                  | null
                )
            )[];
            [k: string]: unknown;
          };
        };
        meta?: {
          /**
           * Optional freeform description
           *
           */
          description?: null | string;
          /**
           * Under construction, will be used for the UI
           *
           */
          icon?: null | string;
          /**
           * Name of the machine or service
           *
           */
          name?: string;
        };
        roles?: AutoUpgradeRoles;
      };
    };
    borgbackup?: {
      [k: string]: {
        config?: BorgbackupConfig;
        /**
         * Enable or disable the complete service.
         *
         * If the service is disabled, it will not be added to any machine.
         *
         * !!! Note
         *     This flag is primarily used to temporarily disable a service.
         *     I.e. A 'backup service' without any 'server' might be incomplete and would cause failure if enabled.
         *
         */
        enabled?: boolean;
        /**
         * List of additionally imported `.nix` expressions.
         *
         * Supported types:
         *
         * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
         * - **Paths**: should be relative to the current file.
         * - **Any**: Nix expression must be serializable to JSON.
         *
         * !!! Note
         *     **The import only happens if the machine is part of the service or role.**
         *
         * Other types are passed through to the nixos configuration.
         *
         * ???+ Example
         *     To import the `special.nix` file
         *
         *     ```
         *     . Clan Directory
         *     ├── flake.nix
         *     ...
         *     └── modules
         *         ├── special.nix
         *         └── ...
         *     ```
         *
         *     ```nix
         *     {
         *       extraModules = [ "modules/special.nix" ];
         *     }
         *     ```
         *
         */
        extraModules?: (
          | string
          | (
              | boolean
              | number
              | string
              | unknown[]
              | {
                  [k: string]: unknown;
                }
              | null
            )
        )[];
        machines?: {
          [k: string]: {
            config?: BorgbackupConfig1;
            /**
             * List of additionally imported `.nix` expressions.
             *
             * Supported types:
             *
             * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
             * - **Paths**: should be relative to the current file.
             * - **Any**: Nix expression must be serializable to JSON.
             *
             * !!! Note
             *     **The import only happens if the machine is part of the service or role.**
             *
             * Other types are passed through to the nixos configuration.
             *
             * ???+ Example
             *     To import the `special.nix` file
             *
             *     ```
             *     . Clan Directory
             *     ├── flake.nix
             *     ...
             *     └── modules
             *         ├── special.nix
             *         └── ...
             *     ```
             *
             *     ```nix
             *     {
             *       extraModules = [ "modules/special.nix" ];
             *     }
             *     ```
             *
             */
            extraModules?: (
              | string
              | (
                  | boolean
                  | number
                  | string
                  | unknown[]
                  | {
                      [k: string]: unknown;
                    }
                  | null
                )
            )[];
            [k: string]: unknown;
          };
        };
        meta?: {
          /**
           * Optional freeform description
           *
           */
          description?: null | string;
          /**
           * Under construction, will be used for the UI
           *
           */
          icon?: null | string;
          /**
           * Name of the machine or service
           *
           */
          name?: string;
        };
        roles?: BorgbackupRoles;
      };
    };
    "data-mesher"?: {
      [k: string]: {
        config?: DataMesherConfig;
        /**
         * Enable or disable the complete service.
         *
         * If the service is disabled, it will not be added to any machine.
         *
         * !!! Note
         *     This flag is primarily used to temporarily disable a service.
         *     I.e. A 'backup service' without any 'server' might be incomplete and would cause failure if enabled.
         *
         */
        enabled?: boolean;
        /**
         * List of additionally imported `.nix` expressions.
         *
         * Supported types:
         *
         * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
         * - **Paths**: should be relative to the current file.
         * - **Any**: Nix expression must be serializable to JSON.
         *
         * !!! Note
         *     **The import only happens if the machine is part of the service or role.**
         *
         * Other types are passed through to the nixos configuration.
         *
         * ???+ Example
         *     To import the `special.nix` file
         *
         *     ```
         *     . Clan Directory
         *     ├── flake.nix
         *     ...
         *     └── modules
         *         ├── special.nix
         *         └── ...
         *     ```
         *
         *     ```nix
         *     {
         *       extraModules = [ "modules/special.nix" ];
         *     }
         *     ```
         *
         */
        extraModules?: (
          | string
          | (
              | boolean
              | number
              | string
              | unknown[]
              | {
                  [k: string]: unknown;
                }
              | null
            )
        )[];
        machines?: {
          [k: string]: {
            config?: DataMesherConfig1;
            /**
             * List of additionally imported `.nix` expressions.
             *
             * Supported types:
             *
             * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
             * - **Paths**: should be relative to the current file.
             * - **Any**: Nix expression must be serializable to JSON.
             *
             * !!! Note
             *     **The import only happens if the machine is part of the service or role.**
             *
             * Other types are passed through to the nixos configuration.
             *
             * ???+ Example
             *     To import the `special.nix` file
             *
             *     ```
             *     . Clan Directory
             *     ├── flake.nix
             *     ...
             *     └── modules
             *         ├── special.nix
             *         └── ...
             *     ```
             *
             *     ```nix
             *     {
             *       extraModules = [ "modules/special.nix" ];
             *     }
             *     ```
             *
             */
            extraModules?: (
              | string
              | (
                  | boolean
                  | number
                  | string
                  | unknown[]
                  | {
                      [k: string]: unknown;
                    }
                  | null
                )
            )[];
            [k: string]: unknown;
          };
        };
        meta?: {
          /**
           * Optional freeform description
           *
           */
          description?: null | string;
          /**
           * Under construction, will be used for the UI
           *
           */
          icon?: null | string;
          /**
           * Name of the machine or service
           *
           */
          name?: string;
        };
        roles?: DataMesherRoles;
      };
    };
    deltachat?: {
      [k: string]: {
        config?: DeltachatConfig;
        /**
         * Enable or disable the complete service.
         *
         * If the service is disabled, it will not be added to any machine.
         *
         * !!! Note
         *     This flag is primarily used to temporarily disable a service.
         *     I.e. A 'backup service' without any 'server' might be incomplete and would cause failure if enabled.
         *
         */
        enabled?: boolean;
        /**
         * List of additionally imported `.nix` expressions.
         *
         * Supported types:
         *
         * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
         * - **Paths**: should be relative to the current file.
         * - **Any**: Nix expression must be serializable to JSON.
         *
         * !!! Note
         *     **The import only happens if the machine is part of the service or role.**
         *
         * Other types are passed through to the nixos configuration.
         *
         * ???+ Example
         *     To import the `special.nix` file
         *
         *     ```
         *     . Clan Directory
         *     ├── flake.nix
         *     ...
         *     └── modules
         *         ├── special.nix
         *         └── ...
         *     ```
         *
         *     ```nix
         *     {
         *       extraModules = [ "modules/special.nix" ];
         *     }
         *     ```
         *
         */
        extraModules?: (
          | string
          | (
              | boolean
              | number
              | string
              | unknown[]
              | {
                  [k: string]: unknown;
                }
              | null
            )
        )[];
        machines?: {
          [k: string]: {
            config?: DeltachatConfig1;
            /**
             * List of additionally imported `.nix` expressions.
             *
             * Supported types:
             *
             * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
             * - **Paths**: should be relative to the current file.
             * - **Any**: Nix expression must be serializable to JSON.
             *
             * !!! Note
             *     **The import only happens if the machine is part of the service or role.**
             *
             * Other types are passed through to the nixos configuration.
             *
             * ???+ Example
             *     To import the `special.nix` file
             *
             *     ```
             *     . Clan Directory
             *     ├── flake.nix
             *     ...
             *     └── modules
             *         ├── special.nix
             *         └── ...
             *     ```
             *
             *     ```nix
             *     {
             *       extraModules = [ "modules/special.nix" ];
             *     }
             *     ```
             *
             */
            extraModules?: (
              | string
              | (
                  | boolean
                  | number
                  | string
                  | unknown[]
                  | {
                      [k: string]: unknown;
                    }
                  | null
                )
            )[];
            [k: string]: unknown;
          };
        };
        meta?: {
          /**
           * Optional freeform description
           *
           */
          description?: null | string;
          /**
           * Under construction, will be used for the UI
           *
           */
          icon?: null | string;
          /**
           * Name of the machine or service
           *
           */
          name?: string;
        };
        roles?: DeltachatRoles;
      };
    };
    "disk-id"?: {
      [k: string]: {
        config?: DiskIdConfig;
        /**
         * Enable or disable the complete service.
         *
         * If the service is disabled, it will not be added to any machine.
         *
         * !!! Note
         *     This flag is primarily used to temporarily disable a service.
         *     I.e. A 'backup service' without any 'server' might be incomplete and would cause failure if enabled.
         *
         */
        enabled?: boolean;
        /**
         * List of additionally imported `.nix` expressions.
         *
         * Supported types:
         *
         * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
         * - **Paths**: should be relative to the current file.
         * - **Any**: Nix expression must be serializable to JSON.
         *
         * !!! Note
         *     **The import only happens if the machine is part of the service or role.**
         *
         * Other types are passed through to the nixos configuration.
         *
         * ???+ Example
         *     To import the `special.nix` file
         *
         *     ```
         *     . Clan Directory
         *     ├── flake.nix
         *     ...
         *     └── modules
         *         ├── special.nix
         *         └── ...
         *     ```
         *
         *     ```nix
         *     {
         *       extraModules = [ "modules/special.nix" ];
         *     }
         *     ```
         *
         */
        extraModules?: (
          | string
          | (
              | boolean
              | number
              | string
              | unknown[]
              | {
                  [k: string]: unknown;
                }
              | null
            )
        )[];
        machines?: {
          [k: string]: {
            config?: DiskIdConfig1;
            /**
             * List of additionally imported `.nix` expressions.
             *
             * Supported types:
             *
             * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
             * - **Paths**: should be relative to the current file.
             * - **Any**: Nix expression must be serializable to JSON.
             *
             * !!! Note
             *     **The import only happens if the machine is part of the service or role.**
             *
             * Other types are passed through to the nixos configuration.
             *
             * ???+ Example
             *     To import the `special.nix` file
             *
             *     ```
             *     . Clan Directory
             *     ├── flake.nix
             *     ...
             *     └── modules
             *         ├── special.nix
             *         └── ...
             *     ```
             *
             *     ```nix
             *     {
             *       extraModules = [ "modules/special.nix" ];
             *     }
             *     ```
             *
             */
            extraModules?: (
              | string
              | (
                  | boolean
                  | number
                  | string
                  | unknown[]
                  | {
                      [k: string]: unknown;
                    }
                  | null
                )
            )[];
            [k: string]: unknown;
          };
        };
        meta?: {
          /**
           * Optional freeform description
           *
           */
          description?: null | string;
          /**
           * Under construction, will be used for the UI
           *
           */
          icon?: null | string;
          /**
           * Name of the machine or service
           *
           */
          name?: string;
        };
        roles?: DiskIdRoles;
      };
    };
    ergochat?: {
      [k: string]: {
        config?: ErgochatConfig;
        /**
         * Enable or disable the complete service.
         *
         * If the service is disabled, it will not be added to any machine.
         *
         * !!! Note
         *     This flag is primarily used to temporarily disable a service.
         *     I.e. A 'backup service' without any 'server' might be incomplete and would cause failure if enabled.
         *
         */
        enabled?: boolean;
        /**
         * List of additionally imported `.nix` expressions.
         *
         * Supported types:
         *
         * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
         * - **Paths**: should be relative to the current file.
         * - **Any**: Nix expression must be serializable to JSON.
         *
         * !!! Note
         *     **The import only happens if the machine is part of the service or role.**
         *
         * Other types are passed through to the nixos configuration.
         *
         * ???+ Example
         *     To import the `special.nix` file
         *
         *     ```
         *     . Clan Directory
         *     ├── flake.nix
         *     ...
         *     └── modules
         *         ├── special.nix
         *         └── ...
         *     ```
         *
         *     ```nix
         *     {
         *       extraModules = [ "modules/special.nix" ];
         *     }
         *     ```
         *
         */
        extraModules?: (
          | string
          | (
              | boolean
              | number
              | string
              | unknown[]
              | {
                  [k: string]: unknown;
                }
              | null
            )
        )[];
        machines?: {
          [k: string]: {
            config?: ErgochatConfig1;
            /**
             * List of additionally imported `.nix` expressions.
             *
             * Supported types:
             *
             * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
             * - **Paths**: should be relative to the current file.
             * - **Any**: Nix expression must be serializable to JSON.
             *
             * !!! Note
             *     **The import only happens if the machine is part of the service or role.**
             *
             * Other types are passed through to the nixos configuration.
             *
             * ???+ Example
             *     To import the `special.nix` file
             *
             *     ```
             *     . Clan Directory
             *     ├── flake.nix
             *     ...
             *     └── modules
             *         ├── special.nix
             *         └── ...
             *     ```
             *
             *     ```nix
             *     {
             *       extraModules = [ "modules/special.nix" ];
             *     }
             *     ```
             *
             */
            extraModules?: (
              | string
              | (
                  | boolean
                  | number
                  | string
                  | unknown[]
                  | {
                      [k: string]: unknown;
                    }
                  | null
                )
            )[];
            [k: string]: unknown;
          };
        };
        meta?: {
          /**
           * Optional freeform description
           *
           */
          description?: null | string;
          /**
           * Under construction, will be used for the UI
           *
           */
          icon?: null | string;
          /**
           * Name of the machine or service
           *
           */
          name?: string;
        };
        roles?: ErgochatRoles;
      };
    };
    garage?: {
      [k: string]: {
        config?: GarageConfig;
        /**
         * Enable or disable the complete service.
         *
         * If the service is disabled, it will not be added to any machine.
         *
         * !!! Note
         *     This flag is primarily used to temporarily disable a service.
         *     I.e. A 'backup service' without any 'server' might be incomplete and would cause failure if enabled.
         *
         */
        enabled?: boolean;
        /**
         * List of additionally imported `.nix` expressions.
         *
         * Supported types:
         *
         * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
         * - **Paths**: should be relative to the current file.
         * - **Any**: Nix expression must be serializable to JSON.
         *
         * !!! Note
         *     **The import only happens if the machine is part of the service or role.**
         *
         * Other types are passed through to the nixos configuration.
         *
         * ???+ Example
         *     To import the `special.nix` file
         *
         *     ```
         *     . Clan Directory
         *     ├── flake.nix
         *     ...
         *     └── modules
         *         ├── special.nix
         *         └── ...
         *     ```
         *
         *     ```nix
         *     {
         *       extraModules = [ "modules/special.nix" ];
         *     }
         *     ```
         *
         */
        extraModules?: (
          | string
          | (
              | boolean
              | number
              | string
              | unknown[]
              | {
                  [k: string]: unknown;
                }
              | null
            )
        )[];
        machines?: {
          [k: string]: {
            config?: GarageConfig1;
            /**
             * List of additionally imported `.nix` expressions.
             *
             * Supported types:
             *
             * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
             * - **Paths**: should be relative to the current file.
             * - **Any**: Nix expression must be serializable to JSON.
             *
             * !!! Note
             *     **The import only happens if the machine is part of the service or role.**
             *
             * Other types are passed through to the nixos configuration.
             *
             * ???+ Example
             *     To import the `special.nix` file
             *
             *     ```
             *     . Clan Directory
             *     ├── flake.nix
             *     ...
             *     └── modules
             *         ├── special.nix
             *         └── ...
             *     ```
             *
             *     ```nix
             *     {
             *       extraModules = [ "modules/special.nix" ];
             *     }
             *     ```
             *
             */
            extraModules?: (
              | string
              | (
                  | boolean
                  | number
                  | string
                  | unknown[]
                  | {
                      [k: string]: unknown;
                    }
                  | null
                )
            )[];
            [k: string]: unknown;
          };
        };
        meta?: {
          /**
           * Optional freeform description
           *
           */
          description?: null | string;
          /**
           * Under construction, will be used for the UI
           *
           */
          icon?: null | string;
          /**
           * Name of the machine or service
           *
           */
          name?: string;
        };
        roles?: GarageRoles;
      };
    };
    heisenbridge?: {
      [k: string]: {
        config?: HeisenbridgeConfig;
        /**
         * Enable or disable the complete service.
         *
         * If the service is disabled, it will not be added to any machine.
         *
         * !!! Note
         *     This flag is primarily used to temporarily disable a service.
         *     I.e. A 'backup service' without any 'server' might be incomplete and would cause failure if enabled.
         *
         */
        enabled?: boolean;
        /**
         * List of additionally imported `.nix` expressions.
         *
         * Supported types:
         *
         * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
         * - **Paths**: should be relative to the current file.
         * - **Any**: Nix expression must be serializable to JSON.
         *
         * !!! Note
         *     **The import only happens if the machine is part of the service or role.**
         *
         * Other types are passed through to the nixos configuration.
         *
         * ???+ Example
         *     To import the `special.nix` file
         *
         *     ```
         *     . Clan Directory
         *     ├── flake.nix
         *     ...
         *     └── modules
         *         ├── special.nix
         *         └── ...
         *     ```
         *
         *     ```nix
         *     {
         *       extraModules = [ "modules/special.nix" ];
         *     }
         *     ```
         *
         */
        extraModules?: (
          | string
          | (
              | boolean
              | number
              | string
              | unknown[]
              | {
                  [k: string]: unknown;
                }
              | null
            )
        )[];
        machines?: {
          [k: string]: {
            config?: HeisenbridgeConfig1;
            /**
             * List of additionally imported `.nix` expressions.
             *
             * Supported types:
             *
             * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
             * - **Paths**: should be relative to the current file.
             * - **Any**: Nix expression must be serializable to JSON.
             *
             * !!! Note
             *     **The import only happens if the machine is part of the service or role.**
             *
             * Other types are passed through to the nixos configuration.
             *
             * ???+ Example
             *     To import the `special.nix` file
             *
             *     ```
             *     . Clan Directory
             *     ├── flake.nix
             *     ...
             *     └── modules
             *         ├── special.nix
             *         └── ...
             *     ```
             *
             *     ```nix
             *     {
             *       extraModules = [ "modules/special.nix" ];
             *     }
             *     ```
             *
             */
            extraModules?: (
              | string
              | (
                  | boolean
                  | number
                  | string
                  | unknown[]
                  | {
                      [k: string]: unknown;
                    }
                  | null
                )
            )[];
            [k: string]: unknown;
          };
        };
        meta?: {
          /**
           * Optional freeform description
           *
           */
          description?: null | string;
          /**
           * Under construction, will be used for the UI
           *
           */
          icon?: null | string;
          /**
           * Name of the machine or service
           *
           */
          name?: string;
        };
        roles?: HeisenbridgeRoles;
      };
    };
    importer?: {
      [k: string]: {
        config?: ImporterConfig;
        /**
         * Enable or disable the complete service.
         *
         * If the service is disabled, it will not be added to any machine.
         *
         * !!! Note
         *     This flag is primarily used to temporarily disable a service.
         *     I.e. A 'backup service' without any 'server' might be incomplete and would cause failure if enabled.
         *
         */
        enabled?: boolean;
        /**
         * List of additionally imported `.nix` expressions.
         *
         * Supported types:
         *
         * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
         * - **Paths**: should be relative to the current file.
         * - **Any**: Nix expression must be serializable to JSON.
         *
         * !!! Note
         *     **The import only happens if the machine is part of the service or role.**
         *
         * Other types are passed through to the nixos configuration.
         *
         * ???+ Example
         *     To import the `special.nix` file
         *
         *     ```
         *     . Clan Directory
         *     ├── flake.nix
         *     ...
         *     └── modules
         *         ├── special.nix
         *         └── ...
         *     ```
         *
         *     ```nix
         *     {
         *       extraModules = [ "modules/special.nix" ];
         *     }
         *     ```
         *
         */
        extraModules?: (
          | string
          | (
              | boolean
              | number
              | string
              | unknown[]
              | {
                  [k: string]: unknown;
                }
              | null
            )
        )[];
        machines?: {
          [k: string]: {
            config?: ImporterConfig1;
            /**
             * List of additionally imported `.nix` expressions.
             *
             * Supported types:
             *
             * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
             * - **Paths**: should be relative to the current file.
             * - **Any**: Nix expression must be serializable to JSON.
             *
             * !!! Note
             *     **The import only happens if the machine is part of the service or role.**
             *
             * Other types are passed through to the nixos configuration.
             *
             * ???+ Example
             *     To import the `special.nix` file
             *
             *     ```
             *     . Clan Directory
             *     ├── flake.nix
             *     ...
             *     └── modules
             *         ├── special.nix
             *         └── ...
             *     ```
             *
             *     ```nix
             *     {
             *       extraModules = [ "modules/special.nix" ];
             *     }
             *     ```
             *
             */
            extraModules?: (
              | string
              | (
                  | boolean
                  | number
                  | string
                  | unknown[]
                  | {
                      [k: string]: unknown;
                    }
                  | null
                )
            )[];
            [k: string]: unknown;
          };
        };
        meta?: {
          /**
           * Optional freeform description
           *
           */
          description?: null | string;
          /**
           * Under construction, will be used for the UI
           *
           */
          icon?: null | string;
          /**
           * Name of the machine or service
           *
           */
          name?: string;
        };
        roles?: ImporterRoles;
      };
    };
    iwd?: {
      [k: string]: {
        config?: IwdConfig;
        /**
         * Enable or disable the complete service.
         *
         * If the service is disabled, it will not be added to any machine.
         *
         * !!! Note
         *     This flag is primarily used to temporarily disable a service.
         *     I.e. A 'backup service' without any 'server' might be incomplete and would cause failure if enabled.
         *
         */
        enabled?: boolean;
        /**
         * List of additionally imported `.nix` expressions.
         *
         * Supported types:
         *
         * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
         * - **Paths**: should be relative to the current file.
         * - **Any**: Nix expression must be serializable to JSON.
         *
         * !!! Note
         *     **The import only happens if the machine is part of the service or role.**
         *
         * Other types are passed through to the nixos configuration.
         *
         * ???+ Example
         *     To import the `special.nix` file
         *
         *     ```
         *     . Clan Directory
         *     ├── flake.nix
         *     ...
         *     └── modules
         *         ├── special.nix
         *         └── ...
         *     ```
         *
         *     ```nix
         *     {
         *       extraModules = [ "modules/special.nix" ];
         *     }
         *     ```
         *
         */
        extraModules?: (
          | string
          | (
              | boolean
              | number
              | string
              | unknown[]
              | {
                  [k: string]: unknown;
                }
              | null
            )
        )[];
        machines?: {
          [k: string]: {
            config?: IwdConfig1;
            /**
             * List of additionally imported `.nix` expressions.
             *
             * Supported types:
             *
             * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
             * - **Paths**: should be relative to the current file.
             * - **Any**: Nix expression must be serializable to JSON.
             *
             * !!! Note
             *     **The import only happens if the machine is part of the service or role.**
             *
             * Other types are passed through to the nixos configuration.
             *
             * ???+ Example
             *     To import the `special.nix` file
             *
             *     ```
             *     . Clan Directory
             *     ├── flake.nix
             *     ...
             *     └── modules
             *         ├── special.nix
             *         └── ...
             *     ```
             *
             *     ```nix
             *     {
             *       extraModules = [ "modules/special.nix" ];
             *     }
             *     ```
             *
             */
            extraModules?: (
              | string
              | (
                  | boolean
                  | number
                  | string
                  | unknown[]
                  | {
                      [k: string]: unknown;
                    }
                  | null
                )
            )[];
            [k: string]: unknown;
          };
        };
        meta?: {
          /**
           * Optional freeform description
           *
           */
          description?: null | string;
          /**
           * Under construction, will be used for the UI
           *
           */
          icon?: null | string;
          /**
           * Name of the machine or service
           *
           */
          name?: string;
        };
        roles?: IwdRoles;
      };
    };
    localsend?: {
      [k: string]: {
        config?: LocalsendConfig;
        /**
         * Enable or disable the complete service.
         *
         * If the service is disabled, it will not be added to any machine.
         *
         * !!! Note
         *     This flag is primarily used to temporarily disable a service.
         *     I.e. A 'backup service' without any 'server' might be incomplete and would cause failure if enabled.
         *
         */
        enabled?: boolean;
        /**
         * List of additionally imported `.nix` expressions.
         *
         * Supported types:
         *
         * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
         * - **Paths**: should be relative to the current file.
         * - **Any**: Nix expression must be serializable to JSON.
         *
         * !!! Note
         *     **The import only happens if the machine is part of the service or role.**
         *
         * Other types are passed through to the nixos configuration.
         *
         * ???+ Example
         *     To import the `special.nix` file
         *
         *     ```
         *     . Clan Directory
         *     ├── flake.nix
         *     ...
         *     └── modules
         *         ├── special.nix
         *         └── ...
         *     ```
         *
         *     ```nix
         *     {
         *       extraModules = [ "modules/special.nix" ];
         *     }
         *     ```
         *
         */
        extraModules?: (
          | string
          | (
              | boolean
              | number
              | string
              | unknown[]
              | {
                  [k: string]: unknown;
                }
              | null
            )
        )[];
        machines?: {
          [k: string]: {
            config?: LocalsendConfig1;
            /**
             * List of additionally imported `.nix` expressions.
             *
             * Supported types:
             *
             * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
             * - **Paths**: should be relative to the current file.
             * - **Any**: Nix expression must be serializable to JSON.
             *
             * !!! Note
             *     **The import only happens if the machine is part of the service or role.**
             *
             * Other types are passed through to the nixos configuration.
             *
             * ???+ Example
             *     To import the `special.nix` file
             *
             *     ```
             *     . Clan Directory
             *     ├── flake.nix
             *     ...
             *     └── modules
             *         ├── special.nix
             *         └── ...
             *     ```
             *
             *     ```nix
             *     {
             *       extraModules = [ "modules/special.nix" ];
             *     }
             *     ```
             *
             */
            extraModules?: (
              | string
              | (
                  | boolean
                  | number
                  | string
                  | unknown[]
                  | {
                      [k: string]: unknown;
                    }
                  | null
                )
            )[];
            [k: string]: unknown;
          };
        };
        meta?: {
          /**
           * Optional freeform description
           *
           */
          description?: null | string;
          /**
           * Under construction, will be used for the UI
           *
           */
          icon?: null | string;
          /**
           * Name of the machine or service
           *
           */
          name?: string;
        };
        roles?: LocalsendRoles;
      };
    };
    mumble?: {
      [k: string]: {
        config?: MumbleConfig;
        /**
         * Enable or disable the complete service.
         *
         * If the service is disabled, it will not be added to any machine.
         *
         * !!! Note
         *     This flag is primarily used to temporarily disable a service.
         *     I.e. A 'backup service' without any 'server' might be incomplete and would cause failure if enabled.
         *
         */
        enabled?: boolean;
        /**
         * List of additionally imported `.nix` expressions.
         *
         * Supported types:
         *
         * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
         * - **Paths**: should be relative to the current file.
         * - **Any**: Nix expression must be serializable to JSON.
         *
         * !!! Note
         *     **The import only happens if the machine is part of the service or role.**
         *
         * Other types are passed through to the nixos configuration.
         *
         * ???+ Example
         *     To import the `special.nix` file
         *
         *     ```
         *     . Clan Directory
         *     ├── flake.nix
         *     ...
         *     └── modules
         *         ├── special.nix
         *         └── ...
         *     ```
         *
         *     ```nix
         *     {
         *       extraModules = [ "modules/special.nix" ];
         *     }
         *     ```
         *
         */
        extraModules?: (
          | string
          | (
              | boolean
              | number
              | string
              | unknown[]
              | {
                  [k: string]: unknown;
                }
              | null
            )
        )[];
        machines?: {
          [k: string]: {
            config?: MumbleConfig1;
            /**
             * List of additionally imported `.nix` expressions.
             *
             * Supported types:
             *
             * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
             * - **Paths**: should be relative to the current file.
             * - **Any**: Nix expression must be serializable to JSON.
             *
             * !!! Note
             *     **The import only happens if the machine is part of the service or role.**
             *
             * Other types are passed through to the nixos configuration.
             *
             * ???+ Example
             *     To import the `special.nix` file
             *
             *     ```
             *     . Clan Directory
             *     ├── flake.nix
             *     ...
             *     └── modules
             *         ├── special.nix
             *         └── ...
             *     ```
             *
             *     ```nix
             *     {
             *       extraModules = [ "modules/special.nix" ];
             *     }
             *     ```
             *
             */
            extraModules?: (
              | string
              | (
                  | boolean
                  | number
                  | string
                  | unknown[]
                  | {
                      [k: string]: unknown;
                    }
                  | null
                )
            )[];
            [k: string]: unknown;
          };
        };
        meta?: {
          /**
           * Optional freeform description
           *
           */
          description?: null | string;
          /**
           * Under construction, will be used for the UI
           *
           */
          icon?: null | string;
          /**
           * Name of the machine or service
           *
           */
          name?: string;
        };
        roles?: MumbleRoles;
      };
    };
    mycelium?: {
      [k: string]: {
        config?: MyceliumConfig;
        /**
         * Enable or disable the complete service.
         *
         * If the service is disabled, it will not be added to any machine.
         *
         * !!! Note
         *     This flag is primarily used to temporarily disable a service.
         *     I.e. A 'backup service' without any 'server' might be incomplete and would cause failure if enabled.
         *
         */
        enabled?: boolean;
        /**
         * List of additionally imported `.nix` expressions.
         *
         * Supported types:
         *
         * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
         * - **Paths**: should be relative to the current file.
         * - **Any**: Nix expression must be serializable to JSON.
         *
         * !!! Note
         *     **The import only happens if the machine is part of the service or role.**
         *
         * Other types are passed through to the nixos configuration.
         *
         * ???+ Example
         *     To import the `special.nix` file
         *
         *     ```
         *     . Clan Directory
         *     ├── flake.nix
         *     ...
         *     └── modules
         *         ├── special.nix
         *         └── ...
         *     ```
         *
         *     ```nix
         *     {
         *       extraModules = [ "modules/special.nix" ];
         *     }
         *     ```
         *
         */
        extraModules?: (
          | string
          | (
              | boolean
              | number
              | string
              | unknown[]
              | {
                  [k: string]: unknown;
                }
              | null
            )
        )[];
        machines?: {
          [k: string]: {
            config?: MyceliumConfig1;
            /**
             * List of additionally imported `.nix` expressions.
             *
             * Supported types:
             *
             * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
             * - **Paths**: should be relative to the current file.
             * - **Any**: Nix expression must be serializable to JSON.
             *
             * !!! Note
             *     **The import only happens if the machine is part of the service or role.**
             *
             * Other types are passed through to the nixos configuration.
             *
             * ???+ Example
             *     To import the `special.nix` file
             *
             *     ```
             *     . Clan Directory
             *     ├── flake.nix
             *     ...
             *     └── modules
             *         ├── special.nix
             *         └── ...
             *     ```
             *
             *     ```nix
             *     {
             *       extraModules = [ "modules/special.nix" ];
             *     }
             *     ```
             *
             */
            extraModules?: (
              | string
              | (
                  | boolean
                  | number
                  | string
                  | unknown[]
                  | {
                      [k: string]: unknown;
                    }
                  | null
                )
            )[];
            [k: string]: unknown;
          };
        };
        meta?: {
          /**
           * Optional freeform description
           *
           */
          description?: null | string;
          /**
           * Under construction, will be used for the UI
           *
           */
          icon?: null | string;
          /**
           * Name of the machine or service
           *
           */
          name?: string;
        };
        roles?: MyceliumRoles;
      };
    };
    packages?: {
      [k: string]: {
        config?: PackagesConfig;
        /**
         * Enable or disable the complete service.
         *
         * If the service is disabled, it will not be added to any machine.
         *
         * !!! Note
         *     This flag is primarily used to temporarily disable a service.
         *     I.e. A 'backup service' without any 'server' might be incomplete and would cause failure if enabled.
         *
         */
        enabled?: boolean;
        /**
         * List of additionally imported `.nix` expressions.
         *
         * Supported types:
         *
         * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
         * - **Paths**: should be relative to the current file.
         * - **Any**: Nix expression must be serializable to JSON.
         *
         * !!! Note
         *     **The import only happens if the machine is part of the service or role.**
         *
         * Other types are passed through to the nixos configuration.
         *
         * ???+ Example
         *     To import the `special.nix` file
         *
         *     ```
         *     . Clan Directory
         *     ├── flake.nix
         *     ...
         *     └── modules
         *         ├── special.nix
         *         └── ...
         *     ```
         *
         *     ```nix
         *     {
         *       extraModules = [ "modules/special.nix" ];
         *     }
         *     ```
         *
         */
        extraModules?: (
          | string
          | (
              | boolean
              | number
              | string
              | unknown[]
              | {
                  [k: string]: unknown;
                }
              | null
            )
        )[];
        machines?: {
          [k: string]: {
            config?: PackagesConfig1;
            /**
             * List of additionally imported `.nix` expressions.
             *
             * Supported types:
             *
             * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
             * - **Paths**: should be relative to the current file.
             * - **Any**: Nix expression must be serializable to JSON.
             *
             * !!! Note
             *     **The import only happens if the machine is part of the service or role.**
             *
             * Other types are passed through to the nixos configuration.
             *
             * ???+ Example
             *     To import the `special.nix` file
             *
             *     ```
             *     . Clan Directory
             *     ├── flake.nix
             *     ...
             *     └── modules
             *         ├── special.nix
             *         └── ...
             *     ```
             *
             *     ```nix
             *     {
             *       extraModules = [ "modules/special.nix" ];
             *     }
             *     ```
             *
             */
            extraModules?: (
              | string
              | (
                  | boolean
                  | number
                  | string
                  | unknown[]
                  | {
                      [k: string]: unknown;
                    }
                  | null
                )
            )[];
            [k: string]: unknown;
          };
        };
        meta?: {
          /**
           * Optional freeform description
           *
           */
          description?: null | string;
          /**
           * Under construction, will be used for the UI
           *
           */
          icon?: null | string;
          /**
           * Name of the machine or service
           *
           */
          name?: string;
        };
        roles?: PackagesRoles;
      };
    };
    "root-password"?: {
      [k: string]: {
        config?: RootPasswordConfig;
        /**
         * Enable or disable the complete service.
         *
         * If the service is disabled, it will not be added to any machine.
         *
         * !!! Note
         *     This flag is primarily used to temporarily disable a service.
         *     I.e. A 'backup service' without any 'server' might be incomplete and would cause failure if enabled.
         *
         */
        enabled?: boolean;
        /**
         * List of additionally imported `.nix` expressions.
         *
         * Supported types:
         *
         * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
         * - **Paths**: should be relative to the current file.
         * - **Any**: Nix expression must be serializable to JSON.
         *
         * !!! Note
         *     **The import only happens if the machine is part of the service or role.**
         *
         * Other types are passed through to the nixos configuration.
         *
         * ???+ Example
         *     To import the `special.nix` file
         *
         *     ```
         *     . Clan Directory
         *     ├── flake.nix
         *     ...
         *     └── modules
         *         ├── special.nix
         *         └── ...
         *     ```
         *
         *     ```nix
         *     {
         *       extraModules = [ "modules/special.nix" ];
         *     }
         *     ```
         *
         */
        extraModules?: (
          | string
          | (
              | boolean
              | number
              | string
              | unknown[]
              | {
                  [k: string]: unknown;
                }
              | null
            )
        )[];
        machines?: {
          [k: string]: {
            config?: RootPasswordConfig1;
            /**
             * List of additionally imported `.nix` expressions.
             *
             * Supported types:
             *
             * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
             * - **Paths**: should be relative to the current file.
             * - **Any**: Nix expression must be serializable to JSON.
             *
             * !!! Note
             *     **The import only happens if the machine is part of the service or role.**
             *
             * Other types are passed through to the nixos configuration.
             *
             * ???+ Example
             *     To import the `special.nix` file
             *
             *     ```
             *     . Clan Directory
             *     ├── flake.nix
             *     ...
             *     └── modules
             *         ├── special.nix
             *         └── ...
             *     ```
             *
             *     ```nix
             *     {
             *       extraModules = [ "modules/special.nix" ];
             *     }
             *     ```
             *
             */
            extraModules?: (
              | string
              | (
                  | boolean
                  | number
                  | string
                  | unknown[]
                  | {
                      [k: string]: unknown;
                    }
                  | null
                )
            )[];
            [k: string]: unknown;
          };
        };
        meta?: {
          /**
           * Optional freeform description
           *
           */
          description?: null | string;
          /**
           * Under construction, will be used for the UI
           *
           */
          icon?: null | string;
          /**
           * Name of the machine or service
           *
           */
          name?: string;
        };
        roles?: RootPasswordRoles;
      };
    };
    "single-disk"?: {
      [k: string]: {
        config?: SingleDiskConfig;
        /**
         * Enable or disable the complete service.
         *
         * If the service is disabled, it will not be added to any machine.
         *
         * !!! Note
         *     This flag is primarily used to temporarily disable a service.
         *     I.e. A 'backup service' without any 'server' might be incomplete and would cause failure if enabled.
         *
         */
        enabled?: boolean;
        /**
         * List of additionally imported `.nix` expressions.
         *
         * Supported types:
         *
         * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
         * - **Paths**: should be relative to the current file.
         * - **Any**: Nix expression must be serializable to JSON.
         *
         * !!! Note
         *     **The import only happens if the machine is part of the service or role.**
         *
         * Other types are passed through to the nixos configuration.
         *
         * ???+ Example
         *     To import the `special.nix` file
         *
         *     ```
         *     . Clan Directory
         *     ├── flake.nix
         *     ...
         *     └── modules
         *         ├── special.nix
         *         └── ...
         *     ```
         *
         *     ```nix
         *     {
         *       extraModules = [ "modules/special.nix" ];
         *     }
         *     ```
         *
         */
        extraModules?: (
          | string
          | (
              | boolean
              | number
              | string
              | unknown[]
              | {
                  [k: string]: unknown;
                }
              | null
            )
        )[];
        machines?: {
          [k: string]: {
            config?: SingleDiskConfig1;
            /**
             * List of additionally imported `.nix` expressions.
             *
             * Supported types:
             *
             * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
             * - **Paths**: should be relative to the current file.
             * - **Any**: Nix expression must be serializable to JSON.
             *
             * !!! Note
             *     **The import only happens if the machine is part of the service or role.**
             *
             * Other types are passed through to the nixos configuration.
             *
             * ???+ Example
             *     To import the `special.nix` file
             *
             *     ```
             *     . Clan Directory
             *     ├── flake.nix
             *     ...
             *     └── modules
             *         ├── special.nix
             *         └── ...
             *     ```
             *
             *     ```nix
             *     {
             *       extraModules = [ "modules/special.nix" ];
             *     }
             *     ```
             *
             */
            extraModules?: (
              | string
              | (
                  | boolean
                  | number
                  | string
                  | unknown[]
                  | {
                      [k: string]: unknown;
                    }
                  | null
                )
            )[];
            [k: string]: unknown;
          };
        };
        meta?: {
          /**
           * Optional freeform description
           *
           */
          description?: null | string;
          /**
           * Under construction, will be used for the UI
           *
           */
          icon?: null | string;
          /**
           * Name of the machine or service
           *
           */
          name?: string;
        };
        roles?: SingleDiskRoles;
      };
    };
    sshd?: {
      [k: string]: {
        config?: SshdConfig;
        /**
         * Enable or disable the complete service.
         *
         * If the service is disabled, it will not be added to any machine.
         *
         * !!! Note
         *     This flag is primarily used to temporarily disable a service.
         *     I.e. A 'backup service' without any 'server' might be incomplete and would cause failure if enabled.
         *
         */
        enabled?: boolean;
        /**
         * List of additionally imported `.nix` expressions.
         *
         * Supported types:
         *
         * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
         * - **Paths**: should be relative to the current file.
         * - **Any**: Nix expression must be serializable to JSON.
         *
         * !!! Note
         *     **The import only happens if the machine is part of the service or role.**
         *
         * Other types are passed through to the nixos configuration.
         *
         * ???+ Example
         *     To import the `special.nix` file
         *
         *     ```
         *     . Clan Directory
         *     ├── flake.nix
         *     ...
         *     └── modules
         *         ├── special.nix
         *         └── ...
         *     ```
         *
         *     ```nix
         *     {
         *       extraModules = [ "modules/special.nix" ];
         *     }
         *     ```
         *
         */
        extraModules?: (
          | string
          | (
              | boolean
              | number
              | string
              | unknown[]
              | {
                  [k: string]: unknown;
                }
              | null
            )
        )[];
        machines?: {
          [k: string]: {
            config?: SshdConfig1;
            /**
             * List of additionally imported `.nix` expressions.
             *
             * Supported types:
             *
             * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
             * - **Paths**: should be relative to the current file.
             * - **Any**: Nix expression must be serializable to JSON.
             *
             * !!! Note
             *     **The import only happens if the machine is part of the service or role.**
             *
             * Other types are passed through to the nixos configuration.
             *
             * ???+ Example
             *     To import the `special.nix` file
             *
             *     ```
             *     . Clan Directory
             *     ├── flake.nix
             *     ...
             *     └── modules
             *         ├── special.nix
             *         └── ...
             *     ```
             *
             *     ```nix
             *     {
             *       extraModules = [ "modules/special.nix" ];
             *     }
             *     ```
             *
             */
            extraModules?: (
              | string
              | (
                  | boolean
                  | number
                  | string
                  | unknown[]
                  | {
                      [k: string]: unknown;
                    }
                  | null
                )
            )[];
            [k: string]: unknown;
          };
        };
        meta?: {
          /**
           * Optional freeform description
           *
           */
          description?: null | string;
          /**
           * Under construction, will be used for the UI
           *
           */
          icon?: null | string;
          /**
           * Name of the machine or service
           *
           */
          name?: string;
        };
        roles?: SshdRoles;
      };
    };
    "state-version"?: {
      [k: string]: {
        config?: StateVersionConfig;
        /**
         * Enable or disable the complete service.
         *
         * If the service is disabled, it will not be added to any machine.
         *
         * !!! Note
         *     This flag is primarily used to temporarily disable a service.
         *     I.e. A 'backup service' without any 'server' might be incomplete and would cause failure if enabled.
         *
         */
        enabled?: boolean;
        /**
         * List of additionally imported `.nix` expressions.
         *
         * Supported types:
         *
         * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
         * - **Paths**: should be relative to the current file.
         * - **Any**: Nix expression must be serializable to JSON.
         *
         * !!! Note
         *     **The import only happens if the machine is part of the service or role.**
         *
         * Other types are passed through to the nixos configuration.
         *
         * ???+ Example
         *     To import the `special.nix` file
         *
         *     ```
         *     . Clan Directory
         *     ├── flake.nix
         *     ...
         *     └── modules
         *         ├── special.nix
         *         └── ...
         *     ```
         *
         *     ```nix
         *     {
         *       extraModules = [ "modules/special.nix" ];
         *     }
         *     ```
         *
         */
        extraModules?: (
          | string
          | (
              | boolean
              | number
              | string
              | unknown[]
              | {
                  [k: string]: unknown;
                }
              | null
            )
        )[];
        machines?: {
          [k: string]: {
            config?: StateVersionConfig1;
            /**
             * List of additionally imported `.nix` expressions.
             *
             * Supported types:
             *
             * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
             * - **Paths**: should be relative to the current file.
             * - **Any**: Nix expression must be serializable to JSON.
             *
             * !!! Note
             *     **The import only happens if the machine is part of the service or role.**
             *
             * Other types are passed through to the nixos configuration.
             *
             * ???+ Example
             *     To import the `special.nix` file
             *
             *     ```
             *     . Clan Directory
             *     ├── flake.nix
             *     ...
             *     └── modules
             *         ├── special.nix
             *         └── ...
             *     ```
             *
             *     ```nix
             *     {
             *       extraModules = [ "modules/special.nix" ];
             *     }
             *     ```
             *
             */
            extraModules?: (
              | string
              | (
                  | boolean
                  | number
                  | string
                  | unknown[]
                  | {
                      [k: string]: unknown;
                    }
                  | null
                )
            )[];
            [k: string]: unknown;
          };
        };
        meta?: {
          /**
           * Optional freeform description
           *
           */
          description?: null | string;
          /**
           * Under construction, will be used for the UI
           *
           */
          icon?: null | string;
          /**
           * Name of the machine or service
           *
           */
          name?: string;
        };
        roles?: StateVersionRoles;
      };
    };
    syncthing?: {
      [k: string]: {
        config?: SyncthingConfig;
        /**
         * Enable or disable the complete service.
         *
         * If the service is disabled, it will not be added to any machine.
         *
         * !!! Note
         *     This flag is primarily used to temporarily disable a service.
         *     I.e. A 'backup service' without any 'server' might be incomplete and would cause failure if enabled.
         *
         */
        enabled?: boolean;
        /**
         * List of additionally imported `.nix` expressions.
         *
         * Supported types:
         *
         * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
         * - **Paths**: should be relative to the current file.
         * - **Any**: Nix expression must be serializable to JSON.
         *
         * !!! Note
         *     **The import only happens if the machine is part of the service or role.**
         *
         * Other types are passed through to the nixos configuration.
         *
         * ???+ Example
         *     To import the `special.nix` file
         *
         *     ```
         *     . Clan Directory
         *     ├── flake.nix
         *     ...
         *     └── modules
         *         ├── special.nix
         *         └── ...
         *     ```
         *
         *     ```nix
         *     {
         *       extraModules = [ "modules/special.nix" ];
         *     }
         *     ```
         *
         */
        extraModules?: (
          | string
          | (
              | boolean
              | number
              | string
              | unknown[]
              | {
                  [k: string]: unknown;
                }
              | null
            )
        )[];
        machines?: {
          [k: string]: {
            config?: SyncthingConfig1;
            /**
             * List of additionally imported `.nix` expressions.
             *
             * Supported types:
             *
             * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
             * - **Paths**: should be relative to the current file.
             * - **Any**: Nix expression must be serializable to JSON.
             *
             * !!! Note
             *     **The import only happens if the machine is part of the service or role.**
             *
             * Other types are passed through to the nixos configuration.
             *
             * ???+ Example
             *     To import the `special.nix` file
             *
             *     ```
             *     . Clan Directory
             *     ├── flake.nix
             *     ...
             *     └── modules
             *         ├── special.nix
             *         └── ...
             *     ```
             *
             *     ```nix
             *     {
             *       extraModules = [ "modules/special.nix" ];
             *     }
             *     ```
             *
             */
            extraModules?: (
              | string
              | (
                  | boolean
                  | number
                  | string
                  | unknown[]
                  | {
                      [k: string]: unknown;
                    }
                  | null
                )
            )[];
            [k: string]: unknown;
          };
        };
        meta?: {
          /**
           * Optional freeform description
           *
           */
          description?: null | string;
          /**
           * Under construction, will be used for the UI
           *
           */
          icon?: null | string;
          /**
           * Name of the machine or service
           *
           */
          name?: string;
        };
        roles?: SyncthingRoles;
      };
    };
    "user-password"?: {
      [k: string]: {
        config?: UserPasswordConfig;
        /**
         * Enable or disable the complete service.
         *
         * If the service is disabled, it will not be added to any machine.
         *
         * !!! Note
         *     This flag is primarily used to temporarily disable a service.
         *     I.e. A 'backup service' without any 'server' might be incomplete and would cause failure if enabled.
         *
         */
        enabled?: boolean;
        /**
         * List of additionally imported `.nix` expressions.
         *
         * Supported types:
         *
         * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
         * - **Paths**: should be relative to the current file.
         * - **Any**: Nix expression must be serializable to JSON.
         *
         * !!! Note
         *     **The import only happens if the machine is part of the service or role.**
         *
         * Other types are passed through to the nixos configuration.
         *
         * ???+ Example
         *     To import the `special.nix` file
         *
         *     ```
         *     . Clan Directory
         *     ├── flake.nix
         *     ...
         *     └── modules
         *         ├── special.nix
         *         └── ...
         *     ```
         *
         *     ```nix
         *     {
         *       extraModules = [ "modules/special.nix" ];
         *     }
         *     ```
         *
         */
        extraModules?: (
          | string
          | (
              | boolean
              | number
              | string
              | unknown[]
              | {
                  [k: string]: unknown;
                }
              | null
            )
        )[];
        machines?: {
          [k: string]: {
            config?: UserPasswordConfig1;
            /**
             * List of additionally imported `.nix` expressions.
             *
             * Supported types:
             *
             * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
             * - **Paths**: should be relative to the current file.
             * - **Any**: Nix expression must be serializable to JSON.
             *
             * !!! Note
             *     **The import only happens if the machine is part of the service or role.**
             *
             * Other types are passed through to the nixos configuration.
             *
             * ???+ Example
             *     To import the `special.nix` file
             *
             *     ```
             *     . Clan Directory
             *     ├── flake.nix
             *     ...
             *     └── modules
             *         ├── special.nix
             *         └── ...
             *     ```
             *
             *     ```nix
             *     {
             *       extraModules = [ "modules/special.nix" ];
             *     }
             *     ```
             *
             */
            extraModules?: (
              | string
              | (
                  | boolean
                  | number
                  | string
                  | unknown[]
                  | {
                      [k: string]: unknown;
                    }
                  | null
                )
            )[];
            [k: string]: unknown;
          };
        };
        meta?: {
          /**
           * Optional freeform description
           *
           */
          description?: null | string;
          /**
           * Under construction, will be used for the UI
           *
           */
          icon?: null | string;
          /**
           * Name of the machine or service
           *
           */
          name?: string;
        };
        roles?: UserPasswordRoles;
      };
    };
    zerotier?: {
      [k: string]: {
        config?: ZerotierConfig;
        /**
         * Enable or disable the complete service.
         *
         * If the service is disabled, it will not be added to any machine.
         *
         * !!! Note
         *     This flag is primarily used to temporarily disable a service.
         *     I.e. A 'backup service' without any 'server' might be incomplete and would cause failure if enabled.
         *
         */
        enabled?: boolean;
        /**
         * List of additionally imported `.nix` expressions.
         *
         * Supported types:
         *
         * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
         * - **Paths**: should be relative to the current file.
         * - **Any**: Nix expression must be serializable to JSON.
         *
         * !!! Note
         *     **The import only happens if the machine is part of the service or role.**
         *
         * Other types are passed through to the nixos configuration.
         *
         * ???+ Example
         *     To import the `special.nix` file
         *
         *     ```
         *     . Clan Directory
         *     ├── flake.nix
         *     ...
         *     └── modules
         *         ├── special.nix
         *         └── ...
         *     ```
         *
         *     ```nix
         *     {
         *       extraModules = [ "modules/special.nix" ];
         *     }
         *     ```
         *
         */
        extraModules?: (
          | string
          | (
              | boolean
              | number
              | string
              | unknown[]
              | {
                  [k: string]: unknown;
                }
              | null
            )
        )[];
        machines?: {
          [k: string]: {
            config?: ZerotierConfig1;
            /**
             * List of additionally imported `.nix` expressions.
             *
             * Supported types:
             *
             * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
             * - **Paths**: should be relative to the current file.
             * - **Any**: Nix expression must be serializable to JSON.
             *
             * !!! Note
             *     **The import only happens if the machine is part of the service or role.**
             *
             * Other types are passed through to the nixos configuration.
             *
             * ???+ Example
             *     To import the `special.nix` file
             *
             *     ```
             *     . Clan Directory
             *     ├── flake.nix
             *     ...
             *     └── modules
             *         ├── special.nix
             *         └── ...
             *     ```
             *
             *     ```nix
             *     {
             *       extraModules = [ "modules/special.nix" ];
             *     }
             *     ```
             *
             */
            extraModules?: (
              | string
              | (
                  | boolean
                  | number
                  | string
                  | unknown[]
                  | {
                      [k: string]: unknown;
                    }
                  | null
                )
            )[];
            [k: string]: unknown;
          };
        };
        meta?: {
          /**
           * Optional freeform description
           *
           */
          description?: null | string;
          /**
           * Under construction, will be used for the UI
           *
           */
          icon?: null | string;
          /**
           * Name of the machine or service
           *
           */
          name?: string;
        };
        roles?: ZerotierRoles;
      };
    };
  };
  /**
   * Tags of the inventory are used to group machines together.
   *
   * It is recommended to use [`machine.tags`](#inventory.machines.tags) to define the tags of the machines.
   *
   * This can be used to define custom tags that are either statically set or dynamically computed.
   *
   * #### Static Tags
   *
   * ???+ example "Static Tag Example"
   *     ```nix
   *     inventory.tags = {
   *       foo = [ "machineA" "machineB" ];
   *     };
   *     ```
   *
   *     The tag `foo` will always be added to `machineA` and `machineB`.
   *
   * #### Dynamic Tags
   *
   * It is possible to compute tags based on the machines properties or based on other tags.
   *
   * !!! danger
   *     This is a powerful feature and should be used with caution.
   *
   *     It is possible to cause infinite recursion by computing tags based on the machines properties or based on other tags.
   *
   * ???+ example "Dynamic Tag Example"
   *
   *     allButFoo is a computed tag. It will be added to all machines except 'foo'
   *
   *     `all` is a predefined tag. See the docs of [`tags.all`](#inventory.tags.all).
   *
   *     ```nix
   *     #  inventory.tags ↓       ↓ inventory.machines
   *     inventory.tags = {config, machines...}: {
   *       #                                                        ↓↓↓ The "all" tag
   *       allButFoo = builtins.filter (name: name != "foo") config.all;
   *     };
   *     ```
   *
   * !!! warning
   *     Do NOT compute `tags` from `machine.tags` this will cause infinite recursion.
   *
   */
  tags: {
    [k: string]: string[];
  };
}
export interface AdminConfigRoleDefault {
  /**
   * The allowed public keys for ssh access to the admin user
   */
  allowedKeys?: {
    [k: string]: string;
  };
}
export interface AdminConfigRoleDefault1 {
  /**
   * The allowed public keys for ssh access to the admin user
   */
  allowedKeys?: {
    [k: string]: string;
  };
}
export interface AdminRoles {
  default?: {
    config?: AdminConfigRoleDefault2;
    /**
     * List of additionally imported `.nix` expressions.
     *
     * Supported types:
     *
     * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
     * - **Paths**: should be relative to the current file.
     * - **Any**: Nix expression must be serializable to JSON.
     *
     * !!! Note
     *     **The import only happens if the machine is part of the service or role.**
     *
     * Other types are passed through to the nixos configuration.
     *
     * ???+ Example
     *     To import the `special.nix` file
     *
     *     ```
     *     . Clan Directory
     *     ├── flake.nix
     *     ...
     *     └── modules
     *         ├── special.nix
     *         └── ...
     *     ```
     *
     *     ```nix
     *     {
     *       extraModules = [ "modules/special.nix" ];
     *     }
     *     ```
     *
     */
    extraModules?: (
      | string
      | (
          | boolean
          | number
          | string
          | unknown[]
          | {
              [k: string]: unknown;
            }
          | null
        )
    )[];
    /**
     * List of machines which are part of the role.
     *
     * The machines are referenced by their `attributeName` in the `inventory.machines` attribute set.
     *
     * Memberships are declared here to determine which machines are part of the service.
     *
     * Alternatively, `tags` can be used to determine the membership, more dynamically.
     *
     */
    machines?: string[];
    /**
     * List of tags which are used to determine the membership of the role.
     *
     * The tags are matched against the `inventory.machines.<machineName>.tags` attribute set.
     * If a machine has at least one tag of the role, it is part of the role.
     *
     */
    tags?: string[];
  };
}
export interface AdminConfigRoleDefault2 {
  /**
   * The allowed public keys for ssh access to the admin user
   */
  allowedKeys?: {
    [k: string]: string;
  };
}
export interface AutoUpgradeConfigRoleDefault {
  /**
   * Flake reference
   */
  flake: string;
}
export interface AutoUpgradeConfigRoleDefault1 {
  /**
   * Flake reference
   */
  flake: string;
}
export interface AutoUpgradeRoles {
  default?: {
    config?: AutoUpgradeConfigRoleDefault2;
    /**
     * List of additionally imported `.nix` expressions.
     *
     * Supported types:
     *
     * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
     * - **Paths**: should be relative to the current file.
     * - **Any**: Nix expression must be serializable to JSON.
     *
     * !!! Note
     *     **The import only happens if the machine is part of the service or role.**
     *
     * Other types are passed through to the nixos configuration.
     *
     * ???+ Example
     *     To import the `special.nix` file
     *
     *     ```
     *     . Clan Directory
     *     ├── flake.nix
     *     ...
     *     └── modules
     *         ├── special.nix
     *         └── ...
     *     ```
     *
     *     ```nix
     *     {
     *       extraModules = [ "modules/special.nix" ];
     *     }
     *     ```
     *
     */
    extraModules?: (
      | string
      | (
          | boolean
          | number
          | string
          | unknown[]
          | {
              [k: string]: unknown;
            }
          | null
        )
    )[];
    /**
     * List of machines which are part of the role.
     *
     * The machines are referenced by their `attributeName` in the `inventory.machines` attribute set.
     *
     * Memberships are declared here to determine which machines are part of the service.
     *
     * Alternatively, `tags` can be used to determine the membership, more dynamically.
     *
     */
    machines?: string[];
    /**
     * List of tags which are used to determine the membership of the role.
     *
     * The tags are matched against the `inventory.machines.<machineName>.tags` attribute set.
     * If a machine has at least one tag of the role, it is part of the role.
     *
     */
    tags?: string[];
  };
}
export interface AutoUpgradeConfigRoleDefault2 {
  /**
   * Flake reference
   */
  flake: string;
}
export interface BorgbackupConfigRoleClient {
  /**
   * destinations where the machine should be backuped to
   *
   */
  destinations?: {
    [k: string]: {
      /**
       * the name of the backup job
       */
      name?: string;
      /**
       * the borgbackup repository to backup to
       */
      repo: string;
      /**
       * the rsh to use for the backup
       */
      rsh?: string;
    };
  };
  /**
   * Directories/Files to exclude from the backup.
   * Use * as a wildcard.
   *
   */
  exclude?: string[];
}
export interface BorgbackupConfigRoleServer {
  /**
   * The directory where the borgbackup repositories are stored.
   *
   */
  directory?: string;
}
export interface BorgbackupConfigRoleClient1 {
  /**
   * destinations where the machine should be backuped to
   *
   */
  destinations?: {
    [k: string]: {
      /**
       * the name of the backup job
       */
      name?: string;
      /**
       * the borgbackup repository to backup to
       */
      repo: string;
      /**
       * the rsh to use for the backup
       */
      rsh?: string;
    };
  };
  /**
   * Directories/Files to exclude from the backup.
   * Use * as a wildcard.
   *
   */
  exclude?: string[];
}
export interface BorgbackupConfigRoleServer1 {
  /**
   * The directory where the borgbackup repositories are stored.
   *
   */
  directory?: string;
}
export interface BorgbackupRoles {
  client?: {
    config?: BorgbackupConfigRoleClient2;
    /**
     * List of additionally imported `.nix` expressions.
     *
     * Supported types:
     *
     * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
     * - **Paths**: should be relative to the current file.
     * - **Any**: Nix expression must be serializable to JSON.
     *
     * !!! Note
     *     **The import only happens if the machine is part of the service or role.**
     *
     * Other types are passed through to the nixos configuration.
     *
     * ???+ Example
     *     To import the `special.nix` file
     *
     *     ```
     *     . Clan Directory
     *     ├── flake.nix
     *     ...
     *     └── modules
     *         ├── special.nix
     *         └── ...
     *     ```
     *
     *     ```nix
     *     {
     *       extraModules = [ "modules/special.nix" ];
     *     }
     *     ```
     *
     */
    extraModules?: (
      | string
      | (
          | boolean
          | number
          | string
          | unknown[]
          | {
              [k: string]: unknown;
            }
          | null
        )
    )[];
    /**
     * List of machines which are part of the role.
     *
     * The machines are referenced by their `attributeName` in the `inventory.machines` attribute set.
     *
     * Memberships are declared here to determine which machines are part of the service.
     *
     * Alternatively, `tags` can be used to determine the membership, more dynamically.
     *
     */
    machines?: string[];
    /**
     * List of tags which are used to determine the membership of the role.
     *
     * The tags are matched against the `inventory.machines.<machineName>.tags` attribute set.
     * If a machine has at least one tag of the role, it is part of the role.
     *
     */
    tags?: string[];
  };
  server?: {
    config?: BorgbackupConfigRoleServer2;
    /**
     * List of additionally imported `.nix` expressions.
     *
     * Supported types:
     *
     * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
     * - **Paths**: should be relative to the current file.
     * - **Any**: Nix expression must be serializable to JSON.
     *
     * !!! Note
     *     **The import only happens if the machine is part of the service or role.**
     *
     * Other types are passed through to the nixos configuration.
     *
     * ???+ Example
     *     To import the `special.nix` file
     *
     *     ```
     *     . Clan Directory
     *     ├── flake.nix
     *     ...
     *     └── modules
     *         ├── special.nix
     *         └── ...
     *     ```
     *
     *     ```nix
     *     {
     *       extraModules = [ "modules/special.nix" ];
     *     }
     *     ```
     *
     */
    extraModules?: (
      | string
      | (
          | boolean
          | number
          | string
          | unknown[]
          | {
              [k: string]: unknown;
            }
          | null
        )
    )[];
    /**
     * List of machines which are part of the role.
     *
     * The machines are referenced by their `attributeName` in the `inventory.machines` attribute set.
     *
     * Memberships are declared here to determine which machines are part of the service.
     *
     * Alternatively, `tags` can be used to determine the membership, more dynamically.
     *
     */
    machines?: string[];
    /**
     * List of tags which are used to determine the membership of the role.
     *
     * The tags are matched against the `inventory.machines.<machineName>.tags` attribute set.
     * If a machine has at least one tag of the role, it is part of the role.
     *
     */
    tags?: string[];
  };
}
export interface BorgbackupConfigRoleClient2 {
  /**
   * destinations where the machine should be backuped to
   *
   */
  destinations?: {
    [k: string]: {
      /**
       * the name of the backup job
       */
      name?: string;
      /**
       * the borgbackup repository to backup to
       */
      repo: string;
      /**
       * the rsh to use for the backup
       */
      rsh?: string;
    };
  };
  /**
   * Directories/Files to exclude from the backup.
   * Use * as a wildcard.
   *
   */
  exclude?: string[];
}
export interface BorgbackupConfigRoleServer2 {
  /**
   * The directory where the borgbackup repositories are stored.
   *
   */
  directory?: string;
}
export interface DataMesherConfigRoleAdmin {
  /**
   * A list of bootstrap nodes that act as an initial gateway when joining
   * the cluster.
   *
   */
  bootstrapNodes?: null | string[];
  network: {
    /**
     * The TTL for hosts in the network, in the form of a Go time.Duration
     */
    hostTTL?: string;
    /**
     * The interface over which cluster communication should be performed.
     * All the ip addresses associate with this interface will be part of
     * our host claim, including both ipv4 and ipv6.
     *
     * This should be set to an internal/VPN interface.
     *
     */
    interface: string;
    /**
     * Port to listen on for cluster communication.
     *
     */
    port?: number;
    /**
     * Top level domain to use for the network
     */
    tld?: string;
  };
}
export interface DataMesherConfigRolePeer {
  /**
   * A list of bootstrap nodes that act as an initial gateway when joining
   * the cluster.
   *
   */
  bootstrapNodes?: null | string[];
  network: {
    /**
     * The interface over which cluster communication should be performed.
     * All the ip addresses associate with this interface will be part of
     * our host claim, including both ipv4 and ipv6.
     *
     * This should be set to an internal/VPN interface.
     *
     */
    interface: string;
    /**
     * Port to listen on for cluster communication.
     *
     */
    port?: number;
  };
}
export interface DataMesherConfigRoleSigner {
  /**
   * A list of bootstrap nodes that act as an initial gateway when joining
   * the cluster.
   *
   */
  bootstrapNodes?: null | string[];
  network: {
    /**
     * The interface over which cluster communication should be performed.
     * All the ip addresses associate with this interface will be part of
     * our host claim, including both ipv4 and ipv6.
     *
     * This should be set to an internal/VPN interface.
     *
     */
    interface: string;
    /**
     * Port to listen on for cluster communication.
     *
     */
    port?: number;
  };
}
export interface DataMesherConfigRoleAdmin1 {
  /**
   * A list of bootstrap nodes that act as an initial gateway when joining
   * the cluster.
   *
   */
  bootstrapNodes?: null | string[];
  network: {
    /**
     * The TTL for hosts in the network, in the form of a Go time.Duration
     */
    hostTTL?: string;
    /**
     * The interface over which cluster communication should be performed.
     * All the ip addresses associate with this interface will be part of
     * our host claim, including both ipv4 and ipv6.
     *
     * This should be set to an internal/VPN interface.
     *
     */
    interface: string;
    /**
     * Port to listen on for cluster communication.
     *
     */
    port?: number;
    /**
     * Top level domain to use for the network
     */
    tld?: string;
  };
}
export interface DataMesherConfigRolePeer1 {
  /**
   * A list of bootstrap nodes that act as an initial gateway when joining
   * the cluster.
   *
   */
  bootstrapNodes?: null | string[];
  network: {
    /**
     * The interface over which cluster communication should be performed.
     * All the ip addresses associate with this interface will be part of
     * our host claim, including both ipv4 and ipv6.
     *
     * This should be set to an internal/VPN interface.
     *
     */
    interface: string;
    /**
     * Port to listen on for cluster communication.
     *
     */
    port?: number;
  };
}
export interface DataMesherConfigRoleSigner1 {
  /**
   * A list of bootstrap nodes that act as an initial gateway when joining
   * the cluster.
   *
   */
  bootstrapNodes?: null | string[];
  network: {
    /**
     * The interface over which cluster communication should be performed.
     * All the ip addresses associate with this interface will be part of
     * our host claim, including both ipv4 and ipv6.
     *
     * This should be set to an internal/VPN interface.
     *
     */
    interface: string;
    /**
     * Port to listen on for cluster communication.
     *
     */
    port?: number;
  };
}
export interface DataMesherRoles {
  admin?: {
    config?: DataMesherConfigRoleAdmin2;
    /**
     * List of additionally imported `.nix` expressions.
     *
     * Supported types:
     *
     * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
     * - **Paths**: should be relative to the current file.
     * - **Any**: Nix expression must be serializable to JSON.
     *
     * !!! Note
     *     **The import only happens if the machine is part of the service or role.**
     *
     * Other types are passed through to the nixos configuration.
     *
     * ???+ Example
     *     To import the `special.nix` file
     *
     *     ```
     *     . Clan Directory
     *     ├── flake.nix
     *     ...
     *     └── modules
     *         ├── special.nix
     *         └── ...
     *     ```
     *
     *     ```nix
     *     {
     *       extraModules = [ "modules/special.nix" ];
     *     }
     *     ```
     *
     */
    extraModules?: (
      | string
      | (
          | boolean
          | number
          | string
          | unknown[]
          | {
              [k: string]: unknown;
            }
          | null
        )
    )[];
    /**
     * List of machines which are part of the role.
     *
     * The machines are referenced by their `attributeName` in the `inventory.machines` attribute set.
     *
     * Memberships are declared here to determine which machines are part of the service.
     *
     * Alternatively, `tags` can be used to determine the membership, more dynamically.
     *
     */
    machines?: string[];
    /**
     * List of tags which are used to determine the membership of the role.
     *
     * The tags are matched against the `inventory.machines.<machineName>.tags` attribute set.
     * If a machine has at least one tag of the role, it is part of the role.
     *
     */
    tags?: string[];
  };
  peer?: {
    config?: DataMesherConfigRolePeer2;
    /**
     * List of additionally imported `.nix` expressions.
     *
     * Supported types:
     *
     * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
     * - **Paths**: should be relative to the current file.
     * - **Any**: Nix expression must be serializable to JSON.
     *
     * !!! Note
     *     **The import only happens if the machine is part of the service or role.**
     *
     * Other types are passed through to the nixos configuration.
     *
     * ???+ Example
     *     To import the `special.nix` file
     *
     *     ```
     *     . Clan Directory
     *     ├── flake.nix
     *     ...
     *     └── modules
     *         ├── special.nix
     *         └── ...
     *     ```
     *
     *     ```nix
     *     {
     *       extraModules = [ "modules/special.nix" ];
     *     }
     *     ```
     *
     */
    extraModules?: (
      | string
      | (
          | boolean
          | number
          | string
          | unknown[]
          | {
              [k: string]: unknown;
            }
          | null
        )
    )[];
    /**
     * List of machines which are part of the role.
     *
     * The machines are referenced by their `attributeName` in the `inventory.machines` attribute set.
     *
     * Memberships are declared here to determine which machines are part of the service.
     *
     * Alternatively, `tags` can be used to determine the membership, more dynamically.
     *
     */
    machines?: string[];
    /**
     * List of tags which are used to determine the membership of the role.
     *
     * The tags are matched against the `inventory.machines.<machineName>.tags` attribute set.
     * If a machine has at least one tag of the role, it is part of the role.
     *
     */
    tags?: string[];
  };
  signer?: {
    config?: DataMesherConfigRoleSigner2;
    /**
     * List of additionally imported `.nix` expressions.
     *
     * Supported types:
     *
     * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
     * - **Paths**: should be relative to the current file.
     * - **Any**: Nix expression must be serializable to JSON.
     *
     * !!! Note
     *     **The import only happens if the machine is part of the service or role.**
     *
     * Other types are passed through to the nixos configuration.
     *
     * ???+ Example
     *     To import the `special.nix` file
     *
     *     ```
     *     . Clan Directory
     *     ├── flake.nix
     *     ...
     *     └── modules
     *         ├── special.nix
     *         └── ...
     *     ```
     *
     *     ```nix
     *     {
     *       extraModules = [ "modules/special.nix" ];
     *     }
     *     ```
     *
     */
    extraModules?: (
      | string
      | (
          | boolean
          | number
          | string
          | unknown[]
          | {
              [k: string]: unknown;
            }
          | null
        )
    )[];
    /**
     * List of machines which are part of the role.
     *
     * The machines are referenced by their `attributeName` in the `inventory.machines` attribute set.
     *
     * Memberships are declared here to determine which machines are part of the service.
     *
     * Alternatively, `tags` can be used to determine the membership, more dynamically.
     *
     */
    machines?: string[];
    /**
     * List of tags which are used to determine the membership of the role.
     *
     * The tags are matched against the `inventory.machines.<machineName>.tags` attribute set.
     * If a machine has at least one tag of the role, it is part of the role.
     *
     */
    tags?: string[];
  };
}
export interface DataMesherConfigRoleAdmin2 {
  /**
   * A list of bootstrap nodes that act as an initial gateway when joining
   * the cluster.
   *
   */
  bootstrapNodes?: null | string[];
  network: {
    /**
     * The TTL for hosts in the network, in the form of a Go time.Duration
     */
    hostTTL?: string;
    /**
     * The interface over which cluster communication should be performed.
     * All the ip addresses associate with this interface will be part of
     * our host claim, including both ipv4 and ipv6.
     *
     * This should be set to an internal/VPN interface.
     *
     */
    interface: string;
    /**
     * Port to listen on for cluster communication.
     *
     */
    port?: number;
    /**
     * Top level domain to use for the network
     */
    tld?: string;
  };
}
export interface DataMesherConfigRolePeer2 {
  /**
   * A list of bootstrap nodes that act as an initial gateway when joining
   * the cluster.
   *
   */
  bootstrapNodes?: null | string[];
  network: {
    /**
     * The interface over which cluster communication should be performed.
     * All the ip addresses associate with this interface will be part of
     * our host claim, including both ipv4 and ipv6.
     *
     * This should be set to an internal/VPN interface.
     *
     */
    interface: string;
    /**
     * Port to listen on for cluster communication.
     *
     */
    port?: number;
  };
}
export interface DataMesherConfigRoleSigner2 {
  /**
   * A list of bootstrap nodes that act as an initial gateway when joining
   * the cluster.
   *
   */
  bootstrapNodes?: null | string[];
  network: {
    /**
     * The interface over which cluster communication should be performed.
     * All the ip addresses associate with this interface will be part of
     * our host claim, including both ipv4 and ipv6.
     *
     * This should be set to an internal/VPN interface.
     *
     */
    interface: string;
    /**
     * Port to listen on for cluster communication.
     *
     */
    port?: number;
  };
}
export interface DeltachatConfigRoleDefault {}
export interface DeltachatConfigRoleDefault1 {}
export interface DeltachatRoles {
  default?: {
    config?: DeltachatConfigRoleDefault2;
    /**
     * List of additionally imported `.nix` expressions.
     *
     * Supported types:
     *
     * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
     * - **Paths**: should be relative to the current file.
     * - **Any**: Nix expression must be serializable to JSON.
     *
     * !!! Note
     *     **The import only happens if the machine is part of the service or role.**
     *
     * Other types are passed through to the nixos configuration.
     *
     * ???+ Example
     *     To import the `special.nix` file
     *
     *     ```
     *     . Clan Directory
     *     ├── flake.nix
     *     ...
     *     └── modules
     *         ├── special.nix
     *         └── ...
     *     ```
     *
     *     ```nix
     *     {
     *       extraModules = [ "modules/special.nix" ];
     *     }
     *     ```
     *
     */
    extraModules?: (
      | string
      | (
          | boolean
          | number
          | string
          | unknown[]
          | {
              [k: string]: unknown;
            }
          | null
        )
    )[];
    /**
     * List of machines which are part of the role.
     *
     * The machines are referenced by their `attributeName` in the `inventory.machines` attribute set.
     *
     * Memberships are declared here to determine which machines are part of the service.
     *
     * Alternatively, `tags` can be used to determine the membership, more dynamically.
     *
     */
    machines?: string[];
    /**
     * List of tags which are used to determine the membership of the role.
     *
     * The tags are matched against the `inventory.machines.<machineName>.tags` attribute set.
     * If a machine has at least one tag of the role, it is part of the role.
     *
     */
    tags?: string[];
  };
}
export interface DeltachatConfigRoleDefault2 {}
export interface DiskIdConfigRoleDefault {}
export interface DiskIdConfigRoleDefault1 {}
export interface DiskIdRoles {
  default?: {
    config?: DiskIdConfigRoleDefault2;
    /**
     * List of additionally imported `.nix` expressions.
     *
     * Supported types:
     *
     * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
     * - **Paths**: should be relative to the current file.
     * - **Any**: Nix expression must be serializable to JSON.
     *
     * !!! Note
     *     **The import only happens if the machine is part of the service or role.**
     *
     * Other types are passed through to the nixos configuration.
     *
     * ???+ Example
     *     To import the `special.nix` file
     *
     *     ```
     *     . Clan Directory
     *     ├── flake.nix
     *     ...
     *     └── modules
     *         ├── special.nix
     *         └── ...
     *     ```
     *
     *     ```nix
     *     {
     *       extraModules = [ "modules/special.nix" ];
     *     }
     *     ```
     *
     */
    extraModules?: (
      | string
      | (
          | boolean
          | number
          | string
          | unknown[]
          | {
              [k: string]: unknown;
            }
          | null
        )
    )[];
    /**
     * List of machines which are part of the role.
     *
     * The machines are referenced by their `attributeName` in the `inventory.machines` attribute set.
     *
     * Memberships are declared here to determine which machines are part of the service.
     *
     * Alternatively, `tags` can be used to determine the membership, more dynamically.
     *
     */
    machines?: string[];
    /**
     * List of tags which are used to determine the membership of the role.
     *
     * The tags are matched against the `inventory.machines.<machineName>.tags` attribute set.
     * If a machine has at least one tag of the role, it is part of the role.
     *
     */
    tags?: string[];
  };
}
export interface DiskIdConfigRoleDefault2 {}
export interface ErgochatConfigRoleDefault {}
export interface ErgochatConfigRoleDefault1 {}
export interface ErgochatRoles {
  default?: {
    config?: ErgochatConfigRoleDefault2;
    /**
     * List of additionally imported `.nix` expressions.
     *
     * Supported types:
     *
     * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
     * - **Paths**: should be relative to the current file.
     * - **Any**: Nix expression must be serializable to JSON.
     *
     * !!! Note
     *     **The import only happens if the machine is part of the service or role.**
     *
     * Other types are passed through to the nixos configuration.
     *
     * ???+ Example
     *     To import the `special.nix` file
     *
     *     ```
     *     . Clan Directory
     *     ├── flake.nix
     *     ...
     *     └── modules
     *         ├── special.nix
     *         └── ...
     *     ```
     *
     *     ```nix
     *     {
     *       extraModules = [ "modules/special.nix" ];
     *     }
     *     ```
     *
     */
    extraModules?: (
      | string
      | (
          | boolean
          | number
          | string
          | unknown[]
          | {
              [k: string]: unknown;
            }
          | null
        )
    )[];
    /**
     * List of machines which are part of the role.
     *
     * The machines are referenced by their `attributeName` in the `inventory.machines` attribute set.
     *
     * Memberships are declared here to determine which machines are part of the service.
     *
     * Alternatively, `tags` can be used to determine the membership, more dynamically.
     *
     */
    machines?: string[];
    /**
     * List of tags which are used to determine the membership of the role.
     *
     * The tags are matched against the `inventory.machines.<machineName>.tags` attribute set.
     * If a machine has at least one tag of the role, it is part of the role.
     *
     */
    tags?: string[];
  };
}
export interface ErgochatConfigRoleDefault2 {}
export interface GarageConfigRoleDefault {}
export interface GarageConfigRoleDefault1 {}
export interface GarageRoles {
  default?: {
    config?: GarageConfigRoleDefault2;
    /**
     * List of additionally imported `.nix` expressions.
     *
     * Supported types:
     *
     * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
     * - **Paths**: should be relative to the current file.
     * - **Any**: Nix expression must be serializable to JSON.
     *
     * !!! Note
     *     **The import only happens if the machine is part of the service or role.**
     *
     * Other types are passed through to the nixos configuration.
     *
     * ???+ Example
     *     To import the `special.nix` file
     *
     *     ```
     *     . Clan Directory
     *     ├── flake.nix
     *     ...
     *     └── modules
     *         ├── special.nix
     *         └── ...
     *     ```
     *
     *     ```nix
     *     {
     *       extraModules = [ "modules/special.nix" ];
     *     }
     *     ```
     *
     */
    extraModules?: (
      | string
      | (
          | boolean
          | number
          | string
          | unknown[]
          | {
              [k: string]: unknown;
            }
          | null
        )
    )[];
    /**
     * List of machines which are part of the role.
     *
     * The machines are referenced by their `attributeName` in the `inventory.machines` attribute set.
     *
     * Memberships are declared here to determine which machines are part of the service.
     *
     * Alternatively, `tags` can be used to determine the membership, more dynamically.
     *
     */
    machines?: string[];
    /**
     * List of tags which are used to determine the membership of the role.
     *
     * The tags are matched against the `inventory.machines.<machineName>.tags` attribute set.
     * If a machine has at least one tag of the role, it is part of the role.
     *
     */
    tags?: string[];
  };
}
export interface GarageConfigRoleDefault2 {}
export interface HeisenbridgeConfigRoleDefault {}
export interface HeisenbridgeConfigRoleDefault1 {}
export interface HeisenbridgeRoles {
  default?: {
    config?: HeisenbridgeConfigRoleDefault2;
    /**
     * List of additionally imported `.nix` expressions.
     *
     * Supported types:
     *
     * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
     * - **Paths**: should be relative to the current file.
     * - **Any**: Nix expression must be serializable to JSON.
     *
     * !!! Note
     *     **The import only happens if the machine is part of the service or role.**
     *
     * Other types are passed through to the nixos configuration.
     *
     * ???+ Example
     *     To import the `special.nix` file
     *
     *     ```
     *     . Clan Directory
     *     ├── flake.nix
     *     ...
     *     └── modules
     *         ├── special.nix
     *         └── ...
     *     ```
     *
     *     ```nix
     *     {
     *       extraModules = [ "modules/special.nix" ];
     *     }
     *     ```
     *
     */
    extraModules?: (
      | string
      | (
          | boolean
          | number
          | string
          | unknown[]
          | {
              [k: string]: unknown;
            }
          | null
        )
    )[];
    /**
     * List of machines which are part of the role.
     *
     * The machines are referenced by their `attributeName` in the `inventory.machines` attribute set.
     *
     * Memberships are declared here to determine which machines are part of the service.
     *
     * Alternatively, `tags` can be used to determine the membership, more dynamically.
     *
     */
    machines?: string[];
    /**
     * List of tags which are used to determine the membership of the role.
     *
     * The tags are matched against the `inventory.machines.<machineName>.tags` attribute set.
     * If a machine has at least one tag of the role, it is part of the role.
     *
     */
    tags?: string[];
  };
}
export interface HeisenbridgeConfigRoleDefault2 {}
export interface ImporterConfigRoleDefault {}
export interface ImporterConfigRoleDefault1 {}
export interface ImporterRoles {
  default?: {
    config?: ImporterConfigRoleDefault2;
    /**
     * List of additionally imported `.nix` expressions.
     *
     * Supported types:
     *
     * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
     * - **Paths**: should be relative to the current file.
     * - **Any**: Nix expression must be serializable to JSON.
     *
     * !!! Note
     *     **The import only happens if the machine is part of the service or role.**
     *
     * Other types are passed through to the nixos configuration.
     *
     * ???+ Example
     *     To import the `special.nix` file
     *
     *     ```
     *     . Clan Directory
     *     ├── flake.nix
     *     ...
     *     └── modules
     *         ├── special.nix
     *         └── ...
     *     ```
     *
     *     ```nix
     *     {
     *       extraModules = [ "modules/special.nix" ];
     *     }
     *     ```
     *
     */
    extraModules?: (
      | string
      | (
          | boolean
          | number
          | string
          | unknown[]
          | {
              [k: string]: unknown;
            }
          | null
        )
    )[];
    /**
     * List of machines which are part of the role.
     *
     * The machines are referenced by their `attributeName` in the `inventory.machines` attribute set.
     *
     * Memberships are declared here to determine which machines are part of the service.
     *
     * Alternatively, `tags` can be used to determine the membership, more dynamically.
     *
     */
    machines?: string[];
    /**
     * List of tags which are used to determine the membership of the role.
     *
     * The tags are matched against the `inventory.machines.<machineName>.tags` attribute set.
     * If a machine has at least one tag of the role, it is part of the role.
     *
     */
    tags?: string[];
  };
}
export interface ImporterConfigRoleDefault2 {}
export interface IwdConfigRoleDefault {
  /**
   * Wifi networks to predefine
   */
  networks?: {
    [k: string]: {
      /**
       * Automatically try to join this wifi network
       */
      AutoConnect?: boolean;
      /**
       * The name of the wifi network
       */
      ssid?: string;
    };
  };
}
export interface IwdConfigRoleDefault1 {
  /**
   * Wifi networks to predefine
   */
  networks?: {
    [k: string]: {
      /**
       * Automatically try to join this wifi network
       */
      AutoConnect?: boolean;
      /**
       * The name of the wifi network
       */
      ssid?: string;
    };
  };
}
export interface IwdRoles {
  default?: {
    config?: IwdConfigRoleDefault2;
    /**
     * List of additionally imported `.nix` expressions.
     *
     * Supported types:
     *
     * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
     * - **Paths**: should be relative to the current file.
     * - **Any**: Nix expression must be serializable to JSON.
     *
     * !!! Note
     *     **The import only happens if the machine is part of the service or role.**
     *
     * Other types are passed through to the nixos configuration.
     *
     * ???+ Example
     *     To import the `special.nix` file
     *
     *     ```
     *     . Clan Directory
     *     ├── flake.nix
     *     ...
     *     └── modules
     *         ├── special.nix
     *         └── ...
     *     ```
     *
     *     ```nix
     *     {
     *       extraModules = [ "modules/special.nix" ];
     *     }
     *     ```
     *
     */
    extraModules?: (
      | string
      | (
          | boolean
          | number
          | string
          | unknown[]
          | {
              [k: string]: unknown;
            }
          | null
        )
    )[];
    /**
     * List of machines which are part of the role.
     *
     * The machines are referenced by their `attributeName` in the `inventory.machines` attribute set.
     *
     * Memberships are declared here to determine which machines are part of the service.
     *
     * Alternatively, `tags` can be used to determine the membership, more dynamically.
     *
     */
    machines?: string[];
    /**
     * List of tags which are used to determine the membership of the role.
     *
     * The tags are matched against the `inventory.machines.<machineName>.tags` attribute set.
     * If a machine has at least one tag of the role, it is part of the role.
     *
     */
    tags?: string[];
  };
}
export interface IwdConfigRoleDefault2 {
  /**
   * Wifi networks to predefine
   */
  networks?: {
    [k: string]: {
      /**
       * Automatically try to join this wifi network
       */
      AutoConnect?: boolean;
      /**
       * The name of the wifi network
       */
      ssid?: string;
    };
  };
}
export interface LocalsendConfigRoleDefault {
  /**
   * The name that localsend will use to display your instance.
   */
  displayName?: null | string;
  /**
   * Optional IPv4 address for ZeroTier network.
   */
  ipv4Addr?: null | string;
}
export interface LocalsendConfigRoleDefault1 {
  /**
   * The name that localsend will use to display your instance.
   */
  displayName?: null | string;
  /**
   * Optional IPv4 address for ZeroTier network.
   */
  ipv4Addr?: null | string;
}
export interface LocalsendRoles {
  default?: {
    config?: LocalsendConfigRoleDefault2;
    /**
     * List of additionally imported `.nix` expressions.
     *
     * Supported types:
     *
     * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
     * - **Paths**: should be relative to the current file.
     * - **Any**: Nix expression must be serializable to JSON.
     *
     * !!! Note
     *     **The import only happens if the machine is part of the service or role.**
     *
     * Other types are passed through to the nixos configuration.
     *
     * ???+ Example
     *     To import the `special.nix` file
     *
     *     ```
     *     . Clan Directory
     *     ├── flake.nix
     *     ...
     *     └── modules
     *         ├── special.nix
     *         └── ...
     *     ```
     *
     *     ```nix
     *     {
     *       extraModules = [ "modules/special.nix" ];
     *     }
     *     ```
     *
     */
    extraModules?: (
      | string
      | (
          | boolean
          | number
          | string
          | unknown[]
          | {
              [k: string]: unknown;
            }
          | null
        )
    )[];
    /**
     * List of machines which are part of the role.
     *
     * The machines are referenced by their `attributeName` in the `inventory.machines` attribute set.
     *
     * Memberships are declared here to determine which machines are part of the service.
     *
     * Alternatively, `tags` can be used to determine the membership, more dynamically.
     *
     */
    machines?: string[];
    /**
     * List of tags which are used to determine the membership of the role.
     *
     * The tags are matched against the `inventory.machines.<machineName>.tags` attribute set.
     * If a machine has at least one tag of the role, it is part of the role.
     *
     */
    tags?: string[];
  };
}
export interface LocalsendConfigRoleDefault2 {
  /**
   * The name that localsend will use to display your instance.
   */
  displayName?: null | string;
  /**
   * Optional IPv4 address for ZeroTier network.
   */
  ipv4Addr?: null | string;
}
export interface MumbleConfigRoleServer {}
export interface MumbleConfigRoleServer1 {}
export interface MumbleRoles {
  server?: {
    config?: MumbleConfigRoleServer2;
    /**
     * List of additionally imported `.nix` expressions.
     *
     * Supported types:
     *
     * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
     * - **Paths**: should be relative to the current file.
     * - **Any**: Nix expression must be serializable to JSON.
     *
     * !!! Note
     *     **The import only happens if the machine is part of the service or role.**
     *
     * Other types are passed through to the nixos configuration.
     *
     * ???+ Example
     *     To import the `special.nix` file
     *
     *     ```
     *     . Clan Directory
     *     ├── flake.nix
     *     ...
     *     └── modules
     *         ├── special.nix
     *         └── ...
     *     ```
     *
     *     ```nix
     *     {
     *       extraModules = [ "modules/special.nix" ];
     *     }
     *     ```
     *
     */
    extraModules?: (
      | string
      | (
          | boolean
          | number
          | string
          | unknown[]
          | {
              [k: string]: unknown;
            }
          | null
        )
    )[];
    /**
     * List of machines which are part of the role.
     *
     * The machines are referenced by their `attributeName` in the `inventory.machines` attribute set.
     *
     * Memberships are declared here to determine which machines are part of the service.
     *
     * Alternatively, `tags` can be used to determine the membership, more dynamically.
     *
     */
    machines?: string[];
    /**
     * List of tags which are used to determine the membership of the role.
     *
     * The tags are matched against the `inventory.machines.<machineName>.tags` attribute set.
     * If a machine has at least one tag of the role, it is part of the role.
     *
     */
    tags?: string[];
  };
}
export interface MumbleConfigRoleServer2 {}
export interface MyceliumConfigRolePeer {
  /**
   * Add hosted Public nodes
   */
  addHostedPublicNodes?: boolean;
  /**
   * Open the firewall for mycelium
   */
  openFirewall?: boolean;
}
export interface MyceliumConfigRolePeer1 {
  /**
   * Add hosted Public nodes
   */
  addHostedPublicNodes?: boolean;
  /**
   * Open the firewall for mycelium
   */
  openFirewall?: boolean;
}
export interface MyceliumRoles {
  peer?: {
    config?: MyceliumConfigRolePeer2;
    /**
     * List of additionally imported `.nix` expressions.
     *
     * Supported types:
     *
     * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
     * - **Paths**: should be relative to the current file.
     * - **Any**: Nix expression must be serializable to JSON.
     *
     * !!! Note
     *     **The import only happens if the machine is part of the service or role.**
     *
     * Other types are passed through to the nixos configuration.
     *
     * ???+ Example
     *     To import the `special.nix` file
     *
     *     ```
     *     . Clan Directory
     *     ├── flake.nix
     *     ...
     *     └── modules
     *         ├── special.nix
     *         └── ...
     *     ```
     *
     *     ```nix
     *     {
     *       extraModules = [ "modules/special.nix" ];
     *     }
     *     ```
     *
     */
    extraModules?: (
      | string
      | (
          | boolean
          | number
          | string
          | unknown[]
          | {
              [k: string]: unknown;
            }
          | null
        )
    )[];
    /**
     * List of machines which are part of the role.
     *
     * The machines are referenced by their `attributeName` in the `inventory.machines` attribute set.
     *
     * Memberships are declared here to determine which machines are part of the service.
     *
     * Alternatively, `tags` can be used to determine the membership, more dynamically.
     *
     */
    machines?: string[];
    /**
     * List of tags which are used to determine the membership of the role.
     *
     * The tags are matched against the `inventory.machines.<machineName>.tags` attribute set.
     * If a machine has at least one tag of the role, it is part of the role.
     *
     */
    tags?: string[];
  };
}
export interface MyceliumConfigRolePeer2 {
  /**
   * Add hosted Public nodes
   */
  addHostedPublicNodes?: boolean;
  /**
   * Open the firewall for mycelium
   */
  openFirewall?: boolean;
}
export interface PackagesConfigRoleDefault {
  /**
   * The packages to install on the machine
   */
  packages: string[];
}
export interface PackagesConfigRoleDefault1 {
  /**
   * The packages to install on the machine
   */
  packages: string[];
}
export interface PackagesRoles {
  default?: {
    config?: PackagesConfigRoleDefault2;
    /**
     * List of additionally imported `.nix` expressions.
     *
     * Supported types:
     *
     * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
     * - **Paths**: should be relative to the current file.
     * - **Any**: Nix expression must be serializable to JSON.
     *
     * !!! Note
     *     **The import only happens if the machine is part of the service or role.**
     *
     * Other types are passed through to the nixos configuration.
     *
     * ???+ Example
     *     To import the `special.nix` file
     *
     *     ```
     *     . Clan Directory
     *     ├── flake.nix
     *     ...
     *     └── modules
     *         ├── special.nix
     *         └── ...
     *     ```
     *
     *     ```nix
     *     {
     *       extraModules = [ "modules/special.nix" ];
     *     }
     *     ```
     *
     */
    extraModules?: (
      | string
      | (
          | boolean
          | number
          | string
          | unknown[]
          | {
              [k: string]: unknown;
            }
          | null
        )
    )[];
    /**
     * List of machines which are part of the role.
     *
     * The machines are referenced by their `attributeName` in the `inventory.machines` attribute set.
     *
     * Memberships are declared here to determine which machines are part of the service.
     *
     * Alternatively, `tags` can be used to determine the membership, more dynamically.
     *
     */
    machines?: string[];
    /**
     * List of tags which are used to determine the membership of the role.
     *
     * The tags are matched against the `inventory.machines.<machineName>.tags` attribute set.
     * If a machine has at least one tag of the role, it is part of the role.
     *
     */
    tags?: string[];
  };
}
export interface PackagesConfigRoleDefault2 {
  /**
   * The packages to install on the machine
   */
  packages: string[];
}
export interface RootPasswordConfigRoleDefault {}
export interface RootPasswordConfigRoleDefault1 {}
export interface RootPasswordRoles {
  default?: {
    config?: RootPasswordConfigRoleDefault2;
    /**
     * List of additionally imported `.nix` expressions.
     *
     * Supported types:
     *
     * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
     * - **Paths**: should be relative to the current file.
     * - **Any**: Nix expression must be serializable to JSON.
     *
     * !!! Note
     *     **The import only happens if the machine is part of the service or role.**
     *
     * Other types are passed through to the nixos configuration.
     *
     * ???+ Example
     *     To import the `special.nix` file
     *
     *     ```
     *     . Clan Directory
     *     ├── flake.nix
     *     ...
     *     └── modules
     *         ├── special.nix
     *         └── ...
     *     ```
     *
     *     ```nix
     *     {
     *       extraModules = [ "modules/special.nix" ];
     *     }
     *     ```
     *
     */
    extraModules?: (
      | string
      | (
          | boolean
          | number
          | string
          | unknown[]
          | {
              [k: string]: unknown;
            }
          | null
        )
    )[];
    /**
     * List of machines which are part of the role.
     *
     * The machines are referenced by their `attributeName` in the `inventory.machines` attribute set.
     *
     * Memberships are declared here to determine which machines are part of the service.
     *
     * Alternatively, `tags` can be used to determine the membership, more dynamically.
     *
     */
    machines?: string[];
    /**
     * List of tags which are used to determine the membership of the role.
     *
     * The tags are matched against the `inventory.machines.<machineName>.tags` attribute set.
     * If a machine has at least one tag of the role, it is part of the role.
     *
     */
    tags?: string[];
  };
}
export interface RootPasswordConfigRoleDefault2 {}
export interface SingleDiskConfigRoleDefault {
  /**
   * The primary disk device to install the system on
   */
  device?: null | string;
}
export interface SingleDiskConfigRoleDefault1 {
  /**
   * The primary disk device to install the system on
   */
  device?: null | string;
}
export interface SingleDiskRoles {
  default?: {
    config?: SingleDiskConfigRoleDefault2;
    /**
     * List of additionally imported `.nix` expressions.
     *
     * Supported types:
     *
     * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
     * - **Paths**: should be relative to the current file.
     * - **Any**: Nix expression must be serializable to JSON.
     *
     * !!! Note
     *     **The import only happens if the machine is part of the service or role.**
     *
     * Other types are passed through to the nixos configuration.
     *
     * ???+ Example
     *     To import the `special.nix` file
     *
     *     ```
     *     . Clan Directory
     *     ├── flake.nix
     *     ...
     *     └── modules
     *         ├── special.nix
     *         └── ...
     *     ```
     *
     *     ```nix
     *     {
     *       extraModules = [ "modules/special.nix" ];
     *     }
     *     ```
     *
     */
    extraModules?: (
      | string
      | (
          | boolean
          | number
          | string
          | unknown[]
          | {
              [k: string]: unknown;
            }
          | null
        )
    )[];
    /**
     * List of machines which are part of the role.
     *
     * The machines are referenced by their `attributeName` in the `inventory.machines` attribute set.
     *
     * Memberships are declared here to determine which machines are part of the service.
     *
     * Alternatively, `tags` can be used to determine the membership, more dynamically.
     *
     */
    machines?: string[];
    /**
     * List of tags which are used to determine the membership of the role.
     *
     * The tags are matched against the `inventory.machines.<machineName>.tags` attribute set.
     * If a machine has at least one tag of the role, it is part of the role.
     *
     */
    tags?: string[];
  };
}
export interface SingleDiskConfigRoleDefault2 {
  /**
   * The primary disk device to install the system on
   */
  device?: null | string;
}
export interface SshdConfigRoleClient {
  certificate: {
    /**
     * List of domains to include in the certificate. This option will prepend the machine name in front of each domain before adding it to the certificate.
     */
    searchDomains?: string[];
  };
}
export interface SshdConfigRoleServer {
  certificate: {
    /**
     * List of domains to include in the certificate. This option will prepend the machine name in front of each domain before adding it to the certificate.
     */
    searchDomains?: string[];
  };
  hostKeys: {
    rsa: {
      /**
       * Whether to enable Generate RSA host key.
       */
      enable?: boolean;
    };
  };
}
export interface SshdConfigRoleClient1 {
  certificate: {
    /**
     * List of domains to include in the certificate. This option will prepend the machine name in front of each domain before adding it to the certificate.
     */
    searchDomains?: string[];
  };
}
export interface SshdConfigRoleServer1 {
  certificate: {
    /**
     * List of domains to include in the certificate. This option will prepend the machine name in front of each domain before adding it to the certificate.
     */
    searchDomains?: string[];
  };
  hostKeys: {
    rsa: {
      /**
       * Whether to enable Generate RSA host key.
       */
      enable?: boolean;
    };
  };
}
export interface SshdRoles {
  client?: {
    config?: SshdConfigRoleClient2;
    /**
     * List of additionally imported `.nix` expressions.
     *
     * Supported types:
     *
     * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
     * - **Paths**: should be relative to the current file.
     * - **Any**: Nix expression must be serializable to JSON.
     *
     * !!! Note
     *     **The import only happens if the machine is part of the service or role.**
     *
     * Other types are passed through to the nixos configuration.
     *
     * ???+ Example
     *     To import the `special.nix` file
     *
     *     ```
     *     . Clan Directory
     *     ├── flake.nix
     *     ...
     *     └── modules
     *         ├── special.nix
     *         └── ...
     *     ```
     *
     *     ```nix
     *     {
     *       extraModules = [ "modules/special.nix" ];
     *     }
     *     ```
     *
     */
    extraModules?: (
      | string
      | (
          | boolean
          | number
          | string
          | unknown[]
          | {
              [k: string]: unknown;
            }
          | null
        )
    )[];
    /**
     * List of machines which are part of the role.
     *
     * The machines are referenced by their `attributeName` in the `inventory.machines` attribute set.
     *
     * Memberships are declared here to determine which machines are part of the service.
     *
     * Alternatively, `tags` can be used to determine the membership, more dynamically.
     *
     */
    machines?: string[];
    /**
     * List of tags which are used to determine the membership of the role.
     *
     * The tags are matched against the `inventory.machines.<machineName>.tags` attribute set.
     * If a machine has at least one tag of the role, it is part of the role.
     *
     */
    tags?: string[];
  };
  server?: {
    config?: SshdConfigRoleServer2;
    /**
     * List of additionally imported `.nix` expressions.
     *
     * Supported types:
     *
     * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
     * - **Paths**: should be relative to the current file.
     * - **Any**: Nix expression must be serializable to JSON.
     *
     * !!! Note
     *     **The import only happens if the machine is part of the service or role.**
     *
     * Other types are passed through to the nixos configuration.
     *
     * ???+ Example
     *     To import the `special.nix` file
     *
     *     ```
     *     . Clan Directory
     *     ├── flake.nix
     *     ...
     *     └── modules
     *         ├── special.nix
     *         └── ...
     *     ```
     *
     *     ```nix
     *     {
     *       extraModules = [ "modules/special.nix" ];
     *     }
     *     ```
     *
     */
    extraModules?: (
      | string
      | (
          | boolean
          | number
          | string
          | unknown[]
          | {
              [k: string]: unknown;
            }
          | null
        )
    )[];
    /**
     * List of machines which are part of the role.
     *
     * The machines are referenced by their `attributeName` in the `inventory.machines` attribute set.
     *
     * Memberships are declared here to determine which machines are part of the service.
     *
     * Alternatively, `tags` can be used to determine the membership, more dynamically.
     *
     */
    machines?: string[];
    /**
     * List of tags which are used to determine the membership of the role.
     *
     * The tags are matched against the `inventory.machines.<machineName>.tags` attribute set.
     * If a machine has at least one tag of the role, it is part of the role.
     *
     */
    tags?: string[];
  };
}
export interface SshdConfigRoleClient2 {
  certificate: {
    /**
     * List of domains to include in the certificate. This option will prepend the machine name in front of each domain before adding it to the certificate.
     */
    searchDomains?: string[];
  };
}
export interface SshdConfigRoleServer2 {
  certificate: {
    /**
     * List of domains to include in the certificate. This option will prepend the machine name in front of each domain before adding it to the certificate.
     */
    searchDomains?: string[];
  };
  hostKeys: {
    rsa: {
      /**
       * Whether to enable Generate RSA host key.
       */
      enable?: boolean;
    };
  };
}
export interface StateVersionConfigRoleDefault {}
export interface StateVersionConfigRoleDefault1 {}
export interface StateVersionRoles {
  default?: {
    config?: StateVersionConfigRoleDefault2;
    /**
     * List of additionally imported `.nix` expressions.
     *
     * Supported types:
     *
     * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
     * - **Paths**: should be relative to the current file.
     * - **Any**: Nix expression must be serializable to JSON.
     *
     * !!! Note
     *     **The import only happens if the machine is part of the service or role.**
     *
     * Other types are passed through to the nixos configuration.
     *
     * ???+ Example
     *     To import the `special.nix` file
     *
     *     ```
     *     . Clan Directory
     *     ├── flake.nix
     *     ...
     *     └── modules
     *         ├── special.nix
     *         └── ...
     *     ```
     *
     *     ```nix
     *     {
     *       extraModules = [ "modules/special.nix" ];
     *     }
     *     ```
     *
     */
    extraModules?: (
      | string
      | (
          | boolean
          | number
          | string
          | unknown[]
          | {
              [k: string]: unknown;
            }
          | null
        )
    )[];
    /**
     * List of machines which are part of the role.
     *
     * The machines are referenced by their `attributeName` in the `inventory.machines` attribute set.
     *
     * Memberships are declared here to determine which machines are part of the service.
     *
     * Alternatively, `tags` can be used to determine the membership, more dynamically.
     *
     */
    machines?: string[];
    /**
     * List of tags which are used to determine the membership of the role.
     *
     * The tags are matched against the `inventory.machines.<machineName>.tags` attribute set.
     * If a machine has at least one tag of the role, it is part of the role.
     *
     */
    tags?: string[];
  };
}
export interface StateVersionConfigRoleDefault2 {}
export interface SyncthingConfigRoleIntroducer {
  /**
   * Auto accept incoming device requests.
   * Should only be used on the introducer.
   *
   */
  autoAcceptDevices?: boolean;
  /**
   * Auto share the following Folders by their ID's with introduced devices.
   * Should only be used on the introducer.
   *
   */
  autoShares?: string[];
  /**
   * The ID of the machine.
   * It is generated automatically by default.
   *
   */
  id?: null | string;
  /**
   * The introducer for the machine.
   *
   */
  introducer?: null | string;
}
export interface SyncthingConfigRolePeer {
  /**
   * Auto accept incoming device requests.
   * Should only be used on the introducer.
   *
   */
  autoAcceptDevices?: boolean;
  /**
   * Auto share the following Folders by their ID's with introduced devices.
   * Should only be used on the introducer.
   *
   */
  autoShares?: string[];
  /**
   * The ID of the machine.
   * It is generated automatically by default.
   *
   */
  id?: null | string;
  /**
   * The introducer for the machine.
   *
   */
  introducer?: null | string;
}
export interface SyncthingConfigRoleIntroducer1 {
  /**
   * Auto accept incoming device requests.
   * Should only be used on the introducer.
   *
   */
  autoAcceptDevices?: boolean;
  /**
   * Auto share the following Folders by their ID's with introduced devices.
   * Should only be used on the introducer.
   *
   */
  autoShares?: string[];
  /**
   * The ID of the machine.
   * It is generated automatically by default.
   *
   */
  id?: null | string;
  /**
   * The introducer for the machine.
   *
   */
  introducer?: null | string;
}
export interface SyncthingConfigRolePeer1 {
  /**
   * Auto accept incoming device requests.
   * Should only be used on the introducer.
   *
   */
  autoAcceptDevices?: boolean;
  /**
   * Auto share the following Folders by their ID's with introduced devices.
   * Should only be used on the introducer.
   *
   */
  autoShares?: string[];
  /**
   * The ID of the machine.
   * It is generated automatically by default.
   *
   */
  id?: null | string;
  /**
   * The introducer for the machine.
   *
   */
  introducer?: null | string;
}
export interface SyncthingRoles {
  introducer?: {
    config?: SyncthingConfigRoleIntroducer2;
    /**
     * List of additionally imported `.nix` expressions.
     *
     * Supported types:
     *
     * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
     * - **Paths**: should be relative to the current file.
     * - **Any**: Nix expression must be serializable to JSON.
     *
     * !!! Note
     *     **The import only happens if the machine is part of the service or role.**
     *
     * Other types are passed through to the nixos configuration.
     *
     * ???+ Example
     *     To import the `special.nix` file
     *
     *     ```
     *     . Clan Directory
     *     ├── flake.nix
     *     ...
     *     └── modules
     *         ├── special.nix
     *         └── ...
     *     ```
     *
     *     ```nix
     *     {
     *       extraModules = [ "modules/special.nix" ];
     *     }
     *     ```
     *
     */
    extraModules?: (
      | string
      | (
          | boolean
          | number
          | string
          | unknown[]
          | {
              [k: string]: unknown;
            }
          | null
        )
    )[];
    /**
     * List of machines which are part of the role.
     *
     * The machines are referenced by their `attributeName` in the `inventory.machines` attribute set.
     *
     * Memberships are declared here to determine which machines are part of the service.
     *
     * Alternatively, `tags` can be used to determine the membership, more dynamically.
     *
     */
    machines?: string[];
    /**
     * List of tags which are used to determine the membership of the role.
     *
     * The tags are matched against the `inventory.machines.<machineName>.tags` attribute set.
     * If a machine has at least one tag of the role, it is part of the role.
     *
     */
    tags?: string[];
  };
  peer?: {
    config?: SyncthingConfigRolePeer2;
    /**
     * List of additionally imported `.nix` expressions.
     *
     * Supported types:
     *
     * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
     * - **Paths**: should be relative to the current file.
     * - **Any**: Nix expression must be serializable to JSON.
     *
     * !!! Note
     *     **The import only happens if the machine is part of the service or role.**
     *
     * Other types are passed through to the nixos configuration.
     *
     * ???+ Example
     *     To import the `special.nix` file
     *
     *     ```
     *     . Clan Directory
     *     ├── flake.nix
     *     ...
     *     └── modules
     *         ├── special.nix
     *         └── ...
     *     ```
     *
     *     ```nix
     *     {
     *       extraModules = [ "modules/special.nix" ];
     *     }
     *     ```
     *
     */
    extraModules?: (
      | string
      | (
          | boolean
          | number
          | string
          | unknown[]
          | {
              [k: string]: unknown;
            }
          | null
        )
    )[];
    /**
     * List of machines which are part of the role.
     *
     * The machines are referenced by their `attributeName` in the `inventory.machines` attribute set.
     *
     * Memberships are declared here to determine which machines are part of the service.
     *
     * Alternatively, `tags` can be used to determine the membership, more dynamically.
     *
     */
    machines?: string[];
    /**
     * List of tags which are used to determine the membership of the role.
     *
     * The tags are matched against the `inventory.machines.<machineName>.tags` attribute set.
     * If a machine has at least one tag of the role, it is part of the role.
     *
     */
    tags?: string[];
  };
}
export interface SyncthingConfigRoleIntroducer2 {
  /**
   * Auto accept incoming device requests.
   * Should only be used on the introducer.
   *
   */
  autoAcceptDevices?: boolean;
  /**
   * Auto share the following Folders by their ID's with introduced devices.
   * Should only be used on the introducer.
   *
   */
  autoShares?: string[];
  /**
   * The ID of the machine.
   * It is generated automatically by default.
   *
   */
  id?: null | string;
  /**
   * The introducer for the machine.
   *
   */
  introducer?: null | string;
}
export interface SyncthingConfigRolePeer2 {
  /**
   * Auto accept incoming device requests.
   * Should only be used on the introducer.
   *
   */
  autoAcceptDevices?: boolean;
  /**
   * Auto share the following Folders by their ID's with introduced devices.
   * Should only be used on the introducer.
   *
   */
  autoShares?: string[];
  /**
   * The ID of the machine.
   * It is generated automatically by default.
   *
   */
  id?: null | string;
  /**
   * The introducer for the machine.
   *
   */
  introducer?: null | string;
}
export interface UserPasswordConfigRoleDefault {
  /**
   * Whether the user should be prompted
   * If disabled, will autogenerate the password without prompting.
   *
   */
  prompt?: boolean;
  /**
   * The user the password should be generated for.
   */
  user: string;
}
export interface UserPasswordConfigRoleDefault1 {
  /**
   * Whether the user should be prompted
   * If disabled, will autogenerate the password without prompting.
   *
   */
  prompt?: boolean;
  /**
   * The user the password should be generated for.
   */
  user: string;
}
export interface UserPasswordRoles {
  default?: {
    config?: UserPasswordConfigRoleDefault2;
    /**
     * List of additionally imported `.nix` expressions.
     *
     * Supported types:
     *
     * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
     * - **Paths**: should be relative to the current file.
     * - **Any**: Nix expression must be serializable to JSON.
     *
     * !!! Note
     *     **The import only happens if the machine is part of the service or role.**
     *
     * Other types are passed through to the nixos configuration.
     *
     * ???+ Example
     *     To import the `special.nix` file
     *
     *     ```
     *     . Clan Directory
     *     ├── flake.nix
     *     ...
     *     └── modules
     *         ├── special.nix
     *         └── ...
     *     ```
     *
     *     ```nix
     *     {
     *       extraModules = [ "modules/special.nix" ];
     *     }
     *     ```
     *
     */
    extraModules?: (
      | string
      | (
          | boolean
          | number
          | string
          | unknown[]
          | {
              [k: string]: unknown;
            }
          | null
        )
    )[];
    /**
     * List of machines which are part of the role.
     *
     * The machines are referenced by their `attributeName` in the `inventory.machines` attribute set.
     *
     * Memberships are declared here to determine which machines are part of the service.
     *
     * Alternatively, `tags` can be used to determine the membership, more dynamically.
     *
     */
    machines?: string[];
    /**
     * List of tags which are used to determine the membership of the role.
     *
     * The tags are matched against the `inventory.machines.<machineName>.tags` attribute set.
     * If a machine has at least one tag of the role, it is part of the role.
     *
     */
    tags?: string[];
  };
}
export interface UserPasswordConfigRoleDefault2 {
  /**
   * Whether the user should be prompted
   * If disabled, will autogenerate the password without prompting.
   *
   */
  prompt?: boolean;
  /**
   * The user the password should be generated for.
   */
  user: string;
}
export interface ZerotierConfigRoleController {
  /**
   * Hosts that should be excluded
   */
  excludeHosts?: string[];
  /**
   * Extra zerotier network Ids that should be accepted
   */
  networkIds?: string[];
  /**
   * Extra zerotier network Ips that should be accepted
   */
  networkIps?: string[];
}
export interface ZerotierConfigRoleMoon {
  /**
   * Hosts that should be excluded
   */
  excludeHosts?: string[];
  moon: {
    /**
     * Make this machine a moon.
     * Other machines can join this moon by adding this moon in their config.
     * It will be reachable under the given stable endpoints.
     *
     */
    stableEndpoints: string[];
  };
  /**
   * Extra zerotier network Ids that should be accepted
   */
  networkIds?: string[];
  /**
   * Extra zerotier network Ips that should be accepted
   */
  networkIps?: string[];
}
export interface ZerotierConfigRolePeer {
  /**
   * Hosts that should be excluded
   */
  excludeHosts?: string[];
  /**
   * Extra zerotier network Ids that should be accepted
   */
  networkIds?: string[];
  /**
   * Extra zerotier network Ips that should be accepted
   */
  networkIps?: string[];
}
export interface ZerotierConfigRoleController1 {
  /**
   * Hosts that should be excluded
   */
  excludeHosts?: string[];
  /**
   * Extra zerotier network Ids that should be accepted
   */
  networkIds?: string[];
  /**
   * Extra zerotier network Ips that should be accepted
   */
  networkIps?: string[];
}
export interface ZerotierConfigRoleMoon1 {
  /**
   * Hosts that should be excluded
   */
  excludeHosts?: string[];
  moon: {
    /**
     * Make this machine a moon.
     * Other machines can join this moon by adding this moon in their config.
     * It will be reachable under the given stable endpoints.
     *
     */
    stableEndpoints: string[];
  };
  /**
   * Extra zerotier network Ids that should be accepted
   */
  networkIds?: string[];
  /**
   * Extra zerotier network Ips that should be accepted
   */
  networkIps?: string[];
}
export interface ZerotierConfigRolePeer1 {
  /**
   * Hosts that should be excluded
   */
  excludeHosts?: string[];
  /**
   * Extra zerotier network Ids that should be accepted
   */
  networkIds?: string[];
  /**
   * Extra zerotier network Ips that should be accepted
   */
  networkIps?: string[];
}
export interface ZerotierRoles {
  controller?: {
    config?: ZerotierConfigRoleController2;
    /**
     * List of additionally imported `.nix` expressions.
     *
     * Supported types:
     *
     * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
     * - **Paths**: should be relative to the current file.
     * - **Any**: Nix expression must be serializable to JSON.
     *
     * !!! Note
     *     **The import only happens if the machine is part of the service or role.**
     *
     * Other types are passed through to the nixos configuration.
     *
     * ???+ Example
     *     To import the `special.nix` file
     *
     *     ```
     *     . Clan Directory
     *     ├── flake.nix
     *     ...
     *     └── modules
     *         ├── special.nix
     *         └── ...
     *     ```
     *
     *     ```nix
     *     {
     *       extraModules = [ "modules/special.nix" ];
     *     }
     *     ```
     *
     */
    extraModules?: (
      | string
      | (
          | boolean
          | number
          | string
          | unknown[]
          | {
              [k: string]: unknown;
            }
          | null
        )
    )[];
    /**
     * List of machines which are part of the role.
     *
     * The machines are referenced by their `attributeName` in the `inventory.machines` attribute set.
     *
     * Memberships are declared here to determine which machines are part of the service.
     *
     * Alternatively, `tags` can be used to determine the membership, more dynamically.
     *
     */
    machines?: string[];
    /**
     * List of tags which are used to determine the membership of the role.
     *
     * The tags are matched against the `inventory.machines.<machineName>.tags` attribute set.
     * If a machine has at least one tag of the role, it is part of the role.
     *
     */
    tags?: string[];
  };
  moon?: {
    config?: ZerotierConfigRoleMoon2;
    /**
     * List of additionally imported `.nix` expressions.
     *
     * Supported types:
     *
     * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
     * - **Paths**: should be relative to the current file.
     * - **Any**: Nix expression must be serializable to JSON.
     *
     * !!! Note
     *     **The import only happens if the machine is part of the service or role.**
     *
     * Other types are passed through to the nixos configuration.
     *
     * ???+ Example
     *     To import the `special.nix` file
     *
     *     ```
     *     . Clan Directory
     *     ├── flake.nix
     *     ...
     *     └── modules
     *         ├── special.nix
     *         └── ...
     *     ```
     *
     *     ```nix
     *     {
     *       extraModules = [ "modules/special.nix" ];
     *     }
     *     ```
     *
     */
    extraModules?: (
      | string
      | (
          | boolean
          | number
          | string
          | unknown[]
          | {
              [k: string]: unknown;
            }
          | null
        )
    )[];
    /**
     * List of machines which are part of the role.
     *
     * The machines are referenced by their `attributeName` in the `inventory.machines` attribute set.
     *
     * Memberships are declared here to determine which machines are part of the service.
     *
     * Alternatively, `tags` can be used to determine the membership, more dynamically.
     *
     */
    machines?: string[];
    /**
     * List of tags which are used to determine the membership of the role.
     *
     * The tags are matched against the `inventory.machines.<machineName>.tags` attribute set.
     * If a machine has at least one tag of the role, it is part of the role.
     *
     */
    tags?: string[];
  };
  peer?: {
    config?: ZerotierConfigRolePeer2;
    /**
     * List of additionally imported `.nix` expressions.
     *
     * Supported types:
     *
     * - **Strings**: Interpreted relative to the 'directory' passed to `lib.clan`.
     * - **Paths**: should be relative to the current file.
     * - **Any**: Nix expression must be serializable to JSON.
     *
     * !!! Note
     *     **The import only happens if the machine is part of the service or role.**
     *
     * Other types are passed through to the nixos configuration.
     *
     * ???+ Example
     *     To import the `special.nix` file
     *
     *     ```
     *     . Clan Directory
     *     ├── flake.nix
     *     ...
     *     └── modules
     *         ├── special.nix
     *         └── ...
     *     ```
     *
     *     ```nix
     *     {
     *       extraModules = [ "modules/special.nix" ];
     *     }
     *     ```
     *
     */
    extraModules?: (
      | string
      | (
          | boolean
          | number
          | string
          | unknown[]
          | {
              [k: string]: unknown;
            }
          | null
        )
    )[];
    /**
     * List of machines which are part of the role.
     *
     * The machines are referenced by their `attributeName` in the `inventory.machines` attribute set.
     *
     * Memberships are declared here to determine which machines are part of the service.
     *
     * Alternatively, `tags` can be used to determine the membership, more dynamically.
     *
     */
    machines?: string[];
    /**
     * List of tags which are used to determine the membership of the role.
     *
     * The tags are matched against the `inventory.machines.<machineName>.tags` attribute set.
     * If a machine has at least one tag of the role, it is part of the role.
     *
     */
    tags?: string[];
  };
}
export interface ZerotierConfigRoleController2 {
  /**
   * Hosts that should be excluded
   */
  excludeHosts?: string[];
  /**
   * Extra zerotier network Ids that should be accepted
   */
  networkIds?: string[];
  /**
   * Extra zerotier network Ips that should be accepted
   */
  networkIps?: string[];
}
export interface ZerotierConfigRoleMoon2 {
  /**
   * Hosts that should be excluded
   */
  excludeHosts?: string[];
  moon: {
    /**
     * Make this machine a moon.
     * Other machines can join this moon by adding this moon in their config.
     * It will be reachable under the given stable endpoints.
     *
     */
    stableEndpoints: string[];
  };
  /**
   * Extra zerotier network Ids that should be accepted
   */
  networkIds?: string[];
  /**
   * Extra zerotier network Ips that should be accepted
   */
  networkIps?: string[];
}
export interface ZerotierConfigRolePeer2 {
  /**
   * Hosts that should be excluded
   */
  excludeHosts?: string[];
  /**
   * Extra zerotier network Ids that should be accepted
   */
  networkIds?: string[];
  /**
   * Extra zerotier network Ips that should be accepted
   */
  networkIps?: string[];
}
