diff --git a/nightly/configuration/config-file/layout/index.html b/nightly/configuration/config-file/layout/index.html
index c230d2d6..bc25d7c5 100644
--- a/nightly/configuration/config-file/layout/index.html
+++ b/nightly/configuration/config-file/layout/index.html
@@ -1377,7 +1377,7 @@ represents a widget. A widget is represented by having a Each component of the layout accepts a Furthermore, you can have duplicate widgets. For an example, look at the default config, which contains the default layout. For an example, look at the default config, which contains the default layout. This section is intended for people who wish to work on/build/distribute bottom, not general users. bottom manages its own binary builds for nightly and stable release purposes. The core build workflow is handled by bottom manages its own binary builds for nightly and stable release purposes. The core build workflow is handled by The main things built are: This documentation gives a high-level overview of the build process for each part. For the most up-to-date and detailed reference, definitely refer back to the This documentation gives a high-level overview of the build process for each part. For the most up-to-date and detailed reference, definitely refer back to the Binaries are built currently for various targets. Note that not all of these are officially supported. The following general steps are performed: bottom currently has two main deploy processes to worry about: Stable: a stable deployment, triggered manually or upon creation of a valid tag. This is a GitHub action that builds binary/installer files and uploads them to a new GitHub release. Stable: a stable deployment, triggered manually or upon creation of a valid tag. This is a GitHub action that builds binary/installer files and uploads them to a new GitHub release. Furthermore, this workflow does not handle the following deployments, which must be manually handled: There are a few areas where documentation changes are often needed: Where you're adding documentation will probably affect what you need to do: For changes to Generally, changes to For changes to Generally, changes to For changes to the help menu, try to refer to the existing code within For changes to the help menu, try to refer to the existing code within For changes to the extended documentation, you'll probably want at least Python 3.11 (older versions should be fine
- though), MkDocs, Material for MkDocs,
+ For changes to the extended documentation, you'll probably want at least Python 3.11 (older and newer versions
+ should be fine), MkDocs, Material for MkDocs,
You can do so through type
ratio
value. If this is not set, it defaults to 1.Overview
-build_releases.yml
, called by a wrapper workflow for nightly and stable releases. Builds take place via GitHub Actions.build_releases.yml
, called by a wrapper workflow for nightly and stable releases. Builds take place via GitHub Actions.
-.deb
package for Debian and its derivativesbuild_releases.yml
file.build_releases.yml
file.Binaries
diff --git a/nightly/contribution/development/deploy_process/index.html b/nightly/contribution/development/deploy_process/index.html
index f7a03fe1..369024e0 100644
--- a/nightly/contribution/development/deploy_process/index.html
+++ b/nightly/contribution/development/deploy_process/index.html
@@ -1385,9 +1385,9 @@
Overview
-
What pages need documentation?
-
README.md
README.md
CHANGELOG.md
CHANGELOG.md
How should I add/update documentation?
@@ -1377,17 +1377,17 @@
-README.md
or CHANGELOG.md
README.md
and CHANGELOG.md
, just follow the formatting provided and use any editor.CHANGELOG.md
will be handled
- by a maintainer, and changes should follow the Keep a Changelog format, as
- well as link to the relevant PR or issue.README.md
and CHANGELOG.md
, just follow the formatting provided and use any editor.CHANGELOG.md
will be handled
+ by a maintainer, and the contents of the file should follow the Keep a Changelog
+ format, as well as link to the relevant PR or issues.Help menu
-src/constants.rs
on how the help menu is generated.src/constants.rs
on how the help menu is generated.Extended documentation
-mdx_truly_sane_lists
, and optionally Mike installed. These can help with
validating your changes locally.pip
or your system's package managers. If you use pip
, you can use venv to cleanly install
diff --git a/nightly/contribution/issues-and-pull-requests/index.html b/nightly/contribution/issues-and-pull-requests/index.html
index 65f5340c..61a3fa68 100644
--- a/nightly/contribution/issues-and-pull-requests/index.html
+++ b/nightly/contribution/issues-and-pull-requests/index.html
@@ -1392,7 +1392,7 @@
master
branch. Please fill out the pull request template.main
branch. Please fill out the pull request template.
tar.gz
or zip
form
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.
+day at 00:00 UTC off of themain
branch.
In both cases, we use a combination of GitHub Actions and CirrusCI (mainly for FreeBSD and macOS M1) to create our
-release binaries. build_releases.yml
+release binaries. build_releases.yml
contains the GitHub Action workflow used to do both of these, if reference is needed.
If you want to manually build bottom rather than distributing a pre-built binary, you'll need the most recent version @@ -1388,7 +1388,7 @@ of stable Rust, which you can get with:
cargo build --release --locked
bottom uses a build.rs
script to automatically generate
+
bottom uses a build.rs
script to automatically generate
a manpage and shell completions for the following shells:
This will automatically generate completion and manpage files in target/tmp/bottom/
. If you wish to regenerate the
files, modify/delete either these files or set BTM_GENERATE
to some other non-empty value to retrigger the build
script.
For more information, you may want to look at either the build.rs
-file or the binary build CI workflow.
For more information, you may want to look at either the build.rs
+file or the binary build CI workflow.
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
+the installation method and any details to the README.md
file under the Installation section, as well as a corresponding
table of contents entry. 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.
diff --git a/nightly/search/search_index.json b/nightly/search/search_index.json index 21103891..d97b9238 100644 --- a/nightly/search/search_index.json +++ b/nightly/search/search_index.json @@ -1 +1 @@ -{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"bottom
","text":"A customizable cross-platform graphical process/system monitor for the terminal, supporting Linux, macOS, and Windows. Inspired by other tools like gtop, gotop, and htop.
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!
"},{"location":"#installation","title":"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.
You can refer to the usage pages on how to use bottom (e.g. keybinds, some features, a general overview of what each widget does).
To configure bottom, refer to the configuration pages (e.g. how it behaves, how it looks).
"},{"location":"#contribution","title":"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.
"},{"location":"troubleshooting/","title":"Troubleshooting","text":""},{"location":"troubleshooting/#the-graph-points-look-brokenstrange","title":"The graph points look broken/strange","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.
An example of missing braille fonts in PowershellOne 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:
btm --dot_marker
Another (better) alternative is to install a font that supports braille fonts, and configure your terminal emulator to use it. For example, installing something like UBraille or Iosevka and ensuring your terminal uses it should work.
"},{"location":"troubleshooting/#braille-font-issues-on-linuxmacosunix-like","title":"Braille font issues on Linux/macOS/Unix-like","text":"Generally, the problem comes down to you either not having a font that supports the braille markers, or your terminal emulator is not using the correct font for the braille markers.
See here for possible fixes if you're having font issues on Linux, which may also be helpful for macOS or other Unix-like systems.
If you're still having issues, feel free to open a discussion question about it.
"},{"location":"troubleshooting/#installing-fonts-for-windows-command-promptpowershell","title":"Installing fonts for Windows Command Prompt/PowerShell","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:
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\n
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
).
This is a known limitation, some sensors may require admin privileges to get sensor data.
"},{"location":"troubleshooting/#why-dont-i-see-dual-batteries-on-windows-reported-separately-eg-thinkpads","title":"Why don't I see dual batteries on Windows reported separately? (e.g. Thinkpads)","text":"This is a known limitation which seems to be with how batteries are being detected on Windows.
"},{"location":"troubleshooting/#why-cant-i-see-all-my-temperature-sensors-on-wsl","title":"Why can't 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.
"},{"location":"troubleshooting/#why-does-wsl2-not-match-task-manager","title":"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.
"},{"location":"troubleshooting/#why-cant-i-see-all-my-processesprocess-data-on-macos","title":"Why can't I see all my processes/process 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\n
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!
"},{"location":"troubleshooting/#my-configuration-file-isnt-working","title":"My configuration file isn't working","text":"If your configuration files aren't working, here are a few things to try:
"},{"location":"troubleshooting/#check-the-formatting","title":"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]\ntemperature_type = \"f\"\n
Meanwhile, if you want to set a custom color scheme, it would be under the [colors]
table:
[colors]\ntable_header_color=\"LightBlue\"\n
"},{"location":"troubleshooting/#check-the-configuration-file-location","title":"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\\<USER>\\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\n
"},{"location":"troubleshooting/#my-installation-through-snap-has-some-widgets-that-are-blankshow-no-data","title":"My installation through snap has some widgets that are blank/show 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\nsudo snap connect bottom:hardware-observe\nsudo snap connect bottom:system-observe\nsudo snap connect bottom:process-control\n
"},{"location":"configuration/command-line-flags/","title":"Command-line Flags","text":"The following flags can be provided to bottom in the command line to change the behaviour of the program. You can also see information on these flags by running btm -h
, or run btm --help
to display more detailed information on each flag:
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]\nis_list_ignored = true\nlist = [\"/dev/sda\"]\nregex = true\ncase_sensitive = false\nwhole_word = false\n
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]\nis_list_ignored = false\nlist = [\"/dev/sda\"]\nregex = true\ncase_sensitive = false\nwhole_word = false\n\n[mount_filter]\nis_list_ignored = true\nlist = [\"/mnt/.*\", \"/\"]\nregex = true\ncase_sensitive = false\nwhole_word = true\n
This gives us:
"},{"location":"configuration/config-file/default-config/","title":"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\\<USER>\\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.
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 Functionalityhide_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) or String (represents human time) Sets a refresh rate in ms. default_time_value
Unsigned Int (represents milliseconds) or String (represents human time) Default time value for graphs in ms. time_delta
Unsigned Int (represents milliseconds) or String (represents human time) 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. enable_cache_memory
Boolean Enable collecting and displaying cache and buffer memory (not available on Windows). 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. enable_gpu
Boolean Shows the GPU widgets. retention
String (human readable time, such as \"10m\", \"1h\", etc.) How much data is stored at once in terms of time. unnormalized_cpu
Boolean Show process CPU% without normalizing over the number of cores. expanded_on_startup
Boolean Expand the default widget upon starting the app."},{"location":"configuration/config-file/layout/","title":"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]]\n [[row.child]]\n type=\"cpu\"\n[[row]]\n ratio=2\n [[row.child]]\n ratio=4\n type=\"mem\"\n [[row.child]]\n ratio=3\n [[row.child.child]]\n type=\"temp\"\n [[row.child.child]]\n type=\"disk\"\n
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.
"},{"location":"configuration/config-file/processes/","title":"Processes","text":""},{"location":"configuration/config-file/processes/#columns","title":"Columns","text":"You can configure which columns are shown by the process widget by setting the columns
setting:
[processes]\n# Pick which columns you want to use in any order.\ncolumns = [\"cpu%\", \"mem%\", \"pid\", \"name\", \"read\", \"write\", \"tread\", \"twrite\", \"state\", \"user\", \"time\", \"gmem%\", \"gpu%\"]\n
"},{"location":"configuration/config-file/theming/","title":"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
.
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\"
GPU colour per gpu Colour of each gpu. Read in order. gpu_core_colors=[\"#ffffff\", \"white\", \"255, 255, 255\"]
ARC The colour ARC will use arc_color=\"#ffffff\"
"},{"location":"contribution/documentation/","title":"Documentation","text":""},{"location":"contribution/documentation/#when-should-documentation-changes-be-done","title":"When should documentation changes be done?","text":"README.md
, changelog, etc.)There are a few areas where documentation changes are often needed:
README.md
CHANGELOG.md
Fork the repository to make changes in.
Where you're adding documentation will probably affect what you need to do:
README.md
or CHANGELOG.md
For changes to README.md
and CHANGELOG.md
, just follow the formatting provided and use any editor.
Generally, changes to CHANGELOG.md
will be handled by a maintainer, and changes should follow the Keep a Changelog format, as well as link to the relevant PR or issue.
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 probably want at least Python 3.11 (older versions should be fine though), MkDocs, Material for MkDocs, mdx_truly_sane_lists
, and optionally Mike installed. These can help with validating your changes locally.
You can do so through pip
or your system's package managers. If you use pip
, you can use venv to cleanly install the documentation dependencies:
# Change directories to the documentation.\ncd docs/\n\n # Create venv, install the dependencies, and serve the page.\n./serve.sh\n
This will serve a local version of the docs that you can open on your browser. It will update as you make changes.
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.
Discussions are open in the repo. As for the difference between discussions and issues:
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!
"},{"location":"contribution/issues-and-pull-requests/#feature-requests","title":"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 an existing issue has covered your specific feature request!
"},{"location":"contribution/issues-and-pull-requests/#pull-requests","title":"Pull requests","text":"The expected workflow for a pull request is:
master
branch. Please fill out the pull request template.Package maintainers are always welcome and appreciated! Here's some info on how one can help with package distribution and bottom.
"},{"location":"contribution/packaging-and-distribution/#pre-built-binaries","title":"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.
In both cases, we use a combination of GitHub Actions and CirrusCI (mainly for FreeBSD and macOS M1) to create our release binaries. build_releases.yml
contains the GitHub Action workflow used to do both of these, if reference is needed.
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\n
You'll then want to build with:
cargo build --release --locked\n
"},{"location":"contribution/packaging-and-distribution/#manpage-and-completion-generation","title":"Manpage and completion generation","text":"bottom uses a build.rs
script to automatically generate a manpage and shell completions for the following shells:
If you want to generate manpages and/or completion files, set the BTM_GENERATE
env var to a non-empty value. For example, run something like this:
BTM_GENERATE=true cargo build --release --locked\n
This will automatically generate completion and manpage files in target/tmp/bottom/
. If you wish to regenerate the files, modify/delete either these files or set BTM_GENERATE
to some other non-empty value to retrigger the build script.
For more information, you may want to look at either the build.rs
file or the binary build CI workflow.
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, as well as a corresponding table of contents entry. 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.
"},{"location":"contribution/development/build_process/","title":"Build Process","text":"Warning
This section is currently somewhat WIP.
Warning
This section is intended for people who wish to work on/build/distribute bottom, not general users.
"},{"location":"contribution/development/build_process/#overview","title":"Overview","text":"bottom manages its own binary builds for nightly and stable release purposes. The core build workflow is handled by build_releases.yml
, called by a wrapper workflow for nightly and stable releases. Builds take place via GitHub Actions.
The main things built are:
.deb
package for Debian and its derivativesThis documentation gives a high-level overview of the build process for each part. For the most up-to-date and detailed reference, definitely refer back to the build_releases.yml
file.
Binaries are built currently for various targets. Note that not all of these are officially supported. The following general steps are performed:
Build a release build with:
--features deploy
, which enables only crates needed for release builds.--locked
to lock the dependency versions.The following env variables set:
BTM_GENERATE: true
COMPLETION_DIR: \"target/tmp/bottom/completion/\"
MANPAGE_DIR: \"target/tmp/bottom/manpage/\"
These generate the manpages and shell completions (see Packaging for some more information).
Some builds use cross
to do cross-compilation builds for architectures otherwise not natively supported by the runner.
This builds a full Windows installer using cargo-wix
. This requires some setup beforehand with some dependencies:
After that, cache is enabled, and cargo wix
takes care of the rest.
.deb
","text":"Currently, .deb
files are built for x86 and ARM architectures (armv7
, aarch64
). This is handled by cargo-deb
.
cargo-deb
..deb
file.There are additional checks via dpkg
to ensure the architecture is correctly set.
Warning
This section is currently WIP.
Warning
This section is intended for people who wish to work on/build/distribute bottom, not general users.
"},{"location":"contribution/development/deploy_process/#overview","title":"Overview","text":"bottom currently has two main deploy processes to worry about:
Stable: a stable deployment, triggered manually or upon creation of a valid tag. This is a GitHub action that builds binary/installer files and uploads them to a new GitHub release.
Furthermore, this workflow does not handle the following deployments, which must be manually handled:
This is, for the most part, automatic, though it can also be used as a way of testing build workflow changes and seeing if binaries can be successfully built at all against all the targets we want to build for.
If one does not want to actually update the nightly release, and just want to test the general builds and workflow, one can run the workflow manually on a branch of choice with \"mock\" set as the parameter. Changing it to anything else will trigger a non-mock run.
"},{"location":"contribution/development/deploy_process/#stable","title":"Stable","text":"This can be manually triggered, though the general use-case is setting a tag of the form x.y.z
(after checking everything is good, of course). For example:
git tag 0.6.9 && git push origin 0.6.9\n
This will automatically trigger the deployment workflow, and create a draft release with the files uploaded. One still needs to fill in the details and release it.
Furthermore, there are some deployments that are handled by maintainers of bottom that this workflow does not automatically finish. These must be manually handled.
"},{"location":"contribution/development/deploy_process/#chocolatey","title":"Chocolatey","text":"Upon releasing on GitHub, choco-bottom will automatically be updated with a new PR with the correct deployment files for Chocolatey. Check the PR, merge it if it is correct, then pull locally and deploy following the instructions in the README. Make sure to test installation and running at least once before deploying!
If done correctly, there should be a new build on Chocolatey, which will take some time to validate.
"},{"location":"contribution/development/deploy_process/#cratesio","title":"crates.io","text":"Validate everything builds properly and works (you should have done this before releasing though). If good, then deploying on crates.io is as simple as:
cargo publish\n
"},{"location":"contribution/development/dev_env/","title":"Development Environment","text":"Warning
This section is currently WIP.
Warning
This section is intended for people who wish to work on/build/distribute bottom, not general users.
"},{"location":"contribution/development/logging/","title":"Logging","text":"Warning
This section is currently WIP.
Warning
This section is intended for people who wish to work on/build/distribute bottom, not general users.
"},{"location":"contribution/development/testing/","title":"Testing","text":"Warning
This section is currently WIP.
Warning
This section is intended for people who wish to work on/build/distribute bottom, not general users.
"},{"location":"support/official/","title":"Official support","text":"bottom officially supports the following operating systems and corresponding architectures:
x86_64
, aarch64
)x86_64
, i686
, aarch64
)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.
"},{"location":"support/official/#known-problems","title":"Known problems","text":""},{"location":"support/official/#linux","title":"Linux","text":"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.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:
None at the moment.
"},{"location":"usage/basic-mode/","title":"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\n\n# or\n\nbtm --basic\n
or through the config:
[flags]\nbasic = true\n
"},{"location":"usage/basic-mode/#notes","title":"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.
"},{"location":"usage/basic-mode/#key-bindings","title":"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.
"},{"location":"usage/general-usage/","title":"General Usage","text":"You can run bottom with:
btm\n
For help regarding the command-line flags, use:
# For a simple overview of flags\nbtm -h\n\n# For more details\nbtm --help\n
You can also see keybinds and basic usage details in bottom by pressing ?, which will open a help menu.
"},{"location":"usage/general-usage/#features","title":"Features","text":""},{"location":"usage/general-usage/#expansion","title":"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.
"},{"location":"usage/general-usage/#widget-selection","title":"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).
"},{"location":"usage/general-usage/#key-bindings","title":"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 Ctrl+u Scroll up a table by half a page Ctrl+d Scroll down a table by half a page"},{"location":"usage/general-usage/#mouse-bindings","title":"Mouse bindings","text":"Binding Action Left Button Selects the widget"},{"location":"usage/widgets/battery/","title":"Battery Widget","text":"Warning
The battery features are unavailable if the binary is compiled with the battery
feature disabled or if there are no batteries on the system!
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.
The following data is displayed for batteries:
The battery widget also supports devices with multiple batteries, and you can switch between them using the keyboard or the mouse.
"},{"location":"usage/widgets/battery/#key-bindings","title":"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"},{"location":"usage/widgets/battery/#mouse-bindings","title":"Mouse bindings","text":"Binding Action Left Button Selects a battery entry"},{"location":"usage/widgets/cpu/","title":"CPU Widget","text":"The CPU widget displays a visual representation of CPU usage over a time range.
"},{"location":"usage/widgets/cpu/#features","title":"Features","text":"The CPU widget is composed of two parts: the graph and the legend:
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.
"},{"location":"usage/widgets/cpu/#key-bindings","title":"Key bindings","text":"Note that key bindings are generally case-sensitive.
"},{"location":"usage/widgets/cpu/#graph","title":"Graph","text":"Binding Action + Zoom in on chart (decrease time range) - Zoom out on chart (increase time range) = Reset zoom"},{"location":"usage/widgets/cpu/#legend","title":"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"},{"location":"usage/widgets/cpu/#mouse-bindings","title":"Mouse bindings","text":""},{"location":"usage/widgets/cpu/#graph_1","title":"Graph","text":"Binding Action Scroll Scrolling up or down zooms in or out of the graph respectively"},{"location":"usage/widgets/cpu/#legend_1","title":"Legend","text":"Binding Action Scroll Scroll through options to display in the graph Left Button Selects a CPU thread/average to show in the graph"},{"location":"usage/widgets/disk/","title":"Disk Widget","text":"The disk widget provides a table of useful disk and partition information, like I/O per second and total usage.
"},{"location":"usage/widgets/disk/#features","title":"Features","text":"The disk widget provides the following information:
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 d Sort by disk, press again to reverse sorting order m Sort by mount, press again to reverse sorting order u Sort by amount used, press again to reverse sorting order n Sort by amount free, press again to reverse sorting order t Sort by total space available, press again to reverse sorting order p Sort by percentage used, press again to reverse sorting order r Sort by read rate, press again to reverse sorting order w Sort by write rate, press again to reverse sorting order"},{"location":"usage/widgets/disk/#mouse-bindings","title":"Mouse bindings","text":"Binding Action Left Button Selects an entry in the table"},{"location":"usage/widgets/memory/","title":"Memory Widget","text":"The memory widget provides a visual representation of RAM and swap usage over time.
"},{"location":"usage/widgets/memory/#features","title":"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.
This widget can also be configured to display Nvidia GPU memory usage (--enable_gpu
on Linux/Windows) or cache memory usage (--enable_cache_memory
).
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"},{"location":"usage/widgets/memory/#mouse-bindings","title":"Mouse bindings","text":"Binding Action Scroll Scrolling up or down zooms in or out of the graph respectively"},{"location":"usage/widgets/memory/#calculations","title":"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)\n
You can find more info on /proc/meminfo
and its fields here.
The network widget provides a visual representation of network input and output per second, as well as noting the total amount received and transmitted.
"},{"location":"usage/widgets/network/#features","title":"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.
"},{"location":"usage/widgets/network/#key-bindings","title":"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"},{"location":"usage/widgets/network/#mouse-bindings","title":"Mouse bindings","text":"Binding Action Scroll Scrolling up or down zooms in or out of the graph respectively"},{"location":"usage/widgets/process/","title":"Process Widget","text":"The process widget displays a table containing information regarding a running process, along with sorting, searching, and process control features.
"},{"location":"usage/widgets/process/#features","title":"Features","text":"The process widget has three main components:
By default, the main process table displays the following information for each process:
It can also additionally display the following columns:
With the feature flag (--enable_gpu
on Linux/Windows) and gpu process columns enabled in the configuration:
See the processes configuration page on how to customize which columns are shown.
"},{"location":"usage/widgets/process/#sorting","title":"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.
"},{"location":"usage/widgets/process/#grouping","title":"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.
"},{"location":"usage/widgets/process/#process-termination","title":"Process termination","text":"Pressing d+d or F9 will allow you to terminate the currently selected process/process group. On Unix-like operating systems, you are also able to control which specific signals to send (e.g. SIGKILL
, SIGTERM
).
If you're on Windows, or if the disable_advanced_kill
flag is set in the options or command-line, then a simpler termination screen will be shown to confirm whether you want to kill that process/process group.
Pressing t or F5 in the table toggles tree mode in the process widget, displaying processes in regard 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.
"},{"location":"usage/widgets/process/#full-command","title":"Full command","text":"You can show the full command instead of just the process name by pressing P.
"},{"location":"usage/widgets/process/#search","title":"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.
You can also paste search queries (e.g. Shift+Ins, Ctrl+Shift+v).
"},{"location":"usage/widgets/process/#keywords","title":"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\"
).
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
rps
read = 1 mb
Matches the read/s column in terms of bytes; supports comparison operators write
w/s
wps
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 ()
(<COND 1> AND <COND 2>) OR <COND 3>
Group together a condition gmem
gmem > 1000 b
Matches the gpu memory column in terms of bytes; supports comparison operators gmem%
gmem% < 0.5
Matches the gpu memory column in terms of percent; supports comparison operators gpu%
gpu% > 0
Matches the gpu usage column in terms of percent; supports comparison operators"},{"location":"usage/widgets/process/#comparison-operators","title":"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"},{"location":"usage/widgets/process/#logical-operators","title":"Logical operators","text":"Note all operators are case-insensitive, and the and
operator takes precedence over the or
operator.
and
&&
<Space>
<COND 1> and <COND 2>
<COND 1> && <COND 2>
<COND 1> <COND 2>
Requires both conditions to be true to match or
||
<COND 1> or <COND 2>
<COND 1> || <COND 2>
Requires at least one condition to be true to match"},{"location":"usage/widgets/process/#units","title":"Units","text":"All units are case-insensitive.
Keywords DescriptionB
Bytes KB
Kilobytes MB
Megabytes GB
Gigabytes TB
Terabytes KiB
Kibibytes MiB
Mebibytes GiB
Gibibytes TiB
Tebibytes"},{"location":"usage/widgets/process/#key-bindings","title":"Key bindings","text":"Note that key bindings are generally case-sensitive.
"},{"location":"usage/widgets/process/#process-table","title":"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 M Sort by gpu memory usage, press again to reverse sorting order C Sort by gpu usage, press again to reverse sorting order"},{"location":"usage/widgets/process/#sort-sub-widget","title":"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"},{"location":"usage/widgets/process/#search-sub-widget","title":"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"},{"location":"usage/widgets/process/#mouse-bindings","title":"Mouse bindings","text":""},{"location":"usage/widgets/process/#process-table_1","title":"Process table","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"},{"location":"usage/widgets/process/#sort-sub-widget_1","title":"Sort sub-widget","text":"Binding Action Left Button Selects an entry in the table"},{"location":"usage/widgets/temperature/","title":"Temperature Widget","text":"The temperature widget provides a table of temperature sensors and their current temperature.
"},{"location":"usage/widgets/temperature/#features","title":"Features","text":"The temperature widget provides the sensor name as well as its current temperature.
This widget can also be configured to display Nvidia GPU temperatures (--enable_gpu
on Linux/Windows).
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 t Sort by temperature, press again to reverse sorting order s Sort by sensor name, press again to reverse sorting order"},{"location":"usage/widgets/temperature/#mouse-bindings","title":"Mouse bindings","text":"Binding Action Left Button Selects an entry in the table"}]} \ No newline at end of file +{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"bottom
","text":"A customizable cross-platform graphical process/system monitor for the terminal, supporting Linux, macOS, and Windows. Inspired by other tools like gtop, gotop, and htop.
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!
"},{"location":"#installation","title":"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.
You can refer to the usage pages on how to use bottom (e.g. keybinds, some features, a general overview of what each widget does).
To configure bottom, refer to the configuration pages (e.g. how it behaves, how it looks).
"},{"location":"#contribution","title":"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.
"},{"location":"troubleshooting/","title":"Troubleshooting","text":""},{"location":"troubleshooting/#the-graph-points-look-brokenstrange","title":"The graph points look broken/strange","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.
An example of missing braille fonts in PowershellOne 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:
btm --dot_marker
Another (better) alternative is to install a font that supports braille fonts, and configure your terminal emulator to use it. For example, installing something like UBraille or Iosevka and ensuring your terminal uses it should work.
"},{"location":"troubleshooting/#braille-font-issues-on-linuxmacosunix-like","title":"Braille font issues on Linux/macOS/Unix-like","text":"Generally, the problem comes down to you either not having a font that supports the braille markers, or your terminal emulator is not using the correct font for the braille markers.
See here for possible fixes if you're having font issues on Linux, which may also be helpful for macOS or other Unix-like systems.
If you're still having issues, feel free to open a discussion question about it.
"},{"location":"troubleshooting/#installing-fonts-for-windows-command-promptpowershell","title":"Installing fonts for Windows Command Prompt/PowerShell","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:
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\n
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
).
This is a known limitation, some sensors may require admin privileges to get sensor data.
"},{"location":"troubleshooting/#why-dont-i-see-dual-batteries-on-windows-reported-separately-eg-thinkpads","title":"Why don't I see dual batteries on Windows reported separately? (e.g. Thinkpads)","text":"This is a known limitation which seems to be with how batteries are being detected on Windows.
"},{"location":"troubleshooting/#why-cant-i-see-all-my-temperature-sensors-on-wsl","title":"Why can't 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.
"},{"location":"troubleshooting/#why-does-wsl2-not-match-task-manager","title":"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.
"},{"location":"troubleshooting/#why-cant-i-see-all-my-processesprocess-data-on-macos","title":"Why can't I see all my processes/process 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\n
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!
"},{"location":"troubleshooting/#my-configuration-file-isnt-working","title":"My configuration file isn't working","text":"If your configuration files aren't working, here are a few things to try:
"},{"location":"troubleshooting/#check-the-formatting","title":"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]\ntemperature_type = \"f\"\n
Meanwhile, if you want to set a custom color scheme, it would be under the [colors]
table:
[colors]\ntable_header_color=\"LightBlue\"\n
"},{"location":"troubleshooting/#check-the-configuration-file-location","title":"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\\<USER>\\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\n
"},{"location":"troubleshooting/#my-installation-through-snap-has-some-widgets-that-are-blankshow-no-data","title":"My installation through snap has some widgets that are blank/show 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\nsudo snap connect bottom:hardware-observe\nsudo snap connect bottom:system-observe\nsudo snap connect bottom:process-control\n
"},{"location":"configuration/command-line-flags/","title":"Command-line Flags","text":"The following flags can be provided to bottom in the command line to change the behaviour of the program. You can also see information on these flags by running btm -h
, or run btm --help
to display more detailed information on each flag:
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]\nis_list_ignored = true\nlist = [\"/dev/sda\"]\nregex = true\ncase_sensitive = false\nwhole_word = false\n
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]\nis_list_ignored = false\nlist = [\"/dev/sda\"]\nregex = true\ncase_sensitive = false\nwhole_word = false\n\n[mount_filter]\nis_list_ignored = true\nlist = [\"/mnt/.*\", \"/\"]\nregex = true\ncase_sensitive = false\nwhole_word = true\n
This gives us:
"},{"location":"configuration/config-file/default-config/","title":"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\\<USER>\\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.
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 Functionalityhide_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) or String (represents human time) Sets a refresh rate in ms. default_time_value
Unsigned Int (represents milliseconds) or String (represents human time) Default time value for graphs in ms. time_delta
Unsigned Int (represents milliseconds) or String (represents human time) 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. enable_cache_memory
Boolean Enable collecting and displaying cache and buffer memory (not available on Windows). 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. enable_gpu
Boolean Shows the GPU widgets. retention
String (human readable time, such as \"10m\", \"1h\", etc.) How much data is stored at once in terms of time. unnormalized_cpu
Boolean Show process CPU% without normalizing over the number of cores. expanded_on_startup
Boolean Expand the default widget upon starting the app."},{"location":"configuration/config-file/layout/","title":"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]]\n [[row.child]]\n type=\"cpu\"\n[[row]]\n ratio=2\n [[row.child]]\n ratio=4\n type=\"mem\"\n [[row.child]]\n ratio=3\n [[row.child.child]]\n type=\"temp\"\n [[row.child.child]]\n type=\"disk\"\n
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.
"},{"location":"configuration/config-file/processes/","title":"Processes","text":""},{"location":"configuration/config-file/processes/#columns","title":"Columns","text":"You can configure which columns are shown by the process widget by setting the columns
setting:
[processes]\n# Pick which columns you want to use in any order.\ncolumns = [\"cpu%\", \"mem%\", \"pid\", \"name\", \"read\", \"write\", \"tread\", \"twrite\", \"state\", \"user\", \"time\", \"gmem%\", \"gpu%\"]\n
"},{"location":"configuration/config-file/theming/","title":"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
.
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\"
GPU colour per gpu Colour of each gpu. Read in order. gpu_core_colors=[\"#ffffff\", \"white\", \"255, 255, 255\"]
ARC The colour ARC will use arc_color=\"#ffffff\"
"},{"location":"contribution/documentation/","title":"Documentation","text":""},{"location":"contribution/documentation/#when-should-documentation-changes-be-done","title":"When should documentation changes be done?","text":"README.md
, changelog, etc.)There are a few areas where documentation changes are often needed:
README.md
CHANGELOG.md
Fork the repository to make changes in.
Where you're adding documentation will probably affect what you need to do:
README.md
or CHANGELOG.md
For changes to README.md
and CHANGELOG.md
, just follow the formatting provided and use any editor.
Generally, changes to CHANGELOG.md
will be handled by a maintainer, and the contents of the file should follow the Keep a Changelog format, as well as link to the relevant PR or issues.
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 probably want at least Python 3.11 (older and newer versions should be fine), MkDocs, Material for MkDocs, mdx_truly_sane_lists
, and optionally Mike installed. These can help with validating your changes locally.
You can do so through pip
or your system's package managers. If you use pip
, you can use venv to cleanly install the documentation dependencies:
# Change directories to the documentation.\ncd docs/\n\n # Create venv, install the dependencies, and serve the page.\n./serve.sh\n
This will serve a local version of the docs that you can open on your browser. It will update as you make changes.
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.
Discussions are open in the repo. As for the difference between discussions and issues:
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!
"},{"location":"contribution/issues-and-pull-requests/#feature-requests","title":"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 an existing issue has covered your specific feature request!
"},{"location":"contribution/issues-and-pull-requests/#pull-requests","title":"Pull requests","text":"The expected workflow for a pull request is:
main
branch. Please fill out the pull request template.Package maintainers are always welcome and appreciated! Here's some info on how one can help with package distribution and bottom.
"},{"location":"contribution/packaging-and-distribution/#pre-built-binaries","title":"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 main
branch.
In both cases, we use a combination of GitHub Actions and CirrusCI (mainly for FreeBSD and macOS M1) to create our release binaries. build_releases.yml
contains the GitHub Action workflow used to do both of these, if reference is needed.
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\n
You'll then want to build with:
cargo build --release --locked\n
"},{"location":"contribution/packaging-and-distribution/#manpage-and-completion-generation","title":"Manpage and completion generation","text":"bottom uses a build.rs
script to automatically generate a manpage and shell completions for the following shells:
If you want to generate manpages and/or completion files, set the BTM_GENERATE
env var to a non-empty value. For example, run something like this:
BTM_GENERATE=true cargo build --release --locked\n
This will automatically generate completion and manpage files in target/tmp/bottom/
. If you wish to regenerate the files, modify/delete either these files or set BTM_GENERATE
to some other non-empty value to retrigger the build script.
For more information, you may want to look at either the build.rs
file or the binary build CI workflow.
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, as well as a corresponding table of contents entry. 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.
"},{"location":"contribution/development/build_process/","title":"Build Process","text":"Warning
This section is currently somewhat WIP.
Warning
This section is intended for people who wish to work on/build/distribute bottom, not general users.
"},{"location":"contribution/development/build_process/#overview","title":"Overview","text":"bottom manages its own binary builds for nightly and stable release purposes. The core build workflow is handled by build_releases.yml
, called by a wrapper workflow for nightly and stable releases. Builds take place via GitHub Actions.
The main things built are:
.deb
package for Debian and its derivativesThis documentation gives a high-level overview of the build process for each part. For the most up-to-date and detailed reference, definitely refer back to the build_releases.yml
file.
Binaries are built currently for various targets. Note that not all of these are officially supported. The following general steps are performed:
Build a release build with:
--features deploy
, which enables only crates needed for release builds.--locked
to lock the dependency versions.The following env variables set:
BTM_GENERATE: true
COMPLETION_DIR: \"target/tmp/bottom/completion/\"
MANPAGE_DIR: \"target/tmp/bottom/manpage/\"
These generate the manpages and shell completions (see Packaging for some more information).
Some builds use cross
to do cross-compilation builds for architectures otherwise not natively supported by the runner.
This builds a full Windows installer using cargo-wix
. This requires some setup beforehand with some dependencies:
After that, cache is enabled, and cargo wix
takes care of the rest.
.deb
","text":"Currently, .deb
files are built for x86 and ARM architectures (armv7
, aarch64
). This is handled by cargo-deb
.
cargo-deb
..deb
file.There are additional checks via dpkg
to ensure the architecture is correctly set.
Warning
This section is currently WIP.
Warning
This section is intended for people who wish to work on/build/distribute bottom, not general users.
"},{"location":"contribution/development/deploy_process/#overview","title":"Overview","text":"bottom currently has two main deploy processes to worry about:
Stable: a stable deployment, triggered manually or upon creation of a valid tag. This is a GitHub action that builds binary/installer files and uploads them to a new GitHub release.
Furthermore, this workflow does not handle the following deployments, which must be manually handled:
This is, for the most part, automatic, though it can also be used as a way of testing build workflow changes and seeing if binaries can be successfully built at all against all the targets we want to build for.
If one does not want to actually update the nightly release, and just want to test the general builds and workflow, one can run the workflow manually on a branch of choice with \"mock\" set as the parameter. Changing it to anything else will trigger a non-mock run.
"},{"location":"contribution/development/deploy_process/#stable","title":"Stable","text":"This can be manually triggered, though the general use-case is setting a tag of the form x.y.z
(after checking everything is good, of course). For example:
git tag 0.6.9 && git push origin 0.6.9\n
This will automatically trigger the deployment workflow, and create a draft release with the files uploaded. One still needs to fill in the details and release it.
Furthermore, there are some deployments that are handled by maintainers of bottom that this workflow does not automatically finish. These must be manually handled.
"},{"location":"contribution/development/deploy_process/#chocolatey","title":"Chocolatey","text":"Upon releasing on GitHub, choco-bottom will automatically be updated with a new PR with the correct deployment files for Chocolatey. Check the PR, merge it if it is correct, then pull locally and deploy following the instructions in the README. Make sure to test installation and running at least once before deploying!
If done correctly, there should be a new build on Chocolatey, which will take some time to validate.
"},{"location":"contribution/development/deploy_process/#cratesio","title":"crates.io","text":"Validate everything builds properly and works (you should have done this before releasing though). If good, then deploying on crates.io is as simple as:
cargo publish\n
"},{"location":"contribution/development/dev_env/","title":"Development Environment","text":"Warning
This section is currently WIP.
Warning
This section is intended for people who wish to work on/build/distribute bottom, not general users.
"},{"location":"contribution/development/logging/","title":"Logging","text":"Warning
This section is currently WIP.
Warning
This section is intended for people who wish to work on/build/distribute bottom, not general users.
"},{"location":"contribution/development/testing/","title":"Testing","text":"Warning
This section is currently WIP.
Warning
This section is intended for people who wish to work on/build/distribute bottom, not general users.
"},{"location":"support/official/","title":"Official support","text":"bottom officially supports the following operating systems and corresponding architectures:
x86_64
, aarch64
)x86_64
, i686
, aarch64
)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.
"},{"location":"support/official/#known-problems","title":"Known problems","text":""},{"location":"support/official/#linux","title":"Linux","text":"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.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:
None at the moment.
"},{"location":"usage/basic-mode/","title":"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\n\n# or\n\nbtm --basic\n
or through the config:
[flags]\nbasic = true\n
"},{"location":"usage/basic-mode/#notes","title":"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.
"},{"location":"usage/basic-mode/#key-bindings","title":"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.
"},{"location":"usage/general-usage/","title":"General Usage","text":"You can run bottom with:
btm\n
For help regarding the command-line flags, use:
# For a simple overview of flags\nbtm -h\n\n# For more details\nbtm --help\n
You can also see keybinds and basic usage details in bottom by pressing ?, which will open a help menu.
"},{"location":"usage/general-usage/#features","title":"Features","text":""},{"location":"usage/general-usage/#expansion","title":"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.
"},{"location":"usage/general-usage/#widget-selection","title":"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).
"},{"location":"usage/general-usage/#key-bindings","title":"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 Ctrl+u Scroll up a table by half a page Ctrl+d Scroll down a table by half a page"},{"location":"usage/general-usage/#mouse-bindings","title":"Mouse bindings","text":"Binding Action Left Button Selects the widget"},{"location":"usage/widgets/battery/","title":"Battery Widget","text":"Warning
The battery features are unavailable if the binary is compiled with the battery
feature disabled or if there are no batteries on the system!
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.
The following data is displayed for batteries:
The battery widget also supports devices with multiple batteries, and you can switch between them using the keyboard or the mouse.
"},{"location":"usage/widgets/battery/#key-bindings","title":"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"},{"location":"usage/widgets/battery/#mouse-bindings","title":"Mouse bindings","text":"Binding Action Left Button Selects a battery entry"},{"location":"usage/widgets/cpu/","title":"CPU Widget","text":"The CPU widget displays a visual representation of CPU usage over a time range.
"},{"location":"usage/widgets/cpu/#features","title":"Features","text":"The CPU widget is composed of two parts: the graph and the legend:
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.
"},{"location":"usage/widgets/cpu/#key-bindings","title":"Key bindings","text":"Note that key bindings are generally case-sensitive.
"},{"location":"usage/widgets/cpu/#graph","title":"Graph","text":"Binding Action + Zoom in on chart (decrease time range) - Zoom out on chart (increase time range) = Reset zoom"},{"location":"usage/widgets/cpu/#legend","title":"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"},{"location":"usage/widgets/cpu/#mouse-bindings","title":"Mouse bindings","text":""},{"location":"usage/widgets/cpu/#graph_1","title":"Graph","text":"Binding Action Scroll Scrolling up or down zooms in or out of the graph respectively"},{"location":"usage/widgets/cpu/#legend_1","title":"Legend","text":"Binding Action Scroll Scroll through options to display in the graph Left Button Selects a CPU thread/average to show in the graph"},{"location":"usage/widgets/disk/","title":"Disk Widget","text":"The disk widget provides a table of useful disk and partition information, like I/O per second and total usage.
"},{"location":"usage/widgets/disk/#features","title":"Features","text":"The disk widget provides the following information:
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 d Sort by disk, press again to reverse sorting order m Sort by mount, press again to reverse sorting order u Sort by amount used, press again to reverse sorting order n Sort by amount free, press again to reverse sorting order t Sort by total space available, press again to reverse sorting order p Sort by percentage used, press again to reverse sorting order r Sort by read rate, press again to reverse sorting order w Sort by write rate, press again to reverse sorting order"},{"location":"usage/widgets/disk/#mouse-bindings","title":"Mouse bindings","text":"Binding Action Left Button Selects an entry in the table"},{"location":"usage/widgets/memory/","title":"Memory Widget","text":"The memory widget provides a visual representation of RAM and swap usage over time.
"},{"location":"usage/widgets/memory/#features","title":"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.
This widget can also be configured to display Nvidia GPU memory usage (--enable_gpu
on Linux/Windows) or cache memory usage (--enable_cache_memory
).
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"},{"location":"usage/widgets/memory/#mouse-bindings","title":"Mouse bindings","text":"Binding Action Scroll Scrolling up or down zooms in or out of the graph respectively"},{"location":"usage/widgets/memory/#calculations","title":"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)\n
You can find more info on /proc/meminfo
and its fields here.
The network widget provides a visual representation of network input and output per second, as well as noting the total amount received and transmitted.
"},{"location":"usage/widgets/network/#features","title":"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.
"},{"location":"usage/widgets/network/#key-bindings","title":"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"},{"location":"usage/widgets/network/#mouse-bindings","title":"Mouse bindings","text":"Binding Action Scroll Scrolling up or down zooms in or out of the graph respectively"},{"location":"usage/widgets/process/","title":"Process Widget","text":"The process widget displays a table containing information regarding a running process, along with sorting, searching, and process control features.
"},{"location":"usage/widgets/process/#features","title":"Features","text":"The process widget has three main components:
By default, the main process table displays the following information for each process:
It can also additionally display the following columns:
With the feature flag (--enable_gpu
on Linux/Windows) and gpu process columns enabled in the configuration:
See the processes configuration page on how to customize which columns are shown.
"},{"location":"usage/widgets/process/#sorting","title":"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.
"},{"location":"usage/widgets/process/#grouping","title":"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.
"},{"location":"usage/widgets/process/#process-termination","title":"Process termination","text":"Pressing d+d or F9 will allow you to terminate the currently selected process/process group. On Unix-like operating systems, you are also able to control which specific signals to send (e.g. SIGKILL
, SIGTERM
).
If you're on Windows, or if the disable_advanced_kill
flag is set in the options or command-line, then a simpler termination screen will be shown to confirm whether you want to kill that process/process group.
Pressing t or F5 in the table toggles tree mode in the process widget, displaying processes in regard 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.
"},{"location":"usage/widgets/process/#full-command","title":"Full command","text":"You can show the full command instead of just the process name by pressing P.
"},{"location":"usage/widgets/process/#search","title":"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.
You can also paste search queries (e.g. Shift+Ins, Ctrl+Shift+v).
"},{"location":"usage/widgets/process/#keywords","title":"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\"
).
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
rps
read = 1 mb
Matches the read/s column in terms of bytes; supports comparison operators write
w/s
wps
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 ()
(<COND 1> AND <COND 2>) OR <COND 3>
Group together a condition gmem
gmem > 1000 b
Matches the gpu memory column in terms of bytes; supports comparison operators gmem%
gmem% < 0.5
Matches the gpu memory column in terms of percent; supports comparison operators gpu%
gpu% > 0
Matches the gpu usage column in terms of percent; supports comparison operators"},{"location":"usage/widgets/process/#comparison-operators","title":"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"},{"location":"usage/widgets/process/#logical-operators","title":"Logical operators","text":"Note all operators are case-insensitive, and the and
operator takes precedence over the or
operator.
and
&&
<Space>
<COND 1> and <COND 2>
<COND 1> && <COND 2>
<COND 1> <COND 2>
Requires both conditions to be true to match or
||
<COND 1> or <COND 2>
<COND 1> || <COND 2>
Requires at least one condition to be true to match"},{"location":"usage/widgets/process/#units","title":"Units","text":"All units are case-insensitive.
Keywords DescriptionB
Bytes KB
Kilobytes MB
Megabytes GB
Gigabytes TB
Terabytes KiB
Kibibytes MiB
Mebibytes GiB
Gibibytes TiB
Tebibytes"},{"location":"usage/widgets/process/#key-bindings","title":"Key bindings","text":"Note that key bindings are generally case-sensitive.
"},{"location":"usage/widgets/process/#process-table","title":"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 M Sort by gpu memory usage, press again to reverse sorting order C Sort by gpu usage, press again to reverse sorting order"},{"location":"usage/widgets/process/#sort-sub-widget","title":"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"},{"location":"usage/widgets/process/#search-sub-widget","title":"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"},{"location":"usage/widgets/process/#mouse-bindings","title":"Mouse bindings","text":""},{"location":"usage/widgets/process/#process-table_1","title":"Process table","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"},{"location":"usage/widgets/process/#sort-sub-widget_1","title":"Sort sub-widget","text":"Binding Action Left Button Selects an entry in the table"},{"location":"usage/widgets/temperature/","title":"Temperature Widget","text":"The temperature widget provides a table of temperature sensors and their current temperature.
"},{"location":"usage/widgets/temperature/#features","title":"Features","text":"The temperature widget provides the sensor name as well as its current temperature.
This widget can also be configured to display Nvidia GPU temperatures (--enable_gpu
on Linux/Windows).
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 t Sort by temperature, press again to reverse sorting order s Sort by sensor name, press again to reverse sorting order"},{"location":"usage/widgets/temperature/#mouse-bindings","title":"Mouse bindings","text":"Binding Action Left Button Selects an entry in the table"}]} \ No newline at end of file diff --git a/nightly/sitemap.xml b/nightly/sitemap.xml index 9759845f..20ce594a 100644 --- a/nightly/sitemap.xml +++ b/nightly/sitemap.xml @@ -2,142 +2,142 @@Unofficially supported platforms known to compile/work:
None at the moment.
diff --git a/nightly/troubleshooting/index.html b/nightly/troubleshooting/index.html index 244d6a2d..e104db31 100644 --- a/nightly/troubleshooting/index.html +++ b/nightly/troubleshooting/index.html @@ -1509,7 +1509,7 @@ on how to run htop without sudo for bottom. However, please undIf your configuration files aren't working, here are a few things to try:
It may be handy to refer to the automatically generated config files or the sample configuration files. +
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]