Si vas a pasar horas frente a una terminal, al menos que sea bonita
📖 Tabla de Contenidos
- ¿Qué es esto?
- Estructura del Repo
- 🚀 Kitty — La Terminal
- ⚡ Neovim — El Editor
- 🐚 Zsh + Starship — El Shell
- 📦 Git — El Control de Versiones
- 🎨 Screenshots
- 🛠️ Mejoras Pendientes
- 📝 Licencia
🤔 ¿Qué es esto?
Estos son mis dotfiles — la configuración que convierte una terminal genérica en mi terminal. Si eres de los que copian configs de YouTube sin saber qué hacen, bienvenido. Si eres de los que leen todo antes de copiar, doble bienvenido.
Stack principal: Neovim + Kitty + Zsh + Starship Lenguajes: Python, JavaScript/TypeScript, React, Lua SO: Fedora Linux (porque los rolling releases son para valientes)
📁 Estructura del Repo
dotfiles/
├── kitty/ # Configuración de la terminal
│ ├── kitty.conf # Configuración principal
│ └── tokyonight.conf # Tema Tokyo Night
│
├── nvim/ # Configuración de Neovim
│ ├── init.lua # Punto de entrada
│ ├── lua/
│ │ ├── atajos.lua # Keymaps personalizados
│ │ ├── opciones.lua # Opciones del editor
│ │ ├── plugins.lua # Carga de plugins (Lazy.nvim)
│ │ ├── lsp_config.lua # Configuración de LSPs
│ │ ├── core/ # Configuraciones core
│ │ └── plugins/ # Configs individuales de plugins
│ ├── snippets/ # Snippets personalizados
│ │ ├── python.lua # Snippets de Python
│ │ ├── javascript.lua # Snippets de JS
│ │ ├── react.lua # Snippets de React
│ │ └── html.lua # Snippets de HTML
│ └── folding/ # Persistencia de folds
│
├── zsh/ # Configuración del shell
│ ├── .zshrc # Configuración de Zsh + Zinit
│ └── starship.toml # Tema del prompt
│
├── .gitconfig # Configuración de Git
├── .gitignore # Archivos ignorados
└── AGENTS.md # Instrucciones para la IA
🚀 Kitty — La Terminal
¿Por qué Kitty y no Alacritty/Warp/la-que-esté-de-moda?
Porque Kitty tiene:
- ✅ GPU-accelerated rendering
- ✅ Splits nativos (no necesitas tmux para dividir pantalla)
- ✅ Protocolo de imágenes (puedes ver imágenes en la terminal)
- ✅ Tabs con powerline (porque lo bonito importa)
Configuración destacada
# Fuentes — JetBrains Mono Nerd Font (la mejor para devs)
font_family family="JetBrainsMono Nerd Font"
font_size 12.0
# Layouts habilitados — splits y stack
enabled_layouts splits, stack
# Transparencia sutil (requiere compositor)
background_opacity 0.95
# Powerline tabs (porque somos fancy)
tab_bar_style powerline
tab_powerline_style slanted
Atajos de Kitty
| Atajo | Acción |
|---|---|
Ctrl+Shift+H |
Split horizontal |
Ctrl+Shift+V |
Split vertical |
Ctrl+Shift+↑↓←→ |
Navegar entre paneles |
Ctrl+C |
Copiar (o interrumpir) |
Ctrl+V |
Pegar |
Tema: Tokyo Night 🌙
El tema está en kitty/tokyonight.conf y es el mismo que uso en Neovim. Consistencia visual es clave.
background #1a1b26
foreground #c0caf5
cursor #c0caf5
💡 Tip: Si quieres cambiar el tema, solo modifica el
includeenkitty.conf
⚡ Neovim — El Editor
¿Por qué Neovim y no VS Code?
Porque después de la curva de aprendizaje (que sí, es empinada), editas código a la velocidad del pensamiento. Y porque no necesitas un navegador para editar texto.
Plugins Instalados
| Plugin | Propósito |
|---|---|
lazy.nvim |
Gestor de plugins (el mejor, sin debate) |
tokyonight.nvim |
Tema visual |
alpha-nvim |
Dashboard de inicio |
lualine.nvim |
Barra de estado |
bufferline.nvim |
Pestañas de buffers |
nvim-tree.lua |
Explorador de archivos |
telescope.nvim |
Buscador fuzzy (el corazón del workflow) |
nvim-lspconfig |
Configuración de LSPs |
mason.nvim |
Instalador de LSPs/formatters |
nvim-cmp |
Autocompletado |
LuaSnip |
Snippets |
nvim-treesitter |
Resaltado de sintaxis avanzado |
gitsigns.nvim |
Indicadores de Git en el editor |
conform.nvim |
Formateo automático |
toggleterm.nvim |
Terminal integrada |
comment.nvim |
Comentar/descomentar código |
nvim-autopairs |
Autocierre de paréntesis/llaves |
indent-blankline.nvim |
Guías de indentación |
emmet-vim |
Emmet para HTML/CSS |
pi-agent.nvim |
Integración con Pi Agent |
Lenguajes Soportados (LSP)
ensure_installed = { "html", "cssls", "ts_ls", "pyright", "lua_ls" }
- HTML/CSS — Web basics
- TypeScript/JavaScript — Frontend y Node
- Python — Pyright como LSP
- Lua — Para configurar Neovim con Neovim 🤯
Keymaps Esenciales
Navegación
| Atajo | Acción |
|---|---|
Espacio + f |
Buscar archivos (Telescope) |
Espacio + g |
Buscar texto (Live Grep) |
Espacio + e |
Toggle explorador (NvimTree) |
Espacio + n |
Toggle explorador (alternativo) |
Ctrl+\ |
Toggle terminal |
Edición
| Atajo | Acción |
|---|---|
jk / kj |
Salir del modo insertar (todas las combinaciones) |
Espacio + d |
Comentar/descomentar línea |
Tab |
Siguiente sugerencia de autocompletado |
Shift+Tab |
Sugerencia anterior |
Buffers
| Atajo | Acción |
|---|---|
Espacio + v |
Buffer anterior |
Espacio + b |
Buffer siguiente |
Espacio + bd |
Cerrar buffer |
Ctrl+1 |
Ir al buffer 1 |
Git (Gitsigns)
| Atajo | Acción |
|---|---|
]h / [h |
Siguiente/anterior hunk |
Espacio + hs |
Stage hunk |
Espacio + hr |
Reset hunk |
Espacio + hp |
Preview hunk |
Espacio + hb |
Blame línea |
Espacio + gg |
LazyGit (terminal flotante) |
Snippets Personalizados
Tengo snippets para Python, JavaScript, React y HTML. Algunos ejemplos:
Python
# def + Tab → Función
# defd + Tab → Función con docstring
# class + Tab → Clase con __init__
# try + Tab → Try/Except
# main + Tab → if __name__ == "__main__"
# prd + Tab → print(f"DEBUG variable: {variable}")
React
// rfc + Tab → Componente funcional
// rfcts + Tab → Componente con TypeScript
// us + Tab → useState
// ue + Tab → useEffect
// hook + Tab → Custom hook
// jmap + Tab → JSX .map()
Configuración de Folding
Neovim recuerda los folds entre sesiones gracias a:
vim.opt.viewdir = vim.fn.expand("~/.config/nvim/folding")
-- Auto-save folds al guardar
vim.api.nvim_create_autocmd("BufWrite", {
pattern = "*",
command = "mkview"
})
-- Auto-load folds al abrir
vim.api.nvim_create_autocmd("BufRead", {
pattern = "*",
command = "silent! loadview"
})
Dashboard de Inicio
Al abrir Neovim, te recibe un ASCII art con opciones rápidas:
███╗ ██╗███████╗ ██████╗ ██╗ ██╗██╗███╗ ███╗
████╗ ██║██╔════╝██╔═══██╗██║ ██║██║████╗ ████║
██╔██╗ ██║█████╗ ██║ ██║██║ ██║██║██╔████╔██║
██║╚██╗██║██╔══╝ ██║ ██║╚██╗ ██╔╝██║██║╚██╔╝██║
██║ ╚████║███████╗╚██████╔╝ ╚████╔╝ ██║██║ ╚═╝ ██║
╚═╝ ╚═══╝╚══════╝ ╚═════╝ ╚═══╝ ╚═╝╚═╝ ╚═╝
[ m b l a n c @nvim ]
🐚 Zsh + Starship — El Shell
¿Por qué Zsh + Starship?
- Zsh → Autocompletado superior, glob patterns, y plugins con Zinit
- Starship → Prompt minimalista, rápido, y con información contextual
Zinit Plugins
# Plugins de Zinit (gestor de plugins para Zsh)
zinit light zdharma-continuum/zinit-annex-as-monitor
zinit light zdharma-continuum/zinit-annex-bin-gem-node
zinit light zdharma-continuum/zinit-annex-patch-dl
zinit light zdharma-continuum/zinit-annex-rust
# Zoxide (navegación inteligente de directorios)
zinit light ajeetdsouza/zoxide
# Starship (prompt)
zinit light starship/starship
Herramientas en PATH
# npm global packages
export PATH=~/.npm-global/bin:$PATH
# Local binaries
export PATH="/home/mblanc/.local/bin:$PATH"
# Bun (runtime JS alternativo)
export BUN_INSTALL="$HOME/.bun"
export PATH="$BUN_INSTALL/bin:$PATH"
Alias Importantes
alias idea='~/programas/idea-2026.1.4/idea-IU-261.26222.65/bin/idea.sh'
Prompt de Starship
El prompt muestra:
@matias:~/proyecto main ≡ +2⇡ python 3.11 node 20.12 ➜
- Usuario y directorio → Siempre visible (fondo azul Tokyo Night)
- Rama de Git → Con indicadores de status (fondo púrpura)
- Versión de lenguaje → Solo cuando estás en un proyecto de ese lenguaje
- Duración del comando → Si tarda más de 2 segundos
- Hora → A la derecha
- Carácter de éxito/error → Verde
➜o rojo✗
Paleta de colores (Tokyo Night Storm)
| Elemento | Color | Hex |
|---|---|---|
| Username/Directory | Azul | #7aa2f7 |
| Git branch | Púrpura | #bb9af7 |
| Python | Amarillo | #e0af68 |
| Node.js | Verde | #73daca |
| Rust | Rojo | #f7768e |
| Go | Cyan | #7dcfff |
| Success | Verde | #73daca |
| Error | Rojo | #f7768e |
📦 Git — El Control de Versiones
[user]
name = Matias Blanc
email = matias.f.blanc@gmail.com
[init]
defaultBranch = main # No más 'master'
[core]
editor = nvim # Neovim para commits
[color]
ui = auto # Colores en terminal
[pull]
rebase = false # Merge por defecto al pull
[alias]
st = status
co = checkout
pu = push
cm = commit -m
pl = pull
Aliases de Git
| Alias | Comando |
|---|---|
git st |
git status |
git co |
git checkout |
git pu |
git push |
git cm "mensaje" |
git commit -m "mensaje" |
git pl |
git pull |
⚠️ Los aliases están definidos una sola vez en
[alias], sin secciones anidadas.
🎨 Screenshots
TODO: Agregar screenshots del setup en acción
# Para tomar un screenshot de Kitty:
# Ctrl+Shift+P → save_png
🛠️ Mejoras Pendientes
Cosas que deberían mejorar pero “funciona así que no lo toco”:
Neovim
- Agregar
which-key.nvimpara visualizar keymaps - Configurar
telescope-fzf-nativecorrectamente (ya está en deps pero no configurado) - Agregar soporte para debugging (
nvim-dap) - Snippets para más lenguajes (Bash, SQL, Docker)
- Configurar
noice.nvimpara UI de comandos mejorada
Kitty
- Agregar más temas alternativos
- Configurar
kitten sshpara remotos - Agregar custom kittens para workflows
Zsh
- Agregar más plugins de Zinit (autosuggestions, syntax highlighting)
- Configurar
fzfcomo integración con Zsh - Agregar funciones personalizadas frecuentes
General
- Script de instalación automática (
install.sh) - Stow para gestión de symlinks
- Documentar dependencias del sistema
📝 Instalación
Prerrequisitos
# Fedora
sudo dnf install neovim kitty zsh starship git
# Instalar Nerd Font
mkdir -p ~/.local/share/fonts
cd ~/.local/share/fonts
curl -fLO https://github.com/ryanoasis/nerd-fonts/releases/latest/download/JetBrainsMono.tar.xz
tar xf JetBrainsMono.tar.xz
fc-cache -fv
# Cambiar shell por defecto
chsh -s $(which zsh)
Clonar y Configurar
# Clonar dotfiles
git clone https://github.com/tu-usuario/dotfiles.git ~/dotfiles
# Crear symlinks (manual por ahora)
ln -sf ~/dotfiles/kitty ~/.config/kitty
ln -sf ~/dotfiles/nvim ~/.config/nvim
ln -sf ~/dotfiles/zsh/.zshrc ~/.zshrc
ln -sf ~/dotfiles/zsh/starship.toml ~/.config/starship.toml
ln -sf ~/dotfiles/.gitconfig ~/.gitconfig
# Instalar plugins de Neovim
nvim --headless "+Lazy! sync" +qa
# Reiniciar terminal
exec zsh
🤝 ¿Contribuir?
Si quieres mejorar algo:
- Fork el repo
- Crea una rama (
git checkout -b feature/mejora-genial) - Commit (
git commit -m 'feat: agregar mejora genial') - Push (
git push origin feature/mejora-genial) - Abre un Pull Request
📜 Licencia
MIT — Haz lo que quieras con esto. Si te funciona, genial. Si no, al menos aprendiste algo.
Hecho con ❤️ desde Chile.
Por varias noches de “solo 5 minutos más configurando”