resources | ||
src | ||
.gitignore | ||
Cargo.lock | ||
Cargo.toml | ||
LICENSE | ||
README.md | ||
rustfmt.toml |
niri
The beginnings of a scrollable-tiling Wayland compositor.
Status
Heavily work in progress. Some things work, but a lot of expected functionality is missing.
https://github.com/YaLTeR/niri/assets/1794388/3713a563-d7a2-4c56-aa0b-b4986b5dc188
Idea
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 a full monitor worth of height, divided among its windows.
With multiple monitors, every monitor has its own separate window strip. Windows can never "overflow" onto 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.
Running
cargo run
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.
Session
You can install and run niri as a standalone desktop session.
Check the generate-rpm
metadata at the bottom of Cargo.toml
to see which files go where.
After installing, you can choose the niri session in GDM and, presumably, other display managers.
The niri session will autostart apps through the systemd xdg-autostart target.
You can also autostart systemd services like mako by symlinking them into $HOME/.config/systemd/user/niri.service.wants/
.
Niri also somewhat-works with xdg-desktop-portal-gnome for Flatpak apps.
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 |
ModPrtSc | Save a screenshot to ~/Pictures/Screenshots/ |
ModShiftE | Exit niri |