初步配置 Archlinux

初步配置 Arch Linux

今天的目标有:

  1. 配置网络,使用 NetworkManager + bluz
  2. 配置图形环境 Hyprland
  3. 配置中文环境,安装中文字体及输入法
  4. 一些小装修,包括字体, Hyprland、neovim、zsh 的装修以及 kmscon 等

配置网络

首先先设置基本网络服务的开机自启

1
sudo systemctl enable --now dhcpcd NetworkManager bluetooth

然后连接到 Wi-Fi(如有有线网络连接这一步可以忽略)

1
nmcli device wifi connect <SSID> password <password>

设置主机名

1
hostnamectl hostname <hostname>

配置图形环境

安装 Hyprland 及其它必要的包

包 功能
paru AUR 管理器
hyprland 窗口管理器
greetd 登录管理器
kitty 终端模拟器
waybar 状态栏
pipewire pipewire-jack pipewire-pulse pipewire-alsa wireplumber pavucontrol 声音相关服务
nerd-fonts 图标字体
noto-fonts Google 开源字体
ttf-jetbrains-mono 等宽字体
ttf-liberation Liberation 兼容字体
ttf-dejavu DejaVu 基础字体
libnotify 通知库
mako 通知守护程序
thunar tumbler ffmpegthumbnailer poppler-glib gvfs-smb file-roller thunar-archive-plugin thunar-media-tags-plugin thunar-shares-plugin 文件管理及其依赖和插件
mpv 音视频播放器
wl-clipboard cliphist 剪切板
network-manager-applet networkmanager 的图形前端
brightnessctl 亮度调节工具
power-profiles-daemon 性能模式切换工具
fuzzel 程序启动器
hypridle 空闲管理
hyprlock 锁屏程序
hyprlogin 登录程序
hyprpolkitagent 权限认证代理
hyprpaper 壁纸管理器
xdg-utils 默认应用关联管理工具
xdg-dbus-proxy D-Bus 总线安全代理
xdg-user-dirs 标准用户家目录生成器
xdg-terminal-exec 统一终端模拟器调用规范
xdg-desktop-portal 跨桌面门户接口
xdg-desktop-portal-hyprland Hyprland 门户后端
xdg-desktop-portal-gtk GTK 通用门户后端
qt5-wayland qt6-wayland qt 的 wayland 兼容库
1
sudo pacman -S hyprland greetd kitty nerd-fonts noto-fonts ttf-jetbrains-mono ttf-liberation ttf-dejavu waybar pipewire pipewire-jack pipewire-pulse pipewire-alsa wireplnumber pavucontrol libnotify mako thunar tumbler ffmpegthumbnailer poppler-glib gvfs-smb file-roller thunar-archive-plugin thunar-media-tags-plugin thunar-shares-plugin mpv wl-clipboard cliphist network-manager-applet brightnessctl power-profiles-daemon fuzzel hypridle hyprlock hyprlogin hyprpolkitagent hyprpaper xdg-utils xdg-dbus-proxy xdg-user-dirs xdg-terminal-exec xdg-desktop-portal xdg-desktop-portal-hyprland xdg-desktop-portal-gtk qt5-wayland qt6-wayland

启用服务

1
2
systemctl --user enable --now hyprpaper hypridle hyprpolkitagent 
sudo systemctl enable --now greetd power-profiles-daemon

配置 greetd 及 hyprlogin

1
2
sudo cp /usr/share/hyprlogin/greetd-config.toml /etc/greetd/config.toml
sudo cp /usr/share/hyprlogin/hyprland-greeter.lua /etc/hyprlogin/hyprland-greeter.lua

创建标准家目录

1
xdg-user-dirs-update

编辑 hyprland 配置文件

1
nvim ~/.config/hypr/hyprland.lua

根据提示将 hl.config({ autogenerated = true }) 这行删除或者注释掉,然后向下找到 ‘MY PROGRAMS’ 部分,将默认的 fileManager 改为 thunar,将默认的 menu 改为 fuzzel

然后在 ‘AUTOSTART’ 部分根据提示给 nm-applet,blueman-applet,mako,hyprpaper,hypridle,waybar,wl-paste --type text --watch cliphist store,wl-paste --type image --watch cliphist store 设置开机自启

1
2
3
4
5
6
7
8
9
10
hl.on("hyprland.start", function()
hl.exec_cmd("nm-applet")
hl.exec_cmd("blueman-applet")
hl.exec_cmd("mako")
hl.exec_cmd("hyprpaper")
hl.exec_cmd("hypridle")
hl.exec_cmd("waybar")
hl.exec_cmd("wl-paste --type text --watch cliphist store")
hl.exec_cmd("wl-paste --type image --watch cliphist store")
end)

接着可以修改一些快捷键,这里仅供参考

1
2
3
4
5
6
hl.bind(mainMod .. " + T", hl.dsp.exec_cmd(terminal)) -- 打开终端
hl.bind(mainMod .. " + E", hl.dsp.exec_cmd(fileManager)) -- 打开文件管理
hl.bind(mainMod .. " + R", hl.dsp.exec_cmd(menu)) -- 打开启动器
hl.bind(mainMod .. " + B", hl.dsp.exec_cmd("google-chrome-stable")) -- 打开浏览器
hl.bind(mainMod .. " + O", hl.dsp.windows.fullscreen({ mode = 1 })) -- 设置全屏
hl.bind(mainMod .. " + Q", hl.dsp.windows.close()) -- 关闭窗口

现在可以通过 start-hyprland 指令进入图形界面,或重启电脑后通过 greetd 进入 hyprlogin 登录界面

1
start-hyprland

配置中文环境

首先安装一些中文字体

1
sudo pacman -S adobe-source-han-serif-cn-fonts adobe-source-han-sans-cn-fonts noto-fonts-cjk wqy-zenhei wqy-microhei

然后安装输入法

1
2
sudo pacman -S fcitx5 fcitx5-configtool fcitx5-chinese-addons fcitx5-pinyin-zhwiki fcitx5-gtk fcitx5-qt
paru -S fcitx5-skin-adwaita-dark

配置环境变量

1
2
echo 'LANG=zh_CN.UTF-8' >> ~/.config/locale.conf
sudo nvim /etc/environment
1
2
3
4
5
GTK_IM_MODULE=fcitx
QT_IM_MODULE=fcitx
XMODIFIERS=@im=fcitx
SDL_IM_MODULE=fcitx
GLFW_IM_MODULE=fcitx

然后编辑 ~/.config/hypr/hyprland.lua 让 fcitx5 -d --replace 开机自动运行

运行 fcitx5 -d 然后用 fcitx5-configtool 配置 pinyin 输入法及外观快捷键等

1
fcitx5 -d && fcitx5-configtool

重启之后环境变量生效就可以正常输入中文了

一些小装修

配置 kmscon

Arch Linux 中默认的 tty1~6 都是 agetty,不支持矢量字体、硬件加速和中文等,这里可以更换为 kmscon

安装 kmscon

1
sudo pacman -S kmscon

给 kmscon 配置合适的字体,这里以英文 JetBrains Mono 和中文 Noto Sans Mono CJK SC 演示

1
sudo nvim /etc/kmscon/kmscon.conf

找到 font-engine,从 freetype 改为 pango,然后找到 font-size 改为合适的值,我这里是 36,再找到 font-name,设置为想要的字体,然后保存并退出

1
2
3
font-engine=pango
font-size=36
font-name=JetBrains Mono, Noto Sans Mono CJK SC

保险起见,这里保留 tty1 为 agetty, tty2~6 替换为 kmscon

1
2
sudo systemctl disable --now getty@tty2 getty@tty3 getty@tty4 getty@tty5 getty@tty6
sudo systemctl enable --now kmsconvt@tty2 kmsconvt@tty3 kmsconvt@tty4 kmsconvt@tty5 kmsconvt@tty6z

配置 kitty 的字体

编辑 ~/.config/kitty/kitty.conf 然后保存并退出

1
nvim ~/.config/kitty/kitty.conf
1
2
3
4
5
6
font_family JetBrains Mono
bold_font auto
italic_font auto
bold_italic_font auto

font_size 10.0

配置软件字体

首先设置全局

1
sudo nvim /etc/fonts/local.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>

<alias>
<family>sans-serif</family>
<prefer>
<family>Noto Sans CJK SC</family>
<family>Noto Sans</family>
<family>Noto Color Emoji</family>
</prefer>
</alias>

<alias>
<family>monospace</family>
<prefer>
<family>JetBrains Mono</family>
<family>Noto Sans Mono CJK SC</family>
<family>Noto Color Emoji</family>
</prefer>
</alias>

</fontconfig>

保存后刷新

1
fc-cache -fv

再设置 GTK

使用 ngw-look 将字体选择为 Noto Sans CJK SC Regular 9

最后设置 QT

使用 qt6ct 将一般字体选择为 Noto Sans CJK SC Regular 9;再将固定宽度字体选择为 JetBrains Mono Regular 9

配置 zsh

安装 zsh 及其插件和主题

1
2
3
4
sudo pacman -S zsh zsh-completions zsh-autosuggestions zsh-syntax-highlighting zsh-theme-powerlevel10k-git ttf-meslo-nerd powerline-fonts awesome-terminal-fonts
paru -S zsh-sudo
echo 'source /usr/share/zsh-theme-powerlevel10k/powerlevel10k.zsh-theme' >> ~/.zshrc
zsh

进入配置页面之后根据引导进行配置,如果没有进入的话,执行以下指令

1
p10k configure

配置完毕后启用插件

1
nvim ~/.zshrc

在 .zshrc 中添加

1
2
3
4
source /usr/share/zsh/plugins/zsh-sudo/sudo.plugin.zsh
source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh
source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
autoload -Uz compinit && compinit

设置 “暗色模式”

首先设置 GTK

安装暗色主题

1
sudo pacman -S gnome-themes-extra ngw-look

设置暗色主题

1
2
gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark'
gsettings set org.gnome.desktop.interface gtk-theme 'Adwaita-dark'

以上指令可以添加到 ~/.config/hypr/hyprland.lua 的开机自动运行里

然后使用 ngw-look 来设置外观,导出配置文件

然后设置 QT

安装 qt6ct 和 kvantummanager

1
sudo pacman -S qt6ct kvantum

在 ~/.config/hypr/hyprland.lua 中设置环境变量,找到 ‘ENVIRONMENT VARIABLES’ 部分,添加 hl.env("QT_QPA_PLATFORMTHEME", "qt6ct") 和 hl.env("QT_QPA_PLATFORM", "wayland")

使用 kvantummanager 设置主题,这里设为 KvGnomeDark 保存

接着打开 qt6ct 设置风格为 kvantum-dark,颜色方案为 darker

最后关心一下特立独行的 fuzzel

1
2
mkdir ~/.config/fuzzel
nvim ~/.config/fuzzel/fuzzel.conf
1
2
3
4
5
6
7
8
[colors]
background=282a36ee
text=f8f8f2ff
match=8be9fdff
selection-match=8be9fdff
selection=44475add
selection-text=f8f8f2ff
border=8be9fdff

配置锁屏

将 github 上的默认配置文件 下载到 ~/.config/hypr/hyprlock.conf

然后编辑 ~/.config/hypr/hyprland.lua 设置快捷键

1
nvim ~/.config/hypr/hyprland.lua
1
hl.bind(mainMod .. " + L" , hl.dsp.exec_cmd("hyprlock"))
1
hyprctl reload

然后就可以使用 SUPER+L 键锁屏了

接下来配置自动锁屏

hypridle 的默认配置文件在 github 这里简单做一个参考

1
nvim ~/.config/hypr/hypridle.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
general {
lock_cmd = pidof hyprlock || hyprlock # 防止启动多个锁屏进程
before_sleep_cmd = loginctl lock-session # 在系统休眠前锁屏
after_sleep_cmd = hyprctl dispatch 'hl.dsp.dpms({action = "on"})' # 唤醒后自动点亮屏幕
}

listener {
timeout = 300 # 5min.
on-timeout = brightnessctl -s set 10 # 调低背光亮度
on-resume = brightnessctl -r # 恢复屏幕亮度
}

listener {
timeout = 300 # 5min.
on-timeout = brightnessctl -sd rgb:kbd_backlight set 0 # 关闭键盘背光
on-resume = brightnessctl -rd rgb:kbd_backlight # 打开键盘背光
}

listener {
timeout = 600 # 10min.
on-timeout = loginctl lock-session # 锁屏
}

listener {
timeout = 900 # 15min.
on-timeout = hyprctl dispatch 'hl.dsp.dpms({action = "off"})' # 关闭屏幕
on-resume = hyprctl dispatch 'hl.dsp.dpms({action = "on"})' # 点亮屏幕
}

listener {
timeout = 1800 # 30min.
on-timeout = systemctl suspend # 休眠
}

配置 mako

编辑配置文件

1
2
mkdir ~/.config/mako
nvim ~/.config/mako/config
1
2
3
4
5
font=Noto Sans CJK SC
background-color=#1e1e2eee
text-color=#ffffff
border-radius=10
default-timeout=10000

重新启动 mako

1
killall mako && mako & disown

使用 notify-send 指令测试效果

1
notify-send hello

配置剪切板

编辑 ~/.config/hypr/hyprland.lua

1
nvim ~/.config/hypr/hyprland.lua
1
hl.bind(mainMod .. " + V", hl.dsp.exec_cmd("cliphist list | fuzzel --dmenu | cliphist decode | wl-copy"))

保存并退出,然后重载 hyprland

1
hyprctl reload

之后就可以用 SUPER+V 唤起历史剪切板