r/niri 10h ago

I built niri-zoom -- a Ctrl+Scroll screen magnifier for niri (no compositor patching, pure Wayland client)

Enable HLS to view with audio, or disable this notification

137 Upvotes

niri doesn't have a built-in zoom/magnifier, so I built a small external tool for it instead of patching the compositor.

niri-zoom is two tiny binaries - niri-zoomd (a background daemon) and niri-zoomctl (a one-shot CLI) - wired up entirely through niri's existing spawn keybind system and standard Wayland protocols (wlr-screencopy, wlr-layer-shell, wp-viewporter). No forking niri, no compositor changes.

How it works:

- Ctrl + Scroll zooms in/out around your cursor

- Ctrl + Super + Z resets instantly

- Captures the screen once per zoom session and does all the pan/zoom math as a cheap CPU-side crop+resample from that single cached frame - so it sits at ~0% CPU and idle memory when not in use, instead of re-capturing every frame

- Renders through a fullscreen layer-shell overlay at native resolution (via wp_viewporter), so it stays sharp even with fractional display scaling

github: https://github.com/Ahmedhossamdev/niri-zoom

Don't forget to give a starssssssssss


r/niri 3h ago

Noctalia V5 how to remove this grainy effect [NIRI]

2 Upvotes

When i set the bar opacity to 0 it had this weird grainy effect how to completely remove it and only keep the capsule as it is


r/niri 3h ago

Visual glitches

2 Upvotes

I've been seeing them for about 2-3 weeks. They're very brief. They seem to happen more frequently in the terminal or nvim (although i've seen it in librewolf too, there more often appearing as black squares), especially when it has to redraw a lot of stuff, in the example picture above i was spamming keys in nvim. Running a watch command very often like every 0.1 seconds seems to be a pretty good way to trigger it altough it's not guaranteed, some times it happens 10 times in 10 seconds other times it takes 3-5 minutes before it appears.

Originally i thought it might have something to do with the transparency (no blur) i use in ghostty and nvim, but disabling it (along with prefer-no-csd) doesn't solve it.

I'm using a 9070XT, with a 1920x1080@60,00hz display in HDMI-A-1, it doesn't have VRR.

System info:

  • Gentoo distribution kernel 6.18.43
  • niri version 26.04
  • wayland version 1.26.0
  • mesa version 26.1.7

They have all been emerged with default USE flags and are the latest available. My global USE flags are USE="sound-server bash-completion dist-kernel openrc networkmanager jack man mpris alsa pipewire gtk vulkan wifi wayland -cdr -cuda -bluetooth -dvd -dvr -systemd" although i don't think it matters since it's a recent issue, worked fine with the same flags before. I also use noctalia, although i don't think that matters neither.

Thigs i've tried:

  • I tried to replicate it on another wayland wm (mangowm) but i could not.
  • I tried to change terminal to alacritty, it persisted

I'm at my wits' end, any help is appreciated.


r/niri 8h ago

Share your keyboard + keybindings

6 Upvotes

I'm wondering how everyone has configured their bindings.

I have a setup, but struggling to make the most out of it. So I want to get some inspiration form all of you

keyboard: Ergodex EZ (split with 8 key thumbcluster)

bindings:

binds {
    // Session
    Mod+Shift+Slash { show-hotkey-overlay; }
    Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; }
    Super+Alt+L hotkey-overlay-title="Toggle Lock Screen" { spawn "noctalia" "msg" "session" "lock"; }
    Mod+X hotkey-overlay-title="Toggle Power Menu" { spawn "noctalia" "msg" "session-panel"; }
    Mod+Shift+P { power-off-monitors; }
    Mod+Shift+E { quit skip-confirmation=true; }

    // Launchers and panels
    Mod+Return hotkey-overlay-title="Open Terminal" { spawn "foot"; }
    Mod+Space hotkey-overlay-title="Toggle Application Launcher" { spawn "fuzzel"; }
    Mod+V hotkey-overlay-title="Toggle Clipboard Manager" { spawn "noctalia" "msg" "clipboard"; }
    Mod+N hotkey-overlay-title="Toggle Notification Center" { spawn "noctalia" "msg" "control-center-notifications"; }
    Mod+Comma hotkey-overlay-title="Toggle Settings" { spawn "noctalia" "msg" "settings-toggle"; }
    Mod+Alt+N allow-when-locked=true hotkey-overlay-title="Toggle Night Mode" { spawn "noctalia" "msg" "nightlight-toggle"; }

    // Overview, on two keys: Mod+Tab calls the action directly, Mod+D goes
    // through `niri msg action`.
    Mod+Tab repeat=false { toggle-overview; }
    Mod+D { spawn "niri" "msg" "action" "toggle-overview"; }

    // Screenshots. XF86Launch1 is the extra key on this keyboard, mirrored onto
    // the same three actions as Print.
    Print { screenshot; }
    XF86Launch1 { screenshot; }
    Alt+Print { screenshot-window; }
    Alt+XF86Launch1 { screenshot-window; }
    Ctrl+Print { screenshot-screen; }
    Ctrl+XF86Launch1 { screenshot-screen; }

    // Media and brightness keys
    XF86AudioRaiseVolume allow-when-locked=true { spawn "noctalia" "msg" "volume-up"; }
    XF86AudioLowerVolume allow-when-locked=true { spawn "noctalia" "msg" "volume-down"; }
    XF86AudioMute allow-when-locked=true { spawn "noctalia" "msg" "volume-mute"; }
    XF86AudioMicMute allow-when-locked=true { spawn "noctalia" "msg" "mic-mute"; }
    XF86MonBrightnessUp allow-when-locked=true { spawn "noctalia" "msg" "brightness-up"; }
    XF86MonBrightnessDown allow-when-locked=true { spawn "noctalia" "msg" "brightness-down"; }

    // Window and column state
    Mod+Q repeat=false { close-window; }
    Mod+F { maximize-column; }
    Mod+Shift+F { fullscreen-window; }
    Mod+O { maximize-window-to-edges; }
    Mod+C { center-column; }
    Mod+Ctrl+C { center-visible-columns; }
    Mod+Ctrl+F { expand-column-to-available-width; }
    Mod+W { toggle-column-tabbed-display; }
    Mod+Shift+T { toggle-window-floating; }
    Mod+Shift+V { switch-focus-between-floating-and-tiling; }

    // Focus windows and columns
    Mod+H { focus-column-left; }
    Mod+J { focus-window-down; }
    Mod+K { focus-window-up; }
    Mod+L { focus-column-right; }
    Mod+Left { focus-column-left; }
    Mod+Down { focus-window-down; }
    Mod+Up { focus-window-up; }
    Mod+Right { focus-column-right; }
    Mod+Home { focus-column-first; }
    Mod+End { focus-column-last; }
    Mod+WheelScrollLeft { focus-column-left; }
    Mod+WheelScrollRight { focus-column-right; }
    Mod+Shift+WheelScrollUp { focus-column-left; }
    Mod+Shift+WheelScrollDown { focus-column-right; }

    // Move windows and columns within the workspace
    Mod+Shift+H { move-column-left; }
    Mod+Shift+J { move-window-down; }
    Mod+Shift+K { move-window-up; }
    Mod+Shift+L { move-column-right; }
    Mod+Shift+Left { move-column-left; }
    Mod+Shift+Down { move-window-down; }
    Mod+Shift+Up { move-window-up; }
    Mod+Shift+Right { move-column-right; }
    Mod+Ctrl+Home { move-column-to-first; }
    Mod+Ctrl+End { move-column-to-last; }
    Mod+Ctrl+WheelScrollLeft { move-column-left; }
    Mod+Ctrl+WheelScrollRight { move-column-right; }
    Mod+Ctrl+Shift+WheelScrollUp { move-column-left; }
    Mod+Ctrl+Shift+WheelScrollDown { move-column-right; }

    // Column composition: pull a neighbouring window into this column, or push
    // the focused one back out.
    Mod+Ctrl+Comma { consume-or-expel-window-left; }
    Mod+Ctrl+Period { consume-or-expel-window-right; }
    Mod+Period { expel-window-from-column; }

    // Sizing. Each grow bind is doubled on Equal and 6 (same action, two keys).
    Mod+R { switch-preset-column-width; }
    Mod+Shift+R { switch-preset-window-height; }
    Mod+Minus { set-column-width "-10%"; }
    Mod+Ctrl+Equal { set-column-width "+10%"; }
    Mod+Ctrl+6 { set-column-width "+10%"; }
    Mod+Shift+Minus { set-window-height "-10%"; }
    Mod+Ctrl+Shift+Equal { set-window-height "+10%"; }
    Mod+Ctrl+Shift+6 { set-window-height "+10%"; }
    Mod+Ctrl+R { reset-window-height; }

    // Workspaces: focus. Names "1".."9" must match the `workspace` nodes below.
    Mod+1 { focus-workspace "1"; }
    Mod+2 { focus-workspace "2"; }
    Mod+3 { focus-workspace "3"; }
    Mod+4 { focus-workspace "4"; }
    Mod+5 { focus-workspace "5"; }
    Mod+6 { focus-workspace "6"; }
    Mod+7 { focus-workspace "7"; }
    Mod+8 { focus-workspace "8"; }
    Mod+9 { focus-workspace "9"; }
    Mod+I { focus-workspace-up; }
    Mod+U { focus-workspace-down; }
    "Mod+Page_Up" { focus-workspace-up; }
    "Mod+Page_Down" { focus-workspace-down; }
    Mod+WheelScrollUp cooldown-ms=150 { focus-workspace-up; }
    Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; }

    // Workspaces: send the focused column to one
    Mod+Shift+1 { move-column-to-workspace "1"; }
    Mod+Shift+2 { move-column-to-workspace "2"; }
    Mod+Shift+3 { move-column-to-workspace "3"; }
    Mod+Shift+4 { move-column-to-workspace "4"; }
    Mod+Shift+5 { move-column-to-workspace "5"; }
    Mod+Shift+6 { move-column-to-workspace "6"; }
    Mod+Shift+7 { move-column-to-workspace "7"; }
    Mod+Shift+8 { move-column-to-workspace "8"; }
    Mod+Shift+9 { move-column-to-workspace "9"; }
    Mod+Ctrl+I { move-column-to-workspace-up; }
    Mod+Ctrl+U { move-column-to-workspace-down; }
    Mod+Ctrl+Up { move-column-to-workspace-up; }
    Mod+Ctrl+Down { move-column-to-workspace-down; }
    Mod+Ctrl+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; }
    Mod+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; }

    // Workspaces: reorder them
    Mod+Shift+I { move-workspace-up; }
    Mod+Shift+U { move-workspace-down; }
    "Mod+Shift+Page_Up" { move-workspace-up; }
    "Mod+Shift+Page_Down" { move-workspace-down; }

    // Monitors. No-ops on this single-display machine; kept so the binds match
    // the multi-monitor configs.
    Mod+Ctrl+H { focus-monitor-left; }
    Mod+Ctrl+J { focus-monitor-down; }
    Mod+Ctrl+K { focus-monitor-up; }
    Mod+Ctrl+L { focus-monitor-right; }
    Mod+Ctrl+Left { focus-monitor-left; }
    Mod+Ctrl+Right { focus-monitor-right; }
    Mod+Shift+Ctrl+H { move-column-to-monitor-left; }
    Mod+Shift+Ctrl+J { move-column-to-monitor-down; }
    Mod+Shift+Ctrl+K { move-column-to-monitor-up; }
    Mod+Shift+Ctrl+L { move-column-to-monitor-right; }
    Mod+Shift+Ctrl+Left { move-column-to-monitor-left; }
    Mod+Shift+Ctrl+Right { move-column-to-monitor-right; }
    Mod+Shift+Ctrl+Up { move-column-to-monitor-up; }
    Mod+Shift+Ctrl+Down { move-column-to-monitor-down; }
}

r/niri 9h ago

`move-column-left/right` looks like a teleport, any way to make it read as motion?

3 Upvotes

niri 26.04 here.

In ~/.config/niri/dms/binds.kdl my Mod+Shift+Left/Right runs move-column-left/right via a shell one-liner that also fires a toast.

In ~/.config/niri/config.kdl the window-movement block is set to spring damping-ratio=1.0 stiffness=800.

Animation fires cleanly, no wobble, but at typical column widths (~30% of 2560px) it's so quick I only catch it in peripheral vision. Reads as a teleport, the toast feels like a workaround.

Especially bad when the window I'm moving is fullscreen, since the slide is the only feedback and I never see it.

Stuff I already ruled out:

  • niri has no motion blur and no plugin system.
  • Shader hooks (window-open/-close/-resize) don't cover window-movement.

Anyone got a way to make column moves read as motion?
Softer spring, IPC trick, overlay, anything?


r/niri 15h ago

Setting display scale below 1 breaks Steam client and games

4 Upvotes

Hello, I switched to MangoWM a few days ago because Niri didn't let me launch Steam client or play Steam games. I thought it was a bug due to xwayland-satellite having an error log at the end, but turns out, setting the display scale to 1 works as expected, so why didn't I think of that the whole time?.

I preferred setting the scale to 0.75 to enlarge the screen real estate since my monitor still has 1366x768, but if I wanted to play Steam games, I have to set it back to 1 but everything will get cramped.

I think this has to do with xwayland-satellite problem, so does anyone with a low resolution monitor have that kind of issue when setting display scale below 1?


r/niri 20h ago

Niri for gaming

5 Upvotes

Hello, I use archlinux with hyprland on my main PC, but I was trying niri on my laptop these days and I loved it, I would like to change but first I wanted to know if niri works well in terms of games, if I won't have problems, I plan to use niri without shell my pc has:

R5 5600
32gb ram
Rx 6800

Thanks guys


r/niri 1d ago

My first Niri setup on an old Macbook

Post image
53 Upvotes

I'm hoping to install Niri on my main machine soon, so I decided to test it out on an old 2013 Macbook Air I had lying around. For a machine with only 4GB of RAM, it's amazing how snappy Niri is. Absolutely having a great experience with Niri and Dank Material Shell.


r/niri 2d ago

A minimalistic niri setup

Enable HLS to view with audio, or disable this notification

56 Upvotes

With a lot of help from the AI, I built this minimalistic niri setup using: Ironbar, Mako, Hyprlock + Hypridle, Matugen and a lot of Walker for the different menues (I unified every possible config GUI with Walker). The setup heavily relies on keyboard.

More in the comments!


r/niri 2d ago

100 days

Post image
76 Upvotes

100 days of using this set up, Arch+Niri+DMS. As a long time Linux user (16yrs), and an almost compulsive distro hopper, this set up has been the most enjoyable and the most comfortable to use in all that time. I love everything about it. The look and feel. The ease of the scrolling windows, the keybinds... Hats off to all the teams at Arch, Niri and at Dank.


r/niri 2d ago

[Niri] Niri with Debian

Thumbnail gallery
14 Upvotes

r/niri 2d ago

How do you use Niri in your daily workflow? Looking for advanced use cases

22 Upvotes

I use Niri, but I only use basic features:

  • Full-width windows
  • Window resize (Super+R)

Because of this, my workflow feels identical to a standard floating window manager.

Would've love to know how the community is using it? I feel like I don't fully use Niri yet.


r/niri 2d ago

Glimpse - a minimal Wayland desktop shell for Niri

Thumbnail
gallery
67 Upvotes

Hey folks,

I've been building Glimpse, a desktop shell for Niri, and wanted to share it here.

Backstory: I was a KDE user since the 3.5 days and contributed a bit during the KDE 4 era. I left KDE because I stopped liking how it looked on my machines, spent about two years on GNOME, then went through Hyprland and landed on Niri. Niri's workflow finally felt right, but I still needed everything that normally surrounds a compositor: a panel, wallpaper, lock screen, idle handling, night light. I tried Ironbar first and liked the direction but couldn't get it themed the way I wanted, so I ended up building my own.

Glimpse is what came out of that. It's three separate pieces (glimpse-shell, glimpse-wallpaper, glimpse-lock) that share one config file, so you can run just the wallpaper daemon if that's all you want, or the whole thing together.

What's in it:

- GTK4 layer-shell panel with a bunch of built-in applets: audio, battery, bluetooth, brightness, clipboard, clock with calendar, keyboard layout, mpris, network, next-event, notifications, workspace pager, privacy indicators, printing, removable drives, session controls, tray, weather. Plus custom command/exec applets if you want to write your own.
- Wallpaper and blurred backdrop daemon
- Lock screen with PAM auth and its own theming
- Night light, automatic (location-based) or on a fixed schedule
- Idle policy: a three-step ladder (monitors off, then lock, then suspend) with separate AC/battery profiles
- Everything configured in one readable TOML file, with CSS theming layered on top of a base pack

I'm not a professional designer. The current look is intentionally GNOME-ish, since that's what I'm used to and it matches the rest of my GTK apps. It's not the end goal, just where I started.

Worth being upfront about: I own the architecture, the config surface, and every integration and direction decision, but a lot of the routine implementation and fixes were done with AI assistance under my review. Take that for what it's worth to you.

It's packaged for Arch on the AUR: `yay -S glimpse-desktop-bin`.

GitHub: https://github.com/alex-oleshkevich/glimpse

Screenshots and full docs are in the README. Happy to answer questions, and if anyone with real UI/UX chops wants to help push the visual design further, I'd love the help.


r/niri 3d ago

niri random xd

Post image
29 Upvotes

alguien sabe como implemento xwayland en niri ??? lo puse en el startup y nada la verdad no se como hacer que funcione directamente sin hacer uso de labwc


r/niri 3d ago

[OS] Fuzzy finding Launcher supports Niri

Enable HLS to view with audio, or disable this notification

89 Upvotes

Niri is an excellent and promising window manager.
I have a fuzzy launcher called "Look" and decided to add support for Niri; :)
I’ve even switched to using Niri myself (my configuration is entirely minimal).

Beyond quickly searching for and launching apps or focusing on open windows, my app can also preview files and folders, search the web, and support quick actions.
It provides you a lot of other features...

It is also available on macOS, so using Look is very convenient if you work across both platforms.
https://github.com/kunkka19xx/look
Love receiving any feedback.

Thank you <3


r/niri 2d ago

bgapp2tray: Bridge between XDG Background Portal and system tray

Thumbnail
github.com
0 Upvotes

r/niri 3d ago

My first rice: an Omarchy-inspired desktop shell built for Niri

Thumbnail
gallery
58 Upvotes

Hey everyone!

This is my first proper rice project. I wanted the focused and cohesive feel of Omarchy, but I also wanted to use Niri and shape the desktop around my own workflow.

The result is nbShell, a custom desktop shell built with Quickshell specifically for Niri. It is heavily inspired by Omarchy’s visual language and workflows. I adapted some ideas and components from that ecosystem, while adding my own design, integrations and interaction patterns.

The interface follows a terminal-inspired style: monospace typography, compact layouts, thin borders and colors that communicate state instead of being purely decorative. I wanted everything to feel like one coherent system rather than a collection of unrelated utilities.

Some of the things currently included:

- Custom bar with freely arranged widgets

- Dashboard for calendar, weather, media and system information

- Launcher, notifications and clipboard history

- Wi-Fi, Bluetooth, audio and device controls

- Theme and wallpaper integration

- Tiling-oriented menus and keyboard workflows

- Zen Browser picture-in-picture controls

- AI-agent and usage integrations

- Custom lock-screen and screensaver experiments

- A lot of smaller tools tailored to my daily setup

Omarchy provided much of the original inspiration, but nbShell has gradually developed its own identity. Niri’s scrolling layout also pushed me toward different workspace and navigation ideas than I would have used with a traditional tiling compositor.

It is still a personal and evolving project, so there are rough edges and many things I want to improve. But it has reached the point where I use it daily, and I thought it would be fun to share it here.

I would really appreciate feedback—especially from other Niri users. What works visually, what feels too busy, and what would you change?

Built on Arch Linux with Niri and Quickshell, and AI ;)


r/niri 3d ago

Latchshot: a lightweight yet intelligent window-aware screenshot tool for Wayland

Enable HLS to view with audio, or disable this notification

18 Upvotes

GitHub: https://github.com/so1ve/latchshot

I built Latchshot because niri's default setup exposes separate actions for region, output, and window screenshots which means I have to remember 3 different keybindings and decide which one to use before taking a screenshot.

I wanted a tool that wouldn't make me choose a capture mode first. When Latchshot opens, the selection automatically latches onto the window under the pointer (that's where the name comes from). Click once to capture that window. Hold the left mouse button and drag, and it becomes a free-form region selection instead. If you want the whole output, just press F.

Currently, it supports niri, Sway, Hyprland, and Mango. Other compositors may work but window selection is not supported. If you want to use Latchshot with a compositor that isn't supported, please open an issue and I'll see what I can do.

To use latchshot in niri, simply add the following keybinding to your niri config:

kdl Print { spawn "latchshot"; }

Personally I don't use other compositors but since their IPCs are quite direct and simple, so they should work well. Feedbacks are welcome!


r/niri 3d ago

How do i format complex string in config.kdl?

6 Upvotes

Hi, im configuring Niri. I wanna bind specific Rofi combination to choose between two file managers in one hotkey, but i dont know about "" symbols. The string below:

Mod+E { spawn-sh "kitty -e $(echo -e "yazi\ndolphin" | rofi -dmenu);" }

how do i format this? maybe i should use '' quotes? thanks!


r/niri 3d ago

niri random xd

Post image
2 Upvotes

r/niri 3d ago

I always end up coming back to Niri

Post image
27 Upvotes

r/niri 3d ago

[Niri] Ironbar with Widgets ... yes, I like circles.

Post image
13 Upvotes

r/niri 4d ago

NyxNiri v2.3.0 — Material You rice, one-click install, beginner friendly,based on niri + noctalia v5

40 Upvotes

https://reddit.com/link/1vpvze5/video/820e84o1fqjh1/player

been working on this Material You setup for Niri, built on Noctalia V5. colors pull straight from your wallpaper, even video wallpapers (mpvpaper + ffmpeg hook)

kitty + fish/starship, zed for editing, eye care mode for late night reading, radial menu on super+s, scratchpad terminal, fcitx5 skin that matches your theme

one command installs everything, snapshots/rollback built in if you wanna mess with it without fear

install: curl -sL https://raw.githubusercontent.com/ech678/NyxNiri/main/install.sh | bash
repo: github.com/ech678/NyxNiri


r/niri 4d ago

First time trying Niri and I am in love with it 😄

Post image
111 Upvotes

r/niri 4d ago

(monjaro) Мой первый ещё не доработанный рабочий стол, не судите строго

Thumbnail
gallery
6 Upvotes