Tu entorno de desarrollo, automatizado — Configuración unificada, idempotente y declarativa para Linux (Ubuntu, Fedora, Arch, WSL).
- 🎯 ¿Qué es este proyecto?
- ✨ Novedades v2.0
- ⚡ Prerequisitos OBLIGATORIOS
- 🚀 Instalación (Menú Interactivo)
- 🏗️ Arquitectura & Idempotencia
- 📦 Toolchain Declarativo (Mise)
- 🔐 Gestión de Secretos
- 🧩 Gestión de Extensiones
- 📚 Documentación
- 🛠️ Stack Tecnológico
- 🔁 Replicabilidad
- 🗑️ Desinstalación
- ❓ FAQ y Troubleshooting
Dotfiles es un sistema de ingeniería de plataforma personal. Transforma una instalación limpia de Linux en una estación de trabajo de alto rendimiento en minutos.
Diferencias Clave:
| Característica | Antes (v1) | Ahora (v2.0) |
|---|---|---|
| Instalación | Imperativa (Scripts manuales) | Declarativa (Mise + TOML) |
| Ejecución | Lenta, repetitiva | Idempotente & Smart Updates |
| Tools | Versiones hardcoded | Versiones gestionadas (Node, Go, Rust) |
| UI | Inconsistente | Unificada (Cyberpunk Theme) |
- Idempotencia Real: Puedes ejecutar
./install.shmil veces; solo aplicará cambios si son necesarios. - Mise (RTX): Reemplazamos instalaciones manuales de
node,go,rust,bat,lsd, etc. por un único archivo de configuración.mise.toml. - Smart Updates: El sistema detecta si ya se actualizó en las últimas 24h para ahorrar tiempo (saltable con
--force). - Extension Manager: Nuevo módulo para instalar/respaldar extensiones de VS Code/Cursor automáticamente.
- Secretos Híbridos: Soporte para bóvedas locales (
.env.local.age) que anulan la configuración del repo, ideal para forks.
🎯 IMPORTANTE: La configuración SSH es el fundamento. Sin ella, no podrás clonar ni contribuir.
| Requisito | Descripción |
|---|---|
| 🐧 Sistema | Linux (Debian, Ubuntu, Fedora, Arch) o WSL |
| 🌐 Conexión | Acceso a Internet |
| 🔐 Git/GitHub | Cuenta de GitHub |
| 🔑 SSH Keys | OBLIGATORIO - Ver guías abajo |
| Tu Entorno | Flujo a Seguir |
|---|---|
| 🪟 Windows con WSL | Flujo A: Windows + WSL → SSH se crea en Windows y se copia a WSL |
| 🐧 Linux Nativo | Flujo B: Linux Nativo → SSH se crea directamente en Linux |
(Ver README original para el detalle paso a paso de generación de SSH)
git clone git@github.com:herwingx/dotfiles.git ~/dotfiles
cd ~/dotfileschmod +x install.sh
./install.sh // 🚀 AUTOMATED DEPLOY
+------------------------------------------------------------+
[1 ] Full Install (System + Tools)
+------------------------------------------------------------+
// 📦 SYSTEM & TOOLCHAIN
[2 ] Base System + Mise Tools [3 ] Dev Tools Only (Docker, GH)
[4 ] Toolchain Sync (mise install) [5 ] Update System (Force)
[6 ] Install Base Packages
// ☁️ CONFIG & CLOUD
[7 ] Configure Secrets [8 ] Configure Rclone
[9 ] SSH Keys Import [10] Install VSCode Extensions
+------------------------------------------------------------+
[0 ] EXIT
El núcleo del sistema reside en scripts/common.sh y su función ensure_package.
¿Cómo funciona?
- Verifica si el binario ya existe en el
$PATH. - Si no, consulta la base de datos del gestor de paquetes (
dpkg,rpm,pacman). - Solo si ambas fallan, intenta instalar.
Esto hace que el instalador sea extremadamente rápido en ejecuciones subsecuentes.
En lugar de scripts kilométricos instalando tar.gz, usamos Mise (antes RTX).
Toda la configuración de herramientas está en .mise.toml:
[tools]
node = "lts"
go = "latest"
rust = "latest"
python = "latest"
lsd = "latest"
bat = "latest"
ripgrep = "latest"
oh-my-posh = "latest"El script scripts/toolchain.sh se encarga de:
- Instalar
mise(si falta). - Ejecutar
mise install(baja todas las herramientas en paralelo). - Configurarlas en tu shell.
Usamos Age para encriptación.
- 🥇
.env.local.age: Tu bóveda privada. Ignorada por Git. - 🥈
.env.age: Bóveda del repo (backup/ejemplo).
Interfaz TUI para editar tus secretos sin exponerlos en texto plano en el disco.
./scripts/manage_secrets.sh- Edit Local: Abre
nano, editas, y al cerrar re-encripta automáticamente. - View: Muestra contenido temporalmente.
Nuevo módulo en scripts/extensions.sh.
Detecta tu editor (code, codium, cursor) e instala las extensiones definidas en .vscode-extensions.
./install.sh # Opción 10
# o directo:
./scripts/extensions.shSi instalaste nuevas extensiones y quieres guardar la lista:
./scripts/extensions.sh --backupEsto actualiza el archivo .vscode-extensions con tu configuración actual.
| Categoría | Herramientas | Gestión |
|---|---|---|
| Core | Bash, Age, Git | system.sh |
| Runtimes | Node.js, Python, Go, Rust | Mise |
| CLI Moderno | lsd, bat, ripgrep, fzf | Mise |
| Shell UI | Oh My Posh | Mise + Config |
| Infra | Docker, Docker Compose | dev-tools.sh |
| Cloud | Rclone, GitHub CLI | cloud.sh |
Cómo funciona la Idempotencia
El corazón de los dotfiles es la función ensure_package (en scripts/common.sh). Antes de ejecutar el gestor de paquetes de tu distro (apt, dnf, zypper, apk), el script verifica:
- Si el binario de la herramienta ya está en tu
$PATH. - Si el gestor de paquetes reporta la herramienta como ya instalada. Solo si ambas comprobaciones fallan, se intenta instalar.
Cómo extender el sistema
- Nuevo Módulo: Crea un archivo en
scripts/(ej:scripts/mi-modulo.sh). - Documentar: Añade comentarios estilo Bashdoc en tus funciones (
@param,@sideeffects). - Incluir: Añade el
sourcede tu script eninstall.sh. - Actualizar Menú: Añade una nueva opción de ejecución al menú dentro de
install.sh.
Debugging Tips
- Ejecuta
./install.shy fíjate en los prefijos[OK],[ERROR],[!]para saber exactamente dónde ocurrió el fallo. - La mayoría de instalaciones de Node/Go fallarán silenciosamente si la descarga de
misees interrumpida. Revisa.mise.tomlsi una de estas herramientas falta. - Puedes ejecutar los scripts individuales para testear de manera aislada:
bash scripts/cloud.sh.
El proyecto está pensado para ser replicable: misma experiencia en otra máquina, otro usuario o un fork.
| Aspecto | Replicable | Notas |
|---|---|---|
| Rutas | ✅ | Los scripts usan $DOTFILES_DIR (detectado por readlink). Puedes clonar en ~/dotfiles o en otra ruta. |
| Toolchain | ✅ | .mise.toml es declarativo; mise install instala las mismas versiones en cualquier Linux/WSL. |
| Idempotencia | ✅ | Ejecutar ./install.sh varias veces no rompe nada; solo aplica cambios pendientes. |
| Git identity | config/.gitconfig trae nombre/email del autor. Edita [user] antes de instalar o después: git config --global user.name "Tu Nombre" y user.email. |
|
| SSH | La opción Importar llaves GitHub del menú es para dar acceso a un servidor (p. ej. al autor). En tu máquina: usa Copiar SSH desde Windows (WSL) o genera tus llaves y no importes las del repo. | |
| Secretos | Copia .env.example y crea .env.local.age (o .env.age) con tus tokens; no se versionan. |
|
Alias sync-dotfiles |
El alias asume ~/dotfiles. Si clonas en otra ruta, edita config/.bash_aliases y cambia la ruta en ese alias. |
Resumen: Clona → (opcional) personaliza config/.gitconfig → ejecuta ./install.sh. En otra máquina o usuario obtienes el mismo entorno; solo debes ajustar identidad de Git, SSH y secretos.
./uninstall.sh- Full Destroy: Elimina todo (configs, runtimes, docker).
- Soft Clean: Solo configs (mantiene binarios grandes).
P: ¿El proyecto es completamente replicable en otra máquina o usuario?
R: Sí, con mínima personalización. Rutas, toolchain (Mise) y scripts son replicables. Debes personalizar: nombre/email en config/.gitconfig, usar tus propias llaves SSH (no la opción de importar llaves del autor en tu máquina) y tus secretos en .env.local.age. Ver Replicabilidad.
P: ¿Por qué no veo los iconos en la terminal?
R: Necesitas una Nerd Font. Recomendamos Maple Mono NF o JetBrains Mono NF.
P: mise: command not found
R: Reinicia tu terminal (exec bash) o asegúrate de que ~/.local/bin está en tu PATH (el instalador lo hace, pero requiere recarga).
P: Cursor / MCP marcan error con npx o "command not found"
R: Cursor no ejecuta .bashrc; usa el entorno de login. El instalador ahora añade los shims de mise al inicio de tu ~/.bashrc y también a ~/.profile, ~/.bash_profile y ~/.zprofile. Esto garantiza que tanto las aplicaciones GUI (Cursor) como los procesos no interactivos (MCPs) hereden el PATH correcto. En WSL funciona igual: si acabas de instalar/actualizar dotfiles, reinicia Cursor por completo (o "Developer: Reload Window") para que reconozca los nuevos binarios.
P: Fallo al desencriptar secretos R: Asegúrate de tener la passphrase correcta. Si la perdiste y es tu propia bóveda, bórrala y crea una nueva con la opción [17] del instalador.
Made with ❤️ for the Linux community
⭐ Star this repo
