Niri 简介

官方文档:

本文是基于以下文档有一定的改动和补充:

niri是一款滚动平铺的linux桌面,与windows或kde等堆叠桌面有着完全不同的操作风格,适合喜欢无键盘管理工作区的人以及希望摆脱堆叠式桌面混乱的人使用

成品图

安装步骤

前置内容

该文章面向拥有一定linux基础的人,假定你已经有了一定的linux知识,能够基本的使用包管理器,系统内有git、clang等基础工具

以下的教程中只安装桌面所需要的工具,而不会教你安装git等工具,且以下教程全部基于arch linux系统

安装基础软件包

安装niri及其核心系统组件

1
2
3
4
5
6
7
8
# 安装 Niri 和核心运行库、系统服务
sudo pacman -S niri xdg-desktop-portal-gtk xdg-desktop-portal-gnome xwayland-satellite pipewire pipewire-pulse wireplumber libnotify hyprpolkitagent

# 安装必要的桌面登录管理器 (SDDM)
sudo pacman -S sddm

# 安装壁纸、锁屏和电源管理
sudo pacman -S swaybg swayidle hyprlock brightnessctl

启动对应的服务:

1
2
3
4
5
# 启用 SDDM 开机自启 (如果你还没有其他登录管理器)
sudo systemctl enable sddm.service

# 启用蓝牙服务
sudo systemctl enable --now bluetooth

安装系统需要的基础工具

niri并不是开箱即用的桌面,需要你自己下载文件管理器等相关的工具

1
2
3
4
5
6
7
8
9
10
11
# 安装快捷键工具 (截图、按键显示等)
sudo pacman -S grim flameshot wshowkeys-git

# 终端与文件管理器
sudo pacman -S alacritty dolphin

# 蓝牙管理、图片查看、媒体播放
sudo pacman -S blueman gwenview vlc

# 主题和图标 (Breeze)
sudo pacman -S breeze

安装中文输入法

1
2
3
4
5
# 安装中文字体
sudo pacman -S noto-fonts

# 安装 Fcitx5 输入法及中文支持、Qt 支持
sudo pacman -S fcitx5 fcitx5-qt fcitx5-chinese-addons

安装增强特色的系统组件

1
2
# 安装 Noctalia、Vicinae 以及相关字体 (JetBrains 字体和 MiSans 字体)
yay -S noctalia vicinae ttf-jetbrains-mono misans

参考文档中大佬用的是noctalia-shell,不过我这里使用的是最新的noctalia,拥有更丰富的插件生态也更符合我的品味

配置

配置锁屏

创建swayidle配置文件:

1
mkdir -p ~/.config/systemd/user

然后创建并编辑 ~/.config/systemd/user/swayidle.service 文件,填入以下内容(你可以根据自己的需求调整超时时间):

1
2
3
4
5
6
7
8
[Unit]
PartOf=graphical-session.target
After=graphical-session.target
Requisite=graphical-session.target

[Service]
ExecStart=/usr/bin/swayidle -w timeout 601 'niri msg action power-off-monitors' timeout 600 'swaylock -f' before-sleep 'swaylock -f'
Restart=on-failure

执行命令创建服务依赖:

1
2
3
4
5
# 重新加载 systemd 用户单元配置,让新文件生效
systemctl --user daemon-reload

# 将 swayidle 服务添加到 niri 会话的启动依赖中
systemctl --user add-wants niri.service swayidle.service

配置桌面

桌面的配置是实时的,当你对文件保存后桌面就会根据最新的配置文件进行更新配置,我会在配置文件中加入足够的注释,你可以根据注释按照自己的要求修改配置文件

配置文件位置~/.config/niri/config.kdl,若不存在则自行创建:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
// ============================================================
// niri 配置文件
// 说明:本文件使用 KDL 语法,注释使用 //
// 以下注释仅用于解释配置含义,不改变实际行为
// 新增的“未使用可选项”均以注释形式补充
// ============================================================

// 可选:拆分配置文件时使用 include
// include "extra.kdl"

// 键盘、鼠标、触摸板等输入设备相关配置
input {
keyboard {
// 键盘布局使用美式布局
xkb {
layout "us"
// 可选:键盘变体
// variant "intl"
// 可选:xkb 选项,例如交换 Caps 和 Ctrl
// options "ctrl:nocaps"
// 可选:键盘模型
// model "pc105"
// 可选:xkb 规则
// rules "evdev"
// 可选:自定义 xkb 文件
// file "/path/to/custom.xkb"
}

// 启动时启用 NumLock;省略此设置则会禁用
numlock

// 可选:按键重复延迟,单位毫秒
// repeat-delay 600
// 可选:按键重复速率,单位次/秒
// repeat-rate 25
// 可选:键盘布局跟踪方式,可选 "global" 或 "window"
// track-layout "global"
}

touchpad {
// 启用轻触点击
tap
// 启用自然滚动,即内容跟随手指方向滚动
natural-scroll
// 使用双指滚动
scroll-method "two-finger"

// 可选:打字时禁用触摸板
// dwt
// 可选:打字时禁用触摸板点击
// dwtp
// 可选:触摸板加速度,范围 -1 到 1
// accel-speed 0.2
// 可选:加速度配置,可选 "adaptive" 或 "flat"
// accel-profile "adaptive"
// 可选:点击方式,可选 "button-areas" 或 "clickfinger"
// click-method "clickfinger"
// 可选:中键模拟
// middle-emulation
// 可选:滚动按钮编号
// scroll-button 8
// 可选:轻触按钮映射
// tap-button-map "left-right-middle"
}

mouse {
// 设置鼠标移动速度,范围 -1 到 1,由慢到快
accel-speed 0

// 可选:鼠标自然滚动
// natural-scroll
// 可选:鼠标加速度配置,可选 "adaptive" 或 "flat"
// accel-profile "flat"
// 可选:鼠标滚动方式
// scroll-method "button"
// 可选:鼠标滚动按钮编号
// scroll-button 8
// 可选:左手模式
// left-handed
// 可选:中键模拟
// middle-emulation
}

// 可选:轨迹点配置
// trackpoint {
// accel-speed 0
// accel-profile "adaptive"
// natural-scroll
// middle-emulation
// }

// 可选:轨迹球配置
// trackball {
// accel-speed 0
// accel-profile "adaptive"
// natural-scroll
// middle-emulation
// }

// 可选:触摸屏配置
// touchscreen {
// map-to-output "eDP-1"
// left-handed
// }

// 可选:数位板配置
// tablet {
// map-to-output "eDP-1"
// left-handed
// }

// niri 默认接管电源按钮功能为 sleep,这里禁用以使用系统关机功能
disable-power-key-handling

// 切换 Mod 键:正常使用 Super 键;嵌套窗口内使用 Alt 键
mod-key "Super"
mod-key-nested "Alt"

// 可选:在 workspace 之间自动来回切换
// workspace-auto-back-and-forth
// 可选:焦点跟随鼠标,并可限制最大滚动量
// focus-follows-mouse max-scroll-amount="0%"
}

// ============================================================
// 显示器配置
// 可使用 `niri msg outputs` 查找显示器名称
// ============================================================

// HDMI-A-1 显示器配置
output "HDMI-A-1" {
// 取消注释以禁用此显示器
// off

// 默认聚焦在这个显示器
focus-at-startup

// 显示模式格式为 "<width>x<height>" 或 "<width>x<height>@<refresh rate>"
// 如果省略刷新率,niri 将为该分辨率选择最高刷新率
mode "[email protected]"

// 缩放比例,可使用整数或小数,例如 1.5 表示 150%
scale 1.5

// transform 允许逆时针旋转显示,有效值为:
// normal, 90, 180, 270, flipped, flipped-90, flipped-180, flipped-270
transform "normal"

// 输出在所有显示器坐标空间中的位置
// 未明确配置位置的显示器将放置在所有已放置显示器的右侧
// position x=1280 y=0

// 可选:启用可变刷新率
// variable-refresh-rate true
}

// eDP-1 显示器配置
// 如果 eDP-2 没有连接,将会默认聚焦在这个显示器
output "eDP-1" {
// 关闭此显示器输出
off

// 显示模式:2560x1600,刷新率 300Hz
mode "[email protected]"

// 不做旋转
transform "normal"

// 可选:显示器位置
// position x=0 y=0
// 可选:启动时聚焦
// focus-at-startup
// 可选:缩放
// scale 1.0
// 可选:启用可变刷新率
// variable-refresh-rate true
}

// ============================================================
// 快捷键绑定
// 可使用 wev 查询特定按键对应的 XKB 名称
// 可选绑定参数示例:
// repeat=false
// cooldown-ms=150
// allow-when-locked=true
// allow-inhibiting=false
// hotkey-overlay-title="说明"
// ============================================================
binds {
// Alt+Tab 启动 niri-switch 切换窗口
Alt+Tab { spawn "niri-switch"; }

// Mod+Shift+/ 显示重要的热键列表,通常与 Mod+? 相同
Mod+Shift+Slash { show-hotkey-overlay; }

// Mod+D 打开文件管理器 Dolphin
Mod+D hotkey-overlay-title="Open the File Manager" { spawn "/usr/bin/dolphin"; }

// Mod+L 锁屏:使用 swaylock
// Mod+L hotkey-overlay-title="Lock the Screen: swaylock" { spawn "/usr/bin/swaylock" "-f" "-i" "$HOME/.dotfiles/sway/.config/sway/lock.png"; }

// Mod+L 锁屏:使用 hyprlock
Mod+L hotkey-overlay-title="Lock the Screen: hyprlock" { spawn "/usr/bin/hyprlock"; }

// Mod+Return 打开终端 Alacritty
Mod+Return hotkey-overlay-title="Open a Terminal" { spawn "/usr/bin/alacritty"; }

// Mod+A 打开应用启动器 fuzzel
// Mod+A hotkey-overlay-title="Run an Application" { spawn "/usr/bin/fuzzel"; }

// Mod+A 打开应用启动器 vicinae
Mod+A hotkey-overlay-title="Run an Application" { spawn "/usr/bin/vicinae" "toggle"; }

// Mod+X 打开浏览器 Google Chrome
Mod+X hotkey-overlay-title="Open a browser: zen" { spawn "/usr/bin/google-chrome-stable"; }

// Mod+D 同步切换 obs 和 mpv 状态
// Mod+D hotkey-overlay-title="同步切换obs和mpv状态" { spawn "/usr/bin/touch" "/tmp/obs_mpv_toggle_pause"; }

// Mod+K 打开屏幕按键显示工具 screenkey/wshowkeys
Mod+K hotkey-overlay-title="打开screenkey" { spawn "/usr/bin/wshowkeys" "-a" "right" "-a" "bottom" "-F" "ComicShannsMono Nerd Font 30"; }

// Mod+Shift+K 关闭屏幕按键显示工具
Mod+Shift+K hotkey-overlay-title="关闭screenkey" { spawn "/usr/bin/killall" "wshowkeys"; }

// Mod+Shift+C 重启 waybar
// Mod+Shift+C hotkey-overlay-title="重启waybar" { spawn-sh "pkill waybar && waybar"; }

// Mod+T 打开终端 Alacritty
Mod+T { spawn "alacritty"; }

// 可选:带 cooldown-ms、repeat、allow-when-locked 等参数的绑定示例
// Mod+Shift+V repeat=false cooldown-ms=200 hotkey-overlay-title="示例" { spawn "foo"; }
// XF86AudioPlay allow-when-locked=true { spawn "playerctl" "play-pause"; }

// --------------------------------------------------------
// 音量控制
// allow-when-locked=true 表示锁屏时这些按键也会生效
// wpctl 是 WirePlumber 包中附带的工具
// --------------------------------------------------------
XF86AudioRaiseVolume allow-when-locked=true { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.1+"; }
XF86AudioLowerVolume allow-when-locked=true { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.1-"; }
XF86AudioMute allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; }
XF86AudioMicMute allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"; }

// --------------------------------------------------------
// 亮度控制
// brightnessctl 有独立的包
// --------------------------------------------------------
XF86MonBrightnessUp allow-when-locked=true { spawn "brightnessctl" "set" "+10%"; }
XF86MonBrightnessDown allow-when-locked=true { spawn "brightnessctl" "set" "10%-"; }

// 开关 overview 概览模式
Mod+Tab repeat=false { toggle-overview; }

// 关闭当前窗口
Mod+Q repeat=false { close-window; }

// --------------------------------------------------------
// 窗口焦点切换与位置移动
// --------------------------------------------------------
Mod+Left { focus-column-left; }
Mod+Down { focus-window-down; }
Mod+Up { focus-window-up; }
Mod+Right { focus-column-right; }
Mod+N { focus-column-left; }
Mod+i { focus-column-right; }

// 将窗口从相邻列吸入当前列,或从当前列推出
Mod+Alt+Left { consume-or-expel-window-left; }
Mod+Alt+Right { consume-or-expel-window-right; }

// 焦点左移并居中列的示例
// Mod+N { spawn-sh "niri msg action focus-column-left && niri msg action center-column"; }
// Mod+i { spawn-sh "niri msg action focus-column-right && niri msg action center-column"; }

// 移动列/窗口位置
Mod+Shift+Left { move-column-left; }
Mod+Shift+Down { move-window-down; }
Mod+Shift+Up { move-window-up; }
Mod+Shift+Right { move-column-right; }
Mod+Shift+N { move-column-left; }
Mod+Shift+I { move-column-right; }

// 可选:交换列/窗口位置
// Mod+Ctrl+Shift+Left { swap-column-left; }
// Mod+Ctrl+Shift+Right { swap-column-right; }
// Mod+Ctrl+Shift+Up { swap-window-up; }
// Mod+Ctrl+Shift+Down { swap-window-down; }

// 焦点跳转到第一列/最后一列
Mod+Home { focus-column-first; }
Mod+End { focus-column-last; }

// 将当前列移动到第一列/最后一列
Mod+Shift+Home { move-column-to-first; }
Mod+Shift+End { move-column-to-last; }

// --------------------------------------------------------
// workspace 焦点切换,以及窗口在 workspace 之间移动
// --------------------------------------------------------
Mod+Page_Down { focus-workspace-down; }
Mod+Page_Up { focus-workspace-up; }
Mod+Ctrl+Page_Down { move-column-to-workspace-down; }
Mod+Ctrl+Page_Up { move-column-to-workspace-up; }

// 上下移动整个 workspace
Mod+Shift+Page_Down { move-workspace-down; }
Mod+Shift+Page_Up { move-workspace-up; }

// 上下方向共用的窗口、工作空间焦点切换和位置移动
Mod+E { focus-window-or-workspace-down; }
Mod+U { focus-window-or-workspace-up; }
Mod+Shift+E { move-window-down-or-to-workspace-down; }
Mod+Shift+U { move-window-up-or-to-workspace-up; }

// 可选:焦点切换到上一个 workspace
// Mod+Ctrl+Tab { focus-workspace-previous; }

// --------------------------------------------------------
// 显示器焦点切换
// --------------------------------------------------------
Mod+Ctrl+Left { focus-monitor-left; }
Mod+Ctrl+Down { focus-monitor-down; }
Mod+Ctrl+Up { focus-monitor-up; }
Mod+Ctrl+Right { focus-monitor-right; }
Mod+Ctrl+N { focus-monitor-left; }
Mod+Ctrl+E { focus-monitor-down; }
Mod+Ctrl+U { focus-monitor-up; }
Mod+Ctrl+I { focus-monitor-right; }

// --------------------------------------------------------
// 跨显示器移动窗口
// --------------------------------------------------------
Mod+Shift+Ctrl+Left { move-column-to-monitor-left; }
Mod+Shift+Ctrl+Down { move-column-to-monitor-down; }
Mod+Shift+Ctrl+Up { move-column-to-monitor-up; }
Mod+Shift+Ctrl+Right { move-column-to-monitor-right; }
Mod+Shift+Ctrl+N { move-column-to-monitor-left; }
Mod+Shift+Ctrl+E { move-column-to-monitor-down; }
Mod+Shift+Ctrl+U { move-column-to-monitor-up; }
Mod+Shift+Ctrl+I { move-column-to-monitor-right; }

// 可选:移动整个 workspace 到显示器
// Mod+Shift+Ctrl+Page_Up { move-workspace-to-monitor-up; }
// Mod+Shift+Ctrl+Page_Down { move-workspace-to-monitor-down; }

// --------------------------------------------------------
// 鼠标滚轮相关快捷键
// cooldown-ms 用于限制连续触发间隔,避免滚动过快
// --------------------------------------------------------
Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; }
Mod+WheelScrollUp cooldown-ms=150 { focus-workspace-up; }
Mod+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; }
Mod+Ctrl+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; }

// 左右滚动切换列焦点
Mod+WheelScrollRight { focus-column-right; }
Mod+WheelScrollLeft { focus-column-left; }

// Ctrl+左右滚动移动列
Mod+Ctrl+WheelScrollRight { move-column-right; }
Mod+Ctrl+WheelScrollLeft { move-column-left; }

// Shift+上下滚动切换列焦点
Mod+Shift+WheelScrollDown { focus-column-right; }
Mod+Shift+WheelScrollUp { focus-column-left; }

// Ctrl+Shift+上下滚动移动列
Mod+Ctrl+Shift+WheelScrollDown { move-column-right; }
Mod+Ctrl+Shift+WheelScrollUp { move-column-left; }

// 触摸板滚动调节音量
Mod+TouchpadScrollDown { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.02+"; }
Mod+TouchpadScrollUp { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.02-"; }

// --------------------------------------------------------
// 数字键切换 workspace
// Mod+数字:聚焦到对应 workspace
// Mod+Shift+数字:把当前列移动到对应 workspace
// --------------------------------------------------------
Mod+1 { focus-workspace 1; }
Mod+2 { focus-workspace 2; }
Mod+3 { focus-workspace 3; }
Mod+4 { focus-workspace 4; }
Mod+5 { focus-workspace 5; }
Mod+6 { focus-workspace 6; }
Mod+7 { focus-workspace 7; }
Mod+8 { focus-workspace 8; }
Mod+9 { focus-workspace 9; }
Mod+0 { focus-workspace 10; }

Mod+Shift+1 { move-column-to-workspace 1; }
Mod+Shift+2 { move-column-to-workspace 2; }
Mod+Shift+3 { move-column-to-workspace 3; }
Mod+Shift+4 { move-column-to-workspace 4; }
Mod+Shift+5 { move-column-to-workspace 5; }
Mod+Shift+6 { move-column-to-workspace 6; }
Mod+Shift+7 { move-column-to-workspace 7; }
Mod+Shift+8 { move-column-to-workspace 8; }
Mod+Shift+9 { move-column-to-workspace 9; }
Mod+Shift+0 { move-column-to-workspace 10; }

// 可选:移动单个窗口到指定 workspace
// Mod+Ctrl+Shift+1 { move-window-to-workspace 1; }
// Mod+Ctrl+Shift+2 { move-window-to-workspace 2; }

// --------------------------------------------------------
// 最大化、全屏与列宽调整
// --------------------------------------------------------
// 在窗口化和全屏之间切换
Mod+W { toggle-windowed-fullscreen; }

// 将当前列扩展到可用宽度
Mod+F { expand-column-to-available-width; }

// 当前窗口全屏
Mod+Shift+F { fullscreen-window; }

// 未最大化的窗口居中
Mod+C { center-column; }
Mod+Ctrl+C { center-visible-columns; }

// 在 layout 中预设的宽度和高度之间切换
Mod+R { switch-preset-column-width; }
Mod+Shift+R { switch-preset-window-height; }

// 改变宽度单位,可使用 pixels 或百分比
Mod+Minus { set-column-width "-10%"; }
Mod+Equal { set-column-width "+10%"; }

// 改变高度
Mod+Shift+Minus { set-window-height "-10%"; }
Mod+Shift+Equal { set-window-height "+10%"; }

// 切换悬浮窗,并在平铺窗口和悬浮窗之间切换焦点
Mod+Shift+Space { toggle-window-floating; }
Mod+Space { switch-focus-between-floating-and-tiling; }

// --------------------------------------------------------
// 截图
// Alt+J:区域截图并交给 satty 编辑
// Alt+Shift+J:打开 flameshot 图形界面
// Print:niri 内置截图
// Ctrl+Print:截取整个屏幕并保存到磁盘
// Alt+Print:截取当前窗口并保存到磁盘
// --------------------------------------------------------
Alt+J { spawn-sh "grim -g \"$(slurp)\" - | satty --filename - --output-filename ~/$(date '+%Y%m%d-%H:%M:%S').png"; }
Alt+Shift+J { spawn "flameshot" "gui"; }
Print { screenshot show-pointer=false; }
Ctrl+Print { screenshot-screen write-to-disk=true; }
Alt+Print { screenshot-window write-to-disk=true; }

// 可选:截图时显示鼠标指针
// Print { screenshot show-pointer=true; }
// 可选:截图只写入剪贴板,不写入磁盘
// Ctrl+Print { screenshot-screen write-to-disk=false; }

// 针对虚拟机软件可能需要键盘控制权
// allow-inhibiting=false 表示忽略当前快捷键本身的抑制状态
Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; }

// 退出 niri 时将显示确认对话框,避免意外退出
Mod+Shift+Q { quit; }

// 关闭显示器;移动鼠标或按下任意按键恢复
Mod+Shift+P { power-off-monitors; }
}

// ============================================================
// 布局相关设置
// 影响窗口的位置和尺寸
// ============================================================
layout {
// 窗口周围的缝隙,单位为逻辑像素
gaps 10

// 背景颜色设为透明
background-color "transparent"

// 存在多个窗口时,未最大化的窗口不自动居中,方便分屏
// 可选值:"never"、"always"、"on-overflow"
center-focused-column "never"

// 只有一个窗口时自动居中显示
always-center-single-column

// 可选:默认列宽
// default-column-width { proportion 0.5; }

// Mod+R 在以下预设列宽之间切换
preset-column-widths {
proportion 0.5
proportion 0.2444
proportion 0.7556
// 固定设置逻辑像素的宽度,精确设置,受 scale 影响
// fixed 1920
}

// Mod+Shift+R 在以下预设窗口高度之间切换
preset-window-heights {
proportion 0.5
proportion 0.8
proportion 1.0
}

// 可选:为 niri 预留屏幕边缘空间
// struts {
// left 0
// right 0
// top 0
// bottom 0
// }

// 可选:第一个 workspace 上方保留空 workspace
// empty-workspace-above-first

// 关闭聚焦框
focus-ring {
// off

// 可选:聚焦框宽度
// width 4
// 可选:聚焦框颜色
// active-color "#bd93f9"
// inactive-color "#505050"
// urgent-color "#9b0000"
// 可选:聚焦框渐变
// active-gradient from="#bd93f9" to="#94b9fa" angle=135
// inactive-gradient from="#505050" to="#808080" angle=45
// urgent-gradient from="#800" to="#a33" angle=45
}

// 关闭边框
border {
off

// 可选:边框宽度
// width 4
// 可选:边框颜色
// active-color "#bd93f9"
// inactive-color "#505050"
// urgent-color "#9b0000"
// 可选:边框渐变
// active-gradient from="#bd93f9" to="#94b9fa" angle=135
// inactive-gradient from="#505050" to="#808080" angle=45
// urgent-gradient from="#800" to="#a33" angle=45
}

// 可选:窗口阴影
// shadow {
// on
// softness 30
// spread 5
// offset x=0 y=5
// color "#00000070"
// }

// 可选:标签指示器
// tab-indicator {
// on
// width 4
// active-color "#bd93f9"
// inactive-color "#505050"
// urgent-color "#9b0000"
// active-gradient from="#bd93f9" to="#94b9fa" angle=135
// inactive-gradient from="#505050" to="#808080" angle=45
// urgent-gradient from="#800" to="#a33" angle=45
// }

// 可选:插入提示
// insert-hint {
// color "#bd93f9"
// gradient from="#bd93f9" to="#94b9fa" angle=135
// }
}

// ============================================================
// 环境变量
// 覆盖由 niri 启动的进程的环境变量
// 可选:可继续添加任意环境变量
// 此处设置了中文输入法的相关环境变量,不需要单独配置输入法
// ============================================================
environment {
QT_QPA_PLATFORMTHEME "qt5ct"
ALL_PROXY "http://127.0.0.1:7890"
LANG "zh_CN.UTF-8"
LC_CTYPE "zh_CN.UTF-8"
LC_NUMERIC "zh_CN.UTF-8"
LC_TIME "zh_CN.UTF-8"
LC_COLLATE "zh_CN.UTF-8"
LC_MONETARY "zh_CN.UTF-8"
LC_MESSAGES "zh_CN.UTF-8"
LC_PAPER "zh_CN.UTF-8"
LC_NAME "zh_CN.UTF-8"
LC_ADDRESS "zh_CN.UTF-8"
LC_TELEPHONE "zh_CN.UTF-8"
LC_MEASUREMENT "zh_CN.UTF-8"
LC_IDENTIFICATION "zh_CN.UTF-8"
LC_ALL null

// XDG_DATA_DIRS "$HOME/.local/share" "$XDG_DATA_DIRS"
// GTK_IM_MODULE "fcitx"

// 输入法相关环境变量
QT_IM_MODULE "fcitx"
// https://fcitx-im.org/wiki/Using_Fcitx_5_on_Wayland#Sway
XMODIFIERS "@im=fcitx"
QT_IM_MODULES "wayland;fcitx"
GTK_IM_MODULE null
SDL_IM_MODULE null
GLFW_IM_MODULE null

// 可选:自定义其他环境变量
// EDITOR "nvim"
// BROWSER "google-chrome-stable"
// TERMINAL "alacritty"
}

// ============================================================
// 启动项
// spawn-at-startup 后面跟的是启动时执行到底命令
// ============================================================

// 启动 niri-switch 守护进程
spawn-at-startup "niri-switch-daemon"

// 启动 niri 时自动启动的软件
spawn-at-startup "/usr/bin/fcitx5" "-d"

// 启动 vicinae 服务端
spawn-at-startup "/usr/bin/vicinae" "server"

// 启动 soteria
spawn-at-startup "~/.cargo/bin/soteria"

// 启动仓库更新脚本
spawn-at-startup "~/Desktop/tools/update_repositories.sh"

// 启动 noctalia
spawn-at-startup "noctalia"

// 启动 hyprlock
spawn-at-startup "/usr/bin/hyprlock"

// 要运行 shell 命令(带有变量、管道等),请使用 spawn-sh-at-startup:
spawn-sh-at-startup "swaybg -i /path/to/your/wallpaper.png -m fill"

// 启动 hyprpolkitagent 权限代理
spawn-at-startup "/usr/lib/hyprpolkitagent/hyprpolkitagent"

// 启动 Clash
spawn-at-startup "clash-verge"

// 可选:其他启动命令示例
// spawn-at-startup "waybar"
// spawn-at-startup "swaync"
// spawn-sh-at-startup "sleep 2 && waybar"

// ============================================================
// 热键提示浮层
// ============================================================
hotkey-overlay {
// 跳过启动时的“重要的热键”弹出窗口
skip-at-startup

// 可选:如果不跳过启动提示,可删除上面的 skip-at-startup
// skip-at-startup
}

// 设置截图保存路径;null 将会禁止保存到磁盘
screenshot-path "~/Pictures/ScreenShot/%Y-%m-%d %H-%M-%S.png"

// 可选:禁止截图保存到磁盘
// screenshot-path null

// 忽略软件自带的装饰,例如标题栏
prefer-no-csd

// ============================================================
// 光标设置
// ============================================================
cursor {
// 光标主题
// xcursor-theme "Dracula-cursors"
xcursor-theme "breeze"

// 光标大小
xcursor-size 24

// 打字时隐藏光标
hide-when-typing

// 可选:空闲一段时间后隐藏光标,单位毫秒
// hide-after-inactive-ms 1000
}

// ============================================================
// 窗口规则
// 可使用 `niri msg windows` 查看 Title 和 App ID 等信息
// ============================================================

// 默认窗口规则
window-rule {
// 默认在 eDP-2 输出上打开
open-on-output "eDP-2"

// 可选:默认在指定 workspace 打开
// open-on-workspace "1"
// 可选:默认最大化打开
// open-maximized true
// 可选:默认全屏打开
// open-fullscreen true
// 可选:默认悬浮打开
// open-floating true
// 可选:默认不聚焦
// open-focused false

// 默认窗口高度
// default-window-height { proportion 0.9; }

// 默认悬浮位置
// default-floating-position x=100 y=200 relative-to="bottom-left"

// 默认列宽
// default-column-width { proportion 0.7556; }

// 可选:默认列显示方式
// default-column-display "normal"

// 窗口圆角
geometry-corner-radius 20

// 裁剪到窗口几何形状,使圆角生效
clip-to-geometry true

// 可选:窗口透明度
// opacity 0.9

// 边框设置
border {
// off
on
width 4
active-gradient from="#bd93f9" to="#94b9fa" angle=135
inactive-color "#505050"
urgent-color "#9b0000"

// active-gradient from="#80c8ff" to="#bbddff" angle=45
// inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view"
// urgent-gradient from="#800" to="#a33" angle=45
}

// 关闭聚焦框
focus-ring {
off

// 可选:窗口规则中的聚焦框样式
// width 4
// active-color "#bd93f9"
// inactive-color "#505050"
// urgent-color "#9b0000"
// active-gradient from="#bd93f9" to="#94b9fa" angle=135
}

// 可选:窗口阴影
// shadow {
// on
// softness 30
// spread 5
// offset x=0 y=5
// color "#00000070"
// }

// 可选:标签指示器
// tab-indicator {
// on
// width 4
// active-color "#bd93f9"
// inactive-color "#505050"
// urgent-color "#9b0000"
// }

// 可选:插入提示
// insert-hint {
// color "#bd93f9"
// gradient from="#bd93f9" to="#94b9fa" angle=135
// }

// 可选:窗口背景色
// background-color "#00000000"

// 可选:更多匹配条件
// match is-active=true
// match is-focused=true
// match is-active-in-column=true
// match is-floating=true
// match is-window-cast-target=true
// match at-startup=true
}

// scrcpy 窗口规则
window-rule {
open-on-output "eDP-2"
match app-id="scrcpy"
default-column-width { proportion 0.2444; }
}

// Chrome 窗口规则
window-rule {
open-on-output "eDP-2"
match app-id=r#"chrome"#
default-column-width { proportion 0.8; }

// border {
// on
// width 4
// active-color "#61AFEF"
// }

// open-focused false
}

// satty 窗口规则
window-rule {
match app-id="com.gabm.satty" title="satty"
border {
on
width 2
active-color "#61AFEF"
}
}

// 可选:更多窗口规则示例
// window-rule {
// match app-id="firefox"
// open-on-workspace "2"
// open-maximized true
// opacity 0.95
// }
// window-rule {
// match title="Picture-in-Picture"
// open-floating true
// default-floating-position x=100 y=100 relative-to="top-right"
// }

// ============================================================
// 图层规则
// 可使用 `niri msg layers` 查看 namespace
// ============================================================

// 将 quickshell-overview 放入 overview 背景层
layer-rule {
match namespace="^quickshell-overview$"
place-within-backdrop true

// 可选:图层透明度
// opacity 0.75
// 可选:截图时排除该图层
// block-out-from "screenshot"
// 可选:图层阴影
// shadow {
// on
// softness 30
// spread 5
// offset x=0 y=5
// color "#00000070"
// }
// 可选:图层圆角
// geometry-corner-radius 12
// clip-to-geometry true
// 可选:让图层在 overview 中浮动
// baba-is-float true
// 可选:启动时匹配
// match at-startup=true
}

// 将 swaybg 壁纸放入 overview 背景层
layer-rule {
match namespace="^wallpaper$"
place-within-backdrop true

// 可选:图层透明度
// opacity 1.0
// 可选:截图时排除该图层
// block-out-from "screenshot"
}

// 可选:更多图层规则示例
// layer-rule {
// match namespace="^notifications$"
// opacity 0.95
// geometry-corner-radius 12
// clip-to-geometry true
// }

// ============================================================
// 调试设置
// ============================================================
debug {
// 允许带有无效 serial 的 xdg-activation
honor-xdg-activation-with-invalid-serial

// 可选:其他调试开关,按版本支持情况使用
// disable-cursor-plane
// disable-direct-scanout
}

// ============================================================
// 手势设置
// ============================================================
gestures {
// 禁用鼠标左上角热区
hot-corners {
off

// 可选:启用热区时可删除 off,并按需配置
// off
}
}

// ============================================================
// 动画设置
// ============================================================
animations {
// 取消注释可关闭所有动画
// 也可以在单个动画中写入 "off" 来禁用该动画
// off

// 将所有动画按此倍数放慢;小于 1 的值会加速
// slowdown 3.0

// 单个动画配置

// workspace 切换动画
workspace-switch {
spring damping-ratio=1.0 stiffness=1000 epsilon=0.0001

// 可选:关闭该动画
// off
// 可选:改用时长和曲线
// duration-ms 200
// curve "ease-out-quad"
}

// 窗口打开动画
window-open {
duration-ms 150
curve "ease-out-expo"

// 可选:关闭该动画
// off
// 可选:改用弹簧参数
// spring damping-ratio=1.0 stiffness=800 epsilon=0.0001
}

// 窗口关闭动画
window-close {
duration-ms 150
curve "ease-out-quad"

// 可选:关闭该动画
// off
// 可选:改用弹簧参数
// spring damping-ratio=1.0 stiffness=800 epsilon=0.0001
}

// 水平视图移动动画
horizontal-view-movement {
spring damping-ratio=1.0 stiffness=800 epsilon=0.0001

// 可选:关闭该动画
// off
// 可选:改用时长和曲线
// duration-ms 200
// curve "ease-out-quad"
}

// 窗口移动动画
window-movement {
spring damping-ratio=1.0 stiffness=800 epsilon=0.0001

// 可选:关闭该动画
// off
}

// 窗口尺寸变化动画
window-resize {
spring damping-ratio=1.0 stiffness=800 epsilon=0.0001

// 可选:关闭该动画
// off
}

// 配置通知打开/关闭动画
config-notification-open-close {
spring damping-ratio=0.6 stiffness=1000 epsilon=0.001

// 可选:关闭该动画
// off
}

// 退出确认对话框打开/关闭动画
exit-confirmation-open-close {
spring damping-ratio=0.6 stiffness=500 epsilon=0.01

// 可选:关闭该动画
// off
}

// 截图 UI 打开动画
screenshot-ui-open {
duration-ms 200
curve "ease-out-quad"

// 可选:关闭该动画
// off
// 可选:改用弹簧参数
// spring damping-ratio=1.0 stiffness=800 epsilon=0.0001
}

// overview 概览打开/关闭动画
overview-open-close {
spring damping-ratio=1.0 stiffness=800 epsilon=0.0001

// 可选:关闭该动画
// off
// 可选:改用时长和曲线
// duration-ms 250
// curve "ease-out-expo"
}
}

我的常用热键与参考文档内的一致:

热键 功能
Mod + Shift + /(?) 显示热键菜单
Mod + A 打开 Vicinae (App 启动器)
Mod + D 打开 Dolphin(文件管理器)
Mod + X 打开 google-chrome-stable
Mod + Enter 打开 Konsole (终端)
Mod + R 在预设的列宽中切换
Mod + Shift + R 在预设的列高中切换
Mod + F 将当前列的宽度扩展到最大
Mod + L 用 Hyprlock 锁屏
Mod + 左右箭头 切换窗口左右焦点
Mod + Shift + 左右箭头 将当前列和左右列互换位置
Mod + Alt + 左右箭头 将该窗口吸收进左右列中或从当前列释放出去
Mod + PgUp / PgDn 上下切换工作区
Mod + Ctrl + PgUp / PgDn 将当前列移动到上下工作区
Mod + Tab 进入 Overview (缩小整个屏幕以显示工作区概览)
PrtSc 截屏并复制到剪贴板以及保存到 ~
Ctrl + PrtSc 截全屏,操作同上
三指滑动触摸板 切换窗口以及工作区
四指滑动触摸板 操作同 Mod + Tab

hyprlock配置

懒得自己写了,抄大佬的:

1
2
3
4
~/.config/hypr
├── hyprlock.conf
└── mocha
└── mocha.conf复制

请创建如上所示的目录结构,即运行

1
2
3
4
mkdir ~/.config/hypr
mkdir ~/.config/hypr/mocha
touch ~/.config/hypr/hyprlock.conf
touch ~/.config/hypr/mocha/mocha.conf

请编辑~/.config/hypr/hyprlock.conf,填入以下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
source = $HOME/.config/hypr/mocha/mocha.conf

$accent = $mauve
$accentAlpha = $mauveAlpha
$font = JetBrains Mono

# GENERAL
general {
hide_cursor = true
}

# BACKGROUND
background {
monitor =
path = /path/to/your/lock/screen/wallpaper.png
blur_passes = 2
color = $base
}

# LAYOUT
label {
monitor =
text = 键盘布局: $LAYOUT
color = $text
font_size = 25
font_family = $font
position = 30, -30
halign = left
valign = top
}

# TIME
label {
monitor =
text = $TIME
color = $text
font_size = 90
font_family = $font
position = -30, 0
halign = right
valign = top
}

# DATE
label {
monitor =
text = cmd[update:43200000] date +"%Y年 %m月 %d日, %A"
color = $text
font_size = 25
font_family = $font
position = -30, -150
halign = right
valign = top
}

# FINGERPRINT
{
monitor = "";
text = "$FPRINTPROMPT";
color = "$text";
font_size = 14;
font_family = $font;
position = "0, -107";
halign = "center";
valign = "center";
}

# USER AVATAR
image {
monitor =
path = $HOME/.face
# size = 100
size = 200
border_color = $accent
position = 0, 90
# position = 0, 75
halign = center
valign = center
}

# INPUT FIELD
input-field {
monitor =
size = 300, 60
outline_thickness = 4
dots_size = 0.2
dots_spacing = 0.2
dots_center = true
outer_color = $accent
inner_color = $surface0
font_color = $text
fade_on_empty = false
# placeholder_text = <span foreground="##$textAlpha"><i>󰌾 Logged in as </i><span foreground="##$accentAlpha">$USER</span></span>
placeholder_text = <span foreground="##$textAlpha">󰌾 <span foreground="##$accentAlpha">$USER</span> 已登录 </span>
hide_input = false
check_color = $accent
fail_color = $red
fail_text = <i> 已失败 <b>($ATTEMPTS)</b> 次 </i>
capslock_color = $yellow
# position = 0, -47
position = 0, -80
halign = center
valign = center
复制
请在

# BACKGROUND
background {
monitor =
path = /path/to/your/lock/screen/wallpaper.png
blur_passes = 0
color = $base
}

编辑~/.config/hypr/mocha/mocha.conf,填入以下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
$rosewater = rgb(f5e0dc)
$rosewaterAlpha = f5e0dc

$flamingo = rgb(f2cdcd)
$flamingoAlpha = f2cdcd

$pink = rgb(f5c2e7)
$pinkAlpha = f5c2e7

$mauve = rgb(cba6f7)
$mauveAlpha = cba6f7

$red = rgb(f38ba8)
$redAlpha = f38ba8

$maroon = rgb(eba0ac)
$maroonAlpha = eba0ac

$peach = rgb(fab387)
$peachAlpha = fab387

$yellow = rgb(f9e2af)
$yellowAlpha = f9e2af

$green = rgb(a6e3a1)
$greenAlpha = a6e3a1

$teal = rgb(94e2d5)
$tealAlpha = 94e2d5

$sky = rgb(89dceb)
$skyAlpha = 89dceb

$sapphire = rgb(74c7ec)
$sapphireAlpha = 74c7ec

$blue = rgb(89b4fa)
$blueAlpha = 89b4fa

$lavender = rgb(b4befe)
$lavenderAlpha = b4befe

$text = rgb(cdd6f4)
#$text = rgb(6c8cf5)
#$textAlpha = 6c8cf5
$textAlpha = cdd6f4

$subtext1 = rgb(bac2de)
$subtext1Alpha = bac2de

$subtext0 = rgb(a6adc8)
$subtext0Alpha = a6adc8

$overlay2 = rgb(9399b2)
$overlay2Alpha = 9399b2

$overlay1 = rgb(7f849c)
$overlay1Alpha = 7f849c

$overlay0 = rgb(6c7086)
$overlay0Alpha = 6c7086

$surface2 = rgb(585b70)
$surface2Alpha = 585b70

$surface1 = rgb(45475a)
$surface1Alpha = 45475a

$surface0 = rgb(313244)
$surface0Alpha = 313244

$base = rgb(1e1e2e)
$baseAlpha = 1e1e2e

$mantle = rgb(181825)
$mantleAlpha = 181825

$crust = rgb(11111b)
$crustAlpha = 11111b

左右上角的文字颜色定义在

1
2
3
4
$text = rgb(cdd6f4)
#$text = rgb(6c8cf5)
#$textAlpha = 6c8cf5
$textAlpha = cdd6f4

若觉得和壁纸不搭,可以直接替换成喜欢的 RGB 色值。

壁纸和头像配置

虽然大佬的文章中用的配置文件配置,个人更喜欢在notilia的设置里设置

壁纸设置位置在设置/壁纸/常规,头像设置直接在面板直接点头像就行了

壁纸下载链接:极简壁纸

Alacritty配置

也直接抄大佬的了:

1
2
git clone https://github.com/catppuccin/alacritty.git ~/.config/alacritty/catppuccin
touch ~/.config/alacritty/alacritty.toml

在~/.config/alacritty/alacritty.toml中填入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
[env]
TERM = "xterm-256color"

[general]
live_config_reload = true
import = ["~/.config/alacritty/catppuccin/catppuccin-mocha.toml"]

[window]
decorations = "buttonless"
dynamic_padding = false
opacity = 1.0

[window.padding]
x = 25
y = 20

[font]
size = 12.0

[font.bold]
family = "JetBrains Mono"
style = "Heavy"

[font.bold_italic]
family = "JetBrains Mono"
style = "Heavy Italic"

[font.italic]
family = "JetBrains Mono"
style = "Medium Italic"

[font.normal]
family = "JetBrains Mono"
style = "Medium"

zsh命令行配置

下载zsh:

1
sudo pacman -S zsh zsh-completions

将其设置为默认命令行:

1
chsh -s /usr/bin/zsh

此命令执行后一般需要注销并重新登录才会生效

下载两个很好用的插件和一个很好看的主题powerlevel10k:

1
2
sudo pacman -S zsh-syntax-highlighting zsh-autosuggestions
yay -S --noconfirm zsh-theme-powerlevel10k-git

配置~/.zshrc使其生效:

1
2
ZSH_THEME="powerlevel10k/powerlevel10k"
plugins=(git zsh-autosuggestions zsh-syntax-highlighting)

注:都是在文件原本的配置上修改而不是直接在文件最后追加

sddm自动登录配置

sddm的登录界面太丑了,直接ban掉,反正登录界面也是防君子不防小人

创建并编辑/etc/sddm.conf.d/autologin.conf:

1
2
3
[Autologin]
User=#your_username
Session=niri

状态栏配置与酷炫的状态栏歌词显示(可选)

安装运行时依赖:

1
sudo pacman -S playerctl python

安装并启用插件:

1
noctalia msg plugins enable h465855hgg/lyrics

配置状态栏:设置/状态栏里自己改,这是我的配置

自定义的配置

你可以在noctalia的设置里设置一系列桌面的个性话设置,例如左上角热键

疑难杂症

qq使用不了输入法

创建~/.config/qq-flags.conf并填入:

1
2
3
--ozone-platform=wayland
--enable-wayland-ime
--wayland-text-input-version=3

dolphin无法发起鉴权窗口

这是hyprpolkitagent的问题,我已经提了issue,不知道什么时候能解决

出现这个问题的原因是他的鉴权窗口不适配niri的缩放比,你将缩放比改为1就能使用了,或者用命令行替代gui操作

最后的最后

1
2
sudo pacman -S fastfetch hyfetch
hyfetch

enjoy your new desktop