{ lib, ... }:

{
  options.state = lib.mkOption {
    type = lib.types.submodule {
      freeformType = with lib.types; attrsOf anything;
      options = {
        ignoreDirectories = lib.mkOption {
          type = with lib.types; listOf str;
          description = ''
            A state variable holding a list of directory names to be excluded
            in processes involving walking through directories (e.g., desktop
            indexing).
          '';
          default = [ ];
          example = [
            "node_modules"
            ".direnv"
          ];
        };
      };
    };
    description = ''
      A set of values to be held in the home-manager configuration. Pretty much
      used for anything that requires consistency or deduplicate the source of
      truth for module values.
    '';
    example = {
      sampleValue = 10;
      dev.ignoreDirectories = [
        ".git"
        "node_modules"
        ".direnv"
      ];
    };
  };
}