Commit Graph

20 Commits

Author SHA1 Message Date
ClementTsang 0a99bd6f9a feature: add disk usage chart widget 2026-06-17 18:20:47 -04:00
Clement Tsang fca070ed08 feature: add disk I/O time series chart (#2073)
This PR adds a disk I/O (read and write rate) graph.
2026-05-30 00:43:20 -04:00
Clement Tsang 8cd50b2a4a bug: fix bug causing deprecated setting warnings even if commented out (#2070)
Comment out flags header in default config file + fix bug causing deprecated warnings if `[flags]` was uncommented even when the fields themselves were commented out.
2026-05-20 03:15:44 +00:00
Clement Tsang a0c96cfd6e other: clean up config file migrations (#2065)
Cleaning up a bunch of config file migration work.
2026-05-16 01:49:33 -04:00
Clement Tsang 65acf5e49e other: move cpu and memory settings over (#2064) 2026-05-15 20:00:44 -04:00
Clement Tsang 899914591e other: migrate over process config fields to [processes] (#2063)
Migrate over process config fields from the general `[flags]` to `[processes]`. Similar to #2062, this only deprecates them at the moment.
2026-05-13 03:14:19 -04:00
Clement Tsang edc295e3ed other: partial migration of network/memory config options from flags (#2062)
This change moves some options to a more appropriate section for the config file. This only deprecates the old options for now, so they're still valid, but we will remove them later (maybe after the next stable release, to give warning).

One thing I want to do for the legend position options is maybe expand it, and now is the best time to do so, but for now I'm just copying it over verbatim.

The deprecated options will also emit a warning to stderr.

This PR also contains a driveby to alias `[network]` to `[network_graph]`.
2026-05-12 04:59:59 -04:00
Clement Tsang d08036f69a refactor: refactor some fields and code to use "colour" spelling (#2058)
<!-- Please use this template (unless you have a very good reason not
to). PRs that do not use the template may be closed. -->

## Description

_A description of the change, what it does, and why it was made. If
relevant (e.g. UI changes), **please also provide
screenshots/recordings**:_

Rename a bunch of code/struct field names to use "colour". Note this
should have no functional change to config settings as I was already
aliasing "colour" for "color" settings, this just flips it internally.

As for why, I'm Canadian, I grew up spelling it this way, sorry.

## Issue

_If applicable, what issue does this address?_

Closes: #<issue-number>

## Testing

_If relevant, please state how this was tested (including steps):_

_If this change affects the program, please also indicate which
platforms were tested:_

- [ ] _Windows_
- [ ] _macOS (specify version below)_
- [x] _Linux (specify distro below)_
- [ ] _Other (specify below)_

## Checklist

_Ensure **all** of these are met:_

- [x] _If this PR adds or changes a dependency, please justify this in
the description_
- [x] _If this is a code change, areas your change affects have been
linted using (`cargo fmt`)_
- [x] _If this is a code change, your changes pass `cargo clippy --all
-- -D warnings`_
- [x] _If this is a code change, new tests were added if relevant_
- [x] _If this is a code change, your changes pass `cargo test`_
- [x] _The change has been tested to work (see above) and doesn't appear
to break other things_
- [x] _Documentation has been updated if needed (`README.md`, help menu,
docs, configs, etc.)_
- [x] _There are no merge conflicts_
- [x] _You have reviewed your changes first_
- [x] _The pull request passes the provided CI pipeline_

## Other

_Anything else that maintainers should know about this PR:_
2026-05-08 01:34:02 -04:00
ChrisJr404 1888dbb270 feature: configurable default sort column for the process widget (#2053)
## Description

You can now tell bottom which column the process widget should be sorted
by at startup, instead of always falling back to CPU%.

It's settable in two places: a `default_sort` field under `[processes]`
in the config file, and a `--process_default_sort` CLI flag. The flag
accepts the same column-name aliases that already work in
`[processes].columns` (e.g. `cpu%`, `mem`, `pid`, `name`, `read`,
`t.write`, etc.), and the CLI flag wins over the config setting.

```toml
[processes]
default_sort = "mem"
```

```
btm --process_default_sort mem
```

This piggybacks on the same wiring that #2003 added for the disk and
temperature widgets, just routed through the existing `ProcTableConfig`
so the widget initializer can pick a non-default sort index without
touching any of the runtime sort code.

A few small things worth flagging:

- If the configured column is not actually present in the user's
`columns` list, the widget falls back to the existing default behaviour
(CPU% in normal/grouped mode, PID in tree mode) instead of silently
snapping to column 0. That keeps misconfiguration predictable.
- The deserializer for `ProcColumn` was refactored to share its parsing
with the CLI's value parser, so config-file and CLI accept the exact
same aliases. The set of accepted strings is unchanged from before.

I checked the `# columns =` workaround floating around in #810 and on
Stack Overflow; it changes layout but not the sort key, so it doesn't
actually solve the original ask.

## Issue

Closes: #810

## Testing

_If this change affects the program, please also indicate which
platforms were tested:_

- [ ] _Windows_
- [ ] _macOS (specify version below)_
- [x] _Linux (Kali, kernel 6.19)_
- [ ] _Other (specify below)_

Added unit tests for `ProcWidgetState::new` covering the happy path
(sort index actually lands on the configured column) and the fallback
path (configured column not in the column list). Also added valid +
invalid config integration tests under `tests/valid_configs/` and
`tests/invalid_configs/`, matching the pattern used for the disk/temp
default-sort tests.

`cargo test`, `cargo clippy --all -- -D warnings`, and `cargo fmt
--check` are all clean.

Manual smoke test: ran `btm --process_default_sort=mem` and `btm
--process_default_sort=garbage`. The first starts the widget sorted by
Mem%, the second exits early with `'garbage' is not a valid process
column for --process_default_sort` from the args layer. Also ran `btm -C
tests/valid_configs/proc_default_sort.toml` to confirm the config-file
path works the same way.

## Checklist

_Ensure **all** of these are met:_

- [x] _If this PR adds or changes a dependency, please justify this in
the description_ (no new deps)
- [x] _If this is a code change, areas your change affects have been
linted using (`cargo fmt`)_
- [x] _If this is a code change, your changes pass `cargo clippy --all
-- -D warnings`_
- [x] _If this is a code change, new tests were added if relevant_
- [x] _If this is a code change, your changes pass `cargo test`_
- [x] _The change has been tested to work (see above) and doesn't appear
to break other things_
- [x] _Documentation has been updated if needed (`README.md`, help menu,
docs, configs, etc.)_
- [x] _There are no merge conflicts_
- [x] _You have reviewed your changes first_
- [x] _The pull request passes the provided CI pipeline_

## Other

The schema under `schema/nightly/bottom.json` was regenerated via `cargo
run --features generate_schema --bin schema`; the only diff is the new
`default_sort` entry on `ProcessesConfig`, mirroring what's already
there on `DiskConfig` and `TemperatureConfig`.

---------

Co-authored-by: ClementTsang <dev@cjhtsang.ca>
2026-05-08 00:31:08 -04:00
Clement Tsang 7496bbdd54 feature: configurable default sort column for temperature and disk table widgets. (#2003)
Adds support for configuring the default sort column for temperature and disk widgets via config file.
2026-03-21 17:23:16 -04:00
rezky_nightky f277dff2b2 fix: correct spelling across docs, comments, and configs (#1891) 2025-11-30 16:42:06 -05:00
Clement Tsang a35b81a187 docs: update docs page with missing features (#1805)
* add no key setting

* do it here instead of in main loop

* add a warning

* docs: update a bunch of docs with features

* linux-only test

* oop

* skip field check for other os

* oop

* easier way of doing it

* use dead code

* oop

* huh guess I don't need it
2025-08-29 23:12:19 -04:00
Clement Tsang 4d935bdd70 feature: support virtual memory column for processes (#1767)
* quick refactor of bytes/name

* oop

* Add virt mem field

* add value

* add virtual memory columns + tests

* fix

* Changelog
2025-07-30 04:24:21 +00:00
Clement Tsang 196d6d18c6 feature: add the ability to configure the disk widget's table columns (#1625)
* a bit of refactoring here...

* some refactoring, add columns

* cleanup

* add disk column feature

* update changelog
2024-11-18 02:28:20 +00:00
Frederick Zhang 4c8367225a fix: missing parent section names in TOML (#1551) 2024-08-07 12:59:44 -04:00
Clement Tsang a6e1ea3bd8 docs: update docs on filter (#1519)
Updates some outdated docs on filtering, and adds some tests as well. In particular, this also adds a cfg_attr on tests to try and catch unknown fields; we'll be more lenient in prod builds though and allow them.
2024-07-31 06:41:30 +00:00
Clement Tsang 4b14ccb56b feature: support italic text styling (#1514)
Support italics as a text styling option.
2024-07-31 01:54:26 +00:00
Clement Tsang f091ebdc6a feature: support simple colour settings for text fields too (#1511)
* feature: support simple colour settings for text fields too

* also add 'color' back to some options

* tests
2024-07-30 07:15:23 +00:00
Clement Tsang 28972a1e64 refactor: refactor styling options (#1499)
Introduce a new configuration system for styling.
2024-07-29 09:03:35 +00:00
Clement Tsang dd66ae774c refactor: simplify some config -> constraints code (#1383)
* refactor: simplify some config -> constraints code

* iteratively progress...

* update bcr; this might need testing since I removed some old proc code

* widget side

* fix battery

* fix widget tests with bandaid for now

The issue was that the calculations assume a certain ratio for CPU
legends.

* add some tests

* bump up

* fix proc drawing issues

So with the proc widget in certain places, there would be a panic during
constraint determination.

Looks like back when I wrote this I made some gross assumptions about
certain things. In particular, the problem here was that the search
added an additional "one" height, so that needs to be accounted for
after we removed the "doubling" code.

* tests

* fix tests

* reorganize tests

* clippy

* fix cross tests not working

* fix builds for android
2024-01-15 04:19:18 -05:00