Cuando paso varias horas trabajando con Linux, la terminal termina siendo mi centro de operaciones. En una pestaña tengo una conexión SSH, en otra consulto contenedores Docker y, mientras tanto, necesito otra consola para editar archivos o ejecutar un playbook de Ansible. Kitty me permite organizar todo esto sin llenar el escritorio de ventanas.

En esta guía voy a mostrar cómo lo instalo, configuro y utilizo. Además de los comandos, he incluido esquemas de los layouts y una chuleta de atajos que se puede consultar directamente desde el blog.

Sobre los atajos: las combinaciones indicadas como predeterminadas corresponden a la configuración documentada de Kitty para Linux. Si utilizamos atajos propios o el compositor (Hyprland, KDE, etc.) captura una tecla, el resultado puede ser diferente. Los atajos personalizados aparecen señalados como tales.

1. ¿Qué es Kitty?

Kitty es un emulador de terminal acelerado mediante GPU con pestañas, paneles, temas, integración con la shell y herramientas auxiliares denominadas kittens. Funciona en Linux y macOS. En lugar de depender de varias ventanas del escritorio, puedo agrupar mis tareas en una sola instancia.

La organización tiene tres niveles:

┌──────────────── Ventana de Kitty ─────────────────────┐
│ [ Pestaña: Sistema ] [ Pestaña: Docker ] [ SSH ]      │
├────────────────────────┬──────────────────────────────┤
│ Panel 1                │ Panel 2                      │
│ $ htop                 │ $ docker compose ps          │
│                        │                              │
└────────────────────────┴──────────────────────────────┘

La ventana del sistema es la que abre el escritorio; dentro hay pestañas y cada pestaña puede contener varios paneles, que Kitty también denomina windows.

2. Instalar Kitty

En Manjaro o Arch Linux:

sudo pacman -S kitty

En Debian y Ubuntu:

sudo apt update
sudo apt install kitty

En Fedora:

sudo dnf install kitty

Comprobamos la versión y lo iniciamos:

kitty --version
kitty

En un entorno como Hyprland se puede asociar el lanzamiento de Kitty a un atajo del compositor. Ese atajo se configura en Hyprland, no en kitty.conf.

3. Configuración: kitty.conf

El archivo principal suele estar en:

~/.config/kitty/kitty.conf

Lo preparamos conservando una copia si ya existe:

mkdir -p ~/.config/kitty
[ ! -f ~/.config/kitty/kitty.conf ] || \
  cp ~/.config/kitty/kitty.conf ~/.config/kitty/kitty.conf.bak
touch ~/.config/kitty/kitty.conf

Podemos editarlo directamente o utilizar Ctrl+Shift+F2. Una configuración de partida sería:

# Fuentes (requiere tener instalada JetBrains Mono)
font_family JetBrains Mono
font_size 12.0

# Cursor e historial
cursor_shape block
cursor_blink_interval 0
scrollback_lines 10000

# Ventanas y bordes
window_padding_width 6
window_border_width 1pt
active_border_color #50fa7b
inactive_border_color #44475a

# Pestañas
tab_bar_edge bottom
tab_bar_style powerline
tab_bar_min_tabs 2

# Colores
foreground #f8f8f2
background #282a36
selection_background #44475a

# Comportamiento
enable_audio_bell no
mouse_hide_wait 3.0
shell .
shell_integration enabled

# Distribuciones disponibles: la primera es la inicial
enabled_layouts splits,tall,stack,grid,horizontal,vertical,fat

Guardo el archivo y pulso Ctrl+Shift+F5 para recargar los ajustes compatibles con recarga dinámica. Algunos cambios pueden requerir abrir una ventana nueva.

Para inspeccionar errores:

kitty --debug-config

Fuentes y colores

El tamaño de la fuente se puede modificar sin editar el archivo: Ctrl+Shift++ para aumentar, Ctrl+Shift+- para reducir y Ctrl+Shift+Backspace para restaurarlo. Dependiendo del teclado, aumentar puede utilizar la tecla =.

Kitty incluye selectores interactivos:

kitten choose-fonts
kitten themes

El primero facilita elegir una fuente instalada; el segundo permite previsualizar y aplicar esquemas de colores.

4. Pestañas y paneles

Las pestañas separan trabajos: por ejemplo, Sistema, Docker, Redes y Desarrollo. Los paneles muestran varias sesiones a la vez dentro de una pestaña.

Atajo predeterminado Acción
Ctrl+Shift+T Nueva pestaña
Ctrl+Shift+Q Cerrar pestaña
Ctrl+Shift+→ Pestaña siguiente
Ctrl+Shift+← Pestaña anterior
Ctrl+Shift+. Mover pestaña a la derecha
Ctrl+Shift+, Mover pestaña a la izquierda
Ctrl+Shift+Alt+T Cambiar el nombre de la pestaña
Ctrl+Shift+Enter Abrir panel nuevo
Ctrl+Shift+W Cerrar panel actual
Ctrl+Shift+] Panel siguiente
Ctrl+Shift+[ Panel anterior
Ctrl+Shift+1 a Ctrl+Shift+0 Ir directamente a uno de los diez primeros paneles
Ctrl+Shift+R Iniciar redimensionado del panel
Ctrl+Shift+F7 Elegir visualmente un panel
Ctrl+Shift+F8 Intercambiar paneles visualmente

Los paneles son terminales independientes. Lo que ejecuto en uno no se ejecuta automáticamente en el otro.

5. Layouts: cómo se distribuyen los paneles

Un layout es la regla que utiliza Kitty para organizar los paneles de una pestaña. El atajo predeterminado Ctrl+Shift+L recorre las distribuciones habilitadas en enabled_layouts.

Los siguientes diagramas son esquemas orientativos, no capturas exactas. Representan tres o cuatro paneles para mostrar la diferencia entre distribuciones.

Splits: divisiones libres

┌──────────────────┬────────────────────────┐
│                  │        Panel 2         │
│     Panel 1      ├───────────┬────────────┤
│                  │  Panel 3  │  Panel 4   │
└──────────────────┴───────────┴────────────┘

Es el que más me gusta para troubleshooting: puedo colocar una consola grande con SSH y dejar los logs y las comprobaciones a su lado.

Tall: panel principal lateral

┌───────────────────┬───────────────────────┐
│                   │        Panel 2        │
│      Panel 1      ├───────────────────────┤
│     principal     │        Panel 3        │
│                   ├───────────────────────┤
│                   │        Panel 4        │
└───────────────────┴───────────────────────┘

Fat: panel principal superior

┌───────────────────────────────────────────┐
│                 Panel 1                   │
│                principal                  │
├──────────────┬─────────────┬──────────────┤
│   Panel 2    │   Panel 3   │   Panel 4    │
└──────────────┴─────────────┴──────────────┘

Grid: cuadrícula

┌────────────────────┬──────────────────────┐
│      Panel 1       │       Panel 2        │
├────────────────────┼──────────────────────┤
│      Panel 3       │       Panel 4        │
└────────────────────┴──────────────────────┘

Stack: un panel visible cada vez

┌───────────────────────────────────────────┐
│                                           │
│               PANEL ACTIVO                │
│                                           │
└───────────────────────────────────────────┘
  Otros paneles existentes: 2 · 3 · 4

Los demás paneles siguen abiertos; cambiamos cuál se muestra.

Horizontal: paneles lado a lado

┌──────────────┬──────────────┬─────────────┐
│              │              │             │
│   Panel 1    │   Panel 2    │   Panel 3   │
│              │              │             │
└──────────────┴──────────────┴─────────────┘

Vertical: paneles apilados

┌───────────────────────────────────────────┐
│                  Panel 1                  │
├───────────────────────────────────────────┤
│                  Panel 2                  │
├───────────────────────────────────────────┤
│                  Panel 3                  │
└───────────────────────────────────────────┘

Dividir en una dirección concreta

En el layout splits puedo indicar directamente la orientación. Añado estos atajos personalizados a kitty.conf:

# Paneles lado a lado
map ctrl+alt+v launch --location=vsplit --cwd=current

# Paneles uno encima de otro
map ctrl+alt+b launch --location=hsplit --cwd=current

He reservado Ctrl+Alt+B para el segundo atajo porque más adelante utilizaré Ctrl+Alt+H para moverme hacia la izquierda. De este modo no hay conflictos.

--cwd=current solicita abrir el nuevo panel en el directorio de trabajo del panel activo, cuando Kitty puede detectarlo.

6. Navegar y redimensionar paneles al estilo Vim

Si utilizamos Vim o Neovim, podemos aprovechar el movimiento con H, J, K y L. Estos atajos no son predeterminados; hay que añadirlos:

map ctrl+alt+h neighboring_window left
map ctrl+alt+j neighboring_window down
map ctrl+alt+k neighboring_window up
map ctrl+alt+l neighboring_window right

Ahora Ctrl+Alt+H lleva al panel de la izquierda, J al inferior, K al superior y L al derecho. Resulta especialmente cómodo con splits.

7. Historial y salida de comandos

En administración de sistemas es habitual ejecutar comandos que devuelven cientos de líneas. Kitty permite recorrer ese historial y, con la integración de la shell, distinguir dónde empieza y termina cada comando.

Atajo predeterminado Acción
Ctrl+Shift+↑ Subir una línea
Ctrl+Shift+↓ Bajar una línea
Ctrl+Shift+PageUp Subir una página
Ctrl+Shift+PageDown Bajar una página
Ctrl+Shift+Home Ir al inicio del historial
Ctrl+Shift+End Ir al final del historial
Ctrl+Shift+H Abrir el historial en el paginador
Ctrl+Shift+G Abrir la salida del último comando
Ctrl+Shift+Z Ir al prompt anterior
Ctrl+Shift+X Ir al prompt siguiente

Por ejemplo, tras ejecutar:

docker compose logs --tail=300 flask

Puedo utilizar Ctrl+Shift+G para consultar la salida del último comando en un paginador, si la integración con la shell está funcionando. Si quiero buscar texto en el historial, abro el paginador con Ctrl+Shift+H y utilizo sus herramientas de búsqueda (por ejemplo / en less).

Integración con Bash y Zsh

shell_integration enabled

Kitty soporta integración con shells habituales, incluidas Bash, Zsh y Fish. No sustituye a Oh My Zsh: ambos pueden coexistir.

Para comprobar la shell configurada y el proceso en ejecución:

echo "$SHELL"
ps -p $$ -o comm=

8. Copiar, pegar y seleccionar información

Atajo predeterminado Acción
Ctrl+Shift+C Copiar la selección
Ctrl+Shift+V Pegar desde el portapapeles
Ctrl+Shift+S Pegar la selección primaria en Linux
Ctrl+Shift+E Seleccionar y abrir una URL visible
Ctrl+Shift+P, luego F Elegir una ruta visible e insertarla
Ctrl+Shift+P, luego L Elegir una línea e insertarla
Ctrl+Shift+P, luego H Elegir un hash visible e insertarlo
Ctrl+Shift+U Selector Unicode

Las combinaciones con coma son secuencias, no teclas que se pulsen a la vez. Por ejemplo, primero Ctrl+Shift+P y después F.

Para copiar texto desde un comando también existe el kitten clipboard:

echo 'Prueba desde Kitty' | kitten clipboard
kitten clipboard --get-clipboard

La lectura del portapapeles puede requerir autorización según la configuración de seguridad.

9. Kittens: herramientas extra

Los kittens son programas que amplían las posibilidades de Kitty. Estos son los que más sentido tienen en mi trabajo.

Visualizar imágenes con icat

kitten icat captura.png
kitten icat topologia.jpg

Muy útil para revisar capturas, imágenes de un laboratorio o recursos gráficos sin abandonar la terminal. Funciona donde esté disponible el protocolo gráfico de Kitty.

Comparar archivos con diff

kitten diff nginx.conf.bak nginx.conf
kitten diff configuracion_v1/ configuracion_v2/

Lo utilizo para revisar qué ha cambiado entre configuraciones sin modificar los originales.

Cambiar tema y fuente

kitten themes
kitten choose-fonts

Seleccionar caracteres especiales

kitten unicode_input

SSH con integración de Kitty

kitten ssh usuario@servidor

Además de abrir una conexión SSH, este kitten puede preparar determinadas funciones de integración en el host remoto. Si una máquina muestra errores con TERM=xterm-kitty, conviene revisar su configuración terminfo o probar este método, en lugar de modificar TERM permanentemente sin diagnosticar la causa.

10. Guardar sesiones de trabajo

Una sesión de Kitty define qué pestañas abrir, los layouts y los programas iniciales. Para mi trabajo resulta útil tener un espacio con sistema local, monitorización y Docker.

Creamos el directorio y el archivo:

mkdir -p ~/.config/kitty/sessions
nano ~/.config/kitty/sessions/sysadmin.kitty

Contenido:

# Entorno de trabajo de sysadmin

new_tab Sistema
layout splits
launch
launch --location=vsplit

new_tab Monitorizacion
layout tall
launch htop

new_tab Docker
layout splits
launch docker stats

new_tab Consola
launch

focus_tab 0

Ejecutamos:

kitty --session ~/.config/kitty/sessions/sysadmin.kitty

Hay que tener instalados htop y Docker para ese ejemplo. docker stats permanece actualizando información; un comando corto como docker ps terminaría inmediatamente, por lo que no es ideal como único proceso de un panel que queremos mantener abierto.

Si queremos abrir una pestaña ya situada en un proyecto, podemos definir un directorio de trabajo en la sesión:

new_tab Ansible
cd /home/usuario/proyectos/ansible-lab
launch

Sustituiremos la ruta por la del equipo donde se ejecute.

11. Control remoto: automatizar pestañas y paneles

Kitty incluye una interfaz de control remoto. Para probarla sin cambiar la configuración habitual, inicio una nueva instancia de pruebas:

kitty -o allow_remote_control=yes

Dentro de esa instancia:

# Mostrar pestañas y paneles (JSON)
kitten @ ls

# Crear panel
kitten @ launch

# Crear pestaña
kitten @ launch --type=tab

# Asignar título a la pestaña actual
kitten @ set-tab-title 'Administración'

No conviene habilitar el control remoto de manera indiscriminada, ya que permite actuar sobre sesiones y ejecutar procesos. Si vamos a utilizarlo habitualmente, debemos revisar las opciones de autorización y restringir su alcance.

12. Transparencia y terminal de acceso rápido

Si el compositor gráfico lo permite, podemos ajustar la transparencia:

background_opacity 0.92
dynamic_background_opacity yes

El valor 1.0 representa opacidad completa. En Hyprland o KDE Plasma el resultado también depende de las reglas del compositor.

En versiones compatibles de Kitty podemos lanzar una terminal de acceso rápido mediante:

kitten quick-access-terminal

Para abrirla con una tecla global, esa combinación debe configurarse en el compositor o escritorio, no solo en kitty.conf. La compatibilidad depende de la versión de Kitty y del entorno gráfico.

13. Ejemplo de uso: diagnóstico con Docker y SSH

Pongamos un caso habitual: estoy revisando un servicio Flask que se ejecuta en Docker en un servidor remoto.

Abro una pestaña Servidor con dos paneles. En el primero me conecto al host:

ssh usuario@servidor

Dentro de la conexión consulto los contenedores:

docker ps

En el segundo panel abro otra conexión SSH al mismo host y sigo los registros:

ssh usuario@servidor
# Una vez dentro del servidor:
docker compose logs -f --tail=100 flask

Dejo una pestaña adicional para el entorno local, desde donde puedo hacer comprobaciones HTTP:

curl -I https://ejemplo.com

La distribución puede ser así:

┌──────── Pestaña: Servidor ────────────────────────────┐
│                                                       │
│  SSH 1: estado              SSH 2: seguimiento        │
│ ┌───────────────────────┬──────────────────────────┐  │
│ │ $ docker ps           │ $ docker compose logs -f │  │
│ │                       │                          │  │
│ └───────────────────────┴──────────────────────────┘  │
├───────────────────────────────────────────────────────┤
│ Pestaña adicional: Local → curl, Git, Ansible         │
└───────────────────────────────────────────────────────┘

No hace falta que todo pase por una única sesión SSH. Esta organización me permite aislar las tareas y revisar resultados sin perder de vista los registros.

14. Chuleta completa de atajos

Esta es mi referencia rápida. Todas las combinaciones de este apartado son las predeterminadas de Kitty para Linux, salvo que el escritorio, la versión o nuestra configuración las modifiquen.

Pestañas, ventanas y paneles

Atajo Función
Ctrl+Shift+N Nueva ventana del sistema
Ctrl+Shift+Enter Nuevo panel
Ctrl+Shift+W Cerrar panel
Ctrl+Shift+T Nueva pestaña
Ctrl+Shift+Q Cerrar pestaña
Ctrl+Shift+→ / Ctrl+Tab Pestaña siguiente
Ctrl+Shift+← / Ctrl+Shift+Tab Pestaña anterior
Ctrl+Shift+. Mover pestaña hacia delante
Ctrl+Shift+, Mover pestaña hacia atrás
Ctrl+Shift+Alt+T Renombrar pestaña
Ctrl+Shift+] Panel siguiente
Ctrl+Shift+[ Panel anterior
Ctrl+Shift+1 ... Ctrl+Shift+0 Ir al panel 1 ... 10
Ctrl+Shift+R Redimensionar panel
Ctrl+Shift+F7 Seleccionar panel
Ctrl+Shift+F8 Intercambiar paneles
Ctrl+Shift+L Cambiar layout

Historial y prompts

Atajo Función
Ctrl+Shift+↑ / ↓ Desplazar una línea
Ctrl+Shift+PageUp / PageDown Desplazar una página
Ctrl+Shift+Home / End Inicio / final del historial
Ctrl+Shift+H Abrir historial en paginador
Ctrl+Shift+G Consultar salida del último comando
Ctrl+Shift+Z / X Prompt anterior / siguiente

Edición, selección y apariencia

Atajo Función
Ctrl+Shift+C Copiar
Ctrl+Shift+V Pegar
Ctrl+Shift+S Pegar selección primaria
Ctrl+Shift+E Abrir URL visible mediante hints
Ctrl+Shift+P, luego F Insertar ruta visible
Ctrl+Shift+P, luego L Insertar línea visible
Ctrl+Shift+P, luego H Insertar hash visible
Ctrl+Shift+U Selector Unicode
Ctrl+Shift++ Aumentar fuente
Ctrl+Shift+- Reducir fuente
Ctrl+Shift+Backspace Restaurar fuente

Ayuda y configuración

Atajo Función
Ctrl+Shift+F1 Documentación
Ctrl+Shift+F2 Editar configuración
Ctrl+Shift+F3 Paleta de comandos
Ctrl+Shift+F5 Recargar configuración
Ctrl+Shift+F6 Depurar configuración
Ctrl+Shift+F10 Maximizar
Ctrl+Shift+F11 Pantalla completa
Ctrl+Shift+Esc Shell interactiva de Kitty

Atajos personalizados de este tutorial

Atajo Acción Configuración
Ctrl+Alt+V Split lado a lado map ctrl+alt+v launch --location=vsplit --cwd=current
Ctrl+Alt+B Split uno encima de otro map ctrl+alt+b launch --location=hsplit --cwd=current
Ctrl+Alt+H Ir a la izquierda map ctrl+alt+h neighboring_window left
Ctrl+Alt+J Ir abajo map ctrl+alt+j neighboring_window down
Ctrl+Alt+K Ir arriba map ctrl+alt+k neighboring_window up
Ctrl+Alt+L Ir a la derecha map ctrl+alt+l neighboring_window right

15. Chuleta de comandos

Comando ¿Para qué sirve?
kitty --version Ver versión
kitty --debug-config Diagnosticar configuración
kitten themes Cambiar tema
kitten choose-fonts Elegir fuentes
kitten icat imagen.png Mostrar una imagen
kitten diff a.conf b.conf Comparar dos archivos
kitten ssh usuario@host SSH con integración de Kitty
kitten clipboard Copiar entrada estándar al portapapeles
kitten clipboard --get-clipboard Leer portapapeles
kitten unicode_input Selector Unicode
kitten quick-access-terminal Terminal rápida, si es compatible
kitty --session sesion.kitty Iniciar sesión predefinida
kitten @ ls Listar paneles mediante control remoto
kitten @ launch Nuevo panel por control remoto
kitten @ launch --type=tab Nueva pestaña por control remoto

16. Problemas habituales

Síntoma Qué revisar
No se aplican los cambios Ctrl+Shift+F5, kitty --debug-config o abrir otra ventana
Una tecla no funciona Configuración de Kitty y atajos globales de KDE/Hyprland
Una fuente no aparece Instalación y nombre exacto de la fuente
Una división queda en otra posición Layout activo, especialmente splits
El historial no reconoce comandos shell_integration y shell utilizada
SSH muestra unknown terminal type Definición terminfo en el host remoto o kitten ssh
No aparece la transparencia Compositor y ajustes background_opacity
kitten @ da error Autorización del control remoto

17. ¿Kitty sustituye a tmux?

Para trabajar localmente con pestañas y paneles, muchas veces Kitty es suficiente. Pero Kitty por sí solo no mantiene una sesión interactiva viva en un servidor después de desconectarnos por SSH. Si necesito dejar procesos interactivos ejecutándose y volver a ellos desde otra conexión, utilizo tmux en el host remoto. De hecho, Kitty y tmux pueden utilizarse juntos.

Mi criterio es sencillo: Kitty organiza mi terminal local; tmux conserva sesiones remotas cuando necesito esa persistencia.

18. Referencias