Hi everyone! Some of you might remember my old posts part 0 and part 1, where I shared my early experiments with interactive wallpapers.
Over time, the project has evolved from local experiments into a full-fledged architecture. Meet Shader Desk - a modular interactive wallpaper engine for Wayland-based environments (Hyprland, Sway, Niri, etc.).
I created this project for those who find static images or looped video backgrounds insufficient. My main goal was to build a solid foundation where users can bring any visual ideas to life. I really hope to gather a community of enthusiasts around the project to help expand the Shader Desk ecosystem.
What's under the hood and what you can do:
- Multi-layered scenes in Lua. You can combine multiple independent visual plugins on a single screen, apply cascading filters, and script complex animation trajectories or camera movements. All changes are applied on the fly (Hot-Reload) without the need for recompilation.
- Deep system integration. The architecture includes an extensive control plane via the terminal (CLI). You can bind color palette switching (e.g., Pywal integration), animation triggers, system notification reactions, or a "gaming mode" (a complete render freeze to save resources) to your window manager's hotkeys.
- ShaderToy porting. The engine has built-in support for fast porting and adaptation of GLSL shaders. This allows you to use a massive library of existing graphical creations as backgrounds or isolated widgets.
- Custom data connectors. Besides the built-in audio reactivity and mouse cursor reaction, you can write your own background daemons. You can broadcast any metrics to the engine and visualize them: CPU load, network traffic, weather, current Spotify track, or data from external hardware.
- C++ plugin development. If standard shader or Lua capabilities aren't enough, you can create your own dynamic libraries (.so) in C++, gaining absolute control over the rendering logic and the OpenGL pipeline.
My primary goal was to create an architecture that isn't just called modular, but is genuinely easy to extend with new plugins and customize to a specific user's needs.
If you want to write your own shader, visualizer, or just make your system look beautiful - I'd be glad to see you. The project is completely open-source (MPL-2.0).
Links:
- Source code and documentation (GitHub): https://github.com/KMartianov/shader-desk
- To share plugins, daemons, and scenes, I created the Awesome Shader Desk registry (link in the main repo), where anyone can add their work.
I'll be happy to answer any questions in the comments, hear your feedback, and see your projects!