#!/bin/bash # Mensagem de apresentação echo -e "\033[1;36m\n🚀 Bem-vindo ao script de configuração do ambiente Linux! 🐧\033[0m" echo -e "Este script irá instalar e configurar diversas ferramentas para desenvolvimento." echo -e "\nPor favor, revise o código antes de continuar." echo -e "Deseja prosseguir? [S/N]" read -r resposta if [[ ! "$resposta" =~ ^([sS][iI]?[mM]?|[sS])$ ]]; then echo -e "\033[1;31mOperação cancelada pelo usuário.\033[0m" exit 0 fi # Cores para mensagens RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # Sem cor # Verificação de programas já instalados echo -e "\n\033[1;34mVerificando programas já instalados...\033[0m" INSTALLED="" NOT_INSTALLED="" for prog in git go node docker vim nvim lazygit lazydocker tree; do if command -v "$prog" >/dev/null 2>&1; then echo -e "${GREEN}✅ $prog já está instalado.${NC}" INSTALLED+="$prog " else echo -e "${YELLOW}⚠️ $prog não encontrado.${NC}" NOT_INSTALLED+="$prog " fi done echo -e "\n\033[1;32mProgramas instalados: $INSTALLED\033[0m" echo -e "\033[1;33mProgramas não encontrados: $NOT_INSTALLED\033[0m\n" msg_info() { echo -e "${YELLOW}[INFO]${NC} $1" } msg_ok() { echo -e "${GREEN}[OK]${NC} ✅ $1" } msg_error() { echo -e "${RED}[ERRO]${NC} ❌ $1" } run_cmd() { eval "$1" if [ $? -eq 0 ]; then msg_ok "$2" else msg_error "$3" exit 1 fi } # Atualiza pacotes msg_info "Atualizando lista e fazendo upgrade dos pacotes..." run_cmd "sudo apt update && sudo apt upgrade -y" "Pacotes atualizados." "Falha ao atualizar pacotes." # Instalação do Git if ! command -v git >/dev/null 2>&1; then msg_info "Instalando Git..." run_cmd "sudo add-apt-repository ppa:git-core/ppa" "Repositório do Git adicionado." "Falha ao adicionar repositório do Git." run_cmd "sudo apt update" "Repositórios atualizados." "Falha ao atualizar repositórios." run_cmd "sudo apt install -y git" "Git instalado." "Falha ao instalar Git." # Configuração do Git msg_info "Configurando Git..." read -p "Digite seu nome para o Git: " git_name run_cmd "git config --global user.name \"$git_name\"" "Nome configurado." "Falha ao configurar nome." read -p "Digite seu email para o Git: " git_email run_cmd "git config --global user.email \"$git_email\"" "Email configurado." "Falha ao configurar email." git config --global --list else msg_ok "Git já está instalado." read -p "Deseja reinstalar o Git e remover a versão atual? [s/N] " resp_git if [[ "$resp_git" =~ ^([sS][iI]?[mM]?|[sS])$ ]]; then msg_info "Removendo Git atual..." run_cmd "sudo apt remove --purge -y git" "Git removido." "Falha ao remover Git." msg_info "Instalando Git..." run_cmd "sudo add-apt-repository ppa:git-core/ppa" "Repositório do Git adicionado." "Falha ao adicionar repositório do Git." run_cmd "sudo apt update" "Repositórios atualizados." "Falha ao atualizar repositórios." run_cmd "sudo apt install -y git" "Git instalado." "Falha ao instalar Git." # Configuração do Git msg_info "Configurando Git..." read -p "Digite seu nome para o Git: " git_name run_cmd "git config --global user.name \"$git_name\"" "Nome configurado." "Falha ao configurar nome." read -p "Digite seu email para o Git: " git_email run_cmd "git config --global user.email \"$git_email\"" "Email configurado." "Falha ao configurar email." git config --global --list else msg_info "Pulando reinstalação do Git." fi fi # Instalação do GoLang if ! command -v go >/dev/null 2>&1; then msg_info "Instalando Golang..." run_cmd "sudo snap install go --classic" "Golang instalado." "Falha ao instalar Golang." msg_info "Configurando PATH para Go..." echo 'export PATH=$PATH:$HOME/go/bin' >> ~/.bashrc export PATH=$PATH:$HOME/go/bin msg_ok "PATH para Go configurado." else msg_ok "Golang já está instalado." read -p "Deseja reinstalar o Golang e remover a versão atual? [s/N] " resp_go if [[ "$resp_go" =~ ^([sS][iI]?[mM]?|[sS])$ ]]; then msg_info "Removendo Golang atual..." run_cmd "sudo snap remove go" "Golang removido." "Falha ao remover Golang." msg_info "Instalando Golang..." run_cmd "sudo snap install go --classic" "Golang instalado." "Falha ao instalar Golang." msg_info "Configurando PATH para Go..." echo 'export PATH=$PATH:$HOME/go/bin' >> ~/.bashrc export PATH=$PATH:$HOME/go/bin msg_ok "PATH para Go configurado." else msg_info "Pulando reinstalação do Golang." fi fi # Instalação de ferramentas if ! command -v node >/dev/null 2>&1; then msg_info "Instalando Node.js..." run_cmd "sudo snap install node --classic" "Node.js instalado." "Falha ao instalar Node.js." else msg_ok "Node.js já está instalado." read -p "Deseja reinstalar o Node.js e remover a versão atual? [s/N] " resp_node if [[ "$resp_node" =~ ^([sS][iI]?[mM]?|[sS])$ ]]; then msg_info "Removendo Node.js atual..." run_cmd "sudo snap remove node" "Node.js removido." "Falha ao remover Node.js." msg_info "Instalando Node.js..." run_cmd "sudo snap install node --classic" "Node.js instalado." "Falha ao instalar Node.js." else msg_info "Pulando reinstalação do Node.js." fi fi if ! command -v docker >/dev/null 2>&1; then msg_info "Instalando Docker..." for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove -y $pkg; done run_cmd "sudo apt-get install -y ca-certificates curl" "Dependências do Docker instaladas." "Falha ao instalar dependências do Docker." sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo \"${UBUNTU_CODENAME:-$VERSION_CODENAME}\") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update run_cmd "sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin" "Docker instalado." "Falha ao instalar Docker." else msg_ok "Docker já está instalado." read -p "Deseja reinstalar o Docker e remover a versão atual? [s/N] " resp_docker if [[ "$resp_docker" =~ ^([sS][iI]?[mM]?|[sS])$ ]]; then msg_info "Removendo Docker atual..." run_cmd "sudo apt-get remove --purge -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin" "Docker removido." "Falha ao remover Docker." msg_info "Instalando Docker..." for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove -y $pkg; done run_cmd "sudo apt-get install -y ca-certificates curl" "Dependências do Docker instaladas." "Falha ao instalar dependências do Docker." sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo \"${UBUNTU_CODENAME:-$VERSION_CODENAME}\") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update run_cmd "sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin" "Docker instalado." "Falha ao instalar Docker." else msg_info "Pulando reinstalação do Docker." fi fi if ! command -v lazygit >/dev/null 2>&1; then msg_info "Instalando lazygit..." run_cmd "go install github.com/jesseduffield/lazygit@latest" "lazygit instalado." "Falha ao instalar lazygit." else msg_ok "lazygit já está instalado." read -p "Deseja reinstalar o lazygit e remover a versão atual? [s/N] " resp_lazygit if [[ "$resp_lazygit" =~ ^([sS][iI]?[mM]?|[sS])$ ]]; then msg_info "Removendo lazygit atual..." run_cmd "sudo rm -f $(command -v lazygit)" "lazygit removido." "Falha ao remover lazygit." msg_info "Instalando lazygit..." run_cmd "go install github.com/jesseduffield/lazygit@latest" "lazygit instalado." "Falha ao instalar lazygit." else msg_info "Pulando reinstalação do lazygit." fi fi if ! command -v lazydocker >/dev/null 2>&1; then msg_info "Instalando lazydocker..." run_cmd "go install github.com/jesseduffield/lazydocker@latest" "lazydocker instalado." "Falha ao instalar lazydocker." else msg_ok "lazydocker já está instalado." read -p "Deseja reinstalar o lazydocker e remover a versão atual? [s/N] " resp_lazydocker if [[ "$resp_lazydocker" =~ ^([sS][iI]?[mM]?|[sS])$ ]]; then msg_info "Removendo lazydocker atual..." run_cmd "sudo rm -f $(command -v lazydocker)" "lazydocker removido." "Falha ao remover lazydocker." msg_info "Instalando lazydocker..." run_cmd "go install github.com/jesseduffield/lazydocker@latest" "lazydocker instalado." "Falha ao instalar lazydocker." else msg_info "Pulando reinstalação do lazydocker." fi fi if ! command -v tree >/dev/null 2>&1; then msg_info "Instalando tree..." run_cmd "sudo snap install tree" "tree instalado." "Falha ao instalar tree." else msg_ok "tree já está instalado." read -p "Deseja reinstalar o tree e remover a versão atual? [s/N] " resp_tree if [[ "$resp_tree" =~ ^([sS][iI]?[mM]?|[sS])$ ]]; then msg_info "Removendo tree atual..." run_cmd "sudo snap remove tree" "tree removido." "Falha ao remover tree." msg_info "Instalando tree..." run_cmd "sudo snap install tree" "tree instalado." "Falha ao instalar tree." else msg_info "Pulando reinstalação do tree." fi fi if ! command -v vim >/dev/null 2>&1; then msg_info "Instalando Vim..." run_cmd "sudo apt install -y vim" "Vim instalado." "Falha ao instalar Vim." else msg_ok "Vim já está instalado." read -p "Deseja reinstalar o Vim e remover a versão atual? [s/N] " resp_vim if [[ "$resp_vim" =~ ^([sS][iI]?[mM]?|[sS])$ ]]; then msg_info "Removendo Vim atual..." run_cmd "sudo apt remove --purge -y vim" "Vim removido." "Falha ao remover Vim." msg_info "Instalando Vim..." run_cmd "sudo apt install -y vim" "Vim instalado." "Falha ao instalar Vim." else msg_info "Pulando reinstalação do Vim." fi fi if ! command -v nvim >/dev/null 2>&1; then msg_info "Instalando Neovim..." run_cmd "sudo snap install nvim --classic" "Neovim instalado." "Falha ao instalar Neovim." else msg_ok "Neovim já está instalado." read -p "Deseja reinstalar o Neovim e remover a versão atual? [s/N] " resp_nvim if [[ "$resp_nvim" =~ ^([sS][iI]?[mM]?|[sS])$ ]]; then msg_info "Removendo Neovim atual..." run_cmd "sudo snap remove nvim" "Neovim removido." "Falha ao remover Neovim." msg_info "Instalando Neovim..." run_cmd "sudo snap install nvim --classic" "Neovim instalado." "Falha ao instalar Neovim." else msg_info "Pulando reinstalação do Neovim." fi fi # LazyVim depende do Neovim if ! command -v nvim >/dev/null 2>&1; then msg_info "Instalando LazyVim..." run_cmd "git clone https://github.com/LazyVim/starter ~/.config/nvim" "LazyVim clonado." "Falha ao clonar LazyVim." rm -rf ~/.config/nvim/.git msg_ok "LazyVim instalado." else msg_ok "LazyVim já está instalado ou Neovim não está presente." read -p "Deseja reinstalar o LazyVim e remover a versão atual? [s/N] " resp_lazyvim if [[ "$resp_lazyvim" =~ ^([sS][iI]?[mM]?|[sS])$ ]]; then msg_info "Removendo LazyVim atual..." rm -rf ~/.config/nvim msg_info "Instalando LazyVim..." run_cmd "git clone https://github.com/LazyVim/starter ~/.config/nvim" "LazyVim clonado." "Falha ao clonar LazyVim." rm -rf ~/.config/nvim/.git msg_ok "LazyVim instalado." else msg_info "Pulando reinstalação do LazyVim." fi fi