|
#!/bin/bash |
|
|
|
# --- Configuración Inicial --- |
|
echo "Iniciando script de post-instalación de Pop!_OS..." |
|
|
|
# Función para verificar si un comando existe |
|
command_exists () { |
|
type "$1" &> /dev/null ; |
|
} |
|
|
|
|
|
# --- Configuración de Kernel para NVIDIA (Driver 470) --- |
|
# ¡IMPORTANTE! Si estás usando una GPU NVIDIA antigua (ej. GTX 650) con el driver 470, |
|
# es CRÍTICO que uses la ISO de Pop!_OS con drivers NVIDIA para la instalación. |
|
# Este comando retiene el kernel actual para evitar actualizaciones que rompan la compatibilidad. |
|
# ADVERTENCIA: Esto impide actualizaciones de seguridad del kernel. Libera manualmente si necesitas actualizar. |
|
echo "ADVERTENCIA: Esto impide actualizaciones de seguridad del kernel. Libera manualmente si necesitas actualizar." |
|
echo "# ¡IMPORTANTE! Si estás usando una GPU NVIDIA antigua (ej. GTX 650) con el driver 470" |
|
sudo apt-mark hold linux-image-6.12.10-76061203-generic linux-headers-6.12.10-76061203-generic |
|
|
|
# --- Actualizar e Instalar Paquetes Básicos --- |
|
echo "Actualizando el sistema e instalando paquetes básicos..." |
|
sudo apt-get update -y |
|
echo "Instalando herramientas de desarrollo esenciales, utilidades del sistema y dependencias de lenguajes..." |
|
sudo apt-get install -y \ |
|
build-essential \ |
|
curl \ |
|
zip \ |
|
unzip \ |
|
zsh \ |
|
git \ |
|
vim \ |
|
htop \ |
|
terminator \ |
|
flameshot \ |
|
cpu-checker \ |
|
network-manager-openvpn-gnome \ |
|
openvpn-systemd-resolved \ |
|
openvpn \ |
|
gnome-user-share \ |
|
meld \ |
|
jq \ |
|
ncdu \ |
|
bat \ |
|
tldr \ |
|
# Dependencias para pyenv y rbenv (compilación de Python/Ruby) |
|
make \ |
|
libssl-dev \ |
|
zlib1g-dev \ |
|
libbz2-dev \ |
|
libreadline-dev \ |
|
libsqlite3-dev \ |
|
wget \ |
|
llvm \ |
|
libncursesw5-dev \ |
|
xz-utils \ |
|
tk-dev \ |
|
libxml2-dev \ |
|
libxmlsec1-dev \ |
|
libffi-dev \ |
|
liblzma-dev \ |
|
libyaml-dev \ |
|
libgmp-dev # Para algunas gemas de Ruby |
|
|
|
# --- Instalar NVM (Node Version Manager) --- |
|
echo "Instalando NVM..." |
|
if [ ! -d "$HOME/.nvm" ]; then |
|
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash |
|
export NVM_DIR="$HOME/.nvm" |
|
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm |
|
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion |
|
else |
|
echo "NVM ya está instalado. Saltando instalación." |
|
fi |
|
|
|
# --- Cambiar Shell por Defecto a Zsh --- |
|
echo "Cambiando el shell por defecto a Zsh..." |
|
if [ "$(basename "$SHELL")" != "zsh" ]; then |
|
chsh -s "$(which zsh)" |
|
echo "Shell cambiado a Zsh. Deberás cerrar sesión y volver a iniciarla para que el cambio surta efecto." |
|
else |
|
echo "Zsh ya es el shell por defecto." |
|
fi |
|
|
|
# --- Instalar Oh My Zsh --- |
|
echo "Instalando Oh My Zsh..." |
|
if [ ! -d "$HOME/.oh-my-zsh" ]; then |
|
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended |
|
else |
|
echo "Oh My Zsh ya está instalado. Saltando instalación." |
|
fi |
|
|
|
# --- Instalar SDKMAN! --- |
|
echo "Instalando SDKMAN!"... |
|
if [ ! -d "$HOME/.sdkman" ]; then |
|
curl -s "https://get.sdkman.io" | bash |
|
# Source SDKMAN! init script for immediate use in this shell |
|
export SDKMAN_DIR="$HOME/.sdkman" |
|
[ -s "$SDKMAN_DIR/bin/sdkman-init.sh" ] && \. "$SDKMAN_DIR/bin/sdkman-init.sh" |
|
else |
|
echo "SDKMAN! ya está instalado. Saltando instalación." |
|
fi |
|
|
|
# --- Instalar rbenv (Gestor de Versiones de Ruby) --- |
|
echo "Instalando rbenv..." |
|
if [ ! -d "$HOME/.rbenv" ]; then |
|
git clone https://github.com/rbenv/rbenv.git "$HOME/.rbenv" |
|
# Añadir rbenv a PATH y inicializar |
|
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> "$HOME/.zshrc" |
|
echo 'eval "$(rbenv init -)"' >> "$HOME/.zshrc" |
|
|
|
# Instalar ruby-build (plugin para `rbenv install` comando) |
|
git clone https://github.com/rbenv/ruby-build.git "$HOME/.rbenv/plugins/ruby-build" |
|
else |
|
echo "rbenv ya está instalado. Saltando instalación." |
|
fi |
|
|
|
|
|
# --- Instalar Chezmoi (Comentado por solicitud) --- |
|
# echo "Instalando Chezmoi..." |
|
# if ! command_exists chezmoi; then |
|
# snap install chezmoi --classic |
|
# else |
|
# echo "Chezmoi ya está instalado. Saltando instalación." |
|
# fi |
|
|
|
# --- Inicializar Repositorio Chezmoi (Comentado por solicitud) --- |
|
# # ¡¡¡ADVERTENCIA DE SEGURIDAD CRÍTICA!!! |
|
# # NUNCA PONGAS TOKENS DE ACCESO PERSONAL DIRECTAMENTE EN UN SCRIPT. |
|
# # Esta línea es un EJEMPLO y DEBE ser ejecutada manualmente por el usuario |
|
# # o el token debe ser gestionado de forma segura (ej. variable de entorno, gestor de secretos). |
|
# echo "--- ATENCIÓN: INICIALIZACIÓN DE CHEZMOI CON TOKEN ---" |
|
# echo "Por motivos de seguridad, la inicialización de Chezmoi con tu token DEBE hacerse manualmente." |
|
# echo "Ejecuta el siguiente comando en tu terminal, reemplazando <TU_TOKEN_GITLAB> con tu token real:" |
|
# echo "chezmoi init https://personal:<TU_TOKEN_GITLAB>@gitlab.com/pinedamg/chezmoi-dot-secret-files.git" |
|
# echo "Luego, ejecuta 'chezmoi apply' para aplicar tus dotfiles." |
|
# # chezmoi init https://personal:[email protected]/pinedamg/chezmoi-dot-secret-files.git |
|
# # chezmoi apply |
|
|
|
# --- Instalar Homebrew --- |
|
echo "Instalando Homebrew, un gestor de paquetes para macOS y Linux..." |
|
if ! command_exists brew; then |
|
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" |
|
# Configurar Homebrew para Zsh |
|
echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"' >> "$HOME/.zshrc" |
|
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)" |
|
else |
|
echo "Homebrew ya está instalado. Saltando instalación." |
|
fi |
|
|
|
# --- Instalar FVM (Flutter Version Manager) con Homebrew --- |
|
echo "Instalando FVM (Flutter Version Manager)..." |
|
if command_exists brew; then |
|
if ! command_exists fvm; then |
|
brew tap leoafarias/fvm |
|
brew install fvm |
|
else |
|
echo "FVM ya está instalado. Saltando instalación." |
|
fi |
|
else |
|
echo "Homebrew no está instalado. Considera instalar FVM manualmente si lo necesitas." |
|
fi |
|
|
|
# --- Instalar GitHub CLI con Homebrew --- |
|
echo "Instalando GitHub CLI (gh)..." |
|
if command_exists brew; then |
|
if ! command_exists gh; then |
|
brew install gh |
|
else |
|
echo "GitHub CLI ya está instalado. Saltando instalación." |
|
fi |
|
else |
|
echo "Homebrew no está instalado. Saltando instalación de gh." |
|
fi |
|
|
|
# --- Instalar Pyenv (Gestor de Versiones de Python) --- |
|
echo "Instalando Pyenv..." |
|
if [ ! -d "$HOME/.pyenv" ]; then |
|
curl https://pyenv.run | bash |
|
# Añadir a .zshrc |
|
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> "$HOME/.zshrc" |
|
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> "$HOME/.zshrc" |
|
echo 'eval "$(pyenv init -)"' >> "$HOME/.zshrc" |
|
echo 'eval "$(pyenv virtualenv-init -)"' >> "$HOME/.zshrc" |
|
else |
|
echo "Pyenv ya está instalado. Saltando instalación." |
|
fi |
|
|
|
# --- Mejoras para Zsh (Plugins de Oh My Zsh) --- |
|
echo "Instalando plugins para Zsh..." |
|
# zsh-autosuggestions |
|
if [ ! -d "${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions" ]; then |
|
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions |
|
else |
|
echo "zsh-autosuggestions ya está instalado." |
|
fi |
|
# zsh-syntax-highlighting |
|
if [ ! - -d "${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting" ]; then |
|
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting |
|
else |
|
echo "zsh-syntax-highlighting ya está instalado." |
|
fi |
|
|
|
# --- Instalar Aplicaciones Snap (Consolidado) --- |
|
echo "Instalando aplicaciones Snap (paquetes universales de Linux)..." |
|
sudo snap install \ |
|
hiri \ |
|
brave \ |
|
rambox \ |
|
authy \ |
|
hplip-printer-app \ |
|
code --classic \ |
|
postman \ |
|
dbeaver-ce \ |
|
android-studio --classic \ |
|
flutter --classic \ |
|
bitwarden \ |
|
zoom-client \ |
|
spotify |
|
|
|
# --- Instalar Dropbox (via .deb oficial) --- |
|
echo "Instalando Dropbox (via .deb oficial)..." |
|
if ! command_exists dropbox; then |
|
echo "ADVERTENCIA: Se va a descargar e instalar Dropbox a través de un paquete .deb oficial." |
|
# Descargar el paquete .deb para Ubuntu 22.04 (Jammy Jellyfish) |
|
wget -O "$HOME/Downloads/dropbox.deb" "https://www.dropbox.com/download?plat=lnx.x86_64" |
|
sudo dpkg -i "$HOME/Downloads/dropbox.deb" |
|
sudo apt install -f # Para resolver dependencias |
|
rm "$HOME/Downloads/dropbox.deb" # Limpiar el archivo descargado |
|
else |
|
echo "Dropbox ya está instalado. Saltando instalación." |
|
fi |
|
|
|
# --- Instalar Aplicaciones Flatpak (Consolidado) --- |
|
echo "Configurando Flathub y instalando aplicaciones Flatpak..." |
|
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo |
|
# Solo instalamos Flatpaks que no tienen una alternativa mejor (APT/Snap/.deb) |
|
# Si quieres instalar Meld via Flatpak, descomenta esta linea |
|
flatpak install -y \ |
|
# org.gnome.meld # Ahora via APT, pero si quieres Flatpak, descomenta esta linea |
|
|
|
|
|
# --- Instalar Docker --- |
|
echo "Instalando Docker y sus componentes..." |
|
# Añadir GPG key oficial de Docker |
|
sudo install -m 0755 -d /etc/apt/keyrings |
|
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg |
|
sudo chmod a+r /etc/apt/keyrings/docker.gpg # Asegurar permisos de lectura |
|
|
|
# Añadir repositorio de Docker a las fuentes de APT |
|
echo \ |
|
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ |
|
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null |
|
|
|
# Actualizar índices de paquetes e instalar Docker |
|
sudo apt-get update |
|
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin |
|
|
|
# --- Post-Instalación de Docker --- |
|
echo "Configurando permisos de Docker..." |
|
if ! getent group docker > /dev/null; then |
|
sudo groupadd docker |
|
fi |
|
sudo usermod -aG docker "$USER" |
|
sudo chown "$USER":"$USER" "$HOME/.docker" -R |
|
sudo chmod g+rwx "$HOME/.docker" -R |
|
|
|
# --- Actualización Final del Sistema y Limpieza --- |
|
echo "Realizando actualización final del sistema y limpieza..." |
|
sudo apt-get update -y |
|
sudo apt-get upgrade -y |
|
sudo apt-get autoremove -y |
|
sudo apt-get clean |
|
|
|
echo "Script de post-instalación finalizado." |
|
echo "" |
|
echo "=================================================" |
|
echo " ACCIONES MANUALES REQUERIDAS POST-INSTALACIÓN" |
|
echo "=================================================" |
|
echo "" |
|
echo "1. REINICIAR SESIÓN:" |
|
echo " Debes CERRAR SESIÓN y VOLVER A INICIARLA (o reiniciar el sistema)." |
|
echo " Esto es necesario para:" |
|
echo " - Cambiar tu shell por defecto a Zsh." |
|
echo " - Aplicar los permisos de grupo para poder usar Docker sin 'sudo'." |
|
echo "" |
|
echo "2. ACTIVAR PLUGINS DE ZSH:" |
|
echo " Edita tu archivo de configuración de Zsh con: code ~/.zshrc" |
|
echo " Busca la línea que empieza con 'plugins=(...)' y añade los nuevos plugins." |
|
echo " Debería quedar así: plugins=(git zsh-autosuggestions zsh-syntax-highlighting)" |
|
echo " Guarda el archivo y reinicia la terminal o ejecuta: source ~/.zshrc" |
|
echo "" |
|
echo "3. INICIAR SESIÓN EN GITHUB CLI:" |
|
echo " Ejecuta el siguiente comando en tu nueva terminal Zsh:" |
|
echo " gh auth login" |
|
echo "" |
|
echo "4. CONFIGURAR CHEZMOI (Opcional):" |
|
echo " Si usas Chezmoi, ejecuta el comando de inicialización con tu token personal:" |
|
echo " chezmoi init https://personal:<TU_TOKEN_GITLAB>@gitlab.com/pinedamg/chezmoi-dot-secret-files.git" |
|
echo " Luego, aplica tus dotfiles con: chezmoi apply" |
|
echo "" |
|
echo "=================================================" |