v25.02 #1162
Replies: 3 comments
-
Wow! I would expect that there is nothing more to be done in the already perfect Niri but, I'm impressed in every version! Thanks for your amazing work and your continues work of making the best Wayland compositor even better! ❤️ |
Beta Was this translation helpful? Give feedback.
-
What an impressive update! I didn't realize there were so many features that could be added, that I'm now really excited to use! The thought and care that goes into the features you add, and how well they integrate and improve the overall experience of using Niri, is chef's kiss. Thank you Yalter! |
Beta Was this translation helpful? Give feedback.
-
This update looks great! Waiting for it to get out of testing repos in Arch to try it and update my configs :) |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
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
Packagers: I fixed the problem where some tests required
RAYON_NUM_THREADS=1
on a heavily multithreaded CPU. Please remove that variable if you had it set, so that we don't miss any new bugs.niri-25-02.mp4
Tabbed columns
Columns can now present windows as tabs, rather than vertically stacked tiles. This is useful when you have limited vertical space, or when you frequently switch between two large windows and want to avoid scrolling.
Add this new bind to your config to switch a column to tabbed mode:
This is the only new bind you will need. All other keyboard and mouse navigation works exactly the same as with regular columns: switch tabs with
focus-window-down/up
, add or remove windows withconsume-window-into-column
/expel-window-from-column
, and so on. (Thanks @elkowar for this wonderful UX idea!)niri-tabs.mp4
There are a few new actions that help navigate the tabs. All of them also work on regular columns.
focus-window-top/bottom
focuses the topmost or the bottommost window in a column.focus-window-down-or-top
andfocus-window-up-or-bottom
cycle the navigation so the focus jumps from the last to the first window and vice versa.focus-window-in-column <index>
focuses a specific window by index.The tab indicator can be customized in several ways and moved to top/bottom/right of the column. See the wiki page for more details.
You can also make windows open as tabbed columns by default globally or with a window rule. This goes well with the
hide-when-single-tab
setting for the tab indicator.Shadows
Niri can now draw shadows behind windows. Apart from being a nice aesthetic effect, shadows help to delineate floating and otherwise overlapping windows. They are especially useful when you disable or clip away client-side decorations (which commonly include shadows of their own).
Niri shadows are not enabled by default to not clash with the shadows coming from client-side decorations. Turning them on is simple enough:
You can customize properties like softness (blur radius), spread, offset, and color, both globally and for individual windows. Like borders and focus rings, shadows will follow the window corner radius that you set via
geometry-corner-radius
.Shadows also work on layer-shell surfaces. Due to the higher variety among layer-shell components, we don't enable shadows for them automatically; you need to explicitly enable them with a layer rule. For example:
Drag-and-drop view scrolling
In this release I finally addressed one of the longer-standing UX issues: you can now scroll the view left and right during a drag-and-drop operation by moving the mouse close to the monitor's edge. This is similar to how you can scroll various lists and scrolling views in applications during drag-and-drop.
There's a small debounce delay before the scrolling starts so that it doesn't trigger when quickly moving the mouse across monitors. You can customize this, as well as other parameters like maximum scrolling speed, in the new config section.
In addition to drag-and-drop, this gesture will trigger when dragging a window in the tiling layout. Dragging floating windows however won't scroll the view.
niri-dnd-edge-scroll.mp4
Screencast target window rule
There's a new
is-window-cast-target=true
window rule that matches windows "targetted" by an individual-window screencast. You can use it, for example, to highlight the window that you're screensharing by changing its border/focus ring colors.Thanks @elkowar for the suggestion!
Custom titles for Important Hotkeys
We have an Important Hotkeys dialog in niri that pops up at startup with a list of the main binds to get you going. The binds in this list and their titles are hardcoded (so that you're not spammed with all the keys bound by default).
In this release, you can customize this list using the new
hotkey-overlay-title
property.This is especially useful for binds that
spawn
programs, as niri can't automatically deduce good titles for them. For example, here's my Important Hotkeys list where I gave nice titles to most spawn binds (everything below PrtSc):These custom titles also support full Pango markup which allows you to change styles, colors, and fonts.
I also made two cosmetic changes to the key combo rendering:
Expand to available width
Sometimes windows don't quite neatly divide into preset widths, making it hard to fill the space on the monitor exactly. The new
expand-column-to-available-width
bind addresses this: it expands the focused window to take up all remaining free space on the screen.Since windows on niri can scroll in and out of view, this bind considers the current window positions. All fully visible windows remain on screen.
niri-expand-to-available-width.mp4
Keyboard shortcuts inhibit protocol
@sodiboo implemented the
keyboard-shortcuts-inhibit
Wayland protocol. It is used by apps like virtual machines or remote desktop clients to let them pass compositor bindings to the target system.You can force-deactivate the inhibiting and get your niri shortcuts back using the following new action. Make sure to add it to your config:
You can also make certain binds ignore inhibiting with the new
allow-inhibiting=false
property. They will always be handled by niri and never passed to the window.Screenshot without writing to disk
Thanks to @sornas, you can now capture screenshots only to the clipboard, without writing the image to disk. Simply press CtrlC in the screenshot UI instead of Space or Enter.
screenshot-screen
andscreenshot-window
binds can do this with a newwrite-to-disk=false
flag:Or, on the command line:
Other improvements in this release
wlr-virtual-pointer
Wayland protocol required for tools like wayvnc and lan-mouse. These tools should now work with niri, however, keep in mind that you won't able to use niri keyboard binds through them due to a limitation of how the virtual keyboard protocol is currently implemented in Smithay.scroll-factor
window rule property. It works the same way as the input setting but can be set for a specific window.toggle-window-rule-opacity
action which lets you temporarily make a window fully opaque, if it was semitransparent from a window rule.clipboard { disable-primary; }
at the top level of the niri config.niri msg action move-workspace-to-index <INDEX>
moves a workspace to a specific position on its monitor, andniri msg action move-workspace-to-monitor <OUTPUT>
moves a workspace to a different monitor.niri msg action switch-layout
accept a layout index (for example,0
or1
for the first or the second layout respectively) in addition tonext
andprev
.center-focused-column "on-overflow"
: it will now snap a window to the center of the screen when it can't fully fit together with the adjacent window.drag-lock
input flag for touchpads that enables libinput drag lock.calibration-matrix
input setting for tablets. See the wiki page for details.gnome-control-center
. These changes are transient, similarly toniri msg output
: they are not written into your niri config and will be forgotten after a restart.fixed
preset column width did not take the focused window's border into account. (This went unfixed for so long because it required a refactor to column width handling.) From now on, all ways to set afixed
window size correctly operate on the window excluding the borders.niri-session
script incompatibility with POSIX sh (thanks @z-erica).move-workspace-to-monitor-right
) now update the workspace's original monitor even if the movement itself did nothing (for example, you tried to move to monitor right, but you were already on the rightmost monitor).WAYLAND_SOCKET
(thanks @bbb651).idle-notify
v2 protocol which lets tools monitor the user's input activity, ignoring any idle inhibitors.ext-data-control
protocol (same aswlr-data-control
but graduated).Funding
I work on niri in the spare time that I have from my university studies. If you like what I do, you can support my work on GitHub Sponsors. Big thanks to all current and past sponsors!
This discussion was created from the release v25.02.
Beta Was this translation helpful? Give feedback.
All reactions