From 6f3b62851eba9c27da4dcfc9f4edc8b9531f2d30 Mon Sep 17 00:00:00 2001 From: Clement Tsang <34804052+ClementTsang@users.noreply.github.com> Date: Sun, 26 Jul 2026 23:18:26 -0400 Subject: [PATCH] uptick: 0.14.7 (#2178) --- .github/ISSUE_TEMPLATE/bug_report.yml | 2 +- .github/ISSUE_TEMPLATE/packaging.yml | 2 +- CHANGELOG.md | 3 +- Cargo.lock | 2 +- Cargo.toml | 2 +- README.md | 24 +- schema/v0.14.7/bottom.json | 1673 +++++++++++++++++++++++++ scripts/schema/generate.sh | 1 + tools/schema_gen/Cargo.lock | 2 +- 9 files changed, 1693 insertions(+), 18 deletions(-) create mode 100644 schema/v0.14.7/bottom.json diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 0d82a295..43353a00 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -105,7 +105,7 @@ body: see if [the latest version](https://github.com/ClementTsang/bottom/releases/latest) solves the issue first. - placeholder: 0.14.6 + placeholder: 0.14.7 - type: textarea id: install diff --git a/.github/ISSUE_TEMPLATE/packaging.yml b/.github/ISSUE_TEMPLATE/packaging.yml index 3e502891..f3ea4c08 100644 --- a/.github/ISSUE_TEMPLATE/packaging.yml +++ b/.github/ISSUE_TEMPLATE/packaging.yml @@ -104,4 +104,4 @@ body: see if [the latest version](https://github.com/ClementTsang/bottom/releases/latest) solves the issue first. - placeholder: 0.14.6 + placeholder: 0.14.7 diff --git a/CHANGELOG.md b/CHANGELOG.md index db03c8cc..f305979e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,7 +20,7 @@ That said, these are more guidelines rather than hard rules, though the project --- -## 0.14.7/0.15.0 - Unreleased +## 0.14.7 - 2026-07-27 ### Features @@ -29,6 +29,7 @@ That said, these are more guidelines rather than hard rules, though the project ### Other - [#2167](https://github.com/ClementTsang/bottom/pull/2167): Remove filedescriptor hack used to suppress false-positive stderr messages for older versions of FreeBSD. +- [#2177](https://github.com/ClementTsang/bottom/pull/2177): Fix `.deb` packaging CI job using a newer version of Ubuntu, breaking backwards compatibility. ## 0.14.6 - 2026-07-20 diff --git a/Cargo.lock b/Cargo.lock index 939f3ffa..5f2d76b0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -132,7 +132,7 @@ dependencies = [ [[package]] name = "bottom" -version = "0.14.6" +version = "0.14.7" dependencies = [ "anyhow", "assert_cmd", diff --git a/Cargo.toml b/Cargo.toml index 16cdbcba..2e62fef9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "bottom" -version = "0.14.6" +version = "0.14.7" 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/README.md b/README.md index 68d26bd0..1e0f2d54 100644 --- a/README.md +++ b/README.md @@ -166,8 +166,8 @@ Alternatively, you can use `cargo install` using the repo as the source. rustup update stable # Option 1 - Download an archive from releases and install -curl -LO https://github.com/ClementTsang/bottom/archive/0.14.6.tar.gz -tar -xzvf 0.14.6.tar.gz +curl -LO https://github.com/ClementTsang/bottom/archive/0.14.7.tar.gz +tar -xzvf 0.14.7.tar.gz cargo install --path . --locked # Option 2 - Manually clone the repo and install @@ -219,20 +219,20 @@ Some examples of installing it this way: ```bash # x86-64 -curl -LO https://github.com/ClementTsang/bottom/releases/download/0.14.6/bottom_0.14.6-1_amd64.deb -sudo dpkg -i bottom_0.14.6-1_amd64.deb +curl -LO https://github.com/ClementTsang/bottom/releases/download/0.14.7/bottom_0.14.7-1_amd64.deb +sudo dpkg -i bottom_0.14.7-1_amd64.deb # ARM64 -curl -LO https://github.com/ClementTsang/bottom/releases/download/0.14.6/bottom_0.14.6-1_arm64.deb -sudo dpkg -i bottom_0.14.6-1_arm64.deb +curl -LO https://github.com/ClementTsang/bottom/releases/download/0.14.7/bottom_0.14.7-1_arm64.deb +sudo dpkg -i bottom_0.14.7-1_arm64.deb # ARM -curl -LO https://github.com/ClementTsang/bottom/releases/download/0.14.6/bottom_0.14.6-1_armhf.deb -sudo dpkg -i bottom_0.14.6-1_armhf.deb +curl -LO https://github.com/ClementTsang/bottom/releases/download/0.14.7/bottom_0.14.7-1_armhf.deb +sudo dpkg -i bottom_0.14.7-1_armhf.deb # musl-based -curl -LO https://github.com/ClementTsang/bottom/releases/download/0.14.6/bottom-musl_0.14.6-1_amd64.deb -sudo dpkg -i bottom-musl_0.14.6-1_amd64.deb +curl -LO https://github.com/ClementTsang/bottom/releases/download/0.14.7/bottom-musl_0.14.7-1_amd64.deb +sudo dpkg -i bottom-musl_0.14.7-1_amd64.deb ``` ### Exherbo Linux @@ -274,8 +274,8 @@ sudo dnf install bottom For example: ```bash -curl -LO https://github.com/ClementTsang/bottom/releases/download/0.14.6/bottom-0.14.6-1.x86_64.rpm -sudo dnf install ./bottom-0.14.6-1.x86_64.rpm +curl -LO https://github.com/ClementTsang/bottom/releases/download/0.14.7/bottom-0.14.7-1.x86_64.rpm +sudo dnf install ./bottom-0.14.7-1.x86_64.rpm ``` ### Gentoo diff --git a/schema/v0.14.7/bottom.json b/schema/v0.14.7/bottom.json new file mode 100644 index 00000000..1b780592 --- /dev/null +++ b/schema/v0.14.7/bottom.json @@ -0,0 +1,1673 @@ +{ + "$id": "https://github.com/ClementTsang/bottom/blob/main/schema/0.14.7/bottom.json", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "Schema for bottom's config file (v0.14.7)", + "description": "https://bottom.pages.dev/0.14.7/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" + } + ] + }, + "sort_order": { + "description": "The default sort order. Defaults to ascending.", + "$ref": "#/$defs/SortOrder" + } + } + }, + "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" + ] + }, + "sort_order": { + "description": "The default sort order. If not set, defaults to column-specific defaults\n(e.g. CPU usage is descending, process names are ascending).", + "anyOf": [ + { + "$ref": "#/$defs/SortOrder" + }, + { + "type": "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" + ] + } + ] + }, + "SortOrder": { + "description": "Denotes the sort order.", + "type": "string", + "enum": [ + "Ascending", + "Descending" + ] + }, + "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" + } + ] + }, + "sort_order": { + "description": "The default sort order. Defaults to ascending.", + "$ref": "#/$defs/SortOrder" + } + } + }, + "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 + } + } + } + } +} diff --git a/scripts/schema/generate.sh b/scripts/schema/generate.sh index 4b368a3d..2f15e16b 100755 --- a/scripts/schema/generate.sh +++ b/scripts/schema/generate.sh @@ -5,4 +5,5 @@ set -e cd "$(dirname "$0")"; cd ../.. +mkdir -p schema/v$1 cargo run --manifest-path tools/schema_gen/Cargo.toml -- $1 > schema/v$1/bottom.json diff --git a/tools/schema_gen/Cargo.lock b/tools/schema_gen/Cargo.lock index eccb312c..f757c1d6 100644 --- a/tools/schema_gen/Cargo.lock +++ b/tools/schema_gen/Cargo.lock @@ -111,7 +111,7 @@ dependencies = [ [[package]] name = "bottom" -version = "0.14.6" +version = "0.14.7" dependencies = [ "anyhow", "clap",