Cross-platform dotfiles para SRE — un solo ./install.sh configura todo tu entorno.
- ⚡ Quickstart
- ✨ Highlights
- 🐚 Shell y terminal
- 🦀 CLIs modernas (Rust-powered)
- 📝 Editor — Neovim
- ☁️ Cloud e infraestructura
- ☸️ Kubernetes
- 🔐 Seguridad
- 💻 Lenguajes
- 🎨 Prompt — Starship
- 🌐 SSH
- 🖥️ WezTerm
- 🤖 Claude Code
- 🔧 Git
- 🗂️ Estructura de archivos
- 🔗 Symlinks creados
- 🪟 WSL — Nerd Fonts en Windows
- 🛡️ Notas de seguridad
- 🧪 Plataformas probadas
- ❓ FAQ
- 📚 Referencias
- 🔄 Post-instalacion y actualizacion
git clone https://github.com/kr0nicas/dotfiles.git ~/dotfiles
cd ~/dotfiles && ./install.shinstall.sh acepta flags compositivos para adaptarse al tipo de máquina:
./install.sh --dry-run # Simula sin cambios
./install.sh --minimal # Solo terminal env (zsh, tmux, nvim, langs) — ideal VPS/contenedores
./install.sh --no-gui # Sin VSCode/Brave/Spotify (servidor con DE pero sin apps)
./install.sh --no-cloud --no-k8s # Workstation sin SRE tools
./install.sh --help # Ver todas las opciones| Flag | Omite |
|---|---|
--minimal |
Cloud + Kubernetes + GUI (todo lo opcional) |
--no-cloud |
aws, azure, terraform, vault, tflint, gcloud |
--no-k8s |
kubectl, helm, k9s, stern, kubectx, docker |
--no-gui |
VSCode + extensiones, Brave, Spotify, Postman, ngrok |
El Brewfile base (siempre instalado) cubre: shell, CLIs modernas, nvim + linters, lenguajes, security y fonts.
Soportado en macOS (Apple Silicon / Intel) y Debian/Ubuntu (VPS, GCP, AWS). Ver matriz completa.
💡 Si ya tienes un
.zshrc,.tmux.conf, etc., el installer respalda automáticamente a<archivo>.bak.<timestamp>antes de pisar. Nunca pierdes config existente.
- 🌍 Cross-platform real — un solo
install.shdistingue macOS (Brewfile) vs Linux (apt + binarios de GitHub releases, sin sudo). - 🦀 Stack 2026 — CLIs Rust modernas (
eza,bat,rg,fd,delta), Neovim 0.11+ con API nueva de LSP,fnm+uvpara gestion de runtimes. - ☸️ SRE-ready — Kubernetes, Terraform, AWS/GCP/Azure CLIs, Vault, Trivy, tfsec — listo para clusters de produccion.
- 🎨 Identidad visual coherente — Catppuccin Mocha en nvim/tmux/starship/delta + colores de fondo SSH por entorno (prod en rojo, staging en naranja...) para evitar accidentes en produccion.
| Herramienta | Descripcion |
|---|---|
| zsh | Shell principal con autosuggestions y syntax highlighting (plugins via brew/apt) |
| starship | Prompt minimalista con info de git/k8s/python/go |
| tmux | Multiplexor de terminal con TPM (plugin manager) |
| fzf | Fuzzy finder para archivos, historial y branches |
| zoxide | cd inteligente que aprende tus directorios frecuentes |
| direnv | Variables de entorno automaticas por directorio (.envrc) |
| Herramienta | Reemplaza | Descripcion |
|---|---|---|
| eza | ls |
Listados con iconos, colores y estado git |
| bat | cat |
Visualizacion con syntax highlighting |
ripgrep (rg) |
grep |
Busqueda ultrarapida en codigo |
| fd | find |
Busqueda de archivos simple y rapida |
| delta | diff |
Git diff con syntax highlighting side-by-side |
| sd | sed |
Find & replace moderno |
| dust | du |
Analizador de disco visual |
| lazygit | — | TUI interactiva para git |
| git-extras | — | Comandos extra de git (summary, changelog, etc.) |
| btop | htop |
Monitor de sistema (CPU, RAM, disco, red) |
| curlie | curl |
HTTP client con formato legible |
| jless | — | Visor interactivo de JSON |
Config 100% Lua en config/nvim/ con lazy.nvim. Tema: Catppuccin Mocha. Leader key: <Space>.
| Plugin | Funcion |
|---|---|
| telescope.nvim | Fuzzy finder (archivos, grep, buffers, git) |
| nvim-treesitter | Syntax highlighting avanzado |
| mason.nvim | Gestion automatica de LSP servers |
| nvim-lspconfig | Go, Python, Lua, YAML, JSON, Bash, Terraform, Docker, TypeScript, Ansible |
| nvim-cmp | Autocompletado con LSP, snippets, buffer y path |
| which-key.nvim | Popup de keybindings al presionar <Space> |
| oil.nvim | File explorer como buffer (abrir con -) |
| conform.nvim | Formateo al guardar (black, goimports, jq, terraform fmt, stylua) |
| nvim-lint | Linting asincrono (flake8, yamllint, shellcheck, tflint) |
| gitsigns.nvim | Signos de cambios git en el gutter |
| vim-fugitive | Comandos git dentro del editor |
| lualine.nvim | Statusline con branch, diagnosticos, encoding |
| mini.nvim | Pairs, surround, comment |
LSP bindings principales (activos en LspAttach): gd definicion · gr referencias · K hover · <Leader>ca code action · <Leader>rn rename.
| Herramienta | Descripcion |
|---|---|
| terraform | Infrastructure as Code |
| awscli | CLI de Amazon Web Services |
| azure-cli | CLI de Microsoft Azure |
| gcloud | CLI de Google Cloud (lazy-loaded en zshrc) |
| Herramienta | Descripcion |
|---|---|
| kubectl | CLI oficial de Kubernetes |
| helm | Package manager para K8s |
| k9s | TUI para gestionar clusters en tiempo real |
| kubectx / kubens | Cambio rapido de contexto y namespace |
| stern | Tail de logs multi-pod |
| kustomize | Gestion de manifests K8s |
| istioctl | CLI de Istio service mesh |
| kubectl-neat | Limpia YAMLs de metadata generada |
| viddy | watch moderno con diff visual |
| kubecolor | Colorea output de kubectl |
| Herramienta | Descripcion |
|---|---|
| trivy | Scanner de vulnerabilidades (containers, IaC, repos) |
| tfsec | Analisis estatico de Terraform (shift-left) |
| vault | Gestor de secrets HashiCorp |
| sops | Encriptacion de secrets en repos |
| age | Encriptacion moderna (backend para sops) |
| pass | Gestor de passwords con GPG |
| Lenguaje | Tooling |
|---|---|
| Go | go + gopls (LSP) + gosec |
| Python | uv (gestor moderno, reemplaza pip/pyenv/virtualenv) + pyright (LSP) |
| Java | openjdk@17 + jenv + maven + gradle |
| Node.js | fnm (auto-detecta .nvmrc/.node-version por proyecto) + LTS |
| Lua | lua_ls (LSP para config nvim) |
Config en config/starship/starship.toml con tema Catppuccin Mocha. Muestra:
- OS icon, directorio, git branch/status
- Kubernetes context/namespace, GCloud project
- Node.js, Go, Python, Rust (solo si hay archivos relevantes)
- Tiempo de ejecucion (>2s), RAM (>60%), hora
- 🔍 Selector interactivo de hosts con
s(usa fzf +~/.ssh/config). - ⚡ ControlMaster activo: reutiliza conexiones (segundo ssh es instantaneo, keepalive cada 60s).
- 🎨 Colores de fondo por entorno (
config/ssh/colors.conf): al hacerssh prod-*,staging-*,gcp-*, etc. la terminal cambia de color para identificar el contexto visualmente y evitar accidentes en produccion. Patrones editables; override local en~/.ssh/colors.conf(sin symlink).
Mapeo por defecto:
| Patron | Color | Etiqueta |
|---|---|---|
prod, prd |
🔴 Rojo | PRODUCCION |
staging, stg |
🟠 Naranja | STAGING |
qa |
🟡 Amarillo | QA |
dev, gcp |
🔵 Azul | DESARROLLO / GCP |
aws |
🟢 Verde | AWS |
vps |
🟣 Morado | VPS |
bastion |
⚡ Magenta | BASTION |
Config cross-platform en config/wezterm/wezterm.lua (macOS + WSL2 Windows). Tema Catppuccin Mocha, fuente JetBrainsMono Nerd Font.
En WSL2 el symlink se crea automaticamente en %USERPROFILE%\.config\wezterm\ (requiere Modo Desarrollador o PowerShell admin).
config/claude/settings.json→ symlinked a~/.claude/settings.json. Statusline custom, plugins habilitados (superpowers, frontend-design, code-review), marketplaces extra.config/claude/statusline.sh→ statusline portable (Mac + Linux + WSL).config/claude/settings.local.json.example→ plantilla para overrides locales por maquina (no commiteada, sembrada en primer install).install.shanclaclaudeal build nativo (~/.local/bin/claude) para evitar que fnm/npm rompa elPATHal cambiar de version de Node.
Config en .gitconfig con:
- Editor: nvim
- Pager: delta (side-by-side, line numbers, tema Catppuccin)
- Merge conflicts: zdiff3
- Aliases:
st,co,br,cm
~/dotfiles/
├── install.sh # Instalador cross-platform
├── Brewfile # Paquetes macOS (brew bundle)
├── zshrc # Config de zsh
├── tmux.conf # Config de tmux
├── .gitconfig # Config de git + delta
├── install-fonts-windows.ps1 # Nerd Fonts para WSL/Windows
├── get-docker.sh # Helper instalacion Docker
├── vimrc # Fallback vim (sin nvim)
├── CHEAT_CODES.md, VIM_GUIA.md # Notas personales
└── config/
├── nvim/ # Config Neovim (Lua)
│ ├── init.lua
│ └── lua/
│ ├── config/ # options, keymaps, autocmds, lazy bootstrap
│ └── plugins/ # colorscheme, treesitter, telescope, lsp, git, editor, ui, which-key, oil
├── starship/
│ └── starship.toml # Config del prompt
├── direnv/
│ └── direnv.toml # Whitelist de directorios confiables
├── claude/
│ ├── settings.json # Config Claude Code (statusline, plugins)
│ ├── statusline.sh # Statusline portable Mac/Linux/WSL
│ └── settings.local.json.example # Plantilla overrides locales
├── wezterm/
│ └── wezterm.lua # Config terminal Mac + WSL2
├── ssh/
│ └── colors.conf # Color de fondo por entorno SSH
└── bin/
└── cn # Wrapper de @continuedev/cli
~/.zshrc → ~/dotfiles/zshrc
~/.tmux.conf → ~/dotfiles/tmux.conf
~/.gitconfig → ~/dotfiles/.gitconfig
~/.config/nvim → ~/dotfiles/config/nvim
~/.config/starship.toml → ~/dotfiles/config/starship/starship.toml
~/.config/direnv/direnv.toml → ~/dotfiles/config/direnv/direnv.toml
~/.claude/settings.json → ~/dotfiles/config/claude/settings.json
~/.claude/statusline.sh → ~/dotfiles/config/claude/statusline.sh
~/.ssh/colors.conf → ~/dotfiles/config/ssh/colors.conf
~/.config/wezterm/wezterm.lua → ~/dotfiles/config/wezterm/wezterm.lua (WSL2: lado Windows)
~/.local/bin/cn → ~/dotfiles/config/bin/cn
Los iconos del prompt (starship, eza) los renderiza el terminal de Windows, no WSL. Ejecuta esto una sola vez desde PowerShell como Administrador:
Set-ExecutionPolicy Bypass -Scope Process -Force
# Opcion A: desde PowerShell en Windows
.\install-fonts-windows.ps1
# Opcion B: directamente desde WSL
powershell.exe -ExecutionPolicy Bypass -File "$(wslpath -w ~/dotfiles/install-fonts-windows.ps1)"Luego configura la fuente en tu terminal:
- Windows Terminal:
Ctrl+,→ perfil WSL → Appearance → Font face →JetBrainsMono Nerd Font - VS Code:
"terminal.integrated.fontFamily": "JetBrainsMono Nerd Font"
install.sh usa los instaladores oficiales upstream (curl … | bash) para fnm, starship, zoxide, uv, trivy, helm y claude — la vía documentada por cada proyecto. Trade-off aceptado por ergonomía. Antes de instalar en una máquina nueva:
- Corre
./install.sh --dry-runpara ver exactamente qué se descarga. - Verifica que todas las URLs sean HTTPS desde hosts oficiales (lo son hoy).
- Si necesitas un entorno hardened, reemplaza cada bloque por descarga + verificación SHA256.
Binarios descargados desde GitHub releases (k9s, delta, lazygit, stern, etc.) viajan por HTTPS pero no se valida el checksum publicado en cada release. Mismo trade-off.
| OS | Versión | Arch | Estado |
|---|---|---|---|
| 🍎 macOS | Sonoma 14.x | Apple Silicon (M1/M2/M3) | ✅ Daily driver |
| 🍎 macOS | Sequoia 15.x | Apple Silicon | ✅ Probado |
| 🐧 Ubuntu | 24.04 LTS | x86_64 / arm64 | ✅ Probado |
| 🐧 Ubuntu | 22.04 LTS | x86_64 | ✅ Probado |
| 🐧 Debian | 12 (Bookworm) | x86_64 / arm64 | ✅ Probado |
| 🪟 WSL2 | Ubuntu 24.04 sobre Windows 11 | x86_64 | ✅ Probado (WezTerm en Windows) |
| 🐧 Otras distros | Fedora, Arch, Alpine, etc. | — | install.sh) |
Reporta issues con tu plataforma en github.com/kr0nicas/dotfiles/issues.
¿Es seguro correr ./install.sh si ya tengo configs existentes?
Sí. safe_link() respalda automáticamente cualquier .zshrc, .tmux.conf, etc. existente a <archivo>.bak.<timestamp> antes de pisar. Igual recomendamos --dry-run primero.
¿Necesito sudo?
En macOS: no (todo via Homebrew en /opt/homebrew o /usr/local).
En Linux: sí, solo para apt install y agregar repos firmados a /etc/apt/keyrings. Binarios SRE van a ~/.local/bin (sudoless).
¿Cómo actualizo después de cambios upstream?
cd ~/dotfiles && git pull && ./install.shinstall.sh es idempotente: detecta lo ya instalado y solo aplica diffs.
¿Funciona sin internet?
No. install.sh descarga paquetes y binarios. Pero una vez instalado, todo funciona offline.
gh_latest_url falla con "rate limit"
La API de GitHub anónima permite 60 req/hora. Auth con gh auth login antes de instalar.
¿Por qué lazy-lock.json está en .gitignore?
Decisión filosófica: priorizamos "instala lo último al re-instalar" sobre reproducibilidad estricta. Si prefieres pinned plugins, abre un issue.
Algo se rompió. ¿Cómo restauro mi config previa?
Los backups están en ~/<archivo>.bak.<timestamp>. Por ejemplo:
ls ~/.zshrc.bak.* # listar backups
mv ~/.zshrc.bak.20260529-103045 ~/.zshrc # restaurar uno¿Puedo instalar solo lo terminal sin las herramientas de cloud/k8s?
Sí. Usa ./install.sh --minimal (solo base) o combina --no-cloud, --no-k8s, --no-gui. Ver Quickstart.
CHEAT_CODES.md— Atajos de tmux, fzf, k9s, lazygit, kubectx y aliases customVIM_GUIA.md— Guía rápida de Vim/Neovim (motions, comandos, plugins)CLAUDE.md— Instrucciones internas para Claude Code (arquitectura del repo)Mac-Optimization/— Notas de optimización macOS (WIP)
source ~/.zshrc # Recargar shell
nvim # Lazy.nvim instala plugins automaticamente
tmux && prefix + I # Instalar plugins de tmux (prefix = C-a)Actualizar el repo:
dots # alias: git add . && commit con fecha && push desde ~/dotfilesMantenido por Jorge Ochoa (kr0nicas) · 2026
Licencia MIT — uso publico, contribuciones bienvenidas.