A cross-platform graphical process/system monitor with a customizable interface and a multitude of features

Overview

bottom

ci crates.io link

A cross-platform graphical process/system monitor with a customizable interface and a multitude of features. Supports Linux, macOS, and Windows. Inspired by both gtop and gotop.

Quick demo recording showing off searching, expanding, and process killing. Theme based on gruvbox (--color gruvbox). Font is IBM Plex Mono, terminal is Kitty.

Note: If you are reading this on the master branch, then it may refer to in-development or un-released features/changes. Please refer to release branch or crates.io for the most up-to-date release documentation.

Table of Contents

Support

Note that bottom is:

  • Built and released using the most recent stable version of Rust
  • Officially supports:
    • macOS (x86_64)
    • Linux (x86_64, i686, aarch64)
    • Windows (x86_64, i686)

Operating systems, versions of Rust, or platforms that are outside of this list are not currently officially supported - even if it is built, tested, or works - and I may not be able to fix bugs for these!

Compatibility

The current compatibility of widgets with operating systems from personal testing:

OS CPU Memory Disks Temperature Processes/Search Networks Battery
Linux
Windows ? (seems to require elevated access) ✓ (seems to have issues with dual batteries)
macOS ✓ (requires sudo btm to show everything)

Other known platform-specific issues

  • M1-based macOS devices may have issues with temperature sensors not returning anything.

  • For now, WSL has an issue reporting total memory usage.

  • WSL and WSL2 (as far as I know) cannot correctly report temperature sensors.

  • WSL2 will not match Windows' own Task Manager, this appears to be due to how WSL2 works.

Installation

Manually

There are a few ways to go about doing this manually. If you do so, please build using the current stable release of Rust. For example:

# If required, update Rust on the stable channel
rustup update stable

# Clone and install the newest master version all via Cargo
cargo install --git https://github.com/ClementTsang/bottom

# Clone from master and install manually
git clone https://github.com/ClementTsang/bottom
cd bottom
cargo install --path .

# Download from releases and install
curl -LO https://github.com/ClementTsang/bottom/archive/0.6.1.tar.gz
tar -xzvf 0.6.1.tar.gz
cargo install --path .

Or, you can just download the binary from the latest release.

Nightly

You can install pre-release nightly versions here. Builds are generated every day at 00:00 UTC, based on the most recent commit on the master branch.

Cargo

# If required, update Rust on the stable channel
rustup update stable

cargo install bottom

# OR, --locked may be required due to how cargo install works
cargo install bottom --locked

AUR

Normal package found here, binary package found here:

yay -S bottom

# If you instead want a pre-built binary:
yay -S bottom-bin

Debian

A .deb file is provided on each release:

curl -LO https://github.com/ClementTsang/bottom/releases/download/0.6.1/bottom_0.6.1_amd64.deb
sudo dpkg -i bottom_0.6.1_amd64.deb

Fedora/CentOS

Available in COPR:

sudo dnf copr enable atim/bottom -y
sudo dnf install bottom

Gentoo

Available in dm9pZCAq overlay

sudo eselect repository enable dm9pZCAq
sudo emerge --sync dm9pZCAq
sudo emerge sys-process/bottom::dm9pZCAq

Nix

nix-env -i bottom

Solus

sudo eopkg it bottom

Homebrew

brew tap clementtsang/bottom
brew install bottom

# If you need to be more specific, use:
brew install clementtsang/bottom/bottom

Scoop

scoop install bottom

Chocolatey

Choco package located here. Since validation of the package takes time, it may take a while to become available after a release.

choco install bottom

# Version number may be required for newer releases, if available:
choco install bottom --version=0.6.1

winget

You can find the packages here. Since validation of the package takes time, it may take a while to become available after a release.

winget install bottom

You can also manually do the same thing by going to the latest release and installing via the .msi file.

You can uninstall via Control Panel or Options in Windows.

Auto-completion

Shell completions are included in binary releases, and are generated in the same directory as the binary if bottom is manually built.

  • For bash, move btm.bash to $XDG_CONFIG_HOME/bash_completion or /etc/bash_completion.d/.
  • For fish, move btm.fish to $HOME/.config/fish/completions/.
  • For zsh, move _btm to one of your $fpath directories.
  • For PowerShell, add . _btm.ps1 to your PowerShell profile.

Some install scripts (i.e. AUR) will automatically do this for you.

Usage

Run using btm.

Flags

Use btm --help for more information.

        --autohide_time                        Temporarily shows the time scale in graphs.
    -b, --basic                                Hides graphs and uses a more basic look.
        --battery                              Shows the battery widget.
    -S, --case_sensitive                       Enables case sensitivity by default.
    -c, --celsius                              Sets the temperature type to Celsius.
        --color                  Use a color scheme, use --help for supported values.
    -C, --config                  Sets the location of the config file.
    -u, --current_usage                        Sets process CPU% to be based on current CPU%.
    -t, --default_time_value               Default time value for graphs in ms.
        --default_widget_count            Sets the n'th selected widget type as the default.
        --default_widget_type     Sets the default widget type, use --help for more info.
        --disable_advanced_kill                Hides advanced options to stop a process on Unix-like systems.
        --disable_click                        Disables mouse clicks.
    -m, --dot_marker                           Uses a dot marker for graphs.
    -f, --fahrenheit                           Sets the temperature type to Fahrenheit.
    -g, --group                                Groups processes with the same name by default.
    -h, --help                                 Prints help information.  Use --help for more info.
    -a, --hide_avg_cpu                         Hides the average CPU usage.
        --hide_table_gap                       Hides the spacing between table headers and entries.
        --hide_time                            Completely hides the time scaling.
    -k, --kelvin                               Sets the temperature type to Kelvin.
    -l, --left_legend                          Puts the CPU chart legend to the left side.
        --mem_as_value                         Defaults to showing process memory usage by value.
        --network_use_binary_prefix            Displays the network widget with binary prefixes.
        --network_use_bytes                    Displays the network widget using bytes.
        --network_use_log                      Displays the network widget with a log scale.
        --process_command                      Show processes as their commands by default.
    -r, --rate                             Sets a refresh rate in ms.
    -R, --regex                                Enables regex by default.
        --show_table_scroll_position           Shows the scroll position tracker in table widgets.
    -d, --time_delta                       The amount in ms changed upon zooming.
    -T, --tree                                 Defaults to showing the process widget in tree mode.
        --use_old_network_legend               DEPRECATED - uses the older network legend.
    -V, --version                              Prints version information.
    -W, --whole_word                           Enables whole-word matching by default.

Keybindings

General

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
Ctrl-Left
Shift-Left
H
A
Move widget selection left
Ctrl-Right
Shift-Right
L
D
Move widget selection right
Ctrl-Up
Shift-Up
K
W
Move widget selection up
Ctrl-Down
Shift-Down
J
S
Move widget selection down
Left, h Move left within widget
Down, j Move down within widget
Up,k Move up within widget
Right, l Move right within widget
? Open help menu
gg, Home Jump to the first entry
Shift-g, End Jump to the last entry
e Toggle expanding the currently selected widget
+ Zoom in on chart (decrease time range)
- Zoom out on chart (increase time range)
= Reset zoom

Process bindings

dd Kill 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 Group/un-group processes with the same name
Ctrl-f, / Open process search widget
P Toggle between showing the full command or just the process name
s, F6 Open process sort widget
I Invert current sort
% Toggle between values and percentages for memory usage
t, F5 Toggle tree mode

Process search bindings

Tab Toggle between searching by PID or name
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
Delete 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
Left Move cursor left
Right Move cursor right

Process sort bindings

Down, j Scroll down in list
Up, k Scroll up in list
Mouse scroll Scroll through sort widget
Esc Close the sort widget
Enter Sort by current selected column

Battery bindings

Left, Alt-h Go to the next battery
Right, Alt-l Go to the previous battery

Basic memory bindings

% Toggle between values and percentages for memory usage

Process searching keywords

  • None of the keywords are case sensitive.
  • Use brackets to logically group together parts of the search.
  • Furthermore, if you want to search a reserved keyword, surround the text in quotes - for example, "or" or "(sd-pam)" would be a valid search:

quote searching

Supported search types

Keywords Example Description
btm Matches by process or command name; supports regex
pid pid=1044 Matches by PID; supports regex
cpu, cpu% cpu > 0.5 Matches the CPU column; supports comparison operators
memb memb > 1000 b Matches the memory column in terms of bytes; supports comparison operators
mem, mem% mem < 0.5 Matches the memory column in terms of percent; supports comparison operators
read, r/s read = 1 mb Matches the read/s column in terms of bytes; supports comparison operators
write, w/s write >= 1 kb Matches the write/s column in terms of bytes; supports comparison operators
tread, t.read tread <= 1024 gb Matches he total read column in terms of bytes; supports comparison operators
twrite, t.write twrite > 1024 tb Matches the total write column in terms of bytes; supports comparison operators
user user=root Matches by user; supports regex
state state=running Matches by state; supports regex

Supported comparison operators

Keywords Description
= Checks if the values are equal
> Checks if the left value is strictly greater than the right
< Checks if the left value is strictly less than the right
>= Checks if the left value is greater than or equal to the right
<= Checks if the left value is less than or equal to the right

Supported logical operators

Note that the and operator takes precedence over the or operator.

Keywords Usage Description
and, &&, and/&&/ Requires both conditions to be true to match
or, || or/|| Requires at least one condition to be true to match

Supported units

Keywords Description
B Bytes
KB Kilobytes
MB Megabytes
GB Gigabytes
TB Terabytes
KiB Kibibytes
MiB Mebibytes
GiB Gibibytes
TiB Tebibytes

Other syntax

Keywords Usage Description
() ( AND ) OR Group together a condition

Mousebindings

General

Scroll Table: Scroll
Chart: Zooms in or out by scrolling up or down respectively
Click Selects the clicked widget, table entry, dialog option, or tab.
Can be disabled via options/flags.

CPU bindings

Scroll Scrolling over an CPU core/average shows only that entry on the chart

Process bindings

Click on process entry If in tree mode and you click on a selected entry, it toggles whether the branch is expanded or not
Click on table header Sorts the widget by that column, or inverts the sort if already selected

Features

As yet another process/system visualization and management application, bottom supports the typical features:

  • CPU usage visualization, on an average and per-core basis

  • RAM and swap usage visualization

  • Network visualization for receiving and transmitting

  • Display information about disk capacity and I/O per second

  • Display temperatures from sensors

  • Display information regarding processes, like CPU, memory, I/O usage, user, and process state

  • Process management (well, if process killing is all you need)

It also aims to be:

  • Lightweight

  • Cross-platform - supports 64-bit Linux, Windows, and macOS

In addition, bottom also currently has the following features:

Processes

Process searching

On any process widget, hit / to bring up a search bar. If the layout has multiple process widgets, note this search is independent of other widgets.

search bar image

By default, just typing in something will search by process name:

a simple search

This simple search can be refined by matching by case, matching the entire word, or by using regex:

a slightly better search

Now let's say you want to search for two things - luckily, we have the AND and OR logical operators:

logical operator demo with just ors

logical operator demo with ands and ors

Furthermore, one is able to refine their searches by CPU usage, memory usage, PID, and more. For example:

using cpu filter

You can see all available keywords and query options here.

Process sorting

You can sort the processes list by any column you want by pressing s while on a process widget:

sorting

Tree mode

Use t or F5 to toggle tree mode in a process widget. This is somewhat similar to htop's tree mode.

Standard tree

Sorting works as well, but it is done per groups of siblings. For example, by CPU%:

Standard tree

You can also still filter processes. Branches that entirely do not match the query are pruned out, but if a branch contains an element that does match the query, any non-matching elements will instead just be greyed out, so the tree structure is still maintained:

Standard tree

Zoom

Using the +/- keys or the scroll wheel will move the current time intervals of the currently selected widget, and = to reset the zoom levels to the default. Widgets can hold different time intervals independently. These time intervals can be adjusted using the -t/--default_time_value and -d/--time_delta options, or their corresponding config options.

Expand

Only care about one specific widget? You can go to that widget and hit e to make that widget expand and take up the entire drawing area. You can minimize this expanded widget with Esc or pressing e again.

Basic mode

Using the -b or --basic_mode (or their corresponding config options) will open bottom in basic mode. There are no charts or expanded mode when using this, and tables are condensed such that only one table is displayed at a time.

basic mode image

Note custom layouts are currently not available when this is used.

Config files

bottom supports reading from a config file to customize its behaviour and look. By default, bottom will look at (based on dirs):

OS Location
~/.config/bottom/bottom.toml or $XDG_CONFIG_HOME/bottom/bottom.toml Linux
$HOME/Library/Application Support/bottom/bottom.toml macOS
C:\Users\\AppData\Roaming\bottom\bottom.toml Windows

Note that if a config file does not exist at either the default location or the passed in location via -C or --config, one is automatically created with no settings applied.

Config flags

The following options can be set under [flags] to achieve the same effect as passing in a flag on runtime. Note that if a flag is given, it will override the config file.

These are the following supported flag config values, which correspond to the flag of the same name described in Flags:

Field Type Functionality
hide_avg_cpu Boolean Hides the average CPU usage.
dot_marker Boolean Uses a dot marker for graphs.
left_legend Boolean Puts the CPU chart legend to the left side.
current_usage Boolean Sets process CPU% to be based on current CPU%.
group_processes Boolean Groups processes with the same name by default.
case_sensitive Boolean Enables case sensitivity by default.
whole_word Boolean Enables whole-word matching by default.
regex Boolean Enables regex by default.
basic Boolean Hides graphs and uses a more basic look.
use_old_network_legend Boolean DEPRECATED - uses the older network legend.
battery Boolean Shows the battery widget.
rate Unsigned Int (represents milliseconds) Sets a refresh rate in ms.
default_time_value Unsigned Int (represents milliseconds) Default time value for graphs in ms.
time_delta Unsigned Int (represents milliseconds) The amount in ms changed upon zooming.
temperature_type String (one of ["k", "f", "c", "kelvin", "fahrenheit", "celsius"]) Sets the temperature unit type.
default_widget_type String (one of ["cpu", "proc", "net", "temp", "mem", "disk"], same as layout options) Sets the default widget type, use --help for more info.
default_widget_count Unsigned Int (represents which default_widget_type) Sets the n'th selected widget type as the default.
disable_click Boolean Disables mouse clicks.
color String (one of ["default", "default-light", "gruvbox", "gruvbox-light", "nord", "nord-light"]) Use a color scheme, use --help for supported values.
mem_as_value Boolean Defaults to showing process memory usage by value.
tree Boolean Defaults to showing the process widget in tree mode.
show_table_scroll_position Boolean Shows the scroll position tracker in table widgets.
process_command Boolean Show processes as their commands by default.
disable_advanced_kill Boolean Hides advanced options to stop a process on Unix-like systems.
network_use_binary_prefix Boolean Displays the network widget with binary prefixes.
network_use_bytes Boolean Displays the network widget using bytes.
network_use_log Boolean Displays the network widget with a log scale.

Theming

The config file can be used to set custom colours for parts of the application under the [colors] object. The following labels are customizable with strings that are hex colours, RGB colours, or specific named colours.

Supported named colours are one of the following strings: Reset, Black, Red, Green, Yellow, Blue, Magenta, Cyan, Gray, DarkGray, LightRed, LightGreen, LightYellow, LightBlue, LightMagenta, LightCyan, White.

Labels Details Example
Table header colours Colour of table headers table_header_color="255, 255, 255"
CPU colour per core Colour of each core. Read in order. cpu_core_colors=["#ffffff", "white", "255, 255, 255"]
Average CPU colour The average CPU color avg_cpu_color="White"
All CPUs colour The colour for the "All" CPU label all_cpu_color="White"
RAM The colour RAM will use ram_color="#ffffff"
SWAP The colour SWAP will use swap_color="#ffffff"
RX The colour rx will use rx_color="#ffffff"
TX The colour tx will use tx_color="#ffffff"
Widget title colour The colour of the label each widget has widget_title_color="#ffffff"
Border colour The colour of the border of unselected widgets border_color="#ffffff"
Selected border colour The colour of the border of selected widgets highlighted_border_color="#ffffff"
Text colour The colour of most text text_color="#ffffff"
Graph colour The colour of the lines and text of the graph graph_color="#ffffff"
Cursor colour The cursor's colour cursor_color="#ffffff"
Selected text colour The colour of text that is selected scroll_entry_text_color="#ffffff"
Selected text background colour The background colour of text that is selected scroll_entry_bg_color="#ffffff"
High battery level colour The colour used for a high battery level (100% to 50%) high_battery_color="green"
Medium battery level colour The colour used for a medium battery level (50% to 10%) medium_battery_color="yellow"
Low battery level colour The colour used for a low battery level (10% to 0%) low_battery_color="red"

Layout

bottom supports customizable layouts via the config file. Currently, layouts are controlled by using TOML objects and arrays.

For example, given the sample layout:

[[row]]
  [[row.child]]
  type="cpu"
[[row]]
    ratio=2
    [[row.child]]
      ratio=4
      type="mem"
    [[row.child]]
      ratio=3
      [[row.child.child]]
        type="temp"
      [[row.child.child]]
        type="disk"

This would give a layout that has two rows, with a 1:2 ratio. The first row has only the CPU widget. The second row is split into two columns with a 4:3 ratio. The first column contains the memory widget. The second column is split into two rows with a 1:1 ratio. The first is the temperature widget, the second is the disk widget.

This is what the layout would look like when run:

Sample layout

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.

For an example, look at the default config, which contains the default layout.

Furthermore, you can have duplicate widgets. This means you could do something like:

[[row]]
  ratio=1
  [[row.child]]
  type="cpu"
  [[row.child]]
  type="cpu"
  [[row.child]]
  type="cpu"
[[row]]
  ratio=1
  [[row.child]]
  type="cpu"
  [[row.child]]
  type="empty"
  [[row.child]]
  type="cpu"
[[row]]
  ratio=1
  [[row.child]]
  type="cpu"
  [[row.child]]
  type="cpu"
  [[row.child]]
  type="cpu"

and get the following CPU donut: CPU donut

Disk, temperature, and network filtering

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:

Disk no filter

The following in the config file would filter out some entries by disk name:

[disk_filter]
is_list_ignored = true
list = ["/dev/sda"]
regex = true
case_sensitive = false
whole_word = false

Disk widget with just disk name filter

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 I set a disk filter accepting anything with /dev/sda, but deny anything with /mnt/.* or /. So to do so, I write in the config file:

[disk_filter]
is_list_ignored = false
list = ["/dev/sda"]
regex = true
case_sensitive = false
whole_word = false

[mount_filter]
is_list_ignored = true
list = ["/mnt/.*", "/"]
regex = true
case_sensitive = false
whole_word = true

Which gives me:

Disk widget with disk name and mount filter

Battery

You can get battery statistics (charge, time to fill/discharge, consumption in watts, and battery health) via the battery widget.

Since this is only useful for devices like laptops, it is off by default. You can either enable the widget in the default layout via the --battery flag, or by specifying the widget in a layout:

Battery example

FAQ

Please see the FAQ for answers to frequently asked questions.

Contribution

Contribution is always welcome! Please take a look at CONTRIBUTING.md for details on how to help.

Contributors

Thanks to all contributors (emoji key):


Marcin Wojnarowski

💻 📦

Mahmoud Al-Qudsi

💻

Andy

💻

Kim Brose

💻

Sven-Hendrik Haase

📖

Artem Polishchuk

📦 📖

Trung Lê

📦 🚇

dm9pZCAq

📦 📖

Lukas Rysavy

💻

Erlend Hamberg

💻

Frederick Zhang

💻

pvanheus

💻

Zeb Piasecki

💻

georgybog

📖

Thanks

  • This project is very much inspired by gotop, its successor ytop, and gtop.

  • Basic mode is heavily inspired by htop's design.

  • This application was written with many, many libraries, and built on the work of many talented people. This application would be impossible without their work. I used to thank them all individually but the list got too large...

  • And of course, thanks to all contributors!

Comments
  • No info shown on macOS Nix

    No info shown on macOS Nix

    Hi, I'm reviewing a new Nix package for bottom (https://github.com/NixOS/nixpkgs/pull/99126) and having trouble using it on macOS. It compiles and runs by linking against the IOKit framework, but the graphs/lists won't populate with any info: image

    To reproduce

    (On macOS with Nix:) $ nixpkgs-review pr 99126

    bottom version (use btm -V)

    bottom 0.4.7

    Platform

    Operating system and OS version: macos 10.14 + nixpkgs master

    Terminal (i.e. urxvt, kitty, etc.): default Teminal.app

    Shell (i.e. zsh, bash, etc.): bash

    System info (RAM, SWAP, etc.):

    Rust version (if building yourself):

    $ nix eval -f . rustc.version
    "1.45.2"
    
    bug needs_more_info 
    opened by r-burns 19
  • Process widget sorting by key press bug (simple)

    Process widget sorting by key press bug (simple)

    Describe the bug

    When entering the process widget and trying to sort by name, it instead sorts by cpu usage.

    It seems like the wrong key is binded to it. I tried searching for it for a pull request, but didn't find my way in the repository.

    What operating system/architecture are you using?

    Arch Linux x86_64

    What terminal are you using bottom on?

    alacritty as well as the linux shell (no GUI).

    What version are you on?

    0.6.4

    How did you install bottom?

    With the official package manager: pacman -S bottom

    How can we reproduce this?

    In a terminal do:

    1. Open bottom
    2. Press e to enter enlarge process widget.
    3. Press n to sort by name (as hinted at by the TUI).
    4. See it getting sorted by CPU instead.

    What is the actual behaviour?

    The widget sorts processes by CPU usage.

    What is the expected behaviour?

    The widget sorts processes by name.

    bug 
    opened by joeftiger 18
  • [Bug]: temperature sensors on some arm64 systems are now broken

    [Bug]: temperature sensors on some arm64 systems are now broken

    Checklist

    Describe the issue

    When running bottom on a Radxa Zero, previously I got the cpu temperature sensor, and gpu temperature sensor, now with the switch to just reading hwmon in sysfs, bottom reports No Sensors Found

    What operating system are you using?

    Linux

    What architecture are you using?

    arm64

    What terminal(s) are you running bottom on?

    alacritty and windows terminal (ssh'd in to the radxa zero)

    What version of bottom are you running?

    0.6.8 (master at 3d2c40ce2f999e )

    How did you install bottom?

    cargo build --release

    How can we reproduce this?

    run btm on a radxa zero

    Additional information

    Perhaps it might be better to look in /sys/devices/virtual/thermal for sensors, or elsewhere. Here's a quick find in sysfs to find all files with temp in the name:

    steev@rzero:/sys$ sudo find . -iname *temp*
    ./kernel/tracing/events/thermal/thermal_temperature
    ./kernel/debug/kvm/halt_attempted_poll
    ./kernel/debug/tracing/events/thermal/thermal_temperature
    ./kernel/debug/regmap/ff634c00.temperature-sensor
    ./kernel/debug/regmap/ff634800.temperature-sensor
    ./devices/platform/soc/ff600000.bus/ff634800.temperature-sensor
    ./devices/platform/soc/ff600000.bus/ff634c00.temperature-sensor
    ./devices/virtual/thermal/thermal_zone0/trip_point_2_temp
    ./devices/virtual/thermal/thermal_zone0/emul_temp
    ./devices/virtual/thermal/thermal_zone0/trip_point_1_temp
    ./devices/virtual/thermal/thermal_zone0/temp
    ./devices/virtual/thermal/thermal_zone0/trip_point_0_temp
    ./devices/virtual/thermal/thermal_zone1/emul_temp
    ./devices/virtual/thermal/thermal_zone1/trip_point_1_temp
    ./devices/virtual/thermal/thermal_zone1/temp
    ./devices/virtual/thermal/thermal_zone1/trip_point_0_temp
    ./bus/platform/devices/ff634800.temperature-sensor
    ./bus/platform/devices/ff634c00.temperature-sensor
    ./bus/platform/drivers/amlogic_thermal/ff634800.temperature-sensor
    ./bus/platform/drivers/amlogic_thermal/ff634c00.temperature-sensor
    ./firmware/devicetree/base/soc/thermal-zones/cpu-thermal/trips/cpu-passive/temperature
    ./firmware/devicetree/base/soc/thermal-zones/cpu-thermal/trips/cpu-hot/temperature
    ./firmware/devicetree/base/soc/thermal-zones/cpu-thermal/trips/cpu-critical/temperature
    ./firmware/devicetree/base/soc/thermal-zones/ddr-thermal/trips/ddr-passive/temperature
    ./firmware/devicetree/base/soc/thermal-zones/ddr-thermal/trips/ddr-critical/temperature
    ./firmware/devicetree/base/soc/bus@ff600000/temperature-sensor@34c00
    ./firmware/devicetree/base/soc/bus@ff600000/temperature-sensor@34800
    ./firmware/devicetree/base/__symbols__/cpu_temp
    ./firmware/devicetree/base/__symbols__/ddr_temp
    
    bug 
    opened by steev 14
  • [Bug]:

    [Bug]: "kinfo_getfile(): No such process" should be silenced

    Checklist

    Describe the issue

    One screenshot instead of 100 words: https://s.verknowsys.com/47a2bdcc2adb3e2aa29030340b65eec3.png

    The problem is related to the sysinfo crate, the process list fetching routine to be precise. When one of probed process is short lived/ killed/ interrupted or finished when kinfo_getfile() reads info from the process file descriptor.

    Details about the syscall: https://www.freebsd.org/cgi/man.cgi?apropos=0&sektion=3&query=kinfo_getfile&manpath=FreeBSD+7.0-current&format=html

    A possible solution may be to take control over default error out (/dev/stderr on UNIX*-like) while Bottom is running.

    What operating system are you using?

    Other (please specify in description)

    What architecture are you using?

    Other (please specify in description)

    What terminal(s) are you running bottom on?

    Wezterm

    What version of bottom are you running?

    master (0.6.x)

    How did you install bottom?

    from git

    How can we reproduce this?

    Forget that bottom runs in the background on a busy system :)

    Additional information

    It happens on all architectures but likely only *BSD have this syscall.

    bug upstream 
    opened by dmilith 14
  • Disk widgets won't display anything on Void Linux with an encrypted disk

    Disk widgets won't display anything on Void Linux with an encrypted disk

    Describe the bug

    Disk widgets won't display anything on Void Linux.

    bottom version

    bottom 0.5.7

    Installation method

    Btm either installed through package manager or through cargo.

    Operating system, OS version, and architecture

    • Linux (x86_64, i686, aarch64) Void Linux

    Terminal (i.e. urxvt, kitty, etc.)

    didn't impact.

    Shell (i.e. zsh, bash, etc.)

    zsh

    Rust version

    1.48

    bug 
    opened by Bumbadawg 14
  • Fine grained kill signals on unix

    Fine grained kill signals on unix

    Description

    This PR adds a menu for selecting the signal to send to the selected process when pressing dd in unix.

    image

    The signals are aligned in a 8×8 grid, which can be navigated with either the arrow keys, hjkl, or the mouse (if enabled). In addition, number keys can be pressed to quickly jump to the respective signal. On enter, the selected signal is sent to the process and the popup is closed (or no signal is sent if 0: Cancel is selected).

    The signal selected by default is 15 (SIGTERM), which is the default signal for killing processes on unix systems.

    Issue

    Closes: #251

    Type of change

    • [x] New feature (non-breaking change which adds functionality)

    Test methodology

    Tested on:

    • [ ] Windows
    • [ ] macOS
    • [x] Linux

    The feature was tested on Linux. In theory, the original functionality should still be in place for windows builds; however, I was not able to verify this as I could not get the app to run properly on windows in any version (including current master, release branch). I can verify that the build succeeds and the app starts on windows, but the output I get in the terminal (cmd, powershell, git bash) of my (virtual) machine (win7) is garbled, and I sadly don't have any other versions of windows to test with (according to the documentation of crossterm, it should work on win7...).

    Checklist

    • [x] Change has been tested to work, and does not cause new breakage unless intended
    • [x] Code has been self-reviewed
    • [x] Passes Travis tests (clippy check and cargo test check)
    • [x] Areas your change affects have been linted using rustfmt (cargo fmt)
    • [x] No merge conflicts arise from the change
    opened by LlinksRechts 14
  • CPU/Memory Usage seems to have gone up considerably compared to earlier versions

    CPU/Memory Usage seems to have gone up considerably compared to earlier versions

    Describe the bug

    Previous versions, 0.4.x I think, versions seemed to use a lot less CPU than 0.5.3 does. Especially as time goes on, I find btm at the top of the processes list, when it never was before.

    A bit ago it was using a whole 5%, and now seems to have settled on about 3%, which is still far more than any other single process on the system right now. The various chrome processes, Xorg, kwin, etc use about 0.1% each, for reference.

    I also just noticed it's using 185 MiB of memory, which is a lot more than it should be.

    These CPU/memory usage issues seems to get worse as time goes on. The way I use bottom, I leave it open on my terminal.

    When freshly, started it uses a more reasonable 0.2% CPU and 13 MiB of memory.

    To reproduce

    1. Run btm
    2. Monitor its CPU/Memory usage
    3. Wait

    bottom version (use btm -V)

    bottom 0.5.3

    bottom config file (if one is used)

    Installation method

    Cargo install

    Platform

    Operating system and OS version: Arch Linux, rolling.

    Terminal (i.e. urxvt, kitty, etc.): Yakuake/Konsole

    Shell (i.e. zsh, bash, etc.): Fish

    If relevant, please provide information on:

    System info (RAM, SWAP, etc.): 16 GB RAM, AMD Ryzen 5 2600 CPU

    Rust version (if building yourself): rustc 1.48.0

    Additional context

    Yakuake is a tabbed drop-down KDE Konsole terminal, so I leave bottom open on it so I can quickly view system information at the push of a hotkey.

    Don't know exact numbers for it to build up. Current system uptime is 2 days, with bottom likely open the whole time. I've gone longer but havent seen it go to absolutely insane levels, maybe it plateaus, or maybe its just really slow and I notice its high usage and restart it often enough that it doesnt eat everything?

    bug 
    opened by DianaNites 13
  • Can't install on Amazon Linux arm64 instances.

    Can't install on Amazon Linux arm64 instances.

    Describe the issue

    There are aarch64 releases here on github but when installing the repo on an arm64 system it does not work.

    Here is the output when I try and enable the repo and install bottom on an amazon arm64 t4g.nano instance running Amazon Linux 2.

    [ec2-user@<redacted> ~]$ sudo yum-config-manager --add-repo https://pkgs.tailscale.com/stable/amazon-linux/2/tailscale.repo
        Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
        adding repo from: https://pkgs.tailscale.com/stable/amazon-linux/2/tailscale.repo
        grabbing file https://pkgs.tailscale.com/stable/amazon-linux/2/tailscale.repo to /etc/yum.repos.d/tailscale.repo
        repo saved to /etc/yum.repos.d/tailscale.repo
    
    [ec2-user@<redacted> ~]$ sudo yum -y copr enable atim/bottom
        Loaded plugins: copr, extras_suggestions, langpacks, priorities, update-motd
        copr done
    
    [ec2-user@<redacted> ~]$ sudo yum -y install bottom
        Loaded plugins: copr, extras_suggestions, langpacks, priorities, update-motd
        https://download.copr.fedorainfracloud.org/results/atim/bottom/epel-8-aarch64/repodata/repomd.xml: [Errno 14] HTTPS Error 404 - Not Found
        Trying other mirror.
        tailscale-stable/aarch64/signature                                                                                                                                                                              |  800 B  00:00:00     
        tailscale-stable/aarch64/signature                                                                                                                                                                              | 2.9 kB  00:00:00 !!! 
        No package bottom available.
        Error: Nothing to do
    

    Running the same set of commands on an amd64 instance runs/installs as expected.

    packaging 
    opened by Spunkie 12
  • CPU graph shows as 0% in Windows 10

    CPU graph shows as 0% in Windows 10

    Issue

    The CPU usage graph shows up as 0%

    To reproduce

    The error is produced whenever bottom is in use

    bottom version

    bottom version - 0.5.7

    Method of installation

    Installed using the msi file from the GitHub release page

    Operating System

    Operating System - Windows 10 (x86_64)

    Terminal

    Terminal - Alacritty

    Shell

    Shell - Windows PowerShell

    image_2021-02-07_113817

    bug 
    opened by thehyperpineapple 12
  • macOS M1 support

    macOS M1 support

    Describe the feature request

    What is the feature of interest? Be clear and concise.

    Adding support for the M1 processor is a good idea, especially if/when it becomes a tier-1 target and has better tooling to work around it.

    Currently I can't exactly test for these, or need to wait for upstream support on libraries I rely on, though.

    Currently not working on M1:

    • Temperatures: See https://github.com/ClementTsang/bottom/issues/371#issuecomment-753527248
    feature 
    opened by ClementTsang 12
  • More human friendly temperature sensor naming

    More human friendly temperature sensor naming

    Description

    This changes how temperature sensors are displayed, in a way I believe to be much better.

    This PR is based on top of and requires #805

    Comparison

    Before: Screenshot_20220914_015509

    After: Screenshot_20220914_015452

    Testing

    Tested on my personal machine. This will likely need additional testing due to the apparent lack of a standard way to get better sensor names.

    If this is a code change, please also indicate which platforms were tested:

    • [ ] Windows
    • [ ] macOS
    • [X] Linux

    Checklist

    If relevant, ensure the following have been met:

    • [X] Areas your change affects have been linted using rustfmt (cargo fmt)
    • [ ] The change has been tested and doesn't appear to cause any unintended breakage
    • [ ] Documentation has been added/updated if needed (README.md, help menu, etc.)
    • [ ] The pull request passes the provided CI pipeline
    • [ ] There are no merge conflicts
    • [ ] If relevant, new tests were added (don't worry too much about coverage)
    opened by DianaNites 10
  • other: re-enable disk usage split

    other: re-enable disk usage split

    Description

    A description of the change, what it does, and why it was made. If relevant (such as any change that modifies the UI), please provide screenshots of the changes:

    This reverts commit d3661c23200a66c7dc01f4e534d8d7e97dc188d2., or #962.

    TODO: This also updates the documentation and cleans up some of the code.

    Issue

    If applicable, what issue does this address?

    Closes: #

    Testing

    If relevant, please state how this was tested. All changes must be tested to work:

    If this is a code change, please also indicate which platforms were tested:

    • [ ] Windows
    • [ ] macOS
    • [ ] Linux

    Checklist

    If relevant, ensure the following have been met:

    • [ ] Areas your change affects have been linted using rustfmt (cargo fmt)
    • [ ] The change has been tested and doesn't appear to cause any unintended breakage
    • [ ] Documentation has been added/updated if needed (README.md, help menu, doc pages, etc.)
    • [ ] The pull request passes the provided CI pipeline
    • [ ] There are no merge conflicts
    • [ ] If relevant, new tests were added (don't worry too much about coverage)
    opened by ClementTsang 0
  • deps: update sysinfo to 0.27.2

    deps: update sysinfo to 0.27.2

    Description

    A description of the change, what it does, and why it was made. If relevant (such as any change that modifies the UI), please provide screenshots of the changes:

    See here for changelog differences.

    Issue

    If applicable, what issue does this address?

    Closes: #

    Testing

    If relevant, please state how this was tested. All changes must be tested to work:

    If this is a code change, please also indicate which platforms were tested:

    • [x] Windows
    • [x] macOS
    • [x] Linux

    Checklist

    If relevant, ensure the following have been met:

    • [ ] Areas your change affects have been linted using rustfmt (cargo fmt)
    • [ ] The change has been tested and doesn't appear to cause any unintended breakage
    • [ ] Documentation has been added/updated if needed (README.md, help menu, doc pages, etc.)
    • [ ] The pull request passes the provided CI pipeline
    • [ ] There are no merge conflicts
    • [ ] If relevant, new tests were added (don't worry too much about coverage)
    opened by ClementTsang 1
  • [Feature] Improving in-app documentation and help

    [Feature] Improving in-app documentation and help

    Checklist

    Describe the feature request

    There's a lot of instances where a question about how to do something simple in bottom can be answered by "look at the docs online" (e.g. a feature exists at all, how to use it, etc.) However, this is, IMO, not a great solution. While it is definitely a good place to put more detailed solutions/answers/things that don't naturally fit (e.g. troubleshooting steps, supported systems, etc.), the in-app documentation/help leaves a lot to be desired.

    Some of it can be improved by things like finishing #159, but doing a lookthrough at the ? help menu and cleaning things up in clap/overall can probably help.

    It might also help to add a toggleable "bar" a la htop/top that gives useful keybindings.

    feature 
    opened by ClementTsang 0
  • [Feature] allow substituting the table gap with lines

    [Feature] allow substituting the table gap with lines

    Checklist

    Describe the feature request

    For styling reasons, it might be nice to be able to swap out the table gap of a table with a border line. This shouldn't be too hard to implement either.

    feature good_first_issue 
    opened by ClementTsang 0
  • [Feature] Fallback to --dot_marker in terminals that don't support braille fonts

    [Feature] Fallback to --dot_marker in terminals that don't support braille fonts

    Checklist

    Describe the feature request

    It would be nice to have btm detect if the terminal/console font is able to render braille, and if not, have it fall back to dot_marker on startup

    feature 
    opened by 12932 1
  • [Feature] I want to use Kitty graphics for the graphs.

    [Feature] I want to use Kitty graphics for the graphs.

    Checklist

    Describe the feature request

    My eyesight is not that good. I don't want to use a small text size for my terminal, I want actual graphical…graphs.

    This can be achieved with Kitty graphics. How hard would it be for me as a Rust developer to add this? Where would you start, maintainer?

    feature 
    opened by ctrlcctrlv 7
Releases(nightly)
Owner
Clement Tsang
Fourth year CS student at the University of Waterloo.
Clement Tsang
ChatGPT-rs is a lightweight ChatGPT client with a graphical user interface, written in Rust

ChatGPT-rs is a lightweight ChatGPT client with a graphical user interface, written in Rust. It allows you to chat with OpenAI's GPT models through a simple and intuitive interface.

null 7 Apr 2, 2023
Memory usage monitor for process trees

gotta-watch-em-all Executes a process with given arguments and monitors, logs when memory usage grows to a new peak. Example: cargo run -- cargo -- bu

Aaron Friel 8 Dec 8, 2022
A cross platform minimalistic text user interface

titik Titik is a crossplatform TUI widget library with the goal of being able to interact intuitively on these widgets. It uses crossterm as the under

Jovansonlee Cesar 113 Dec 31, 2022
Another TUI based system monitor, this time in Rust!

Another TUI based system monitor, this time in Rust!

Caleb Bassi 2.1k Jan 3, 2023
Cross-platform GameMaker extension for getting system information and resource usage

GM Sysinfo Cross-platform GameMaker extension for getting system information and resource usage Table of Contents Table of Contents Examples Display m

SpikeHD 3 Dec 1, 2023
A library that allows for the arbitrary inspection and manipulation of the memory and code of a process on a Linux system.

raminspect raminspect is a crate that allows for the inspection and manipulation of the memory and code of a running process on a Linux system. It pro

Liam Germain 24 Sep 26, 2023
☄🌌️ The minimal, blazing-fast, and infinitely customizable prompt for any shell

☄??️ The minimal, blazing-fast, and infinitely customizable prompt for any shell

Starship Command 31.6k Dec 30, 2022
A robust, customizable, blazingly-fast, efficient and easy-to-use command line application to uwu'ify your text!

uwuifyy A robust, customizable, blazingly-fast, efficient and easy-to-use command line application to uwu'ify your text! Logo Credits: Jade Nelson Tab

Hamothy 43 Dec 12, 2022
A customizable MCTS planner with advanced featured tailored to multi-agent simulations and emergent narratives.

NPC engine Core:  Utils:  © 2020-2022 ETH Zurich and other contributors. See AUTHORS.txt for more details. A customizable Monte Carlo Tree Search (MCT

Game Technology Center, ETH Zurich 30 Jun 6, 2023
Socket Monitor: A prettier and simpler alternative to netstat or ss for socket monitoring with the ability to scan for malicious IP addresses.

?? Somo A prettier alternative to netstat or ss for socket monitoring. ⬇️ Installation: 1. Install cargo: From crates.io. 2. Install the somo crate: c

Theodor Peifer 13 Jun 6, 2023
A wayland native, highly customizable runner.

anyrun A wayland native krunner-like runner, made with customizability in mind. Features Style customizability with GTK+ CSS More info in Styling Can

null 18 Jan 22, 2023
A discord bot to view & monitor OpenSea collections, written in Rust

Titan What is this This is a discord bot to monitor OpenSea collections and get info about them, including: Floor Price Activity Sales per Hour And mo

theldb 3 Oct 11, 2022
Small command-line tool to switch monitor inputs from command line

swmon Small command-line tool to switch monitor inputs from command line Installation git clone https://github.com/cr1901/swmon cargo install --path .

William D. Jones 5 Aug 20, 2022
A resource monitor in your browser, in Rust

axact A resource monitor in your browser, so you can view the state of a VM or some other remote host. Built with Rust & Preact, see the video: https:

amos 87 Apr 13, 2023
Cross-platform Rust library for coloring and formatting terminal output

Coloring terminal output Documentation term-painter is a cross-platform (i.e. also non-ANSI terminals) Rust library for coloring and formatting termin

Lukas Kalbertodt 75 Jul 28, 2022
Write Cross-platform application with React-like decralative UI framework and scalable ECS architecture all in Rust.

bevy_dioxus Dioxus Plugin for Bevy Write Cross-platform application with React-like decralative UI framework and scalable ECS architecture all in Rust

Junichi Sugiura 269 Dec 29, 2022
Simple macros to write colored and formatted text to a terminal. Based on `termcolor`, thus also cross-platform.

Bunt: simple macro-based terminal colors and styles bunt offers macros to easily print colored and formatted text to a terminal. It is just a convenie

Lukas Kalbertodt 202 Dec 22, 2022
Rust-based language and runtime for cross-platform app development

Pax Pax is a cross-platform rendering engine & Rust framework for interactive graphics, animations, and GUIs. Pax extends the Rust programming languag

Pax 75 Dec 19, 2022
A simple cross-platform easy to use STL Viewer with GUI and CLI options

Stlvi STL viewer written in Rust. This project is still in development. It is available in both CLI and GUI mode. Supported OS Linux Windows Mac Scree

Mantresh Khurana 4 Mar 2, 2023