Jump to content

Hyprland (Português)

From ArchWiki
Status de tradução: Esse artigo é uma tradução de Hyprland. Data da última tradução: 2026-03-11. Você pode ajudar a sincronizar a tradução, se houver alterações na versão em inglês.

Este artigo ou esta seção precisa de tradução.

Notas: Artigo em processo de tradução. (Discuta em Talk:Hyprland (Português)#)

Hyprland é um compositor Wayland de tiling independente escrito em C++. Funções notórias do Hyprland incluem tiling dinâmico, janelas espaçadas, uma base de código C++ limpa e legível, e um renderizador customizado que provê animações de janela, bordas arredondadas, e blur em janelas transparentes. Uso geral e configuração estão extensivamente documentados em Hyprland wiki.

Instalação

Instale o pacote hyprland.

Desde #6608, o Hyprland usa aquamarine como sua própria biblioteca backend de renderização. Antes disso, ele vinha junto com sua própria versão do wlroots, which closely followed wlroots-gitAUR.

Nota
  • Usuários de GPUs da NVIDIA devem certificar-se de seguir as instruções na página NVIDIA specific page on the upstream Wiki antes de tentar inicializar o Hyprland. Failure to do so will likely result em diversos bugs incluindo incapacidade de logar, janelas piscantes e alto uso de placa de vídeo.
  • O uso de GPUs da NVIDIA com o Hyprland não é suportado. Muitos usuários conseguiram mas se algo não estiver funcionando, você está por si só.
  • Certifique-se de instalar o pacote Polkit, ou inicie e habilite seatd.service. Falha em cumprir essas etapas causará com que o Hyprland falhe ao tentar iniciar.
  • Usuários de VMware/VirtualBox podem precisar habilitar a aceleração 3D para executar o Hyprland propriamente.

Configuração

Nota Maior parte das opções listadas (e mais) são explicadas em detalhe na página de variáveis hyprland Wiki.

A configuração é feita por meio de um único arquivo de configuração, hyprland.conf, entretanto, é possível dividir a configuração em múltiplos arquivos e incluí-los em hyprland.conf. O arquivo padrão é /usr/share/hypr/hyprland.conf e, depois de logar pela primeira vez, ~/.config/hypr/hyprland.conf.

hyprland.conf Inclui diretivas para configurar seus dispositivos (teclados, mouses, trackpads, monitores), assim como configurações para animações, decorações, layouts etc. Você pode definir teclas de atalho, regras para janelas, e executar comandos (tanto uma vez ou toda vez) que a configuração é recarregada. settings for animations, decorations, layout, etc.

A configuração é automaticamente recarregada toda vez que você atualiza e salva o arquivo. Você também pode usar hyprctl reload para obter o mesmo resultado. Para algumas configurações (particularmente configurações de input), você pode precisar reiniciar a sua sessão Hyprland.

Configurações também podem ser alteradas em tempo real com hyprctl mas elas não serão salvas.

Teclado

Mapa de teclado

Por padrão o Hyprland usa o layout US Qwerty; você pode configurar outro layout da seguinte maneira:

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

Para uma lista com todas as opções disponíveis, veja a Hyprland Wiki.

Nota O Hyprland sobrescreverá definições locale então é necessário mudar o mapa de teclado se você não usa um teclado com layout US.

Atraso e ritmo de repetição de teclas

Usuários Xorg podem estar acostumados com essa configuração definida no nível do servidor, no Wayland cada compositor gerencia essa configuração de sua própria forma:

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

Luzes de fundo do teclado

Usar os controles de brilho de seu teclado por meio do Hyprland é possível. Instale brightnessctl e então adicione as teclas relacionadas (substitua keyboard_brightness_* por SUPER, FX ou XF86KbdBrightness dependendo de como o seu hardware expõe a luz de fundo do teclado):

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

Também é possível ter notificações na tela que são mostradas quando mudanças são feitas.

Teclas de controle de mídia

É possível controlar a reprodução de mídia por meio de teclas de atalho usando as símbolos de tecla do XF86Audio e uma aplicação como pavucontrol ou pamixer e 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

Também é possível ter notificações na tela que são mostradas quando mudanças são feitas.

Gestos touchpad

Por ser um compositor Wayland, o Hyprland tem suporte total a gestos touchpad. Por padrão, estes estão desabilitados. Para habilita-los, faça a seguinte edição:

~/.config/hypr/hyprland.conf
# Enable touchpad gestures
gesture = 3, horizontal, workspace

Veja a wiki upstream para uma lista com todas as opções disponíveis.

Configurações de exibição

Transmissão de tela

Veja a página relevante de transmissão de tela na wiki upstream

Por ser um compositor compatível como o wlroots, o Hyprland pode utilizar xdg-desktop-portal-wlr para habilitar a captura de tela em diversos aplicativos por meio do pacote xdg-desktop-portal.

Hyprland também mantém xdg-desktop-portal-hyprland, que suporta transmissão de tela (incluindo transmissões de regiões e transmissões de janelas), teclas de atalho globais, e uma ferramenta gráfica de seleção de cores. O uso do portal é mais detalhadamente documentado na Hyprland wiki.

Vale enfasar que xdg-desktop-portal-hyprland não inclui um seletor de arquivos, para isso usuários podem optar por instalar xdg-desktop-portal-gtk.

Definindo resolução da tela

O Hyprland tentará detectar a resolução de sua tela automaticamente e selecionar uma escala de 1x. 1.5x ou 2x para a tela. [1] Entretanto, algumas vezes essa detecção falhará e usará uma configuração padrão à prova de falhas, isso geralmente ocorre quando há múltiplas telas ou se você possui um laptop híbrido. Se tudo na sua tela estiver muito grande então você precisa configurar o monitor padrão e a resolução manualmente.

Ache o seu monitor padrão usando hyprctl:

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

Então adicione o monitor à configuração:

~/.config/hypr/hyprland.conf
...
# Monitor details
monitorv2 {
    output = eDP-1
    mode = 1920x1080@144
    position = 0x0
    scale = 1
}
...

0x0 é o offset de posição usado para setups com múltiplas telas e o 1 no final é o fator de escala da tela.

Confira Hyprland Monitors Wiki para mais detalhes.

GUI de configurações

O pacote nwg-displays disponibiliza uma aplicação GUI para organização de monitores e suporta o Hyprland. Ele é parte do pacote nwg-shell (mas funciona sozinho), veja nwg-displays github para mais detalhes.

Luz de fundo da tela

Instale brightnessctl e então adicione as seguintes teclas:

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

Também é possível ter notificações na tela que são mostradas quando mudanças são feitas.

Uso

Iniciando

Gerenciador de Sessões Universal para Wayland

O Gerenciador de Sessões Universal para Wayland embrulha o compositor e aplicações configuradas de acordo e daemons por meio de arquivos de units do systemd, permitindo que você controle-as com systemctl.

O Hyprland pode ser iniciado via um gerenciador de exibição com uwsm selecionando hyprland (uwsm-managed).

Você pode iniciar o Hyprland com o uwsm tanto em um getty quanto com o seguinte script no seu shell de login:

if uwsm check may-start && uwsm select; then
  exec systemd-cat -t uwsm_start uwsm start default
fi
Nota
  • uwsm check may-start verifica se está tudo bem inicializar a sessão wayland, em particular caso esteja rodando em um shell de login. Entretanto, você ainda deveria evitar usar isso dentro de .bashrc ou outros arquivos providos até por shells que não são de login.
  • O Hyprland deixou de recomendar iniciar suas sessões com uwsm uma vez que a ferramenta é considerada experimental e direcionada a usuários experientes que entendem suas implicações e peculiaridades.
Dica Se você deseja pular o menu de seleção de compositor e iniciar o Hyprland diretamente, use esse código em seu shell de login:
if uwsm check may-start; then
  exec uwsm start hyprland.desktop
fi
Atenção Se você optou por iniciar o Hyprland via uwsm então você deve ajustar suas configurações de acordo. Em particular:
  • Você deve evitar usar o dispatcher exit ou finalizar o processo do Hyprland diretamente já que isso interferiria com o processo de finalização padrão. Use uwsm stop ou loginctl terminate-user "" para finalizar o Hyprland e sair da sessão de usuário, por exemplo:
~/.config/hypr/hyprland.conf
bind = $mainMod, M, exec, uwsm stop
  • Não coloque variáveis de ambiente em hyprland.conf, ao invés disso, use os arquivos do uwsm ~/.config/uwsm/env para variáveis comuns para todas as sessões gráficas gerenciadas pelo uwsm (GTK, Qt, xcursor, ...) e ~/.config/uwms/env-hyprland para variáveis de ambiente exclusivas para o Hyprland (variáveis Hypr* e AQ_* por exemplo). O formato desses arquivos é export KEY=VALUE em cada linha sem comentários. É fortemente indicado que, caso você use múltiplas GPUs, que coloque as variável de ambiente AQ_DRM_DEVICES dentro de env-hyprland para evitar conflitos com outros compositores.
Leia a página relacionada na Wiki upstream para informações adicionais sobre configuração com uwsm.

Terminal

Você pode iniciar o Hyprland por um getty com o seguinte comando:

$ start-hyprland
Nota O Hyprland deixou de recomendar iniciar suas sessões com Hyprland já que o novo comando prove recuperação de travamento e um modo seguro.

Gerenciadores de exibição

Apesar de iniciar o Hyprland por meio de um gerenciador de exibição não ser oficialmente suportado, usuários obtiveram sucesso usando GDM, SDDM e outros. A wiki upstream mantém uma lista de compatibilidade com gerenciadores de exibição. O pacote hyprland contem dois desktop entries, e todos pacotes AUR do Hyprland também irão gerar um automaticamente.

Ambos os métodos geram resultados idênticos, com mais ou menos variáveis de ambiente e serviços.

Login automático

Usuários podem logar automaticamente usando um gerenciador de exibição ou adaptando o método descrito em Xinit (Português)#Inicializar_automaticamente_o_X_no_login.

hyprctl e IPC

hyprctl é um ferramenta de linhas de comando que vem instalada juntamente do Hyprland para comunicar com o servidor de exibição. Ela permite que você envie comandos para o servidor (equivalente aos comandos no arquivo de configuração, mas com uma sintaxe levemente diferente), defina keywords, envie consultas e peça por informações. Veja a documentação completa.

O Hyprland também expõe 2 soquetes UNIX para controlar e receber informações sobre o Hyprland por meio de código ou linhas de comando. Esses soquetes transmitem informações quando ocorrem eventos de mudança de foco (janelas, áreas de trabalho, monitores), criação de janelas/áreas de trabalho, etc.

Ambos hyprctl e os sockets IPC podem ser usados em scripts para controlar o Hyprland e performar tarefas complexas.

Inicialização automática

Ao iniciar aplicações é importante usar o tipo correto de dispatcher, usar exec incorretamente pode causar com que aplicações sejam iniciadas múltiplas vezes, tomando recursos do sistema e nos piores casos, causando condições de corrida que podem travar seu sistema.

Nota Como mencionado em #Configuração, O Hyprland automaticamente reavalia o hyprland.conf toda vez que uma mudança ao arquivo é feita e salva: não use exec para tudo. Na maioria dos casos você deve usar exec-once para executar aplicações e daemons ao iniciar o Hyprland, esse comando não irá rodar esse comando novamente ao recarregar, apenas use exec caso você realmente queira que esse comando rode novamente cada vez que o arquivo de configuração recarregar.
Dica Se você inicializou o Hyprland por meio do gerenciador de sessões universal para wayland (uwsm) e a aplicação que você quer rodar possui uma unit do systemd então você pode habilitar ela para que ela seja inicializada automaticamente quando o Hyprland estiver pronto. Você pode, alternativamente, passar esta aplicação para uwsm app como um argumento para que ela seja gerenciada pelo uwsm. Por exemplo:
~/.config/hypr/hyprland.conf
exec-once = uwsm app -- mycommand --arg1 --arg2
bind = SUPER, E, exec, uwsm app -- pcmanfm-qt.desktop

Definindo variáveis de ambiente

É possível definir variáveis de ambiente diretamente no hyprland.conf usando a keyword env, que possui uma sintaxe diferente do comando UNIX 'env' usado por shells.

As diferenças são explicadas na Wiki upstream.

Ecossistema-Hypr

Atenção Algumas das ferramentas mostradas nas seções a seguir ainda são um trabalho em progresso. Portanto, bugs são esperados. Por essa razão, instruções completas e exemplos serão omitidos até que estejam maturas o suficiente para serem estáveis. Instruções detalhadas sobre o uso dessas ferramentas é documentado na Wiki upstream.

O time de desenvolvimento do Hyprland está construindo um ecossistema de aplicações feitos especificamente para serem usados com o Hyprland, essas ferramentas incluem dispatchers que permitem elas sejam usadas com hyprctl ao invés de depender de scripts.

Atualmente o ecossistema consiste de:

Hyprpaper

Hyprpaper é uma ferramenta de papéis de parede; ela pode ser instalada com o pacote hyprpaper.

Hyprpicker

Hyprpicker é uma ferramenta para selecionar uma cor de um desktop; ela pode ser instalada com o pacote hyprpicker. Ela não requere configuração.

Hypridle

Hypridle é um daemon de gerenciamento de inatividade; ele pode ser instalado com o pacote hypridle.

Hyprlock

Hyprlock é um gerenciador de trancamento de tela; ele pode ser instalado com o pacote hyprlock.

Hyprcursor

Hyprcursor é o novo formato para lidar com cursores de ela que oferece diversas melhorias em comparação ao método tradicional; ele pode ser instalado com o pacote hyprcursor.

Temas do Hyprcursor

Dica Se você instalar o hyprcursor e não instalar nenhum tema junto dele então ele irá usar as suas configurações de cursor antigas

Temas para cursor podem ser instalados pela AUR, por exemplo:

Instruções para portar temas existentes para o Hyprcursor estão disponíveis no repositório github do projeto.

XDG-Desktop-Portal-Hyprland

Implementação do XDG Desktop Portal do Hyprland. Compatível com outros compositores baseados em wlroots, mas provê funcionalidades extra quando usado com o Hyprland. Disponível através do pacote xdg-desktop-portal-hyprland.

Hyprpolkitagent

Hyprpolkitagent é um daemon de autenticação polkit. Ele pode ser instalado com o pacote hyprpolkitagent.

Hyprsunset

Hyprsunset é uma pequena ferramente que disponibiliza um filtro de luz azul para sua tela. Ele pode ser instalado pelo pacote hyprsunset.

Hyprsysteminfo

Hyprsysteminfo é um programa de pega informações de seu sistema, similarmente ao neofetchAUR ou fastfetch. Ele pode ser instalado pelo pacote AUR hyprsysteminfoAUR.

Dicas e truques

Nota
  • Para todas as seções abaixo geralmente haverá mais do que uma maneira para atingir um mesmo resultado, todos os pedaços de código aqui servem como exemplos básicos.
  • Para uma lista compreensiva de alternativas veja Lista de aplicações, uma lista específica para Hyprland pode ser encontrada na Wiki upstream.

Gerenciador de arquivos

O Hyprland requere uma aplicação externa compatível com wayland caso um gerenciador de arquivos gráficos for desejado. Usando thunar como exemplo, basta definirmos uma tecla de atalho:

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

Inicializador de aplicações

O Hyprland requere uma aplicação externa compatível com wayland para iniciar aplicações. Usando wofi como exemplo, basta definirmos uma tecla de atalho:

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

Inatividade

O Hyprland requere uma aplicação externa compatível com wayland caso um daemon de gerenciamento de inatividade for desejado. A configuração mais comum é usar os pacotes hypridle e hyprlock. Você pode trancar sua tela manualmente usando a seguinte tecla de atalho:

~/.config/hypr/hyprland.conf
...
bind = SUPER, L, exec, hyprlock
...

Trancamento de tela automático e suspensão

Crie o seguinte arquivo:

~/.config/hypr/hypridle.conf
general {
    lock_cmd = pidof hyprlock || hyprlock
}

listener {
    timeout = 300
    on-timeout = loginctl lock-session
}

listener {
    timeout = 600
    on-timeout = systemctl suspend
}
Dica Você pode ajustar os intervalos de tempo modificando os valores numéricos, em segundos. 300 é 5 minutos, 600 é 10 minutos etc.

E então execute ele:

~/.config/hypr/hyprland.conf
...
exec-once = hypridle
...

Desligando a tela usando DPMS depois de um período de tempo

O Hyprland possui um dispatcher integrado para lidar com requisições DPMS entretanto usá-lo diretamente com uma tecla de atalho não é recomendado, fazer isso causará com que você não consiga ligar sua tela de volta, te obrigando a reiniciar sua máquina.

Edite o arquivo acima e altere-o para ficar da seguinte forma:

~/.config/hypr/hypridle.conf
general {
    lock_cmd = pidof hyprlock || hyprlock
}

listener {
    timeout = 300
    on-timeout = loginctl lock-session
}

listener {
    timeout = 600
    on-timeout = hyprctl dispatch dpms off
    on-resume = hyprctl dispatch dpms on
}

listener {
    timeout = 900
    on-timeout = systemctl suspend
}

Barra de status

O Hyprland requere uma aplicação externa compatível com o wayland para exibir uma barra de status. Usando o pacote waybar como exemplo, nós só precisamos chama-la da seguinte forma:

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

Overview da área de trabalho

waybar possui um módulo já integrado que suporta áreas de trabalho do Hyprland nativamente e é altamente customizável.

Veja a waybar Wiki [2] para mais detalhes.

Autenticação Polkit

Autenticação Polkit requer o uso de um agente de autenticação externo. O Hyprland recomenda usar hyprpolkitagent mas qualquer um deve funcionar.

Chame-o da seguinte forma:

~/.config/hypr/hyprland.conf
...
exec-once = systemctl --user start hyprpolkitagent
...

Papel de parede do desktop

O Hyprland requere uma aplicação externa compatível com o wayland para gerenciar papéis de parede. Usando hyprpaper como exemplo, nós podemos chama-lo da seguinte forma:

~/.config/hypr/hyprland.conf
...
exec-once = hyprpaper
...

Adicionalmente, já que hyprpaper requer um arquivo de configuração para iniciar; crie o arquivo da seguinte forma:

~/.config/hypr/hyprpaper.conf
wallpaper {
    monitor = monitor
    path = /home/me/amongus.png
    fit_mode = cover
}

Substitua monitor com o monitor que você deseja que o papel de parede seja aplicado, você pode obter uma lista usando hyprctl monitors. monitor também pode ser deixado em branco para que a regra se aplique a todos os monitores.

Usando um script para randomizar o papel de parede

Crie o seguinte script e certifique-se de que ele é executável:

~/.config/hypr/scripts/hyprpaper-random
#!/usr/bin/env bash

WALLPAPER_DIR="$HOME/.config/hypr/wallpapers/"
CURRENT_WALL=$(hyprctl hyprpaper listloaded)

# Get a random wallpaper that is not the current one
WALLPAPER=$(find "$WALLPAPER_DIR" -type f ! -name "$(basename "$CURRENT_WALL")" | shuf -n 1)

# Apply the selected wallpaper
hyprctl hyprpaper reload ,"$WALLPAPER"

Agora crie um novo diretório para armazenar papéis de parede, algo como ~/.config/hypr/wallpapers deve funcionar, e insira nele as imagens que você deseja.

Por fim, chame o script quando a tecla de atalho especifica é pressionada:

~/.config/hypr/hyprland.conf
...
$mainMod = super

bind = $mainMod, r, exec, ~/.config/hypr/scripts/hyprpaper-random
...

Notificações na tela

Notificações na tela para ações como alterações de brilho ou volume são possíveis usando um daemon de notificações externo. Este é um tópico muito complexo e cobri-lo completamente é além do escopo dessa página. Ao invés disso, essa sessão irá focar no pacote mako, portanto, instale ele.

Veja Notificações de desktop para mais instruções e Desktop_notifications#Standalone para uma lista de alternativas.

Nota
  • Todos os scripts aqui oferecidos são exemplos e vão, muito provavelmente, precisar ser ajustados para seu setup.
  • Todos os scripts nessa sessão devem ser executáveis.

Mako

This article or section needs language, wiki syntax or style improvements. See Help:Style for reference.

Reason: This section goes beyond the scope of this page and probably deserves its own dedicated page. (Discuss in Talk:Hyprland (Português))

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 a new bind, or edit any existing one:

~/.config/hypr/hyprland.conf
# Keyboard brightness
bind = keyboard_brightness_up_shortcut, exec, ~/.config/hypr/scripts/kbbacklight --inc
bind = keyboard_brightness_down_shortcut, exec, ~/.config/hypr/scripts/kbbacklight --dec
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

Controle de alimentação

O Hyprland requere uma aplicação externa compatível com o wayland para controlar a alimentação do sistema. Usando nwg-bar como exemplo, podemos simplesmente adicionar a seguinte tecla de atalho:

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

Pranchetas

Quando copiamos dados para uma prancheta em Wayland esses dados são deletados ao fecharmos a aplicação cuja copiamos esses dados. Outros ambientes desktop contornam esse problema usando um gerenciador de prancheta dedicado e no Hyprland existem diversas opções compatíveis para escolher. Veja a wiki upstream para mais informações.

Essa seção ira cobrir o pacote cliphist já que ele suporta copiar tanto imagens como texto, comece adicionando o seguinte ao arquivo de configuração:

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

Então crie uma tecla de atalho para puxar o histórico no seu inicializador de aplicativos de preferência:

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

Agora ao pressionar Super+v vai abrir uma janela wofi com uma lista com o histórico da prancheta.

Habilitar/desabilitar dispositivos

Para habilitar/desabilitar dispositivos (ex.: touchpad), primeiro use:

$ hyprctl devices

para obter o nome do seu dispositivo.

Coloque essas linhas de código no seu arquivo de configuração (substitua <device_name> com o nome do dispositivo obtido acima) para ligar/desligar o dispositivo:

~/.config/hypr/hyprland.conf
device {
  name = <device_name>
  enabled = {true/false}
}

Para dinamicamente ligar/desligar o dispositivo use hyprctl:

$ hyprctl keyword "device[<device_name>]:enabled" {true|false}

Você também pode criar teclas de atalho, ex.:

~/.config/hypr/hyprland.conf
...
bind = $mainMod, t, exec, hyprctl keyword "device[pixa3854:00-093a:0274-touchpad]:enabled" false
bind = $mainMod Shift, t, exec, hyprctl keyword "device[pixa3854:00-093a:0274-touchpad]:enabled" true
...

Perfil dconf separado

Caso você não queira infectar as configurações de outros ambientes desktops baseados em GTK, você pode usar um perfil dconf separado. Por exemplo:

Declare um novo perfil global dconf:

/etc/dconf/profile/hyprland
user-db:hyprland
~/.config/hypr/hyprland.conf
...
env = DCONF_PROFILE, hyprland
...

Agora você pode usar gsettings e isso não deve afetar outros ambientes desktop.

Aplicações KDE Plasma não seguindo o tema Qt

Mesmo com um tema Qt definido, alguns aplicativos plasma podem não segui-lo. Isso pode ser resolvido instalando qt6ct-kdeAUR e escolhendo um KColorScheme ou adicionando essa linha de configuração em kdeglobals:

~/.config/kdeglobals
[UiSettings]
ColorScheme=NameOfTheProfile

Solução de problemas

Aplicativos electron nativos (wayland) piscando em GPUs NVIDIA

Esse é um problema comum entre usuários da NVIDIA no Hyprland [3], [4] devido à falta de suporte para sincronização explicita no Hyprland [5]. A solução temporária recomendada é usar X11 (XWayland) com aplicações problemáticas passando-as --ozone-platform-hint=x11 ou definindo env = ELECTRON_OZONE_PLATFORM_HINT,x11 em ~/.config/hypr/hyprland.conf para forçar todas as aplicações electron a serem executadas usando XWayland.

Problemas de foco em aplicativos da Jetbrains

Aplicativos da Jetbrains (Pycharm, Intellij) podem apresentar problemas estranhos de foco como:

  • Não é possível arrastar uma aba da barra de abas [6] para um split ou outra pilha de abas sem que o foco seja roubado e a aba seja largada assim que você arrasta ela para fora da barra de abas atual.
  • Janela popup de auto completar roubando o foco até o mouse ser movido.

Para mitigar esse problema adicione isso ao arquivo de configuração do Hyprland:

~/.config/hypr/hyprland.conf
windowrule = match:xwayland true, no_initial_focus on

Veja também