Skip to content

Cursor TUI - #332

Open
Ubaidullah-Web-Dev wants to merge 4 commits into
dusklinux:mainfrom
Ubaidullah-Web-Dev:main
Open

Cursor TUI#332
Ubaidullah-Web-Dev wants to merge 4 commits into
dusklinux:mainfrom
Ubaidullah-Web-Dev:main

Conversation

@Ubaidullah-Web-Dev

Copy link
Copy Markdown
Contributor

No description provided.

@ADIOR-enigma

ADIOR-enigma commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

u dont have to add the matugen cursor script to config.toml to hotreload, watcher script does it anyway thats why i think it takes 8secs in ur case mine is just 2secs , also use hyprpm for the plugin rather than sending the compiled binary directly

@Ubaidullah-Web-Dev

Copy link
Copy Markdown
Contributor Author

u are right about the config.toml but i have made some changes to the pluggin that's why i included the compiled binary

@Ubaidullah-Web-Dev

Copy link
Copy Markdown
Contributor Author

In src/other/Shake.cpp the old #include <hyprland/src/ipc/s2/S2.hpp> header was updated to #include <hyprland/src/managers/EventManager.hpp> and all IPC socket calls were updated
hyprland version 0.55+ changed its internal IPC sys and completely removed IPCsockit without this update compiling hypr-dynamic-cursors against in new hyprland versions failed with header missing errors (S2.hpp not found) preventing the plugin binary from building or loading

@ADIOR-enigma

ADIOR-enigma commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

turns out its a bug
and u happens to fix it by directly changing the headers

hyprwm/Hyprland#15757
VirtCode/hypr-dynamic-cursors#159
VirtCode/hypr-dynamic-cursors#155

i wonder why i dont have this issue

@ADIOR-enigma

Copy link
Copy Markdown
Contributor

r u sure u on 0.55 not 0.56?

@Ubaidullah-Web-Dev

Copy link
Copy Markdown
Contributor Author
image

i am on 0.56.2

@ADIOR-enigma

Copy link
Copy Markdown
Contributor

ah im on 55

@dusklinux

dusklinux commented Aug 28, 2026

Copy link
Copy Markdown
Owner

Okay so this is a lot, can you write a readme, explaining how all of this works? so i can understand it and why it was necessary to edit each existing file?

also the settings.json file in .config/dusky/tui/.. should not be tracked by git. Nothing in .config/dusky/ is git tracked, all those files are created on each system so configurations dont get overwritten if i edit mine, the setup script or what ever it uses , shoudl auto deploy that configurable settings file on first run if it doesn't already exist. and then the tui edits that file at .config/dusky/tui/.. (if theres no setup script to auto deploy that file on first run, you could make it so the engine for the tui, on the first run, or when it detects the settings.json missing, copies the git tracked settings.json default file from the same directory as where the tui is at and places it into .config/dusky/tui/.. and then modifies that)

@Ubaidullah-Web-Dev

Copy link
Copy Markdown
Contributor Author

Okay so this is a lot, can you write a readme, explaining how all of this works? so i can understand it and why it was necessary to edit each existing file?

yes i have added a readme also u can check it out: user_scripts/hypr/cursor/README.md

image

@dusklinux

Copy link
Copy Markdown
Owner

alright great, will get to it in a bit.

@Ubaidullah-Web-Dev

Ubaidullah-Web-Dev commented Aug 28, 2026

Copy link
Copy Markdown
Contributor Author
image

those 8 people lol

@dusklinux

Copy link
Copy Markdown
Owner

that's definitely a motivator to get it configured. will do it soon

@dusklinux

Copy link
Copy Markdown
Owner

was this deleted accidentally?
image

@ADIOR-enigma

Copy link
Copy Markdown
Contributor

yeah definitely by accident

@dusklinux

Copy link
Copy Markdown
Owner

so i've been trying to understand it....
are we sure this is the only way to do it? this is so elaborate, with a watcher script(a daemon etc etc) and 3000+ lines of code just for theming the damn cursor. i mean do we really need a plugin for this? seems needlessly complex, if regular cursor can be changed on a whim, why cant we do something similar with something like a matugen hook that triggers a bash/python script to regenerate svg assets for the cursor with the theme colors and after the svg files are regenerated it runs hyprctl setcursor or something??, why have a watcher script?? this is so damn bloated and antithetical to how dusky is configured.

@dusklinux

Copy link
Copy Markdown
Owner

ai:

The Short Answer

No, a C++ Hyprland plugin is not necessary for dynamic cursor color theming.

Using a C++ Hyprland plugin for color changes is over-engineered and structurally flawed for Wayland cursor architecture. A single, lightweight Python or Bash script triggered via a Matugen post-hook combined with hyprctl setcursor and gsettings is the standard, resilient approach.

First-Principles Architecture: Why a Plugin is the Wrong Tool

To understand why a plugin is unnecessary, consider how cursors work across the Linux desktop stack:

                      ┌────────────────────────────────────────┐
                      │    Matugen (Theme / Palette Change)    │
                      └───────────────────┬────────────────────┘
                                          │ Post-Hook
                                          ▼
                      ┌────────────────────────────────────────┐
                      │   Cursor Generation Script (Python)    │
                      │  - Reads Matugen palette               │
                      │  - Recalors SVG templates              │
                      │  - Writes Hyprcursor / XCursor package │
                      └──────────────┬──────────────────┬──────┘
                                     │                  │
               hyprctl setcursor     │                  │ gsettings / D-Bus
                                     ▼                  ▼
                    ┌──────────────────┐      ┌──────────────────┐
                    │ Hyprland Server  │      │  Client Toolkits │
                    │ (Compositor, SSD,│      │  (GTK3/4, Qt6,   │
                    │ wp_cursor_shape) │      │  Electron, Apps) │
                    └──────────────────┘      └──────────────────┘

1. Client-Side vs. Server-Side Cursors in Wayland

  • In Wayland, pointer surfaces are predominantly client-side buffers (wl_pointer.set_cursor). Applications (GTK, Qt, Chromium, Firefox, Electron) load cursor theme assets directly from disk (~/.local/share/icons or /usr/share/icons) and render them into their own Wayland buffers.

  • Hyprland only controls cursors rendered on compositor-managed surfaces (desktop background, borders, layer-shell surfaces without custom pointers, and apps supporting wp_cursor_shape_v1).

  • A Hyprland C++ plugin lives strictly inside the compositor process. It cannot reach into external application memory to recolor client-side cursor buffers. Every app must still read a valid theme from disk.

2. The Maintenance Burden of Hyprland Plugins

  • Hyprland development moves quickly. C++ plugins link directly against Hyprland internal headers and break whenever internal ABI/data structures change.

  • Using a plugin for static/color asset generation locks your desktop to specific compiler flags and requires rebuilds via hyprpm on Hyprland updates.

(Note: C++ plugins like hypr-dynamic-cursors exist for runtime frame-by-frame physics—such as macOS-style shake-to-magnify, velocity tilting, and geometry warping in the render loop—not for palette recoloring.)

How the Scripted Approach Works

A minimal script achieves full dynamic theming in four steps:

1. SVG Color Injection

Cursor shapes (such as default, pointer, text, crosshair, grab) are stored as clean SVGs with placeholder color attributes (e.g., stroke="{{primary}}", fill="{{surface}}"). When Matugen generates a new palette, the script substitutes the hex values into the SVGs.

2. Hyprcursor & XCursor Packaging

  • Hyprcursor: Hyprland’s native vector cursor format. It natively supports raw SVG files directly inside the theme directory (manifest.hl + hyprcursors/<shape>/meta.hl + shape.svg). There is no need to compile heavy PNG raster sheets for Hyprland itself.

  • XCursor (Fallback): For legacy XWayland or apps lacking Hyprcursor support, a quick batch run of xcursorgen or hyprcursor-util --create creates the raster fallback in < 100ms.

3. The "A/B Theme Swap" (Cache Invalidation)

GTK and Qt apps cache cursor assets in memory based on the theme name. If you overwrite files in a theme called Dynamic-Cursor, running apps may not reload the changes.
By alternating between two names (Dynamic-Theme-A $\leftrightarrow$ Dynamic-Theme-B), toolkits detect a distinct theme name change and drop their cached buffers immediately.

4. Global Broadcast & Live Reload

  • Hyprland: hyprctl setcursor <Theme-Name> <Size> updates Hyprland’s internal cursor manager instantly.

  • GTK / Desktop Portals: gsettings set org.gnome.desktop.interface cursor-theme '<Theme-Name>' broadcasts a D-Bus signal that all running GTK3/GTK4 apps pick up immediately without restarting.

  • XWayland: xrdb -merge sets Xcursor.theme for legacy X11 applications.

Minimal Implementation Blueprint

1. Matugen Configuration (~/.config/matugen/config.toml)

Hook the generation script directly into Matugen's post-processing:
Ini, TOML
[config]
# Automatically run the cursor generator whenever matugen runs
post_run = "python3 ~/.config/hypr/scripts/generate_dynamic_cursor.py"

2. Generator Script (~/.config/hypr/scripts/generate_dynamic_cursor.py)

Python
#!/usr/bin/env python3
import json
import os
import subprocess
from pathlib import Path

# Paths
MATUGEN_COLORS = Path.home() / ".cache/matugen/colors.json"
ICONS_DIR = Path.home() / ".local/share/icons"
TEMPLATE_DIR = Path.home() / ".config/hypr/cursor_templates"
STATE_FILE = Path("/tmp/dynamic_cursor_state")

def get_current_theme_slot():
if STATE_FILE.exists():
current = STATE_FILE.read_text().strip()
next_theme = "Dynamic-Cursor-B" if current == "Dynamic-Cursor-A" else "Dynamic-Cursor-A"
else:
next_theme = "Dynamic-Cursor-A"
STATE_FILE.write_text(next_theme)
return next_theme

def main():
if not MATUGEN_COLORS.exists():
return

<span class="hljs-keyword" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;">with</span> <span class="hljs-built_in" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;">open</span>(MATUGEN_COLORS) <span class="hljs-keyword" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;">as</span> f:
    colors = json.load(f)[<span class="hljs-string" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;">"colors"</span>]

primary_color = colors[<span class="hljs-string" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;">"primary"</span>][<span class="hljs-string" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;">"default"</span>][<span class="hljs-string" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;">"hex"</span>]
surface_color = colors[<span class="hljs-string" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;">"surface"</span>][<span class="hljs-string" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;">"default"</span>][<span class="hljs-string" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;">"hex"</span>]
outline_color = colors[<span class="hljs-string" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;">"outline"</span>][<span class="hljs-string" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;">"default"</span>][<span class="hljs-string" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;">"hex"</span>]

theme_name = get_current_theme_slot()
target_dir = ICONS_DIR / theme_name
target_dir.mkdir(parents=<span class="hljs-literal" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;">True</span>, exist_ok=<span class="hljs-literal" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;">True</span>)

<span class="hljs-comment" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;"># 1. Generate hyprcursor manifest</span>
(target_dir / <span class="hljs-string" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;">"manifest.hl"</span>).write_text(<span class="hljs-string" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;">f"""

name = {theme_name}
description = Dynamic Matugen Theme
version = 1.0
cursors_directory = hyprcursors
""")

hyprcursors_dir = target_dir / <span class="hljs-string" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;">"hyprcursors"</span>
hyprcursors_dir.mkdir(exist_ok=<span class="hljs-literal" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;">True</span>)

<span class="hljs-comment" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;"># 2. Recolor SVG templates</span>
<span class="hljs-keyword" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;">for</span> svg_template <span class="hljs-keyword" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;">in</span> TEMPLATE_DIR.glob(<span class="hljs-string" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;">"*.svg"</span>):
    shape_name = svg_template.stem
    shape_dir = hyprcursors_dir / shape_name
    shape_dir.mkdir(exist_ok=<span class="hljs-literal" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;">True</span>)

    content = svg_template.read_text()
    recolored = (content
                 .replace(<span class="hljs-string" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;">"{{PRIMARY}}"</span>, primary_color)
                 .replace(<span class="hljs-string" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;">"{{SURFACE}}"</span>, surface_color)
                 .replace(<span class="hljs-string" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;">"{{OUTLINE}}"</span>, outline_color))

    (shape_dir / <span class="hljs-string" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;">f"<span class="hljs-subst" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;">{shape_name}</span>.svg"</span>).write_text(recolored)
    (shape_dir / <span class="hljs-string" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;">"meta.hl"</span>).write_text(<span class="hljs-string" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;">f"""

resize_algorithm = bilinear
hotspot_x = 0.15
hotspot_y = 0.15
define_size = 24, {shape_name}.svg
""")

<span class="hljs-comment" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;"># 3. Apply live to Hyprland and GTK</span>
cursor_size = <span class="hljs-string" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;">"24"</span>
subprocess.run([<span class="hljs-string" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;">"hyprctl"</span>, <span class="hljs-string" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;">"setcursor"</span>, theme_name, cursor_size], check=<span class="hljs-literal" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;">False</span>)
subprocess.run([<span class="hljs-string" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;">"gsettings"</span>, <span class="hljs-string" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;">"set"</span>, <span class="hljs-string" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;">"org.gnome.desktop.interface"</span>, <span class="hljs-string" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;">"cursor-theme"</span>, theme_name], check=<span class="hljs-literal" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;">False</span>)
subprocess.run([<span class="hljs-string" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;">"gsettings"</span>, <span class="hljs-string" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;">"set"</span>, <span class="hljs-string" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;">"org.gnome.desktop.interface"</span>, <span class="hljs-string" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;">"cursor-size"</span>, cursor_size], check=<span class="hljs-literal" style="font-family: Google Sans Text, sans-serif !important; line-height: 1.15 !important; margin-top: 0px !important;">False</span>)

if name == "main":
main()

Comparison Summary

Metric C++ Hyprland Plugin Matugen Hook + Python Script
Wayland Protocol Compatibility Partial (only compositor-rendered surfaces) Full (Hyprland, GTK3/4, Qt, Flatpak, XWayland)
Breakage on Hyprland Updates High (frequent ABI breakages) Zero (standard CLI/IPC tools: hyprctl, gsettings)
Execution Overhead Adds C++ logic into the display server Offloaded once on theme change ($\sim$30ms)
Complexity High (C++, CMake/Meson, hyprpm) Low ($\sim$50 lines of Python or Shell)

@dusklinux

dusklinux commented Aug 28, 2026

Copy link
Copy Markdown
Owner

the above is a starting point for how it should be built, it probably doesnt work well yet cuz it was its initial response, it needs to be put through the ringer and tested but the plugin way of doing it is unoptimized and therefore not getting merged.

@Ubaidullah-Web-Dev

Ubaidullah-Web-Dev commented Aug 28, 2026

Copy link
Copy Markdown
Contributor Author

this is so elaborate, with a watcher script(a daemon etc etc) and 3000+ lines of code just for theming the damn cursor.

yeh from the starting point i knew it was complicated and i even mentioned that to adior:

image

i mean do we really need a plugin for this?

The pluggin is what allows us to have those effects on the cursor tho

it is unoptimized and therefore not getting merged.

this is so damn bloated and antithetical to how dusky is configured.

ofc its up to you to merge it or not i just had an idea and i tried to accomplish it but it is not as easy as u think it is.

@Ubaidullah-Web-Dev

Copy link
Copy Markdown
Contributor Author

this is so elaborate, with a watcher script(a daemon etc etc) and 3000+ lines of code just for theming the damn cursor. i mean do we really need a plugin for this? seems needlessly complex, if regular cursor can be changed on a whim, why cant we do something similar with something like a matugen hook that triggers a bash/python script to regenerate svg assets for the cursor with the theme colors and after the svg files are regenerated it runs hyprctl setcursor or something??, why have a watcher script?? this is so damn bloated and antithetical to how dusky is configured.

yeah man do things your way as they are waaaaay more efficent and better then mine and right now im in no shape to take responsibility of it cuz im super SUPER packed nowadays there is so much work to do in the office and i sacrificed some of my sleep just to get this TUI made cuz i was postponing it so much i tried.....lol
image

@dusklinux

Copy link
Copy Markdown
Owner

that's fine, i'll take it up from here, leave this pr open, i'l use the svg's from it. btw the shake to enlarge also didn't require a plugin since hyprland has cursor size setting too for changing the size. its not so difficult from here cuz i'll be using the native hyprland cursor settings to achieve this.

@Ubaidullah-Web-Dev

Copy link
Copy Markdown
Contributor Author
image

we had a backup plan just so u rejected it cuz it was very likely lol i know a store is a super hard feat but "u wont know, until u do it as the young adior said

@ADIOR-enigma

Copy link
Copy Markdown
Contributor

bruh ubaid always undersell, we also not sure if it will work yet

@dusklinux

Copy link
Copy Markdown
Owner
image

we had a backup plan just so u rejected it cuz it was very likely lol i know a store is a super hard feat but "u wont know, until u do it as the young adior said

i mean sure what would that tui store do even? like what would that be for? people are free to make AS MANY TUIS as they want and send prs, as long as they're just the tui schema + new engines and dont include 100+ files, i'm very very likely to merge them without so much as a second thought.

, i even wrote a master template Schema just for this, so people can easily write new tuis,
at
/home/dusk/user_scripts/dusky_tui/python/template_schemas/MASTER_SCHEMA.md
image

@dusklinux

Copy link
Copy Markdown
Owner

unrelated:
and i just installed omarchy in a vm to see what the fuss was about, god damn that distro sucks. so fucking unintuitive to use and 500+ mbs for just quick shell on fresh boot with nothing open. there's no way to even disable quickshell, i tried deleteing it to see how lean i could make it but damn i couldnt even delete quickshell it prevents you from deleting quickshell cuz its a hard dependancy for omarchy.

i'm just amaized at how popular it is for absoultey no reason.

it is FAR from user friendly even with all the quickshell shit, no easy way to configure anything, you have to manually edit the configs for everything. it might take the cake for being the windows of linux, right next to ubuntu. what a shame, cuz it had so much potential.

@dusklinux

dusklinux commented Aug 29, 2026

Copy link
Copy Markdown
Owner

i'll be spending aroudn 2-3 months on the next video to pour all of my soul into it. that's our last shot at claiming the spot for the top hyprland distro, or even a top linux distro. cuz god knows we are the best, no other distro has come close to the optimizations that we've implemented. NONE!! not even cachy with all there architecture specific pacakages, they still fall short. hell i don tthink any other distro has a polkit as lean as hours, LMAO a tui polkit is not somethign anyone woudl even think of other than us.

and all this without 10 million dollars to burn, like omarchy does. shit i dont even have llm subscripton for anything anymore, will be opening up donation channels soon.

@Ubaidullah-Web-Dev

Copy link
Copy Markdown
Contributor Author

i mean sure what would that tui store do even? like what would that be for?

it would be uhh like a store for TUI's lol people should be able to install community made TUI's IF it works

as long as they're just the tui schema + new engines and dont include 100+ files,

breh the whole pluggin thing, TUI and everything else consists of a total of 11 files including edited and new files the rest of it is just the cursor shi

there's no way to even disable quickshell, i tried deleteing it to see how lean i could make it but damn i couldnt even delete quickshell it prevents you from deleting quickshell cuz its a hard dependancy for omarchy.

holly shi!

i'll be spending aroudn 2-3 months on the next video to pour all of my soul into it

god dayum finally a vid!!! hell yea

top hyprland distro, or even a top linux distro

course it would be i mean when u release the new vid im pretty sure it would get ALOT of attention hell even more when omarchy was released and ofc dusky will top out omarchy

and all this without 10 million dollars to burn, like omarchy does. shit i dont even have llm subscripton for anything anymore, will be opening up donation channels soon.

LOL someone hook bro with a gpt subscription

@dusklinux

Copy link
Copy Markdown
Owner

a well made video is all we need, its the solution to getting out of poverty. the only hope lol,

@Ubaidullah-Web-Dev

Ubaidullah-Web-Dev commented Aug 29, 2026

Copy link
Copy Markdown
Contributor Author

its the solution to getting out of poverty

LOL!!! man i hope you also get omarchy level donations so ricing becomes your job and u could do ricing forever and ever cuz u like it

and also u will get some dabloons from youtube themselves also

@Ubaidullah-Web-Dev

Copy link
Copy Markdown
Contributor Author

also dusk what are ur thoughts on wobbly windows? they look pretty cool maybe like opt them in and motion blur also

@dusklinux

Copy link
Copy Markdown
Owner

wobbly windows? is that a hyprland settings or using plugin? we'll defininatley have it if its a hyprland feature, also animated borders with multi color looping gradients.
image
this is our shader lol, i forgot to updated these.

@Ubaidullah-Web-Dev

Copy link
Copy Markdown
Contributor Author

wobbly windows? is that a hyprland settings or using plugin?

Here is the showcase of wobly windows as well as motion blur

@dusklinux

Copy link
Copy Markdown
Owner

not clear if its built into hyprland or if he used a plugin for it, the overview will definately be enabled by default when its out with alt tab or something

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants