A scrollable-tiling Wayland compositor.

Overview

niri

The beginnings of a scrollable-tiling Wayland compositor.

Status

Heavily work in progress. The occasional thing works, but likely is in a half-broken state.

niri.mp4

Idea

This section describes the goals I'm working towards. Many things don't work as written yet.

Niri implements scrollable tiling, heavily inspired by PaperWM. Windows are arranged in columns on an infinite strip going to the right. Every column takes up as much height as possible, spread between its windows.

With multiple monitors, every monitor has its own separate window strip. Windows can never "overflow" to an adjacent monitor.

This is one of the reasons that prompted me to try writing my own compositor. PaperWM is a solid implementation that I use every day, but, being a GNOME Shell extension, it has to work around Shell's global window coordinate space to prevent windows from overflowing.

Niri also has dynamic workspaces which work similar to GNOME Shell. Since windows go left-to-right horizontally, workspaces are arranged vertically. Every monitor has an independent set of workspaces, and there's always one empty workspace present all the way down.

Niri tries to preserve the workspace arrangement as much as possible upon disconnecting and connecting monitors. When a monitor disconnects, its workspaces will move to another monitor, but upon reconnection they will move back to the original monitor where it makes sense.

Running

cargo run -- -- alacritty

Inside a desktop session, it will run in a window. On a TTY, it will run natively.

To exit when running on a TTY, press SuperShiftE.

Hotkeys

When running on a TTY, the Mod key is Super. When running in a window, the Mod key is Alt.

The general system is: if a hotkey switches somewhere, then adding Ctrl will move the focused window or column there.

Hotkey Description
ModT Spawn alacritty
ModD Spawn fuzzel
ModN Spawn nautilus
ModQ Close the focused window
ModH or Mod Focus the window to the left
ModL or Mod Focus the window to the right
ModJ or Mod Focus the window below in a column
ModK or Mod Focus the window above in a column
ModCtrlH or ModCtrl Move the focused column to the left
ModCtrlL or ModCtrl Move the focused column to the right
ModCtrlJ or ModCtrl Move the focused window below in a column
ModCtrlK or ModCtrl Move the focused window above in a column
ModShiftHJKL or ModShift Focus the monitor to the side
ModCtrlShiftHJKL or ModCtrlShift Move the focused window to the monitor to the side
ModU Switch to the workspace below
ModI Switch to the workspace above
ModCtrlU Move the focused window to the workspace below
ModCtrlI Move the focused window to the workspace above
Mod, Consume the window to the right into the focused column
Mod. Expel the focused window into its own column
ModR Toggle between preset column widths
ModF Maximize column
ModShiftF Toggle full-screen on the focused window
ModShiftE Exit niri
You might also like...
A tiling layout engine for egui with drag-and-drop and resizing
A tiling layout engine for egui with drag-and-drop and resizing

egui_tiles Layouting and docking for egui. Supports: Horizontal and vertical layouts Grid layouts Tabs Drag-and-drop docking Trying it cargo r --examp

skyWM is an extensible tiling window manager written in Rust
skyWM is an extensible tiling window manager written in Rust

skyWM is an extensible tiling window manager written in Rust. skyWM has a clear and distinct focus adhering to the KISS and Unix philosophy.

Steno for Wayland

WayPlover Steno for Wayland Description A Steno Stroke Interpreter for Wayland. Open Steno Project Learn Plover Usage wayplover --port /dev/ttyACM0 --

A wallpaper daemon for Wayland compositors

Paper A wallpaper daemon for Wayland compositors implementing the layer-shell protocol. Features Supports png and jpg format Tiled wallpapers Bordered

`xrandr` for Gnome/wayland, on distros that don't support `wlr-randr`

gnome-randr-rust A reimplementation of xrandr for Gnome on Wayland, especially for systems that don't support wlr-output-management-unstable-v1 (e.g.

Turn off monitors to save power (for Wayland)

Same as xset dpms force off, but for Wayland. It requires zwlr_output_power_manager_v1 and org_kde_kwin_idle support from the Wayland compositer. wlro

Dynamic key remapper for X11 and Wayland

𝑋𝑟𝑒𝑚𝑎𝑝 ⌨️ xremap is a key remapper for Linux. Unlike xmodmap, it supports app-specific remapping and Wayland. Concept Fast - Xremap is written i

Wallpaper daemon for Wayland

wpaperd wpaperd is a minimal wallpaper daemon for Wayland. It allows the user to choose a different image for each output (aka for each monitor) just

Default implementation of the Wayland protocol for use with wl

Wayland An implementation of core Wayland interfaces and convenience functions for accelerating the development of Wayland clients and servers using t

A simple program that provides DBus interface to control display temperature and brightness under wayland without flickering

wl-gammarelay-rs Like wl-gammarelay, but written in rust, runs on a single thread, has three times less SLOC and uses DBus (for simplicity). Dbus inte

A simple clipboard manager for wayland.

Wpilman A simple clipboard manager for wayland. Installation Just compile it yourself or install the AUR package: paru -S wlipman-git # or yay -S wlip

Wayland clipboard manager that will make you clap 👏

Clapboard - clipboard manager that makes you clap 👏 Clapboard is a simple clipboard manager for Wayland, built in Rust. It saves a history of your cl

A wayland native, highly customizable runner.

anyrun A wayland native krunner-like runner, made with customizability in mind. Features Style customizability with GTK+ CSS More info in Styling Can

A launcher/menu program written in Rust for wlroots-based Wayland compositors

tehda tehda (ᴛᴀʏ-dah /ˈteɪ̯.dæ/ or /teh.da/; Finnish for "to do, perform, execute") is a launcher/menu program, like dmenu, rofi, or wofi, written in

Swayidle alternative to handle wayland idle notifications, sleep and lock events in Rust with Lua scripting based configuration language

swayidle-rs This is intended as a replacement of sway's idle management daemon. I use it as a tool to understand rust message passing and state manage

xdotool-like for KDE Wayland

kdotool - a xdotool clone for KDE Wayland Introduction Wayland, for security concerns, removed most of the X11 APIs that xdotool uses to simulate user

Owner
Ivan Molodetskikh
Ivan Molodetskikh
A tiling window manager for Windows 10 based on binary space partitioning

yatta BSP Tiling Window Manager for Windows 10 Getting Started This project is still heavily under development and there are no prebuilt binaries avai

Jade 143 Nov 12, 2022
`xrandr` for Gnome/wayland, on distros that don't support `wlr-randr`

gnome-randr-rust A reimplementation of xrandr for Gnome on Wayland, especially for systems that don't support wlr-output-management-unstable-v1 (e.g.

Max Ainatchi 40 Dec 21, 2022
Wayland compositor for AwesomeWM

Way Cooler Way Cooler is the compositor component of AwesomeWM for Wayland. Building To build Way Cooler, ensure you have meson installed (as well as

Way Cooler 2.1k Jan 2, 2023
Minimal, flexible & user-friendly X and Wayland tiling window manager with rust

SSWM Minimal, flexible & user-friendly X and Wayland tiling window manager but with rust. Feel free to open issues and make pull requests. [Overview]

Linus Walker 19 Aug 28, 2023
A tiling window manager for Windows 10 based on binary space partitioning

yatta BSP Tiling Window Manager for Windows 10 Getting Started This project is still heavily under development and there are no prebuilt binaries avai

Jade 143 Nov 12, 2022
A tiling window manager for Windows

komorebi Tiling Window Management for Windows. About komorebi is a tiling window manager that works as an extension to Microsoft's Desktop Window Mana

Jade (جاد) 2.6k Jan 1, 2023
Generic tiling window manager library in Rust

Pop Tiler Generic tiling window manager library for Rust, using an architecture based on GhostCell. License Licensed under the GNU Lesser General Publ

Pop!_OS 65 Dec 29, 2022
An extension to the bevy_ecs_tilemap, allowing for configurable tilesets, auto tiling, and more

bevy_ecs_tilemap_tileset A mouthful, I know. Working on a better name. An extension to the wonderful bevy_ecs_tilemap crate for Bevy, allowing for con

null 40 Dec 12, 2022
skyWM is an extensible tiling window manager written in Rust. skyWM has a clear and distinct focus adhering to the KISS and Unix philosophy.

Please note: skyWM is currently in heavy development and is not usable as of yet. Documentation and versions will change quickly. skyWM skyWM is an ex

MrBeeBenson 74 Dec 28, 2022
skyWM is an extensible tiling window manager written in Rust

skyWM is an extensible tiling window manager written in Rust. skyWM has a clear and distinct focus adhering to the KISS and Unix philosophy.

Chadano 74 Dec 28, 2022