Instalas Claude Code. Lo ejecutas desde tu terminal por defecto. La fuente es pequena, el fondo es un negro plano sin profundidad, no tienes atajos para dividir la pantalla en paneles. Intentas tener Claude Code en un lado y un shell normal en el otro, pero tu emulador no soporta splits. Abres otra ventana, alternas con Alt+Tab, pierdes el contexto cada vez que cambias. Claude Code genera una salida larga, haces scroll hacia arriba y el buffer ya ha descartado las primeras lineas. Copias un comando de la respuesta de Claude, lo pegas, y se ejecuta antes de que te de tiempo a revisarlo.
La terminal por defecto no esta pensada para esto. Esta pensada para ejecutar ls, leer un log, lanzar un script corto. No esta pensada para mantener sesiones de horas con un agente de IA que lee, escribe y ejecuta codigo continuamente. Necesitas algo mejor.
Dani Avila publico una configuracion de Ghostty para macOS con un sistema de atajos que llamo SAND (Split, Across, Navigate, Destroy) que me parecio elegante. Su repositorio fue mi punto de partida. Pero yo uso Linux, no macOS, y mi flujo de trabajo con Claude Code tiene necesidades diferentes. Esta es mi version, explicada opcion por opcion.
Por que Ghostty y no otro emulador
En Linux hay cuatro emuladores de terminal serios para desarrollo. Antes de explicar por que elegi Ghostty, esta es la comparativa rapida:
| Alacritty | Kitty | WezTerm | Ghostty | |
|---|---|---|---|---|
| Splits nativos | No | Si | Si | Si |
| Pestanas | No | Si | Si | Si |
| GPU-accelerated | Si | Si | Si | Si |
| Formato de config | TOML | kitty.conf | Lua | Texto plano |
| Terminal rapida (Quake) | No | No | No | Si |
| Complejidad de config | Baja | Alta | Media-alta | Baja |
Alacritty es rapido y minimalista. Demasiado minimalista. No tiene pestanas ni splits nativos. Si quieres dividir la terminal necesitas tmux o un multiplexor externo. Funciona, pero anadir una capa de software entre tu emulador y tus paneles es complejidad innecesaria cuando otros emuladores lo traen de serie.
Kitty es potente. Tiene splits, pestanas, protocolo de imagenes propio, y un sistema de extensiones con kittens. El problema es la configuracion. El fichero kitty.conf tiene cientos de opciones con valores por defecto que hay que conocer para no pisar. No es dificil, pero si tedioso para empezar.
WezTerm se configura en Lua. Si necesitas logica condicional en la configuracion (cambiar fuente segun el hostname, activar opciones segun el sistema operativo), Lua es una ventaja. Si no necesitas nada de eso, aprender un lenguaje de programacion para configurar un terminal es desproporcionado.
Ghostty se configura con un archivo de texto plano. Una opcion por linea, sin anidamiento, sin llaves, sin comillas obligatorias. Lo escribe Mitchell Hashimoto, cofundador de HashiCorp (Vagrant, Terraform, Vault). Esta escrito en Zig, usa renderizado GPU, tiene splits y pestanas nativos, terminal rapida tipo Quake, y el fichero de configuracion entero cabe en una pantalla. Es la simplicidad como ventaja competitiva.
Tipografia: JetBrains Mono con Nerd Fonts
font-family = JetBrainsMonoNerdFont
font-size = 14
font-thicken = true
adjust-cell-height = 2
JetBrains Mono es una fuente monoespaciada disenada especificamente para programar. Tiene ligaduras que convierten != en un simbolo de desigualdad, => en una flecha, <= en menor-o-igual. No cambian el codigo, solo mejoran la lectura. La version Nerd Font anade cientos de iconos que herramientas como eza (sustituto moderno de ls), Starship (prompt) y otros programas de terminal usan para mostrar informacion visual.
El tamano 14 es un equilibrio entre legibilidad y densidad de informacion. En un monitor de 1080p a distancia normal de escritorio, 14 puntos es legible sin desperdiciar espacio.
font-thicken = true engrosa ligeramente los trazos de la fuente. En monitores de baja densidad de pixeles, que en Linux con pantallas de 1080p son la norma, las fuentes finas pueden verse difuminadas. Este ajuste compensa sin llegar a parecer negrita.
adjust-cell-height = 2 anade 2 pixeles de espacio vertical entre lineas. Cuando trabajas con Claude Code lees mucho texto de golpe: explicaciones, bloques de codigo, diffs. Ese espacio extra reduce la fatiga visual en sesiones largas sin romper la alineacion de la cuadricula del terminal.
Tema dual: Catppuccin que sigue al sistema
theme = light:Catppuccin Latte,dark:Catppuccin Mocha
background-opacity = 0.9
background-blur-radius = 20
window-padding-x = 10
window-padding-y = 8
window-save-state = always
window-theme = auto
Catppuccin no es un tema mas. Es una paleta de colores con cuatro variantes (Latte, Frappe, Macchiato, Mocha) disenada para mantener contraste legible en ambos modos. Tiene ports para practicamente todo: terminales, editores, navegadores, temas GTK, extensiones de VS Code. Si usas Catppuccin en Ghostty, puedes usar Catppuccin en el resto de tu entorno y todo queda visualmente coherente.
La sintaxis light:Catppuccin Latte,dark:Catppuccin Mocha le dice a Ghostty que detecte el tema del sistema operativo. En GNOME o KDE, cuando cambias a modo oscuro, Ghostty cambia automaticamente a Mocha. Cuando vuelves al modo claro, cambia a Latte. Sin tocar el fichero de configuracion, sin reiniciar. window-theme = auto aplica el mismo comportamiento a la decoracion de la ventana (barra de titulo).
El fondo translucido con background-opacity = 0.9 deja ver un 10% de lo que hay detras de la terminal. No es decoracion. Con Claude Code ejecutando operaciones que tardan varios segundos, a veces necesitas comprobar algo en la ventana de debajo (un navegador con documentacion, un editor con el fichero abierto) sin hacer Alt+Tab. El blur de 20 pixeles (background-blur-radius = 20) difumina lo que hay detras lo suficiente para que no distraiga pero suficiente para distinguir formas y colores.
El padding horizontal de 10 pixeles y vertical de 8 evita que el texto pegue contra los bordes de la ventana. Parece un detalle menor, pero despues de horas mirando la terminal se nota la diferencia.
window-save-state = always es critico. Al cerrar Ghostty y volver a abrirlo, restaura todas las pestanas, todos los splits y sus posiciones. Si tienes un layout con Claude Code a la izquierda y un shell a la derecha, al dia siguiente abres Ghostty y esta exactamente como lo dejaste. Sin reconstruir el layout cada manana.
Cursor y raton: detalles que importan
cursor-style = bar
cursor-style-blink = true
cursor-opacity = 0.8
mouse-hide-while-typing = true
copy-on-select = clipboard
El cursor de barra es mas fino que el bloque clasico. En una terminal donde lees mas de lo que escribes, un bloque grande tapando el caracter actual es una distraccion innecesaria. La barra indica la posicion sin ocultar texto.
cursor-opacity = 0.8 lo hace ligeramente translucido. No es invisible, pero tampoco es un bloque solido parpadeando al 100% de opacidad compitiendo por tu atencion con el codigo que intentas leer.
mouse-hide-while-typing oculta el cursor del raton en cuanto pulsas una tecla. Cuando estas en medio de una conversacion con Claude Code, el puntero del raton quieto en mitad de la pantalla es ruido visual. Se reactiva en cuanto mueves el raton.
copy-on-select = clipboard es el cambio mas productivo de esta lista. Seleccionas texto con el raton y ya esta copiado al portapapeles. Sin Ctrl+Shift+C intermedio. Claude Code muestra paths de archivos, nombres de funciones, comandos sugeridos. Seleccionas, cambias al otro panel, pegas. Dos acciones en vez de tres, multiplicado por docenas de veces al dia.
Terminal rapida: Quake mode para Claude Code
quick-terminal-position = top
quick-terminal-screen = mouse
quick-terminal-autohide = true
quick-terminal-animation-duration = 0.15
El nombre viene del juego Quake (1996), donde la consola del juego se desplegaba desde el borde superior de la pantalla pulsando la tecla tilde. La idea es la misma: una terminal que aparece y desaparece con un atajo global sin ocupar espacio permanente en tu escritorio.
quick-terminal-position = top la despliega desde el borde superior. Ghostty soporta bottom, left, right y center, pero la posicion superior es la clasica y la que menos interfiere con el contenido de la pantalla.
quick-terminal-screen = mouse la posiciona en el monitor donde esta el raton. Importante si trabajas con dos pantallas: la terminal rapida aparece donde estas mirando, no en un monitor fijo.
quick-terminal-autohide = true la esconde automaticamente al hacer clic fuera de ella. No tienes que cerrarla manualmente ni pulsar el atajo otra vez.
quick-terminal-animation-duration = 0.15 son 150 milisegundos de animacion. Suficiente para que el movimiento sea fluido, no tan lento como para sentir retardo.
El atajo global se configura aparte:
keybind = global:ctrl+grave_accent=toggle_quick_terminal
ctrl+grave_accent es Ctrl mas la tecla a la izquierda del 1 (el acento grave, `). El prefijo global: significa que funciona desde cualquier aplicacion, no solo cuando Ghostty tiene el foco.
El caso de uso con Claude Code es directo. Estas en VS Code revisando un fichero que Claude ha modificado. Necesitas preguntarle algo sin perder de vista el codigo. Ctrl+`, la terminal cae desde arriba, escribes la pregunta, Claude responde, haces clic en VS Code y la terminal desaparece. Sin Alt+Tab, sin cambiar de escritorio virtual, sin perder el contexto visual.
En Linux, antes de Ghostty, la unica forma de conseguir esto era con terminales especializadas como Guake o Yakuake. Ghostty lo integra como una funcionalidad mas del emulador, sin instalar nada adicional.
Atajos de teclado: ctrl+shift para no pelear con GNOME
En macOS, los atajos de aplicacion usan la tecla Cmd. La configuracion original de Dani Avila mapea todo a Cmd porque en macOS esa tecla no colisiona con el escritorio. En Linux la equivalente seria Super (la tecla de Windows), pero GNOME captura las combinaciones con Super a nivel de compositor: super+d muestra el escritorio, super+shift+flechas mueve ventanas entre monitores, super+alt+flechas cambia de workspace. Ghostty nunca recibe esos atajos.
La solucion es usar ctrl+shift como modificador base. No colisiona con GNOME ni con los atajos del shell (Ctrl+C, Ctrl+D, Ctrl+Z), y es el patron que usan la mayoria de emuladores de terminal en Linux.
Pestanas:
keybind = ctrl+shift+t=new_tab
keybind = ctrl+shift+left=previous_tab
keybind = ctrl+shift+right=next_tab
keybind = ctrl+shift+w=close_surface
ctrl+shift+t abre una pestana nueva. ctrl+shift+w cierra la pestana o el panel activo. ctrl+shift+izquierda/derecha navega entre pestanas.
Paneles (splits):
keybind = ctrl+shift+d=new_split:right
keybind = ctrl+shift+enter=new_split:down
keybind = ctrl+shift+h=goto_split:left
keybind = ctrl+shift+l=goto_split:right
keybind = ctrl+shift+k=goto_split:top
keybind = ctrl+shift+j=goto_split:bottom
ctrl+shift+d divide el panel actual hacia la derecha. ctrl+shift+enter lo divide hacia abajo. Para moverte entre paneles, h/j/k/l con ctrl+shift: la misma logica que en Vim. h izquierda, l derecha, k arriba, j abajo. Si usas Vim o Neovim, ya los tienes memorizados.
Gestion de paneles:
keybind = ctrl+shift+e=equalize_splits
keybind = ctrl+shift+f=toggle_split_zoom
ctrl+shift+e iguala el tamano de todos los paneles. Util cuando un panel ha crecido demasiado porque necesitabas mas espacio temporal. ctrl+shift+f hace zoom en el panel activo: lo expande a pantalla completa. Pulsa otra vez y vuelve al tamano original.
Tamano de fuente:
keybind = ctrl+plus=increase_font_size:1
keybind = ctrl+minus=decrease_font_size:1
keybind = ctrl+zero=reset_font_size
Los mismos atajos que en un navegador. ctrl+0 restaura el tamano por defecto.
Utilidades:
keybind = ctrl+shift+comma=reload_config
Recargar la configuracion sin reiniciar Ghostty. Cambias algo en el fichero, pulsas ctrl+shift+, y el cambio se aplica inmediatamente. Util cuando estas ajustando colores, tamanos o atajos.
Dani Avila usaba el sistema SAND donde cada letra representa una accion: S para Split, A para Across (pestanas), N para Navigate (paneles), D para Destroy (cerrar). Es un mnemonico elegante pensado para macOS con Cmd. Mi enfoque usa ctrl+shift como base y h/j/k/l estilo Vim para la navegacion de paneles, porque en Linux con GNOME es la combinacion que funciona sin conflictos. Son filosofias diferentes, ninguna es mejor que la otra.
Seguridad y rendimiento
clipboard-paste-protection = true
clipboard-paste-bracketed-safe = true
shell-integration = detect
scrollback-limit = 25000000
clipboard-paste-protection es la opcion que mas agradeces el dia que te salva. Cuando pegas texto que contiene saltos de linea, pipes, sudo o cualquier cosa potencialmente peligrosa, Ghostty muestra una advertencia antes de enviarlo a la terminal. Con Claude Code copias y pegas constantemente: comandos sugeridos, paths, fragmentos de codigo. Si por error tienes algo peligroso en el portapapeles y lo pegas sin mirar, esta proteccion te frena.
clipboard-paste-bracketed-safe anade una segunda capa. Usa “bracketed paste mode” para enviar marcadores al shell indicando que el texto fue pegado, no escrito. Shells como bash y zsh reconocen estos marcadores y no ejecutan automaticamente el texto pegado. Tienes que pulsar Enter explicitamente.
shell-integration = detect permite que Ghostty detecte tu shell (bash, zsh, fish) y active integraciones especificas: marcadores de comandos, seguimiento del directorio actual, y notificaciones de finalizacion.
scrollback-limit = 25000000 establece 25 millones de lineas de historial. Claude Code genera salidas extensas: diffs completos, resultados de busqueda en el codebase, logs de compilacion. Con un scrollback limitado a unas pocas miles de lineas, como traen la mayoria de terminales por defecto, pierdes contexto que luego necesitas. 25 millones de lineas en memoria es despreciable en un sistema moderno. Mejor tener de mas que quedarse corto.
El flujo completo: Ghostty + Claude Code en accion
Abres Ghostty. Gracias a window-save-state = always, el layout que dejaste ayer se restaura: Claude Code a la izquierda, shell a la derecha. No reconstruyes nada.
Le pides a Claude Code que revise un fichero. La salida ocupa varias pantallas, pero con 25 millones de lineas de scrollback puedes recorrerla entera sin perder nada. Claude sugiere un cambio y muestra el path del fichero. Seleccionas el path con el raton y, gracias a copy-on-select, ya esta en el portapapeles. Pegas en el panel derecho para abrir el fichero.
Necesitas consultar la documentacion de una funcion sin romper el layout. Ctrl+` y la terminal rapida cae desde arriba. Haces la consulta, obtienes la respuesta, clic fuera y desaparece. Tu layout de dos paneles sigue intacto.
Claude Code sugiere ejecutar un comando con rm para limpiar ficheros temporales. Copias el comando de su respuesta. Al pegarlo, la proteccion de portapapeles te muestra el contenido antes de enviarlo a la terminal. Revisas que es lo que esperas y confirmas. Sin sorpresas.
Anochece. Cambias el tema del sistema a modo oscuro desde los ajustes de GNOME. Ghostty cambia automaticamente de Catppuccin Latte a Catppuccin Mocha. Los colores se adaptan, la opacidad del fondo se mantiene, el blur sigue funcionando. Sin tocar el fichero de configuracion.
Cada opcion de este fichero de configuracion existe por un motivo concreto en este flujo de trabajo. No es decoracion. Es infraestructura.