[!TIP] 首先声明,并不是所有功能都是通过快捷键打开的,就是比如说: 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] firefox

exec 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 有常用快捷键提示

这里说到快捷键要说明一下,渲染问题 (有 yadrofi 这两个实现脚本的 GUI)

简单对比:

功能 yad rofi
图形风格 GTK,传统 GUI 样式 极简、dmenu 风格
多列显示 ✅ 原生支持 🚫 不支持多列(需手动 hack)
自定义交互复杂度 高(按钮、表单、进度条等) 中(菜单交互 + 自定义脚本)
外观主题支持 GTK 主题 rofi 主题(通过 config 设置)
使用场景 配置工具、提示菜单、设置界面 启动器、搜索菜单、快速选择器

环境变量 ENV

/etc/environment 加载 fcitx5

[!Note] 下面的注释是 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=nvidia

Nvidia

[!Warning] 首先禁用 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=1

UserConfigs/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
}

软件窗口里的输入法

[!NOTE] 不知道是 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/settings.ini 文件中添加:[^漏字]

[Settings]
gtk-im-module=fcitx

Electron 相关应用参考官方链接

比如软件:obsidian,vscode,chrome9

因为在 linux+nvidia+wayland 这种情况下,nvidia 这个 gpu 加速不一定适配,所以可能就无法实现很流畅地渲染,但是为了进可能地渲染

我们在 desktop file 里也定义:

--enable-features=UseOzonePlatform --ozone-platform=wayland

StartupWMClass=obsidian # 这个field就是添加窗口class属性(可以更好在窗口管理管理)

代理问题: 这个也是要在 .desktop 里根据各个 applications 的要求设置 proxy

[!Warning] 现在, 出现了在 desktop file 中设置这些标志也没有用的情况, 比如说: vscode, 所以通过搜索, 找到了一个奇怪的办法.

~/.config 中配置 code-flags.conf 文件:

--enable-features=UseOzonePlatform --ozone-platform=wayland --enable-wayland-ime

这样, vscode 就可以正常切换到中文输入法了.

但是, 现如今 chrome 都不用设置标志都可以实现中文输入了, 不知道为什么🤷‍♂️? 可能是适配了吧🤔


奇奇怪怪的问题

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 里也有提及10

为确保窗口在创建时立即被分配到正确的工作区,建议将标签和工作区的设置合并为一条规则,并确保窗口在创建时就匹配该规则。

wayland 下 obsidian web clipper

在网页下点击扩展 add to obsidian 之后只有创建了文件以及文件标题, 没有内容.

简单说明:

# hyprland.conf
misc {
    focus_on_activate = true
}

如果是使用脚本下载的 hyprland 就是我们在 UserConfigs/UserSettings.conf 下配置

fcitx5 闪烁问题

就是可以将/etc/environment中的QT_IM_MODULE=fcitx的这个注释掉就可以了[^fcitx5闪烁]

[!Tip] 可能会觉得奇怪:为什么之前QT_IM_MODULE这个之前不是QT_IM_MODULE=ibus吗? 为什么现在改为fcitx了?这是因为wechat要输入中文才这样


参考🔗