| Crates.io | catfood |
| lib.rs | catfood |
| version | 0.3.0 |
| created_at | 2025-12-22 15:46:08.3372+00 |
| updated_at | 2025-12-30 17:12:07.610023+00 |
| description | A modular utility suite for system management, built with Rust and Ratatui |
| homepage | https://github.com/thombruce/catfood |
| repository | https://github.com/thombruce/catfood |
| max_upload_size | |
| id | 1999891 |
| size | 81,752 |

A customizable system status bar built with Rust and extensible with Lua. Part of the catfood utility suite.
kitten panel to render the bar)![NOTE] Whereas the
catfood barutility does directly depend on Kitty, thecatfood-barbinary may work without it. You will need to handle your own layering and positioning if you give this a try.
# Install catfood
cargo install catfood
# Build and install
cargo install --path crates/catfood
# Or build and run locally
cargo run --release --bin catfood -- bar
Run the system bar:
catfood bar
When run through the main catfood CLI, it automatically spawns in a kitty panel:
To set the position, you must run the catfood-bar binary directly:
# Bottom of screen
kitten panel --edge=bottom catfood-bar
Configuration is stored in ~/.config/catfood/bar.json. The first run creates a default config with all components enabled.
{
"bars": {
"left": ["workspaces"],
"middle": ["time", "separator", "weather"],
"right": [
"temperature",
"cpu",
"ram",
"separator",
"wifi",
"separator",
"brightness",
"volume",
"separator",
"battery"
]
},
"colorize": true
}
Components can be specified as either strings or objects with additional options:
{
"bars": {
"right": ["cpu", "ram", "wifi"]
}
}
{
"bars": {
"right": [
{
"name": "cpu",
"sparkline": true,
"sparkline_length": 8,
"sparkline_update_freq": 2
}
]
}
}
workspaces - Hyprland workspace switchingwindows - Window management infocpu - CPU usage percentage (supports sparkline)ram - Memory usage percentage (supports sparkline)temperature - CPU temperaturebattery - Battery status and percentagewifi - WiFi connection status and signal strength (supports sparkline)weather - Current weather informationvolume - System volume levelbrightness - Screen brightnesstime - Current date and timeseparator - Visual separator (" | ")space - Single space character for fine spacingThe following components support sparkline visualization:
cpu - Real-time CPU usage graphram - Memory usage over timewifi - WiFi signal strength historysparkline (default: false) - Enable sparkline modesparkline_length (default: 10) - Graph width in characterssparkline_update_freq (default: varies) - Update frequency in seconds
sparkline_logarithmic (default: false) - Use logarithmic scalingCreate custom components in ~/.config/catfood/components/*.lua:
return {
config = {
-- Component-specific settings
},
update = function()
-- Update state periodically (optional)
end,
render = function(colorize)
-- Return {"text", "color"} or "text"
return {"12:34", "yellow"}
end
}
Available colors: red, green, yellow, blue, magenta, cyan, white, black, gray, dark_red, dark_green, dark_yellow, dark_blue, dark_magenta, dark_cyan, dark_gray.
![NOTE] Color support is a work in progress. Not all of these colors may work. In future, user-defined colors may be supported along with fallback values for more restricted terminal color-spaces.
{
"bars": {
"left": ["workspaces"],
"middle": ["time"],
"right": ["battery"]
}
}
{
"bars": {
"left": ["workspaces"],
"middle": ["time", "separator", "temperature"],
"right": [
{"name": "cpu", "sparkline": true, "sparkline_length": 8},
"space",
{"name": "ram", "sparkline": true, "sparkline_length": 8},
"separator",
{"name": "wifi", "sparkline": true, "sparkline_length": 10}
]
}
}
{
"bars": {
"left": ["workspaces"],
"middle": ["time"],
"right": [
{"name": "cpu", "sparkline": true, "sparkline_length": 4},
"space",
{"name": "ram", "sparkline": true, "sparkline_length": 4},
"space",
{"name": "wifi", "sparkline": true, "sparkline_length": 4}
]
}
}
Configuration changes are applied automatically:
~/.config/catfood/bar.jsonErrors are logged to ~/.local/share/catfood/logs/bar.log:
2025-12-21T03:45:12Z [ERROR] [COMPONENT_WORKSPACES] Error: Failed to get workspaces
2025-12-21T03:45:13Z [ERROR] [CONFIG] Failed to reload configuration: ...
The log maintains the last 1000 lines.
Copyright (c) Thom Bruce thom@thombruce.com
Licensed under the MIT license.