Skip to content
akass-orgPublic
forked from niri-wm/niri

About

A scrollable-tiling Wayland compositor.

Resources

Contributing

Stars

6 stars

Watchers

0 watching

Forks

 
 

Repository files navigation

niri

A scrollable-tiling Wayland compositor.

Matrix GitHub License GitHub Release

Getting Started | Configuration | Setup Showcase

niri with a few windows open

About

Windows are arranged in columns on an infinite strip going to the right. Opening a new window never causes existing windows to resize.

Every monitor has its own separate window strip. Windows can never "overflow" onto an adjacent monitor.

Workspaces are dynamic and arranged vertically. Every monitor has an independent set of workspaces, and there's always one empty workspace present all the way down.

The workspace arrangement is preserved across disconnecting and connecting monitors where it makes sense. When a monitor disconnects, its workspaces will move to another monitor, but upon reconnection they will move back to the original monitor.

Features

Video Demo

demo.mp4

Also check out these videos that showcase a lot of the niri functionality:

Status

Niri is stable for day-to-day use and does most things expected of a Wayland compositor. Many people are daily-driving niri, and are happy to help in our Matrix channel.

Give it a try! Follow the instructions on the Getting Started page. Grab a desktop shell like DankMaterialShell or Noctalia (or build a more traditional setup): niri by itself is not a complete desktop environment. Also check out awesome-niri, a list of niri-related links and projects.

Here are some points you may have questions about:

  • Multi-monitor: yes, a core part of the design from the very start. Mixed DPI works.
  • Fractional scaling: yes, plus all niri UI stays pixel-perfect.
  • NVIDIA: seems to work fine.
  • Floating windows: yes, starting from niri 25.01.
  • Input devices: niri supports tablets, touchpads, and touchscreens. You can map the tablet to a specific monitor, or use OpenTabletDriver. We have touchpad gestures, but no touchscreen gestures yet.
  • Wlr protocols: yes, we have most of the important ones like layer-shell, gamma-control, screencopy. You can check on wayland.app at the bottom of each protocol's page.
  • Performance: while I run niri on beefy machines, I try to stay conscious of performance. I've seen someone use it fine on an Eee PC 900 from 2008, of all things.
  • Xwayland: integrated via xwayland-satellite starting from niri 25.08.

Media

niri: Making a Wayland compositor in Rust · December 2024

My talk from the 2024 Moscow RustCon about niri, and how I do randomized property testing and profiling, and measure input latency. The talk is in Russian, but I prepared full English subtitles that you can find in YouTube's subtitle language selector.

An interview with Ivan, the developer behind Niri · June 2025

An interview by a German tech podcast Das Triumvirat (in English). We talk about niri development and history, and my experience building and maintaining niri.

A tour of the niri scrolling-tiling Wayland compositor · July 2025

An LWN article with a nice overview and introduction to niri.

Contributing

If you'd like to help with niri, there are plenty of both coding- and non-coding-related ways to do so. See CONTRIBUTING.md for an overview.

Inspiration

Niri is heavily inspired by PaperWM which implements scrollable tiling on top of GNOME Shell.

One of the reasons that prompted me to try writing my own compositor is being able to properly separate the monitors. Being a GNOME Shell extension, PaperWM has to work against Shell's global window coordinate space to prevent windows from overflowing.

Tile Scrollably Elsewhere

Here are some other projects which implement a similar workflow:

Contact

Our main communication channel is a Matrix chat, feel free to join and ask a question: https://matrix.to/#/#niri:matrix.org

We also have a community Discord server: https://discord.gg/vT8Sfjy7sx


简介

客制化 Niri

额外功能

强制渲染

在 window-rule 添加以下规则以启用(屏幕捕获自动强制渲染):

window-rule {
    #match app-id="appid"
    force-render true #启用离屏渲染
    force-render-fps 120 #离屏渲染fps限制,不加则无限制
}

blur

该功能补全(弹窗模糊,透明剔除)仅对实时模糊(xray false)有效 dms 取消背景压暗功能时,launcher 输入法 blur 区域会无效,暂时不知道怎么解决

包括窗口模糊,layer 模糊,弹窗模糊

例:

blur {
    passes 4
    radius 2
    noise 0.1 // 噪点
    ignore-alpha 0.1 // 透明度剔除
    saturation 1.0 // 饱和度
}

window-rule{
    match app-id="appid"
    background-effect{
        xray false // false 为实时模糊
        blur true
        noise 0.1 // 噪点
        ignore-alpha 0.1 // 透明度剔除
        saturation 1.0 // 饱和度
    }
}

layer-rule{
    background-effect{
        xray false
        blur true
        noise 0.1 // 噪点
        ignore-alpha 0.1 // 透明度剔除
        saturation 1.0 // 饱和度
    }
}

建议 blur 规则


layer-rule{
    match namespace="gtk4-layer-shell"
    match namespace="selection"
    match namespace="swww-daemon"
    match namespace="linux-wallpaperengine"
    match namespace="noctalia-bar-exclusion*"
    match namespace="noctalia-bar-content*"
    match namespace="noctalia-image-cache-renderer*"
    match namespace="noctalia-dock-peek*"
    match namespace="^dms:.*:background$"

    background-effect{
        blur false
    }
}

炫彩边框

YaLTeR#3577

配置如下:

在 focus_ring 或者 border 中配置

border {
    fade-duration-ms 500 // 渐变时长
    gradient-spin-speed 45 // 颜色变化速度(角度)
}

窗口捕获光标绘制(上游已实现)

窗口捕获时(应用不自行绘制光标的时候)可以绘制光标,不过目前无法通过 OBS 设置取消绘制。 参考 Naxdy/niri@defae6a 并修复 bug

shm 屏幕录制(上游已实现)

实现 shm 屏幕录制 YaLTeR#1791 上游已合并,改用上游实现。

窗口规则

block-out-from

透明屏蔽

window-rule {
    #match rule
    transparent-block true
}

opacity-on-fullscreen

全屏窗口是否遵循透明度设置

window-rule {
    #match rule
    opacity-on-fullscreen true
}

fullscreen-backdrop-color

允许自定义全屏背景颜色 YaLTeR#3004

layout {
    fullscreen-backdrop-color "transparent"
}

rounding-exponent

窗口超椭圆圆角系数,默认 2.8,如果设置为 2.0 则为普通圆角

window-rule {
    #match rule
    rounding-exponent 2.8
}

layer-rule {
    #match rule
    rounding-exponent 2.8
}

ipc

window layout 提供当前窗口在当前 Output 的逻辑坐标 (Window location) 和 显示器名称(Monitor name)

> niri msg pick-window

Window ID 60: (focused)
  Title: "niri msg pick-window ~"
  App ID: "com.mitchellh.ghostty"
  Is floating: no
  PID: 3604487
  Workspace ID: 10
  Layout:
    Tile size: 948 x 1023
    Scrolling position: column 2, tile 1
    Window size: 940 x 1015
    Window offset in tile: 4 x 4
    Window location: 964 x 49
    Monitor name: DP-2

其他

引入 YaLTeR#2659,不过不知为何 background-in-working-area-only 似乎没有生效

About

A scrollable-tiling Wayland compositor.

Resources

Contributing

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages