Skip to content

Instantly share code, notes, and snippets.

@alextakitani
Created April 16, 2025 13:57
Show Gist options
  • Save alextakitani/d23e22324537c24c102fb8d37af016cd to your computer and use it in GitHub Desktop.
Save alextakitani/d23e22324537c24c102fb8d37af016cd to your computer and use it in GitHub Desktop.
Post install Fedora 42
#!/usr/bin/env bash
# post_install_k.sh - Fedora 42
# Script pós-instalação otimizado para Fedora 42 com UX aprimorada
set -e
# Cores para mensagens
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[1;34m'
NC='\033[0m' # No Color
# Função para exibir barra de progresso fake
progress_bar() {
local duration=${1:-2} # Slightly faster default
local message="${2:-Processando...}"
echo -ne "${BLUE}$message${NC}\n"
local cols=$(tput cols 2>/dev/null || echo 80)
local bar_width=$((cols - 10))
[[ $bar_width -lt 20 ]] && bar_width=20 # Minimum width
for ((i=0;i<=duration;i++)); do
local progress=$((i * 100 / duration))
local filled_width=$((i * bar_width / duration))
echo -ne "["
printf '%*s' "$filled_width" '' | tr ' ' '#'
printf '%*s' "$((bar_width - filled_width))" ''
echo -ne "] ${progress}%\r"
sleep 0.5
done
echo -e "\n"
}
# Função para mensagens destacadas
msg() { echo -e "${GREEN}==> $1${NC}"; }
warn() { echo -e "${YELLOW}WARN: $1${NC}"; }
err() { echo -e "${RED}ERRO: $1${NC}"; exit 1; }
# Checar se está executando como root
if [[ $EUID -eq 0 ]]; then
err "Este script não deve ser executado como root. Use seu usuário normal (sudo será solicitado quando necessário)."
fi
msg "Atualizando sistema..."
progress_bar 2 "Atualizando pacotes do sistema"
sudo dnf update -y && sudo dnf upgrade -y
msg "Instalando pacotes essenciais, ferramentas e dependências..."
progress_bar 4 "Instalando utilitários, ferramentas de dev, fontes, plugins, etc."
sudo dnf install -y \
zsh openssh-clients curl nfs-utils zenity gnome-keyring git cmake gcc-c++ make \
vim curl-devel htop iotop ImageMagick ImageMagick-devel fira-code-fonts imwheel \
tmux autokey rust yaml-cpp-devel gawk translate-shell fzf ripgrep bat eza \
postgresql-client ethtool stow unzip wget dnf-plugins-core flatpak atuin konsole \
neovim lazygit \
|| err "Falha ao instalar pacotes essenciais via DNF."
msg "Configurando Flatpak e Flathub..."
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
msg "Configurando locale para pt_BR.UTF-8..."
sudo localectl set-locale LANG=pt_BR.UTF-8
# Fix cedilha teclado en-us
msg "Ajustando cedilha para teclado internacional..."
cd /tmp
if wget -q https://raw.githubusercontent.com/marcopaganini/gnome-cedilla-fix/master/fix-cedilla -O fix-cedilla; then
chmod 755 fix-cedilla
# Execute silently, check exit code
if ! ./fix-cedilla > /dev/null 2>&1; then
warn "O script fix-cedilla retornou um erro (pode já ter sido aplicado ou falhou)."
fi
rm -f fix-cedilla
else
warn "Falha ao baixar o script fix-cedilla."
fi
cd -
# Docker
msg "Instalando Docker..."
progress_bar 2 "Adicionando repositório e instalando Docker"
sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin || err "Falha ao instalar Docker."
# LAZYDOCKER
msg "Instalando LazyDocker pelo repositório COPR..."
# dnf-plugins-core was installed earlier
sudo dnf copr enable -y atim/lazydocker || warn "Falha ao habilitar COPR atim/lazydocker."
sudo dnf install -y lazydocker || warn "Falha ao instalar lazydocker."
# Nerd Fonts
msg "Instalando fontes Nerd Fonts (CascadiaMono, FiraCode, FiraMono)..."
mkdir -p ~/.local/share/fonts
cd /tmp
for font in CascadiaMono FiraCode FiraMono; do
wget -q https://github.com/ryanoasis/nerd-fonts/releases/latest/download/${font}.zip
unzip -o ${font}.zip -d ${font}
cp ${font}/*.{ttf,otf} ~/.local/share/fonts 2>/dev/null || true
rm -rf ${font}.zip ${font}
done
fc-cache -fv
cd -
# Antigen (ZSH plugin manager)
msg "Instalando Antigen para ZSH..."
[ -f "$HOME/antigen.zsh" ] || curl -L git.io/antigen > "$HOME/antigen.zsh"
# ZSH config básica
if ! grep -q antigen "$HOME/.zshrc" 2>/dev/null; then
cat << EOF >> ~/.zshrc
# Antigen
source ~/antigen.zsh
antigen use oh-my-zsh
antigen bundle git
antigen bundle fzf
antigen bundle docker
antigen bundle zsh-users/zsh-autosuggestions
antigen bundle zsh-users/zsh-syntax-highlighting
antigen apply
EOF
fi
# Mudar shell padrão para zsh
msg "Alterando shell padrão para zsh (será solicitada senha)..."
chsh -s $(which zsh) $USER
msg "Configuração concluída com sucesso! Faça logout/login para aplicar todas as alterações."
test -f $HOME/.zshrc || touch $HOME/.zshrc
curl -L git.io/antigen > $HOME/antigen.zsh
cat << EOF >> ~/.zshrc
alias dm='bundle exec rake db:migrate'
alias dmt='bundle exec rake db:migrate && rake db:test:prepare'
alias dmp='RAILS_ENV=production bundle exec rake db:migrate'
alias rc='bundle exec rails c'
alias rg='bundle exec rails g'
alias rcp='RAILS_ENV=production bundle exec rails c'
alias rs='bundle exec rails s'
alias rsp='RAILS_ENV=production bundle exec rails s'
alias pywww='python -m SimpleHTTPServer'
alias os='overmind s'
alias oc='overmind connect web'
alias ls='eza -lh --group-directories-first --icons'
alias lsa='ls -a'
alias lt='eza --tree --level=2 --long --icons --git'
alias lta='lt -a'
alias ff="fzf --preview 'batcat --style=numbers --color=always {}'"
EOF
# Mise
msg "Instalando Mise pelo repositório RPM..."
# dnf-plugins-core was installed earlier
sudo dnf config-manager --add-repo=https://mise.jdx.dev/rpm/mise.repo
sudo dnf install -y mise || warn "Falha ao instalar mise."
if ! grep -q 'mise activate zsh' ~/.zshrc 2>/dev/null; then
echo 'eval "$(/usr/bin/mise activate zsh)"' >> ~/.zshrc
fi
# VSCode
msg "Instalando VSCode..."
sudo dnf config-manager --add-repo https://packages.microsoft.com/yumrepos/vscode
sudo dnf install -y code
# Configuração do VSCode para abrir links code://
msg "Configurando VSCode para abrir links code://..."
sudo bash -c 'cat << EOF > /usr/share/applications/vscode-urihandler.desktop
[Desktop Entry]
Name=VSCode
Comment=Open code:// links in Atom editor
GenericName=URI handler
Exec=/usr/bin/code-urihandler %U
Icon=code
Type=Application
StartupNotify=true
Categories=GNOME;GTK;Utility;TextEditor;Development;
MimeType=x-scheme-handler/code
EOF'
sudo bash -c 'cat << EOF > /usr/bin/code-urihandler
#!/bin/bash
request=\${1:23}
request=\${request//%2F//}
request=\${request/&line=/:}
code -g "\$request"
EOF'
sudo chmod +x /usr/bin/code-urihandler
sudo update-desktop-database
sudo bash -c 'cat << EOF > /etc/sysctl.conf
fs.inotify.max_user_watches=524288
fs.inotify.max_user_instances = 256
EOF'
echo 'gem: --no-document' > ~/.gemrc
sudo chsh -s /bin/zsh
flatpak install flathub io.missioncenter.MissionCenter com.discordapp.Discord io.dbeaver.DBeaverCommunity org.gnome.meld org.gnome.Calculator com.github.tchx84.Flatseal com.bitwarden.desktop com.rtosta.zapzap com.dropbox.Client org.gimp.GIMP org.kde.kolourpaint net.cozic.joplin_desktop com.github.dynobo.normcap io.gitlab.liferooter.TextPieces io.github.thetumultuousunicornofdarkness.cpu-x com.github.hluk.copyq org.localsend.localsend_app -y
zsh -c 'source ~/.zshrc; mise use --global node@20'
zsh -c 'source ~/.zshrc; mise use [email protected]'
zsh -c 'source ~/.zshrc; RUBY_CONFIGURE_OPTS=--enable-yjit mise use --global [email protected]'
# Neovim
msg "Instalando Neovim pelo repositório oficial..."
sudo dnf install -y neovim || msg "Falha ao instalar Neovim."
# Ghostty (terminal moderno)
msg "Instalando Ghostty pelo repositório COPR..."
# dnf-plugins-core was installed earlier
sudo dnf copr enable -y pgdev/ghostty
sudo dnf install -y ghostty || msg "Falha ao instalar Ghostty."
#Overmind
OVERMIND_LAST_VERSION=`curl -s https://api.github.com/repos/DarthSim/overmind/releases/latest | jq '.assets[] | select(.name|match("linux-amd64.gz$")) | .name' | tr -d '"'`
OVERMIND_LAST_VERSION_FILE=`echo $OVERMIND_LAST_VERSION | rev | cut -f 2- -d '.' | rev`
curl -s https://api.github.com/repos/DarthSim/overmind/releases/latest | jq '.assets[] | select(.name|match("linux-amd64.gz$")) | .browser_download_url' | xargs -n 1 wget
gunzip $OVERMIND_LAST_VERSION
sudo mv $OVERMIND_LAST_VERSION_FILE /usr/local/bin/overmind
chmod +x /usr/local/bin/overmind
# makes Krunner open with the Meta Key
kwriteconfig6 --file ~/.config/kwinrc --group ModifierOnlyShortcuts --key Meta "org.kde.kglobalaccel,/component/org_kde_krunner_desktop,,invokeShortcut,_launch" && qdbus org.kde.KWin /KWin reconfigure
# Google Chrome
msg "Instalando Google Chrome pelo repositório oficial..."
sudo dnf install -y fedora-workstation-repositories
sudo dnf config-manager --set-enabled google-chrome
sudo dnf install -y google-chrome-stable || msg "Falha ao instalar Google Chrome."
xdg-settings set default-web-browser google-chrome.desktop
# Aplicativos extras para Fedora
msg "Instalando aplicativos extras (balena-etcher, brave-browser, insync, fastfetch, microsoft-edge)..."
# balena-etcher
msg "Instalando balena-etcher..."
wget -qO /tmp/balena-etcher.rpm "https://github.com/balena-io/etcher/releases/latest/download/balena-etcher-electron-x64.rpm"
sudo dnf install -y /tmp/balena-etcher.rpm || msg "Falha ao instalar balena-etcher."
rm -f /tmp/balena-etcher.rpm
# brave-browser
msg "Instalando brave-browser..."
# dnf-plugins-core was installed earlier
sudo dnf config-manager --add-repo https://brave-browser-rpm-release.s3.brave.com/x86_64/
sudo rpm --import https://brave-browser-rpm-release.s3.brave.com/brave-core.asc
sudo dnf install -y brave-browser || msg "Falha ao instalar brave-browser."
# insync
msg "Instalando insync pelo repositório oficial..."
# dnf-plugins-core was installed earlier
sudo dnf config-manager --add-repo=https://yum.insync.io/fedora/insync.repo
sudo dnf install -y insync || msg "Falha ao instalar insync."
# fastfetch
msg "Instalando fastfetch..."
sudo dnf install -y fastfetch || msg "Falha ao instalar fastfetch."
# microsoft-edge-stable
msg "Instalando Microsoft Edge..."
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
sudo dnf config-manager --add-repo https://packages.microsoft.com/yumrepos/edge
yes | sudo dnf install microsoft-edge-stable || msg "Falha ao instalar Microsoft Edge."
# ATUIN
curl --proto '=https' --tlsv1.2 -LsSf https://setup.atuin.sh | sh
sed -i 's|eval "$(atuin init zsh)"|eval "$(atuin init zsh --disable-up-arrow)"|' ~/.zshrc
# Konsole
cat << EOF >> "$HOME/.local/share/konsole/Profile 1.profile"
[Appearance]
ColorScheme=Solarized
Font=FiraMono Nerd Font Mono,10,-1,5,50,0,0,0,0,0
[General]
Command=/bin/zsh -l
Environment=TERM=xterm-256color,COLORTERM=truecolor,SHELL=/bin/zsh
Name=Profile 1
Parent=FALLBACK/
[Interaction Options]
AutoCopySelectedText=true
TextEditorCmd=6
TextEditorCmdCustom=code -g PATH:LINE
TrimLeadingSpacesInSelectedText=true
TrimTrailingSpacesInSelectedText=true
UnderlineFilesEnabled=true
EOF
sed -i '1i\[Desktop Entry]\nDefaultProfile=Profile 1.profile\n' ~/.config/konsolerc
#WOL
# Descobre a interface principal
interface=$(ip route | awk '/default/ {print $5}')
# Verifica se a interface foi encontrada
if [ -z "$interface" ]; then
msg "Erro: Não foi possível encontrar a interface principal."
exit 1
fi
# Descobre o caminho completo do comando ethtool
ethtool_path=$(command -v ethtool)
# Verifica se o ethtool está instalado
if [ -z "$ethtool_path" ]; then
msg "Erro: ethtool não está instalado. Instale-o com: sudo dnf install ethtool"
exit 1
fi
# Conteúdo do serviço
service_content="[Unit]
Description=Enable Wake On Lan
[Service]
Type=oneshot
ExecStart=$ethtool_path --change $interface wol g
[Install]
WantedBy=basic.target
"
# Caminho para o arquivo do serviço
service_file="/etc/systemd/system/wol.service"
# Cria o arquivo do serviço
msg "Criando o arquivo $service_file..."
echo "$service_content" | sudo tee $service_file > /dev/null
# Define as permissões corretas
sudo chmod 644 $service_file
# Recarrega o systemd e habilita o serviço
msg "Recarregando o systemd e habilitando o serviço..."
sudo systemctl daemon-reload
sudo systemctl enable wol.service
# Windsurf Editor - Instala o script de atualização permanentemente
msg "Instalando script de atualização do Windsurf Editor..."
sudo wget -q https://gist.githubusercontent.com/alextakitani/9a90464cb6169030e70eaf916ae4a473/raw/install_update_windsurf.sh -O /usr/local/bin/install-windsurf
sudo chmod +x /usr/local/bin/install-windsurf
msg "Script instalado em /usr/local/bin/install-windsurf"
msg "Para instalar ou atualizar o Windsurf Editor, execute: sudo install-windsurf"
# Executar pela primeira vez
msg "Instalando/Atualizando Windsurf Editor..."
sudo /usr/local/bin/install-windsurf || warn "Falha ao instalar Windsurf. Execute 'sudo install-windsurf' manualmente depois."
sudo dnf autoremove -y
msg "Acabou! Faça um boot ou logout. Crie um profile no Konsole para usar o zsh no Fedora!"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment