____ ___ _ _ _ ____ __ __ ___ ____
/ ___/ _ \| \ | | |/ /\ \ / / \ \ / / | | _ \
| | | | | | \| | ' / \ V /___\ \ /\ / /| | | |_) |
| |__| |_| | |\ | . \ | |_____\ V V / | |___| _ <
\____\___/|_| \_|_|\_\ |_| \_/\_/ |_____|_| \_\
You're in the right place!
This repository is an experimental attempt to build a native Wayland backend for Conky. This repository is structured as a step-by-step exploration of Wayland rendering, progressing from a minimal client to a modular widget framework.
Iβm not a professional developer β my experience comes mostly from small Bash, Python, HTML & CSS projects.
But Conky deserves to run properly on Wayland without X11, XWayland, or hacks⦠so here we are.
This project:
- may take a long time,
- may fail in some parts,
- will definitely evolve,
- is open to anyone who wants to experiment or contribute
- Build a Wayland-native backend for Conky
- Support text, graphs, and Lua-based widgets
- Provide cross-compositor compatibility
- Encourage community-driven experimentation and contributions
Important. Current phase of the project - PAUSE.
Work is underway and a custom system widget for plasma (kwin).
This repository currently serves as:
- a research sandbox,
- a learning space for Wayland + SHM + Cairo,
- and a step-by-step progression toward a functional prototype.
Milestones are updated manually as development progresses.
| Milestone | Progress |
|---|---|
| Project Foundation | πΉ 25% |
| Wayland Architecture Research | πΉ 66% |
| Prototype Rendering Layer | πΉ 66% |
See Milestones for details.
Track issues progress here.
Files/
βββ 00.wayland_protocol_headers/ β generated xdg-shell headers
βββ 01.hello_wayland/ β minimal Wayland client test
βββ 02.wayland_shm/ β SHM surface + raw drawing
βββ 03.wayland_shm_cairo/ β SHM + Cairo rendering
βββ 04.wayland_shm_cairo_db/ β SHM + Cairo + double buffer - widget prototype
βββ 05.wayland_movable β SHM + Cairo + double buffer + xdg_move + config
Screenshots/ β test output images
Each subdirectory contains its own README.md with instructions.
(Under development β instructions will be added once the prototype is ready.)
It will be open to contributors once there is a functional basis.
For now, it is being used for experimenting with Wayland.
- See CONTRIBUTING.md for detailed guidelines
- Project Foundation β setup, documentation, roadmap
- Wayland Architecture Research β backend study, rendering options, Lua feasibility
- Prototype Rendering Layer β minimal Wayland surface, text and shape rendering, placeholder for widgets
hello_wayland (v01)
β
βΌ
Wayland SHM buffers (v02)
β
βΌ
SHM + Cairo rendering (v03)
β
βΌ
Double buffering (v03)
β
βΌ
Widget prototype (v04)
β
βΌ
Widget framework (v05)
β
First step completed: hello_wayland.c skeleton created and successfully tested.
This minimal Wayland client creates a surface and confirms the connection to the compositor.
See file
β Version 02 : SHM buffer allocation + drawing
Basic shared memory buffer rendering implemented.
See file
β Version 03 : Cairo-based text rendering
Text rendering using Cairo integrated with Wayland SHM buffers.
See file
β Version 04 : Modular rendering architecture - widget prototype
- real-time rendering (tick-based redraw)
- double buffering
- modular architecture
- dynamic system information (Time, CPU, RAM)
- transparency and alpha blending
β Version 05 milestone: system widgets and window interaction Features introduced:
- Cairo graphics and text rendering
- system monitoring modules
- modular widgets
- configuration system
- graphs and progress bars
- drag-to-move window support (xdg_move)
Wayland Compositor
β
βΌ
Wayland Client
(wayland_movable.c)
β
βΌ
SHM Buffer System
(shared memory buffers)
β
βΌ
Cairo Renderer
βββββββββββββββββΌββββββββββββββββ
βΌ βΌ βΌ
Shapes / UI Text Rendering Graphs
(cairo_graphics) (cairo_text) (progress/graphs)
β β β
βββββββββββββββββ΄ββββββββββββββββ
β
βΌ
Widgets
(combine graphics + text + data)
β
βΌ
System Information
CPU / RAM / GPU / Network / Storage
- Conky
- Wayland
- Wayland book
- wlroots Documentation
- Cairo Graphics
- Lua 5.x for widget scripts
This project is intended as a personal experiment and community contribution. There is no guarantee that everything will work immediately, but every step forward is welcome.







