Last active
November 19, 2025 11:20
-
-
Save sidneyspe/908d74fb4b9b4be47272612bfd03fdd7 to your computer and use it in GitHub Desktop.
Nobara Environment
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/usr/bin/env bash | |
| set -e | |
| # ========================================== | |
| # Setup completo e idempotente para Nobara | |
| # Dev + Docker + ZSH (Spaceship) + utilitários | |
| # ========================================== | |
| echo "🚀 Iniciando setup COMPLETO e IDEMPOTENTE no Nobara/Fedora..." | |
| sleep 1 | |
| # -------- Helpers -------- | |
| install_dnf_pkg() { | |
| PKG="$1" | |
| if rpm -q "$PKG" &>/dev/null; then | |
| echo "✔ $PKG já instalado — pulando..." | |
| else | |
| echo "📦 Instalando $PKG..." | |
| sudo dnf install -y "$PKG" | |
| fi | |
| } | |
| install_flatpak_pkg() { | |
| PKG="$1" | |
| if flatpak list | grep -q "$PKG"; then | |
| echo "✔ $PKG já instalado (Flatpak) — pulando..." | |
| else | |
| echo "📦 Instalando $PKG via Flatpak..." | |
| flatpak install -y flathub "$PKG" | |
| fi | |
| } | |
| # -------- Update base -------- | |
| echo "🔧 Atualizando sistema..." | |
| sudo dnf update -y | |
| # -------- DNF packages -------- | |
| echo "📦 Instalando pacotes via DNF (com checagem)..." | |
| for pkg in \ | |
| git \ | |
| python3 python3-pip \ | |
| nodejs npm \ | |
| java-21-openjdk java-21-openjdk-devel \ | |
| mingw64-gcc mingw32-gcc \ | |
| unrar unzip \ | |
| lsd \ | |
| flameshot \ | |
| httpie \ | |
| docker docker-compose \ | |
| vlc \ | |
| zsh \ | |
| curl wget fzf | |
| do | |
| install_dnf_pkg "$pkg" | |
| done | |
| # -------- JetBrains Mono Nerd Font -------- | |
| echo "🔤 Instalando JetBrainsMono Nerd Font em ~/.fonts..." | |
| JB_FONT_INSTALLED="no" | |
| if command -v fc-list >/dev/null 2>&1; then | |
| if fc-list | grep -qi "JetBrainsMono Nerd Font"; then | |
| JB_FONT_INSTALLED="yes" | |
| fi | |
| fi | |
| if [ "$JB_FONT_INSTALLED" = "yes" ]; then | |
| echo "✔ JetBrainsMono Nerd Font já instalada — pulando..." | |
| else | |
| mkdir -p "$HOME/.fonts" | |
| TMP_JB_TAR="/tmp/JetBrainsMonoNF.tar.xz" | |
| TMP_JB_DIR="/tmp/JetBrainsMonoNF" | |
| echo "🔽 Baixando JetBrainsMono Nerd Font (Nerd Fonts release)..." | |
| curl -L "https://github.com/ryanoasis/nerd-fonts/releases/latest/download/JetBrainsMono.tar.xz" -o "$TMP_JB_TAR" | |
| rm -rf "$TMP_JB_DIR" | |
| mkdir -p "$TMP_JB_DIR" | |
| echo "📦 Extraindo fontes..." | |
| tar -xf "$TMP_JB_TAR" -C "$TMP_JB_DIR" | |
| echo "📁 Copiando .ttf/.otf para ~/.fonts..." | |
| find "$TMP_JB_DIR" -type f \( -name "*.ttf" -o -name "*.otf" \) -exec cp {} "$HOME/.fonts/" \; | |
| if command -v fc-cache >/dev/null 2>&1; then | |
| echo "🧹 Atualizando cache de fontes..." | |
| fc-cache -f -v || true | |
| fi | |
| echo "✔ JetBrainsMono Nerd Font instalada em ~/.fonts" | |
| fi | |
| # -------- GOTOP (via release oficial) -------- | |
| echo "📊 Instalando gotop (binário oficial)..." | |
| if command -v gotop >/dev/null 2>&1; then | |
| echo "✔ gotop já instalado — pulando..." | |
| else | |
| echo "🔍 Buscando release mais recente do gotop..." | |
| LATEST_URL=$(curl -s https://api.github.com/repos/xxxserxxx/gotop/releases/latest \ | |
| | grep browser_download_url \ | |
| | grep linux_amd64.tgz \ | |
| | cut -d '"' -f 4) | |
| if [ -z "$LATEST_URL" ]; then | |
| echo "❌ Não foi possível encontrar o .tgz do gotop. Pulando instalação." | |
| else | |
| echo "🔽 Baixando: $LATEST_URL" | |
| curl -L "$LATEST_URL" -o /tmp/gotop.tgz | |
| echo "📦 Extraindo..." | |
| tar -xzf /tmp/gotop.tgz -C /tmp/ | |
| GOTOP_BIN=$(find /tmp -maxdepth 3 -type f -name "gotop" | head -n 1) | |
| if [ -z "$GOTOP_BIN" ]; then | |
| echo "❌ Binário do gotop não encontrado no .tgz. Pulando." | |
| else | |
| echo "📁 Movendo binário para /usr/local/bin/gotop" | |
| sudo mv "$GOTOP_BIN" /usr/local/bin/gotop | |
| sudo chmod +x /usr/local/bin/gotop | |
| echo "✔ gotop instalado com sucesso em /usr/local/bin/gotop" | |
| fi | |
| fi | |
| fi | |
| # -------- Dockly via npm -------- | |
| echo "🧰 Instalando Dockly via npm..." | |
| if command -v dockly >/dev/null 2>&1; then | |
| echo "✔ dockly já instalado — pulando..." | |
| else | |
| sudo npm install -g dockly | |
| fi | |
| # -------- PNPM via npm -------- | |
| echo "📦 Instalando PNPM..." | |
| if command -v pnpm >/dev/null 2>&1; then | |
| echo "✔ pnpm já instalado — pulando..." | |
| else | |
| sudo npm install -g pnpm | |
| echo "✔ pnpm instalado!" | |
| fi | |
| # -------- Docker -------- | |
| echo "🐳 Habilitando Docker..." | |
| sudo systemctl enable --now docker || true | |
| sudo usermod -aG docker "$USER" || true | |
| # -------- Bun -------- | |
| echo "⚡ Instalando Bun..." | |
| if command -v bun >/dev/null 2>&1; then | |
| echo "✔ Bun já instalado — pulando..." | |
| else | |
| curl -fsSL https://bun.sh/install | bash | |
| fi | |
| # -------- Sublime Text (via latest stable rpm) -------- | |
| echo "📦 Instalando Sublime Text 4..." | |
| if command -v subl >/dev/null 2>&1; then | |
| echo "✔ Sublime Text já instalado — pulando..." | |
| else | |
| echo "🔽 Baixando último Sublime Text estável (.rpm)..." | |
| curl -L https://download.sublimetext.com/latest/stable/linux/x64/rpm -o /tmp/sublime.rpm | |
| echo "📦 Instalando Sublime Text via RPM..." | |
| if sudo dnf install -y /tmp/sublime.rpm; then | |
| echo "✔ Sublime Text instalado com sucesso!" | |
| else | |
| echo "❌ Falha ao instalar Sublime Text via RPM. Pulando." | |
| fi | |
| fi | |
| # -------- Zed Editor (via tar.gz oficial) -------- | |
| echo "🟣 Instalando Zed Editor..." | |
| if command -v zed >/dev/null 2>&1; then | |
| echo "✔ Zed já instalado — pulando..." | |
| else | |
| TMP_ZED_DIR="/tmp/zed-linux" | |
| TMP_ZED_TAR="/tmp/zed-linux-x86_64.tar.gz" | |
| echo "🔽 Baixando Zed (stable, tar.gz)..." | |
| if ! curl -fL "https://zed.dev/api/releases/stable/latest/zed-linux-x86_64.tar.gz" -o "$TMP_ZED_TAR"; then | |
| echo "❌ Falha ao baixar o Zed (tar.gz). Pulando instalação." | |
| else | |
| rm -rf "$TMP_ZED_DIR" | |
| mkdir -p "$TMP_ZED_DIR" | |
| echo "📦 Extraindo pacote..." | |
| if tar -xzf "$TMP_ZED_TAR" -C "$TMP_ZED_DIR"; then | |
| if [ -d "$TMP_ZED_DIR/zed.app" ]; then | |
| echo "📁 Movendo para /opt/zed.app..." | |
| sudo rm -rf /opt/zed.app | |
| sudo mv "$TMP_ZED_DIR/zed.app" /opt/zed.app | |
| echo "🔗 Criando symlink /usr/local/bin/zed..." | |
| sudo ln -sf /opt/zed.app/bin/zed /usr/local/bin/zed | |
| echo "✔ Zed Editor instalado com sucesso (via /opt/zed.app)!" | |
| else | |
| echo "❌ Não encontrei 'zed.app' dentro do tar.gz — instalação abortada." | |
| fi | |
| else | |
| echo "❌ Falha ao extrair o tar.gz do Zed." | |
| fi | |
| fi | |
| fi | |
| # -------- Flatpak apps -------- | |
| echo "📦 Instalando apps via Flatpak..." | |
| install_flatpak_pkg com.visualstudio.code | |
| install_flatpak_pkg com.mongodb.Compass | |
| install_flatpak_pkg com.getpostman.Postman | |
| install_flatpak_pkg us.zoom.Zoom | |
| install_flatpak_pkg io.dbeaver.DBeaverCommunity | |
| # -------- TeamViewer -------- | |
| echo "📦 Instalando TeamViewer..." | |
| if rpm -q teamviewer &>/dev/null; then | |
| echo "✔ TeamViewer já instalado — pulando..." | |
| else | |
| sudo dnf install -y https://download.teamviewer.com/download/linux/teamviewer.x86_64.rpm || true | |
| fi | |
| # -------- Multimedia codecs (dnf5 group) -------- | |
| echo "🎮 Instalando codecs multimídia (grupo Multimedia)..." | |
| if dnf group list -v | grep -qi "Multimedia"; then | |
| sudo dnf group install -y "Multimedia" || true | |
| else | |
| echo "ℹ️ Grupo 'Multimedia' não encontrado — pulando." | |
| fi | |
| # -------- Oh My Zsh -------- | |
| echo "💅 Instalando Oh My Zsh..." | |
| if [ -d "$HOME/.oh-my-zsh" ]; then | |
| echo "✔ Oh My Zsh já instalado — pulando..." | |
| else | |
| export RUNZSH=no CHSH=no KEEP_ZSHRC=yes | |
| sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" | |
| fi | |
| # -------- Spaceship theme (Oh My Zsh) -------- | |
| echo "🚀 Instalando tema Spaceship para Oh My Zsh..." | |
| ZSH_CUSTOM="${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}" | |
| if [ ! -d "$ZSH_CUSTOM/themes/spaceship-prompt" ]; then | |
| git clone --depth=1 https://github.com/spaceship-prompt/spaceship-prompt.git \ | |
| "$ZSH_CUSTOM/themes/spaceship-prompt" | |
| else | |
| echo "✔ Repositório spaceship-prompt já existe — pulando clone." | |
| fi | |
| if [ ! -f "$ZSH_CUSTOM/themes/spaceship.zsh-theme" ]; then | |
| ln -s "$ZSH_CUSTOM/themes/spaceship-prompt/spaceship.zsh-theme" \ | |
| "$ZSH_CUSTOM/themes/spaceship.zsh-theme" | |
| echo "✔ Symlink do tema Spaceship criado." | |
| else | |
| echo "✔ Symlink do tema Spaceship já existe — pulando." | |
| fi | |
| # -------- Zinit -------- | |
| echo "🔌 Instalando Zinit..." | |
| ZINIT_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/zinit/zinit.git" | |
| if [ -d "$ZINIT_DIR" ]; then | |
| echo "✔ Zinit já instalado — pulando..." | |
| else | |
| bash -c "$(curl -fsSL https://git.io/zinit-install)" | |
| fi | |
| # -------- asdf -------- | |
| echo "🧱 Instalando asdf..." | |
| if [ -d "$HOME/.asdf" ]; then | |
| echo "✔ asdf já instalado — pulando..." | |
| else | |
| git clone https://github.com/asdf-vm/asdf.git "$HOME/.asdf" --branch v0.14.0 | |
| fi | |
| # -------- NVM -------- | |
| echo "🟢 Instalando NVM..." | |
| if [ -d "$HOME/.nvm" ]; then | |
| echo "✔ NVM já instalado — pulando..." | |
| else | |
| curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash | |
| fi | |
| # -------- .zshrc -------- | |
| echo "📦 Criando backup do .zshrc antigo (se existir)..." | |
| if [ -f "$HOME/.zshrc" ]; then | |
| cp "$HOME/.zshrc" "$HOME/.zshrc.backup_$(date +%s)" | |
| echo "✔ Backup criado." | |
| fi | |
| echo "📝 Gerando novo ~/.zshrc com Spaceship + Bun + PNPM + Zinit..." | |
| cat > "$HOME/.zshrc" << 'EOF' | |
| # ========= PATHS BÁSICOS ========= | |
| export ANDROID_HOME="$HOME/Android/Sdk" | |
| export PATH="$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools" | |
| export ZSH="$HOME/.oh-my-zsh" | |
| export PATH="$PATH:/usr/local/bin:$HOME/.local/bin" | |
| export DISPLAY=:0 | |
| # Tema do Oh My Zsh (Spaceship instalado em $ZSH_CUSTOM/themes) | |
| ZSH_THEME="spaceship" | |
| # ========= BUN ========= | |
| export BUN_INSTALL="$HOME/.bun" | |
| export PATH="$BUN_INSTALL/bin:$PATH" | |
| # ========= PNPM ========= | |
| export PNPM_HOME="$HOME/.local/share/pnpm" | |
| export PATH="$PNPM_HOME:$PATH" | |
| # ========= ASDF ========= | |
| if [ -f "$HOME/.asdf/asdf.sh" ]; then | |
| . "$HOME/.asdf/asdf.sh" | |
| fi | |
| # ========= GO ========= | |
| export GOPATH="$HOME/go" | |
| export PATH="$PATH:$GOPATH/bin" | |
| # ========= PLUGINS OH MY ZSH ========= | |
| plugins=(docker httpie git node postgres) | |
| source "$ZSH/oh-my-zsh.sh" | |
| # ========= ALIASES ========= | |
| alias ls='lsd' | |
| alias l='lsd -l' | |
| alias la='lsd -la' | |
| alias lt='lsd --tree' | |
| alias cls='clear' | |
| alias python='python3' | |
| alias dockerstopall='docker stop $(docker ps -aq)' | |
| alias dockerremoveall='docker rm $(docker ps -aq)' | |
| alias dockersystemprune='docker system prune -a --volumes' | |
| alias updt='sudo dnf clean all -y && sudo dnf upgrade -y && flatpak update -y && omz update' | |
| alias upgd='updt' | |
| alias rando="cat /dev/urandom | base64 | tr -dc 'a-km-zA-KM-Z02-9-_!@#$%^&*+|' | fold -w 16 | head -n 4" | |
| alias code='flatpak run com.visualstudio.code 2>/dev/null' | |
| # ========= NVM ========= | |
| export NVM_DIR="$HOME/.nvm" | |
| [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" | |
| # ========= ZINIT ========= | |
| ZINIT_HOME="${XDG_DATA_HOME:-${HOME}/.local/share}/zinit/zinit.git" | |
| if [ -f "${ZINIT_HOME}/zinit.zsh" ]; then | |
| source "${ZINIT_HOME}/zinit.zsh" | |
| zinit light zdharma-continuum/fast-syntax-highlighting | |
| zinit light zsh-users/zsh-autosuggestions | |
| zinit light zsh-users/zsh-history-substring-search | |
| zinit light zsh-users/zsh-completions | |
| zinit light buonomo/yarn-completion | |
| zinit light-mode for \ | |
| zdharma-continuum/zinit-annex-as-monitor \ | |
| zdharma-continuum/zinit-annex-bin-gem-node \ | |
| zdharma-continuum/zinit-annex-patch-dl \ | |
| zdharma-continuum/zinit-annex-rust | |
| fi | |
| autoload -Uz compinit | |
| compinit | |
| EOF | |
| # -------- Default shell -------- | |
| echo "🔁 Definindo ZSH como shell padrão..." | |
| if [ "$SHELL" != "/usr/bin/zsh" ]; then | |
| chsh -s /usr/bin/zsh "$USER" || true | |
| fi | |
| echo "" | |
| echo "🎉 Setup COMPLETO e IDEMPOTENTE finalizado!" | |
| echo "➡ Java 21 instalado (java-21-openjdk + devel)" | |
| echo "➡ JetBrainsMono Nerd Font instalada em ~/.fonts" | |
| echo "➡ Bun + PNPM instalados e no PATH" | |
| echo "➡ Apps verificados e instalados (dnf + flatpak + rpm)" | |
| echo "➡ gotop via release oficial, Dockly via npm" | |
| echo "➡ Sublime + Zed + VSCode etc. prontos" | |
| echo "➡ Zsh + Oh My Zsh + Spaceship + Zinit configurados" | |
| echo "" | |
| echo "⚠️ Faz logout/login pra aplicar grupo docker, shell padrão e fontes." | |
| echo "Depois abre o terminal, escolhe JetBrainsMono Nerd Font e curte o setup. 🚀" |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
chmod +x install-nobara.sh
./install-nobara.sh