#!/bin/bash #Script : vscode_install.sh #Apps : MRDEVS TOOLS #Description : Instala Visual Studio Code con soporte multiplataforma #Author : Cortana Rosero One #Generated : Created by Claude Code (claude-3-7-sonnet-20250219) #Created : 2025/04/04 10:00:00 #Modified : 2025/04/04 10:00:00 #Version : 1.3.1 #Use Notes : Ejecutar sin parámetros para instalación interactiva # -u para desinstalar #============================================================================== # Derechos de Autor 2025 Mauro Rosero P. #============================================================================== # Este programa es software libre: usted puede redistribuirlo y/o modificarlo # bajo los términos de la Licencia Pública Affero General de GNU tal como # lo publica la Free Software Foundation, ya sea la versión 3 de la licencia, # o (a su elección) cualquier versión posterior. # # Este programa se distribuye con la esperanza de que sea útil, # pero SIN NINGUNA GARANTÍA; sin siquiera la garantía implícita de # COMERCIABILIDAD o IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Consulte la # Licencia Pública Affero General de GNU para obtener más detalles. # # Debería haber recibido una copia de la Licencia Pública Affero General # junto con este programa. Si no la recibió, consulte . # Configuración inicial SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" BIN_BASE="bin" BIN_LIBS="lib" BIN_MESG="msg" BIN_LANG="head.es" BIN_CFGS="config" # Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto if [ -f "$SCRIPT_DIR/$BIN_CFGS/devspath.dat" ]; then DEVSPATH=$(cat "$SCRIPT_DIR/$BIN_CFGS/devspath.dat") else DEVSPATH="devs" fi # Cargar bibliotecas comunes if [ -f "$SCRIPT_DIR/$BIN_LIBS/base.lib" ]; then source "$SCRIPT_DIR/$BIN_LIBS/base.lib" else echo "Error: No se encontró la biblioteca base.lib" exit 1 fi # Cargar mensajes en español if [ -f "$SCRIPT_DIR/$BIN_MESG/$BIN_LANG" ]; then source "$SCRIPT_DIR/$BIN_MESG/$BIN_LANG" else echo "Error: No se encontraron los archivos de mensajes" exit 1 fi # Verificar si se está solicitando la desinstalación UNINSTALL=0 if [ "$1" = "-u" ]; then UNINSTALL=1 fi # Función para detectar el sistema operativo detect_os() { if [ -f /etc/os-release ]; then . /etc/os-release OS=$NAME VER=$VERSION_ID elif [ -f /etc/lsb-release ]; then . /etc/lsb-release OS=$DISTRIB_ID VER=$DISTRIB_RELEASE elif [ -f /etc/debian_version ]; then OS="Debian" VER=$(cat /etc/debian_version) elif [ -f /etc/redhat-release ]; then OS=$(cat /etc/redhat-release | cut -d ' ' -f 1) VER=$(cat /etc/redhat-release | grep -oE '[0-9]+\.[0-9]+') elif [ "$(uname)" == "Darwin" ]; then OS="macOS" VER=$(sw_vers -productVersion) elif [ "$(uname)" == "FreeBSD" ]; then OS="FreeBSD" VER=$(uname -r) else OS="Unknown" VER="Unknown" fi echo "$OS" } # Función para instalar VSCode en sistemas basados en Debian/Ubuntu install_vscode_debian() { echo -e "\n${head_info}: Instalando paquetes necesarios..." sudo apt update sudo apt install -y wget gpg apt-transport-https echo -e "\n${head_info}: Descargando e instalando la clave GPG de Microsoft..." wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg sudo install -D -o root -g root -m 644 microsoft.gpg /etc/apt/keyrings/microsoft.gpg rm microsoft.gpg echo -e "\n${head_info}: Configurando el repositorio de VSCode..." echo "deb [arch=amd64,arm64,armhf signed-by=/etc/apt/keyrings/microsoft.gpg] https://packages.microsoft.com/repos/code stable main" | \ sudo tee /etc/apt/sources.list.d/vscode.list echo -e "\n${head_info}: Actualizando repositorios e instalando Visual Studio Code..." sudo apt update sudo apt install -y code if command -v code &>/dev/null; then echo -e "\n${head_success}: Visual Studio Code ha sido instalado correctamente." echo -e "${head_info}: Versión instalada: $(code --version | head -n 1)" return 0 else echo -e "\n${head_error}: No se pudo instalar Visual Studio Code." return 1 fi } # Función para desinstalar VSCode en sistemas basados en Debian/Ubuntu uninstall_vscode_debian() { echo -e "\n${head_info}: Desinstalando Visual Studio Code..." sudo apt remove --purge -y code sudo rm -f /etc/apt/sources.list.d/vscode.list sudo rm -f /etc/apt/keyrings/microsoft.gpg sudo apt update if ! command -v code &>/dev/null; then echo -e "\n${head_success}: Visual Studio Code ha sido desinstalado correctamente." return 0 else echo -e "\n${head_error}: No se pudo desinstalar completamente Visual Studio Code." return 1 fi } # Función para instalar VSCode en sistemas basados en Red Hat (Fedora, RHEL, etc.) install_vscode_redhat() { echo -e "\n${head_info}: Instalando paquetes necesarios..." sudo dnf check-update sudo dnf install -y dnf-plugins-core echo -e "\n${head_info}: Configurando el repositorio de VSCode..." sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc sudo sh -c 'echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/vscode.repo' echo -e "\n${head_info}: Instalando Visual Studio Code..." sudo dnf install -y code if command -v code &>/dev/null; then echo -e "\n${head_success}: Visual Studio Code ha sido instalado correctamente." echo -e "${head_info}: Versión instalada: $(code --version | head -n 1)" return 0 else echo -e "\n${head_error}: No se pudo instalar Visual Studio Code." return 1 fi } # Función para desinstalar VSCode en sistemas basados en Red Hat uninstall_vscode_redhat() { echo -e "\n${head_info}: Desinstalando Visual Studio Code..." sudo dnf remove -y code sudo rm -f /etc/yum.repos.d/vscode.repo if ! command -v code &>/dev/null; then echo -e "\n${head_success}: Visual Studio Code ha sido desinstalado correctamente." return 0 else echo -e "\n${head_error}: No se pudo desinstalar completamente Visual Studio Code." return 1 fi } # Función para instalar VSCode en Arch Linux install_vscode_arch() { echo -e "\n${head_info}: Actualizando repositorios..." sudo pacman -Sy # Verificar si yay está instalado if command -v yay &>/dev/null; then echo -e "\n${head_info}: Instalando Visual Studio Code usando yay..." yay -S --noconfirm visual-studio-code-bin else echo -e "\n${head_info}: Instalando Visual Studio Code desde los repositorios oficiales..." # Intentar instalar el paquete oficial si está disponible if pacman -Si code &>/dev/null; then sudo pacman -S --noconfirm code else # Si no está disponible, intentar con el AUR echo -e "\n${head_info}: El paquete no está en los repositorios oficiales. Intentando con git..." sudo pacman -S --noconfirm git base-devel # Directorio temporal para la compilación BUILD_DIR=$(mktemp -d) cd "$BUILD_DIR" # Clonar el paquete del AUR y compilarlo git clone https://aur.archlinux.org/visual-studio-code-bin.git cd visual-studio-code-bin makepkg -si --noconfirm # Limpiar cd rm -rf "$BUILD_DIR" fi fi if command -v code &>/dev/null; then echo -e "\n${head_success}: Visual Studio Code ha sido instalado correctamente." echo -e "${head_info}: Versión instalada: $(code --version | head -n 1)" return 0 else echo -e "\n${head_error}: No se pudo instalar Visual Studio Code." return 1 fi } # Función para desinstalar VSCode en Arch Linux uninstall_vscode_arch() { echo -e "\n${head_info}: Desinstalando Visual Studio Code..." # Intentar desinstalar desde diferentes paquetes posibles if pacman -Qi visual-studio-code-bin &>/dev/null; then sudo pacman -R --noconfirm visual-studio-code-bin elif pacman -Qi code &>/dev/null; then sudo pacman -R --noconfirm code elif pacman -Qi visual-studio-code &>/dev/null; then sudo pacman -R --noconfirm visual-studio-code fi if ! command -v code &>/dev/null; then echo -e "\n${head_success}: Visual Studio Code ha sido desinstalado correctamente." return 0 else echo -e "\n${head_error}: No se pudo desinstalar completamente Visual Studio Code." return 1 fi } # Función para instalar VSCode en macOS install_vscode_macos() { echo -e "\n${head_info}: Verificando si Homebrew está instalado..." if ! command -v brew &>/dev/null; then echo -e "\n${head_info}: Instalando Homebrew..." /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" fi echo -e "\n${head_info}: Instalando Visual Studio Code mediante Homebrew..." brew install --cask visual-studio-code if [ -d "/Applications/Visual Studio Code.app" ]; then echo -e "\n${head_success}: Visual Studio Code ha sido instalado correctamente." return 0 else echo -e "\n${head_error}: No se pudo instalar Visual Studio Code." return 1 fi } # Función para desinstalar VSCode en macOS uninstall_vscode_macos() { echo -e "\n${head_info}: Desinstalando Visual Studio Code..." if command -v brew &>/dev/null; then brew uninstall --cask visual-studio-code fi if [ -d "/Applications/Visual Studio Code.app" ]; then rm -rf "/Applications/Visual Studio Code.app" fi if [ ! -d "/Applications/Visual Studio Code.app" ]; then echo -e "\n${head_success}: Visual Studio Code ha sido desinstalado correctamente." return 0 else echo -e "\n${head_error}: No se pudo desinstalar completamente Visual Studio Code." return 1 fi } # Función para instalar VSCode en FreeBSD install_vscode_freebsd() { echo -e "\n${head_info}: Actualizando repositorios..." sudo pkg update echo -e "\n${head_info}: Instalando Visual Studio Code..." sudo pkg install -y vscode if command -v code &>/dev/null; then echo -e "\n${head_success}: Visual Studio Code ha sido instalado correctamente." echo -e "${head_info}: Versión instalada: $(code --version | head -n 1)" return 0 else echo -e "\n${head_error}: No se pudo instalar Visual Studio Code." return 1 fi } # Función para desinstalar VSCode en FreeBSD uninstall_vscode_freebsd() { echo -e "\n${head_info}: Desinstalando Visual Studio Code..." sudo pkg remove -y vscode if ! command -v code &>/dev/null; then echo -e "\n${head_success}: Visual Studio Code ha sido desinstalado correctamente." return 0 else echo -e "\n${head_error}: No se pudo desinstalar completamente Visual Studio Code." return 1 fi } # Función principal para instalar VSCode install_vscode() { local os=$(detect_os) local result=0 echo -e "\n${head_info}: Sistema operativo detectado: ${os}" # Instalar según el sistema operativo case "$os" in *"Ubuntu"*|*"Debian"*|*"Linux Mint"*|*"Pop!_OS"*|*"elementary OS"*) install_vscode_debian result=$? ;; *"Fedora"*|*"Red Hat"*|*"CentOS"*|*"Rocky"*|*"AlmaLinux"*|*"Oracle Linux"*) install_vscode_redhat result=$? ;; *"Arch"*|*"Manjaro"*|*"EndeavourOS"*|*"Garuda"*) install_vscode_arch result=$? ;; *"macOS"*) install_vscode_macos result=$? ;; *"FreeBSD"*) install_vscode_freebsd result=$? ;; *) echo -e "\n${head_error}: ${os_nofound}" return 1 ;; esac # Si la instalación fue exitosa, mostrar información adicional if [ $result -eq 0 ]; then echo -e "\n${head_info}: Visual Studio Code ha sido instalado correctamente." echo -e "${head_info}: Para iniciar VSCode, ejecute: code" fi return $result } # Función principal para desinstalar VSCode uninstall_vscode() { local os=$(detect_os) local result=0 echo -e "\n${head_info}: Sistema operativo detectado: ${os}" # Mostrar diálogo de confirmación if command -v dialog &>/dev/null; then dialog --title "${npm_031}" --yesno "${npm_032}" 8 60 if [ $? -ne 0 ]; then echo -e "\n${head_info}: ${npm_008}" return 0 fi else read -p "${npm_032} (s/n): " CONFIRM if [[ ! "$CONFIRM" =~ ^[Ss]$ ]]; then echo -e "\n${head_info}: ${npm_008}" return 0 fi fi # Desinstalar según el sistema operativo case "$os" in *"Ubuntu"*|*"Debian"*|*"Linux Mint"*|*"Pop!_OS"*|*"elementary OS"*) uninstall_vscode_debian result=$? ;; *"Fedora"*|*"Red Hat"*|*"CentOS"*|*"Rocky"*|*"AlmaLinux"*|*"Oracle Linux"*) uninstall_vscode_redhat result=$? ;; *"Arch"*|*"Manjaro"*|*"EndeavourOS"*|*"Garuda"*) uninstall_vscode_arch result=$? ;; *"macOS"*) uninstall_vscode_macos result=$? ;; *"FreeBSD"*) uninstall_vscode_freebsd result=$? ;; *) echo -e "\n${head_error}: ${os_nofound}" return 1 ;; esac # Si la desinstalación fue exitosa, mostrar mensaje if [ $result -eq 0 ]; then echo -e "\n${head_success}: Visual Studio Code ha sido desinstalado correctamente." fi return $result } # Mostrar encabezado echo -e "\n=== ${npm_018} ===" # Verificar si VSCode ya está instalado if command -v code &>/dev/null; then CODE_VERSION=$(code --version | head -n 1) echo -e "\n${npm_019}" echo "Visual Studio Code: $CODE_VERSION" # Si se solicita desinstalación if [ $UNINSTALL -eq 1 ]; then uninstall_vscode else # Si ya está instalado y no se solicita desinstalación, preguntar qué hacer if command -v dialog &>/dev/null; then dialog --title "${npm_031}" --yesno "Visual Studio Code ya está instalado (versión $CODE_VERSION).\n¿Desea reinstalarlo?" 8 60 REINSTALL=$? if [ $REINSTALL -eq 0 ]; then uninstall_vscode && install_vscode fi else read -p "Visual Studio Code ya está instalado (versión $CODE_VERSION). ¿Desea reinstalarlo? (s/n): " REINSTALL if [[ "$REINSTALL" =~ ^[Ss]$ ]]; then uninstall_vscode && install_vscode fi fi fi else # Si no está instalado if [ $UNINSTALL -eq 1 ]; then echo -e "\n${head_info}: Visual Studio Code no está instalado. Nada que hacer." else # Mostrar diálogo de confirmación para instalar if command -v dialog &>/dev/null; then dialog --title "${npm_031}" --yesno "${npm_033}" 8 60 if [ $? -eq 0 ]; then install_vscode else echo -e "\n${head_info}: ${npm_008}" fi else read -p "${npm_033} (s/n): " CONFIRM if [[ "$CONFIRM" =~ ^[Ss]$ ]]; then install_vscode else echo -e "\n${head_info}: ${npm_008}" fi fi fi fi echo -e "\n=== ${npm_021} ==="