r/wayland

Linus, I fixed Middle Mouse Scrolling for you
▲ 1.4k r/wayland+6 crossposts

Linus, I fixed Middle Mouse Scrolling for you

We all know Linus' biggest pet peeve is the lack of system wide middle click autoscrolling. I built a universal solution called midscroll that operates at the kernel input level, meaning it perfectly replicates the Windows autoscroll behavior across every single application on both Wayland and X11. It anchors your cursor, uses the exact same speed curve you are used to, and runs entirely in the background.
FOSS under the Unlicense.
You can check out how it works here: https://github.com/gnhen/midscroll

EDIT: Now with a Settings menu GUI. Supports Hold & Drag as well as Toggle mode. Native scrolling mode supported.

u/Ri0tRec0il — 11 hours ago
▲ 13 r/wayland+1 crossposts

I built a wayland native crosshair overlay with a GUI

Hi!

So, it's been a couple of weeks now from when I tried to find a good crosshair overlay for wayland and just couldn't, so I built this!

It uses a real, click-through, layer-shell surface made with wlr-layer-shell, so it should work on any compositor that supports that. It supports three built in crosshair types, as well as custom images, and easy to share config files.

AUR: yay -S crosshair-overlay or paru -S crosshair-overlay
Github: https://github.com/m39d/crosshair-overlay

I also think it's fair to mention that I'm not a great programmer myself, and while I tried putting in a ton of work to make it good, I did use AI to write the vast majority of the codebase. It's all been tested as thoroughly as I could, but just wanted to be upfront about that.

Also, I think it's important to say that this is just an overlay window, it doesn't touch game memory or input. I've used it myself in The Finals without issues, but even though I have never experienced any problems, anti-cheat behavior is not something I can promise on. So use your own judgment before running it in anything ranked or competitive.

This is my first project, and I would love some feedback and to see if anyone other than me would appreciate this.
Anyways, thx and hope you guys enjoy it!

u/m39d — 4 hours ago
▲ 3 r/wayland+2 crossposts

Tabularium - Wayland Desktop Icons

Tabularium
FEATURES
- C99
- 100% Statically linked (+musl)
- Software Rendered
- Grid/Free placement
- Wallpaper support
- Multi-monitor support
- Extremely customizable (~/.config/tabularium)
- - alignments and placements, sizing/positioning based on percentages of screen size
- - icon size, font size, font outline, icon spacing, margins, icon direction, monitor placement order, etc
- Image/Audio/Video thumbnails (~/.cache/tabularium)
- - C port of libjxl forked from j40
- - uses pixman, stb_image, libwebp, libavformat/libavcodec
- Follows freedesktop specifications for themes and directories
- No connection to network
TODO/BUGS
- Multi-monitor wallpaper finicky on cycling
- Grid isn't aligned properly
- Font shaping for low res is bad, fixing now (adding C port of harfbuzz)
- Cleanup source directory to place on github/gitlab
- GUI needs to start over, I have created vector image of what GUI should look like

This is no where near a finished application. I'd like some input and bug testers. It does kind of work as it is but I don't remember if this version can open .desktop applications but it is currently in the source. Primary goals are no dependencies or runtimes, maximum compatibility (haven't implemented mutter workaround yet), and maximum configurability (within reason).

DOWNLOAD
x86_64: https://www.dropbox.com/scl/fi/oilq7yvg0wxqze8ct8i6o/tabularium?rlkey=jx5rx4b4qbl6dti63ycjqio4n&st=k0kwko4j&dl=0
aarch64: https://www.dropbox.com/scl/fi/h639biqnxywjm84axib2m/tabularium_aarch64?rlkey=py5vh0mqjzuibmf3gk3ni47k9&st=1ony1ae1&dl=0

u/zazentown — 5 hours ago
▲ 80 r/wayland+2 crossposts

[HackMatrix] saved locations for hotkeys and using the cursor at an angle (volume up)

With the Wayland port for HackMatrix, I am now able to use the cursor on applications at an angle. Hotkeys are now saved based on locations.

HackMatrix is closed source now btw.

If you want to support the project you can get it at https://collinalexbell.itch.io/hackmatrix

u/collinalexbell — 22 hours ago
▲ 4 r/wayland+1 crossposts

How to calibrate new screen on Wayland

Hello! I need help with calibrating my new screen that I installed on my X1 Carbon Gen 9. Ideally I'd like to apply a .icc file that I made on Windows to Linux, but just being able to change the RGB-balance would help a lot. I'm on Void Linux and I'm using dwl as a window manager on Wayland. I have tried to find a solution for around 3 hours without much luck. All the tools seem to be for X11 or other Wayland compositors.

reddit.com
u/Illustrious_Play1774 — 2 days ago

Porting Hyprland to X11

Hey everyone,I am currently writing Vexland — a C++ port that brings Hyprland's exact window management logic, behavior, and fluid animation style over to X11. It is designed to look and feel just like Hyprland, but running on Xorg (configured with a red color scheme by default).I am going through Hyprland's source files one by one, extracting the core logic, and rewriting it from scratch to work natively with the X11 display server.Current implementation details to ensure X11 stability:Centralized Registry (CWindowState): All windows are tracked via a central registry to avoid segfaults from asynchronous window destruction on X11.Isolated Layouts (CSpace): Tiling and geometry calculations are decoupled into a separate CSpace class owned by CWorkspace.Animation Offsets: Workspace swipe/fade states are stored as simple double properties to be handled by a global animation manager to replicate the exact original transitions.The boilerplate is being put together right now before testing the X11 event loop.I wanted to check if there is an active interest in a feature-parity Hyprland experience on X11. If you have experience with X11 window mapping edge cases, feel free to drop your thoughts. I will push the repository to GitHub once the initial boilerplate is stable.

reddit.com
u/GingyBroski — 4 days ago
▲ 48 r/wayland+4 crossposts

🗡️ Samurai-themed lock screen — kanji password glyphs & dark katana aesthetic

**Lockscreen:** [hyprlock](https://wiki.hyprland.org/Hypr-Ecosystem/hyprlock/)

**Dotfiles / Config:** [hyprlock-samurai on GitHub](https://github.com/basantbansal/hyprlock-samurai)

---

Hey everyone! I put together a minimal, samurai-themed config for Hyprlock.

I got tired of standard password dots, so I customized it to render the Japanese kanji character **春** on each keypress.

**Key Features:**

* Custom Kanji password glyphs (`春`)

* Fully transparent floating input field

* Japanese date formatting (`YYYY年MM月DD日`)

* Minimal dark green / katana aesthetic

Check out the repo if you'd like to try it, and drop a ⭐ on GitHub if you like the look!

u/bloodshedder404 — 5 days ago
▲ 66 r/wayland+5 crossposts

I reverse-engineered the Redragon SS-550 Stream Deck for Linux — open-source driver, GUI and installer (Rust/MIT)

Redragon ships the SS-550 Stream Deck with Windows-only software. I use Linux, so I captured the USB traffic from the proprietary driver, decoded the protocol, and reimplemented it in userspace.

The result is an open-source Rust workspace with a background daemon plus an optional Tauri/GTK control panel. It builds from source on any Linux distribution and works on both Wayland and X11.

What it supports:

• 15 configurable keys across multiple pages, custom icons and brightness control

• Commands, URLs, typed text, hotkeys and chained multi-actions

• Live key widgets for clock, CPU, RAM, temperature, timers, weather and playerctl

• Per-application profiles that switch with the focused window

• OBS Studio WebSocket 5.x controls and live status

• Twitch viewer/follower counts, clips and chat actions

• A daemon-only mode for headless systems

Two details that may help anyone working with similar USB hardware:

• The udev rule uses TAG+="uaccess" instead of MODE="0666", and it must sort before 73-seat-late.rules — hence 60-redragon-streamdeck.rules.

• The device exposes multiple HID interfaces. Writes returned EPIPE until I selected the correct interface by usage_page instead of assuming the first index.

Currently confirmed hardware: Redragon SS-550, USB ID 0200:1000. Other StreamDock/Mirabox-based devices may work, but I cannot test them yet.

Repository, installation instructions and source:

https://github.com/Rene-Kuhm/redragon-streamdeck-linux

If you own this device or a related model, I would appreciate test results. I am also happy to answer questions about the protocol, udev setup or architecture.

If you find the project useful, a GitHub star would help other Linux users discover it.

u/Tecnodespegue — 5 days ago
▲ 70 r/wayland+2 crossposts

What if each zone on an ultrawide could behave like its own display?

This is a window management approach designed for ultrawide and multi-monitor Windows setups.

Unlike traditional window managers that only resize and reposition windows, each zone can be presented to applications as its own display area. When an application queries the dimensions of the display it is running on, it receives the bounds of that zone rather than the entire physical panel.

This allows applications to maximize naturally inside a zone, while fullscreen content can also remain contained within that same zone instead of taking over the entire ultrawide display. This behavior is not tied to a specific application, website, or media player; fullscreen video playback can remain inside the selected zone across different types of applications and content sources.

The system also supports multiple layout profiles, per-zone wallpapers, taskbar placement within a selected zone, and independent use of applications across different zones.

A major focus is preserving the native Windows experience. The Windows desktop, taskbar, window system, and application interfaces are not replaced with a custom environment. Normal Windows behavior such as maximizing, fullscreen mode, task switching, snapping, and everyday desktop interaction remains intact.

The goal is for the zone system to integrate into Windows rather than sit on top of it as a separate desktop layer.

Individual zones can also be exposed to screen-sharing, streaming, and capture applications as selectable display areas. This means a single zone can be shared or broadcast directly without manually cropping the physical monitor or relying on window capture.

The rest of the ultrawide can continue to be used normally while only the intended zone is being shared.

Still in development, so feedback, questions, and edge cases worth testing are welcome.

youtube.com
u/DisplayZones — 12 days ago
▲ 5 r/wayland+1 crossposts

How can I make workspace navigation cyclic/wrap-around in GNOME?

Hey everyone,

I'm running Fedora and trying to make my workspace navigation cyclic (looping back to the first workspace when hitting the last one).

I tried installing Workspace Switcher Manager and enabling the "Wraparound" toggle. However, I realized this only works when using keyboard shortcuts that trigger the popup. If I use a three-finger trackpad swipe gesture, it still hits a hard wall and bounces back instead of wrapping around.

I also know that:

  1. The old Workspace Wrap Around extension is broken/unmaintained.
  2. Just Perfection removed its wrap toggle in recent versions.
  3. V-Shell is a bit too heavy and didn't give me the clean behavior I wanted.

Is there any modern extension or tweak that successfully patches trackpad gestures to loop workspaces seamlessly in GNOME 46/47?

Thanks!

reddit.com
u/Supernova-101 — 10 days ago

Hide window

Is it possible to make window transparent while sharing it?
On windows we have SetWindowDisplayAffinity, can't find anything similar to it.
Only hyprland `no_screen_share` but it's make window black instead of transparent

reddit.com
u/comm1ted — 12 days ago

From wl_display to mode event

Hello,

I am trying to figure out how to get a wl_output from a wl_display. I wish to "implement" the mode event from the wl_output.

Unless I am wrong, I need to start by instantiating a wl_display. I can one by writing:

wl_display* display = wl_display_connect(NULL)

But this is where I am stuck. I don't now how to retrieve a wl_output.

Thank you very much in advance for any help.

reddit.com
u/ScriptorTux — 10 days ago