Conky-style system monitoring widget for KDE Plasma 6+
Konky brings the beloved Conky system monitoring aesthetic to KDE Plasma 6. It provides real-time CPU, RAM, disk, network, GPU, temperature, battery, weather, and clock modules — all rendered in sleek QML with configurable themes and layouts.
- System Monitoring — CPU (total + per-core), RAM, disk, network, GPU, thermal sensors, battery
- Weather — Open-Meteo based weather with location geocoding (no API key required)
- Clock — Real-time clock display
- Process Monitor — Top processes by CPU/memory usage
- Multiple Display Types — Ring, bar, line charts, sparkline, combined views
- Themes — Dark, Light, Cyber-Blue, Matrix-Green (easily extensible)
- Layouts — Vertical, horizontal, and grid arrangements
- Panel + Desktop — Compact representation for system tray panel, full representation for desktop widget
- Conky-Compatible Config — JSON-based module configuration inspired by Conky's declarative style
- Sensor History — Rolling history buffer for sparkline/graph rendering
- KDE Native — Built on KSystemStats, Kirigami, and Plasma 6 APIs — no external daemons
| View | Path |
|---|---|
| Full desktop widget (dark theme) | screenshots/full-dark.png |
| Compact panel mode | screenshots/compact.png |
| Grid layout (3 columns) | screenshots/grid-layout.png |
| Cyber-blue theme | screenshots/theme-cyber-blue.png |
| Matrix-green theme | screenshots/theme-matrix-green.png |
| Configuration dialog | screenshots/config-dialog.png |
Screenshots are placeholders — add your own captures to the
screenshots/directory.
# Clone the repository
git clone https://github.com/YOUR_USERNAME/konky.git
cd konky
# Check system dependencies
./install.sh --check-deps
# Install
./install.sh
# The widget should appear in the widget picker.
# To add it to your desktop: Right-click desktop → Add Widgets → Search "Konky"- Right-click on your desktop or panel → Add Widgets...
- Click Get New Widgets... → Download New Plasma Widgets
- Search for "Konky" → Install
- Add the widget from the picker
# Copy the package directory to your Plasma plasmoids folder
cp -r package/ ~/.local/share/plasma/plasmoids/com.github.konky/
# Restart Plasma to pick up the new widget
plasmashell --replace &./install.sh --uninstallRight-click the Konky widget → Configure Konky...
| Setting | Description | Default |
|---|---|---|
| Refresh Interval | Sensor polling interval (ms) | 2000 |
| Layout Type | vertical, horizontal, grid |
vertical |
| Theme | konky-dark, konky-light, cyber-blue, matrix-green |
konky-dark |
| Font Family | Display font | Noto Mono |
| Font Size | Display font size | 10 |
| Show Icons | Toggle module icons | true |
| Show Labels | Toggle module labels | true |
| Show Graphs | Toggle sparkline/history graphs | true |
| Grid Columns | Number of columns (grid layout) | 3 |
| Switch Width | Compact mode trigger width | 200 |
| Switch Height | Compact mode trigger height | 120 |
Each module can be enabled/disabled individually:
- CPU, RAM, Disk, Network (enabled by default)
- GPU, Thermal, Battery, Clock, Weather, Process (disabled by default)
| Setting | Description | Default |
|---|---|---|
| Weather Enabled | Toggle weather module | false |
| City | Display city name | Budapest |
| Latitude / Longitude | Geolocation for Open-Meteo API | 47.4979 / 19.0402 |
For fine-grained control, paste a JSON config into the Advanced → modulesConfigJson field:
{
"layout": "vertical",
"gridColumns": 3,
"moduleSpacing": 10,
"modules": [
{
"id": "cpu-main",
"type": "cpu",
"enabled": true,
"order": 0,
"label": "CPU",
"displayType": "ring",
"cpu": {
"showPerCore": true,
"showGraph": true,
"color": "#00d4aa"
}
}
],
"theme": {
"name": "konky-dark",
"colors": {
"primary": "#00d4aa",
"secondary": "#3d84ff"
}
}
}See example-config.json for a complete configuration example.
- Open
package/contents/ui/main.qml - Find the
applyTheme()function - Add a new
caseblock with your color scheme:
case "my-custom-theme":
colorPrimary = "#ff00ff"
colorSecondary = "#00ffff"
// ... set all color properties
breakcom.github.konky/
├── metadata.json # Plasma widget metadata
├── install.sh # Install/uninstall script
├── example-config.json # Full config example
├── package/
│ ├── contents/
│ │ ├── config/
│ │ │ ├── main.xml # KConfig schema (settings)
│ │ │ └── config.qml # Config dialog
│ │ └── ui/
│ │ ├── main.qml # Root widget (data sources, routing)
│ │ ├── FullRepresentation.qml # Desktop/full view
│ │ ├── CompactRepresentation.qml # Panel/tray view
│ │ ├── configGeneral.qml # Settings page
│ │ ├── modules/
│ │ │ ├── ModuleCPU.qml
│ │ │ ├── ModuleRAM.qml
│ │ │ ├── ModuleDisk.qml
│ │ │ ├── ModuleNetwork.qml
│ │ │ ├── ModuleGPU.qml
│ │ │ ├── ModuleThermal.qml
│ │ │ ├── ModuleBattery.qml
│ │ │ ├── ModuleClock.qml
│ │ │ ├── ModuleWeather.qml
│ │ │ └── ModuleProcess.qml
│ │ ├── components/
│ │ │ ├── KonkySection.qml
│ │ │ ├── KonkyLabel.qml
│ │ │ ├── KonkyIcon.qml
│ │ │ └── KonkyDivider.qml
│ │ ├── charts/
│ │ │ ├── ChartBar.qml
│ │ │ ├── ChartLine.qml
│ │ │ ├── ChartRing.qml
│ │ │ └── ChartSparkline.qml
│ │ └── layout/
│ │ ├── LayoutHorizontal.qml
│ │ ├── LayoutVertical.qml
│ │ └── LayoutGrid.qml
│ └── weather/
│ └── WeatherFetcher.js # Open-Meteo API client
│ └── example-config.json # Config copy in package
-
Create the module QML file in
package/contents/ui/modules/ModuleCustom.qml:// ModuleCustom.qml import QtQuick 2.15 Item { id: moduleCustom property var data: ({}) // Your module UI here Text { text: "Custom: " + (data.value || "—") color: "#00d4aa" } }
-
Add the data source in
main.qml:- Add a property to store the sensor data
- Add to
connectSensorSources()inComponent.onCompleted - Route the data in
onNewData
-
Render the module in
FullRepresentation.qml/CompactRepresentation.qml:import "modules/ModuleCustom.qml" // ... ModuleCustom { data: sensorData["custom/sensor"] }
-
Add config entries in
package/contents/config/main.xml:<entry name="moduleCustom" type="Bool"> <default>false</default> </entry>
-
Test: Re-run
./install.shand restart plasmashell.
- Use
propertydeclarations for data binding — avoid imperative state changes - Keep modules self-contained — pass data via properties, not global references
- Use
Plasmoid.configuration.*for settings — don't hardcode values - Separate concerns: data routing in
main.qml, display in representation QML - Use
Timerfor polling, notonCompletedloops
- KDE Plasma 6.0+
- Qt 6.0+
- KSystemStats (shippped with Plasma 6)
- Kirigami framework
- Internet connection (weather module only)
MIT License — see LICENSE for details.
- Conky — The original system monitor that inspired this project. Konky brings the Conky philosophy to KDE Plasma.
- Open-Meteo — Free weather API used for the weather module.
- KDE Community — For the Plasma framework, KSystemStats, and Kirigami.
Please open an issue on GitHub:
- Bug: Include Plasma version, Qt version, error logs (
journalctl --user -u plasmashell) - Feature: Describe the use case and any mockup/screenshots if applicable
