Skip to content

Hyprland

Índice

  1. Resumen
  2. Archivos
  3. hyprland.lua — Configuración principal
  4. keybinds.lua — Atajos de teclado
  5. animations.lua
  6. rules.lua
  7. Scripts
  8. Notas y recursos

Resumen

El directorio ~/.config/hypr/ contiene la configuración completa del compositor Hyprland (v0.55+). Hyprland usa una API Lua para la configuración, lo que permite lógica programática (bucles, funciones, condiciones) en lugar de un formato de configuración estático.

La configuración está dividida en varios archivos Lua para mantenerla organizada.


Archivos

Archivo Propósito
hyprland.lua Configuración principal — monitor, apariencia, reglas generales
keybinds.lua Todos los atajos de teclado
animations.lua Definición de animaciones de ventanas
rules.lua Reglas de ventanas (float, tamaño, workspace)
menu.conf Configuración auxiliar (contextual)
scripts/ Scripts de shell invocados por los keybinds

hyprland.lua — Configuración principal

Variables globales

local mainMod = "SUPER"

Sección general

Controla el comportamiento básico del compositor:

Parámetro Valor Descripción
gaps_in 4 Espacio entre ventanas (px)
gaps_out 8 Espacio entre ventanas y borde de pantalla (px)
border_size 2 Grosor del borde de ventanas (px)
resize_on_border true Permite redimensionar arrastrando el borde
allow_tearing true Permite tearing para menor latencia en juegos
layout dwindle Layout de ventanas por defecto

Colores de borde

active_border   = { colors = {"rgba(89b19eee)", "rgba(33473dee)"}, angle = 45 }
inactive_border = "rgba(2a2a2a00)"

El borde activo usa un gradiente de 45° con los colores $accent (#89B19E) → $primary (#33473D) de la paleta del sistema.

Variables de entorno Qt

hl.env("QT_QPA_PLATFORMTHEME", "qt6ct")
hl.env("QT_WAYLAND_DISABLE_WINDOWDECORATION", "1")

QT_QPA_PLATFORMTHEME=qt6ct permite que apps Qt (ej. qt6ct/Kvantum) respeten el tema oscuro configurado. No debe forzarse QT_STYLE_OVERRIDE (ej. breeze) — eso sobreescribe el style=kvantum configurado en qt6ct.conf sin importar lo que diga el usuario, causando texto negro illegible sobre fondos oscuros en apps como Dolphin.

Cambios en estas variables requieren relogin/reinicio de Hyprland para tomar efecto — quedan exportadas al entorno de la sesión gráfica completa, no solo al proceso que las lee.

exec-once

Comandos que se ejecutan una sola vez al iniciar Hyprland:

-- Ejemplos típicos
exec-once = ags run ~/.config/ags/app.ts -i ags-bar
exec-once = bash ~/.config/wallman/restore.sh
exec-once = /usr/lib/polkit-kde-authentication-agent-1
exec-once = wl-paste --type text --watch cliphist store

keybinds.lua — Atajos de teclado

Todos los atajos usan la función hl.bind(combo, action, opts?).

Wrapper Lua de dispatch (hl.dsp.*)

Este fork de Hyprland envuelve los comandos dispatch del IPC en un intérprete Lua que espera sintaxis de llamada a función (hl.dsp.focus({workspace="2"})), no la sintaxis clásica dispatch workspace 2. Cualquier script externo (incluido AGS) que necesite despachar comandos debe usar hyprctl dispatch 'hl.dsp.<fn>({...})' con argumentos como string Lua entre comillas — el método nativo AstalHyprland.dispatch(dispatcher, args) envía la sintaxis clásica y falla con ')' expected near '2'.

Aplicaciones

Atajo Acción
SUPER + Return Kitty (terminal)
SUPER + T Kitty (terminal)
CTRL+ALT + T Kitty (terminal)
SUPER + E Thunar (explorador de archivos)
SUPER + W Firefox
SUPER + C Command Center (AGS)
SUPER + X Kate (editor de texto)
SUPER + I gnome-control-center
CTRL+SHIFT + Escape gnome-system-monitor

Lanzador

Atajo Acción
SUPER + SUPER_L (soltar) Rofi (drun) — toggle
Super_L (soltar) rofi-toggle.sh

Ventanas

Atajo Acción
SUPER + Q Cerrar ventana activa
ALT + F4 Cerrar ventana activa
SUPER+SHIFT+ALT + Q hyprctl kill (selector de ventana)
SUPER+ALT + Space Flotar/desflotar ventana
SUPER + D Maximizar (toggle)
SUPER + F Pantalla completa (toggle)
SUPER + P Pin (mantener en todos los workspaces)

Foco y movimiento

Atajo Acción
SUPER + ←/→/↑/↓ Mover foco
SUPER+SHIFT + ←/→/↑/↓ Mover ventana
SUPER + Tab Siguiente ventana

Workspaces

Atajo Acción
SUPER + 1-9 Ir a workspace 1-9
SUPER + 0 Ir a workspace 10
SUPER+SHIFT + 1-9 Mover ventana a workspace 1-9
SUPER+ALT + 1-9 Mover ventana sin seguir
CTRL+SUPER + ←/→ Workspace anterior/siguiente
SUPER + S Scratchpad (toggle)

Multimedia

Atajo Acción
XF86AudioRaiseVolume Volumen +5%
XF86AudioLowerVolume Volumen -5%
XF86AudioMute Silenciar altavoz
XF86AudioMicMute Silenciar micrófono
SUPER+SHIFT + M Silenciar altavoz
SUPER+ALT + M Silenciar micrófono
XF86MonBrightnessUp/Down Brillo +/-5%
SUPER+SHIFT + N/B/P Siguiente / anterior / play-pause

Herramientas

Atajo Acción
SUPER+SHIFT + S Captura de región
Print Captura de pantalla completa
CTRL + Print Guardar captura
SUPER+SHIFT + C Color picker (hyprpicker)
SUPER + V Historial del portapapeles
SUPER + Period Selector de emojis
SUPER + N Centro de notificaciones (AGS) — ags toggle -i ags-bar notif-center
SUPER + ' Visor de keybinds (AGS)

Sesión

Atajo Acción
SUPER + L Bloquear pantalla (hyprlock)
SUPER+SHIFT + L Suspender
CTRL+ALT + Delete Menú de sesión (AGS PowerMenu)
XF86PowerOff Menú de sesión (AGS PowerMenu)

Nota: El botón de encendido físico está configurado para NO apagar directamente. Ver systemd-logind.

systemd-logind

Para evitar que el botón físico de encendido apague el equipo independientemente de AGS:

# /etc/systemd/logind.conf.d/10-power-key.conf
[Login]
HandlePowerKey=ignore

Sin esta configuración, logind apaga el equipo y AGS muestra el menú de sesión simultáneamente.


animations.lua

Define las animaciones de apertura, cierre y movimiento de ventanas. Usa el sistema de curvas de bezier de Hyprland.


rules.lua

Define reglas que se aplican automáticamente a ventanas según su clase o título:

  • Ventanas flotantes por defecto (ej. diálogos de archivo, pavucontrol).
  • Asignación automática a workspaces.
  • Tamaño y posición inicial.

Scripts

Todos los scripts se encuentran en ~/.config/hypr/scripts/ y son ejecutables.

screenshot.sh

Captura de pantalla usando grim (captura Wayland) y slurp (selección de región).

Argumento Acción
region Seleccionar región con slurp, guardar y copiar al portapapeles
screen Pantalla completa, guardar y copiar
save Guardar en ~/Pictures/Screenshots/

Las capturas se guardan en ~/Pictures/Screenshots/Screenshot_YYYY-MM-DD_HH.MM.SS.png y se notifican via notify-send.


Portapapeles y emojis: ahora en el Dashboard AGS

Los scripts clipboard.sh (rofi + cliphist) ya no existen; el historial del portapapeles y el selector de emojis viven en el Dashboard de AGS (SUPER+SHIFT+D → Cliphist / Emoji). emoji.sh sigue existiendo para el atajo SUPER+..

emoji.sh

Selector de emojis con rofi.

  1. Si no existe ~/.config/hypr/scripts/emojis.txt, lo genera con una lista de emojis comunes.
  2. Muestra la lista en rofi.
  3. Copia el emoji seleccionado al portapapeles con wl-copy.
  4. Envía una notificación de confirmación.

powermenu.sh

Menú de sesión alternativo usando rofi puro (sin AGS). Opciones: Lock, Suspend, Logout, Reboot, Shutdown. Ejecuta los comandos correspondientes de loginctl/systemctl.

Este script coexiste con el PowerMenu.tsx de AGS. El keybind SUPER+Escape apunta a este script; CTRL+ALT+DEL usa el de AGS.


rofi-toggle.sh

Hace toggle de rofi: si ya está corriendo lo cierra, si no lo abre. Loguea en /tmp/rofi-debug.log.


Wallpapers: gestionados por wallman

Los scripts init-wallpaper.sh y wallpaper.sh ya no existen. La restauración y selección de fondos la maneja wallman (~/.config/wallman/restore.sh en exec-once, y el selector desde el Dashboard AGS o wallman/wallpicker.sh). Ver Wallman.


Pantalla de bloqueo — hyprlock

Config estática en hyprlock.conf (widgets background, image, label, input-field; hyprlock no usa style.scss — es su propio formato). Se lanza vía el wrapper, no hyprlock directo (si no, el espectro no tiene datos). Lo dispara el botón Lock de PowerMenu.tsx y el keybind SUPER+L.

Script Rol Comandos / lo que usa
hyprlock-launch.sh Wrapper: arranca el productor cava, prepara fondo, entra al submap lock, corre hyprlock, limpia al desbloquear cava (config mono raw en /tmp/hyprlock/cava.conf), grim (frame de wallpaper animado) o ffmpeg (imagen estática), lee lowEndDevice de user-settings.json, hyprctl dispatch 'hl.dsp.submap(...)'
hyprlock-cava.sh Render del espectro (label cmd[update:N]) awk genera filas Pango <span foreground> coloreadas por la carátula; lee /tmp/hyprlock/cava.dat + cava.pal; BARS= define el nº de barras (el wrapper lo lee)
hyprlock-art.sh Resuelve la carátula actual a PNG 512² + genera la paleta ffmpeg (recorte/escala), playerctl metadata; es el reload_cmd del widget image
hyprlock-meta.sh Título/artista para los labels playerctl metadata

El submap lock (definido en keybinds.lua) mapea las flechas a control de reproducción mientras la pantalla está bloqueada ({ locked = true }). El modo Low-end device de AGS también desactiva el cava de hyprlock (flag /tmp/hyprlock/lowend).


Notas y recursos