Ivan Molodetskikh 5ff8b89aaf Rework output connection to always go through on_output_config_changed()
This has the following benefits:
1. connector_connected() is now more closely mirroring
   connector_disconnected() in that it merely lights up the connector,
   and doesn't check if the connector should be off from the config.
2. We can use more complex on/off logic that depends on multiple
   connectors. For example, this commit adds logic to only disable the
   laptop panel on lid close if there are other connected outputs.

We don't want to disable the laptop panel on lid close if it's the only
connected output because it causes screen lockers to create their
surface from scratch on normal laptop unsuspend, which is undesirable
and also confuses some screen lockers.
2024-11-08 09:11:56 +03:00
2024-10-05 12:09:24 -07:00
2024-11-06 08:42:22 +03:00
2024-03-26 10:40:19 +04:00
2024-01-10 22:43:46 -08:00
2024-11-02 18:55:56 +03:00
2024-07-28 11:41:09 +03:00
2023-08-10 14:50:51 +04:00
2024-09-13 15:10:25 +03:00
2023-08-10 14:49:38 +04:00
2024-06-09 10:50:22 +00:00

niri

A scrollable-tiling Wayland compositor.

Matrix GitHub License GitHub Release

Getting Started | Configuration | Setup Showcase

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

  • 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
  • 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

A lot of the essential functionality is implemented, plus some goodies on top. Feel free to give niri a try: follow the instructions on the Getting Started wiki page. Have your waybars and fuzzels ready: niri is not a complete desktop environment.

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

S
Description
Latest
2026-04-25 18:20:03 +07:00
Languages
Rust 99.1%
GLSL 0.6%
Nix 0.2%
Shell 0.1%