Hyprland — Recetas de configuración
Recetario vivo de los ajustes concretos que voy aplicando. Cada receta: qué hace, en qué archivo, y el código. Regla de oro: siempre edito en
~/.config/hypr/UserConfigs/(losconfigs/se sobrescriben al actualizar). Aplicar cambios →hyprctl reload.
Estructura de la config (KooL)
Dos capas, la tuya gana porque se carga después:
~/.config/hypr/configs/→ defaults de KooL. No tocar (se sobrescriben al actualizar).~/.config/hypr/UserConfigs/→ tu capa. Aquí editas todo. Se conserva.
→ teoría completa en.
Recetas aplicadas (2026-06-12)
Gaps + borde de color · UserSettings.conf
general {
gaps_in = 5 # separación ENTRE ventanas
gaps_out = 12 # separación con el borde de pantalla
border_size = 2
col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg # degradado en la ventana activa
col.inactive_border = rgba(595959aa)
}- Color =
rgba(RRGGBBAA), dos colores + ángulo = degradado.
Ventanas nuevas a la derecha · UserSettings.conf
dwindle {
force_split = 2 # 0=auto · 1=izq/arriba · 2=der/abajo
}Apps en su workspace al iniciar · Startup_Apps.conf
exec-once = [workspace 1 silent] kitty
exec-once = [workspace 2 silent] google-chrome-stable
exec-once = [workspace 5 silent] code
exec-once = [workspace 4 silent] spotify[workspace N silent]= ábrelo en el ws N sin saltar la vista.
Spotify siempre en el ws4 · WindowRules.conf
windowrule = match:class ^(Spotify)$, workspace 4 silent- Sintaxis 0.55:
windowrule = match:<campo> <valor>, <acción>(elmatch:PRIMERO). La sintaxis viejawindowrule = <acción>, class:^(X)$ya no vale. - Para saber el
classde una app:hyprctl clients.
→ más reglas en.
WhatsApp (PWA Chrome) siempre en ws5 · WindowRules.conf
windowrule = match:class ^(chrome-hnpfjngllnobngcgfapefoaidbinmjnm-Default)$, workspace 5 silentObsidian siempre en ws3 · Startup_Apps.conf + WindowRules.conf
exec-once = [workspace 3 silent] obsidian
windowrule = match:class ^(obsidian)$, workspace 3 silentAtajo propio: abrir Google · UserKeybinds.conf
bind = $mainMod SHIFT, B, exec, google-chrome-stable --new-window https://www.google.combind = MODS, TECLA, exec, COMANDO. Antes verifica que la tecla esté libre (SHIFT+G ya era “game mode” de KooL).- Para mover la ventana enfocada a otro workspace: SUPER+SHIFT+<número> (
movetoworkspace).
Fixes / gotchas
- Errores de config al instalar (
misc:vfr,dwindle:pseudotile,togglesplit): opciones que 0.55 renombró/quitó. Comentadas. →. - Terminal nueva “se pone encima”: era el scratchpad (ws especial -98) visible. SUPER+SHIFT+Enter lo oculta y el tiling vuelve a la normalidad. No era un fallo de config.
Conexiones
Visualizador cava junto a Spotify (ws4) · Startup_Apps.conf + UserKeybinds.conf
# Arranque: cava grande en el ws4 (al lado de Spotify)
exec-once = [workspace 4 silent] kitty --class cava -o font_size=20 cava
# Atajo para abrirlo rápido donde estés
bind = $mainMod SHIFT, V, exec, kitty --class cava -o font_size=20 cava- cava = visualizador de espectro (FFT del audio que suena). Corre en una kitty;
font_sizegrande = barras más gordas.
Lección: colocar apps por workspace al iniciar
El prefijo exec-once = [workspace N silent] app falla con apps que se re-lanzan en otro proceso (Chrome, Electron/VS Code): Hyprland pierde la pista del PID y la ventana cae en el workspace activo. Solución fiable: regla de ventana por clase.
windowrule = match:class ^(google-chrome)$, workspace 2 silent
windowrule = match:class ^(code)$, workspace 5 silent- Clase de VS Code =
code(minúscula). Verifica siempre conhyprctl clients. - Apps “normales” (kitty) sí funcionan con el prefijo; las raras necesitan regla.
Lector de libros Foliate (PDF/EPUB) en ws7
# Regla: Foliate siempre al workspace 7 (cada libro abre en su propia ventana)
windowrule = match:class ^(com\.github\.johnfactotum\.Foliate)$, workspace 7 silent- Foliate instalado por Flatpak (
com.github.johnfactotum.Foliate) +flatpak override --user --filesystem=home. - Por defecto para
application/pdfyapplication/epub+zip(xdg-mime default). - Gestor de archivos cambiado a Nautilus (SUPER+E). Biblioteca en
~/Libros(SUPER+SHIFT+L).
Widget Pomodoro en waybar
- Script:
~/.config/hypr/UserScripts/Pomodoro.sh(status/toggle/reset/skip; estado en~/.cache/pomodoro.state). - Módulo
custom/pomodoroen~/.config/waybar/UserModules, añadido amodules-leftdel bar activo. - CSS (rojo trabajo / verde descanso) en
style.css. Clic=iniciar/pausar, der=reset, medio=saltar. 25/5, largo 15 cada 4.
Widget flotante Pomodoro (Python+GTK) en ws7
- App:
~/.config/hypr/UserScripts/pomodoro_widget.py(GTK3). Comparte estado con la barra víaPomodoro.sh(set/toggle/reset/skip). - Reglas (clase
pomodoro-widget):float on,size 420 360,center on,workspace 7 silent. - Toggle:
pomodoro_widget_toggle.sh→ SUPER+SHIFT+D. - Sintaxis 0.55: las reglas booleanas son
float on/center on(con “on”), nofloat/centera secas.
Widget flotante Vinilo (now playing, Python+GTK+cairo)
- App:
~/.config/hypr/UserScripts/vinyl_widget.py. Coge la carátula víaplayerctl(mpris:artUrl), la descarga y la pinta como disco que gira con cairo mientras suena (se para al pausar). Título/artista + controles . - Reglas (clase
vinyl-widget):float on,size 300 440,center on(sin workspace fijo → aparece donde estés). - Toggle:
vinyl_widget_toggle.sh→ SUPER+SHIFT+Y.
Vinilo v2: flotante, disco + cava, fluido
- Ahora flotante (no fullscreen):
float on,size 720 480,center on. - Incorpora cava integrado (lee
~/.config/cava/config-rawen modo raw/ascii y dibuja las barras al lado del disco). - Fluidez: los metadatos (
playerctl metadata) se leen en un hilo aparte + carátula en hilo → el hilo gráfico (rotación 60 fps) nunca se bloquea. - Bug que tuve:
playerctl -Fsin el subcomandometadatada error de uso → usarplayerctl metadata [--format ...].
Alias de Claude · .bashrc
alias cl='claude'
alias clc='claude --continue'Vinilo con tamaño condicional (toggle inteligente)
vinyl_widget_toggle.shcuenta ventanas del workspace activo (hyprctl activeworkspace -j→windows) ANTES de abrir.- Solo (0 otras) → grande
resizewindowpixel exact 1720 960+ centrado. Con compañía → pequeño460 340en esquina. - Regla estática solo
float on; el tamaño/posición lo pone el script conhyprctl dispatch resizewindowpixel/movewindowpixel ... ,address:$addr. - GTK no encoge una ventana por debajo del mínimo de su contenido → bajar los
set_size_requestdel disco/cava para poder hacerlo pequeño.
Alias bóveda + vinilo 50/50
.bashrc:alias obs='cd <ruta-vault>'(saltar a la bóveda). Evitarobsidian(lanza la app).- Vinilo:
top = Gtk.Box(..., homogeneous=True)yset_size_requestiguales en disco y cava → celdas 50/50 exactas en grande y pequeño. - Al probar widgets desde un shell efímero, lánzalos con
setsid(o vía keybind de Hyprland) o mueren por SIGHUP al salir el shell.
Kitty makeover + grabador de pantalla
- Kitty:
~/.config/kitty/current-theme.conf(Catppuccin Mocha) + bloque enkitty.conf(include current-theme.conf,background_opacity 0.85,window_padding_width 12, pestañas powerline,cursor_shape beam). Recargar:pkill -SIGUSR1 -x kitty.cursor_trailrequiere kitty ≥0.36. - Grabar pantalla:
~/.config/hypr/UserScripts/RecordToggle.sh(toggle wf-recorder, SIGINT para finalizar el mp4) → guarda en~/Videos/Grabaciones. Atajo SUPER+ALT+G. Requieresudo apt install wf-recorder. Zona conwf-recorder -g "$(slurp)", audio con--audio.
Widget Sistema Solar (JS + HTML5 Canvas, modo app de Chrome)
~/.config/hypr/UserScripts/solar-widget/index.html(canvas autocontenido: órbitas a velocidad angular ∝ 1/periodo real, sombra día/noche con gradiente, estilo cartoon, slider de velocidad ×0–×5).- Se abre como app con
google-chrome-stable --app=file://.../index.html(ventana sin pestañas) +.desktop“Sistema Solar” en el lanzador. - Chrome ignora
--classen modo app → la clase real eschrome-<ruta>-Default; capturada conhyprctl clientsy usada en la regla (float on,size 660 730,center on). - Toggle:
solar_toggle.sh(closewindow si abierto, lanzar si no) → SUPER+ALT+S. - Lección: para widgets GRÁFICOS/animados, JS+Canvas en ventana app de Chrome > Python+GTK (animación, gradientes y iteración visual mucho más fáciles; previsualizas en el navegador). AGS no aporta para canvas.