diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..6558add1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,37 @@ +# Generated by Cargo +# will have compiled files and executables +/target/ + +# These are backup files generated by rustfmt +**/*.rs.bk + +# Logging +*.log + +# Flamegraph stuff +rust-unmangle +*.svg +*.data +*.data.old + +# IntelliJ +.idea/ + +# Heaptrack files +*.zst + +# For testing +sample_configs/testing.toml + +# Wix +/wix/ + +# Cargo-deny +deny.toml + +# vscode +.vscode + +# mkdocs +site/ +docs/site \ No newline at end of file diff --git a/0.6.1/assets/screenshots/troubleshooting/weird_braille.webp b/0.6.1/assets/screenshots/troubleshooting/weird_braille.webp index cb36d39c..902b73f6 100644 Binary files a/0.6.1/assets/screenshots/troubleshooting/weird_braille.webp and b/0.6.1/assets/screenshots/troubleshooting/weird_braille.webp differ diff --git a/0.6.2/assets/screenshots/troubleshooting/weird_braille.webp b/0.6.2/assets/screenshots/troubleshooting/weird_braille.webp index cb36d39c..902b73f6 100644 Binary files a/0.6.2/assets/screenshots/troubleshooting/weird_braille.webp and b/0.6.2/assets/screenshots/troubleshooting/weird_braille.webp differ diff --git a/0.6.3/assets/screenshots/troubleshooting/weird_braille.webp b/0.6.3/assets/screenshots/troubleshooting/weird_braille.webp index cb36d39c..902b73f6 100644 Binary files a/0.6.3/assets/screenshots/troubleshooting/weird_braille.webp and b/0.6.3/assets/screenshots/troubleshooting/weird_braille.webp differ diff --git a/0.6.4/assets/screenshots/troubleshooting/weird_braille.webp b/0.6.4/assets/screenshots/troubleshooting/weird_braille.webp index cb36d39c..902b73f6 100644 Binary files a/0.6.4/assets/screenshots/troubleshooting/weird_braille.webp and b/0.6.4/assets/screenshots/troubleshooting/weird_braille.webp differ diff --git a/0.6.5/assets/screenshots/troubleshooting/weird_braille.webp b/0.6.5/assets/screenshots/troubleshooting/weird_braille.webp index cb36d39c..902b73f6 100644 Binary files a/0.6.5/assets/screenshots/troubleshooting/weird_braille.webp and b/0.6.5/assets/screenshots/troubleshooting/weird_braille.webp differ diff --git a/0.6.6/assets/screenshots/troubleshooting/weird_braille.webp b/0.6.6/assets/screenshots/troubleshooting/weird_braille.webp index cb36d39c..902b73f6 100644 Binary files a/0.6.6/assets/screenshots/troubleshooting/weird_braille.webp and b/0.6.6/assets/screenshots/troubleshooting/weird_braille.webp differ diff --git a/0.6.7/assets/screenshots/troubleshooting/weird_braille.webp b/0.6.7/assets/screenshots/troubleshooting/weird_braille.webp index cb36d39c..902b73f6 100644 Binary files a/0.6.7/assets/screenshots/troubleshooting/weird_braille.webp and b/0.6.7/assets/screenshots/troubleshooting/weird_braille.webp differ diff --git a/0.6.8/assets/screenshots/troubleshooting/weird_braille.webp b/0.6.8/assets/screenshots/troubleshooting/weird_braille.webp index cb36d39c..902b73f6 100644 Binary files a/0.6.8/assets/screenshots/troubleshooting/weird_braille.webp and b/0.6.8/assets/screenshots/troubleshooting/weird_braille.webp differ diff --git a/nightly/assets/screenshots/troubleshooting/weird_braille.webp b/nightly/assets/screenshots/troubleshooting/weird_braille.webp deleted file mode 100644 index cb36d39c..00000000 Binary files a/nightly/assets/screenshots/troubleshooting/weird_braille.webp and /dev/null differ diff --git a/nightly/search/search_index.json b/nightly/search/search_index.json index ae38ecb4..d979143b 100644 --- a/nightly/search/search_index.json +++ b/nightly/search/search_index.json @@ -1 +1 @@ -{"config":{"indexing":"full","lang":["en"],"min_search_length":3,"prebuild_index":false,"separator":"[\\s\\-]+"},"docs":[{"location":"","text":"bottom This site serves as extended documentation for bottom alongside the README.md . Warning Some areas of this site are still in progress and may be missing details. Feel free to suggest/contribute changes! Installation Tip It is a good idea to first check out the Support page to see if your system is officially supported! Tip If you're facing some issues during/after installation, check out the Troubleshooting page for some common problems and solutions. To install bottom, refer to the installation section of the README.md , which contains a list of all the installation methods. Contribution New contributors are always welcome! See the contribution section for how to contribute to bottom, whether it be filing issues, writing documentation, creating pull requests, etc.","title":"Home"},{"location":"#bottom","text":"This site serves as extended documentation for bottom alongside the README.md . Warning Some areas of this site are still in progress and may be missing details. Feel free to suggest/contribute changes!","title":"bottom"},{"location":"#installation","text":"Tip It is a good idea to first check out the Support page to see if your system is officially supported! Tip If you're facing some issues during/after installation, check out the Troubleshooting page for some common problems and solutions. To install bottom, refer to the installation section of the README.md , which contains a list of all the installation methods.","title":"Installation"},{"location":"#contribution","text":"New contributors are always welcome! See the contribution section for how to contribute to bottom, whether it be filing issues, writing documentation, creating pull requests, etc.","title":"Contribution"},{"location":"troubleshooting/","text":"Troubleshooting The graph points look broken/strange It's possible that your graphs won't look great out of the box due to the reliance on braille fonts. One example of this is seeing a bunch of missing font characters, caused when the terminal isn't configured properly to render braille fonts. Powershell shown missing braille fonts Another example is when braille is rendered as a block of dots, with the non-coloured dots also appearing. This may look strange for some users, and it is also caused by misconfiguration or missing fonts. Braille fonts rendering as a block of dots One alternative is to use the --dot_marker option to render graph charts using dots instead of the braille characters, which generally seems better supported out of the box, at the expense of looking less intricate: Example using btm --dot_marker Another (better) alternative is to install a font that supports braille fonts, and configure your terminal to use it. For example, installing something like UBraille or Iosevka and ensuring your terminal uses it should work. Installing fonts for Windows Command Prompt/PowerShell Note: I would advise backing up your registry beforehand if you aren't sure what you are doing! Let's say you're installing Iosevka . The steps you can take are: Install the font itself. Open the registry editor, which you can do either by Win+R and opening regedit , or just opening it from the Start Menu. In the registry editor, go to HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Console\\TrueTypeFont Here, add a new String value , and set the Name to a bunch of 0's (e.g. 000 - make sure the name isn't already used), then set the Data to the font name (e.g. Iosevka ). The last entry is the new entry for Iosevka Then, open the Command Prompt/PowerShell, and right click on the top bar, and open Properties : From here, go to Font , and set the font to your new font (e.g. Iosevka ): Why can't I see all my temperature sensors on Windows? This is a known limitation , some sensors may require admin privileges to get sensor data. Why don't I see dual batteries on Windows reported separately? (e.g. Thinkpads) This is a known limitation which seems to be with how batteries are being detected on Windows. Why can't I see all my temperature sensors on WSL? This is a known limitation with WSL. Due to how it works, hosts may not expose their temperature sensors and therefore, temperature sensors might be missing. Why does WSL2 not match Task Manager? This is a known limitation with WSL2. Due to how WSL2 works, the two might not match up in terms of reported data. Why can't I see all my processes/process data on macOS? This is a known limitation , and you may have to run the program with elevated privileges to work around it - for example: sudo btm Please note that you should be certain that you trust any software you grant root privileges. There are measures taken to try to maximize the amount of information obtained without elevated privileges. For example, one can modify the instructions found on the htop wiki on how to run htop without sudo for bottom. However please understand the potential security risks before doing so! My configuration file isn't working If your configuration files aren't working, here are a few things to try: Check the formatting It may be handy to refer to the automatically generated config files or the sample configuration files . The config files also follow the TOML format. Also make sure your config options are under the right table - for example, to set your temperature type, you must set it under the [flags] table: [flags] temperature_type = \"f\" Meanwhile, if you want to set a custom color scheme, it would be under the [colors] table: [colors] table_header_color = \"LightBlue\" Check the configuration file location Make sure bottom is reading the right configuration file. By default, bottom looks for config files at these locations: OS Default Config Location macOS $HOME/Library/Application Support/bottom/bottom.toml ~/.config/bottom/bottom.toml $XDG_CONFIG_HOME/bottom/bottom.toml Linux ~/.config/bottom/bottom.toml $XDG_CONFIG_HOME/bottom/bottom.toml Windows C:\\Users\\\\AppData\\Roaming\\bottom\\bottom.toml If you want to use a config file in another location, use the --config or -C flags along with the path to the configuration file, like so: btm -C path_to_config My installation through snap has some widgets that are blank/show no data Make sure bottom is given the correct permissions in order to collect data. Snapcraft explains how to do so, but the TL;DR is: sudo snap connect bottom:mount-observe sudo snap connect bottom:hardware-observe sudo snap connect bottom:system-observe sudo snap connect bottom:process-control","title":"Troubleshooting"},{"location":"troubleshooting/#troubleshooting","text":"","title":"Troubleshooting"},{"location":"troubleshooting/#the-graph-points-look-brokenstrange","text":"It's possible that your graphs won't look great out of the box due to the reliance on braille fonts. One example of this is seeing a bunch of missing font characters, caused when the terminal isn't configured properly to render braille fonts. Powershell shown missing braille fonts Another example is when braille is rendered as a block of dots, with the non-coloured dots also appearing. This may look strange for some users, and it is also caused by misconfiguration or missing fonts. Braille fonts rendering as a block of dots One alternative is to use the --dot_marker option to render graph charts using dots instead of the braille characters, which generally seems better supported out of the box, at the expense of looking less intricate: Example using btm --dot_marker Another (better) alternative is to install a font that supports braille fonts, and configure your terminal to use it. For example, installing something like UBraille or Iosevka and ensuring your terminal uses it should work.","title":"The graph points look broken/strange"},{"location":"troubleshooting/#installing-fonts-for-windows-command-promptpowershell","text":"Note: I would advise backing up your registry beforehand if you aren't sure what you are doing! Let's say you're installing Iosevka . The steps you can take are: Install the font itself. Open the registry editor, which you can do either by Win+R and opening regedit , or just opening it from the Start Menu. In the registry editor, go to HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Console\\TrueTypeFont Here, add a new String value , and set the Name to a bunch of 0's (e.g. 000 - make sure the name isn't already used), then set the Data to the font name (e.g. Iosevka ). The last entry is the new entry for Iosevka Then, open the Command Prompt/PowerShell, and right click on the top bar, and open Properties : From here, go to Font , and set the font to your new font (e.g. Iosevka ):","title":"Installing fonts for Windows Command Prompt/PowerShell"},{"location":"troubleshooting/#why-cant-i-see-all-my-temperature-sensors-on-windows","text":"This is a known limitation , some sensors may require admin privileges to get sensor data.","title":"Why can't I see all my temperature sensors on Windows?"},{"location":"troubleshooting/#why-dont-i-see-dual-batteries-on-windows-reported-separately-eg-thinkpads","text":"This is a known limitation which seems to be with how batteries are being detected on Windows.","title":"Why don't I see dual batteries on Windows reported separately? (e.g. Thinkpads)"},{"location":"troubleshooting/#why-cant-i-see-all-my-temperature-sensors-on-wsl","text":"This is a known limitation with WSL. Due to how it works, hosts may not expose their temperature sensors and therefore, temperature sensors might be missing.","title":"Why can't I see all my temperature sensors on WSL?"},{"location":"troubleshooting/#why-does-wsl2-not-match-task-manager","text":"This is a known limitation with WSL2. Due to how WSL2 works, the two might not match up in terms of reported data.","title":"Why does WSL2 not match Task Manager?"},{"location":"troubleshooting/#why-cant-i-see-all-my-processesprocess-data-on-macos","text":"This is a known limitation , and you may have to run the program with elevated privileges to work around it - for example: sudo btm Please note that you should be certain that you trust any software you grant root privileges. There are measures taken to try to maximize the amount of information obtained without elevated privileges. For example, one can modify the instructions found on the htop wiki on how to run htop without sudo for bottom. However please understand the potential security risks before doing so!","title":"Why can't I see all my processes/process data on macOS?"},{"location":"troubleshooting/#my-configuration-file-isnt-working","text":"If your configuration files aren't working, here are a few things to try:","title":"My configuration file isn't working"},{"location":"troubleshooting/#check-the-formatting","text":"It may be handy to refer to the automatically generated config files or the sample configuration files . The config files also follow the TOML format. Also make sure your config options are under the right table - for example, to set your temperature type, you must set it under the [flags] table: [flags] temperature_type = \"f\" Meanwhile, if you want to set a custom color scheme, it would be under the [colors] table: [colors] table_header_color = \"LightBlue\"","title":"Check the formatting"},{"location":"troubleshooting/#check-the-configuration-file-location","text":"Make sure bottom is reading the right configuration file. By default, bottom looks for config files at these locations: OS Default Config Location macOS $HOME/Library/Application Support/bottom/bottom.toml ~/.config/bottom/bottom.toml $XDG_CONFIG_HOME/bottom/bottom.toml Linux ~/.config/bottom/bottom.toml $XDG_CONFIG_HOME/bottom/bottom.toml Windows C:\\Users\\\\AppData\\Roaming\\bottom\\bottom.toml If you want to use a config file in another location, use the --config or -C flags along with the path to the configuration file, like so: btm -C path_to_config","title":"Check the configuration file location"},{"location":"troubleshooting/#my-installation-through-snap-has-some-widgets-that-are-blankshow-no-data","text":"Make sure bottom is given the correct permissions in order to collect data. Snapcraft explains how to do so, but the TL;DR is: sudo snap connect bottom:mount-observe sudo snap connect bottom:hardware-observe sudo snap connect bottom:system-observe sudo snap connect bottom:process-control","title":"My installation through snap has some widgets that are blank/show no data"},{"location":"configuration/command-line-flags/","text":"Command-line Flags Warning This section is in progress, and is just copied from the old documentation. The following flags can be provided to bottom in the command line to change the behaviour of the program (run btm --help for more information on each flag): Flag Behaviour --autohide_time Temporarily shows the time scale in graphs. -b, --basic Hides graphs and uses a more basic look. --battery Shows the battery widget. -S, --case_sensitive Enables case sensitivity by default. -c, --celsius Sets the temperature type to Celsius. --color Use a color scheme, use --help for supported values. -C, --config Sets the location of the config file. -u, --current_usage Sets process CPU% to be based on current CPU%. -t, --default_time_value Default time value for graphs in ms. --default_widget_count Sets the n'th selected widget type as the default. --default_widget_type Sets the default widget type, use --help for more info. --disable_advanced_kill Hides advanced options to stop a process on Unix-like systems. --disable_click Disables mouse clicks. -m, --dot_marker Uses a dot marker for graphs. -f, --fahrenheit Sets the temperature type to Fahrenheit. -g, --group Groups processes with the same name by default. -h, --help Prints help information. Use --help for more info. -a, --hide_avg_cpu Hides the average CPU usage. --hide_table_gap Hides the spacing between table headers and entries. --hide_time Hides the time scale. -k, --kelvin Sets the temperature type to Kelvin. -l, --left_legend Puts the CPU chart legend to the left side. --mem_as_value Defaults to showing process memory usage by value. --network_use_binary_prefix Displays the network widget with binary prefixes. --network_use_bytes Displays the network widget using bytes. --network_use_log Displays the network widget with a log scale. --process_command Show processes as their commands by default. -r, --rate Sets a refresh rate in ms. -R, --regex Enables regex by default. --show_table_scroll_position Shows the scroll position tracker in table widgets. -d, --time_delta The amount in ms changed upon zooming. -T, --tree Defaults to showing the process widget in tree mode. --use_old_network_legend DEPRECATED - uses the older network legend. -V, --version Prints version information. -W, --whole_word Enables whole-word matching by default.","title":"Command-line Flags"},{"location":"configuration/command-line-flags/#command-line-flags","text":"Warning This section is in progress, and is just copied from the old documentation. The following flags can be provided to bottom in the command line to change the behaviour of the program (run btm --help for more information on each flag): Flag Behaviour --autohide_time Temporarily shows the time scale in graphs. -b, --basic Hides graphs and uses a more basic look. --battery Shows the battery widget. -S, --case_sensitive Enables case sensitivity by default. -c, --celsius Sets the temperature type to Celsius. --color Use a color scheme, use --help for supported values. -C, --config Sets the location of the config file. -u, --current_usage Sets process CPU% to be based on current CPU%. -t, --default_time_value Default time value for graphs in ms. --default_widget_count Sets the n'th selected widget type as the default. --default_widget_type Sets the default widget type, use --help for more info. --disable_advanced_kill Hides advanced options to stop a process on Unix-like systems. --disable_click Disables mouse clicks. -m, --dot_marker Uses a dot marker for graphs. -f, --fahrenheit Sets the temperature type to Fahrenheit. -g, --group Groups processes with the same name by default. -h, --help Prints help information. Use --help for more info. -a, --hide_avg_cpu Hides the average CPU usage. --hide_table_gap Hides the spacing between table headers and entries. --hide_time Hides the time scale. -k, --kelvin Sets the temperature type to Kelvin. -l, --left_legend Puts the CPU chart legend to the left side. --mem_as_value Defaults to showing process memory usage by value. --network_use_binary_prefix Displays the network widget with binary prefixes. --network_use_bytes Displays the network widget using bytes. --network_use_log Displays the network widget with a log scale. --process_command Show processes as their commands by default. -r, --rate Sets a refresh rate in ms. -R, --regex Enables regex by default. --show_table_scroll_position Shows the scroll position tracker in table widgets. -d, --time_delta The amount in ms changed upon zooming. -T, --tree Defaults to showing the process widget in tree mode. --use_old_network_legend DEPRECATED - uses the older network legend. -V, --version Prints version information. -W, --whole_word Enables whole-word matching by default.","title":"Command-line Flags"},{"location":"configuration/config-file/data-filtering/","text":"Data Filtering Warning This section is in progress, and is just copied from the old documentation. You can hide specific disks, temperature sensors, and networks by name in the config file via disk_filter and mount_filter , temp_filter , and net_filter respectively. Regex ( regex = true ), case-sensitivity ( case_sensitive = true ), and matching only if the entire word matches ( whole_word = true ) are supported, but are off by default. Filters default to denying entries that match and can be toggled by setting is_list_ignored to false in the config file. For example, here's the disk widget with no filter: The following in the config file would filter out some entries by disk name: [disk_filter] is_list_ignored = true list = [ \"/dev/sda\" ] regex = true case_sensitive = false whole_word = false If there are two potentially conflicting filters (i.e. when you are using both a disk and mount filter), the filter that explicitly allows an entry takes precedence over a filter that explicitly denies one. So for example, let's say we set a disk filter accepting anything with /dev/sda , but deny anything with /mnt/.* or / . So to do so, we write in the config file: [disk_filter] is_list_ignored = false list = [ \"/dev/sda\" ] regex = true case_sensitive = false whole_word = false [mount_filter] is_list_ignored = true list = [ \"/mnt/.*\" , \"/\" ] regex = true case_sensitive = false whole_word = true This gives us:","title":"Data Filtering"},{"location":"configuration/config-file/data-filtering/#data-filtering","text":"Warning This section is in progress, and is just copied from the old documentation. You can hide specific disks, temperature sensors, and networks by name in the config file via disk_filter and mount_filter , temp_filter , and net_filter respectively. Regex ( regex = true ), case-sensitivity ( case_sensitive = true ), and matching only if the entire word matches ( whole_word = true ) are supported, but are off by default. Filters default to denying entries that match and can be toggled by setting is_list_ignored to false in the config file. For example, here's the disk widget with no filter: The following in the config file would filter out some entries by disk name: [disk_filter] is_list_ignored = true list = [ \"/dev/sda\" ] regex = true case_sensitive = false whole_word = false If there are two potentially conflicting filters (i.e. when you are using both a disk and mount filter), the filter that explicitly allows an entry takes precedence over a filter that explicitly denies one. So for example, let's say we set a disk filter accepting anything with /dev/sda , but deny anything with /mnt/.* or / . So to do so, we write in the config file: [disk_filter] is_list_ignored = false list = [ \"/dev/sda\" ] regex = true case_sensitive = false whole_word = false [mount_filter] is_list_ignored = true list = [ \"/mnt/.*\" , \"/\" ] regex = true case_sensitive = false whole_word = true This gives us:","title":"Data Filtering"},{"location":"configuration/config-file/default-config/","text":"Default Config A default config file is automatically generated at the following locations that bottom checks by default: OS Default Config Location macOS $HOME/Library/Application Support/bottom/bottom.toml ~/.config/bottom/bottom.toml $XDG_CONFIG_HOME/bottom/bottom.toml Linux ~/.config/bottom/bottom.toml $XDG_CONFIG_HOME/bottom/bottom.toml Windows C:\\Users\\\\AppData\\Roaming\\bottom\\bottom.toml Furthermore, if a custom config path that does not exist is given (using -C or --config ), bottom will attempt to create a default config file at that location.","title":"Default Config"},{"location":"configuration/config-file/default-config/#default-config","text":"A default config file is automatically generated at the following locations that bottom checks by default: OS Default Config Location macOS $HOME/Library/Application Support/bottom/bottom.toml ~/.config/bottom/bottom.toml $XDG_CONFIG_HOME/bottom/bottom.toml Linux ~/.config/bottom/bottom.toml $XDG_CONFIG_HOME/bottom/bottom.toml Windows C:\\Users\\\\AppData\\Roaming\\bottom\\bottom.toml Furthermore, if a custom config path that does not exist is given (using -C or --config ), bottom will attempt to create a default config file at that location.","title":"Default Config"},{"location":"configuration/config-file/flags/","text":"Flags Warning This section is in progress, and is just copied from the old documentation. Most of the command line flags have config file equivalents to avoid having to type them out each time: Field Type Functionality hide_avg_cpu Boolean Hides the average CPU usage. dot_marker Boolean Uses a dot marker for graphs. left_legend Boolean Puts the CPU chart legend to the left side. current_usage Boolean Sets process CPU% to be based on current CPU%. group_processes Boolean Groups processes with the same name by default. case_sensitive Boolean Enables case sensitivity by default. whole_word Boolean Enables whole-word matching by default. regex Boolean Enables regex by default. basic Boolean Hides graphs and uses a more basic look. use_old_network_legend Boolean DEPRECATED - uses the older network legend. battery Boolean Shows the battery widget. rate Unsigned Int (represents milliseconds) Sets a refresh rate in ms. default_time_value Unsigned Int (represents milliseconds) Default time value for graphs in ms. time_delta Unsigned Int (represents milliseconds) The amount in ms changed upon zooming. hide_time Boolean Hides the time scale. temperature_type String (one of [\"k\", \"f\", \"c\", \"kelvin\", \"fahrenheit\", \"celsius\"]) Sets the temperature unit type. default_widget_type String (one of [\"cpu\", \"proc\", \"net\", \"temp\", \"mem\", \"disk\"], same as layout options) Sets the default widget type, use --help for more info. default_widget_count Unsigned Int (represents which default_widget_type ) Sets the n'th selected widget type as the default. disable_click Boolean Disables mouse clicks. color String (one of [\"default\", \"default-light\", \"gruvbox\", \"gruvbox-light\", \"nord\", \"nord-light\"]) Use a color scheme, use --help for supported values. mem_as_value Boolean Defaults to showing process memory usage by value. tree Boolean Defaults to showing the process widget in tree mode. show_table_scroll_position Boolean Shows the scroll position tracker in table widgets. process_command Boolean Show processes as their commands by default. disable_advanced_kill Boolean Hides advanced options to stop a process on Unix-like systems. network_use_binary_prefix Boolean Displays the network widget with binary prefixes. network_use_bytes Boolean Displays the network widget using bytes. network_use_log Boolean Displays the network widget with a log scale.","title":"Flags"},{"location":"configuration/config-file/flags/#flags","text":"Warning This section is in progress, and is just copied from the old documentation. Most of the command line flags have config file equivalents to avoid having to type them out each time: Field Type Functionality hide_avg_cpu Boolean Hides the average CPU usage. dot_marker Boolean Uses a dot marker for graphs. left_legend Boolean Puts the CPU chart legend to the left side. current_usage Boolean Sets process CPU% to be based on current CPU%. group_processes Boolean Groups processes with the same name by default. case_sensitive Boolean Enables case sensitivity by default. whole_word Boolean Enables whole-word matching by default. regex Boolean Enables regex by default. basic Boolean Hides graphs and uses a more basic look. use_old_network_legend Boolean DEPRECATED - uses the older network legend. battery Boolean Shows the battery widget. rate Unsigned Int (represents milliseconds) Sets a refresh rate in ms. default_time_value Unsigned Int (represents milliseconds) Default time value for graphs in ms. time_delta Unsigned Int (represents milliseconds) The amount in ms changed upon zooming. hide_time Boolean Hides the time scale. temperature_type String (one of [\"k\", \"f\", \"c\", \"kelvin\", \"fahrenheit\", \"celsius\"]) Sets the temperature unit type. default_widget_type String (one of [\"cpu\", \"proc\", \"net\", \"temp\", \"mem\", \"disk\"], same as layout options) Sets the default widget type, use --help for more info. default_widget_count Unsigned Int (represents which default_widget_type ) Sets the n'th selected widget type as the default. disable_click Boolean Disables mouse clicks. color String (one of [\"default\", \"default-light\", \"gruvbox\", \"gruvbox-light\", \"nord\", \"nord-light\"]) Use a color scheme, use --help for supported values. mem_as_value Boolean Defaults to showing process memory usage by value. tree Boolean Defaults to showing the process widget in tree mode. show_table_scroll_position Boolean Shows the scroll position tracker in table widgets. process_command Boolean Show processes as their commands by default. disable_advanced_kill Boolean Hides advanced options to stop a process on Unix-like systems. network_use_binary_prefix Boolean Displays the network widget with binary prefixes. network_use_bytes Boolean Displays the network widget using bytes. network_use_log Boolean Displays the network widget with a log scale.","title":"Flags"},{"location":"configuration/config-file/layout/","text":"Layout Warning This section is in progress, and is just copied from the old documentation. bottom supports customizable layouts via the config file. Currently, layouts are controlled by using TOML objects and arrays. For example, given the sample layout: [[row]] [[row.child]] type = \"cpu\" [[row]] ratio = 2 [[row.child]] ratio = 4 type = \"mem\" [[row.child]] ratio = 3 [[row.child.child]] type = \"temp\" [[row.child.child]] type = \"disk\" This would give a layout that has two rows, with a 1:2 ratio. The first row has only the CPU widget. The second row is split into two columns with a 4:3 ratio. The first column contains the memory widget. The second column is split into two rows with a 1:1 ratio. The first is the temperature widget, the second is the disk widget. This is what the layout would look like when run: Each [[row]] represents a row in the layout. A row can have any number of child values. Each [[row.child]] represents either a column or a widget . A column can have any number of child values as well. Each [[row.child.child]] represents a widget . A widget is represented by having a type field set to a string. The following type values are supported: \"cpu\" CPU chart and legend \"mem\", \"memory\" Memory chart \"net\", \"network\" Network chart and legend \"proc\", \"process\", \"processes\" Process table and search \"temp\", \"temperature\" Temperature table \"disk\" Disk table \"empty\" An empty space \"batt\", \"battery\" Battery statistics Each component of the layout accepts a ratio value. If this is not set, it defaults to 1. Furthermore, you can have duplicate widgets. For an example, look at the default config , which contains the default layout.","title":"Layout"},{"location":"configuration/config-file/layout/#layout","text":"Warning This section is in progress, and is just copied from the old documentation. bottom supports customizable layouts via the config file. Currently, layouts are controlled by using TOML objects and arrays. For example, given the sample layout: [[row]] [[row.child]] type = \"cpu\" [[row]] ratio = 2 [[row.child]] ratio = 4 type = \"mem\" [[row.child]] ratio = 3 [[row.child.child]] type = \"temp\" [[row.child.child]] type = \"disk\" This would give a layout that has two rows, with a 1:2 ratio. The first row has only the CPU widget. The second row is split into two columns with a 4:3 ratio. The first column contains the memory widget. The second column is split into two rows with a 1:1 ratio. The first is the temperature widget, the second is the disk widget. This is what the layout would look like when run: Each [[row]] represents a row in the layout. A row can have any number of child values. Each [[row.child]] represents either a column or a widget . A column can have any number of child values as well. Each [[row.child.child]] represents a widget . A widget is represented by having a type field set to a string. The following type values are supported: \"cpu\" CPU chart and legend \"mem\", \"memory\" Memory chart \"net\", \"network\" Network chart and legend \"proc\", \"process\", \"processes\" Process table and search \"temp\", \"temperature\" Temperature table \"disk\" Disk table \"empty\" An empty space \"batt\", \"battery\" Battery statistics Each component of the layout accepts a ratio value. If this is not set, it defaults to 1. Furthermore, you can have duplicate widgets. For an example, look at the default config , which contains the default layout.","title":"Layout"},{"location":"configuration/config-file/theming/","text":"Theming Warning This section is in progress, and is just copied from the old documentation. The config file can be used to set custom colours for parts of the application under the [colors] object. The following labels are customizable with strings that are hex colours, RGB colours, or specific named colours. Supported named colours are one of the following strings: Reset, Black, Red, Green, Yellow, Blue, Magenta, Cyan, Gray, DarkGray, LightRed, LightGreen, LightYellow, LightBlue, LightMagenta, LightCyan, White . Labels Details Example Table header colours Colour of table headers table_header_color=\"255, 255, 255\" CPU colour per core Colour of each core. Read in order. cpu_core_colors=[\"#ffffff\", \"white\", \"255, 255, 255\"] Average CPU colour The average CPU color avg_cpu_color=\"White\" All CPUs colour The colour for the \"All\" CPU label all_cpu_color=\"White\" RAM The colour RAM will use ram_color=\"#ffffff\" SWAP The colour SWAP will use swap_color=\"#ffffff\" RX The colour rx will use rx_color=\"#ffffff\" TX The colour tx will use tx_color=\"#ffffff\" Widget title colour The colour of the label each widget has widget_title_color=\"#ffffff\" Border colour The colour of the border of unselected widgets border_color=\"#ffffff\" Selected border colour The colour of the border of selected widgets highlighted_border_color=\"#ffffff\" Text colour The colour of most text text_color=\"#ffffff\" Graph colour The colour of the lines and text of the graph graph_color=\"#ffffff\" Cursor colour The cursor's colour cursor_color=\"#ffffff\" Selected text colour The colour of text that is selected scroll_entry_text_color=\"#ffffff\" Selected text background colour The background colour of text that is selected scroll_entry_bg_color=\"#ffffff\" High battery level colour The colour used for a high battery level (100% to 50%) high_battery_color=\"green\" Medium battery level colour The colour used for a medium battery level (50% to 10%) medium_battery_color=\"yellow\" Low battery level colour The colour used for a low battery level (10% to 0%) low_battery_color=\"red\"","title":"Theming"},{"location":"configuration/config-file/theming/#theming","text":"Warning This section is in progress, and is just copied from the old documentation. The config file can be used to set custom colours for parts of the application under the [colors] object. The following labels are customizable with strings that are hex colours, RGB colours, or specific named colours. Supported named colours are one of the following strings: Reset, Black, Red, Green, Yellow, Blue, Magenta, Cyan, Gray, DarkGray, LightRed, LightGreen, LightYellow, LightBlue, LightMagenta, LightCyan, White . Labels Details Example Table header colours Colour of table headers table_header_color=\"255, 255, 255\" CPU colour per core Colour of each core. Read in order. cpu_core_colors=[\"#ffffff\", \"white\", \"255, 255, 255\"] Average CPU colour The average CPU color avg_cpu_color=\"White\" All CPUs colour The colour for the \"All\" CPU label all_cpu_color=\"White\" RAM The colour RAM will use ram_color=\"#ffffff\" SWAP The colour SWAP will use swap_color=\"#ffffff\" RX The colour rx will use rx_color=\"#ffffff\" TX The colour tx will use tx_color=\"#ffffff\" Widget title colour The colour of the label each widget has widget_title_color=\"#ffffff\" Border colour The colour of the border of unselected widgets border_color=\"#ffffff\" Selected border colour The colour of the border of selected widgets highlighted_border_color=\"#ffffff\" Text colour The colour of most text text_color=\"#ffffff\" Graph colour The colour of the lines and text of the graph graph_color=\"#ffffff\" Cursor colour The cursor's colour cursor_color=\"#ffffff\" Selected text colour The colour of text that is selected scroll_entry_text_color=\"#ffffff\" Selected text background colour The background colour of text that is selected scroll_entry_bg_color=\"#ffffff\" High battery level colour The colour used for a high battery level (100% to 50%) high_battery_color=\"green\" Medium battery level colour The colour used for a medium battery level (50% to 10%) medium_battery_color=\"yellow\" Low battery level colour The colour used for a low battery level (10% to 0%) low_battery_color=\"red\"","title":"Theming"},{"location":"contribution/development/","text":"Development Warning This section is currently WIP. Dev Environment Logging Testing","title":"Development"},{"location":"contribution/development/#development","text":"Warning This section is currently WIP.","title":"Development"},{"location":"contribution/development/#dev-environment","text":"","title":"Dev Environment"},{"location":"contribution/development/#logging","text":"","title":"Logging"},{"location":"contribution/development/#testing","text":"","title":"Testing"},{"location":"contribution/documentation/","text":"Documentation When should documentation changes be done? Whenever a new feature is added, a bug is fixed, or a breaking change is made, it should be documented where appropriate (ex: README.md , changelog, etc.) New methods of installation are always appreciated and should be documented What pages need documentation? There are a few areas where documentation changes are often needed: The extended documentation (AKA here) The README.md The help menu inside of the application (located here ) The CHANGELOG.md How should I add documentation? Fork the repository first and make changes there. Where you're adding documentation will probably affect what you need to do: For changes to README.md and CHANGELOG.md , just follow the formatting provided and use any editor. For changes to the help menu, try to refer to the existing code within src/constants.rs on how the help menu is generated. For changes to the extended documentation, you'll want MkDocs , Material for MkDocs , and mdx_truly_sane_lists installed to provide live reloading and preview for your changes. You can do so through pip or your system's package managers. While you don't need these, it'll probably help in making and validating changes. You may also want Mike , but it isn't really needed. Once you have your documentation changes done, submit it as a pull request. For more information regarding that, refer to Issues, Pull Requests, and Discussions .","title":"Documentation"},{"location":"contribution/documentation/#documentation","text":"","title":"Documentation"},{"location":"contribution/documentation/#when-should-documentation-changes-be-done","text":"Whenever a new feature is added, a bug is fixed, or a breaking change is made, it should be documented where appropriate (ex: README.md , changelog, etc.) New methods of installation are always appreciated and should be documented","title":"When should documentation changes be done?"},{"location":"contribution/documentation/#what-pages-need-documentation","text":"There are a few areas where documentation changes are often needed: The extended documentation (AKA here) The README.md The help menu inside of the application (located here ) The CHANGELOG.md","title":"What pages need documentation?"},{"location":"contribution/documentation/#how-should-i-add-documentation","text":"Fork the repository first and make changes there. Where you're adding documentation will probably affect what you need to do: For changes to README.md and CHANGELOG.md , just follow the formatting provided and use any editor. For changes to the help menu, try to refer to the existing code within src/constants.rs on how the help menu is generated. For changes to the extended documentation, you'll want MkDocs , Material for MkDocs , and mdx_truly_sane_lists installed to provide live reloading and preview for your changes. You can do so through pip or your system's package managers. While you don't need these, it'll probably help in making and validating changes. You may also want Mike , but it isn't really needed. Once you have your documentation changes done, submit it as a pull request. For more information regarding that, refer to Issues, Pull Requests, and Discussions .","title":"How should I add documentation?"},{"location":"contribution/issues-and-pull-requests/","text":"Issues, Pull Requests, and Discussions Contribution in any way is appreciated, whether it is reporting problems, fixing bugs, implementing features, improving the documentation, etc. Discussions Discussions are open in the repo . As for the difference between discussions and issues: Open an issue if what you have enough information to properly fill out any details needed for a report or request. Open a discussion otherwise (e.g. asking a question). Opening an issue Bug reports When filing a bug report, please use the bug report template and fill in as much as you can. It is incredibly difficult for a maintainer to fix a bug when it cannot be reproduced, and giving as much detail as possible generally helps to make it easier to reproduce the problem! Feature requests Please use the feature request template and fill it out. Remember to give details about what the feature is along with why you think this suggestion will be useful. Also please check whether or not an existing issue has covered your specific feature request! Pull requests The expected workflow for a pull request is: Fork the project. Make your changes. Make any documentation changes if necessary - if you add a new feature, it'll probably need documentation changes. See here for tips on documentation. Commit and create a pull request to merge into the master branch. Please follow the pull request template . Wait for the tests to pass. These consist of clippy lints, rustfmt checks, and basic tests. If you are a first time contributor, you may need to skip this step for now, as GitHub Actions requires approval to run. Ask a maintainer to review your pull request. If changes are suggested or any comments are made, they should probably be addressed. Once it looks good, it'll be merged!","title":"Issues, Pull Requests, and Discussions"},{"location":"contribution/issues-and-pull-requests/#issues-pull-requests-and-discussions","text":"Contribution in any way is appreciated, whether it is reporting problems, fixing bugs, implementing features, improving the documentation, etc.","title":"Issues, Pull Requests, and Discussions"},{"location":"contribution/issues-and-pull-requests/#discussions","text":"Discussions are open in the repo . As for the difference between discussions and issues: Open an issue if what you have enough information to properly fill out any details needed for a report or request. Open a discussion otherwise (e.g. asking a question).","title":"Discussions"},{"location":"contribution/issues-and-pull-requests/#opening-an-issue","text":"","title":"Opening an issue"},{"location":"contribution/issues-and-pull-requests/#bug-reports","text":"When filing a bug report, please use the bug report template and fill in as much as you can. It is incredibly difficult for a maintainer to fix a bug when it cannot be reproduced, and giving as much detail as possible generally helps to make it easier to reproduce the problem!","title":"Bug reports"},{"location":"contribution/issues-and-pull-requests/#feature-requests","text":"Please use the feature request template and fill it out. Remember to give details about what the feature is along with why you think this suggestion will be useful. Also please check whether or not an existing issue has covered your specific feature request!","title":"Feature requests"},{"location":"contribution/issues-and-pull-requests/#pull-requests","text":"The expected workflow for a pull request is: Fork the project. Make your changes. Make any documentation changes if necessary - if you add a new feature, it'll probably need documentation changes. See here for tips on documentation. Commit and create a pull request to merge into the master branch. Please follow the pull request template . Wait for the tests to pass. These consist of clippy lints, rustfmt checks, and basic tests. If you are a first time contributor, you may need to skip this step for now, as GitHub Actions requires approval to run. Ask a maintainer to review your pull request. If changes are suggested or any comments are made, they should probably be addressed. Once it looks good, it'll be merged!","title":"Pull requests"},{"location":"contribution/packaging-and-distribution/","text":"Packaging and Distribution Package maintainers are always welcome and appreciated! Here's some info on how one can help with package distribution and bottom. Pre-built binaries The latest stable release can be found here , where you can find pre-built binaries in either a tar.gz or zip format. Binaries here also include automatically generated shell completion files for zsh, bash, fish, and Powershell, which you may want to also install during the packaging process. You can also find a nightly build in the releases page , built every day at 00:00 UTC off of the master branch. Building manually If you want to manually build bottom rather than distributing a pre-built binary, you'll need the most recent version of stable Rust, which you can get with: rustup update stable You'll then want to build with: cargo build --release --locked Completion files are automatically generated during this process, and are located in the directory target/release/build/bottom-/out . Note there may be multiple folders that look like target/release/build/bottom- . To programmatically determine which is the right folder, you might want to use something like: $( ls target/release/build/bottom-*/out/btm.bash | head -n1 | xargs dirname ) You may find the Arch package install script template useful as a reference. Adding an installation source Once you've finished your installation source, if you want to mention it in the main bottom repo, fork the repo and add the installation method and any details to the README.md file under the Installation section. Once that's done, open a pull request - these will usually be approved of very quickly. You can find more info on the contribution process here .","title":"Packaging and Distribution"},{"location":"contribution/packaging-and-distribution/#packaging-and-distribution","text":"Package maintainers are always welcome and appreciated! Here's some info on how one can help with package distribution and bottom.","title":"Packaging and Distribution"},{"location":"contribution/packaging-and-distribution/#pre-built-binaries","text":"The latest stable release can be found here , where you can find pre-built binaries in either a tar.gz or zip format. Binaries here also include automatically generated shell completion files for zsh, bash, fish, and Powershell, which you may want to also install during the packaging process. You can also find a nightly build in the releases page , built every day at 00:00 UTC off of the master branch.","title":"Pre-built binaries"},{"location":"contribution/packaging-and-distribution/#building-manually","text":"If you want to manually build bottom rather than distributing a pre-built binary, you'll need the most recent version of stable Rust, which you can get with: rustup update stable You'll then want to build with: cargo build --release --locked Completion files are automatically generated during this process, and are located in the directory target/release/build/bottom-/out . Note there may be multiple folders that look like target/release/build/bottom- . To programmatically determine which is the right folder, you might want to use something like: $( ls target/release/build/bottom-*/out/btm.bash | head -n1 | xargs dirname ) You may find the Arch package install script template useful as a reference.","title":"Building manually"},{"location":"contribution/packaging-and-distribution/#adding-an-installation-source","text":"Once you've finished your installation source, if you want to mention it in the main bottom repo, fork the repo and add the installation method and any details to the README.md file under the Installation section. Once that's done, open a pull request - these will usually be approved of very quickly. You can find more info on the contribution process here .","title":"Adding an installation source"},{"location":"support/official/","text":"Official support bottom officially supports the following operating systems and corresponding architectures: macOS ( x86_64 ) Linux ( x86_64 , i686 , aarch64 ) Windows ( x86_64 , i686 ) These platforms are tested to work (with caveats, see below) and issues on these platforms will be fixed if possible. Furthermore, binaries are expected to be built and tested using the most recent version of stable Rust - if you are manually building bottom from the repo/source, then please try that as well. Known problems Linux If you're using Linux via WSL or WSL2: You may have issues with getting memory data. Temperature sensors may not be correctly reported. WSL2 will not match Windows' own Task Manager in terms of data. Windows The temperature widget seems to require admin privileges in some cases to get data. The battery widget seems to have issues with dual battery systems, like some Thinkpads. If you are using WSL or WSL2: You may have issues with getting memory data. Temperature sensors may not be correctly reported. WSL2 will not match Windows' own Task Manager in terms of data. macOS The process widget may require elevated access (ex: sudo btm ) to gather all data in some cases. Please note that you should be certain that you trust any software you grant root privileges.","title":"Official Support"},{"location":"support/official/#official-support","text":"bottom officially supports the following operating systems and corresponding architectures: macOS ( x86_64 ) Linux ( x86_64 , i686 , aarch64 ) Windows ( x86_64 , i686 ) These platforms are tested to work (with caveats, see below) and issues on these platforms will be fixed if possible. Furthermore, binaries are expected to be built and tested using the most recent version of stable Rust - if you are manually building bottom from the repo/source, then please try that as well.","title":"Official support"},{"location":"support/official/#known-problems","text":"","title":"Known problems"},{"location":"support/official/#linux","text":"If you're using Linux via WSL or WSL2: You may have issues with getting memory data. Temperature sensors may not be correctly reported. WSL2 will not match Windows' own Task Manager in terms of data.","title":"Linux"},{"location":"support/official/#windows","text":"The temperature widget seems to require admin privileges in some cases to get data. The battery widget seems to have issues with dual battery systems, like some Thinkpads. If you are using WSL or WSL2: You may have issues with getting memory data. Temperature sensors may not be correctly reported. WSL2 will not match Windows' own Task Manager in terms of data.","title":"Windows"},{"location":"support/official/#macos","text":"The process widget may require elevated access (ex: sudo btm ) to gather all data in some cases. Please note that you should be certain that you trust any software you grant root privileges.","title":"macOS"},{"location":"support/unofficial/","text":"Unofficial support Systems and architectures that aren't officially supported may still work, but there are no guarantees on how much will work. For example, it might only compile, or it might run with bugs/broken features. Furthermore, while it will depend on the problem at the end of the day, issues on unsupported platforms are likely to go unfixed . Unofficially supported platforms known to compile/work: Linux on ARMv7 and ARMv6 (tested to compile in CI ) macOS on AArch64 (tested to compile in CI ) Linux on PowerPC 64 LE (tested to compile in CI ) Linux on an RISC-V (tested to compile in CI , tested to run on an Allwinner D1 Nezha ) Known problems M1-based macOS devices may have issues with temperature sensors not returning anything.","title":"Unofficial Support"},{"location":"support/unofficial/#unofficial-support","text":"Systems and architectures that aren't officially supported may still work, but there are no guarantees on how much will work. For example, it might only compile, or it might run with bugs/broken features. Furthermore, while it will depend on the problem at the end of the day, issues on unsupported platforms are likely to go unfixed . Unofficially supported platforms known to compile/work: Linux on ARMv7 and ARMv6 (tested to compile in CI ) macOS on AArch64 (tested to compile in CI ) Linux on PowerPC 64 LE (tested to compile in CI ) Linux on an RISC-V (tested to compile in CI , tested to run on an Allwinner D1 Nezha )","title":"Unofficial support"},{"location":"support/unofficial/#known-problems","text":"M1-based macOS devices may have issues with temperature sensors not returning anything.","title":"Known problems"},{"location":"usage/basic-mode/","text":"Basic Mode Basic mode is a special layout that removes all of the graphs and provides an interface that resembles (a very stripped-down version of) htop. Basic mode can be enabled either through a command line flag: btm -b # or btm --basic or through the config: [flags] basic = true Notes In this mode, widgets that use tables (temperatures, processes, disks, and batteries) are only shown one at a time. One can switch between these widgets either by clicking the arrow buttons or by using the general widget selection shortcuts (for example, Ctrl + Left or H ) to switch which widget is shown. Also note that in this mode, widget expansion and custom layouts are disabled. Key bindings Basic mode follows the same key bindings as normal, barring widget expansion being disabled, and that the % key while selecting the memory widget toggles between total usage and percentage.","title":"Basic Mode"},{"location":"usage/basic-mode/#basic-mode","text":"Basic mode is a special layout that removes all of the graphs and provides an interface that resembles (a very stripped-down version of) htop. Basic mode can be enabled either through a command line flag: btm -b # or btm --basic or through the config: [flags] basic = true","title":"Basic Mode"},{"location":"usage/basic-mode/#notes","text":"In this mode, widgets that use tables (temperatures, processes, disks, and batteries) are only shown one at a time. One can switch between these widgets either by clicking the arrow buttons or by using the general widget selection shortcuts (for example, Ctrl + Left or H ) to switch which widget is shown. Also note that in this mode, widget expansion and custom layouts are disabled.","title":"Notes"},{"location":"usage/basic-mode/#key-bindings","text":"Basic mode follows the same key bindings as normal, barring widget expansion being disabled, and that the % key while selecting the memory widget toggles between total usage and percentage.","title":"Key bindings"},{"location":"usage/general-usage/","text":"General Usage You can run bottom with: btm For help regarding the command-line flags, use: # For a simple overview of flags btm -h # For more details btm --help Features Expansion By default, bottom is somewhat like a dashboard - a bunch of different widgets, all showing different things, and they all cram together to fit into one terminal. If you instead just want to see one widget - maybe you want to look at a graph in more detail, for example - you can \"expand\" the currently selected widget using the e key, which will hide all other widgets and make that widget take up all available terminal space. You can leave this state by either pressing e again or pressing Esc . Widget selection To allow for widget-specific keybindings and expansion, there is the idea of widget selection in bottom, where you can focus on a specific widget to work with it. This can be done with the mouse (just click on the widget of interest) or keyboard (ex: Ctrl + Direction , see Key bindings for alternatives). Key bindings These are global or common keyboard shortcuts for the application, which you can see in-app through the ? shortcut. Note that key bindings are generally case-sensitive. Binding Action q , Ctrl + c Quit Esc Close dialog windows, search, widgets, or exit expanded mode Ctrl + r Reset display and any collected data f Freeze/unfreeze updating with new data ? Open help menu e Toggle expanding the currently selected widget Ctrl + Up Shift + Up K W Select the widget above Ctrl + Down Shift + Down J S Select the widget below Ctrl + Left Shift + Left H A Select the widget on the left Ctrl + Right Shift + Right L D Select the widget on the right Up , k Move up within a widget Down , j Move down within a widget Left h Alt + h Move left within a widget Right l Alt + l Move right within a widget g + g , Home Jump to the first entry G , End Jump to the last entry Page Up , Page Down Scroll up/down a table by a page Mouse bindings Binding Action Left Button Selects the widget","title":"General Usage"},{"location":"usage/general-usage/#general-usage","text":"You can run bottom with: btm For help regarding the command-line flags, use: # For a simple overview of flags btm -h # For more details btm --help","title":"General Usage"},{"location":"usage/general-usage/#features","text":"","title":"Features"},{"location":"usage/general-usage/#expansion","text":"By default, bottom is somewhat like a dashboard - a bunch of different widgets, all showing different things, and they all cram together to fit into one terminal. If you instead just want to see one widget - maybe you want to look at a graph in more detail, for example - you can \"expand\" the currently selected widget using the e key, which will hide all other widgets and make that widget take up all available terminal space. You can leave this state by either pressing e again or pressing Esc .","title":"Expansion"},{"location":"usage/general-usage/#widget-selection","text":"To allow for widget-specific keybindings and expansion, there is the idea of widget selection in bottom, where you can focus on a specific widget to work with it. This can be done with the mouse (just click on the widget of interest) or keyboard (ex: Ctrl + Direction , see Key bindings for alternatives).","title":"Widget selection"},{"location":"usage/general-usage/#key-bindings","text":"These are global or common keyboard shortcuts for the application, which you can see in-app through the ? shortcut. Note that key bindings are generally case-sensitive. Binding Action q , Ctrl + c Quit Esc Close dialog windows, search, widgets, or exit expanded mode Ctrl + r Reset display and any collected data f Freeze/unfreeze updating with new data ? Open help menu e Toggle expanding the currently selected widget Ctrl + Up Shift + Up K W Select the widget above Ctrl + Down Shift + Down J S Select the widget below Ctrl + Left Shift + Left H A Select the widget on the left Ctrl + Right Shift + Right L D Select the widget on the right Up , k Move up within a widget Down , j Move down within a widget Left h Alt + h Move left within a widget Right l Alt + l Move right within a widget g + g , Home Jump to the first entry G , End Jump to the last entry Page Up , Page Down Scroll up/down a table by a page","title":"Key bindings"},{"location":"usage/general-usage/#mouse-bindings","text":"Binding Action Left Button Selects the widget","title":"Mouse bindings"},{"location":"usage/widgets/battery/","text":"Battery Widget Warning The battery features are unavailable if the binary is compiled with the battery feature disabled! The battery widget provides information about batteries on the system. The battery widget can be enabled through either the --battery flag, the battery = true option in a config file, or specifying the widget in a custom layout. Features The following data is displayed for batteries: Charge percent Consumption Time to empty/charge, based on the current state Battery health percent The battery widget also supports devices with multiple batteries, and you can switch between them using the keyboard or the mouse. Key bindings Note that key bindings are generally case-sensitive. Binding Action Left h Alt + h Moves to the battery entry to the left of the current one Right l Alt + l Moves to the battery entry to the right of the current one Mouse bindings Binding Action Left Button Selects a battery entry","title":"Battery Widget"},{"location":"usage/widgets/battery/#battery-widget","text":"Warning The battery features are unavailable if the binary is compiled with the battery feature disabled! The battery widget provides information about batteries on the system. The battery widget can be enabled through either the --battery flag, the battery = true option in a config file, or specifying the widget in a custom layout.","title":"Battery Widget"},{"location":"usage/widgets/battery/#features","text":"The following data is displayed for batteries: Charge percent Consumption Time to empty/charge, based on the current state Battery health percent The battery widget also supports devices with multiple batteries, and you can switch between them using the keyboard or the mouse.","title":"Features"},{"location":"usage/widgets/battery/#key-bindings","text":"Note that key bindings are generally case-sensitive. Binding Action Left h Alt + h Moves to the battery entry to the left of the current one Right l Alt + l Moves to the battery entry to the right of the current one","title":"Key bindings"},{"location":"usage/widgets/battery/#mouse-bindings","text":"Binding Action Left Button Selects a battery entry","title":"Mouse bindings"},{"location":"usage/widgets/cpu/","text":"CPU Widget The CPU widget displays a visual representation of CPU usage over a time range. Features The CPU widget is composed of two parts: the graph and the legend: The graph displays the usage data for the currently selected entry as a percentage The legend displays all available entries that can be displayed on the graph along with their last recorded use percentage (except for the \"All\" option) Users can scroll through the legend using either the keyboard or mouse to select which entry to display on the graph. The \"All\" option shows every entry at the same time, though this may get a bit hard to follow if you have a large number of cores/threads. One can also adjust the displayed time range through either the keyboard or mouse, with a range of 30s to 600s. Key bindings Note that key bindings are generally case-sensitive. Graph Binding Action + Zoom in on chart (decrease time range) - Zoom out on chart (increase time range) = Reset zoom Legend Binding Action Up , k Move up within a widget Down , j Move down within a widget g + g , Home Jump to the first entry in the legend G , End Jump to the last entry in the legend Mouse bindings Graph Binding Action Scroll Scrolling up or down zooms in or out of the graph respectively Legend Binding Action Scroll Scroll through options to display in the graph Left Button Selects a CPU thread/average to show in the graph","title":"CPU Widget"},{"location":"usage/widgets/cpu/#cpu-widget","text":"The CPU widget displays a visual representation of CPU usage over a time range.","title":"CPU Widget"},{"location":"usage/widgets/cpu/#features","text":"The CPU widget is composed of two parts: the graph and the legend: The graph displays the usage data for the currently selected entry as a percentage The legend displays all available entries that can be displayed on the graph along with their last recorded use percentage (except for the \"All\" option) Users can scroll through the legend using either the keyboard or mouse to select which entry to display on the graph. The \"All\" option shows every entry at the same time, though this may get a bit hard to follow if you have a large number of cores/threads. One can also adjust the displayed time range through either the keyboard or mouse, with a range of 30s to 600s.","title":"Features"},{"location":"usage/widgets/cpu/#key-bindings","text":"Note that key bindings are generally case-sensitive.","title":"Key bindings"},{"location":"usage/widgets/cpu/#graph","text":"Binding Action + Zoom in on chart (decrease time range) - Zoom out on chart (increase time range) = Reset zoom","title":"Graph"},{"location":"usage/widgets/cpu/#legend","text":"Binding Action Up , k Move up within a widget Down , j Move down within a widget g + g , Home Jump to the first entry in the legend G , End Jump to the last entry in the legend","title":"Legend"},{"location":"usage/widgets/cpu/#mouse-bindings","text":"","title":"Mouse bindings"},{"location":"usage/widgets/cpu/#graph_1","text":"Binding Action Scroll Scrolling up or down zooms in or out of the graph respectively","title":"Graph"},{"location":"usage/widgets/cpu/#legend_1","text":"Binding Action Scroll Scroll through options to display in the graph Left Button Selects a CPU thread/average to show in the graph","title":"Legend"},{"location":"usage/widgets/disk/","text":"Disk Widget The disk widget provides a table of useful disk and partition information, like I/O per second and total usage. Features The disk widget provides the following information: Disk name Disk mount location Percentage of space used Amount of space left Total amount of space Read per second Write per second Key bindings Note that key bindings are generally case-sensitive. Binding Action Up , k Move up within a widget Down , j Move down within a widget g + g , Home Jump to the first entry in the table G , End Jump to the last entry in the table Mouse bindings Binding Action Left Button Selects an entry in the table","title":"Disk Widget"},{"location":"usage/widgets/disk/#disk-widget","text":"The disk widget provides a table of useful disk and partition information, like I/O per second and total usage.","title":"Disk Widget"},{"location":"usage/widgets/disk/#features","text":"The disk widget provides the following information: Disk name Disk mount location Percentage of space used Amount of space left Total amount of space Read per second Write per second","title":"Features"},{"location":"usage/widgets/disk/#key-bindings","text":"Note that key bindings are generally case-sensitive. Binding Action Up , k Move up within a widget Down , j Move down within a widget g + g , Home Jump to the first entry in the table G , End Jump to the last entry in the table","title":"Key bindings"},{"location":"usage/widgets/disk/#mouse-bindings","text":"Binding Action Left Button Selects an entry in the table","title":"Mouse bindings"},{"location":"usage/widgets/memory/","text":"Memory Widget The memory widget provides a visual representation of RAM and swap usage over time. Features The legend displays the current usage in terms of percentage and actual usage in binary units (KiB, MiB, GiB, etc.). If the total RAM or swap available is 0, then it is automatically hidden from the legend and graph. One can also adjust the displayed time range through either the keyboard or mouse, with a range of 30s to 600s. Key bindings Note that key bindings are generally case-sensitive. Binding Action + Zoom in on chart (decrease time range) - Zoom out on chart (increase time range) = Reset zoom Mouse bindings Binding Action Scroll Scrolling up or down zooms in or out of the graph respectively Calculations Memory usage is calculated using the following formula based on values from /proc/meminfo (based on htop's implementation ): MemTotal - MemFree - Buffers - (Cached + SReclaimable - Shmem) You can find more info on /proc/meminfo and its fields here .","title":"Memory Widget"},{"location":"usage/widgets/memory/#memory-widget","text":"The memory widget provides a visual representation of RAM and swap usage over time.","title":"Memory Widget"},{"location":"usage/widgets/memory/#features","text":"The legend displays the current usage in terms of percentage and actual usage in binary units (KiB, MiB, GiB, etc.). If the total RAM or swap available is 0, then it is automatically hidden from the legend and graph. One can also adjust the displayed time range through either the keyboard or mouse, with a range of 30s to 600s.","title":"Features"},{"location":"usage/widgets/memory/#key-bindings","text":"Note that key bindings are generally case-sensitive. Binding Action + Zoom in on chart (decrease time range) - Zoom out on chart (increase time range) = Reset zoom","title":"Key bindings"},{"location":"usage/widgets/memory/#mouse-bindings","text":"Binding Action Scroll Scrolling up or down zooms in or out of the graph respectively","title":"Mouse bindings"},{"location":"usage/widgets/memory/#calculations","text":"Memory usage is calculated using the following formula based on values from /proc/meminfo (based on htop's implementation ): MemTotal - MemFree - Buffers - (Cached + SReclaimable - Shmem) You can find more info on /proc/meminfo and its fields here .","title":"Calculations"},{"location":"usage/widgets/network/","text":"Network Widget The network widget provides a visual representation of network input and output per second, as well as noting the total amount received and transmitted. Features The legend displays the current reads and writes per second in bits, as well as the total amount read/written. The y-axis automatically scales based on shown read/write values, and by default, is a linear scale based on base-10 units (e.x. kilobit, gigabit, etc.). Through configuration , the read/write per second unit can be changed to bytes, while the y-axis can be changed to a log scale and/or use base-2 units (e.x. kibibit, gibibit, etc.). One can also adjust the displayed time range through either the keyboard or mouse, with a range of 30s to 600s. Key bindings Note that key bindings are generally case-sensitive. Binding Action + Zoom in on chart (decrease time range) - Zoom out on chart (increase time range) = Reset zoom Mouse bindings Binding Action Scroll Scrolling up or down zooms in or out of the graph respectively","title":"Network Widget"},{"location":"usage/widgets/network/#network-widget","text":"The network widget provides a visual representation of network input and output per second, as well as noting the total amount received and transmitted.","title":"Network Widget"},{"location":"usage/widgets/network/#features","text":"The legend displays the current reads and writes per second in bits, as well as the total amount read/written. The y-axis automatically scales based on shown read/write values, and by default, is a linear scale based on base-10 units (e.x. kilobit, gigabit, etc.). Through configuration , the read/write per second unit can be changed to bytes, while the y-axis can be changed to a log scale and/or use base-2 units (e.x. kibibit, gibibit, etc.). One can also adjust the displayed time range through either the keyboard or mouse, with a range of 30s to 600s.","title":"Features"},{"location":"usage/widgets/network/#key-bindings","text":"Note that key bindings are generally case-sensitive. Binding Action + Zoom in on chart (decrease time range) - Zoom out on chart (increase time range) = Reset zoom","title":"Key bindings"},{"location":"usage/widgets/network/#mouse-bindings","text":"Binding Action Scroll Scrolling up or down zooms in or out of the graph respectively","title":"Mouse bindings"},{"location":"usage/widgets/process/","text":"Process Widget The process widget displays a table containing information regarding a running process, along with sorting, searching, and process control features. Features The process widget has three main components: The main process table The search sub-widget (opened with Ctrl + f or / ) The sort menu sub-widget (opened with s or F6 ) By default, the main process table displays the following information for each process: PID Name of the process CPU use percentage (note this is averaged out per available thread) Memory use percentage Reads per second Writes per second Total amount read Total amount written User State Sorting The table can be sorted by clicking on the table headers, which will either sort the table by that column, or if already sorting by that column, reverse the sorting order. Alternatively, one can sort using the sort menu sub-widget, which is brought up using s or F6 , and can be controlled by arrow keys or the mouse. Grouping Pressing Tab in the table will group entries with the same name together. The PID column will be replaced with the number of entries in each group, and usage is added together when displayed. Note that the process state and user columns are disabled in this mode. Tree mode Pressing t or F5 in the table toggles tree mode in the process widget, displaying processes in regards to their parent-child process relationships. A process in tree mode can also be \"collapsed\", hiding its children and any descendants, using either the - or + keys, or double clicking on an entry. Lastly, note that in tree mode, processes cannot be grouped together due to the behaviour of the two modes somewhat clashing. Full command You can show the full command instead of just the process name by pressing P . Search Pressing / or Ctrl + f will open up the search sub-widget. By default, just typing in something will search by the process name. This search can be further enhanced by matching by case, matching the entire word, or by regex. We are able to also search for multiple things/conditions. And if our search uses a keyword, we need to use quotation marks around the term to properly search it. Lastly, we can refine our search even further based on the other columns, like PID, CPU usage, etc., as well as grouping together conditions. Keywords Note all keywords are case-insensitive. To search for a process/command that collides with a keyword, surround the term with quotes (e.x. \"cpu\" ). Keywords Example Description btm Matches by process or command name; supports regex pid pid=1044 Matches by PID; supports regex cpu cpu% cpu > 0.5 Matches the CPU column; supports comparison operators memb memb > 1000 b Matches the memory column in terms of bytes; supports comparison operators mem mem% mem < 0.5 Matches the memory column in terms of percent; supports comparison operators read r/s read = 1 mb Matches the read/s column in terms of bytes; supports comparison operators write w/s write >= 1 kb Matches the write/s column in terms of bytes; supports comparison operators tread t.read tread <= 1024 gb Matches he total read column in terms of bytes; supports comparison operators twrite t.write twrite > 1024 tb Matches the total write column in terms of bytes; supports comparison operators user user=root Matches by user; supports regex state state=running Matches by state; supports regex () ( AND ) OR Group together a condition Comparison operators Keywords Description = Checks if the values are equal > Checks if the left value is strictly greater than the right < Checks if the left value is strictly less than the right >= Checks if the left value is greater than or equal to the right <= Checks if the left value is less than or equal to the right Logical operators Note all operators are case-insensitive, and the and operator takes precedence over the or operator. Keywords Usage Description and && and && Requires both conditions to be true to match or || or || Requires at least one condition to be true to match Units All units are case-insensitive. Keywords Description B Bytes KB Kilobytes MB Megabytes GB Gigabytes TB Terabytes KiB Kibibytes MiB Mebibytes GiB Gibibytes TiB Tebibytes Key bindings Note that key bindings are generally case-sensitive. Process table Binding Action Up , k Move up within a widget Down , j Move down within a widget g + g , Home Jump to the first entry in the table G , End Jump to the last entry in the table d + d , F9 Send a kill signal to the selected process c Sort by CPU usage, press again to reverse sorting order m Sort by memory usage, press again to reverse sorting order p Sort by PID name, press again to reverse sorting order n Sort by process name, press again to reverse sorting order Tab Toggle grouping processes with the same name P Toggle between showing the full command or just the process name Ctrl + f , / Toggle showing the search sub-widget s , F6 Toggle showing the sort sub-widget I Invert the current sort % Toggle between values and percentages for memory usage t , F5 Toggle tree mode Sort sub-widget Binding Action Up , k Move up within a widget Down , j Move down within a widget g + g , Home Jump to the first entry in the table G , End Jump to the last entry in the table Esc Close the sort sub-widget Enter Sorts the corresponding process table Search sub-widget Binding Action Left h Alt + h Moves the cursor left Right l Alt + l Moves the cursor right Esc Close the search widget (retains the filter) Ctrl + a Skip to the start of the search query Ctrl + e Skip to the end of the search query Ctrl + u Clear the current search query Ctrl + w Delete a word behind the cursor Ctrl + h Delete the character behind the cursor Backspace Delete the character behind the cursor Del Delete the character at the cursor Alt + c , F1 Toggle matching case Alt + w , F2 Toggle matching the entire word Alt + r , F3 Toggle using regex Mouse bindings Process table Binding Action Scroll Selects a CPU thread/average to show in the graph Left Button Table header: Sorts/reverse sorts the table by the column Table entry: Selects an entry in the table, if in tree mode, collapses/expands the entry's children Sort sub-widget Binding Action Left Button Selects an entry in the table","title":"Process Widget"},{"location":"usage/widgets/process/#process-widget","text":"The process widget displays a table containing information regarding a running process, along with sorting, searching, and process control features.","title":"Process Widget"},{"location":"usage/widgets/process/#features","text":"The process widget has three main components: The main process table The search sub-widget (opened with Ctrl + f or / ) The sort menu sub-widget (opened with s or F6 ) By default, the main process table displays the following information for each process: PID Name of the process CPU use percentage (note this is averaged out per available thread) Memory use percentage Reads per second Writes per second Total amount read Total amount written User State","title":"Features"},{"location":"usage/widgets/process/#sorting","text":"The table can be sorted by clicking on the table headers, which will either sort the table by that column, or if already sorting by that column, reverse the sorting order. Alternatively, one can sort using the sort menu sub-widget, which is brought up using s or F6 , and can be controlled by arrow keys or the mouse.","title":"Sorting"},{"location":"usage/widgets/process/#grouping","text":"Pressing Tab in the table will group entries with the same name together. The PID column will be replaced with the number of entries in each group, and usage is added together when displayed. Note that the process state and user columns are disabled in this mode.","title":"Grouping"},{"location":"usage/widgets/process/#tree-mode","text":"Pressing t or F5 in the table toggles tree mode in the process widget, displaying processes in regards to their parent-child process relationships. A process in tree mode can also be \"collapsed\", hiding its children and any descendants, using either the - or + keys, or double clicking on an entry. Lastly, note that in tree mode, processes cannot be grouped together due to the behaviour of the two modes somewhat clashing.","title":"Tree mode"},{"location":"usage/widgets/process/#full-command","text":"You can show the full command instead of just the process name by pressing P .","title":"Full command"},{"location":"usage/widgets/process/#search","text":"Pressing / or Ctrl + f will open up the search sub-widget. By default, just typing in something will search by the process name. This search can be further enhanced by matching by case, matching the entire word, or by regex. We are able to also search for multiple things/conditions. And if our search uses a keyword, we need to use quotation marks around the term to properly search it. Lastly, we can refine our search even further based on the other columns, like PID, CPU usage, etc., as well as grouping together conditions.","title":"Search"},{"location":"usage/widgets/process/#keywords","text":"Note all keywords are case-insensitive. To search for a process/command that collides with a keyword, surround the term with quotes (e.x. \"cpu\" ). Keywords Example Description btm Matches by process or command name; supports regex pid pid=1044 Matches by PID; supports regex cpu cpu% cpu > 0.5 Matches the CPU column; supports comparison operators memb memb > 1000 b Matches the memory column in terms of bytes; supports comparison operators mem mem% mem < 0.5 Matches the memory column in terms of percent; supports comparison operators read r/s read = 1 mb Matches the read/s column in terms of bytes; supports comparison operators write w/s write >= 1 kb Matches the write/s column in terms of bytes; supports comparison operators tread t.read tread <= 1024 gb Matches he total read column in terms of bytes; supports comparison operators twrite t.write twrite > 1024 tb Matches the total write column in terms of bytes; supports comparison operators user user=root Matches by user; supports regex state state=running Matches by state; supports regex () ( AND ) OR Group together a condition","title":"Keywords"},{"location":"usage/widgets/process/#comparison-operators","text":"Keywords Description = Checks if the values are equal > Checks if the left value is strictly greater than the right < Checks if the left value is strictly less than the right >= Checks if the left value is greater than or equal to the right <= Checks if the left value is less than or equal to the right","title":"Comparison operators"},{"location":"usage/widgets/process/#logical-operators","text":"Note all operators are case-insensitive, and the and operator takes precedence over the or operator. Keywords Usage Description and && and && Requires both conditions to be true to match or || or || Requires at least one condition to be true to match","title":"Logical operators"},{"location":"usage/widgets/process/#units","text":"All units are case-insensitive. Keywords Description B Bytes KB Kilobytes MB Megabytes GB Gigabytes TB Terabytes KiB Kibibytes MiB Mebibytes GiB Gibibytes TiB Tebibytes","title":"Units"},{"location":"usage/widgets/process/#key-bindings","text":"Note that key bindings are generally case-sensitive.","title":"Key bindings"},{"location":"usage/widgets/process/#process-table","text":"Binding Action Up , k Move up within a widget Down , j Move down within a widget g + g , Home Jump to the first entry in the table G , End Jump to the last entry in the table d + d , F9 Send a kill signal to the selected process c Sort by CPU usage, press again to reverse sorting order m Sort by memory usage, press again to reverse sorting order p Sort by PID name, press again to reverse sorting order n Sort by process name, press again to reverse sorting order Tab Toggle grouping processes with the same name P Toggle between showing the full command or just the process name Ctrl + f , / Toggle showing the search sub-widget s , F6 Toggle showing the sort sub-widget I Invert the current sort % Toggle between values and percentages for memory usage t , F5 Toggle tree mode","title":"Process table"},{"location":"usage/widgets/process/#sort-sub-widget","text":"Binding Action Up , k Move up within a widget Down , j Move down within a widget g + g , Home Jump to the first entry in the table G , End Jump to the last entry in the table Esc Close the sort sub-widget Enter Sorts the corresponding process table","title":"Sort sub-widget"},{"location":"usage/widgets/process/#search-sub-widget","text":"Binding Action Left h Alt + h Moves the cursor left Right l Alt + l Moves the cursor right Esc Close the search widget (retains the filter) Ctrl + a Skip to the start of the search query Ctrl + e Skip to the end of the search query Ctrl + u Clear the current search query Ctrl + w Delete a word behind the cursor Ctrl + h Delete the character behind the cursor Backspace Delete the character behind the cursor Del Delete the character at the cursor Alt + c , F1 Toggle matching case Alt + w , F2 Toggle matching the entire word Alt + r , F3 Toggle using regex","title":"Search sub-widget"},{"location":"usage/widgets/process/#mouse-bindings","text":"","title":"Mouse bindings"},{"location":"usage/widgets/process/#process-table_1","text":"Binding Action Scroll Selects a CPU thread/average to show in the graph Left Button Table header: Sorts/reverse sorts the table by the column Table entry: Selects an entry in the table, if in tree mode, collapses/expands the entry's children","title":"Process table"},{"location":"usage/widgets/process/#sort-sub-widget_1","text":"Binding Action Left Button Selects an entry in the table","title":"Sort sub-widget"},{"location":"usage/widgets/temperature/","text":"Temperature Widget The temperature widget provides a table of temperature sensors and their current temperature. Features The temperature widget provides the sensor name as well as its current temperature. Key bindings Note that key bindings are generally case-sensitive. Binding Action Up , k Move up within a widget Down , j Move down within a widget g + g , Home Jump to the first entry in the table G , End Jump to the last entry in the table Mouse bindings Binding Action Left Button Selects an entry in the table","title":"Temperature Widget"},{"location":"usage/widgets/temperature/#temperature-widget","text":"The temperature widget provides a table of temperature sensors and their current temperature.","title":"Temperature Widget"},{"location":"usage/widgets/temperature/#features","text":"The temperature widget provides the sensor name as well as its current temperature.","title":"Features"},{"location":"usage/widgets/temperature/#key-bindings","text":"Note that key bindings are generally case-sensitive. Binding Action Up , k Move up within a widget Down , j Move down within a widget g + g , Home Jump to the first entry in the table G , End Jump to the last entry in the table","title":"Key bindings"},{"location":"usage/widgets/temperature/#mouse-bindings","text":"Binding Action Left Button Selects an entry in the table","title":"Mouse bindings"}]} \ No newline at end of file +{"config":{"indexing":"full","lang":["en"],"min_search_length":3,"prebuild_index":false,"separator":"[\\s\\-]+"},"docs":[{"location":"","text":"bottom This site serves as extended documentation for bottom alongside the README.md . Warning Some areas of this site are still in progress and may be missing details. Feel free to suggest/contribute changes! Installation Tip It is a good idea to first check out the Support page to see if your system is officially supported! Tip If you're facing some issues during/after installation, check out the Troubleshooting page for some common problems and solutions. To install bottom, refer to the installation section of the README.md , which contains a list of all the installation methods. Contribution New contributors are always welcome! See the contribution section for how to contribute to bottom, whether it be filing issues, writing documentation, creating pull requests, etc.","title":"Home"},{"location":"#bottom","text":"This site serves as extended documentation for bottom alongside the README.md . Warning Some areas of this site are still in progress and may be missing details. Feel free to suggest/contribute changes!","title":"bottom"},{"location":"#installation","text":"Tip It is a good idea to first check out the Support page to see if your system is officially supported! Tip If you're facing some issues during/after installation, check out the Troubleshooting page for some common problems and solutions. To install bottom, refer to the installation section of the README.md , which contains a list of all the installation methods.","title":"Installation"},{"location":"#contribution","text":"New contributors are always welcome! See the contribution section for how to contribute to bottom, whether it be filing issues, writing documentation, creating pull requests, etc.","title":"Contribution"},{"location":"troubleshooting/","text":"Troubleshooting The graph points look broken/strange It's possible that your graphs won't look great out of the box due to the reliance on braille fonts to draw them. One example of this is seeing a bunch of missing font characters, caused when the terminal isn't configured properly to render braille fonts. Powershell shown missing braille fonts One alternative is to use the --dot_marker option to render graph charts using dots instead of the braille characters, which generally seems better supported out of the box, at the expense of looking less intricate: Example using btm --dot_marker Another (better) alternative is to install a font that supports braille fonts, and configure your terminal to use it. For example, installing something like UBraille or Iosevka and ensuring your terminal uses it should work. Installing fonts for Windows Command Prompt/PowerShell Note: I would advise backing up your registry beforehand if you aren't sure what you are doing! Let's say you're installing Iosevka . The steps you can take are: Install the font itself. Open the registry editor, which you can do either by Win+R and opening regedit , or just opening it from the Start Menu. In the registry editor, go to HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Console\\TrueTypeFont Here, add a new String value , and set the Name to a bunch of 0's (e.g. 000 - make sure the name isn't already used), then set the Data to the font name (e.g. Iosevka ). The last entry is the new entry for Iosevka Then, open the Command Prompt/PowerShell, and right click on the top bar, and open Properties : From here, go to Font , and set the font to your new font (e.g. Iosevka ): Why can't I see all my temperature sensors on Windows? This is a known limitation , some sensors may require admin privileges to get sensor data. Why don't I see dual batteries on Windows reported separately? (e.g. Thinkpads) This is a known limitation which seems to be with how batteries are being detected on Windows. Why can't I see all my temperature sensors on WSL? This is a known limitation with WSL. Due to how it works, hosts may not expose their temperature sensors and therefore, temperature sensors might be missing. Why does WSL2 not match Task Manager? This is a known limitation with WSL2. Due to how WSL2 works, the two might not match up in terms of reported data. Why can't I see all my processes/process data on macOS? This is a known limitation , and you may have to run the program with elevated privileges to work around it - for example: sudo btm Please note that you should be certain that you trust any software you grant root privileges. There are measures taken to try to maximize the amount of information obtained without elevated privileges. For example, one can modify the instructions found on the htop wiki on how to run htop without sudo for bottom. However please understand the potential security risks before doing so! My configuration file isn't working If your configuration files aren't working, here are a few things to try: Check the formatting It may be handy to refer to the automatically generated config files or the sample configuration files . The config files also follow the TOML format. Also make sure your config options are under the right table - for example, to set your temperature type, you must set it under the [flags] table: [flags] temperature_type = \"f\" Meanwhile, if you want to set a custom color scheme, it would be under the [colors] table: [colors] table_header_color = \"LightBlue\" Check the configuration file location Make sure bottom is reading the right configuration file. By default, bottom looks for config files at these locations: OS Default Config Location macOS $HOME/Library/Application Support/bottom/bottom.toml ~/.config/bottom/bottom.toml $XDG_CONFIG_HOME/bottom/bottom.toml Linux ~/.config/bottom/bottom.toml $XDG_CONFIG_HOME/bottom/bottom.toml Windows C:\\Users\\\\AppData\\Roaming\\bottom\\bottom.toml If you want to use a config file in another location, use the --config or -C flags along with the path to the configuration file, like so: btm -C path_to_config My installation through snap has some widgets that are blank/show no data Make sure bottom is given the correct permissions in order to collect data. Snapcraft explains how to do so, but the TL;DR is: sudo snap connect bottom:mount-observe sudo snap connect bottom:hardware-observe sudo snap connect bottom:system-observe sudo snap connect bottom:process-control","title":"Troubleshooting"},{"location":"troubleshooting/#troubleshooting","text":"","title":"Troubleshooting"},{"location":"troubleshooting/#the-graph-points-look-brokenstrange","text":"It's possible that your graphs won't look great out of the box due to the reliance on braille fonts to draw them. One example of this is seeing a bunch of missing font characters, caused when the terminal isn't configured properly to render braille fonts. Powershell shown missing braille fonts One alternative is to use the --dot_marker option to render graph charts using dots instead of the braille characters, which generally seems better supported out of the box, at the expense of looking less intricate: Example using btm --dot_marker Another (better) alternative is to install a font that supports braille fonts, and configure your terminal to use it. For example, installing something like UBraille or Iosevka and ensuring your terminal uses it should work.","title":"The graph points look broken/strange"},{"location":"troubleshooting/#installing-fonts-for-windows-command-promptpowershell","text":"Note: I would advise backing up your registry beforehand if you aren't sure what you are doing! Let's say you're installing Iosevka . The steps you can take are: Install the font itself. Open the registry editor, which you can do either by Win+R and opening regedit , or just opening it from the Start Menu. In the registry editor, go to HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Console\\TrueTypeFont Here, add a new String value , and set the Name to a bunch of 0's (e.g. 000 - make sure the name isn't already used), then set the Data to the font name (e.g. Iosevka ). The last entry is the new entry for Iosevka Then, open the Command Prompt/PowerShell, and right click on the top bar, and open Properties : From here, go to Font , and set the font to your new font (e.g. Iosevka ):","title":"Installing fonts for Windows Command Prompt/PowerShell"},{"location":"troubleshooting/#why-cant-i-see-all-my-temperature-sensors-on-windows","text":"This is a known limitation , some sensors may require admin privileges to get sensor data.","title":"Why can't I see all my temperature sensors on Windows?"},{"location":"troubleshooting/#why-dont-i-see-dual-batteries-on-windows-reported-separately-eg-thinkpads","text":"This is a known limitation which seems to be with how batteries are being detected on Windows.","title":"Why don't I see dual batteries on Windows reported separately? (e.g. Thinkpads)"},{"location":"troubleshooting/#why-cant-i-see-all-my-temperature-sensors-on-wsl","text":"This is a known limitation with WSL. Due to how it works, hosts may not expose their temperature sensors and therefore, temperature sensors might be missing.","title":"Why can't I see all my temperature sensors on WSL?"},{"location":"troubleshooting/#why-does-wsl2-not-match-task-manager","text":"This is a known limitation with WSL2. Due to how WSL2 works, the two might not match up in terms of reported data.","title":"Why does WSL2 not match Task Manager?"},{"location":"troubleshooting/#why-cant-i-see-all-my-processesprocess-data-on-macos","text":"This is a known limitation , and you may have to run the program with elevated privileges to work around it - for example: sudo btm Please note that you should be certain that you trust any software you grant root privileges. There are measures taken to try to maximize the amount of information obtained without elevated privileges. For example, one can modify the instructions found on the htop wiki on how to run htop without sudo for bottom. However please understand the potential security risks before doing so!","title":"Why can't I see all my processes/process data on macOS?"},{"location":"troubleshooting/#my-configuration-file-isnt-working","text":"If your configuration files aren't working, here are a few things to try:","title":"My configuration file isn't working"},{"location":"troubleshooting/#check-the-formatting","text":"It may be handy to refer to the automatically generated config files or the sample configuration files . The config files also follow the TOML format. Also make sure your config options are under the right table - for example, to set your temperature type, you must set it under the [flags] table: [flags] temperature_type = \"f\" Meanwhile, if you want to set a custom color scheme, it would be under the [colors] table: [colors] table_header_color = \"LightBlue\"","title":"Check the formatting"},{"location":"troubleshooting/#check-the-configuration-file-location","text":"Make sure bottom is reading the right configuration file. By default, bottom looks for config files at these locations: OS Default Config Location macOS $HOME/Library/Application Support/bottom/bottom.toml ~/.config/bottom/bottom.toml $XDG_CONFIG_HOME/bottom/bottom.toml Linux ~/.config/bottom/bottom.toml $XDG_CONFIG_HOME/bottom/bottom.toml Windows C:\\Users\\\\AppData\\Roaming\\bottom\\bottom.toml If you want to use a config file in another location, use the --config or -C flags along with the path to the configuration file, like so: btm -C path_to_config","title":"Check the configuration file location"},{"location":"troubleshooting/#my-installation-through-snap-has-some-widgets-that-are-blankshow-no-data","text":"Make sure bottom is given the correct permissions in order to collect data. Snapcraft explains how to do so, but the TL;DR is: sudo snap connect bottom:mount-observe sudo snap connect bottom:hardware-observe sudo snap connect bottom:system-observe sudo snap connect bottom:process-control","title":"My installation through snap has some widgets that are blank/show no data"},{"location":"configuration/command-line-flags/","text":"Command-line Flags Warning This section is in progress, and is just copied from the old documentation. The following flags can be provided to bottom in the command line to change the behaviour of the program (run btm --help for more information on each flag): Flag Behaviour --autohide_time Temporarily shows the time scale in graphs. -b, --basic Hides graphs and uses a more basic look. --battery Shows the battery widget. -S, --case_sensitive Enables case sensitivity by default. -c, --celsius Sets the temperature type to Celsius. --color Use a color scheme, use --help for supported values. -C, --config Sets the location of the config file. -u, --current_usage Sets process CPU% to be based on current CPU%. -t, --default_time_value Default time value for graphs in ms. --default_widget_count Sets the n'th selected widget type as the default. --default_widget_type Sets the default widget type, use --help for more info. --disable_advanced_kill Hides advanced options to stop a process on Unix-like systems. --disable_click Disables mouse clicks. -m, --dot_marker Uses a dot marker for graphs. -f, --fahrenheit Sets the temperature type to Fahrenheit. -g, --group Groups processes with the same name by default. -h, --help Prints help information. Use --help for more info. -a, --hide_avg_cpu Hides the average CPU usage. --hide_table_gap Hides the spacing between table headers and entries. --hide_time Hides the time scale. -k, --kelvin Sets the temperature type to Kelvin. -l, --left_legend Puts the CPU chart legend to the left side. --mem_as_value Defaults to showing process memory usage by value. --network_use_binary_prefix Displays the network widget with binary prefixes. --network_use_bytes Displays the network widget using bytes. --network_use_log Displays the network widget with a log scale. --process_command Show processes as their commands by default. -r, --rate Sets a refresh rate in ms. -R, --regex Enables regex by default. --show_table_scroll_position Shows the scroll position tracker in table widgets. -d, --time_delta The amount in ms changed upon zooming. -T, --tree Defaults to showing the process widget in tree mode. --use_old_network_legend DEPRECATED - uses the older network legend. -V, --version Prints version information. -W, --whole_word Enables whole-word matching by default.","title":"Command-line Flags"},{"location":"configuration/command-line-flags/#command-line-flags","text":"Warning This section is in progress, and is just copied from the old documentation. The following flags can be provided to bottom in the command line to change the behaviour of the program (run btm --help for more information on each flag): Flag Behaviour --autohide_time Temporarily shows the time scale in graphs. -b, --basic Hides graphs and uses a more basic look. --battery Shows the battery widget. -S, --case_sensitive Enables case sensitivity by default. -c, --celsius Sets the temperature type to Celsius. --color Use a color scheme, use --help for supported values. -C, --config Sets the location of the config file. -u, --current_usage Sets process CPU% to be based on current CPU%. -t, --default_time_value Default time value for graphs in ms. --default_widget_count Sets the n'th selected widget type as the default. --default_widget_type Sets the default widget type, use --help for more info. --disable_advanced_kill Hides advanced options to stop a process on Unix-like systems. --disable_click Disables mouse clicks. -m, --dot_marker Uses a dot marker for graphs. -f, --fahrenheit Sets the temperature type to Fahrenheit. -g, --group Groups processes with the same name by default. -h, --help Prints help information. Use --help for more info. -a, --hide_avg_cpu Hides the average CPU usage. --hide_table_gap Hides the spacing between table headers and entries. --hide_time Hides the time scale. -k, --kelvin Sets the temperature type to Kelvin. -l, --left_legend Puts the CPU chart legend to the left side. --mem_as_value Defaults to showing process memory usage by value. --network_use_binary_prefix Displays the network widget with binary prefixes. --network_use_bytes Displays the network widget using bytes. --network_use_log Displays the network widget with a log scale. --process_command Show processes as their commands by default. -r, --rate Sets a refresh rate in ms. -R, --regex Enables regex by default. --show_table_scroll_position Shows the scroll position tracker in table widgets. -d, --time_delta The amount in ms changed upon zooming. -T, --tree Defaults to showing the process widget in tree mode. --use_old_network_legend DEPRECATED - uses the older network legend. -V, --version Prints version information. -W, --whole_word Enables whole-word matching by default.","title":"Command-line Flags"},{"location":"configuration/config-file/data-filtering/","text":"Data Filtering Warning This section is in progress, and is just copied from the old documentation. You can hide specific disks, temperature sensors, and networks by name in the config file via disk_filter and mount_filter , temp_filter , and net_filter respectively. Regex ( regex = true ), case-sensitivity ( case_sensitive = true ), and matching only if the entire word matches ( whole_word = true ) are supported, but are off by default. Filters default to denying entries that match and can be toggled by setting is_list_ignored to false in the config file. For example, here's the disk widget with no filter: The following in the config file would filter out some entries by disk name: [disk_filter] is_list_ignored = true list = [ \"/dev/sda\" ] regex = true case_sensitive = false whole_word = false If there are two potentially conflicting filters (i.e. when you are using both a disk and mount filter), the filter that explicitly allows an entry takes precedence over a filter that explicitly denies one. So for example, let's say we set a disk filter accepting anything with /dev/sda , but deny anything with /mnt/.* or / . So to do so, we write in the config file: [disk_filter] is_list_ignored = false list = [ \"/dev/sda\" ] regex = true case_sensitive = false whole_word = false [mount_filter] is_list_ignored = true list = [ \"/mnt/.*\" , \"/\" ] regex = true case_sensitive = false whole_word = true This gives us:","title":"Data Filtering"},{"location":"configuration/config-file/data-filtering/#data-filtering","text":"Warning This section is in progress, and is just copied from the old documentation. You can hide specific disks, temperature sensors, and networks by name in the config file via disk_filter and mount_filter , temp_filter , and net_filter respectively. Regex ( regex = true ), case-sensitivity ( case_sensitive = true ), and matching only if the entire word matches ( whole_word = true ) are supported, but are off by default. Filters default to denying entries that match and can be toggled by setting is_list_ignored to false in the config file. For example, here's the disk widget with no filter: The following in the config file would filter out some entries by disk name: [disk_filter] is_list_ignored = true list = [ \"/dev/sda\" ] regex = true case_sensitive = false whole_word = false If there are two potentially conflicting filters (i.e. when you are using both a disk and mount filter), the filter that explicitly allows an entry takes precedence over a filter that explicitly denies one. So for example, let's say we set a disk filter accepting anything with /dev/sda , but deny anything with /mnt/.* or / . So to do so, we write in the config file: [disk_filter] is_list_ignored = false list = [ \"/dev/sda\" ] regex = true case_sensitive = false whole_word = false [mount_filter] is_list_ignored = true list = [ \"/mnt/.*\" , \"/\" ] regex = true case_sensitive = false whole_word = true This gives us:","title":"Data Filtering"},{"location":"configuration/config-file/default-config/","text":"Default Config A default config file is automatically generated at the following locations that bottom checks by default: OS Default Config Location macOS $HOME/Library/Application Support/bottom/bottom.toml ~/.config/bottom/bottom.toml $XDG_CONFIG_HOME/bottom/bottom.toml Linux ~/.config/bottom/bottom.toml $XDG_CONFIG_HOME/bottom/bottom.toml Windows C:\\Users\\\\AppData\\Roaming\\bottom\\bottom.toml Furthermore, if a custom config path that does not exist is given (using -C or --config ), bottom will attempt to create a default config file at that location.","title":"Default Config"},{"location":"configuration/config-file/default-config/#default-config","text":"A default config file is automatically generated at the following locations that bottom checks by default: OS Default Config Location macOS $HOME/Library/Application Support/bottom/bottom.toml ~/.config/bottom/bottom.toml $XDG_CONFIG_HOME/bottom/bottom.toml Linux ~/.config/bottom/bottom.toml $XDG_CONFIG_HOME/bottom/bottom.toml Windows C:\\Users\\\\AppData\\Roaming\\bottom\\bottom.toml Furthermore, if a custom config path that does not exist is given (using -C or --config ), bottom will attempt to create a default config file at that location.","title":"Default Config"},{"location":"configuration/config-file/flags/","text":"Flags Warning This section is in progress, and is just copied from the old documentation. Most of the command line flags have config file equivalents to avoid having to type them out each time: Field Type Functionality hide_avg_cpu Boolean Hides the average CPU usage. dot_marker Boolean Uses a dot marker for graphs. left_legend Boolean Puts the CPU chart legend to the left side. current_usage Boolean Sets process CPU% to be based on current CPU%. group_processes Boolean Groups processes with the same name by default. case_sensitive Boolean Enables case sensitivity by default. whole_word Boolean Enables whole-word matching by default. regex Boolean Enables regex by default. basic Boolean Hides graphs and uses a more basic look. use_old_network_legend Boolean DEPRECATED - uses the older network legend. battery Boolean Shows the battery widget. rate Unsigned Int (represents milliseconds) Sets a refresh rate in ms. default_time_value Unsigned Int (represents milliseconds) Default time value for graphs in ms. time_delta Unsigned Int (represents milliseconds) The amount in ms changed upon zooming. hide_time Boolean Hides the time scale. temperature_type String (one of [\"k\", \"f\", \"c\", \"kelvin\", \"fahrenheit\", \"celsius\"]) Sets the temperature unit type. default_widget_type String (one of [\"cpu\", \"proc\", \"net\", \"temp\", \"mem\", \"disk\"], same as layout options) Sets the default widget type, use --help for more info. default_widget_count Unsigned Int (represents which default_widget_type ) Sets the n'th selected widget type as the default. disable_click Boolean Disables mouse clicks. color String (one of [\"default\", \"default-light\", \"gruvbox\", \"gruvbox-light\", \"nord\", \"nord-light\"]) Use a color scheme, use --help for supported values. mem_as_value Boolean Defaults to showing process memory usage by value. tree Boolean Defaults to showing the process widget in tree mode. show_table_scroll_position Boolean Shows the scroll position tracker in table widgets. process_command Boolean Show processes as their commands by default. disable_advanced_kill Boolean Hides advanced options to stop a process on Unix-like systems. network_use_binary_prefix Boolean Displays the network widget with binary prefixes. network_use_bytes Boolean Displays the network widget using bytes. network_use_log Boolean Displays the network widget with a log scale.","title":"Flags"},{"location":"configuration/config-file/flags/#flags","text":"Warning This section is in progress, and is just copied from the old documentation. Most of the command line flags have config file equivalents to avoid having to type them out each time: Field Type Functionality hide_avg_cpu Boolean Hides the average CPU usage. dot_marker Boolean Uses a dot marker for graphs. left_legend Boolean Puts the CPU chart legend to the left side. current_usage Boolean Sets process CPU% to be based on current CPU%. group_processes Boolean Groups processes with the same name by default. case_sensitive Boolean Enables case sensitivity by default. whole_word Boolean Enables whole-word matching by default. regex Boolean Enables regex by default. basic Boolean Hides graphs and uses a more basic look. use_old_network_legend Boolean DEPRECATED - uses the older network legend. battery Boolean Shows the battery widget. rate Unsigned Int (represents milliseconds) Sets a refresh rate in ms. default_time_value Unsigned Int (represents milliseconds) Default time value for graphs in ms. time_delta Unsigned Int (represents milliseconds) The amount in ms changed upon zooming. hide_time Boolean Hides the time scale. temperature_type String (one of [\"k\", \"f\", \"c\", \"kelvin\", \"fahrenheit\", \"celsius\"]) Sets the temperature unit type. default_widget_type String (one of [\"cpu\", \"proc\", \"net\", \"temp\", \"mem\", \"disk\"], same as layout options) Sets the default widget type, use --help for more info. default_widget_count Unsigned Int (represents which default_widget_type ) Sets the n'th selected widget type as the default. disable_click Boolean Disables mouse clicks. color String (one of [\"default\", \"default-light\", \"gruvbox\", \"gruvbox-light\", \"nord\", \"nord-light\"]) Use a color scheme, use --help for supported values. mem_as_value Boolean Defaults to showing process memory usage by value. tree Boolean Defaults to showing the process widget in tree mode. show_table_scroll_position Boolean Shows the scroll position tracker in table widgets. process_command Boolean Show processes as their commands by default. disable_advanced_kill Boolean Hides advanced options to stop a process on Unix-like systems. network_use_binary_prefix Boolean Displays the network widget with binary prefixes. network_use_bytes Boolean Displays the network widget using bytes. network_use_log Boolean Displays the network widget with a log scale.","title":"Flags"},{"location":"configuration/config-file/layout/","text":"Layout Warning This section is in progress, and is just copied from the old documentation. bottom supports customizable layouts via the config file. Currently, layouts are controlled by using TOML objects and arrays. For example, given the sample layout: [[row]] [[row.child]] type = \"cpu\" [[row]] ratio = 2 [[row.child]] ratio = 4 type = \"mem\" [[row.child]] ratio = 3 [[row.child.child]] type = \"temp\" [[row.child.child]] type = \"disk\" This would give a layout that has two rows, with a 1:2 ratio. The first row has only the CPU widget. The second row is split into two columns with a 4:3 ratio. The first column contains the memory widget. The second column is split into two rows with a 1:1 ratio. The first is the temperature widget, the second is the disk widget. This is what the layout would look like when run: Each [[row]] represents a row in the layout. A row can have any number of child values. Each [[row.child]] represents either a column or a widget . A column can have any number of child values as well. Each [[row.child.child]] represents a widget . A widget is represented by having a type field set to a string. The following type values are supported: \"cpu\" CPU chart and legend \"mem\", \"memory\" Memory chart \"net\", \"network\" Network chart and legend \"proc\", \"process\", \"processes\" Process table and search \"temp\", \"temperature\" Temperature table \"disk\" Disk table \"empty\" An empty space \"batt\", \"battery\" Battery statistics Each component of the layout accepts a ratio value. If this is not set, it defaults to 1. Furthermore, you can have duplicate widgets. For an example, look at the default config , which contains the default layout.","title":"Layout"},{"location":"configuration/config-file/layout/#layout","text":"Warning This section is in progress, and is just copied from the old documentation. bottom supports customizable layouts via the config file. Currently, layouts are controlled by using TOML objects and arrays. For example, given the sample layout: [[row]] [[row.child]] type = \"cpu\" [[row]] ratio = 2 [[row.child]] ratio = 4 type = \"mem\" [[row.child]] ratio = 3 [[row.child.child]] type = \"temp\" [[row.child.child]] type = \"disk\" This would give a layout that has two rows, with a 1:2 ratio. The first row has only the CPU widget. The second row is split into two columns with a 4:3 ratio. The first column contains the memory widget. The second column is split into two rows with a 1:1 ratio. The first is the temperature widget, the second is the disk widget. This is what the layout would look like when run: Each [[row]] represents a row in the layout. A row can have any number of child values. Each [[row.child]] represents either a column or a widget . A column can have any number of child values as well. Each [[row.child.child]] represents a widget . A widget is represented by having a type field set to a string. The following type values are supported: \"cpu\" CPU chart and legend \"mem\", \"memory\" Memory chart \"net\", \"network\" Network chart and legend \"proc\", \"process\", \"processes\" Process table and search \"temp\", \"temperature\" Temperature table \"disk\" Disk table \"empty\" An empty space \"batt\", \"battery\" Battery statistics Each component of the layout accepts a ratio value. If this is not set, it defaults to 1. Furthermore, you can have duplicate widgets. For an example, look at the default config , which contains the default layout.","title":"Layout"},{"location":"configuration/config-file/theming/","text":"Theming Warning This section is in progress, and is just copied from the old documentation. The config file can be used to set custom colours for parts of the application under the [colors] object. The following labels are customizable with strings that are hex colours, RGB colours, or specific named colours. Supported named colours are one of the following strings: Reset, Black, Red, Green, Yellow, Blue, Magenta, Cyan, Gray, DarkGray, LightRed, LightGreen, LightYellow, LightBlue, LightMagenta, LightCyan, White . Labels Details Example Table header colours Colour of table headers table_header_color=\"255, 255, 255\" CPU colour per core Colour of each core. Read in order. cpu_core_colors=[\"#ffffff\", \"white\", \"255, 255, 255\"] Average CPU colour The average CPU color avg_cpu_color=\"White\" All CPUs colour The colour for the \"All\" CPU label all_cpu_color=\"White\" RAM The colour RAM will use ram_color=\"#ffffff\" SWAP The colour SWAP will use swap_color=\"#ffffff\" RX The colour rx will use rx_color=\"#ffffff\" TX The colour tx will use tx_color=\"#ffffff\" Widget title colour The colour of the label each widget has widget_title_color=\"#ffffff\" Border colour The colour of the border of unselected widgets border_color=\"#ffffff\" Selected border colour The colour of the border of selected widgets highlighted_border_color=\"#ffffff\" Text colour The colour of most text text_color=\"#ffffff\" Graph colour The colour of the lines and text of the graph graph_color=\"#ffffff\" Cursor colour The cursor's colour cursor_color=\"#ffffff\" Selected text colour The colour of text that is selected scroll_entry_text_color=\"#ffffff\" Selected text background colour The background colour of text that is selected scroll_entry_bg_color=\"#ffffff\" High battery level colour The colour used for a high battery level (100% to 50%) high_battery_color=\"green\" Medium battery level colour The colour used for a medium battery level (50% to 10%) medium_battery_color=\"yellow\" Low battery level colour The colour used for a low battery level (10% to 0%) low_battery_color=\"red\"","title":"Theming"},{"location":"configuration/config-file/theming/#theming","text":"Warning This section is in progress, and is just copied from the old documentation. The config file can be used to set custom colours for parts of the application under the [colors] object. The following labels are customizable with strings that are hex colours, RGB colours, or specific named colours. Supported named colours are one of the following strings: Reset, Black, Red, Green, Yellow, Blue, Magenta, Cyan, Gray, DarkGray, LightRed, LightGreen, LightYellow, LightBlue, LightMagenta, LightCyan, White . Labels Details Example Table header colours Colour of table headers table_header_color=\"255, 255, 255\" CPU colour per core Colour of each core. Read in order. cpu_core_colors=[\"#ffffff\", \"white\", \"255, 255, 255\"] Average CPU colour The average CPU color avg_cpu_color=\"White\" All CPUs colour The colour for the \"All\" CPU label all_cpu_color=\"White\" RAM The colour RAM will use ram_color=\"#ffffff\" SWAP The colour SWAP will use swap_color=\"#ffffff\" RX The colour rx will use rx_color=\"#ffffff\" TX The colour tx will use tx_color=\"#ffffff\" Widget title colour The colour of the label each widget has widget_title_color=\"#ffffff\" Border colour The colour of the border of unselected widgets border_color=\"#ffffff\" Selected border colour The colour of the border of selected widgets highlighted_border_color=\"#ffffff\" Text colour The colour of most text text_color=\"#ffffff\" Graph colour The colour of the lines and text of the graph graph_color=\"#ffffff\" Cursor colour The cursor's colour cursor_color=\"#ffffff\" Selected text colour The colour of text that is selected scroll_entry_text_color=\"#ffffff\" Selected text background colour The background colour of text that is selected scroll_entry_bg_color=\"#ffffff\" High battery level colour The colour used for a high battery level (100% to 50%) high_battery_color=\"green\" Medium battery level colour The colour used for a medium battery level (50% to 10%) medium_battery_color=\"yellow\" Low battery level colour The colour used for a low battery level (10% to 0%) low_battery_color=\"red\"","title":"Theming"},{"location":"contribution/development/","text":"Development Warning This section is currently WIP. Dev Environment Logging Testing","title":"Development"},{"location":"contribution/development/#development","text":"Warning This section is currently WIP.","title":"Development"},{"location":"contribution/development/#dev-environment","text":"","title":"Dev Environment"},{"location":"contribution/development/#logging","text":"","title":"Logging"},{"location":"contribution/development/#testing","text":"","title":"Testing"},{"location":"contribution/documentation/","text":"Documentation When should documentation changes be done? Whenever a new feature is added, a bug is fixed, or a breaking change is made, it should be documented where appropriate (ex: README.md , changelog, etc.) New methods of installation are always appreciated and should be documented What pages need documentation? There are a few areas where documentation changes are often needed: The extended documentation (AKA here) The README.md The help menu inside of the application (located here ) The CHANGELOG.md How should I add documentation? Fork the repository first and make changes there. Where you're adding documentation will probably affect what you need to do: For changes to README.md and CHANGELOG.md , just follow the formatting provided and use any editor. For changes to the help menu, try to refer to the existing code within src/constants.rs on how the help menu is generated. For changes to the extended documentation, you'll want MkDocs , Material for MkDocs , and mdx_truly_sane_lists installed to provide live reloading and preview for your changes. You can do so through pip or your system's package managers. While you don't need these, it'll probably help in making and validating changes. You may also want Mike , but it isn't really needed. Once you have your documentation changes done, submit it as a pull request. For more information regarding that, refer to Issues, Pull Requests, and Discussions .","title":"Documentation"},{"location":"contribution/documentation/#documentation","text":"","title":"Documentation"},{"location":"contribution/documentation/#when-should-documentation-changes-be-done","text":"Whenever a new feature is added, a bug is fixed, or a breaking change is made, it should be documented where appropriate (ex: README.md , changelog, etc.) New methods of installation are always appreciated and should be documented","title":"When should documentation changes be done?"},{"location":"contribution/documentation/#what-pages-need-documentation","text":"There are a few areas where documentation changes are often needed: The extended documentation (AKA here) The README.md The help menu inside of the application (located here ) The CHANGELOG.md","title":"What pages need documentation?"},{"location":"contribution/documentation/#how-should-i-add-documentation","text":"Fork the repository first and make changes there. Where you're adding documentation will probably affect what you need to do: For changes to README.md and CHANGELOG.md , just follow the formatting provided and use any editor. For changes to the help menu, try to refer to the existing code within src/constants.rs on how the help menu is generated. For changes to the extended documentation, you'll want MkDocs , Material for MkDocs , and mdx_truly_sane_lists installed to provide live reloading and preview for your changes. You can do so through pip or your system's package managers. While you don't need these, it'll probably help in making and validating changes. You may also want Mike , but it isn't really needed. Once you have your documentation changes done, submit it as a pull request. For more information regarding that, refer to Issues, Pull Requests, and Discussions .","title":"How should I add documentation?"},{"location":"contribution/issues-and-pull-requests/","text":"Issues, Pull Requests, and Discussions Contribution in any way is appreciated, whether it is reporting problems, fixing bugs, implementing features, improving the documentation, etc. Discussions Discussions are open in the repo . As for the difference between discussions and issues: Open an issue if what you have enough information to properly fill out any details needed for a report or request. Open a discussion otherwise (e.g. asking a question). Opening an issue Bug reports When filing a bug report, please use the bug report template and fill in as much as you can. It is incredibly difficult for a maintainer to fix a bug when it cannot be reproduced, and giving as much detail as possible generally helps to make it easier to reproduce the problem! Feature requests Please use the feature request template and fill it out. Remember to give details about what the feature is along with why you think this suggestion will be useful. Also please check whether or not an existing issue has covered your specific feature request! Pull requests The expected workflow for a pull request is: Fork the project. Make your changes. Make any documentation changes if necessary - if you add a new feature, it'll probably need documentation changes. See here for tips on documentation. Commit and create a pull request to merge into the master branch. Please follow the pull request template . Wait for the tests to pass. These consist of clippy lints, rustfmt checks, and basic tests. If you are a first time contributor, you may need to skip this step for now, as GitHub Actions requires approval to run. Ask a maintainer to review your pull request. If changes are suggested or any comments are made, they should probably be addressed. Once it looks good, it'll be merged!","title":"Issues, Pull Requests, and Discussions"},{"location":"contribution/issues-and-pull-requests/#issues-pull-requests-and-discussions","text":"Contribution in any way is appreciated, whether it is reporting problems, fixing bugs, implementing features, improving the documentation, etc.","title":"Issues, Pull Requests, and Discussions"},{"location":"contribution/issues-and-pull-requests/#discussions","text":"Discussions are open in the repo . As for the difference between discussions and issues: Open an issue if what you have enough information to properly fill out any details needed for a report or request. Open a discussion otherwise (e.g. asking a question).","title":"Discussions"},{"location":"contribution/issues-and-pull-requests/#opening-an-issue","text":"","title":"Opening an issue"},{"location":"contribution/issues-and-pull-requests/#bug-reports","text":"When filing a bug report, please use the bug report template and fill in as much as you can. It is incredibly difficult for a maintainer to fix a bug when it cannot be reproduced, and giving as much detail as possible generally helps to make it easier to reproduce the problem!","title":"Bug reports"},{"location":"contribution/issues-and-pull-requests/#feature-requests","text":"Please use the feature request template and fill it out. Remember to give details about what the feature is along with why you think this suggestion will be useful. Also please check whether or not an existing issue has covered your specific feature request!","title":"Feature requests"},{"location":"contribution/issues-and-pull-requests/#pull-requests","text":"The expected workflow for a pull request is: Fork the project. Make your changes. Make any documentation changes if necessary - if you add a new feature, it'll probably need documentation changes. See here for tips on documentation. Commit and create a pull request to merge into the master branch. Please follow the pull request template . Wait for the tests to pass. These consist of clippy lints, rustfmt checks, and basic tests. If you are a first time contributor, you may need to skip this step for now, as GitHub Actions requires approval to run. Ask a maintainer to review your pull request. If changes are suggested or any comments are made, they should probably be addressed. Once it looks good, it'll be merged!","title":"Pull requests"},{"location":"contribution/packaging-and-distribution/","text":"Packaging and Distribution Package maintainers are always welcome and appreciated! Here's some info on how one can help with package distribution and bottom. Pre-built binaries The latest stable release can be found here , where you can find pre-built binaries in either a tar.gz or zip format. Binaries here also include automatically generated shell completion files for zsh, bash, fish, and Powershell, which you may want to also install during the packaging process. You can also find a nightly build in the releases page , built every day at 00:00 UTC off of the master branch. Building manually If you want to manually build bottom rather than distributing a pre-built binary, you'll need the most recent version of stable Rust, which you can get with: rustup update stable You'll then want to build with: cargo build --release --locked Completion files are automatically generated during this process, and are located in the directory target/release/build/bottom-/out . Note there may be multiple folders that look like target/release/build/bottom- . To programmatically determine which is the right folder, you might want to use something like: $( ls target/release/build/bottom-*/out/btm.bash | head -n1 | xargs dirname ) You may find the Arch package install script template useful as a reference. Adding an installation source Once you've finished your installation source, if you want to mention it in the main bottom repo, fork the repo and add the installation method and any details to the README.md file under the Installation section. Once that's done, open a pull request - these will usually be approved of very quickly. You can find more info on the contribution process here .","title":"Packaging and Distribution"},{"location":"contribution/packaging-and-distribution/#packaging-and-distribution","text":"Package maintainers are always welcome and appreciated! Here's some info on how one can help with package distribution and bottom.","title":"Packaging and Distribution"},{"location":"contribution/packaging-and-distribution/#pre-built-binaries","text":"The latest stable release can be found here , where you can find pre-built binaries in either a tar.gz or zip format. Binaries here also include automatically generated shell completion files for zsh, bash, fish, and Powershell, which you may want to also install during the packaging process. You can also find a nightly build in the releases page , built every day at 00:00 UTC off of the master branch.","title":"Pre-built binaries"},{"location":"contribution/packaging-and-distribution/#building-manually","text":"If you want to manually build bottom rather than distributing a pre-built binary, you'll need the most recent version of stable Rust, which you can get with: rustup update stable You'll then want to build with: cargo build --release --locked Completion files are automatically generated during this process, and are located in the directory target/release/build/bottom-/out . Note there may be multiple folders that look like target/release/build/bottom- . To programmatically determine which is the right folder, you might want to use something like: $( ls target/release/build/bottom-*/out/btm.bash | head -n1 | xargs dirname ) You may find the Arch package install script template useful as a reference.","title":"Building manually"},{"location":"contribution/packaging-and-distribution/#adding-an-installation-source","text":"Once you've finished your installation source, if you want to mention it in the main bottom repo, fork the repo and add the installation method and any details to the README.md file under the Installation section. Once that's done, open a pull request - these will usually be approved of very quickly. You can find more info on the contribution process here .","title":"Adding an installation source"},{"location":"support/official/","text":"Official support bottom officially supports the following operating systems and corresponding architectures: macOS ( x86_64 ) Linux ( x86_64 , i686 , aarch64 ) Windows ( x86_64 , i686 ) These platforms are tested to work (with caveats, see below) and issues on these platforms will be fixed if possible. Furthermore, binaries are expected to be built and tested using the most recent version of stable Rust - if you are manually building bottom from the repo/source, then please try that as well. Known problems Linux If you're using Linux via WSL or WSL2: You may have issues with getting memory data. Temperature sensors may not be correctly reported. WSL2 will not match Windows' own Task Manager in terms of data. Windows The temperature widget seems to require admin privileges in some cases to get data. The battery widget seems to have issues with dual battery systems, like some Thinkpads. If you are using WSL or WSL2: You may have issues with getting memory data. Temperature sensors may not be correctly reported. WSL2 will not match Windows' own Task Manager in terms of data. macOS The process widget may require elevated access (ex: sudo btm ) to gather all data in some cases. Please note that you should be certain that you trust any software you grant root privileges.","title":"Official Support"},{"location":"support/official/#official-support","text":"bottom officially supports the following operating systems and corresponding architectures: macOS ( x86_64 ) Linux ( x86_64 , i686 , aarch64 ) Windows ( x86_64 , i686 ) These platforms are tested to work (with caveats, see below) and issues on these platforms will be fixed if possible. Furthermore, binaries are expected to be built and tested using the most recent version of stable Rust - if you are manually building bottom from the repo/source, then please try that as well.","title":"Official support"},{"location":"support/official/#known-problems","text":"","title":"Known problems"},{"location":"support/official/#linux","text":"If you're using Linux via WSL or WSL2: You may have issues with getting memory data. Temperature sensors may not be correctly reported. WSL2 will not match Windows' own Task Manager in terms of data.","title":"Linux"},{"location":"support/official/#windows","text":"The temperature widget seems to require admin privileges in some cases to get data. The battery widget seems to have issues with dual battery systems, like some Thinkpads. If you are using WSL or WSL2: You may have issues with getting memory data. Temperature sensors may not be correctly reported. WSL2 will not match Windows' own Task Manager in terms of data.","title":"Windows"},{"location":"support/official/#macos","text":"The process widget may require elevated access (ex: sudo btm ) to gather all data in some cases. Please note that you should be certain that you trust any software you grant root privileges.","title":"macOS"},{"location":"support/unofficial/","text":"Unofficial support Systems and architectures that aren't officially supported may still work, but there are no guarantees on how much will work. For example, it might only compile, or it might run with bugs/broken features. Furthermore, while it will depend on the problem at the end of the day, issues on unsupported platforms are likely to go unfixed . Unofficially supported platforms known to compile/work: Linux on ARMv7 and ARMv6 (tested to compile in CI ) macOS on AArch64 (tested to compile in CI ) Linux on PowerPC 64 LE (tested to compile in CI ) Linux on an RISC-V (tested to compile in CI , tested to run on an Allwinner D1 Nezha ) Known problems M1-based macOS devices may have issues with temperature sensors not returning anything.","title":"Unofficial Support"},{"location":"support/unofficial/#unofficial-support","text":"Systems and architectures that aren't officially supported may still work, but there are no guarantees on how much will work. For example, it might only compile, or it might run with bugs/broken features. Furthermore, while it will depend on the problem at the end of the day, issues on unsupported platforms are likely to go unfixed . Unofficially supported platforms known to compile/work: Linux on ARMv7 and ARMv6 (tested to compile in CI ) macOS on AArch64 (tested to compile in CI ) Linux on PowerPC 64 LE (tested to compile in CI ) Linux on an RISC-V (tested to compile in CI , tested to run on an Allwinner D1 Nezha )","title":"Unofficial support"},{"location":"support/unofficial/#known-problems","text":"M1-based macOS devices may have issues with temperature sensors not returning anything.","title":"Known problems"},{"location":"usage/basic-mode/","text":"Basic Mode Basic mode is a special layout that removes all of the graphs and provides an interface that resembles (a very stripped-down version of) htop. Basic mode can be enabled either through a command line flag: btm -b # or btm --basic or through the config: [flags] basic = true Notes In this mode, widgets that use tables (temperatures, processes, disks, and batteries) are only shown one at a time. One can switch between these widgets either by clicking the arrow buttons or by using the general widget selection shortcuts (for example, Ctrl + Left or H ) to switch which widget is shown. Also note that in this mode, widget expansion and custom layouts are disabled. Key bindings Basic mode follows the same key bindings as normal, barring widget expansion being disabled, and that the % key while selecting the memory widget toggles between total usage and percentage.","title":"Basic Mode"},{"location":"usage/basic-mode/#basic-mode","text":"Basic mode is a special layout that removes all of the graphs and provides an interface that resembles (a very stripped-down version of) htop. Basic mode can be enabled either through a command line flag: btm -b # or btm --basic or through the config: [flags] basic = true","title":"Basic Mode"},{"location":"usage/basic-mode/#notes","text":"In this mode, widgets that use tables (temperatures, processes, disks, and batteries) are only shown one at a time. One can switch between these widgets either by clicking the arrow buttons or by using the general widget selection shortcuts (for example, Ctrl + Left or H ) to switch which widget is shown. Also note that in this mode, widget expansion and custom layouts are disabled.","title":"Notes"},{"location":"usage/basic-mode/#key-bindings","text":"Basic mode follows the same key bindings as normal, barring widget expansion being disabled, and that the % key while selecting the memory widget toggles between total usage and percentage.","title":"Key bindings"},{"location":"usage/general-usage/","text":"General Usage You can run bottom with: btm For help regarding the command-line flags, use: # For a simple overview of flags btm -h # For more details btm --help Features Expansion By default, bottom is somewhat like a dashboard - a bunch of different widgets, all showing different things, and they all cram together to fit into one terminal. If you instead just want to see one widget - maybe you want to look at a graph in more detail, for example - you can \"expand\" the currently selected widget using the e key, which will hide all other widgets and make that widget take up all available terminal space. You can leave this state by either pressing e again or pressing Esc . Widget selection To allow for widget-specific keybindings and expansion, there is the idea of widget selection in bottom, where you can focus on a specific widget to work with it. This can be done with the mouse (just click on the widget of interest) or keyboard (ex: Ctrl + Direction , see Key bindings for alternatives). Key bindings These are global or common keyboard shortcuts for the application, which you can see in-app through the ? shortcut. Note that key bindings are generally case-sensitive. Binding Action q , Ctrl + c Quit Esc Close dialog windows, search, widgets, or exit expanded mode Ctrl + r Reset display and any collected data f Freeze/unfreeze updating with new data ? Open help menu e Toggle expanding the currently selected widget Ctrl + Up Shift + Up K W Select the widget above Ctrl + Down Shift + Down J S Select the widget below Ctrl + Left Shift + Left H A Select the widget on the left Ctrl + Right Shift + Right L D Select the widget on the right Up , k Move up within a widget Down , j Move down within a widget Left h Alt + h Move left within a widget Right l Alt + l Move right within a widget g + g , Home Jump to the first entry G , End Jump to the last entry Page Up , Page Down Scroll up/down a table by a page Mouse bindings Binding Action Left Button Selects the widget","title":"General Usage"},{"location":"usage/general-usage/#general-usage","text":"You can run bottom with: btm For help regarding the command-line flags, use: # For a simple overview of flags btm -h # For more details btm --help","title":"General Usage"},{"location":"usage/general-usage/#features","text":"","title":"Features"},{"location":"usage/general-usage/#expansion","text":"By default, bottom is somewhat like a dashboard - a bunch of different widgets, all showing different things, and they all cram together to fit into one terminal. If you instead just want to see one widget - maybe you want to look at a graph in more detail, for example - you can \"expand\" the currently selected widget using the e key, which will hide all other widgets and make that widget take up all available terminal space. You can leave this state by either pressing e again or pressing Esc .","title":"Expansion"},{"location":"usage/general-usage/#widget-selection","text":"To allow for widget-specific keybindings and expansion, there is the idea of widget selection in bottom, where you can focus on a specific widget to work with it. This can be done with the mouse (just click on the widget of interest) or keyboard (ex: Ctrl + Direction , see Key bindings for alternatives).","title":"Widget selection"},{"location":"usage/general-usage/#key-bindings","text":"These are global or common keyboard shortcuts for the application, which you can see in-app through the ? shortcut. Note that key bindings are generally case-sensitive. Binding Action q , Ctrl + c Quit Esc Close dialog windows, search, widgets, or exit expanded mode Ctrl + r Reset display and any collected data f Freeze/unfreeze updating with new data ? Open help menu e Toggle expanding the currently selected widget Ctrl + Up Shift + Up K W Select the widget above Ctrl + Down Shift + Down J S Select the widget below Ctrl + Left Shift + Left H A Select the widget on the left Ctrl + Right Shift + Right L D Select the widget on the right Up , k Move up within a widget Down , j Move down within a widget Left h Alt + h Move left within a widget Right l Alt + l Move right within a widget g + g , Home Jump to the first entry G , End Jump to the last entry Page Up , Page Down Scroll up/down a table by a page","title":"Key bindings"},{"location":"usage/general-usage/#mouse-bindings","text":"Binding Action Left Button Selects the widget","title":"Mouse bindings"},{"location":"usage/widgets/battery/","text":"Battery Widget Warning The battery features are unavailable if the binary is compiled with the battery feature disabled! The battery widget provides information about batteries on the system. The battery widget can be enabled through either the --battery flag, the battery = true option in a config file, or specifying the widget in a custom layout. Features The following data is displayed for batteries: Charge percent Consumption Time to empty/charge, based on the current state Battery health percent The battery widget also supports devices with multiple batteries, and you can switch between them using the keyboard or the mouse. Key bindings Note that key bindings are generally case-sensitive. Binding Action Left h Alt + h Moves to the battery entry to the left of the current one Right l Alt + l Moves to the battery entry to the right of the current one Mouse bindings Binding Action Left Button Selects a battery entry","title":"Battery Widget"},{"location":"usage/widgets/battery/#battery-widget","text":"Warning The battery features are unavailable if the binary is compiled with the battery feature disabled! The battery widget provides information about batteries on the system. The battery widget can be enabled through either the --battery flag, the battery = true option in a config file, or specifying the widget in a custom layout.","title":"Battery Widget"},{"location":"usage/widgets/battery/#features","text":"The following data is displayed for batteries: Charge percent Consumption Time to empty/charge, based on the current state Battery health percent The battery widget also supports devices with multiple batteries, and you can switch between them using the keyboard or the mouse.","title":"Features"},{"location":"usage/widgets/battery/#key-bindings","text":"Note that key bindings are generally case-sensitive. Binding Action Left h Alt + h Moves to the battery entry to the left of the current one Right l Alt + l Moves to the battery entry to the right of the current one","title":"Key bindings"},{"location":"usage/widgets/battery/#mouse-bindings","text":"Binding Action Left Button Selects a battery entry","title":"Mouse bindings"},{"location":"usage/widgets/cpu/","text":"CPU Widget The CPU widget displays a visual representation of CPU usage over a time range. Features The CPU widget is composed of two parts: the graph and the legend: The graph displays the usage data for the currently selected entry as a percentage The legend displays all available entries that can be displayed on the graph along with their last recorded use percentage (except for the \"All\" option) Users can scroll through the legend using either the keyboard or mouse to select which entry to display on the graph. The \"All\" option shows every entry at the same time, though this may get a bit hard to follow if you have a large number of cores/threads. One can also adjust the displayed time range through either the keyboard or mouse, with a range of 30s to 600s. Key bindings Note that key bindings are generally case-sensitive. Graph Binding Action + Zoom in on chart (decrease time range) - Zoom out on chart (increase time range) = Reset zoom Legend Binding Action Up , k Move up within a widget Down , j Move down within a widget g + g , Home Jump to the first entry in the legend G , End Jump to the last entry in the legend Mouse bindings Graph Binding Action Scroll Scrolling up or down zooms in or out of the graph respectively Legend Binding Action Scroll Scroll through options to display in the graph Left Button Selects a CPU thread/average to show in the graph","title":"CPU Widget"},{"location":"usage/widgets/cpu/#cpu-widget","text":"The CPU widget displays a visual representation of CPU usage over a time range.","title":"CPU Widget"},{"location":"usage/widgets/cpu/#features","text":"The CPU widget is composed of two parts: the graph and the legend: The graph displays the usage data for the currently selected entry as a percentage The legend displays all available entries that can be displayed on the graph along with their last recorded use percentage (except for the \"All\" option) Users can scroll through the legend using either the keyboard or mouse to select which entry to display on the graph. The \"All\" option shows every entry at the same time, though this may get a bit hard to follow if you have a large number of cores/threads. One can also adjust the displayed time range through either the keyboard or mouse, with a range of 30s to 600s.","title":"Features"},{"location":"usage/widgets/cpu/#key-bindings","text":"Note that key bindings are generally case-sensitive.","title":"Key bindings"},{"location":"usage/widgets/cpu/#graph","text":"Binding Action + Zoom in on chart (decrease time range) - Zoom out on chart (increase time range) = Reset zoom","title":"Graph"},{"location":"usage/widgets/cpu/#legend","text":"Binding Action Up , k Move up within a widget Down , j Move down within a widget g + g , Home Jump to the first entry in the legend G , End Jump to the last entry in the legend","title":"Legend"},{"location":"usage/widgets/cpu/#mouse-bindings","text":"","title":"Mouse bindings"},{"location":"usage/widgets/cpu/#graph_1","text":"Binding Action Scroll Scrolling up or down zooms in or out of the graph respectively","title":"Graph"},{"location":"usage/widgets/cpu/#legend_1","text":"Binding Action Scroll Scroll through options to display in the graph Left Button Selects a CPU thread/average to show in the graph","title":"Legend"},{"location":"usage/widgets/disk/","text":"Disk Widget The disk widget provides a table of useful disk and partition information, like I/O per second and total usage. Features The disk widget provides the following information: Disk name Disk mount location Percentage of space used Amount of space left Total amount of space Read per second Write per second Key bindings Note that key bindings are generally case-sensitive. Binding Action Up , k Move up within a widget Down , j Move down within a widget g + g , Home Jump to the first entry in the table G , End Jump to the last entry in the table Mouse bindings Binding Action Left Button Selects an entry in the table","title":"Disk Widget"},{"location":"usage/widgets/disk/#disk-widget","text":"The disk widget provides a table of useful disk and partition information, like I/O per second and total usage.","title":"Disk Widget"},{"location":"usage/widgets/disk/#features","text":"The disk widget provides the following information: Disk name Disk mount location Percentage of space used Amount of space left Total amount of space Read per second Write per second","title":"Features"},{"location":"usage/widgets/disk/#key-bindings","text":"Note that key bindings are generally case-sensitive. Binding Action Up , k Move up within a widget Down , j Move down within a widget g + g , Home Jump to the first entry in the table G , End Jump to the last entry in the table","title":"Key bindings"},{"location":"usage/widgets/disk/#mouse-bindings","text":"Binding Action Left Button Selects an entry in the table","title":"Mouse bindings"},{"location":"usage/widgets/memory/","text":"Memory Widget The memory widget provides a visual representation of RAM and swap usage over time. Features The legend displays the current usage in terms of percentage and actual usage in binary units (KiB, MiB, GiB, etc.). If the total RAM or swap available is 0, then it is automatically hidden from the legend and graph. One can also adjust the displayed time range through either the keyboard or mouse, with a range of 30s to 600s. Key bindings Note that key bindings are generally case-sensitive. Binding Action + Zoom in on chart (decrease time range) - Zoom out on chart (increase time range) = Reset zoom Mouse bindings Binding Action Scroll Scrolling up or down zooms in or out of the graph respectively Calculations Memory usage is calculated using the following formula based on values from /proc/meminfo (based on htop's implementation ): MemTotal - MemFree - Buffers - (Cached + SReclaimable - Shmem) You can find more info on /proc/meminfo and its fields here .","title":"Memory Widget"},{"location":"usage/widgets/memory/#memory-widget","text":"The memory widget provides a visual representation of RAM and swap usage over time.","title":"Memory Widget"},{"location":"usage/widgets/memory/#features","text":"The legend displays the current usage in terms of percentage and actual usage in binary units (KiB, MiB, GiB, etc.). If the total RAM or swap available is 0, then it is automatically hidden from the legend and graph. One can also adjust the displayed time range through either the keyboard or mouse, with a range of 30s to 600s.","title":"Features"},{"location":"usage/widgets/memory/#key-bindings","text":"Note that key bindings are generally case-sensitive. Binding Action + Zoom in on chart (decrease time range) - Zoom out on chart (increase time range) = Reset zoom","title":"Key bindings"},{"location":"usage/widgets/memory/#mouse-bindings","text":"Binding Action Scroll Scrolling up or down zooms in or out of the graph respectively","title":"Mouse bindings"},{"location":"usage/widgets/memory/#calculations","text":"Memory usage is calculated using the following formula based on values from /proc/meminfo (based on htop's implementation ): MemTotal - MemFree - Buffers - (Cached + SReclaimable - Shmem) You can find more info on /proc/meminfo and its fields here .","title":"Calculations"},{"location":"usage/widgets/network/","text":"Network Widget The network widget provides a visual representation of network input and output per second, as well as noting the total amount received and transmitted. Features The legend displays the current reads and writes per second in bits, as well as the total amount read/written. The y-axis automatically scales based on shown read/write values, and by default, is a linear scale based on base-10 units (e.x. kilobit, gigabit, etc.). Through configuration , the read/write per second unit can be changed to bytes, while the y-axis can be changed to a log scale and/or use base-2 units (e.x. kibibit, gibibit, etc.). One can also adjust the displayed time range through either the keyboard or mouse, with a range of 30s to 600s. Key bindings Note that key bindings are generally case-sensitive. Binding Action + Zoom in on chart (decrease time range) - Zoom out on chart (increase time range) = Reset zoom Mouse bindings Binding Action Scroll Scrolling up or down zooms in or out of the graph respectively","title":"Network Widget"},{"location":"usage/widgets/network/#network-widget","text":"The network widget provides a visual representation of network input and output per second, as well as noting the total amount received and transmitted.","title":"Network Widget"},{"location":"usage/widgets/network/#features","text":"The legend displays the current reads and writes per second in bits, as well as the total amount read/written. The y-axis automatically scales based on shown read/write values, and by default, is a linear scale based on base-10 units (e.x. kilobit, gigabit, etc.). Through configuration , the read/write per second unit can be changed to bytes, while the y-axis can be changed to a log scale and/or use base-2 units (e.x. kibibit, gibibit, etc.). One can also adjust the displayed time range through either the keyboard or mouse, with a range of 30s to 600s.","title":"Features"},{"location":"usage/widgets/network/#key-bindings","text":"Note that key bindings are generally case-sensitive. Binding Action + Zoom in on chart (decrease time range) - Zoom out on chart (increase time range) = Reset zoom","title":"Key bindings"},{"location":"usage/widgets/network/#mouse-bindings","text":"Binding Action Scroll Scrolling up or down zooms in or out of the graph respectively","title":"Mouse bindings"},{"location":"usage/widgets/process/","text":"Process Widget The process widget displays a table containing information regarding a running process, along with sorting, searching, and process control features. Features The process widget has three main components: The main process table The search sub-widget (opened with Ctrl + f or / ) The sort menu sub-widget (opened with s or F6 ) By default, the main process table displays the following information for each process: PID Name of the process CPU use percentage (note this is averaged out per available thread) Memory use percentage Reads per second Writes per second Total amount read Total amount written User State Sorting The table can be sorted by clicking on the table headers, which will either sort the table by that column, or if already sorting by that column, reverse the sorting order. Alternatively, one can sort using the sort menu sub-widget, which is brought up using s or F6 , and can be controlled by arrow keys or the mouse. Grouping Pressing Tab in the table will group entries with the same name together. The PID column will be replaced with the number of entries in each group, and usage is added together when displayed. Note that the process state and user columns are disabled in this mode. Tree mode Pressing t or F5 in the table toggles tree mode in the process widget, displaying processes in regards to their parent-child process relationships. A process in tree mode can also be \"collapsed\", hiding its children and any descendants, using either the - or + keys, or double clicking on an entry. Lastly, note that in tree mode, processes cannot be grouped together due to the behaviour of the two modes somewhat clashing. Full command You can show the full command instead of just the process name by pressing P . Search Pressing / or Ctrl + f will open up the search sub-widget. By default, just typing in something will search by the process name. This search can be further enhanced by matching by case, matching the entire word, or by regex. We are able to also search for multiple things/conditions. And if our search uses a keyword, we need to use quotation marks around the term to properly search it. Lastly, we can refine our search even further based on the other columns, like PID, CPU usage, etc., as well as grouping together conditions. Keywords Note all keywords are case-insensitive. To search for a process/command that collides with a keyword, surround the term with quotes (e.x. \"cpu\" ). Keywords Example Description btm Matches by process or command name; supports regex pid pid=1044 Matches by PID; supports regex cpu cpu% cpu > 0.5 Matches the CPU column; supports comparison operators memb memb > 1000 b Matches the memory column in terms of bytes; supports comparison operators mem mem% mem < 0.5 Matches the memory column in terms of percent; supports comparison operators read r/s read = 1 mb Matches the read/s column in terms of bytes; supports comparison operators write w/s write >= 1 kb Matches the write/s column in terms of bytes; supports comparison operators tread t.read tread <= 1024 gb Matches he total read column in terms of bytes; supports comparison operators twrite t.write twrite > 1024 tb Matches the total write column in terms of bytes; supports comparison operators user user=root Matches by user; supports regex state state=running Matches by state; supports regex () ( AND ) OR Group together a condition Comparison operators Keywords Description = Checks if the values are equal > Checks if the left value is strictly greater than the right < Checks if the left value is strictly less than the right >= Checks if the left value is greater than or equal to the right <= Checks if the left value is less than or equal to the right Logical operators Note all operators are case-insensitive, and the and operator takes precedence over the or operator. Keywords Usage Description and && and && Requires both conditions to be true to match or || or || Requires at least one condition to be true to match Units All units are case-insensitive. Keywords Description B Bytes KB Kilobytes MB Megabytes GB Gigabytes TB Terabytes KiB Kibibytes MiB Mebibytes GiB Gibibytes TiB Tebibytes Key bindings Note that key bindings are generally case-sensitive. Process table Binding Action Up , k Move up within a widget Down , j Move down within a widget g + g , Home Jump to the first entry in the table G , End Jump to the last entry in the table d + d , F9 Send a kill signal to the selected process c Sort by CPU usage, press again to reverse sorting order m Sort by memory usage, press again to reverse sorting order p Sort by PID name, press again to reverse sorting order n Sort by process name, press again to reverse sorting order Tab Toggle grouping processes with the same name P Toggle between showing the full command or just the process name Ctrl + f , / Toggle showing the search sub-widget s , F6 Toggle showing the sort sub-widget I Invert the current sort % Toggle between values and percentages for memory usage t , F5 Toggle tree mode Sort sub-widget Binding Action Up , k Move up within a widget Down , j Move down within a widget g + g , Home Jump to the first entry in the table G , End Jump to the last entry in the table Esc Close the sort sub-widget Enter Sorts the corresponding process table Search sub-widget Binding Action Left h Alt + h Moves the cursor left Right l Alt + l Moves the cursor right Esc Close the search widget (retains the filter) Ctrl + a Skip to the start of the search query Ctrl + e Skip to the end of the search query Ctrl + u Clear the current search query Ctrl + w Delete a word behind the cursor Ctrl + h Delete the character behind the cursor Backspace Delete the character behind the cursor Del Delete the character at the cursor Alt + c , F1 Toggle matching case Alt + w , F2 Toggle matching the entire word Alt + r , F3 Toggle using regex Mouse bindings Process table Binding Action Scroll Selects a CPU thread/average to show in the graph Left Button Table header: Sorts/reverse sorts the table by the column Table entry: Selects an entry in the table, if in tree mode, collapses/expands the entry's children Sort sub-widget Binding Action Left Button Selects an entry in the table","title":"Process Widget"},{"location":"usage/widgets/process/#process-widget","text":"The process widget displays a table containing information regarding a running process, along with sorting, searching, and process control features.","title":"Process Widget"},{"location":"usage/widgets/process/#features","text":"The process widget has three main components: The main process table The search sub-widget (opened with Ctrl + f or / ) The sort menu sub-widget (opened with s or F6 ) By default, the main process table displays the following information for each process: PID Name of the process CPU use percentage (note this is averaged out per available thread) Memory use percentage Reads per second Writes per second Total amount read Total amount written User State","title":"Features"},{"location":"usage/widgets/process/#sorting","text":"The table can be sorted by clicking on the table headers, which will either sort the table by that column, or if already sorting by that column, reverse the sorting order. Alternatively, one can sort using the sort menu sub-widget, which is brought up using s or F6 , and can be controlled by arrow keys or the mouse.","title":"Sorting"},{"location":"usage/widgets/process/#grouping","text":"Pressing Tab in the table will group entries with the same name together. The PID column will be replaced with the number of entries in each group, and usage is added together when displayed. Note that the process state and user columns are disabled in this mode.","title":"Grouping"},{"location":"usage/widgets/process/#tree-mode","text":"Pressing t or F5 in the table toggles tree mode in the process widget, displaying processes in regards to their parent-child process relationships. A process in tree mode can also be \"collapsed\", hiding its children and any descendants, using either the - or + keys, or double clicking on an entry. Lastly, note that in tree mode, processes cannot be grouped together due to the behaviour of the two modes somewhat clashing.","title":"Tree mode"},{"location":"usage/widgets/process/#full-command","text":"You can show the full command instead of just the process name by pressing P .","title":"Full command"},{"location":"usage/widgets/process/#search","text":"Pressing / or Ctrl + f will open up the search sub-widget. By default, just typing in something will search by the process name. This search can be further enhanced by matching by case, matching the entire word, or by regex. We are able to also search for multiple things/conditions. And if our search uses a keyword, we need to use quotation marks around the term to properly search it. Lastly, we can refine our search even further based on the other columns, like PID, CPU usage, etc., as well as grouping together conditions.","title":"Search"},{"location":"usage/widgets/process/#keywords","text":"Note all keywords are case-insensitive. To search for a process/command that collides with a keyword, surround the term with quotes (e.x. \"cpu\" ). Keywords Example Description btm Matches by process or command name; supports regex pid pid=1044 Matches by PID; supports regex cpu cpu% cpu > 0.5 Matches the CPU column; supports comparison operators memb memb > 1000 b Matches the memory column in terms of bytes; supports comparison operators mem mem% mem < 0.5 Matches the memory column in terms of percent; supports comparison operators read r/s read = 1 mb Matches the read/s column in terms of bytes; supports comparison operators write w/s write >= 1 kb Matches the write/s column in terms of bytes; supports comparison operators tread t.read tread <= 1024 gb Matches he total read column in terms of bytes; supports comparison operators twrite t.write twrite > 1024 tb Matches the total write column in terms of bytes; supports comparison operators user user=root Matches by user; supports regex state state=running Matches by state; supports regex () ( AND ) OR Group together a condition","title":"Keywords"},{"location":"usage/widgets/process/#comparison-operators","text":"Keywords Description = Checks if the values are equal > Checks if the left value is strictly greater than the right < Checks if the left value is strictly less than the right >= Checks if the left value is greater than or equal to the right <= Checks if the left value is less than or equal to the right","title":"Comparison operators"},{"location":"usage/widgets/process/#logical-operators","text":"Note all operators are case-insensitive, and the and operator takes precedence over the or operator. Keywords Usage Description and && and && Requires both conditions to be true to match or || or || Requires at least one condition to be true to match","title":"Logical operators"},{"location":"usage/widgets/process/#units","text":"All units are case-insensitive. Keywords Description B Bytes KB Kilobytes MB Megabytes GB Gigabytes TB Terabytes KiB Kibibytes MiB Mebibytes GiB Gibibytes TiB Tebibytes","title":"Units"},{"location":"usage/widgets/process/#key-bindings","text":"Note that key bindings are generally case-sensitive.","title":"Key bindings"},{"location":"usage/widgets/process/#process-table","text":"Binding Action Up , k Move up within a widget Down , j Move down within a widget g + g , Home Jump to the first entry in the table G , End Jump to the last entry in the table d + d , F9 Send a kill signal to the selected process c Sort by CPU usage, press again to reverse sorting order m Sort by memory usage, press again to reverse sorting order p Sort by PID name, press again to reverse sorting order n Sort by process name, press again to reverse sorting order Tab Toggle grouping processes with the same name P Toggle between showing the full command or just the process name Ctrl + f , / Toggle showing the search sub-widget s , F6 Toggle showing the sort sub-widget I Invert the current sort % Toggle between values and percentages for memory usage t , F5 Toggle tree mode","title":"Process table"},{"location":"usage/widgets/process/#sort-sub-widget","text":"Binding Action Up , k Move up within a widget Down , j Move down within a widget g + g , Home Jump to the first entry in the table G , End Jump to the last entry in the table Esc Close the sort sub-widget Enter Sorts the corresponding process table","title":"Sort sub-widget"},{"location":"usage/widgets/process/#search-sub-widget","text":"Binding Action Left h Alt + h Moves the cursor left Right l Alt + l Moves the cursor right Esc Close the search widget (retains the filter) Ctrl + a Skip to the start of the search query Ctrl + e Skip to the end of the search query Ctrl + u Clear the current search query Ctrl + w Delete a word behind the cursor Ctrl + h Delete the character behind the cursor Backspace Delete the character behind the cursor Del Delete the character at the cursor Alt + c , F1 Toggle matching case Alt + w , F2 Toggle matching the entire word Alt + r , F3 Toggle using regex","title":"Search sub-widget"},{"location":"usage/widgets/process/#mouse-bindings","text":"","title":"Mouse bindings"},{"location":"usage/widgets/process/#process-table_1","text":"Binding Action Scroll Selects a CPU thread/average to show in the graph Left Button Table header: Sorts/reverse sorts the table by the column Table entry: Selects an entry in the table, if in tree mode, collapses/expands the entry's children","title":"Process table"},{"location":"usage/widgets/process/#sort-sub-widget_1","text":"Binding Action Left Button Selects an entry in the table","title":"Sort sub-widget"},{"location":"usage/widgets/temperature/","text":"Temperature Widget The temperature widget provides a table of temperature sensors and their current temperature. Features The temperature widget provides the sensor name as well as its current temperature. Key bindings Note that key bindings are generally case-sensitive. Binding Action Up , k Move up within a widget Down , j Move down within a widget g + g , Home Jump to the first entry in the table G , End Jump to the last entry in the table Mouse bindings Binding Action Left Button Selects an entry in the table","title":"Temperature Widget"},{"location":"usage/widgets/temperature/#temperature-widget","text":"The temperature widget provides a table of temperature sensors and their current temperature.","title":"Temperature Widget"},{"location":"usage/widgets/temperature/#features","text":"The temperature widget provides the sensor name as well as its current temperature.","title":"Features"},{"location":"usage/widgets/temperature/#key-bindings","text":"Note that key bindings are generally case-sensitive. Binding Action Up , k Move up within a widget Down , j Move down within a widget g + g , Home Jump to the first entry in the table G , End Jump to the last entry in the table","title":"Key bindings"},{"location":"usage/widgets/temperature/#mouse-bindings","text":"Binding Action Left Button Selects an entry in the table","title":"Mouse bindings"}]} \ No newline at end of file diff --git a/nightly/sitemap.xml b/nightly/sitemap.xml index 13da45f7..e152f5b3 100644 --- a/nightly/sitemap.xml +++ b/nightly/sitemap.xml @@ -2,117 +2,117 @@ https://clementtsang.github.io/bottom/nightly/ - 2022-05-07 + 2022-05-08 daily https://clementtsang.github.io/bottom/nightly/troubleshooting/ - 2022-05-07 + 2022-05-08 daily https://clementtsang.github.io/bottom/nightly/configuration/command-line-flags/ - 2022-05-07 + 2022-05-08 daily https://clementtsang.github.io/bottom/nightly/configuration/config-file/data-filtering/ - 2022-05-07 + 2022-05-08 daily https://clementtsang.github.io/bottom/nightly/configuration/config-file/default-config/ - 2022-05-07 + 2022-05-08 daily https://clementtsang.github.io/bottom/nightly/configuration/config-file/flags/ - 2022-05-07 + 2022-05-08 daily https://clementtsang.github.io/bottom/nightly/configuration/config-file/layout/ - 2022-05-07 + 2022-05-08 daily https://clementtsang.github.io/bottom/nightly/configuration/config-file/theming/ - 2022-05-07 + 2022-05-08 daily https://clementtsang.github.io/bottom/nightly/contribution/development/ - 2022-05-07 + 2022-05-08 daily https://clementtsang.github.io/bottom/nightly/contribution/documentation/ - 2022-05-07 + 2022-05-08 daily https://clementtsang.github.io/bottom/nightly/contribution/issues-and-pull-requests/ - 2022-05-07 + 2022-05-08 daily https://clementtsang.github.io/bottom/nightly/contribution/packaging-and-distribution/ - 2022-05-07 + 2022-05-08 daily https://clementtsang.github.io/bottom/nightly/support/official/ - 2022-05-07 + 2022-05-08 daily https://clementtsang.github.io/bottom/nightly/support/unofficial/ - 2022-05-07 + 2022-05-08 daily https://clementtsang.github.io/bottom/nightly/usage/basic-mode/ - 2022-05-07 + 2022-05-08 daily https://clementtsang.github.io/bottom/nightly/usage/general-usage/ - 2022-05-07 + 2022-05-08 daily https://clementtsang.github.io/bottom/nightly/usage/widgets/battery/ - 2022-05-07 + 2022-05-08 daily https://clementtsang.github.io/bottom/nightly/usage/widgets/cpu/ - 2022-05-07 + 2022-05-08 daily https://clementtsang.github.io/bottom/nightly/usage/widgets/disk/ - 2022-05-07 + 2022-05-08 daily https://clementtsang.github.io/bottom/nightly/usage/widgets/memory/ - 2022-05-07 + 2022-05-08 daily https://clementtsang.github.io/bottom/nightly/usage/widgets/network/ - 2022-05-07 + 2022-05-08 daily https://clementtsang.github.io/bottom/nightly/usage/widgets/process/ - 2022-05-07 + 2022-05-08 daily https://clementtsang.github.io/bottom/nightly/usage/widgets/temperature/ - 2022-05-07 + 2022-05-08 daily \ No newline at end of file diff --git a/nightly/sitemap.xml.gz b/nightly/sitemap.xml.gz index 7feb6ab7..27e0366b 100644 Binary files a/nightly/sitemap.xml.gz and b/nightly/sitemap.xml.gz differ diff --git a/nightly/troubleshooting/index.html b/nightly/troubleshooting/index.html index 8f8fc999..d5bb6a08 100644 --- a/nightly/troubleshooting/index.html +++ b/nightly/troubleshooting/index.html @@ -1015,21 +1015,16 @@

Troubleshooting

The graph points look broken/strange

-

It's possible that your graphs won't look great out of the box due to the reliance on braille fonts.

-

One example of this is seeing a bunch of missing font characters, caused when the terminal isn't configured properly to render braille fonts.

+

It's possible that your graphs won't look great out of the box due to the reliance on braille fonts to draw them. One +example of this is seeing a bunch of missing font characters, caused when the terminal isn't configured properly to +render braille fonts.

Example of a terminal with no braille font.
Powershell shown missing braille fonts
-

Another example is when braille is rendered as a block of dots, with the non-coloured dots also appearing. This may look strange for some users, and it is also caused by misconfiguration or missing fonts.

-
- Example of a terminal with the wrong braille font. -
Braille fonts rendering as a block of dots
-
- -

One alternative is to use the --dot_marker option to render graph charts using dots instead of the braille characters, which generally seems better supported out of the box, -at the expense of looking less intricate:

+

One alternative is to use the --dot_marker option to render graph charts using dots instead of the braille characters, +which generally seems better supported out of the box, at the expense of looking less intricate:

Example of running bottom with the dot marker flag
Example using btm --dot_marker