version: '3'
# Variables globales
vars:
SCRIPT_NAME: setup-dev.sh
LOG_FILE: setup.log
# Entorno de ejecución
env:
DEBIAN_FRONTEND: noninteractive
tasks:
# ============================================
# TAREA POR DEFECTO - MOSTRAR AYUDA
# ============================================
default:
desc: "Muestra ayuda de tareas disponibles"
cmds:
- task --list-all
# ============================================
# TAREAS PRINCIPALES
# ============================================
all:
desc: "Ejecuta todo el proceso de instalación completo"
deps: [dependencies, tools, php, database, terminal, nodejs, finalize]
cmds:
- echo "✅ Instalación completa finalizada"
- echo "📋 Resumen en: {{.LOG_FILE}}"
quick:
desc: "Instalación rápida (solo herramientas esenciales)"
deps: [update-system, git, vscode, chrome, python, terminal-basics]
cmds:
- echo "✅ Instalación rápida completada"
# ============================================
# TAREAS POR SECCIONES
# ============================================
update-system:
desc: "Actualizar sistema y dependencias básicas"
cmds:
- echo "🔄 Actualizando sistema..."
- sudo apt update && sudo apt upgrade -y || true
- sudo apt install -y wget curl gpg gnupg2 software-properties-common apt-transport-https ca-certificates lsb-release || true
git:
desc: "Instalar Git"
cmds:
- echo "📦 Instalando Git..."
- sudo apt install -y git || true
- git --version || echo "Git no se pudo instalar"
vscode:
desc: "Instalar VS Code"
cmds:
- |
echo "💻 Instalando VS Code..."
if ! command -v code &> /dev/null; then
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor -o /etc/apt/keyrings/packages.microsoft.gpg
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/code stable main" | sudo tee /etc/apt/sources.list.d/vscode.list
sudo apt update
sudo apt install -y code || true
else
echo "VS Code ya está instalado"
fi
chrome:
desc: "Instalar Google Chrome"
cmds:
- |
echo "🌐 Instalando Google Chrome..."
if ! command -v google-chrome-stable &> /dev/null && ! command -v google-chrome &> /dev/null; then
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://dl.google.com/linux/linux_signing_key.pub | sudo gpg --dearmor -o /etc/apt/keyrings/google-chrome.gpg
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/google-chrome.gpg] https://dl.google.com/linux/chrome/deb/ stable main" | sudo tee /etc/apt/sources.list.d/google-chrome.list
sudo apt update
sudo apt install -y google-chrome-stable || true
else
echo "Google Chrome ya está instalado"
fi
python:
desc: "Instalar Python y herramientas"
cmds:
- echo "🐍 Instalando Python..."
- sudo apt install -y python3 python3-pip python3-venv build-essential || true
- python3 --version || echo "Python no se pudo instalar"
# ============================================
# GRUPOS DE TAREAS
# ============================================
dependencies:
desc: "Instalar dependencias del sistema"
cmds:
- task: update-system
- task: git
tools:
desc: "Instalar herramientas de desarrollo"
cmds:
- task: vscode
- task: chrome
- task: python
php:
desc: "Instalar PHP y Composer"
cmds:
- |
echo "🐘 Instalando PHP..."
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update
# Instalar PHP 8.4
sudo apt install -y php8.4 php8.4-pgsql php8.4-cli php8.4-fpm php8.4-mysql php8.4-zip \
php8.4-gd php8.4-mbstring php8.4-curl php8.4-xml php8.4-bcmath || true
# Configurar PHP 8.4 como predeterminado
sudo update-alternatives --set php /usr/bin/php8.4 2>/dev/null || true
# Instalar Composer
if ! command -v composer &> /dev/null; then
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
php -r "unlink('composer-setup.php');"
fi
database:
desc: "Instalar bases de datos y herramientas"
cmds:
- |
echo "🗄️ Instalando PostgreSQL..."
sudo apt install -y postgresql postgresql-contrib || true
echo "🔧 Instalando pgAdmin4..."
sudo apt install -y pgadmin4-desktop || true
echo "🌐 Instalando Apache2..."
sudo apt install -y apache2 || true
terminal:
desc: "Configurar terminal con Zsh y plugins"
cmds:
- |
echo "💻 Configurando terminal..."
# Instalar Zsh
sudo apt install -y zsh || true
# Instalar Oh My Zsh
if [ ! -d "$HOME/.oh-my-zsh" ]; then
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended || true
fi
# Instalar Powerlevel10k
if [ ! -d "${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k" ]; then
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git "${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k" || true
fi
# Instalar plugins
if [ ! -d "${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions" ]; then
git clone https://github.com/zsh-users/zsh-autosuggestions "${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions" || true
fi
if [ ! -d "${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting" ]; then
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git "${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting" || true
fi
terminal-basics:
desc: "Instalación básica de terminal"
cmds:
- echo "🖥️ Instalando herramientas de terminal..."
- sudo apt install -y zsh yakuake || true
nodejs:
desc: "Instalar Node.js y NVM"
cmds:
- |
echo "⬢ Instalando Node.js..."
if [ ! -d "$HOME/.nvm" ]; then
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
# Cargar NVM temporalmente
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
# Instalar Node.js
nvm install 22
nvm use 22
nvm alias default 22
fi
# ============================================
# TAREAS DE UTILIDAD
# ============================================
run-script:
desc: "Ejecutar el script bash original completo"
cmds:
- |
if [ -f "{{.SCRIPT_NAME}}" ]; then
echo "🚀 Ejecutando script original..."
chmod +x {{.SCRIPT_NAME}}
./{{.SCRIPT_NAME}} | tee {{.LOG_FILE}}
else
echo "❌ Archivo {{.SCRIPT_NAME}} no encontrado"
echo " Copia tu script bash a este directorio o actualiza la variable SCRIPT_NAME"
fi
run-step:
desc: "Ejecutar un paso específico del script original"
vars:
STEP:
sh: "echo 'Ingresa el número del paso (1-25): ' && read step && echo $step"
cmds:
- |
echo "🔧 Ejecutando paso {{.STEP}}..."
# Esta es una implementación básica, puedes expandirla según tus necesidades
case "{{.STEP}}" in
1) echo "Actualizando sistema..." && sudo apt update && sudo apt upgrade -y ;;
2) echo "Instalando dependencias..." && sudo apt install -y wget curl gpg gnupg2 software-properties-common ;;
*) echo "Paso {{.STEP}} no implementado" ;;
esac
check:
desc: "Verificar instalaciones"
cmds:
- |
echo "🔍 Verificando instalaciones..."
echo ""
echo "=== VERSIONES INSTALADAS ==="
command -v git >/dev/null && echo "✅ Git: $(git --version)" || echo "❌ Git: No instalado"
command -v php >/dev/null && echo "✅ PHP: $(php --version | head -n1)" || echo "❌ PHP: No instalado"
command -v python3 >/dev/null && echo "✅ Python: $(python3 --version)" || echo "❌ Python: No instalado"
command -v node >/dev/null && echo "✅ Node.js: $(node --version)" || echo "❌ Node.js: No instalado"
command -v zsh >/dev/null && echo "✅ Zsh: $(zsh --version)" || echo "❌ Zsh: No instalado"
[ -d "$HOME/.oh-my-zsh" ] && echo "✅ Oh My Zsh: Instalado" || echo "❌ Oh My Zsh: No instalado"
command -v code >/dev/null && echo "✅ VS Code: Instalado" || echo "❌ VS Code: No instalado"
command -v psql >/dev/null && echo "✅ PostgreSQL: Instalado" || echo "❌ PostgreSQL: No instalado"
finalize:
desc: "Pasos finales de configuración"
cmds:
- |
echo "🎯 Pasos finales:"
echo "1. Para usar Zsh como shell predeterminado:"
echo " chsh -s $(which zsh)"
echo ""
echo "2. Para configurar Powerlevel10k:"
echo " p10k configure"
echo ""
echo "3. Recargar configuración:"
echo " source ~/.zshrc"
echo ""
echo "4. Para ver alias personalizados:"
echo " cat ~/.zshrc | grep '^alias'"
clean:
desc: "Limpiar archivos temporales"
cmds:
- echo "🧹 Limpiando archivos temporales..."
- rm -f {{.LOG_FILE}} composer-setup.php 2>/dev/null || true
- echo "✅ Limpieza completada"
# ============================================
# FLUJOS DE TRABAJO ESPECÍFICOS
# ============================================
web-dev:
desc: "Configuración para desarrollo web"
deps: [dependencies, php, database, nodejs]
cmds:
- echo "✅ Entorno web listo para PHP, Node.js y PostgreSQL"
terminal-setup:
desc: "Configurar terminal personalizado"
deps: [terminal-basics, terminal]
cmds:
- echo "✅ Terminal personalizado configurado"
- echo "🔧 Ejecuta 'task finalize' para completar la configuración"
minimal:
desc: "Instalación mínima para empezar"
cmds:
- task: update-system
- task: git
- task: vscode
- task: terminal-basics
- echo "✅ Instalación mínima completada"
# ============================================
# TAREAS DE MANTENIMIENTO
# ============================================
fix-permissions:
desc: "Corregir permisos de archivos"
cmds:
- echo "🔧 Corrigiendo permisos..."
- chmod +x {{.SCRIPT_NAME}} 2>/dev/null || true
- chmod 644 Taskfile.yml 2>/dev/null || true
- echo "✅ Permisos corregidos"
backup-zsh:
desc: "Crear backup de configuración Zsh"
cmds:
- |
echo "💾 Creando backup de Zsh..."
BACKUP_DIR="zsh-backup-$(date +%Y%m%d_%H%M%S)"
mkdir -p "$BACKUP_DIR"
cp -r ~/.zshrc ~/.oh-my-zsh "$BACKUP_DIR"/ 2>/dev/null || true
echo "✅ Backup creado en: $BACKUP_DIR"