Website review
This review may include AI-generated content and is not individually verified. Domain, certificate and other facts come from the observed data on this page.
What is Conky?
Conky is a free, lightweight system monitor for Linux and BSD desktops that draws live information directly onto your wallpaper or into a small always-on window. Instead of opening a separate app to check CPU load, memory, disk space, network traffic, weather or music status, you keep that data visible at a glance.
Its defining trait is configurability. Almost everything shown is assembled from variables that you place in a plain-text configuration file, so the display can be a single line of text or a dense panel mixing text, bars and graphs. The same file holds global settings that control update intervals, positioning, transparency and window behavior. For logic beyond static layout, the Lua API lets you compute, fetch or format values with custom scripts.
Who it suits
- Desktop tinkerers who want a monitor that matches their theme exactly rather than accepting a fixed widget.
- Developers and sysadmins who watch several machines or resources and prefer one compact readout.
- Low-resource setups on older hardware, where a text-driven monitor is lighter than a full dashboard application.
- Anyone comfortable editing config files; the trade-off for flexibility is that setup is manual.
Where it fits less well
If you want a graphical settings screen, quick drag-and-drop placement or a polished default look, Conky will feel like work. It rewards patient configuration and punishes typos, and sharing or troubleshooting configs often means reading documentation and community examples.
A practical starting point
Begin with a minimal config: one text line showing CPU and memory, positioned where you want it. Confirm it renders correctly, then add bars or graphs one at a time. Keep a backup of the working file before experimenting, since a broken variable can blank the display. The official documentation covers variables, configuration settings and the Lua API, and community configs are shared through the project's GitHub wiki. For broader desktop customization alongside it, see GitHub for the wiki and issue tracker, and Arch Linux if you prefer installing from a distribution package.
How do I install Conky on my system?
Conky is usually installed from your distribution's package manager rather than from its own site. The official documentation at Conky covers configuration, variables and the Lua API, but installation itself is normally a distro-level task.
Typical install paths
- Debian/Ubuntu-based:
sudo apt install conky-all(the-allvariant bundles common optional features; the plainconkypackage is leaner). - Fedora/RHEL-based:
sudo dnf install conky. - Arch-based:
sudo pacman -S conky(plus optional feature packages from the AUR if you need extras). - macOS (Homebrew):
brew install conky. - Windows: no first-class native build; most people run it under WSL or a Linux VM.
After installing
Create a config file at ~/.config/conky/conky.conf (or ~/.conkyrc on older setups), then run conky in a terminal to test it. Add it to your desktop session's autostart if you want it always visible. The Conky docs' Variables and Configuration settings pages are the reference for what goes in that file.
Choosing between package and source
| Approach | Best for | Trade-off |
|---|---|---|
| Distro package | Most users | May lag behind the latest release or omit optional features |
| Build from source | Needing a specific version or feature flags | You manage dependencies and updates yourself |
| Docker | Isolated testing or headless setups | Needs display/socket access to draw on your desktop |
If a package install fails or a feature is missing, check your distro's package name first — "conky-all", "conky-manager" and similar variants exist — before considering the Compiling guide on the project's own documentation.
What variables can I use in a Conky configuration file?
Conky variables are the placeholders you put in your configuration file to pull live system data into the display. Each variable starts with a dollar sign and expands to a value at runtime — for example ${cpu} for CPU usage, ${mem} for memory, ${fs_used /} for disk usage on the root filesystem, ${downspeed eth0} for download rate, or ${time %H:%M} for the current time. Plain text, colors, and layout commands sit alongside them in the same file, so the config reads like a template that Conky redraws on each update interval.
The variables are organized by what they report: CPU and process statistics, memory and swap, disk and filesystem usage, network interfaces, battery and temperature sensors, audio, mail, and weather, plus general ones like ${exec} for running a shell command and ${if_match} for conditional logic.
Practical patterns
- Objects with arguments: Many variables take parameters, such as an interface name (
${downspeed wlan0}), a mount point (${fs_free /home}), or a format string (${time %A %d %B}). - Bars and graphs: Wrap a value in a bar or graph variable to visualize it, e.g. a CPU bar or a memory graph, instead of printing a bare number.
- Conditionals: Use
${if_existing},${if_running}or${if_match}to show a block only when a condition holds, then close it with${endif}. - Alignment and spacing:
${alignr},${goto}and${offset}position text without changing the underlying data. - Custom commands:
${exec}and${execi}run scripts, so anything your shell can produce can become a Conky variable.
Choosing the right one
Match the variable to the metric you actually care about. For a laptop panel, battery and network variables matter more than disk I/O; for a workstation monitor, CPU per-core, memory, and temperature variables are the useful ones. Prefer built-in variables over ${exec} where both exist, because spawning a process every update cycle costs more than reading a value directly.
The authoritative list lives in the Conky documentation under Variables, with configuration settings and the Lua API documented separately. The community wiki collects ready-made configs and Lua scripts if you would rather adapt an existing setup than build one from scratch.
How can I customize Conky's appearance and behavior with configuration settings?
Conky customization works on two levels: global configuration settings that control how the whole program behaves, and variables that define each object drawn on screen (text, bars, graphs, and so on). If you want a different look or different behavior, you usually change both: settings for the overall frame, variables for the content.
What settings and variables each control
- Configuration settings are program-wide parameters. They cover things like window placement, transparency, fonts, colors, spacing, and update timing. Change one and it affects the entire Conky window rather than a single line.
- Variables are the building blocks of the display. Each variable produces one object, such as CPU usage, memory, network throughput, disk activity, or plain text. You arrange them in your config to build the layout you want.
A practical way to think about it: settings decide the canvas, variables decide what is painted on it.
Typical customization workflow
- Start from an existing config rather than a blank file, so you can see how settings and variables interact.
- Adjust global settings first — window position, transparency, font, and update interval — until the frame looks right.
- Then edit variables to choose which readings appear, in what order, and with what labels or units.
- Reload Conky and iterate; small changes are easier to debug than large rewrites.
When to go beyond settings and variables
If settings and variables cannot express what you want, Conky exposes a Lua API for custom behavior. That is the right tool for computed values, conditional display, or drawing that the standard variables do not cover. It is more work than editing a config line, so reserve it for cases where the built-in options genuinely fall short.
For ready-made examples, the project points to a wiki containing user configs, Lua scripts, and FAQs. That is often faster than writing a config from scratch. The official documentation is at Conky, and the wiki is hosted on GitHub.
A concrete starting scenario
Suppose you want a minimal desktop readout: clock, CPU, memory, and network, semi-transparent, in the top-right corner. Set the global settings for position, transparency, and font once; then add one variable per reading, each with a short label. If you later want the network line to appear only when traffic is above a threshold, that is a signal to reach for the Lua API instead of trying to force it with settings alone.
Decision criterion
Stay with configuration settings and variables while your goal is layout, styling, and selecting standard readings. Move to Lua only when you need logic, computation, or custom drawing that the built-in options cannot produce.
How do I extend Conky with the Lua API?
Conky's Lua API is the supported route for behavior that its built-in variables and configuration settings cannot express. Instead of describing a display object with a variable, you write a Lua script that Conky loads and calls on each update cycle.
What the Lua API is for
Use it when you need logic rather than a static readout: computing a value from several sources, formatting text conditionally, drawing custom elements, or reacting to state that changes between refreshes. If a single built-in variable already shows what you want, a Lua script usually adds complexity without benefit.
The basic extension pattern
- Write a Lua script that defines the functions Conky should call.
- Register it in your Conky configuration so Conky knows to load the file.
- Place a Lua-calling object in the configuration where you want the script's output to appear.
- Reuse the same script for several objects by passing arguments, rather than duplicating files.
Concrete scenario: you want a status line that shows "busy" during working hours and "quiet" otherwise, colored differently in each case. A Lua function can check the time, choose the string, and return it; the configuration just places the object.
Trade-offs to weigh
| Approach | Best for | Cost |
|---|---|---|
| Built-in variables | Standard CPU, memory, disk, network readouts | Limited to what exists |
| Configuration settings | Global behavior, appearance, update timing | No custom logic |
| Lua API | Computed values, conditional output, custom drawing | You maintain the script and debug it yourself |
A practical caution: Lua runs on every update interval, so keep functions cheap. Heavy work in a fast-refreshing object is a common cause of a sluggish desktop.
Where to go next
Start from the Lua API section of the Conky documentation at Conky, then look at the Variables and Configuration settings sections so you know what you can already do without scripting. For worked examples and user-contributed scripts, the project's wiki is the natural follow-up; the documentation links to it alongside guides for GitHub-hosted material. If you plan to build Conky yourself with Lua support, check the Compiling page first, since Lua availability can depend on how the binary was built.
How do I compile Conky from source?
Compiling Conky from source means building the program on your own machine rather than installing a prebuilt package. You would do this to get a newer version than your distribution ships, to enable a feature or library that the packaged build leaves out, or to run it on a platform without an official package. The trade-off is that you take on dependency management and rebuilds after updates, so if a distro package already covers your needs, use it.
The official documentation's "Compiling" section is the starting point: Conky. It sits alongside reference material for the display objects ("Variables"), global options ("Configuration settings"), and the Lua API for custom behavior.
General build outline
Conky is a CMake-based project, so the typical flow is:
- Install a C/C++ toolchain, CMake, and the development headers for the libraries you want Conky to use (for example X11, Wayland, or audio-related libraries). Missing headers are the most common cause of a feature silently not being built.
- Fetch the source from the project's repository or a release tarball.
- Configure with CMake, explicitly switching on optional features you care about and off those you don't.
- Build and install.
Watch the configure output: it reports which optional components were found. If something you expected is listed as disabled, install that library's development package and configure again.
A concrete scenario
Suppose your distribution's Conky is several releases behind and you want a newer feature. Clone the source, install the corresponding -dev or -devel packages for your desktop stack, run CMake with a prefix under your home directory so you don't disturb the system install, then build. Keep notes on the exact configure flags, because you'll repeat them after each update.
Decision criteria
- Use a package if you want automatic updates and don't need optional features.
- Compile if you need a specific version, a non-default feature set, or a platform the packages don't cover.
- Use a container if you want an isolated build or runtime without touching your host system; the project documents a Docker approach.
Useful companions
- GitHub hosts the project repository and its wiki, which collects user configs, Lua scripts, and FAQs.
- CMake documents the configure and build system you'll be driving.
Next step: read the "Compiling" page for the exact dependency list and flags for your platform, then check the "Configuration settings" page so you know which options to enable at build time versus set later in your config file.
User reviews (0)