loqusion / hyprshade

Hyprland shader configuration tool
MIT License
262 stars 7 forks source link

Wallpaper Support #45

Open ElectricalFault opened 1 month ago

ElectricalFault commented 1 month ago

The current scope of the project renders it exclusively towards a limited set of applications (e.g. color management).

Given the project's reliance on shaders, it could allow functions similar to the ones provided by Shadow Engine, but with support for Hyprland and multi monitor setups. If possible, it could also include support for mouse positioning, along with speed and quality settings.

Using a specific command (-w, --wallpaper), the user could apply the shader beneath the apps (equivalent to a wallpaper) instead of above.

loqusion commented 1 month ago

I'm a bit concerned about UX issues arising from Hyprshade expanding to include more and more functionality. The wider the scope, the more difficult it is for users to understand "Would this be useful to me?" Shaders are, after all, a means to an end, and the more ends there are the harder it is to sift through each and every one of those ends to determine if they're relevant — the easier it is to overlook this project. Case in point: even after looking at the readme of the project you linked, I'm still not quite sure what it does or why I'd want to use it.

That being said, I'd still be interested in further discussion to see if it's viable to include in Hyprshade. Could you explain a bit more and maybe provide some examples?

ElectricalFault commented 1 month ago

Your project is already highly reliant on .glsl shaders, and with Hyprland's existing shader compatibility, including this feature could be a game-changer, for reasons I will provide below.

The Shadow Engine offers an alternative for setting wallpapers that goes beyond the traditional use of static images or videos (e.x. jpeg, png, gif, mp4). Instead, it allows for the live rendering of scenes, thus surpassing the limitations of conventional video formats, as there is no defined endpoint. You may have encountered similar features in applications such as Wallpaper Engine. With all due seriosity, I have confidence that this could ignite a new revolution in unix customization, especially considering the growing popularity of Hyprland.

Taking into account the dynamic nature of shaders, more applications are possible, such as keyboard, time(e.x. live clocks), sound(e.g. interactive spectrograms), and even mouse movements(e.g. parallax effects) causing an effect on the wallpaper. Please have a look at the following examples:

loqusion commented 1 month ago

Ok, I see where you're coming from now.

This might be non-trivial to implement, since Hyprshade currently relies on Hyprland's decoration:screen_shader (archive) variable which doesn't support this afaict. We'd have to migrate to something more advanced using an OpenGL binding directly. That being said, I'd be willing to give this a try.

If you'd like to have a go at implementing this, please do note that the Python version of Hyprshade is currently in maintenance mode while the project is being rewritten in Rust. The plan is to merge that repository into this one when it reaches 100% feature parity.