首先声明,并不是所有功能都是通过快捷键打开的,就是比如说:
Kool_Quick_Settings.sh这个就是先通过yad或者rofi这些工具图形化功能栏目,然后就可以通过命令打开文件
目录结构#
省流版#
.config/hypr/
.
├── animations
├── application-style.conf
├── configs
├── hypridle.conf
├── hyprland.conf
├── hyprlock-2k.conf
├── hyprlock.conf
├── hyprpaper.conf
├── initial-boot.sh
├── Monitor_Profiles
├── monitors.conf
├── scripts
├── UserConfigs
├── UserScripts
├── v2.3.15
├── wallpaper_effects
├── wallust
└── workspaces.conf大概说明#
最重要文件: hyprland.conf, 这个文件就是一个相当于 hyprland 的根配置文件,窗口管理(WM)的根基配置
animations 是控制窗口、工作区、图层等 UI 元素的动画效果的一个目录的配置文件. (可以通过 SUPER SHIFT A 来选择)
application-style.conf: hyprland-qt-support provides a QML style for hypr qt6 apps
configs 是项目 Default config 目录, 最好不要改动. scripts 同样是
UserConfigs 则不一样,是表示用户级别的配置目录,可以自定义设置. UserScripts 同样
hypridle.conf :
hyprlock.conf 是与锁屏有关的配置文件
hyprpaper.conf 是显示器 wallpaper 设置的配置文件
initial-boot.sh 是 hyprland 启动的时候,如何渲染就是通过这个脚本文件来配置的
monitors.conf 是由 Monitor_Profile 这个与monitor配置有关的目录里的 default.conf 生成的
wallpaper_effects 是 wallpaper 改变之后生成的一个目录,有两个隐藏文件: .wallpaper_current 和 .wallpaper_modified
workspaces.conf 是一个由 Userconfigs 里的 WorkSpaceRules 文件生成的一个文件,是一个工作区如何定义和管理的配置文件
wallust 是颜色定义目录,里面有个文件 (相当于一个常量头文件)
UserConfigs/WindowRules.conf 这个文件就是管理窗口的,定义规则看如何给窗口贴标签,分配 workspace 这些等1
例如:
windowrulev2 = tag +projects, class:^(codium|codium-url-handler|VSCodium)$
windowrulev2 = tag +projects, class:^(VSCode|code-url-handler)$
windowrulev2 = tag +projects, class:^(jetbrains-.+)$
# 这个可以实现在规定workspace启动应用窗口
windowrulev2 = workspace 4, tag:projects详细版目录结构#
.config/hypr
.
├── animations
│ ├── 00-default.conf
│ ├── 01-default - v2.conf
│ ├── 03- Disable Animation.conf
│ ├── END-4.conf
│ ├── HYDE - default.conf
│ ├── HYDE - minimal-1.conf
│ ├── HYDE - minimal-2.conf
│ ├── HYDE - optimized.conf
│ ├── HYDE - Vertical.conf
│ ├── Mahaveer - me-1.conf
│ ├── Mahaveer - me-2.conf
│ ├── ML4W - classic.conf
│ ├── ML4W - dynamic.conf
│ ├── ML4W - fast.conf
│ ├── ML4W - high.conf
│ ├── ML4W - moving.conf
│ └── ML4W - standard.conf
├── application-style.conf
├── configs
│ └── Keybinds.conf
├── hypridle.conf
├── hyprland.conf
├── hyprlock-2k.conf
├── hyprlock.conf
├── hyprpaper.conf
├── initial-boot.sh
├── Monitor_Profiles
│ ├── default.conf
│ └── README
├── monitors.conf
├── scripts
│ ├── AirplaneMode.sh
│ ├── Animations.sh
│ ├── BrightnessKbd.sh
│ ├── Brightness.sh
│ ├── ChangeBlur.sh
│ ├── ChangeLayout.sh
│ ├── ClipManager.sh
│ ├── DarkLight.sh
│ ├── Distro_update.sh
│ ├── GameMode.sh
│ ├── Hypridle.sh
│ ├── KeyBinds.sh
│ ├── KeyHints.sh
│ ├── KillActiveProcess.sh
│ ├── Kitty_themes.sh
│ ├── Kool_Quick_Settings.sh
│ ├── KooLsDotsUpdate.sh
│ ├── LockScreen.sh
│ ├── MediaCtrl.sh
│ ├── MonitorProfiles.sh
│ ├── Polkit-NixOS.sh
│ ├── Polkit.sh
│ ├── PortalHyprland.sh
│ ├── RefreshNoWaybar.sh
│ ├── Refresh.sh
│ ├── RofiEmoji.sh
│ ├── RofiSearch.sh
│ ├── RofiThemeSelector-modified.sh
│ ├── RofiThemeSelector.sh
│ ├── ScreenShot.sh
│ ├── Sounds.sh
│ ├── SwitchKeyboardLayout.sh
│ ├── TouchPad.sh
│ ├── UptimeNixOS.sh
│ ├── Volume.sh
│ ├── WallustSwww.sh
│ ├── WaybarCava.sh
│ ├── WaybarLayout.sh
│ ├── WaybarScripts.sh
│ ├── WaybarStyles.sh
│ └── Wlogout.sh
├── UserConfigs
│ ├── 00-Readme
│ ├── 01-UserDefaults.conf
│ ├── ENVariables.conf
│ ├── LaptopDisplay.conf
│ ├── Laptops.conf
│ ├── Startup_Apps.conf
│ ├── UserAnimations.conf
│ ├── UserDecorations.conf
│ ├── UserKeybinds.conf
│ ├── UserSettings.conf
│ ├── WindowRules.conf
│ ├── WindowRules-new.conf
│ └── WorkSpaceRules
├── UserScripts
│ ├── 00-Readme
│ ├── RainbowBorders.sh
│ ├── RofiBeats.sh
│ ├── RofiCalc.sh
│ ├── WallpaperAutoChange.sh
│ ├── WallpaperEffects.sh
│ ├── WallpaperRandom.sh
│ ├── WallpaperSelect.sh
│ ├── Weather.py
│ ├── Weather.sh
│ └── ZshChangeTheme.sh
├── v2.3.15
├── wallpaper_effects
├── wallust
│ └── wallust-hyprland.conf
└── workspaces.conf配置#
应用自启动配置#
在 hyprland.conf 这个文件里自定义软件的自启动2
examples:
exec-once = [workspace 1 silent] kitty
exec-once = [workspace 1 silent] subl
exec-once = [workspace 3 silent] mailspring
exec-once = [workspace 4 silent] firefoxexec VS exec-once#
You can execute a shell script on:3
- startup of the compositor
- every time the config is reloaded.
- shutdown of the compositor
exec-once = command will execute only on launch support rules
execr-once = command will execute only on launch
exec = command will execute on each reload support rules
execr = command will execute on each reload
exec-shutdown = command will execute only on shutdown
工作区 (Workspace)#
就是如何自定义和管理 workspaces 的,所以都是在 UserConfigs/WorkspaceRules 来设置来管理(不过这个一旦设置就是全部通用),或者通过 workspaces.conf 这个文件来定义4
显示器 (Monitor)#
可以直接通过 nwg-displays 来快速设定 (可以 SUPER SHIFT E 打开功能栏目然后搜索就可以了)
也可以直接自定义 monitors.conf 文件5
可以通过 nwg-display 工具来设定显示器
快捷键 (keybinds)#
rules: bind = MODS, key, dispatcher, params6
examples: bind = SUPER, B, exec, firefox
根据上面目录结构所说的,可以在 UserConfigs/UserKeybinds.conf 里定义,也有 UserScripts/UserKeybinds.sh 里定义脚本,还有一个 UserScripts/UserKeyHints.sh 有常用快捷键提示
这里说到快捷键要说明一下,渲染问题 (有 yad 和 rofi 这两个实现脚本的 GUI)
简单对比:
| 功能 | yad | rofi |
|---|---|---|
| 图形风格 | GTK,传统 GUI 样式 | 极简、dmenu 风格 |
| 多列显示 | ✅ 原生支持 | 🚫 不支持多列(需手动 hack) |
| 自定义交互复杂度 | 高(按钮、表单、进度条等) | 中(菜单交互 + 自定义脚本) |
| 外观主题支持 | GTK 主题 | rofi 主题(通过 config 设置) |
| 使用场景 | 配置工具、提示菜单、设置界面 | 启动器、搜索菜单、快速选择器 |
环境变量 ENV#
在 /etc/environment 加载 fcitx5
下面的注释是 fcitx5 的 wayland 前端好像是会自动加载这些,所以还添加的话,这样每次启动都会有提示消息
#GTK_IM_MODULE=fcitx
#QT_IM_MODULE=fcitx
XMODIFIERS=@im=fcitx
SDL_IM_MODULE=fcitx
GLFW_IM_MODULE=ibus加载 nvidia (还是怕 nvidia 驱动没有加载,所以在系统级别的 evn 中添加)
__NV_PRIME_RENDER_OFFLOAD=1
__GLX_VENDOR_LIBRARY_NAME=nvidiaNvidia#
首先禁用
nouveau这个开源驱动,fedora 和 arch 方法不一样,arch 可以直接在/etc/mkinitcpio.conf里的 HOOK 字段修改 (删除 kms 就行), 然后就mkinitcpio -P
禁用 nouveau 驱动#
在 /etc/modprobe.d 这个目录里编写一个文件:blacklist-nouveau. conf(文件名可以自己自定义)
blacklist nouveau
options nouveau modeset=0然后, 我们要加载这个禁用的文件配置
/etc/default/grub 文件中:
GRUB_CMDLINE_LINUX="rd.driver.blacklist=nouveau modprobe.blacklist=nouveau"然后就要: sudo dracut --force 重新生成 grub 引导文件
以防 nvidia 驱动没有启动,我们在很多方面都写了相关环境变量
在 /etc/modprobe.d 编写一个nvidia. conf文件7
options nvidia_drm modeset=1UserConfigs/ENVariables.conf 定义各种 env 包括nvidia的 (所以基本我们为了项目化,都在这个改动 env)
输入法设置#
Fcitx5 各种配置以及问题#
Rime 的大写模式下的问题#
在 Rime 的中文输入法下按下 capslock键 你就处于大写模式无法输入中文了,然后就各种文档参看, 找到2013 年的的 issue8, 这种应该按道理不管在哪个 DE 或者 WM 下都应该修复了才对的啊!!🤔
I’ll look into this problem tonight.
You can temporarily disable mode switching with Caps Lock by patching default.yaml:
# default.custom.yaml
patch: {
ascii_composer/switch_key/Caps_Lock: noop
}软件窗口里的输入法#
不知道是
electron应用的问题还是 hyprland 和 fcitx5 还不是很兼容的问题。我们需要在desktop file里的Exec字段手动定义实现可以用fcitx5的中文输入
补充如下配置:
--enable-wayland-ime 如果是用户级别的软件,我们需要在 .local/share/applications 里的 desktop file 里定义。否则,我们要在 /usr/share/applications 里查找 desktop file 来修改
因为有些应用会出现输入中文的拼音会漏词 (就是明明想要输入 shuru 但是可能会漏出 h 到 fcitx5 的候选词栏中), 有些博客说可以:
在 ~/.config/gtk-3.0/config 文件中添加:9
[Settings]
gtk-im-module = fcitxElectron 相关应用参考官方链接#
比如软件:obsidian,vscode,chrome等10
因为在 linux+nvidia+wayland 这种情况下,nvidia 这个 gpu 加速不一定适配,所以可能就无法实现很流畅地渲染,但是为了进可能地渲染
我们在 desktop file 里也定义:
--enable-features=UseOzonePlatform --ozone-platform=wayland
StartupWMClass=obsidian # 这个field就是添加窗口class属性(可以更好在窗口管理管理)代理问题: 这个也是要在 .desktop 里根据各个 applications 的要求设置 proxy
奇奇怪怪的问题#
firefox 的 class 问题#
目的: 想要实现在打开某些窗口的时候打开到固定的工作区
.config/hypr/UserConfigs/WindowRules.conf 这个文件里定义窗口规则的时候,发现如下配置:
windowrule2 = tag +browser, class:^([Ff]irefox|org.mozilla.firefox|[Ff]irefox-esr|[Ff]irefox-bin)
windowrule2 = workspace 4, tag: browser这样的配置根本没有在 workspace 4 打开 firefox, 我使用 hyprctl clients 命令查看属性的时候,发现是正常的.
但是听从 gpt 意见写成:
windowrele2= workspace 4, tag +browser, class:^([Ff]irefox|org.mozilla.firefox|[Ff]irefox-esr|[Ff]irefox-bin)这样的配置却可以生效,问了一下 gpt, 就说是如下原因:
窗口创建时机:某些应用程序在启动时可能会先创建窗口,然后再设置类名(class)等属性。如果 tag 是基于 class 设置的,而 class 尚未被识别,tag 就不会被应用,导致依赖于该 tag 的规则无法生效。(比如 firefox)
waybar 的 icon 显示问题: 比如 waybar 的 rose 的主题,有时候会出现蓝牙图标没有显示(==我想到的可能性是蓝牙启动比 waybar 慢,所以无法显示==),只有重新 refresh waybar 才行,所以可以尝试在 hyprland.conf 中设置 exec-once = blueman-applet 我们手动设置让蓝牙启动
结论:
Hyprland 的 windowrulev2 规则在处理标签(tag)和工作区(workspace)时,应用顺序和窗口创建时机非常关键。如果窗口在创建时尚未被赋予标签,那么依赖于该标签的工作区规则可能不会生效。 spotify 也是这样,wiki 里也有提及11
为确保窗口在创建时立即被分配到正确的工作区,建议将标签和工作区的设置合并为一条规则,并确保窗口在创建时就匹配该规则。


