#!/usr/bin/env bash # install_wails # ------------- # Instala Wails v2 — framework para aplicaciones de escritorio en Go. # Detecta la distribución Linux e instala las dependencias de sistema necesarias # (GTK3, WebKit2GTK, build tools) y luego instala el CLI de Wails via go install. # # USO: # source install_wails.sh # install_wails install_wails() { echo "Instalando Wails..." echo "" # Verificar Go if ! command -v go &>/dev/null; then echo "install_wails: Go no está instalado (requerido)" >&2 echo " Instálalo primero con install_go" >&2 return 1 fi local go_version go_version="$(go version)" echo "Go detectado: ${go_version}" echo "" # Detectar distribución local distro="unknown" if [[ -f /etc/os-release ]]; then # shellcheck disable=SC1091 distro="$(. /etc/os-release && echo "${ID:-unknown}")" else echo "install_wails: no se pudo detectar la distribución de Linux" >&2 return 1 fi echo "Instalando dependencias del sistema para ${distro}..." case "$distro" in ubuntu|debian|linuxmint|pop) sudo apt update if ! sudo apt install -y libgtk-3-dev libwebkit2gtk-4.0-dev build-essential pkg-config; then echo "install_wails: falló la instalación de dependencias de sistema" >&2 return 1 fi ;; fedora|rhel|centos) if ! sudo dnf install -y gtk3-devel webkit2gtk3-devel gcc-c++ pkgconfig; then echo "install_wails: falló la instalación de dependencias de sistema" >&2 return 1 fi ;; arch|manjaro) if ! sudo pacman -Sy --noconfirm gtk3 webkit2gtk base-devel; then echo "install_wails: falló la instalación de dependencias de sistema" >&2 return 1 fi ;; opensuse*) if ! sudo zypper install -y gtk3-devel webkit2gtk3-devel gcc-c++ pkg-config; then echo "install_wails: falló la instalación de dependencias de sistema" >&2 return 1 fi ;; *) echo "Distribución no reconocida: ${distro}" echo "Instala manualmente: gtk3, webkit2gtk, build-essential, pkg-config" echo "Continuando con la instalación de Wails CLI..." ;; esac echo "" echo "Instalando Wails CLI (go install github.com/wailsapp/wails/v2/cmd/wails@latest)..." if ! go install github.com/wailsapp/wails/v2/cmd/wails@latest; then echo "install_wails: falló la instalación del CLI de Wails" >&2 return 1 fi # Asegurar que $GOPATH/bin esté en PATH if [[ ":$PATH:" != *":$HOME/go/bin:"* ]]; then local shell_config="" if [[ -f "$HOME/.bashrc" ]]; then shell_config="$HOME/.bashrc" elif [[ -f "$HOME/.zshrc" ]]; then shell_config="$HOME/.zshrc" fi if [[ -n "$shell_config" ]]; then if ! grep -q 'export PATH=\$PATH:\$HOME/go/bin' "$shell_config" 2>/dev/null; then { echo "" echo "# Go binaries" echo 'export PATH=$PATH:$HOME/go/bin' } >> "$shell_config" echo "PATH de Go añadido a ${shell_config}" fi fi export PATH="$PATH:$HOME/go/bin" fi echo "" # Verificar instalación if command -v wails &>/dev/null; then local wails_version wails_version="$(wails version 2>/dev/null || echo "instalado")" echo "Wails instalado correctamente: ${wails_version}" echo "" echo "Comandos básicos de Wails:" echo " wails init -n myapp -t vanilla - Crear proyecto" echo " wails dev - Modo desarrollo" echo " wails build - Build producción" echo " wails doctor - Verificar instalación" else echo "Wails instalado pero no está en PATH." echo " Reinicia tu terminal o ejecuta: source ~/.bashrc" fi } # Ejecutar si se invoca directamente if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then install_wails "$@" fi