{ "$id": "https://github.com/ClementTsang/bottom/blob/main/schema/nightly/bottom.json", "$schema": "https://json-schema.org/draft/2020-12/schema", "title": "Schema for bottom's config file (nightly)", "description": "https://bottom.pages.dev/nightly/configuration/config-file/", "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" } ] }, "temperature_graph": { "anyOf": [ { "$ref": "#/$defs/TempGraphConfig" }, { "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\n50%.", "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" }, "show_decimal": { "description": "Whether to show a decimal place for CPU usage values.", "type": [ "boolean", "null" ] } } }, "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_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_table_scroll_bar": { "type": [ "boolean", "null" ] }, "show_table_scroll_position": { "type": [ "boolean", "null" ] }, "table_gap": { "$ref": "#/$defs/TableGap", "default": "space" }, "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\nWindows.", "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": "Displays packet rate and average packet size info.", "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 fields.", "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" } ] }, "temp_graph": { "description": "Styling for the temperature graph widget.", "anyOf": [ { "$ref": "#/$defs/TempGraphStyle" }, { "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" } ] } } }, "TableGap": { "type": "string", "enum": [ "none", "space", "line" ] }, "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" } ] } } }, "TempGraphConfig": { "description": "Temperature graph configuration.", "type": "object", "properties": { "legend_position": { "description": "The location of the graph's legend.", "type": [ "string", "null" ], "default": null }, "max_temp": { "description": "An upper temperature value for the graph; entries higher than this will be hidden. If not set,\nthere is no limit.\n\nIs in the unit of `temperature_type`.", "type": [ "number", "null" ], "format": "double", "default": null }, "sensor_filter": { "description": "A filter over the sensor names.", "anyOf": [ { "$ref": "#/$defs/IgnoreList" }, { "type": "null" } ] } } }, "TempGraphStyle": { "description": "Styling specific to the temperature graph widget.", "type": "object", "properties": { "temp_graph_color_styles": { "description": "Colour of each temperature sensor's graph line. Read in order.", "type": [ "array", "null" ], "items": { "$ref": "#/$defs/ColorStr" } } } }, "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": { "bg_color": { "description": "Background color for widgets.", "anyOf": [ { "$ref": "#/$defs/ColorStr" }, { "type": "null" } ] }, "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 } } } } }