前言

其实一直打算使用平铺式窗口管理器,但是 KDE 已经配置好了,所以也就没有太想继续折腾的动力,直到昨天 KDE 出问题了。此时我发现了 Hyprland 这样的一个看起来非常美观的 Wayland 混成器,于是我决定使用 Hyprland 来替换 KDE。

你可以在 Dotfiles 仓库 中找到我正在使用的完整的配置和在本文章中出现的配置。在这里我将会使用如下的搭配,并给出大致的配置。

类型软件
Wayland 混成器Hyprland
状态栏Waybar
通知 Daemonmako
应用启动器tofi

Hyprland

安装 Hyprland

在 Arch Linux 和 AUR 仓库中有四个版本,分别是:

其中带 nvidia 的版本包含了对 Nvidia 显卡闪烁问题的 patch,git 版本则是由 GitHub 上最新的源代码进行构建的版本。由于我是 Nvidia 用户,因此在这里选择安装 hyprland-nvidia-git

$ yay -S hyprland-nvidia-git

Hyprland 配置文件位置为:~/.config/hypr/hyprland.conf。如果这个文件不存在的话,创建这个文件并将样例配置文件的内容复制到这个文件当中。在这之后重启

注意
如果你是 Nvidia 显卡用户,先别急着启动 Hyprland!Nvidia 显卡用户需要启用 Direct Rendering Manager 内核模式。参见 Hyprland Wiki

配置 Hyprland

显示器

显示器设置主要关于显示器的分辨率、位置与缩放比例

显示器设置的格式如下:

monitor = monitor_name, resolution, position, scale

你可以通过指令 hyprctl monitors 来列出所有可用的显示器。

在这里,我的配置如下:

monitor=,1920x1080@60,auto,1

输入

这一部分主要与键盘、鼠标和触摸板的配置有关。通常来讲默认配置也能够正常使用。

input {
    kb_layout = us              # 键盘布局
    follow_mouse = 1            # 窗口焦点是否随光标移动
    touchpad {
        natural_scroll = no     # 触摸板自然滚动
    }
    sensitivity = 0             # 鼠标灵敏度
    accel_profile = flat        # 鼠标加速的配置方案, flat 为禁用鼠标加速
}

由于我并不习惯鼠标加速,因此在这里将 accel_profile 设置为了 flat,禁用了鼠标加速。

总体设置

这一部分主要与窗口的布局窗口边框的设置有关。

general {
    gaps_in = 6         # 窗口之间的间隙大小
    gaps_out = 12       # 窗口与显示器边缘的间隙大小
    border_size = 2     # 窗口边框的宽度
    col.active_border = rgba(cceeffbb)      # 活动窗口的边框颜色 
    col.inactive_border = rgba(595959aa)    # 非活动窗口的边框颜色

    layout = dwindle    # 窗口布局
}

窗口装饰

这一部分主要和窗口的圆角、毛玻璃、投影等效果有关。

decoration {
    rounding = 12       # 圆角大小
    blur = yes          # 模糊效果是否启用
    blur_size = 5       # 模糊半径
    blur_passes = 1     # 模糊过滤次数
    blur_new_optimizations = on     # 模糊优化,通常保持打开

    drop_shadow = yes   # 窗口投影是否启用
    shadow_range = 4    # 投影大小
    shadow_render_power = 3     # 投影强度,不过我不太明白这是什么意思
    col.shadow = rgba(1a1a1aee)     # 投影颜色
}

动画

这一部分主要和窗口的过渡动画有关。

animations {
    enabled = yes   # 是否启用动画

    bezier = myBezier, 0.05, 0.9, 0.1, 1.05     # 自定义的贝塞尔曲线

    animation = windowsMove, 1, 7, myBezier             # 窗口移动动画
    animation = windowsIn, 1, 3, default, popin 90%     # 窗口打开动画
    animation = windowsOut, 1, 3, default, popin 90%    # 窗口关闭动画
    animation = border, 1, 2, default       # 边框颜色动画
    animation = fade, 1, 3, default         # 窗口各种 Fade 效果(打开、关闭、阴影、活动与非活动窗口切换)的动画
    animation = workspaces, 1, 3, default   # 工作区切换动画
}

动画的格式如下:

animation = action, on_off, speed, curve, style
animation = action, on_off, speed, curve
  • action: 动画名称,这些动作可以在动画树中找到。
  • on_off: 是否启用动画。
  • speed: 动画持续的时间,以分秒(100 毫秒)计数。
  • curve: 动画使用的贝塞尔曲线名称。
  • style: 动画的风格(例如可以对窗口使用 fadepopin 两种风格),这个选项是可选的。

按键绑定

这里是一部分的按键绑定。

$mainMod = SUPER

bind = $mainMod, C, killactive,             # 关闭活动窗口
bind = $mainMod, T, exec, alacritty         # 打开终端模拟器 Alacritty
bind = $mainMod, M, exit,                   # 退出 Hyprland
bind = $mainMod, E, exec, nautilus          # 打开文件管理器 Nautilus
bind = $mainMod, V, togglefloating,         # 切换窗口浮动
bind = $mainMod, R, exec, tofi-drun | xargs hyprctl dispatch exec --    # 打开 tofi 应用启动器
bind = $mainMod, P, pseudo, # dwindle       # 切换伪 tiling 模式,伪 tiling 模式的窗口保持它们浮动时的大小
bind = $mainMod, J, togglesplit, # dwindle  # 切换窗口分割方向

...

$mainMod 键在此设置为了 SUPER,即 Super 键。通常取消 Windows 键即为 Super 键。

还有一部分关于工作区和窗口移动的按键绑定配置,在此不再展示。

Waybar

Waybar 为 Wayland 提供了一个高度可定制的状态栏。

$ yay -S waybar

配置 Waybar

Waybar 拥有两个主要的配置文件,它们分别是:

  • ~/.config/waybar/config: 一个 JSON 文件,配置 Waybar 显示的内容等。
  • ~/.config/waybar/style.css: 一个 CSS 文件,配置 Waybar 的样式

Waybar 的内容配置大体如下:

{
    "layer": "top",     // 显示的层,top 为最顶层
    "position": "top",  // 在屏幕的哪边显示,top 为顶部
    "height": 40,       // 高度
    "spacing": 6,       // 各 module 之间的距离
    // 左边的 modules
    "modules-left": ["wlr/workspaces", "hyprland/window"],
    // 正中间的 modules
    "modules-center": [],
    // 最右边的 modules
    "modules-right": ["tray", "network", "pulseaudio", "memory", "cpu", "clock"],
    // module 各自的配置等
    "wlr/workspaces": {
        // ...
    }
    // ...
}

module 各自的配置详见 Waybar GitHub Wiki

Waybar 的样式配置是通过一个 CSS 文件来实现的。关于 Waybar 样式的配置详见 Styling - Waybar GitHub Wiki

设置 Waybar 自启动

向 Hyprland 的配置文件中加入这一行:

exec-once = waybar

重启 Hyprland 即可看到 Waybar。如果等不及重启,也可以直接执行 waybar 来启动 Waybar。

mako

mako 是一个为 Wayland 打造的轻量级的通知 Daemon。尽管 mako 非常轻量级,但却依然有许多可以配置的地方。

配置 mako

mako 的配置文件位于 ~/.config/mako/config,内容大致如下:

sort=-time                  ; 排序方式
layer=overlay               ; 显示层级
background-color=#2e34407f  ; 背景颜色
width=420                   ; 通知宽度
height=120                  ; 通知高度
border-size=3               ; 边框宽度
border-color=#99c0d0        ; 边框颜色
border-radius=12            ; 圆角半径
icons=0                     ; 是否启用图标
max-icon-size=64            ; 图标大小
default-timeout=5000        ; 超时时间
ignore-timeout=0            ; 忽略超时时间
font="Noto Sans CJK SC" 14  ; 字体
margin=12                   ; 通知的外边距
padding=12,20               ; 通知的内边距

[urgency=low]               ; 低紧急度
border-color=#cccccc

[urgency=normal]            ; 正常紧急度
border-color=#99c0d0

[urgency=critical]          ; 高紧急度
border-color=#bf616a
default-timeout=0
注意

以上的配置仅仅作为展示使用,不是一个有效的配置文件,因为其包含了注释。

你可以根据以上的内容对默认的配置文件进行修改,或从 Dotfiles 仓库 获取我的配置文件。

在修改配置文件之后,用 makoctl 来重载配置文件:

$ makoctl reload

发送通知

你可以通过 notify-send 指令来发送一个通知,以此观察修改配置文件之后的效果。

$ notify-send 'Hello world!' 'This is an example notification.' -u normal

mako 配置完成后的效果
mako 配置完成后的效果

tofi

tofi 是一个简单但快速的应用启动器。和 mako 一样,尽管十分简单,但同样也有许多可以配置的地方。

配置 tofi

tofi 的配置文件位于 ~/.config/tofi/config,由于其配置文件较长,因此在这里给出部分主要的配置:

# 字体
font = "Fira Code"
font-size = 18

# 文字颜色
text-color = #FFFFFF

# 提示符样式
prompt-background = #00000000
prompt-background-padding = 0
prompt-background-corner-radius = 0

# 占位符样式
placeholder-color = #FFFFFFA8
placeholder-background = #00000000
placeholder-background-padding = 0
placeholder-background-corner-radius = 0

# 输入样式
input-background = #00000000
input-background-padding = 0
input-background-corner-radius = 0

# 默认结果样式
default-result-background = #00000000
default-result-background-padding = 4, 10
default-result-background-corner-radius = 0

# 已选择结果样式
selection-color = #000000
selection-background = #CCEEFF
selection-background-padding = 4, 10
selection-background-corner-radius = 8
selection-match-color = #00000000

text-cursor-style = bar         # 光标样式
prompt-text = "run: "           # 提示符 
placeholder-text = "..."        # 占位符
result-spacing = 8              # 结果之间的空隙

width = 1290                    # 宽度
height = 480                    # 高度
background-color = #1B1D1EBF    # 背景颜色
outline-width = 0               # 边框框线宽度,边框框线可以理解为边框外的边框
outline-color = #080800         # 边框框线颜色
border-width = 3                # 边框颜色
border-color = #cceeff          # 边框颜色
corner-radius = 24              # 圆角半径

scale = true                    # 是否随显示器比例设置而缩放
anchor = center                 # 启动器位置,center 为中心
注意

以上的配置仅仅作为展示使用,不是一个有效的配置文件,因为其并非一个完整的配置文件。

你可以根据以上的内容对默认的配置文件进行修改,或从 Dotfiles 仓库 获取我的配置文件。

在保存好配置之后,可以用 tofi-runtofi-drun 来启动 tofi。

配置 tofi 按键绑定

tofi-runtofi-drun 都可以启动 tofi。

tofi 在选择要启动的应用后并不会启动应用,而是输出用于启动这个应用命令,因此按键绑定配置会有所不同。向 Hyprland 的配置文件中加入下面的内容:

bind = $mainMod, R, exec, tofi-drun | xargs hyprctl dispatch exec --

在这里设置用 Super + R 来打开 toif。在选择了要启动的应用之后,将执行 xargs hyperctl dispatch exec --,这将会从 stdin 中读取要执行的启动命令。我们通过管道将前者的输出作为了后者的输入,从而实现了启动应用。

tofi 配置完成后的效果
tofi 配置完成后的效果

Qt / GTK 应用主题配置

之前用的是 KDE,所以可以很方便地设置 Qt / GTK 应用的主题,在切换到 Hyprland 之后相关的主题设置依然保留。但在 KDE 环境之外想要修改 Qt / GTK 应用的主题还是会有些麻烦。

在这里我将会使用 Adwaita 来作为 Qt / GTK 应用的主题。

$ yay -S adwaita-qt5 adwaita-qt6

Qt

这里我们将会使用 qt5ct 来进行主题的配置,首先安装 qt5ct

$ yay -S qt5ct

然后在 Hyprland 的配置文件中加入环境变量:

env = QT_QPA_PLATFORMTHEME,qt5ct

之后即可通过 qt5ct 来配置 Qt5 的主题。

GTK

Arch Wiki 上首先给出的方案是修改配置文件,然后才是使用 gsettings 指令。但实际测试发现还是 gsettings 有用,这里贴出 Arch Wiki 上给出的命令:

$ gsettings set org.gnome.desktop.interface gtk-theme Adwaita
$ gsettings set org.gnome.desktop.interface color-scheme prefer-dark

结语

于是经过这么多的操作之后,Hyprland 的环境差不多就配置好了,之后大概是可以比较舒适地使用了吧。谁叫你天天折腾桌面环境啊!

虽然配置还是花了不少时间,不过得到的效果也蛮不错的。不出意外的话,之后大概会一直用这个环境吧。

虽然还有例如 Alacritty 和截图工具的配置还没有提到,不过那就不是这篇文章的范畴了。