#!/bin/bash set -e # Exit on error #="\e[0m"# Colors for better UX log() { echo -e "${GREEN}✔ $1${RESET}"; } skip() { echo -e "${YELLOW}↷ $1${RESET}"; } # Update system log "Updating system..." sudo pacman -Syu --noconfirm # Install base packages (including nvim) PACKAGES=(zsh neovim curl pyright bash atftp bash-language-server btop clang fastfetch fzf hyfetch lua-language-server micro nano pulsemixer yazi z qrencode distrobox dysk python python-pip glow) for pkg in "${PACKAGES[@]}"; do if ! pacman -Qi "$pkg" &>/dev/null; then log "Installing $pkg..." sudo pacman -S --noconfirm "$pkg" else skip "$pkg already installed." fi done # Install yay if not installed if ! command -v yay &>/dev/null; then log "Installing yay..." sudo pacman -S --noconfirm git base-devel git clone https://aur.archlinux.org/yay.git /tmp/yay cd /tmp/yay && makepkg -si --noconfirm cd ~ else skip "yay already installed." fi # Install Rust & Cargo if not installed if ! command -v cargo &>/dev/null; then log "Installing Rust & Cargo..." curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y source "$HOME/.cargo/env" else skip "Rust & Cargo already installed." fi # Install nvm and Node.js if not installed if ! command -v node &>/dev/null; then log "Installing nvm and Node.js..." if [ ! -d "$HOME/.nvm" ]; then curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.2/install.sh | bash fi source "$HOME/.nvm/nvm.sh" nvm install 22 else skip "Node.js already installed." fi # Verify npm if ! command -v npm &>/dev/null; then log "npm should be installed with Node.js. Please check your PATH." else skip "npm already available." fi # Git config git config --global core.editor nvim # Dotfiles setup log "Setting up dotfiles..." mkdir -p ~/.config ~/Pictures ln -sf ~/Dotfiles/.bashrc ~/.bashrc ln -sf ~/Dotfiles/.zshrc ~/.zshrc ln -sf ~/Dotfiles/starship.toml ~/.config/starship.toml rm -rf ~/.config/micro cp -r ~/Dotfiles/micro ~/.config/ # Vim Plug installer if [ ! -f ~/.local/share/nvim/site/autoload/plug.vim ]; then curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim fi rm -rf ~/.config/nvim ln -sf ~/Dotfiles/nvim ~/.config/nvim mkdir -p ~/.local/share/nvim/site/plugged/vim-airline-themes/autoload/airline/themes cp -f ~/Dotfiles/nvim/cyberqueer-airline.vim ~/.local/share/nvim/site/plugged/vim-airline-themes/autoload/airline/themes/ rm -rf ~/.config/yazi ln -sf ~/Dotfiles/yazi ~/.config/yazi rm -rf ~/.config/spotify-tui ln -sf ~/Dotfiles/spotify-tui ~/.config/spotify-tui cp -f ~/Dotfiles/resources/fflogo.svg ~/Pictures/fflogo.svg # Install Starship if not installed if ! command -v starship &>/dev/null; then log "Installing Starship..." curl -sS https://starship.rs/install.sh | sh else skip "Starship already installed." fi # Install oh-my-zsh if not installed if [ ! -d "$HOME/.oh-my-zsh" ]; then log "Installing oh-my-zsh..." sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" else skip "oh-my-zsh already installed." fi # Install oh-my-zsh plugins if not installed ZSH_CUSTOM=${ZSH_CUSTOM:-~/.oh-my-zsh/custom} if [ ! -d "$ZSH_CUSTOM/plugins/zsh-syntax-highlighting" ]; then git clone https://github.com/zsh-users/zsh-syntax-highlighting.git "$ZSH_CUSTOM/plugins/zsh-syntax-highlighting" else skip "zsh-syntax-highlighting already installed." fi if [ ! -d "$ZSH_CUSTOM/plugins/zsh-autosuggestions" ]; then git clone https://github.com/zsh-users/zsh-autosuggestions "$ZSH_CUSTOM/plugins/zsh-autosuggestions" else skip "zsh-autosuggestions already installed." fi # Set zsh as default shell if not already if [ "$SHELL" != "/usr/bin/zsh" ]; then log "Setting zsh as default shell..." chsh -s /usr/bin/zsh else skip "zsh is already the default shell." fi log "✅ Setup complete!" GREEN="\e[32m" YELLOW="\e[33m"