Niri is a scrollable-tiling Wayland compositor. Windows are arranged in columns on an infinite strip going to the right. Opening a new window never causes existing windows to resize.
Here are the improvements from the last release.
Note
A small config regression found its way into this release. If you omit the mouse
or the touchpad
section entirely from the input config, scrolling on those devices will stop working. You can fix it by adding empty sections like this:
input {
// Having these empty sections is enough to fix scrolling.
mouse {}
touchpad {}
}
Commit 1951d2a fixes this. Packagers: consider applying it as a patch.
Interactive window moving
While not full-blown floating window support quite yet, this is an important step towards that. You can now move windows by dragging them by title bars, or anywhere while holding Mod.
niri-interactive-move.mp4
To prevent accidental layout changes, the windows rubber-band a little before you drag them out.
niri-interactive-move-rubberband.mp4
Furthermore, I made both interactive moving and resizing work on a touchscreen.
niri-touch-move-resize.mp4
Thanks to @Pajn for implementing a fairly complete proof-of-concept of this feature!
Locked pointer location hint
@sodiboo implemented the pointer location hint request. Apps like Blender use it to tell the compositor the final location after a locked pointer movement so that the compositor can update its own pointer location to match it.
niri-pointer-position-hint.mp4
Laptop lid and tablet mode switch bindings
Thanks to @cmeissl, you can now bind commands to laptop lid opening/closing and tablet mode switching. You can use this to automatically enable an on-screen keyboard when a convertible laptop enters tablet mode. See the switch events wiki page for more information and examples.
Additionally, I implemented disabling of the internal laptop monitor when closing the lid. So your workspaces will automatically move to the external screen. If for some reason this breaks for you, set the new keep-laptop-panel-on-when-lid-is-closed
debug config flag.
Pointer hiding
@yzy-1 implemented new cursor hiding options: hide when typing (on any key press), and hide after a set inactivity period. See the wiki page for more details.
cursor {
hide-when-typing
// Or, after a timeout:
// hide-after-inactive-ms 1000
}
To complement this, there are a few improvements to the hidden pointer behavior. The pointer will now show up on mouse button press, and on the contrary, it will stay hidden on programmatic and keyboard-triggered movement, like focusing a different monitor, or when using warp-mouse-to-focus
.
Input configuration improvements
Thanks to @tazjin, @chillinbythetree and @elipp for:
- Adding a
trackball
input config section. - Adding a
scroll-button
setting to mice, touchpads, trackpoints, and trackballs. - Adding a
scroll-factor
setting to mice and touchpads that you can use to speed up or slow down scrolling.
See the input config wiki page for more information.
Other improvements in this release
- Tablet input no longer follows the monitor rotation: you need to rotate your graphics tablet together with your monitor. This makes convertible laptops work properly; this is also how input works on other desktop environments. Thanks @cmeissl.
- The GTK Access portal is now explicitly set in
niri-portals.conf
, which makes it work. It is required for applications requesting PipeWire webcam and microphone access, such as the Firefox package on Fedora 41. Thanks @cmeissl. - The
niri-ipc
crate is now published to crates.io. - Active workspace is now preserved across monitor disconnects and reconnects.
- Added a window
--id
argument toniri msg action consume-or-expel-window-left/right
and to the IPC. - Added an explicit
power-on-monitors
action that can be useful with certain hardware. Niri still automatically powers on monitors on any input event. - Added support for running niri as a dinit service: files in
resources/dinit/
and corresponding code inniri-session
(thanks @markK24). - Added a
disable-monitor-names
debug config flag as a workaround for niri crashing when plugging in two monitors reporting the exact same make/model/serial. This issue is tracked in #734. - The focused window will now become visually inactive when a layer-shell app in front has keyboard focus.
- Fixed
focus-window-up-or-column-right
focusing left instead of right. - Fixed an animation jump when expelling a narrower window from a column with uneven window widths.
- Fixed the logind power key inhibit file descriptor leaking into processes spawned by niri.
- Fixed window close view position restoration triggering for windows that didn't get focused upon opening.
- Fixed a crash when an output disappears immediately after connecting.
- Fixed used xdg-activation token memory leak.
- Fixed lock screen clients hanging until a monitor is enabled when no monitors are enabled.
- Updated Smithay:
- Fixed memory leak when locking the screen.
- Fixed occasional visual freezing of GTK and other apps.
- Fixed a regression that made it so increasing the output scale in niri v0.1.9 didn't propagate to some clients, keeping them blurry.