Hyprland

出自 Arch Linux 中文维基

Hyprland 是一個基於 wlroots 且使用C++編寫的平鋪式 Wayland合成器。 Hyprland值得注意的功能包括動態平鋪、選項卡窗口、整潔可讀的C++代碼庫,和提供窗口動畫的自定義渲染器,窗口圓角,以及透明窗口上的Dual Kawase Blur。一般用法和配置在 Hyprland Wiki 中有詳細文檔介紹

安裝[編輯 | 編輯原始碼]

安裝以下的其中一個

Hyprland捆綁了自己的wlroots,它緊隨着 wlroots-gitAUR 。這提高了穩定性,也避免了與其他基於wlroot 的合成器的依賴衝突

注意:
  • NVIDIA GPU用戶也應該在嘗試啟動Hyprland之前確保遵守上游的NVIDIA頁面Hyprland Wiki。如果不這麼做,可能會導致很多錯誤,包括可能無法登錄、窗口閃爍和CPU使用率較高
  • Hyprland不支持使用NVIDIA GPU,很多用戶成功了,但如果一些東西壞了,那你只能靠你自己了

配置[編輯 | 編輯原始碼]

注意:Hyprland Wiki變量中詳細解釋了列出的大部分選項(以及更多選項)

配置是通過一個配置文件,hyprland.conf 完成的,儘管它支持將配置拆分為多個文件並將它們包含到hyprland.conf中。默認的配置文件在 /usr/share/hyprland/hyprland.conf ,在第一次登錄後,為~/.config/hypr/hyprland.conf

hyprland.conf 包括配置設備(鍵盤、鼠標、觸控板、顯示器)的指令,以及動畫、裝飾、佈局等設置。你可以設置按鍵綁定、窗口規則以及在重新加載配置時執行命令(一次或者每次)

每次更新文件時,配置都會自動重新加載。你可以使用 hyprctl reload 來重載以獲得相同的效果。對於某些設置(尤其是輸入設置),你可能需要重啟你的Hyprland回話。

設置也可以使用 hyprctl 動態更改設置,但是這些設置不會保存

鍵盤[編輯 | 編輯原始碼]

按鍵映射[編輯 | 編輯原始碼]

Hyprland默認使用 US Qwerty 鍵盤佈局,你可以使用以下配置來配置它

~/.config/hypr/hyprland.conf
# German Colemark layout
input {
    ...
    kb_layout = de
    kb_variant = colemark
    ...
    }

查看 Hyprland Wiki 以查看所有可用選項

注意: Hyprland 將會覆蓋 locale 定義,如果你不使用 US 佈局的鍵盤則有必要更改按鍵映射

鍵入延遲和速率[編輯 | 編輯原始碼]

雖然Xorg用戶將習慣於在伺服器級別定義此設置,在Wayland上,每個合成器都會自行處理:

~/.config/hypr/hyprland.conf
# Repeat rate and delay
input {
    ...
    repeat_rate = 25
    repeat_delay = 600
    ...
    }

鍵盤亮度[編輯 | 編輯原始碼]

在Hyprland中,可以藉助 XF86KbdBrightness 來實現鍵盤亮度的調節功能。

安裝 brightnessctl 並添加以下內容:

~/.config/hypr/hyprland.conf
# Keyboard backlight
bind = , xf86KbdBrightnessUp, exec, brightnessctl -d *::kbd_backlight set +33%
bind = , xf86KbdBrightnessDown, exec, brightnessctl -d *::kbd_backlight set 33%-

此外,還可以設置更改時彈出通知

媒體按鍵[編輯 | 編輯原始碼]

在Hyprland上有可能通過使用 XF86Audio 鍵盤按鍵和一個外部像 pavucontrol 或者 pamixerplayerctl 的應用程式使用鍵盤媒體按鍵控制媒體(翻譯可能不準確,請參照下面英語)

Using keyboard media controls in Hyprland is possible by making use of XF86Audio keysyms and an external application like pavucontrol or pamixer and playerctl.

~/.config/hypr/hyprland.conf
# Volume and Media Control
bind = , XF86AudioRaiseVolume, exec, pamixer -i 5 
bind = , XF86AudioLowerVolume, exec, pamixer -d 5 
bind = , XF86AudioMicMute, exec, pamixer --default-source -m
bind = , XF86AudioMute, exec, pamixer -t
bind = , XF86AudioPlay, exec, playerctl play-pause
bind = , XF86AudioPause, exec, playerctl play-pause
bind = , XF86AudioNext, exec, playerctl next
bind = , XF86AudioPrev, exec, playerctl previous

當有更改時,也可以觸發 屏幕通知

觸摸板手勢[編輯 | 編輯原始碼]

作為 Wayland 合成器,Hyprland 完全支持觸摸板手勢即使它默認是禁用的。使用以下更改來啟用它

~/.config/hypr/hyprland.conf
# Enable touchpad gestures
gestures {
    workspace_swipe = true
    workspace_swipe_fingers = 3
}

查看 上游Wiki 來獲取所有可用的選項

顯示設置[編輯 | 編輯原始碼]

屏幕共享[編輯 | 編輯原始碼]

查看 屏幕共享

作為一個基於wlroots的合成器,Hyprland可以利用 xdg-desktop-portal-wlr 通過 xdg-desktop-portal 在一系列應用程式中啟用屏幕錄製。

Hyprland 還維護 xdg-desktop-portal-hyprland ,一個wlr portal帶有添加包括區域共享、窗口共享和圖形選擇器功能的分支。關於使用該工具在 Hyprland wiki 中有進一步的文檔介紹

設置屏幕解像度[編輯 | 編輯原始碼]

Hyprland 將會嘗試去自動檢測你的屏幕解像度。不過在某些情況下它將會失敗並默認為故障保護,通常是在存在多個屏幕或你有混合筆記本電腦的情況下。如果屏幕下所有的東西都很大,那麼你需要設置你默認的顯示器和解像度

首先使用 hyprctl 找到你的默認顯示器:

$ hyprctl monitors
Monitor eDP-1 (ID 0):
        1920x1080@144.003006 at 0x0
        description: Chimei Innolux Corporation 0x153C (eDP-1)
        ...

然後在配置文件中添加你的顯示器:

~/.config/hypr/hyprland.conf
...
# Monitor details
monitor=eDP-1,1920x1080@144,0x0,1
...

0x0是一個用於多屏幕設置和最終設置的位置偏移,1是屏幕縮放倍數

亮度[編輯 | 編輯原始碼]

安裝 brightnessctl 並添加以下內容:

~/.config/hypr/hyprland.conf
# Screen brightness
bind = , XF86MonBrightnessUp, exec, brightnessctl s +5%
bind = , XF86MonBrightnessDown, exec, brightnessctl s 5%-

此外,還可以設置更改時彈出通知

使用[編輯 | 編輯原始碼]

啟動[編輯 | 編輯原始碼]

目前推薦從TTY啟動Hyprland[編輯 | 編輯原始碼]

$ Hyprland

雖然從 顯示管理器 中啟動不是官方支持得,但是用戶們報告成功在 GDMSDDM 和其他的顯示管理器中成功啟動。hyprland中包含一個顯示管理器條目,且所有Hyprland AUR 包將會自動生成一個條目。

兩種方法都提供相同的結果,加上或減去一些環境變量和服務。

自動登錄[編輯 | 編輯原始碼]

用戶可以通過一個 顯示管理器 或着在登錄時採用 Xinit#Autostart X at login 中描述的方法進行自動登錄

hyprctl 和 IPC[編輯 | 編輯原始碼]

hyprctl 是一個命令行實用程序,隨Hyprland一起安裝,用於與顯示伺服器通信。它允許你向伺服器發送命令(相當於配置文件中的命令,但語法略有不同)、設置關鍵詞、發送詢問和請求信息。請查看 完整文檔

Hyprland also exposes 2 UNIX Sockets for controlling and getting information about Hyprland via code or command-line utilities. These sockets broadcast events on focus change (windows, workspaces, monitors), creation of windows/workspace, and so on.

Both hyprctl and the IPC sockets can be effectively used in scripts to control Hyprland for complex tasks.

exec versus exec-once[編輯 | 編輯原始碼]

When starting applications it is important to use the correct type of dispatcher, using exec incorrectly can result in applications being started multiple times taking up system resources and in the worst cases, causing a race condition that can crash your system.

注意: As mentioned in #Configuration, Hyprland automatically parses hyprland.conf each time a change to the file is saved: do not use exec for everything. In most cases you should use exec-once to launch applications and daemons at boot, as this command will not run again with a reload, only use exec if you are absolutely sure you want the command to run again on every reload.

Setting environment variables[編輯 | 編輯原始碼]

It is possible to set environment variables directly in hyprland.conf through the env keyword, which has a different syntax than the env UNIX command used by shells.

The differences are explained on the upstream Wiki.

Tips and tricks[編輯 | 編輯原始碼]

注意:
  • For all below sections there will usually be more than one way of achieving a similar result, everything provided here is a basic example.
  • For a comprehensive list of alternatives refer to List of applications, a Hyprland specific list can be found on the upstream Wiki.

文件管理器[編輯 | 編輯原始碼]

在Hyprland環境下,如果需要圖形化的文件管理功能,則需要一個兼容Wayland的外部應用程式。以 thunar 為例,我們只需為其分配一個快捷鍵,操作如下:

~/.config/hypr/hyprland.conf
...
bind = SUPER, E, exec, thunar
...

應用程式啟動器[編輯 | 編輯原始碼]

在Hyprland環境下,如果需要啟動應用程式,則需要一個兼容Wayland的外部應用程式。以 wofi 軟件包為例,我們只需為其分配一個快捷鍵,操作如下:

~/.config/hypr/hyprland.conf
...
bind = SUPER, F, exec, wofi
...

Idle[編輯 | 編輯原始碼]

Hyprland requires a wayland-compatible external idle management daemon. The most common setup is swayidle and swaylock. You can lock your screen manually using a bind as follows:

~/.config/hypr/hyprland.conf
...
bind = SUPER, L, exec, swaylock -f -c 000000
...

Automatic screen locking and suspend[編輯 | 編輯原始碼]

Create the following script:

~/.config/hypr/scripts/sleep.sh
swayidle -w timeout 300 'swaylock -f -c 000000' \
            timeout 600 'systemctl suspend' \
            before-sleep 'swaylock -f -c 000000' &
提示:* You can adjust the timeout periods by editing the numerical values, in seconds. 300 is 5 minutes, 600 is 10 minutes etc.

Then call it:

~/.config/hypr/hyprland.conf
...
exec-once = ~/.config/hypr/scripts/sleep.sh
...

Turning off the screen using DPMS after a timeout period[編輯 | 編輯原始碼]

Hyprland has a built in dispatcher to handle DPMS requests however using it as a direct keybind is not recommended, doing so will result in you not being able to turn the screen back on and will require you to reboot.

Edit the script from above and change it to read:

~/.config/hypr/scripts/sleep.sh
swayidle -w timeout 300 'swaylock -f -c 000000' \
            timeout 600 'hyprctl dispatch dpms off' \
            resume 'hyprctl dispatch dpms on' \
            timeout 900 'systemctl suspend' \
            before-sleep 'swaylock -f -c 000000' &
提示:The hyprctl dispatch dpms on command must come directly after the hyprctl dispatch dpms off command in the script for it to function correctly, as the resume command is linked to the previous timeout used.
Stop DPMS while using applications[編輯 | 編輯原始碼]

The above setup will result in your monitor powering off while you are doing things like playing a game, watching a video or listening to music where you might not touch the system for longer than the timeout period.

To fix this you can either use Hyprlands built in Window Rules V2 function which has a idleinhibit rule or you can install one of either idlehack-gitAUR or sway-audio-idle-inhibit-gitAUR. The former uses D-Bus to prevent Swayidle requests whenever Firefox or Chromium are playing audio/video. The latter prevents Swayidle requests whenever any application is playing audio.

For programs that use org.freedesktop.ScreenSaver.inhibit to pause the screensaver, you can install wscreensaver-bridge-gitAUR to implement it for Hyprland (or any Wayland compositor that support the idle-inhibit protocol).

狀態欄[編輯 | 編輯原始碼]

在Hyprland環境下,如果需要狀態欄,則需要一個兼容Wayland的外部應用程式。以 waybar軟件包為例,操作如下:

~/.config/hypr/hyprland.conf
...
exec-once = waybar -c ~/.config/waybar/waybar.conf
...

Workspace overview[編輯 | 編輯原始碼]

waybar has a built in, fully customisable module that supports Hyprland workspace switching natively.

See the waybar Wiki [1] for details.

Polkit authentication[編輯 | 編輯原始碼]

Polkit authentication requires the use of an external authentication agent. Hyprland recommends using polkit-kde-agent but any should work.

Call it as follows:

~/.config/hypr/hyprland.conf
...
exec-once = /usr/lib/polkit-kde-authentication-agent-1
...

桌面壁紙[編輯 | 編輯原始碼]

在Hyprland環境下,如果需要管理桌面壁紙,則需要一個兼容Wayland的外部應用程式。以 swwwAUR 軟件包為例,操作如下:

~/.config/hypr/hyprland.conf
...
exec-once = swww init
exec-once = swww img path/to/image
...

Using a script to change wallpaper every X minutes[編輯 | 編輯原始碼]

Create the following script and make sure its executable:

~/.config/hypr/scripts/swww-random
#!/bin/bash

# This script will randomly go through the files of a directory, setting it
# up as the wallpaper at regular intervals
#
# NOTE: this script uses bash (not POSIX shell) for the RANDOM variable

if [[ $# -lt 1 ]] || [[ ! -d $1   ]]; then
	echo "Usage:
	$0 <dir containing images>"
	exit 1
fi

# Edit below to control the images transition
export SWWW_TRANSITION_FPS=144
export SWWW_TRANSITION_STEP=2
export SWWW_TRANSITION_TYPE=random

# This controls (in seconds) when to switch to the next image
INTERVAL=300

while true; do
	find "$1" \
		| while read -r img; do
			echo "$((RANDOM % 1000)):$img"
		done \
		| sort -n | cut -d':' -f2- \
		| while read -r img; do
			swww img "$img"
			sleep $INTERVAL
		done
done

Next create a new folder to store background images, something like ~/.config/hypr/backgrounds should work fine, and populate it with any images you want. Finally call the script:

~/.config/hypr/hyprland.conf
...
exec-once = swww init
exec-once = ~/.config/hypr/scripts/swww-random ~/.config/hypr/background
...

屏幕通知[編輯 | 編輯原始碼]

屏幕上對亮度和音量調整等操作顯示通知的功能可以藉助外部的通知服務程序來實現。然而,深入探討這一主題超出了本頁面的說明範圍。這裏我們將會聚焦於安裝 mako 的操作,現在請繼續進行 安裝

See Desktop notifications for further instructions and Desktop notifications#Standalone for a list of alternatives.

注意: * All scripts offered here are examples and will very likely need to be adjusted for your setup.

Mako[編輯 | 編輯原始碼]

Mako is a lightweight notification daemon, you can read mako(5) for details. Its configuration file is ~/.config/mako/config, icons used for OSD are stored at ~/.config/mako/icons/ and should be in PNG format.

For the rest of this section all the images used by the scripts are available from this GitHub folder.

Keyboard backlight notifications[編輯 | 編輯原始碼]

First create the following script:

~/.config/hypr/scripts/kbbacklight
#!/usr/bin/env bash

iDIR="$HOME/.config/mako/icons"

# Get brightness
get_backlight() {
	LIGHT="$(cat /sys/class/leds/*::kbd_backlight/brightness)"
	echo "${LIGHT}"
}

# Get icons
get_icon() {
	current="$(cat /sys/class/leds/*::kbd_backlight/brightness)"

	if [[ ("$current" -ge "0") && ("$current" -le "1") ]]; then
		icon="$iDIR/brightness-20.png"
	elif [[ ("$current" -ge "1") && ("$current" -le "2") ]]; then
		icon="$iDIR/brightness-60.png"
	elif [[ ("$current" -ge "2") && ("$current" -le "3") ]]; then
		icon="$iDIR/brightness-100.png"
	fi
}

# Notify
notify_user() {
	notify-send -h string:x-canonical-private-synchronous:sys-notify -u low -i "$icon" "Keyboard Brightness : $(brightnessctl -d '*::kbd_backlight' g)"
}

# Increase brightness
inc_backlight() {
	brightnessctl -d *::kbd_backlight set 33%+ && get_icon && notify_user
}

# Decrease brightness
dec_backlight() {
	brightnessctl -d *::kbd_backlight set 33%- && get_icon && notify_user
}

# Zero brightness
zero_backlight() {
	brightnessctl -d *::kbd_backlight s 0%
}

# Full brightness
full_backlight() {
	brightnessctl -d *::kbd_backlight s 100%
}

# Execute accordingly
if [[ "$1" == "--get" ]]; then
	brightnessctl -d '*::kbd_backlight' g
elif [[ "$1" == "--inc" ]]; then
	inc_backlight
elif [[ "$1" == "--dec" ]]; then
	dec_backlight
elif [[ "$1" == "--zero" ]]; then
	zero_backlight
elif [[ "$1" == "--full" ]]; then
	full_backlight

else
	get_backlight
fi

Then add the following (or edit any existing binds):

~/.config/hypr/hyprland.conf
# Keyboard brightness
bind = SUPER, F2, exec, ~/.config/hypr/scripts/kbbacklight --dec
bind = SUPER, F3, exec, ~/.config/hypr/scripts/kbbacklight --inc
Media key notifications[編輯 | 編輯原始碼]

First create the following script:

~/.config/hypr/scripts/volume
#!/usr/bin/env bash

iDIR="$HOME/.config/mako/icons"

# Get Volume
get_volume() {
	volume=$(pamixer --get-volume)
	echo "$volume"
}

# Get icons
get_icon() {
	current=$(get_volume)
	if [[ "$current" -eq "0" ]]; then
		echo "$iDIR/volume-mute.png"
	elif [[ ("$current" -ge "0") && ("$current" -le "30") ]]; then
		echo "$iDIR/volume-low.png"
	elif [[ ("$current" -ge "30") && ("$current" -le "60") ]]; then
		echo "$iDIR/volume-mid.png"
	elif [[ ("$current" -ge "60") && ("$current" -le "100") ]]; then
		echo "$iDIR/volume-high.png"
	fi
}

# Notify
notify_user() {
	notify-send -h string:x-canonical-private-synchronous:sys-notify -u low -i "$(get_icon)" "Volume : $(get_volume) %"
}

# Increase Volume
inc_volume() {
	pamixer -i 5 && notify_user
}

# Decrease Volume
dec_volume() {
	pamixer -d 5 && notify_user
}

# Toggle Mute
toggle_mute() {
	if [ "$(pamixer --get-mute)" == "false" ]; then
		pamixer -m && notify-send -h string:x-canonical-private-synchronous:sys-notify -u low -i "$iDIR/volume-mute.png" "Volume Switched OFF"
	elif [ "$(pamixer --get-mute)" == "true" ]; then
		pamixer -u && notify-send -h string:x-canonical-private-synchronous:sys-notify -u low -i "$(get_icon)" "Volume Switched ON"
	fi
}

# Toggle Mic
toggle_mic() {
	if [ "$(pamixer --default-source --get-mute)" == "false" ]; then
		pamixer --default-source -m && notify-send -h string:x-canonical-private-synchronous:sys-notify -u low -i "$iDIR/microphone-mute.png" "Microphone Switched OFF"
	elif [ "$(pamixer --default-source --get-mute)" == "true" ]; then
		pamixer -u --default-source u && notify-send -h string:x-canonical-private-synchronous:sys-notify -u low -i "$iDIR/microphone.png" "Microphone Switched ON"
	fi
}
# Get icons
get_mic_icon() {
	current=$(pamixer --default-source --get-volume)
	if [[ "$current" -eq "0" ]]; then
		echo "$iDIR/microphone.png"
	elif [[ ("$current" -ge "0") && ("$current" -le "30") ]]; then
		echo "$iDIR/microphone.png"
	elif [[ ("$current" -ge "30") && ("$current" -le "60") ]]; then
		echo "$iDIR/microphone.png"
	elif [[ ("$current" -ge "60") && ("$current" -le "100") ]]; then
		echo "$iDIR/microphone.png"
	fi
}
# Notify
notify_mic_user() {
	notify-send -h string:x-canonical-private-synchronous:sys-notify -u low -i "$(get_mic_icon)" "Mic-Level : $(pamixer --default-source --get-volume) %"
}

# Increase MIC Volume
inc_mic_volume() {
	pamixer --default-source -i 5 && notify_mic_user
}

# Decrease MIC Volume
dec_mic_volume() {
	pamixer --default-source -d 5 && notify_mic_user
}

# Execute accordingly
if [[ "$1" == "--get" ]]; then
	get_volume
elif [[ "$1" == "--inc" ]]; then
	inc_volume
elif [[ "$1" == "--dec" ]]; then
	dec_volume
elif [[ "$1" == "--toggle" ]]; then
	toggle_mute
elif [[ "$1" == "--toggle-mic" ]]; then
	toggle_mic
elif [[ "$1" == "--get-icon" ]]; then
	get_icon
elif [[ "$1" == "--get-mic-icon" ]]; then
	get_mic_icon
elif [[ "$1" == "--mic-inc" ]]; then
	inc_mic_volume
elif [[ "$1" == "--mic-dec" ]]; then
	dec_mic_volume
else
	get_volume
fi

Then add the following (or edit any existing binds):

~/.config/hypr/hyprland.conf
# Volume
bind = , XF86AudioRaiseVolume, exec, ~/.config/hypr/scripts/volume --inc 
bind = , XF86AudioLowerVolume, exec, ~/.config/hypr/scripts/volume --dec 
bind = , XF86AudioMicMute, exec, ~/.config/hypr/scripts/volume --toggle-mic 
bind = , XF86AudioMute, exec, ~/.config/hypr/scripts/volume --toggle
Screen backlight notifications[編輯 | 編輯原始碼]

First create the following script:

~/.config/hypr/scripts/backlight
!/usr/bin/env bash

iDIR="$HOME/.config/mako/icons"

# Get brightness
get_backlight() {
	LIGHT=$(printf "%.0f\n" $(brightnessctl g))
	echo "${LIGHT}"
}

# Get icons
get_icon() {
	current="$(get_backlight)"
	if [[ ("$current" -ge "0") && ("$current" -le "19200") ]]; then
		icon="$iDIR/brightness-20.png"
	elif [[ ("$current" -ge "19200") && ("$current" -le "38400") ]]; then
		icon="$iDIR/brightness-40.png"
	elif [[ ("$current" -ge "38400") && ("$current" -le "57600") ]]; then
		icon="$iDIR/brightness-60.png"
	elif [[ ("$current" -ge "57600") && ("$current" -le "76800") ]]; then
		icon="$iDIR/brightness-80.png"
	elif [[ ("$current" -ge "76800") && ("$current" -le "96000") ]]; then
		icon="$iDIR/brightness-100.png"
	fi
}

# Notify
notify_user() {
	notify-send -h string:x-canonical-private-synchronous:sys-notify -u low -i "$icon" "Brightness : $(get_backlight)"
}

# Increase brightness
inc_backlight() {
	brightnessctl s +5% && get_icon && notify_user
}

# Decrease brightness
dec_backlight() {
	brightnessctl s 5%- && get_icon && notify_user
}

# Execute accordingly
if [[ "$1" == "--get" ]]; then
	get_backlight
elif [[ "$1" == "--inc" ]]; then
	inc_backlight
elif [[ "$1" == "--dec" ]]; then
	dec_backlight
else
	get_backlight
fi

Then add the following (or edit any existing binds):

~/.config/hypr/hyprland.conf
# Screen brightness
bind = , XF86MonBrightnessUp, exec, ~/.config/hypr/scripts/backlight --inc 
bind = , XF86MonBrightnessDown, exec, ~/.config/hypr/scripts/backlight --dec
Keyboard language notifications[編輯 | 編輯原始碼]

To run this script, you need a command-line JSON processor gojqAUR.

First create the following script:

~/.config/hypr/scripts/lang
#!/usr/bin/env bash

icon="$HOME/.config/mako/icons/language.png"

# Get language
get_lang() {
	lang=$(hyprctl devices -j | gojq -r '.keyboards[] | select(.name == "at-translated-set-2-keyboard") | .active_keymap' | cut -c 1-2 | tr 'A-Z' 'a-z')
	case $lang in
		en)
			lang="English language"
			;;
		ru)
			lang="Русский язык"
			;;
		uk)
			lang="Українська мова"
			;;
	esac
	echo $lang
}

# Notify
notify-send -h string:x-canonical-private-synchronous:sys-notify -u low -i "$icon" "$(get_lang)"

Then add the following (or edit any existing binds):

~/.config/hypr/hyprland.conf
device:at-translated-set-2-keyboard {
    kb_layout = us,ru,ua
    kb_variant = lang
    kb_options = grp:win_space_toggle
}

# Language
bind = SUPER, SPACE, exec, ~/.config/hypr/scripts/lang

Power control[編輯 | 編輯原始碼]

Hyprland requires a wayland-compatible external application for power control. Using nwg-barAUR as an example, we simply need to bind it as follows:

~/.config/hypr/hyprland.conf
...
bind = SUPER, ESCAPE, exec, nwg-bar
...

Clipboard[編輯 | 編輯原始碼]

Wayland clipboard behaviour deletes data when closing the application we copied it from. Other desktop environments work around this by using dedicated clipboard managers and on Hyprland there are multiple compatible choices. See the upstream Wiki for more information.

This section will cover cliphist as it supports copying images as well as text, start by adding the following:

~/.config/hypr/hyprland.conf
...
exec-once = wl-paste --type text --watch cliphist store 
exec-once = wl-paste --type image --watch cliphist store
...

Then create a bind to call the history in your chosen application launcher:

~/.config/hypr/hyprland.conf
...
bind = SUPER, V, exec, cliphist list | wofi --dmenu | cliphist decode | wl-copy
...

Now pressing Super+v will open up a wofi window with a clipboard history list.

Troubleshooting[編輯 | 編輯原始碼]

xdg-desktop-portal-hyprland is using a lot of CPU[編輯 | 編輯原始碼]

This is a known bug [2] that should be resolved in the latest Git build. You can work around it by calling the nuclear script from the Hyprland wiki, as outlined here, in your hyprland.conf file.

See also[編輯 | 編輯原始碼]