{"id":3819,"date":"2026-05-24T09:35:24","date_gmt":"2026-05-24T16:35:24","guid":{"rendered":"https:\/\/rose.dev\/blog\/?p=3819"},"modified":"2026-05-24T09:42:07","modified_gmt":"2026-05-24T16:42:07","slug":"hyprwinwrap","status":"publish","type":"post","link":"https:\/\/rose.dev\/blog\/2026\/05\/24\/hyprwinwrap\/","title":{"rendered":"hyprwinwrap"},"content":{"rendered":"\n<p>If you use <a href=\"https:\/\/github.com\/hyprwm\/hyprland\" target=\"_blank\" rel=\"noreferrer noopener\">Hyprland<\/a>, you should check out <a href=\"https:\/\/github.com\/gen3vra\/hyprwinwrap\" target=\"_blank\" rel=\"noreferrer noopener\">hyprwinwrap<\/a>. <\/p>\n\n\n\n<p>hyprwinwrap allows specific application windows to be rendered behind the desktop as pinned background layers. Matching windows are intercepted by the plugin, converted into unmanaged floating surfaces, and rendered during Hyprland\u2019s <code>RENDER_POST_WALLPAPER<\/code> stage.<\/p>\n\n\n\n<p>What makes it interesting is that the \u201cwallpaper\u201d can now be an actual running application:<\/p>\n\n\n\n<p>\u2022 mpv video wallpapers<br>\u2022 cava audio visualizers<br>\u2022 shader demos<br>\u2022 OpenGL scenes<br>\u2022 animated dashboards<br>\u2022 generative art renderers<br>\u2022 live telemetry panels<\/p>\n\n\n\n<p>Installation:<\/p>\n\n\n\n<p><code>hyprpm update &amp;&amp; hyprpm add https:\/\/github.com\/gen3vra\/hyprwinwrap &amp;&amp; hyprpm enable hyprwinwrap<\/code><\/p>\n\n\n\n<p>Example configuration:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">plugin {\n    hyprwinwrap {\n        class = window-bg\n        title = window-bg\n        # Position of the window in a percentage\n        pos_x = 0\n        pos_y = 0\n        # Size of the window in a percentage\n        size_x = 100\n        size_y = 100\n    }\n}\n\n\nexec-once = foot --app-id=window-bg sh -c \"cmatrix\"<\/code><\/pre>\n\n\n\n<p>The application itself defines the window class or app-id, and hyprwinwrap simply matches against it. The plugin also supports percentage based sizing and positioning, allowing background windows to occupy arbitrary regions of the screen instead of acting only as fullscreen wallpapers.<\/p>\n\n\n\n<p>If a program&#8217;s background is transparent, it will appear layered above your wallpaper:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">exec-once = foot -o colors-dark.alpha=0.0 --app-id=window-bg sh -c \"cmatrix\"<\/code><\/pre>\n\n\n\n<p><a href=\"https:\/\/github.com\/gen3vra\/hyprwinwrap\">https:\/\/github.com\/gen3vra\/hyprwinwrap<\/a><\/p>\n<hr>\r\nIt helps me if you share this post<br>\r\n<small style=\"user-select: all\">https:\/\/rose.dev\/blog\/2026\/05\/24\/hyprwinwrap\/<\/small>\r\n<br\/>\r\n<br\/>\r\nPublished 2026-05-24 09:35:24 ","protected":false},"excerpt":{"rendered":"<p>If you use Hyprland, you should check out hyprwinwrap. hyprwinwrap allows specific application windows to be rendered behind the desktop as pinned background layers. Matching windows are intercepted by the plugin, converted into unmanaged floating surfaces, and rendered during Hyprland\u2019s RENDER_POST_WALLPAPER stage. What makes it interesting is that the \u201cwallpaper\u201d can now be an actual &hellip; <a href=\"https:\/\/rose.dev\/blog\/2026\/05\/24\/hyprwinwrap\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">hyprwinwrap<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","jetpack_post_was_ever_published":false},"categories":[922,832,833],"tags":[1293,1280,1297,1296,1249,925],"class_list":["post-3819","post","type-post","status-publish","format-standard","hentry","category-release","category-software","category-technology","tag-hypr","tag-hyprland","tag-hyprland-plugins","tag-hyprwinwrap","tag-linux","tag-release"],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/rose.dev\/blog\/wp-json\/wp\/v2\/posts\/3819","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rose.dev\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rose.dev\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rose.dev\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rose.dev\/blog\/wp-json\/wp\/v2\/comments?post=3819"}],"version-history":[{"count":8,"href":"https:\/\/rose.dev\/blog\/wp-json\/wp\/v2\/posts\/3819\/revisions"}],"predecessor-version":[{"id":3828,"href":"https:\/\/rose.dev\/blog\/wp-json\/wp\/v2\/posts\/3819\/revisions\/3828"}],"wp:attachment":[{"href":"https:\/\/rose.dev\/blog\/wp-json\/wp\/v2\/media?parent=3819"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rose.dev\/blog\/wp-json\/wp\/v2\/categories?post=3819"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rose.dev\/blog\/wp-json\/wp\/v2\/tags?post=3819"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}