niri快速配置
什么是niri
niri是一个由Rust编写Wayland窗口管理器,采用滚动平铺的窗口布局。并且提供内置的截图、屏幕录制、丰富的触控板和鼠标手势支持等功能。
特性
- 类似 GNOME 的动态工作区
-
- 提供Overview模式,可缩放查看工作区和窗口
- 通过 xdg-desktop-portal-gnome 支持显示器和窗口的屏幕录制
-
- 可以在屏幕录制时屏蔽敏感窗口
-
- 支持动态切换录制目标
- 支持触摸板和鼠标手势
- 可将窗口分组为标签页
- 可配置的布局:间距、边框、支柱、窗口大小
- 支持 Oklab 和 Oklch 的渐变边框
- 支持自定义着色器的动画效果
- 配置文件支持实时重载REDME
译自niri github REDME
X11支持
要写在前面的是关于niri对于x11的支持情况。实际上,niri的作者直接表明X11 is very cursed,所以niri暂时不会有内置的x11兼容方案,不同于Hyprlnd采用wlroots实现内置XWayland的解决方案,niri目前仅能通过第三方的软件支持运行XWayland,如xwayland-satellite、xwayland-run等 (下个版本niri将会内置xwayland-satellite,曲线救国了算是),如果你的工作区离不开X11,或需要高性能的X11环境,niri可能不那么适合你😮💨
xwayland-satellite解决方案
- 根据niri wiki介绍,首先通过你的包管理器下载
xwayland-satellite
# Arch 需要启用extra存储库sudo pacman -S xwayland-satellite- 设置xwayland-satellite为自启动
spawn-at-startup "xwayland-satellite"关于这里语句的意义,我们在接下来的内容将会介绍
- 配置显示环境变量
首先运行一次
xwayland-satellite,观察输出,找到显示序号Xwayland :n:
INFO xwayland_satellite > Connected to Xwayland on :2接着将其写入配置文件
environment { DISPLAY ":2"}或者,你还可以使用xwayland-satellite :12来要求xwayland-satellite使用指定的DISPLAY number
配置
niri 中 Input,Outputs,Key Bindings,Switch Events,Layout,Named Workspaces,Miscellaneous,Window Rules,Layer Rules,Animations,Gestures,Debug Options都支持在配置文件 ~/.config/niri/config.kdl 中更改
配置文件使用kdl (递归命名KDL Document Language),这是一个比较小众的配置文件语言,它具有类似XML的节点语法,在这里,我们不深入讨论KDL的具体语法,实际上,如果你使用过XML、JSON等配置文件,你可以很快掌握kdl的基本语法
下面,我将介绍一些常用的配置,更具体的内容可以自行在wiki中查阅
开机启动
spawn-at-startup "xwayland-satellite"spawn-at-startup "qs" "-c" "dms"spawn-at-startup "~/.config/niri/scripts/Polkit.sh"设置软件开机自启,需要传参的用空格和引号分开,也可以给入一个文件位置来打开
Input
查看折叠的代码
input { keyboard { repeat-delay 300 repeat-rate 40
numlock }
touchpad { // off tap // dwt // drag false // drag-lock natural-scroll // accel-speed 0.2 // accel-profile "flat" // scroll-method "two-finger" }
mouse { // off // natural-scroll // accel-speed 0.2 accel-profile "flat" // scroll-method "no-scroll" }
// warp-mouse-to-focus
// focus-follows-mouse max-scroll-amount="0%" workspace-auto-back-and-forth}Keyboard
repeat-delay: 长按某个键多久后触发连点repeat-rate:每秒多少个字符numlock:开机时自动打开数字键
touchpad
niri触控板支持三指左右滑动滚动窗口,三指上下滑动切换工作空间,四指快速滑动打开Overview(默认快捷键为Mod+O)
tap:点击功能dwt:disable-when-typing,打字时禁用drag:点击后拖动,值为true或falsedrag-lock:拖动时放手保持拖动一段时间natural-scroll:反转双指滚动方向,设置时才是符合直觉的滚动方式
mouse
natural-scroll:同上,不设置时反而是符合直觉的滚动方式accel-speed:速度accel-profile:鼠标加速方案,值为adaptive表加速 或flat不加速
其他
warp-mouse-to-focus:切换焦点窗口时移动鼠标,默认值为mode="center-xy",如果切换焦点后光标不在窗口内就跳转光标到窗口中心,反之不移动。mode="center-xy-always"为始终跳转focus-follows-mouse:使焦点自动根据光标位置切换,可以设置max-scroll-amount="n%",设置后如果焦点跟随光标会导致视图滚动超过设定的量,则不会切换焦点workspace-auto-back-and-forth:使用索引切换工作空间时,如果通过索引切换到当前工作空间,将会自动切换到上一个工作空间
Cursor
cursor { xcursor-theme "Bibata-Modern-Ice" xcursor-size 24}设置光标主题和大小
Overview
overview { backdrop-color "#282828" workspace-shadow { off }}设置Overview背景色
Layout
查看折叠的代码
layout { gaps 8 center-focused-column "never"
preset-column-widths { proportion 0.2 proportion 0.4 proportion 0.6 proportion 0.8 } preset-window-heights { proportion 0.25 proportion 0.5 proportion 0.75 proportion 1.0 }
default-column-width { proportion 0.5; }
focus-ring { off width 4 active-color "#7fc8ff" inactive-color "#505050" active-gradient from="#C65B82" to="#09157B" angle=135 inactive-gradient from="#C65B82" to="#09157B" angle=135 relative-to="workspace-view" }
border { // off width 4 // active-color "#ffc87f" // inactive-color "#505050" urgent-color "#9b0000" active-gradient from="#C65B82" to="#09157B" angle=135 relative-to="workspace-view" in="oklch longer hue" inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view" }
shadow { //on softness 1 spread 1 offset x=0 y=5 color "#0007" }
struts { // left 64 // right 64 // top 64 // bottom 64 }}gaps:窗口之间的间隔center-focused-column:控制窗口在显示器上居中的行为
-
never:(默认值)不居中,当聚焦的列会显示屏幕的左边缘或右边缘。
-
always:被聚焦的列将始终居中显示。
-
on-overflow:当聚焦的列与之前聚焦的列无法同时显示在屏幕上时,会将该列居中显示。
column
preset-window-widths使用快捷键(默认是Mod+R)调整窗口时的宽度preset-window-heights使用快捷键(默认是Mod+Shift+R)调整窗口时的高度default-column-width打开新窗口时的默认宽度
- 值为
proportion 0.66667表对于的屏幕的占比,比如示例的2/3 - 或
fixed 1280表固定的像素数
focus-ring、border
focus-ring和border的区别在于:focus ring只围绕活动窗口绘制,而borders会围绕所有窗口绘制,并且会影响窗口的大小
width:显然是宽度,单位为像素,但是可以填入小数,在设置了缩放后会被计算active-color:焦点窗口装饰的颜色inactive-color:所有其他窗口装饰的颜色active-gradient:active-color的渐变版inactive-gradient:inactive-color的渐变版
-
- 渐变颜色可以添加
relative-to="workspace-view"值表示全部窗口一起渐变,不设置则为各自渐变。同时它们支持类似css的渐变插值,你可以使用类似in="srgb-linear"或in="oklch longer hue"的语法来设置
- 渐变颜色可以添加
- 所有的颜色支持以下的方式定义
-
- CSS 命名颜色:如
red
- CSS 命名颜色:如
-
- RGB 十六进制:如
#rgb、#rgba、#rrggbb、#rrggbbaa
- RGB 十六进制:如
-
- CSS 类似表示法:如
rgb(255, 127, 0)、rgba()、hsl()等几种格式。
- CSS 类似表示法:如
窗口圆角
看到这儿,你可能迫不及待的想要设置窗口圆角了,我就在这里提前告诉你,我们可以通过设置窗口规则来定义圆角:
window-rule { draw-border-with-background false geometry-corner-radius 12 clip-to-geometry true}
prefer-no-csd- 通过不设置匹配来匹配全部的窗口
draw-border-with-background:border装饰窗口并不只是加一个边框,而是填充一个背景,如果你使用某个背景透明的软件就会发现,设置这项为false可以取消背景geometry-corner-radius:圆角半径,也可以设置4个值来表示各个j角的圆角clip-to-geometry:geometry-corner-radius只会设置focus-ring和border的圆角,这项参数将同时应用圆角至窗口prefer-no-csd:有些软件可能自带窗口圆角和阴影,为了统一的效果,我们可以设置这项要求软件取消 client-side decorations
struts
struts { left 64 right 64 top 64 bottom 64 }设置窗口四边的空白,也可以设置为负值