#!/bin/bash # Path: scripts/base.sh set -e BLUE='\033[1;34m' YELLOW='\033[1;33m' GREEN='\033[1;32m' RED='\033[1;31m' NC='\033[0m' DOTFILES_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" REPO_ROOT="$(dirname "$DOTFILES_DIR")" echo -e "${BLUE} LOG:${YELLOW} Initializing Base System Layer...${NC}" # OS Detection if [ -f /etc/os-release ]; then . /etc/os-release OS=$ID fi # Confirm Architecture ARCH=$(uname -m) if [ "$ARCH" != "x86_64" ] && [ "$ARCH" != "aarch64" ]; then echo -e "${RED} ERROR: Unsupported architecture: $ARCH${NC}" exit 1 fi # Package Installation PACKAGES=( curl wget git sudo zsh tmux unzip tar gzip build-essential openssl python bison mercurial ripgrep fd bat fzf jq btop httpie gnupg zoxide stow bind nmap socat tcpdump net-tools strace gdb hexyl ) FINAL_LIST="" for pkg in "${PACKAGES[@]}"; do case "$pkg" in "build-essential") [ "$OS" == "arch" ] && pkg="base-devel" [ "$OS" == "ubuntu" ] && pkg="build-essential" ;; "python") [ "$OS" == "arch" ] && pkg="python" [ "$OS" == "ubuntu" ] && pkg="python3 python3-pip python3-venv" ;; "fd") [ "$OS" == "arch" ] && pkg="fd" [ "$OS" == "ubuntu" ] && pkg="fd-find" ;; "bat") [ "$OS" == "arch" ] && pkg="bat" [ "$OS" == "ubuntu" ] && pkg="bat" ;; "openssl") [ "$OS" == "arch" ] && pkg="openssl" [ "$OS" == "ubuntu" ] && pkg="libssl-dev" ;; "bind") [ "$OS" == "arch" ] && pkg="bind" [ "$OS" == "ubuntu" ] && pkg="dnsutils" ;; *) esac FINAL_LIST="$FINAL_LIST $pkg" done if [ "$OS" == "arch" ] || [ "$OS" == "manjaro" ]; then FINAL_LIST="$FINAL_LIST" fi if [ "$OS" == "ubuntu" ] || [ "$OS" == "debian" ]; then FINAL_LIST="$FINAL_LIST ca-certificates bsdmainutils pkg-config cmake" fi echo -e "${BLUE} LOG:${YELLOW} Installing: ${NC}$FINAL_LIST" if [ "$OS" == "arch" ] || [ "$OS" == "manjaro" ]; then sudo pacman -S --noconfirm --needed $FINAL_LIST elif [ "$OS" == "ubuntu" ] || [ "$OS" == "debian" ]; then sudo DEBIAN_FRONTEND=noninteractive apt-get update sudo DEBIAN_FRONTEND=noninteractive apt-get install -y $FINAL_LIST fi if [ "$OS" == "ubuntu" ] || [ "$OS" == "debian" ]; then echo -e "${BLUE} LOG:${YELLOW} Fixing Ubuntu binary names...${NC}" [ -f /usr/bin/fdfind ] && sudo ln -sf /usr/bin/fdfind /usr/local/bin/fd [ -f /usr/bin/batcat ] && sudo ln -sf /usr/bin/batcat /usr/local/bin/bat fi # Moving Pre-Built bin to .local/bin mkdir -p "$HOME/.local/bin" cp -f "$REPO_ROOT/bin/"* "$HOME/.local/bin/" chmod +x "$HOME/.local/bin/"* if ! command -v rclone &> /dev/null; then echo -e "${BLUE} LOG:${YELLOW} Installing Rclone (Latest)...${NC}" curl https://rclone.org/install.sh | sudo bash fi # 3. Docker Installation if command -v docker &> /dev/null; then echo -e "${GREEN} LOG: Docker is already installed.${NC}" else if grep -qEi "(Microsoft|WSL)" /proc/version &> /dev/null; then echo -e "${RED} LOG: WSL Detected! Skipping Native Docker.${NC}" echo -e "${RED} >>> Please install Docker Desktop on Windows.${NC}" else echo -e "${BLUE} LOG:${YELLOW} Installing Native Docker...${NC}" if [ "$OS" == "arch" ]; then sudo pacman -S --noconfirm --needed docker docker-compose sudo systemctl enable --now docker elif [ "$OS" == "ubuntu" ]; then # (Simplified for brevity - standard Docker install logic) curl -fsSL https://get.docker.com | sh fi # Add user to group sudo usermod -aG docker $(whoami) fi fi # 4. Zsh & Configuration if [ ! -d "$HOME/.oh-my-zsh" ]; then echo -e "${BLUE} LOG:${YELLOW} Installing Oh My Zsh...${NC}" sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended fi # Plugins ZSH_CUSTOM="${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}" mkdir -p "$ZSH_CUSTOM/plugins" [ ! -d "$ZSH_CUSTOM/plugins/zsh-syntax-highlighting" ] && git clone https://github.com/zsh-users/zsh-syntax-highlighting.git "$ZSH_CUSTOM/plugins/zsh-syntax-highlighting" [ ! -d "$ZSH_CUSTOM/plugins/zsh-autosuggestions" ] && git clone https://github.com/zsh-users/zsh-autosuggestions "$ZSH_CUSTOM/plugins/zsh-autosuggestions" # 5. Git Credentials (WSL Bridge) if grep -qEi "(Microsoft|WSL)" /proc/version &> /dev/null; then GCM_WIN="/mnt/c/Program Files/Git/mingw64/bin/git-credential-manager.exe" [ -f "$GCM_WIN" ] && git config --global credential.helper "! \"$GCM_WIN\"" else git config --global credential.helper 'cache --timeout=43200' fi # 6. Cleanup & Secrets rm -f "$HOME/.zshrc" "$HOME/.zsh_aliases" touch "$HOME/.zsh_secrets" # 7. Set Shell if [ "$SHELL" != "$(which zsh)" ]; then sudo chsh -s "$(which zsh)" $(whoami) fi echo -e "${GREEN} LOG: Base System Setup Complete.${NC}"