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
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.
- 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
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.
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
-
uwsm check may-startverifica 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.bashrcou 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.
if uwsm check may-start; then exec uwsm start hyprland.desktop fi
-
Você deve evitar usar o dispatcher
exitou finalizar o processo do Hyprland diretamente já que isso interferiria com o processo de finalização padrão. Useuwsm stopouloginctl 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/envpara variáveis comuns para todas as sessões gráficas gerenciadas pelo uwsm (GTK, Qt, xcursor, ...) e~/.config/uwms/env-hyprlandpara variáveis de ambiente exclusivas para o Hyprland (variáveisHypr*eAQ_*por exemplo). O formato desses arquivos éexport KEY=VALUEem cada linha sem comentários. É fortemente indicado que, caso você use múltiplas GPUs, que coloque as variável de ambienteAQ_DRM_DEVICESdentro deenv-hyprlandpara evitar conflitos com outros compositores.
Terminal
Você pode iniciar o Hyprland por um getty com o seguinte comando:
$ start-hyprland
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.
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.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
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
Temas para cursor podem ser instalados pela AUR, por exemplo:
- sweet-cursors-hyprcursor-gitAUR
- nordzy-hyprcursorsAUR
- xcursor-pro-hyprcursorAUR
- hyprcursor-dracula-kde-gitAUR
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
- 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
}
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.
- 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
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