/randy

System info viewer written in Rust / GTK3. Inspired by Conky.

Primary LanguageRustGNU General Public License v3.0GPL-3.0

Randy

Conky inspired system info viewer written in Rust / GTK3

Cheezeburgerz!

Conky was named after the puppet... so this thing is Randy

A man’s gotta eat, Julian.

Goals

Learn a ton

I'm new to Rust (you can tell in the code!), having fun and learning a lot.

I'd like to come up with a more standard "module" interface once I've developed more of the modules and refactor based on what I have learned.

Feature parity with my old Conky config

Done! My old Conky setup looked more or less like the Randy screenshot.

Took 200+ commits to get there, but its there and working!

Frick Ricky, stay off the CPU

Strive to do things in as little cycles as possible. Not do things as fast as possible (hence to parallel scans of /proc/*).

ps -eo etimes,times,command | grep randy

Speed tests

  • Check out the bench directory/sub-crate for some speed testing
  • Build with --features timings to see details about how long things take in Randy

Linux only

At the moment Randy only really runs on Linux. Running on other operating systems is not a goal.

Note: someone shared a screenshot of Randy running on Windows with WSfL though :D.

Features

Configurable modules

  • Module list:
    • system - system info
    • cpus - all cpus usage stats bar
    • cpu_consumers - top N pids using cpu and their usage
    • mem_consumers - top N pids using mem and their usage
    • filesystem - usage of a given mounted filesystem
    • net - usage recv/trans for a given network interface
    • battery - charging/discharging percentage of /sys/*/power_supply's
  • Can order the modules how you wish
  • Can enable/disable modules and sub items

UI settings

  • bar_height - the height of the bars (default: 10px)
  • base_opacity - the base opacity of the Randy window. affects window and all sub-widgets. (default: 1.0)
  • color_bar - base color of the usage bars
  • color_bar_med - color of the usage bars > 50% < 80%
  • color_bar_high - color of the usage bars > 80%
  • color_borders - color of the GTK borders (frame borders, bar borders) defaults to same as color_text
  • color_label - color of the "labels"
  • color_text - color of all other text
  • decoration - hide/show window decorations
  • font_family - the CSS-style font family string (font names with spaces must be wrapped in escaped quotes, eg fo_family: "\"Terminus (TTF)\", \"Liberation Mono\", monospace")
  • font_size
  • mod_bat -modulo used to skip frames for getting battery data (default: 2)
  • mod_fs - modulo used to skip frames for getting filesystem data (default: 2)
  • mod_top - modulo used to skip frames for getting top data (default: 2)
  • resizable - bool to make the GUI resizable
  • skip_taskbar - in case you want to see a Randy item in the taskbar
  • timeout - time in seconds to wait between frame updates
  • xpos - starting position x
  • ypos - starting position y

Building

Optional deps / features

  • nvidia: Enable NVIDIA card temp sensing via NVML .so
  • sensors: Enable lm-sensors integration

Example:

cargo run --features sensors,nvidia

Required build packages

I have only barely looked into packaging but jhjaggars put some helpful hints for Raspbian and Fedora in here:

Example

cargo run --release --no-default-features  # build with lm-sensors and nvml disabled

Running

Randy needs to be pointed at a config Yaml. It will look for the default.yml in $PWD/config. Should work ootb if you launch from the root of the Git repo.

If you are launching Randy from elsewhere... point it at the config Yaml file of your choosing. Example:

randy /tmp/configs/my_cool_config.yml

Screenshots

screenshot screenshot_green

FAQ

  • Does randy work with Wayland?
    • Yes, check out the proof
  • Does randy work with X?
    • Yes