Preview:
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"
downloadDownload PNG downloadDownload JPEG downloadDownload SVG

Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!

Click to optimize width for Twitter