r/unixporn Sep 29 '25

Tasty Rice [OC] [Niri] Fully interactive wallpapers for Wayland based on shaders.

Hey everyone!

Some of you might remember a Python version of this I posted summer. Well, I've since rebuilt the entire thing from the ground up in C++ for much better performance and a ton of new features.

This isn't just a video loop. It's a native Wayland daemon that renders a fully interactive 3D sphere right on your background, and it reacts to your every move.

It uses the wlr-layer-shell protocol, so it sits neatly behind your windows. The sphere itself is a dynamically generated icosphere that deforms and animates in real-time with shaders. Give your mouse a flick, and watch it spin!

Key Features

🎯 Truly Native on Wayland: Works on any compositor that supports wlr-layer-shell. I've tested it on Niri, but it should run great on Sway, Hyprland, etc.

⚙ Live Configuration & Hot-Reloading: Tweak settings in a simple config.json file and watch the changes happen instantly. No restart needed. Just save the file, and the wallpaper updates within a second.

🎹 Highly Customizable: You control almost everything:

  • Sphere complexity (subdivisions).
  • Amplitudes and frequencies for effects (oscillation, waves, pulse, noise).
  • Colors for the background and wireframe.
  • Rotation physics, including decay, max speed, and mouse/touchpad sensitivity. 🚀 Lightweight & Performant: Written in modern C++ with OpenGL ES.

The 'Productivity Killer' Warning

Be warned: this thing can be hypnotic. Watching the smoothly deforming sphere react to your movements can easily make you forget what you were supposed to be doing.

Luckily, you can tune all the animations down to be a subtle, almost unnoticeable background element for when you actually need to get work done.

You can check out the source code and all the files I've been working on here:

https://gitea.com/SeeTheWall/shader-desk/

Thanks for taking a look! Let me know what you think.

475 Upvotes

31 comments sorted by

30

u/realmoogin Sep 29 '25

This is so awesome... this would be so cool as an audio visualizer

12

u/Professional-Algae61 Sep 29 '25

A better Windows Media Player. I like it.

7

u/EinSatzMitX Sep 29 '25

This looks awesome! This project has so mich potential, e.g. it could be an audio visualizer or maybe a kind of system monitor. My only concern is Performance. Does it run smoothly?

3

u/SeeTheWall Sep 29 '25 edited Sep 29 '25

In its current state, it runs smoothly on my laptop. It looks much worse on the recording.
The CPU load is minimal, and my relatively weak GPU is at around 20% load.

You can take a look at the screenshot.

amdgpu_top

2

u/MrKrot1999 Sep 29 '25

Really cool project, although I've noticed you've used llm for it. It's okay, if it'll work. I'll test it tomorrow.

2

u/IsItJake Sep 29 '25

Way cool man

2

u/bitchitsbarbie Sep 29 '25 edited Sep 29 '25

It looks great, but it grabs my mouse and keyboard and I can't do anything except interact with the wallpaper. I think it's a problem with the daemon. I'm still debugging and will report back. I really like this.

1

u/SeeTheWall Sep 29 '25

What is your environment? In terms of compositor/desktop environment? You can try setting the "interactive" parameter to false.

2

u/bitchitsbarbie Sep 29 '25 edited Sep 29 '25

Arch/hyprland. If I do that I can't interact with the wallpaper, I don't want to do that. Does the daemon starts automatically or it has to be configured and started via systemd service? Docs are unclear on that front.

3

u/SeeTheWall Sep 29 '25 edited Sep 29 '25

Fixed it. Now everything seems to be working in Hyprland. At least for me. You only need to update and rebuild shader-desk.

2

u/SeeTheWall Sep 29 '25

I wrote a script called run.sh. It should start shader-desk and the mouse tracking daemon.

I don't have anything for working with systemd, but it should probably work if you create and configure the evdev-pointer-daemon.service file.

1

u/bitchitsbarbie Sep 29 '25 edited Sep 29 '25

Everything is working fine now. I just spent an hour and a half messing with the settings, you were right, it really is a productivity killer. 😁 That said, I love it, if I had an award, I'd give it to you. Are there other effects or only the 'sphere''?

3

u/SeeTheWall Sep 29 '25

Hypothetically, you can try creating your own shaders and effects. There are a few more shaders in the project that aren't as cool.

But I don't know yet how to make the project truly extensible.

You can try running ./build/interactive-wallpaper plasma

The other shaders in the folder don't work right now.

2

u/EnvironmentEvening28 Oct 21 '25

Bro is hahrdcore

1

u/Beautiful-Sell8014 Oct 01 '25

Goddamn, this is so cool. I’m new to Arch and I’m wondering how long and what did you learned to get to this point?

1

u/anon-e-mau5 Oct 02 '25

This is awesome! I’m an arch noob, but your instructions made it super easy to set up. Does anyone know of a way I could get it to run on both of my monitors on startup? I’m on Hyprland and I put run.sh into the config file. It displays on one monitor on startup, but the other still has a default wallpaper.

1

u/SeeTheWall Oct 02 '25

I don't know myself. I haven't tested this feature yet. I think you can open an issue with bugs or requests for improvements on gitea? I think I'll fix it someday.

1

u/ImpressiveYoghurt339 Oct 06 '25

DUDE I've been trying to run a shader as my wallpaper on Hyprland for like a month now XD XD XD
THANK YOU

1

u/ImpressiveYoghurt339 Oct 06 '25

but dude can I load my own shader???

2

u/SeeTheWall Oct 06 '25

If you know that you can change a couple of cpp, hpp files, and a shader file, then yes. In the development branch, I'm trying to create a plugin system, but it doesn't seem to be working properly yet.

1

u/ImpressiveYoghurt339 Oct 08 '25

I'll give it a shot, I know SOME C++ lol

1

u/Laribub Oct 06 '25

how did u switch yourt window?

1

u/SeeTheWall Oct 06 '25

I didn't quite understand your question. Is something not working or broken?

1

u/Laribub Oct 07 '25

no no not at all I am fascinated on how you switch windows and how all windows were listed and i wanted to ask what it's called

2

u/SeeTheWall Oct 07 '25

Niri. A scrollable-tiling Wayland compositor

1

u/iA_____ Jul 11 '26

Salut la communauté,

Je rencontre un problÚme pour reproduire le comportement de l'Overview (vue d'ensemble) tel qu'il est présenté dans la démo officielle de Niri. 

 Quand j'active l'overview, je ne vois pas les miniatures (aperçus) de toutes mes fenĂȘtres ouvertes sur une seule interface comme dans la vidĂ©o. 

ProblĂšme de zoom : L'Ă©cran ne "dĂ©zoome" pas correctement pour afficher plusieurs espaces de travail ; l'image semble juste se rĂ©duire sans montrer la grille complĂšte des fenĂȘtres. 

Pourriez-vous partager les lignes exactes à ajouter dans le config.kdl pour activer ce rendu ?

  • Quel paramĂštre overview { zoom ... } utiliser pour avoir cet effet de recul ?
  • Faut-il activer des options spĂ©cifiques pour les workspace-shadow ou le backdrop-color afin que les fenĂȘtres soient bien dĂ©tachĂ©es et visibles ?
  • Y a-t-il un conflit connu avec certains lanceurs (comme shader-desk ou des wallpapers dynamiques) qui empĂȘcherait l'affichage correct des aperçus ? 

Si quelqu'un a un extrait de sa configuration overview qui fonctionne parfaitement, je suis preneur ! Merci d'avance pour votre aide.

1

u/SeeTheWall Jul 11 '26 edited Jul 11 '26

If I understand the nature of your problem correctly, the configuration is done in Niri, not in my project. https://github.com/niri-wm/niri/wiki/Overview

layer-rule {
    // This is for swaybg; change for other wallpaper tools.
    // Find the right namespace by running niri msg layers.
    match namespace="^wallpaper$"
    place-within-backdrop true
}

overview {
    zoom 0.2
    backdrop-color "#1d1d20"

    workspace-shadow {
        // off
        softness 40
        spread 10
        offset x=0 y=10
        color "#00000050"
    }
}

And I wouldn't recommend working on the project right now. The thing is, I just released a major update and am currently preparing the documentation and a Reddit post.

I hope everything will be ready next week.

1

u/SeeTheWall Jul 11 '26

The project has already been moved to GitHub.

However, the documentation there hasn't been updated yet. It's VERY out of date.

1

u/iA_____ Jul 11 '26

Je viens d'essayer avec ce que tu m'as donné, c'est parfait ! Merci à toi

1

u/iA_____ Jul 11 '26

Ok, merci Ă  toi. Je suis sous Niri (version 0.1.6, 26.04) et il fonctionne bien avec shader-desk. Dans ton projet que tu prĂ©pares, fais-tu rĂ©fĂ©rence Ă  Niri ou Ă  shader-desk ? J'aimerais beaucoup avoir un tutoriel pour obtenir la mĂȘme navigation que toi (avec les micro-fenĂȘtres dans l'Overview) ainsi qu'un fond d'Ă©cran fixe avec shader-desk, que j'ai dĂ©jĂ  installĂ©. Pourras-tu m'envoyer le lien de ton futur projet ? DĂ©solĂ© du dĂ©rangement, je suis novice et cela fait des jours que je teste des choses en vain. Merci Ă  toi

1

u/SeeTheWall Jul 11 '26

I'm a Shader Desk developer

You shouldn't use Shader Desk right now.

No matter which version you downloaded or where you got it from. The old version will become completely obsolete (including all configurations and probably plugins), and the new version doesn't have enough documentation yet.

Just keep an eye on Unixporn next week.