https://github.com/assistidemo/niri

https://github.com/assistidemo/niri

Science Score: 26.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (9.9%) to scientific vocabulary
Last synced: 10 months ago · JSON representation

Repository

Basic Info
  • Host: GitHub
  • Owner: assistidemo
  • License: gpl-3.0
  • Language: Rust
  • Default Branch: main
  • Size: 7.83 MB
Statistics
  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • Open Issues: 7
  • Releases: 0
Created over 1 year ago · Last pushed 10 months ago
Metadata Files
Readme Funding License

README.md

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

  • Built from the ground up for scrollable tiling
  • Dynamic workspaces like in GNOME
  • Built-in screenshot UI
  • Monitor and window screencasting through xdg-desktop-portal-gnome
    • You can block out sensitive windows from screencasts
  • Touchpad and mouse gestures
  • Group windows into tabs
  • Configurable layout: gaps, borders, struts, window sizes
  • Gradient borders with Oklab and Oklch support
  • Animations with support for custom shaders
  • Live-reloading config

Video Demo

https://github.com/YaLTeR/niri/assets/1794388/bce834b0-f205-434e-a027-b373495f9729

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 wiki page. Have your waybars and fuzzels ready: niri is not a complete desktop environment.

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: no built-in support, but xwayland-satellite is easy to set up and works very well.
    • Steam and games, including Proton: work perfectly through xwayland-satellite.
    • JetBrains IDEs, Ghidra: work well through xwayland-satellite.
    • Discord and other Electron apps: work well through xwayland-satellite.
    • Chromium and VSCode: work perfectly natively on Wayland with the right flags.
    • X11 apps that want to position windows or bars at specific screen coordinates: won't work well; you can run them in a nested compositor like labwc or rootful Xwayland.
    • Display scaling (integer or fractional) will make X11 apps look blurry; this needs to be supported in xwayland-satellite. For games, you can run them in gamescope at native resolution, even with display scaling.

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

We have a Matrix chat, feel free to join and ask a question: https://matrix.to/#/#niri:matrix.org

Owner

  • Login: assistidemo
  • Kind: user

GitHub Events

Total
  • Delete event: 26
  • Issue comment event: 35
  • Push event: 7
  • Pull request event: 58
  • Create event: 41
Last Year
  • Delete event: 26
  • Issue comment event: 35
  • Push event: 7
  • Pull request event: 58
  • Create event: 41

Dependencies

.github/workflows/ci.yml actions
  • Andrew-Chen-Wang/github-wiki-action 86138cbd6328b21d759e89ab6e6dd6a139b22270 composite
  • DeterminateSystems/flake-checker-action v4 composite
  • DeterminateSystems/nix-installer-action v3 composite
  • Swatinem/rust-cache v2 composite
  • actions/checkout v4 composite
  • dtolnay/rust-toolchain 1.80.1 composite
  • dtolnay/rust-toolchain stable composite
  • dtolnay/rust-toolchain nightly composite
  • peaceiris/actions-gh-pages v4 composite
.github/workflows/release.yml actions
  • actions/checkout v4 composite
  • dtolnay/rust-toolchain stable composite
  • softprops/action-gh-release v2 composite
Cargo.lock cargo
  • 470 dependencies
Cargo.toml cargo
  • approx 0.5.1 development
  • calloop-wayland-source 0.4.0 development
  • proptest 1.6.0 development
  • proptest-derive 0.5.1 development
  • rayon 1.10.0 development
  • wayland-client 0.31.8 development
  • xshell 0.2.7 development
  • arrayvec 0.7.6
  • async-channel 2.3.1
  • async-io 2.4.0
  • atomic 0.6.0
  • bytemuck 1.22.0
  • calloop 0.14.2
  • clap_complete 4.5.46
  • directories 6.0.0
  • drm-ffi 0.9.0
  • fastrand 2.3.0
  • futures-util 0.3.31
  • git-version 0.3.9
  • glam 0.30.0
  • input 0.9.1
  • keyframe 1.1.1
  • libc 0.2.171
  • libdisplay-info 0.2.2
  • log 0.4.26
  • niri-config 25.2.0
  • niri-ipc 25.2.0
  • ordered-float 5.0.0
  • pango 0.20.9
  • pangocairo 0.20.7
  • png 0.17.16
  • portable-atomic 1.11.0
  • profiling 1.0.16
  • sd-notify 0.4.5
  • url 2.5.4
  • wayland-backend 0.3.8
  • wayland-scanner 0.31.6
  • xcursor 0.3.8
  • zbus 5.5.0
niri-config/Cargo.toml cargo
  • pretty_assertions 1.4.1 development
  • csscolorparser 0.7.0
  • knuffel 3.2.0
  • miette 5.10.0
  • niri-ipc 25.2.0
  • regex 1.11.1
niri-ipc/Cargo.toml cargo
niri-visual-tests/Cargo.toml cargo