{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://catalog.lintel.tools/schemas/schemastore/bottom-configuration/versions/nightly.json",
  "title": "Schema for bottom's config file (nightly)",
  "description": "<https://bottom.pages.dev/nightly/configuration/config-file/>",
  "x-lintel": {
    "source": "https://raw.githubusercontent.com/ClementTsang/bottom/main/schema/nightly/bottom.json",
    "sourceSha256": "00778fa8accc92c62dc6eb0851a9c139132e5e4390ce5fcc447f93c3d6455bf4",
    "fileMatch": [
      "bottom.toml"
    ],
    "parsers": [
      "toml"
    ]
  },
  "type": "object",
  "properties": {
    "cpu": {
      "anyOf": [
        {
          "$ref": "#/$defs/CpuConfig"
        },
        {
          "type": "null"
        }
      ]
    },
    "disk": {
      "anyOf": [
        {
          "$ref": "#/$defs/DiskConfig"
        },
        {
          "type": "null"
        }
      ]
    },
    "flags": {
      "anyOf": [
        {
          "$ref": "#/$defs/GeneralConfig"
        },
        {
          "type": "null"
        }
      ]
    },
    "network": {
      "anyOf": [
        {
          "$ref": "#/$defs/NetworkConfig"
        },
        {
          "type": "null"
        }
      ]
    },
    "processes": {
      "anyOf": [
        {
          "$ref": "#/$defs/ProcessesConfig"
        },
        {
          "type": "null"
        }
      ]
    },
    "row": {
      "type": [
        "array",
        "null"
      ],
      "items": {
        "$ref": "#/$defs/row"
      }
    },
    "styles": {
      "anyOf": [
        {
          "$ref": "#/$defs/StyleConfig"
        },
        {
          "type": "null"
        }
      ]
    },
    "temperature": {
      "anyOf": [
        {
          "$ref": "#/$defs/TempConfig"
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "$defs": {
    "BatteryStyle": {
      "description": "Styling specific to the battery widget.",
      "type": "object",
      "properties": {
        "high_battery_color": {
          "description": "The colour of the battery widget bar when the battery is over 50%.",
          "anyOf": [
            {
              "$ref": "#/$defs/ColorStr"
            },
            {
              "type": "null"
            }
          ]
        },
        "low_battery_color": {
          "description": "The colour of the battery widget bar when the battery is under 10%.",
          "anyOf": [
            {
              "$ref": "#/$defs/ColorStr"
            },
            {
              "type": "null"
            }
          ]
        },
        "medium_battery_color": {
          "description": "The colour of the battery widget bar when the battery between 10% to 50%.",
          "anyOf": [
            {
              "$ref": "#/$defs/ColorStr"
            },
            {
              "type": "null"
            }
          ]
        }
      }
    },
    "ColorStr": {
      "type": "string"
    },
    "CpuConfig": {
      "description": "CPU column settings.",
      "type": "object",
      "properties": {
        "default": {
          "description": "The default selected entry of the CPU widget.",
          "$ref": "#/$defs/CpuDefault"
        }
      }
    },
    "CpuDefault": {
      "description": "The default selected entry of the CPU widget.",
      "type": "string",
      "enum": [
        "all",
        "average"
      ]
    },
    "CpuStyle": {
      "description": "Styling specific to the CPU widget.",
      "type": "object",
      "properties": {
        "all_entry_color": {
          "description": "The colour of the \"All\" CPU label.",
          "anyOf": [
            {
              "$ref": "#/$defs/ColorStr"
            },
            {
              "type": "null"
            }
          ]
        },
        "avg_entry_color": {
          "description": "The colour of the average CPU label and graph line.",
          "anyOf": [
            {
              "$ref": "#/$defs/ColorStr"
            },
            {
              "type": "null"
            }
          ]
        },
        "cpu_core_colors": {
          "description": "Colour of each CPU threads' label and graph line. Read in order.",
          "type": [
            "array",
            "null"
          ],
          "items": {
            "$ref": "#/$defs/ColorStr"
          }
        }
      }
    },
    "DiskConfig": {
      "description": "Disk configuration.",
      "type": "object",
      "properties": {
        "columns": {
          "description": "A list of disk widget columns.",
          "type": [
            "array",
            "null"
          ],
          "items": {
            "$ref": "#/$defs/DiskWidgetColumn"
          }
        },
        "default_sort": {
          "description": "The default sort column.",
          "anyOf": [
            {
              "$ref": "#/$defs/DiskWidgetColumn"
            },
            {
              "type": "null"
            }
          ]
        },
        "mount_filter": {
          "description": "A filter over the mount names.",
          "anyOf": [
            {
              "$ref": "#/$defs/IgnoreList"
            },
            {
              "type": "null"
            }
          ]
        },
        "name_filter": {
          "description": "A filter over the disk names.",
          "anyOf": [
            {
              "$ref": "#/$defs/IgnoreList"
            },
            {
              "type": "null"
            }
          ]
        }
      }
    },
    "DiskWidgetColumn": {
      "type": "string",
      "enum": [
        "Disk",
        "Free",
        "Free%",
        "Mount",
        "R/s",
        "Read",
        "Rps",
        "Total",
        "Used",
        "Used%",
        "W/s",
        "Wps",
        "Write",
        "disk",
        "free",
        "free%",
        "mount",
        "r/s",
        "read",
        "rps",
        "total",
        "used",
        "used%",
        "w/s",
        "wps",
        "write"
      ]
    },
    "FinalWidget": {
      "description": "Represents a widget.",
      "type": "object",
      "properties": {
        "default": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "ratio": {
          "type": [
            "integer",
            "null"
          ],
          "format": "uint16",
          "maximum": 65535,
          "minimum": 0
        },
        "type": {
          "type": "string"
        }
      },
      "required": [
        "type"
      ]
    },
    "GeneralConfig": {
      "type": "object",
      "properties": {
        "autohide_time": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "average_cpu_row": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "basic": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "battery": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "case_sensitive": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "cpu_left_legend": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "current_usage": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "default_time_value": {
          "anyOf": [
            {
              "$ref": "#/$defs/StringOrNum"
            },
            {
              "type": "null"
            }
          ]
        },
        "default_widget_count": {
          "type": [
            "integer",
            "null"
          ],
          "format": "uint64",
          "minimum": 0
        },
        "default_widget_type": {
          "type": [
            "string",
            "null"
          ]
        },
        "disable_advanced_kill": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "disable_click": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "disable_gpu": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "disable_keys": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "dot_marker": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "enable_cache_memory": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "expanded": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "free_arc": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "group_processes": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "hide_avg_cpu": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "hide_k_threads": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "hide_table_gap": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "hide_time": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "memory_legend": {
          "type": [
            "string",
            "null"
          ]
        },
        "network_legend": {
          "type": [
            "string",
            "null"
          ]
        },
        "network_use_binary_prefix": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "network_use_bytes": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "network_use_log": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "no_write": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "process_command": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "process_memory_as_value": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "rate": {
          "anyOf": [
            {
              "$ref": "#/$defs/StringOrNum"
            },
            {
              "type": "null"
            }
          ]
        },
        "read_only": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "regex": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "retention": {
          "anyOf": [
            {
              "$ref": "#/$defs/StringOrNum"
            },
            {
              "type": "null"
            }
          ]
        },
        "show_packets": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "show_table_scroll_position": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "temperature_type": {
          "type": [
            "string",
            "null"
          ]
        },
        "time_delta": {
          "anyOf": [
            {
              "$ref": "#/$defs/StringOrNum"
            },
            {
              "type": "null"
            }
          ]
        },
        "tree": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "tree_collapse": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "unnormalized_cpu": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "use_old_network_legend": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "whole_word": {
          "type": [
            "boolean",
            "null"
          ]
        }
      }
    },
    "GraphStyle": {
      "description": "General styling for graph widgets.",
      "type": "object",
      "properties": {
        "graph_color": {
          "description": "The general colour of the parts of the graph.",
          "anyOf": [
            {
              "$ref": "#/$defs/ColorStr"
            },
            {
              "type": "null"
            }
          ]
        },
        "legend_text": {
          "description": "Text styling for graph's legend text.",
          "anyOf": [
            {
              "$ref": "#/$defs/TextStyleConfig"
            },
            {
              "type": "null"
            }
          ]
        }
      }
    },
    "IgnoreList": {
      "type": "object",
      "properties": {
        "case_sensitive": {
          "type": "boolean",
          "default": false
        },
        "is_list_ignored": {
          "type": "boolean",
          "default": true
        },
        "list": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "regex": {
          "type": "boolean",
          "default": false
        },
        "whole_word": {
          "type": "boolean",
          "default": false
        }
      },
      "required": [
        "list"
      ]
    },
    "MemoryStyle": {
      "description": "Styling specific to the memory widget.",
      "type": "object",
      "properties": {
        "arc_color": {
          "description": "The colour of the ARC label and graph line.",
          "anyOf": [
            {
              "$ref": "#/$defs/ColorStr"
            },
            {
              "type": "null"
            }
          ]
        },
        "cache_color": {
          "description": "The colour of the cache label and graph line. Does not do anything on Windows.",
          "anyOf": [
            {
              "$ref": "#/$defs/ColorStr"
            },
            {
              "type": "null"
            }
          ]
        },
        "gpu_colors": {
          "description": "Colour of each GPU's memory label and graph line. Read in order.",
          "type": [
            "array",
            "null"
          ],
          "items": {
            "$ref": "#/$defs/ColorStr"
          }
        },
        "ram_color": {
          "description": "The colour of the RAM label and graph line.",
          "anyOf": [
            {
              "$ref": "#/$defs/ColorStr"
            },
            {
              "type": "null"
            }
          ]
        },
        "swap_color": {
          "description": "The colour of the swap label and graph line.",
          "anyOf": [
            {
              "$ref": "#/$defs/ColorStr"
            },
            {
              "type": "null"
            }
          ]
        }
      }
    },
    "NetworkConfig": {
      "description": "Network configuration.",
      "type": "object",
      "properties": {
        "interface_filter": {
          "description": "A filter over the network interface names.",
          "anyOf": [
            {
              "$ref": "#/$defs/IgnoreList"
            },
            {
              "type": "null"
            }
          ]
        },
        "show_packets": {
          "description": "Whether to show packets information (packet rate and average packet size).",
          "type": [
            "boolean",
            "null"
          ]
        }
      }
    },
    "NetworkStyle": {
      "description": "Styling specific to the network widget.",
      "type": "object",
      "properties": {
        "rx_color": {
          "description": "The colour of the RX (download) label and graph line.",
          "anyOf": [
            {
              "$ref": "#/$defs/ColorStr"
            },
            {
              "type": "null"
            }
          ]
        },
        "rx_total_color": {
          "description": "he colour of the total RX (download) label in basic mode.",
          "anyOf": [
            {
              "$ref": "#/$defs/ColorStr"
            },
            {
              "type": "null"
            }
          ]
        },
        "tx_color": {
          "description": "The colour of the TX (upload) label and graph line.",
          "anyOf": [
            {
              "$ref": "#/$defs/ColorStr"
            },
            {
              "type": "null"
            }
          ]
        },
        "tx_total_color": {
          "description": "The colour of the total TX (upload) label in basic mode.",
          "anyOf": [
            {
              "$ref": "#/$defs/ColorStr"
            },
            {
              "type": "null"
            }
          ]
        }
      }
    },
    "ProcColumn": {
      "description": "A column in the process widget.",
      "type": "string",
      "enum": [
        "CPU%",
        "Command",
        "Count",
        "GMem",
        "GMem%",
        "GPU%",
        "Mem",
        "Mem%",
        "Memory",
        "Memory%",
        "Name",
        "Nice",
        "PID",
        "Priority",
        "R/s",
        "Read",
        "Rps",
        "State",
        "T.Read",
        "T.Write",
        "TRead",
        "TWrite",
        "Time",
        "Total Read",
        "Total Write",
        "User",
        "Virt",
        "VirtMem",
        "Virtual",
        "Virtual Memory",
        "W/s",
        "Wps",
        "Write",
        "command",
        "count",
        "cpu%",
        "gmem",
        "gmem%",
        "gpu%",
        "mem",
        "mem%",
        "memory",
        "memory%",
        "name",
        "nice",
        "pid",
        "priority",
        "r/s",
        "read",
        "rps",
        "state",
        "t.read",
        "t.write",
        "time",
        "total read",
        "total write",
        "tread",
        "twrite",
        "user",
        "virt",
        "virtmem",
        "virtual",
        "virtual memory",
        "w/s",
        "wps",
        "write"
      ]
    },
    "ProcessesConfig": {
      "description": "Process configuration.",
      "type": "object",
      "properties": {
        "columns": {
          "description": "A list of process widget columns.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/ProcColumn"
          }
        },
        "get_threads": {
          "description": "Whether to get process child threads.",
          "type": [
            "boolean",
            "null"
          ]
        }
      }
    },
    "RowChildren": {
      "description": "Represents a child of a Row - either a Col (column) or a FinalWidget.\n\nA Col can also have an optional length and children.  We only allow columns\nto have FinalWidgets as children, lest we get some amount of mutual\nrecursion between Row and Col.",
      "anyOf": [
        {
          "$ref": "#/$defs/FinalWidget"
        },
        {
          "type": "object",
          "properties": {
            "child": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/FinalWidget"
              }
            },
            "ratio": {
              "type": [
                "integer",
                "null"
              ],
              "format": "uint16",
              "maximum": 65535,
              "minimum": 0
            }
          },
          "required": [
            "child"
          ]
        }
      ]
    },
    "StringOrNum": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "integer",
          "format": "uint64",
          "minimum": 0
        }
      ]
    },
    "StyleConfig": {
      "description": "Style-related configs.",
      "type": "object",
      "properties": {
        "battery": {
          "description": "Styling for the battery widget.",
          "anyOf": [
            {
              "$ref": "#/$defs/BatteryStyle"
            },
            {
              "type": "null"
            }
          ]
        },
        "cpu": {
          "description": "Styling for the CPU widget.",
          "anyOf": [
            {
              "$ref": "#/$defs/CpuStyle"
            },
            {
              "type": "null"
            }
          ]
        },
        "graphs": {
          "description": "Styling for graph widgets.",
          "anyOf": [
            {
              "$ref": "#/$defs/GraphStyle"
            },
            {
              "type": "null"
            }
          ]
        },
        "memory": {
          "description": "Styling for the memory widget.",
          "anyOf": [
            {
              "$ref": "#/$defs/MemoryStyle"
            },
            {
              "type": "null"
            }
          ]
        },
        "network": {
          "description": "Styling for the network widget.",
          "anyOf": [
            {
              "$ref": "#/$defs/NetworkStyle"
            },
            {
              "type": "null"
            }
          ]
        },
        "tables": {
          "description": "Styling for table widgets.",
          "anyOf": [
            {
              "$ref": "#/$defs/TableStyle"
            },
            {
              "type": "null"
            }
          ]
        },
        "theme": {
          "description": "A built-in theme.\n\nIf this is and a custom colour are both set, in the config file,\nthe custom colour scheme will be prioritized first. If a theme\nis set in the command-line args, however, it will always be\nprioritized first.",
          "type": [
            "string",
            "null"
          ]
        },
        "widgets": {
          "description": "Styling for general widgets.",
          "anyOf": [
            {
              "$ref": "#/$defs/WidgetStyle"
            },
            {
              "type": "null"
            }
          ]
        }
      }
    },
    "TableStyle": {
      "description": "General styling for table widgets.",
      "type": "object",
      "properties": {
        "headers": {
          "description": "Text styling for table headers.",
          "anyOf": [
            {
              "$ref": "#/$defs/TextStyleConfig"
            },
            {
              "type": "null"
            }
          ]
        }
      }
    },
    "TempConfig": {
      "description": "Temperature configuration.",
      "type": "object",
      "properties": {
        "default_sort": {
          "description": "The default sort column.",
          "anyOf": [
            {
              "$ref": "#/$defs/TempWidgetColumn"
            },
            {
              "type": "null"
            }
          ]
        },
        "sensor_filter": {
          "description": "A filter over the sensor names.",
          "anyOf": [
            {
              "$ref": "#/$defs/IgnoreList"
            },
            {
              "type": "null"
            }
          ]
        }
      }
    },
    "TempWidgetColumn": {
      "type": "string",
      "enum": [
        "Sensor",
        "Temp",
        "Temperature",
        "sensor",
        "temp",
        "temperature"
      ]
    },
    "TextStyleConfig": {
      "description": "A style for text.",
      "anyOf": [
        {
          "$ref": "#/$defs/ColorStr"
        },
        {
          "type": "object",
          "properties": {
            "bg_color": {
              "description": "A built-in ANSI colour, RGB hex, or RGB colour code.",
              "anyOf": [
                {
                  "$ref": "#/$defs/ColorStr"
                },
                {
                  "type": "null"
                }
              ]
            },
            "bold": {
              "description": "Whether to make this text bolded or not. If not set,\nwill default to built-in defaults.",
              "type": [
                "boolean",
                "null"
              ]
            },
            "color": {
              "description": "A built-in ANSI colour, RGB hex, or RGB colour code.",
              "anyOf": [
                {
                  "$ref": "#/$defs/ColorStr"
                },
                {
                  "type": "null"
                }
              ]
            },
            "italics": {
              "description": "Whether to make this text italicized or not. If not set,\nwill default to built-in defaults.",
              "type": [
                "boolean",
                "null"
              ]
            }
          }
        }
      ]
    },
    "WidgetBorderType": {
      "type": "string",
      "enum": [
        "Default",
        "Rounded",
        "Double",
        "Thick"
      ]
    },
    "WidgetStyle": {
      "description": "General styling for generic widgets.",
      "type": "object",
      "properties": {
        "border_color": {
          "description": "The colour of the widgets' borders.",
          "anyOf": [
            {
              "$ref": "#/$defs/ColorStr"
            },
            {
              "type": "null"
            }
          ]
        },
        "disabled_text": {
          "description": "Text styling for text when representing something that is disabled.",
          "anyOf": [
            {
              "$ref": "#/$defs/TextStyleConfig"
            },
            {
              "type": "null"
            }
          ]
        },
        "selected_border_color": {
          "description": "The colour of a widget's borders when the widget is selected.",
          "anyOf": [
            {
              "$ref": "#/$defs/ColorStr"
            },
            {
              "type": "null"
            }
          ]
        },
        "selected_text": {
          "description": "Text styling for text when representing something that is selected.",
          "anyOf": [
            {
              "$ref": "#/$defs/TextStyleConfig"
            },
            {
              "type": "null"
            }
          ]
        },
        "text": {
          "description": "Text styling for text in general.",
          "anyOf": [
            {
              "$ref": "#/$defs/TextStyleConfig"
            },
            {
              "type": "null"
            }
          ]
        },
        "thread_text": {
          "description": "Text styling for text when representing process threads. Only usable\non Linux at the moment.",
          "anyOf": [
            {
              "$ref": "#/$defs/TextStyleConfig"
            },
            {
              "type": "null"
            }
          ]
        },
        "widget_border_type": {
          "description": "Widget borders type.",
          "anyOf": [
            {
              "$ref": "#/$defs/WidgetBorderType"
            },
            {
              "type": "null"
            }
          ]
        },
        "widget_title": {
          "description": "Text styling for a widget's title.",
          "anyOf": [
            {
              "$ref": "#/$defs/TextStyleConfig"
            },
            {
              "type": "null"
            }
          ]
        }
      }
    },
    "row": {
      "description": "Represents a row. This has a length of some sort (optional) and a vector\nof children.",
      "type": "object",
      "properties": {
        "child": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "$ref": "#/$defs/RowChildren"
          }
        },
        "ratio": {
          "type": [
            "integer",
            "null"
          ],
          "format": "uint16",
          "maximum": 65535,
          "minimum": 0
        }
      }
    }
  }
}
