diff --git a/CHANGELOG.md b/CHANGELOG.md index daa4d57a..c223f043 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,16 +20,19 @@ That said, these are more guidelines rather than hard rules, though the project --- -## 0.14.0 - Unreleased +## 0.14.0 - 2026-06-20 ### Bug Fixes +- [#2093](https://github.com/ClementTsang/bottom/pull/2093): Fix memory collection using cgroup v1 sentinel max as total. + ### Features - [#2055](https://github.com/ClementTsang/bottom/pull/2055): Add UFS disk I/O counters for FreeBSD. ### Other +- [#2052](https://github.com/ClementTsang/bottom/pull/2052): Update minimum Rust version to 1.95.0. - [#2055](https://github.com/ClementTsang/bottom/pull/2055): Use sysinfo for disk I/O for FreeBSD. ## [0.13.0] - 2026-06-19 diff --git a/Cargo.lock b/Cargo.lock index eaae5de4..ce602c39 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -156,7 +156,7 @@ dependencies = [ [[package]] name = "bottom" -version = "0.13.0" +version = "0.14.0" dependencies = [ "anyhow", "assert_cmd", diff --git a/Cargo.toml b/Cargo.toml index 923c39a1..c88bc7c9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "bottom" -version = "0.13.0" +version = "0.14.0" repository = "https://github.com/ClementTsang/bottom" license = "MIT" description = "A customizable cross-platform graphical process/system monitor for the terminal. Supports Linux, macOS, and Windows." diff --git a/schema/v0.14.0/bottom.json b/schema/v0.14.0/bottom.json new file mode 100644 index 00000000..3b0d9321 --- /dev/null +++ b/schema/v0.14.0/bottom.json @@ -0,0 +1,1646 @@ +{ + "$id": "https://github.com/ClementTsang/bottom/blob/main/schema/0.14.0/bottom.json", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "Schema for bottom's config file (v0.14.0)", + "description": "https://bottom.pages.dev/0.14.0/configuration/config-file/", + "type": "object", + "properties": { + "cpu": { + "anyOf": [ + { + "$ref": "#/$defs/CpuConfig" + }, + { + "type": "null" + } + ] + }, + "disk": { + "anyOf": [ + { + "$ref": "#/$defs/DiskConfig" + }, + { + "type": "null" + } + ] + }, + "disk_io_graph": { + "anyOf": [ + { + "$ref": "#/$defs/DiskIoGraphConfig" + }, + { + "type": "null" + } + ] + }, + "flags": { + "anyOf": [ + { + "$ref": "#/$defs/GeneralConfig" + }, + { + "type": "null" + } + ] + }, + "memory_graph": { + "anyOf": [ + { + "$ref": "#/$defs/MemoryGraphConfig" + }, + { + "type": "null" + } + ] + }, + "network_graph": { + "anyOf": [ + { + "$ref": "#/$defs/NetworkGraphConfig" + }, + { + "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_colour": { + "description": "The colour of the battery widget bar when the battery is over 50%.", + "anyOf": [ + { + "$ref": "#/$defs/ColourStr" + }, + { + "type": "null" + } + ] + }, + "low_battery_colour": { + "description": "The colour of the battery widget bar when the battery is under 10%.", + "anyOf": [ + { + "$ref": "#/$defs/ColourStr" + }, + { + "type": "null" + } + ] + }, + "medium_battery_colour": { + "description": "The colour of the battery widget bar when the battery between 10% to\n50%.", + "anyOf": [ + { + "$ref": "#/$defs/ColourStr" + }, + { + "type": "null" + } + ] + } + } + }, + "ColourStr": { + "type": "string" + }, + "CpuConfig": { + "description": "CPU column settings.", + "type": "object", + "properties": { + "basic_average_cpu_row": { + "description": "Whether to give the average CPU entry a dedicated row in basic mode.", + "type": [ + "boolean", + "null" + ] + }, + "default": { + "description": "The default selected entry of the CPU widget.", + "$ref": "#/$defs/CpuDefault" + }, + "hide_avg_cpu": { + "description": "Whether to hide the average CPU entry.", + "type": [ + "boolean", + "null" + ] + }, + "left_legend": { + "description": "Whether to put the CPU chart legend on the left side.", + "type": [ + "boolean", + "null" + ] + }, + "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_colour": { + "description": "The colour of the \"All\" CPU label.", + "anyOf": [ + { + "$ref": "#/$defs/ColourStr" + }, + { + "type": "null" + } + ] + }, + "avg_entry_colour": { + "description": "The colour of the average CPU label and graph line.", + "anyOf": [ + { + "$ref": "#/$defs/ColourStr" + }, + { + "type": "null" + } + ] + }, + "cpu_core_colours": { + "description": "Colour of each CPU threads' label and graph line. Read in order.", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/$defs/ColourStr" + } + } + } + }, + "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" + } + ] + }, + "include_unmounted": { + "description": "Whether to include block devices that aren't currently mounted (currently Linux only). Defaults to false.", + "type": [ + "boolean", + "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" + } + ] + } + } + }, + "DiskGraphLegend": { + "description": "Whether the disk graph legend labels use device names or mount points.", + "oneOf": [ + { + "description": "Label entries by kernel device name (e.g. `sda`, `nvme0n1`).", + "type": "string", + "const": "disk" + }, + { + "description": "Label entries by mount point (e.g. `/`, `/home`).", + "type": "string", + "const": "mount" + } + ] + }, + "DiskIoGraphConfig": { + "description": "Disk I/O graph configuration.", + "type": "object", + "properties": { + "include_unmounted": { + "description": "Whether to include block devices that aren't currently mounted (currently Linux only). Defaults to false.", + "type": [ + "boolean", + "null" + ] + }, + "legend": { + "description": "Whether to label legend entries by device name or mount point. Defaults to disk name.", + "anyOf": [ + { + "$ref": "#/$defs/DiskGraphLegend" + }, + { + "type": "null" + } + ] + }, + "legend_position": { + "description": "Where to position the legend within the widget.", + "type": [ + "string", + "null" + ] + }, + "name_filter": { + "description": "An optional list of device names to include or exclude.", + "anyOf": [ + { + "$ref": "#/$defs/IgnoreList" + }, + { + "type": "null" + } + ] + }, + "show_read": { + "description": "Whether to show the read rate line. Defaults to true.", + "type": [ + "boolean", + "null" + ] + }, + "show_write": { + "description": "Whether to show the write rate line. Defaults to true.", + "type": [ + "boolean", + "null" + ] + }, + "use_log": { + "description": "Whether to use a logarithmic scale on the y-axis. Defaults to false.", + "type": [ + "boolean", + "null" + ] + } + } + }, + "DiskIoGraphStyle": { + "description": "Styling specific to the disk I/O graph widget.", + "type": "object", + "properties": { + "read_colours": { + "description": "Colour of each disk's read rate graph line. Read in order.", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/$defs/ColourStr" + } + }, + "write_colours": { + "description": "Colour of each disk's write rate graph line. Read in order.", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/$defs/ColourStr" + } + } + } + }, + "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_colour": { + "description": "The general colour of the parts of the graph.", + "anyOf": [ + { + "$ref": "#/$defs/ColourStr" + }, + { + "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" + ] + }, + "MemoryGraphConfig": { + "description": "Memory-related configuration file options.", + "type": "object", + "properties": { + "cache_memory": { + "description": "Whether to collect and display cache and buffer memory. Not available on Windows.", + "type": [ + "boolean", + "null" + ] + }, + "free_arc": { + "description": "Whether to subtract ARC that can be freed from memory usage.", + "type": [ + "boolean", + "null" + ] + }, + "legend_position": { + "description": "Where to place the legend for the memory chart widget.", + "type": [ + "string", + "null" + ] + }, + "short_gpu_names": { + "description": "Whether to use short GPU names in the memory widget.", + "type": [ + "boolean", + "null" + ] + } + } + }, + "MemoryStyle": { + "description": "Styling specific to the memory widget.", + "type": "object", + "properties": { + "arc_colour": { + "description": "The colour of the ARC label and graph line.", + "anyOf": [ + { + "$ref": "#/$defs/ColourStr" + }, + { + "type": "null" + } + ] + }, + "cache_colour": { + "description": "The colour of the cache label and graph line. Does not do anything on\nWindows.", + "anyOf": [ + { + "$ref": "#/$defs/ColourStr" + }, + { + "type": "null" + } + ] + }, + "gpu_colours": { + "description": "Colour of each GPU's memory label and graph line. Read in order.", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/$defs/ColourStr" + } + }, + "ram_colour": { + "description": "The colour of the RAM label and graph line.", + "anyOf": [ + { + "$ref": "#/$defs/ColourStr" + }, + { + "type": "null" + } + ] + }, + "swap_colour": { + "description": "The colour of the swap label and graph line.", + "anyOf": [ + { + "$ref": "#/$defs/ColourStr" + }, + { + "type": "null" + } + ] + } + } + }, + "NetworkGraphConfig": { + "description": "Network configuration.", + "type": "object", + "properties": { + "interface_filter": { + "description": "A filter over the network interface names.", + "anyOf": [ + { + "$ref": "#/$defs/IgnoreList" + }, + { + "type": "null" + } + ] + }, + "legend_position": { + "description": "Where to place the legend for the network chart widget.", + "type": [ + "string", + "null" + ] + }, + "show_packets": { + "description": "Displays packet rate and average packet size info.", + "type": [ + "boolean", + "null" + ] + }, + "use_binary_prefix": { + "description": "Displays the network widget with a binary prefix (e.g. kibibits) rather than a decimal\nprefix (e.g. kilobits). Defaults to decimal prefixes.", + "type": [ + "boolean", + "null" + ] + }, + "use_bytes": { + "description": "Displays the network widget using bytes. Defaults to bits.", + "type": [ + "boolean", + "null" + ] + }, + "use_log": { + "description": "Displays the network widget with a log scale. Defaults to a non-log scale.", + "type": [ + "boolean", + "null" + ] + } + } + }, + "NetworkStyle": { + "description": "Styling specific to the network widget.", + "type": "object", + "properties": { + "rx_colour": { + "description": "The colour of the RX (download) label and graph line.", + "anyOf": [ + { + "$ref": "#/$defs/ColourStr" + }, + { + "type": "null" + } + ] + }, + "rx_total_colour": { + "description": "The colour of the total RX (download) label in basic mode.", + "anyOf": [ + { + "$ref": "#/$defs/ColourStr" + }, + { + "type": "null" + } + ] + }, + "tx_colour": { + "description": "The colour of the TX (upload) label and graph line.", + "anyOf": [ + { + "$ref": "#/$defs/ColourStr" + }, + { + "type": "null" + } + ] + }, + "tx_total_colour": { + "description": "The colour of the total TX (upload) label in basic mode.", + "anyOf": [ + { + "$ref": "#/$defs/ColourStr" + }, + { + "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": { + "case_sensitive": { + "description": "Enables case sensitivity by default when searching.", + "type": [ + "boolean", + "null" + ] + }, + "columns": { + "description": "A list of process widget columns.", + "type": "array", + "items": { + "$ref": "#/$defs/ProcColumn" + } + }, + "current_usage": { + "description": "Calculates process CPU usage as a percentage of current usage rather than total usage.", + "type": [ + "boolean", + "null" + ] + }, + "default_grouped": { + "description": "Groups processes with the same name by default. No effect if `--tree` is set.", + "type": [ + "boolean", + "null" + ] + }, + "default_memory_value": { + "description": "Defaults to showing process memory usage by value.", + "type": [ + "boolean", + "null" + ] + }, + "default_sort": { + "description": "The default sort column.", + "anyOf": [ + { + "$ref": "#/$defs/ProcColumn" + }, + { + "type": "null" + } + ] + }, + "default_tree": { + "description": "Makes the process widget use tree mode by default.", + "type": [ + "boolean", + "null" + ] + }, + "disable_advanced_kill": { + "description": "Disable the advanced kill dialog and just show the basic one with no options.", + "type": [ + "boolean", + "null" + ] + }, + "get_threads": { + "description": "Whether to get process child threads.", + "type": [ + "boolean", + "null" + ] + }, + "hide_k_threads": { + "description": "Hide kernel threads from being shown. Linux only.", + "type": [ + "boolean", + "null" + ] + }, + "process_command": { + "description": "Shows the full command name instead of the process name by default.", + "type": [ + "boolean", + "null" + ] + }, + "regex": { + "description": "Enables regex by default while searching.", + "type": [ + "boolean", + "null" + ] + }, + "tree_collapse": { + "description": "Collapse the process tree by default when tree mode is set.", + "type": [ + "boolean", + "null" + ] + }, + "unnormalized_cpu": { + "description": "Show process CPU% usage without averaging over the number of CPU cores.", + "type": [ + "boolean", + "null" + ] + }, + "whole_word": { + "description": "Enables whole-word matching by default while searching.", + "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" + } + ] + }, + "disk_io_graph": { + "description": "Styling for the disk I/O graph widget.", + "anyOf": [ + { + "$ref": "#/$defs/DiskIoGraphStyle" + }, + { + "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 configured temperature unit.", + "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_colour_styles": { + "description": "Colour of each temperature sensor's graph line. Read in order.", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/$defs/ColourStr" + } + } + } + }, + "TempWidgetColumn": { + "type": "string", + "enum": [ + "Sensor", + "Temp", + "Temperature", + "sensor", + "temp", + "temperature" + ] + }, + "TextStyleConfig": { + "description": "A style for text.", + "anyOf": [ + { + "$ref": "#/$defs/ColourStr" + }, + { + "type": "object", + "properties": { + "bg_colour": { + "description": "A built-in ANSI colour, RGB hex, or RGB colour code.", + "anyOf": [ + { + "$ref": "#/$defs/ColourStr" + }, + { + "type": "null" + } + ] + }, + "bold": { + "description": "Whether to make this text bolded or not. If not set,\nwill default to built-in defaults.", + "type": [ + "boolean", + "null" + ] + }, + "colour": { + "description": "A built-in ANSI colour, RGB hex, or RGB colour code.", + "anyOf": [ + { + "$ref": "#/$defs/ColourStr" + }, + { + "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_colour": { + "description": "Background colour for widgets.", + "anyOf": [ + { + "$ref": "#/$defs/ColourStr" + }, + { + "type": "null" + } + ] + }, + "border_colour": { + "description": "The colour of the widgets' borders.", + "anyOf": [ + { + "$ref": "#/$defs/ColourStr" + }, + { + "type": "null" + } + ] + }, + "disabled_text": { + "description": "Text styling for text when representing something that is disabled.", + "anyOf": [ + { + "$ref": "#/$defs/TextStyleConfig" + }, + { + "type": "null" + } + ] + }, + "selected_border_colour": { + "description": "The colour of a widget's borders when the widget is selected.", + "anyOf": [ + { + "$ref": "#/$defs/ColourStr" + }, + { + "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 + } + } + } + } +}