From c76024e6e5b7f023b1707c2d5c2327eafd1206a5 Mon Sep 17 00:00:00 2001 From: Peter Wood Date: Wed, 28 May 2025 11:44:27 -0400 Subject: [PATCH] feat: Add eza aliases for enhanced directory listing and update setup scripts for package management --- dotfiles/my-aliases.zsh | 16 ++++ dotfiles/my-aliases.zsh.original | 39 +++++++-- setup/bootstrap.sh | 6 ++ setup/packages.list | 3 + setup/setup.sh | 137 ++++++++++++++++++++++++++----- setup/test-setup.sh | 107 +++++++++++------------- 6 files changed, 222 insertions(+), 86 deletions(-) diff --git a/dotfiles/my-aliases.zsh b/dotfiles/my-aliases.zsh index b24b491..e92c316 100644 --- a/dotfiles/my-aliases.zsh +++ b/dotfiles/my-aliases.zsh @@ -6,6 +6,22 @@ alias gcm="git commit -m" alias ll="ls -laFh --group-directories-first --color=auto" alias findzombie="ps -A -ostat,pid,ppid | grep -e '[zZ]'" + +# 🌟 Eza aliases - Modern replacement for ls (conditionally enabled by setup.sh) +# These provide enhanced directory listing with icons, git status, and tree views +# The setup script will enable these dynamically if eza is available, otherwise traditional ls aliases are used +alias ls-eza="eza --color=auto --group-directories-first" +alias la-eza="eza -la --color=auto --group-directories-first" +alias ll-eza="eza -laFh --color=auto --group-directories-first" +alias l-eza="eza -1 --color=auto --group-directories-first" +alias lt="eza --tree --level=2 --color=auto --group-directories-first" # Tree view (2 levels) +alias llt="eza -la --tree --level=2 --color=auto --group-directories-first" # Long tree view +alias lg="eza -la --git --color=auto --group-directories-first" # Show git status +alias lh="eza -la --color=auto --group-directories-first --sort=size" # Sort by size +alias lr="eza -la --color=auto --group-directories-first --sort=modified" # Sort by modified +alias lx="eza -la --color=auto --group-directories-first --sort=extension" # Sort by extension +alias tree="eza --tree --color=auto --group-directories-first" # Tree alias + # 🎬 Plex Media Server Management - Sexy Edition alias plex="/home/acedanger/shell/plex/plex.sh" alias px="/home/acedanger/shell/plex/plex.sh" # Quick shortcut diff --git a/dotfiles/my-aliases.zsh.original b/dotfiles/my-aliases.zsh.original index 5c0df50..3deb340 100644 --- a/dotfiles/my-aliases.zsh.original +++ b/dotfiles/my-aliases.zsh.original @@ -4,21 +4,48 @@ alias gpush="git push" alias gc="git commit" alias gcm="git commit -m" -alias ll="ls -laFh --group-directories-first --color=auto" alias findzombie="ps -A -ostat,pid,ppid | grep -e '[zZ]'" + +# 🌟 Eza aliases - Modern replacement for ls (conditionally enabled by setup.sh) +# These provide enhanced directory listing with icons, git status, and tree views +# The setup script will enable these dynamically if eza is available, otherwise traditional ls aliases are used +alias la-eza="eza -la --color=auto --group-directories-first" +alias ll-eza="eza -laFh --color=auto --group-directories-first" +alias l-eza="eza -1 --color=auto --group-directories-first" +alias lt="eza --tree --level=2 --color=auto --group-directories-first" # Tree view (2 levels) +alias llt="eza -la --tree --level=2 --color=auto --group-directories-first" # Long tree view +alias lg="eza -la --git --color=auto --group-directories-first" # Show git status +alias lh="eza -la --color=auto --group-directories-first --sort=size" # Sort by size +alias lr="eza -la --color=auto --group-directories-first --sort=modified" # Sort by modified +alias lx="eza -la --color=auto --group-directories-first --sort=extension" # Sort by extension +alias tree="eza --tree --color=auto --group-directories-first" # Tree alias + # 🎬 Plex Media Server Management - Sexy Edition alias plex="/home/acedanger/shell/plex/plex.sh" alias px="/home/acedanger/shell/plex/plex.sh" # Quick shortcut alias plex-start="/home/acedanger/shell/plex/plex.sh start" # Start Plex alias plex-stop="/home/acedanger/shell/plex/plex.sh stop" # Stop Plex -alias plex-restart="/home/acedanger/shell/plex.sh restart" # Restart Plex -alias plex-status="/home/acedanger/shell/plex.sh status" # Status check +alias plex-restart="/home/acedanger/shell/plex/plex.sh restart" # Restart Plex +alias plex-status="/home/acedanger/shell/plex/plex.sh status" # Status check alias plex-web="xdg-open http://localhost:32400/web" # Open web UI in browser alias update="/home/acedanger/shell/update.sh" alias dcdn="docker compose down" alias dcupd="docker compose up -d" alias dcpull="docker compose pull" alias lzd="lazydocker" -alias cat="batcat" -alias fd="fdfind" -alias fzf="fzf --preview='batcat {}'" +alias cat="bat" +alias fd="fd" +alias fzf="fzf --preview='bat {}'" + +# 🌟 Eza aliases - Modern replacement for ls +alias ls="eza --color=auto --group-directories-first" +alias la="eza -la --color=auto --group-directories-first" +alias ll="eza -laFh --color=auto --group-directories-first" +alias l="eza -1 --color=auto --group-directories-first" +alias lt="eza --tree --level=2 --color=auto --group-directories-first" +alias llt="eza -la --tree --level=2 --color=auto --group-directories-first" +alias lg="eza -la --git --color=auto --group-directories-first" +alias lh="eza -la --color=auto --group-directories-first --sort=size" +alias lr="eza -la --color=auto --group-directories-first --sort=modified" +alias lx="eza -la --color=auto --group-directories-first --sort=extension" +alias tree="eza --tree --color=auto --group-directories-first" diff --git a/setup/bootstrap.sh b/setup/bootstrap.sh index f583f50..1ab0bcf 100755 --- a/setup/bootstrap.sh +++ b/setup/bootstrap.sh @@ -47,6 +47,12 @@ if ! command -v git &>/dev/null; then sudo nala install -y git ;; dnf) + # Enable COPR repositories for Fedora before installing packages + if [ "$OS_NAME" = "fedora" ]; then + echo -e "${YELLOW}Setting up COPR repositories for Fedora...${NC}" + sudo dnf copr enable -y alternateved/eza 2>/dev/null || echo -e "${YELLOW}Eza COPR repo already enabled or unavailable${NC}" + sudo dnf copr enable -y shaps/lazygit 2>/dev/null || echo -e "${YELLOW}Lazygit COPR repo already enabled or unavailable${NC}" + fi sudo dnf install -y git ;; apt) diff --git a/setup/packages.list b/setup/packages.list index 770dd8e..023d8fd 100644 --- a/setup/packages.list +++ b/setup/packages.list @@ -9,3 +9,6 @@ fzf zsh nala fd-find +lazygit +lazydocker +eza \ No newline at end of file diff --git a/setup/setup.sh b/setup/setup.sh index 7eda314..e9daa7c 100755 --- a/setup/setup.sh +++ b/setup/setup.sh @@ -39,7 +39,7 @@ determine_pkg_manager() { # Set up package management based on OS if [ "$OS_NAME" = "fedora" ]; then - echo -e "${YELLOW}Setting up Fedora Tsrepositories and package management...${NC}" + echo -e "${YELLOW}Setting up Fedora repositories and package management...${NC}" # Install prerequisites for Fedora sudo dnf install -y wget gpg @@ -55,6 +55,14 @@ if [ "$OS_NAME" = "fedora" ]; then # Use a different approach to add the GitHub CLI repo to avoid the "--add-repo" error sudo curl -fsSL https://cli.github.com/packages/rpm/gh-cli.repo -o /etc/yum.repos.d/gh-cli.repo + # Setup COPR repository for eza + echo -e "${YELLOW}Setting up COPR repository for eza...${NC}" + sudo dnf copr enable -y alternateved/eza + + # Setup COPR repository for lazygit + echo -e "${YELLOW}Setting up COPR repository for lazygit...${NC}" + sudo dnf copr enable -y shaps/lazygit + # Update package lists echo -e "${YELLOW}Updating package lists for Fedora...${NC}" sudo dnf check-update -y || true @@ -90,6 +98,19 @@ else fi fi + # Setup eza repository for Ubuntu/Debian + echo -e "${YELLOW}Setting up eza repository...${NC}" + if ! apt-cache show eza &>/dev/null; then + # Add eza repository for older Ubuntu/Debian versions + echo -e "${YELLOW}Adding eza repository...${NC}" + sudo mkdir -p -m 755 /etc/apt/keyrings + wget -qO- https://raw.githubusercontent.com/eza-community/eza/main/deb.asc | sudo gpg --dearmor -o /etc/apt/keyrings/gierens.gpg + echo "deb [signed-by=/etc/apt/keyrings/gierens.gpg] http://deb.gierens.de stable main" | sudo tee /etc/apt/sources.list.d/gierens.list + sudo chmod 644 /etc/apt/keyrings/gierens.gpg /etc/apt/sources.list.d/gierens.list + else + echo -e "${GREEN}Eza is available in standard repositories${NC}" + fi + # Setup VS Code repository echo -e "${YELLOW}Setting up VS Code repository...${NC}" wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > /tmp/packages.microsoft.gpg @@ -136,16 +157,34 @@ mapfile -t pkgs < <(grep -v '^//' "$SCRIPT_DIR/packages.list" | grep -v -e '^$') declare -A fedora_pkg_map fedora_pkg_map["bat"]="bat" fedora_pkg_map["fd-find"]="fd" # On Fedora, the package is called 'fd' +# eza is available from COPR repository +fedora_pkg_map["eza"]="eza" +# lazygit is available from COPR repository +fedora_pkg_map["lazygit"]="lazygit" +# lazydocker will be installed manually from GitHub releases # Add more package mappings as needed # Process the package list based on OS install_pkg_list=() +special_installs=() for pkg in "${pkgs[@]}"; do # Skip nala package on non-Debian/Ubuntu systems if [ "$pkg" = "nala" ] && [ "$OS_NAME" != "ubuntu" ] && [ "$OS_NAME" != "debian" ]; then continue fi + # Handle packages that need special installation + if [ "$pkg" = "lazydocker" ]; then + special_installs+=("$pkg") + continue + fi + + # Handle lazygit - available in COPR for Fedora, special install for Debian/Ubuntu + if [ "$pkg" = "lazygit" ] && [ "$OS_NAME" != "fedora" ]; then + special_installs+=("$pkg") + continue + fi + # Check if we need to map the package name for Fedora if [ "$OS_NAME" = "fedora" ] && [[ -n "${fedora_pkg_map[$pkg]}" ]]; then install_pkg_list+=("${fedora_pkg_map[$pkg]}") @@ -189,6 +228,44 @@ esac echo -e "${GREEN}Package installation completed for $OS_NAME $OS_VERSION.${NC}" +# Handle special installations that aren't available through package managers +echo -e "${YELLOW}Installing special packages...${NC}" +for pkg in "${special_installs[@]}"; do + case $pkg in + "lazydocker") + if ! command -v lazydocker &> /dev/null; then + echo -e "${YELLOW}Installing Lazydocker from GitHub releases...${NC}" + LAZYDOCKER_VERSION=$(curl -s "https://api.github.com/repos/jesseduffield/lazydocker/releases/latest" | grep -Po '"tag_name": "v\K[^"]*') + curl -Lo lazydocker.tar.gz "https://github.com/jesseduffield/lazydocker/releases/latest/download/lazydocker_${LAZYDOCKER_VERSION}_Linux_x86_64.tar.gz" + mkdir -p lazydocker-temp + tar xf lazydocker.tar.gz -C lazydocker-temp + sudo mv lazydocker-temp/lazydocker /usr/local/bin + rm -rf lazydocker-temp lazydocker.tar.gz + echo -e "${GREEN}Lazydocker installed successfully!${NC}" + else + echo -e "${GREEN}Lazydocker is already installed${NC}" + fi + ;; + "lazygit") + if ! command -v lazygit &> /dev/null; then + echo -e "${YELLOW}Installing Lazygit from GitHub releases...${NC}" + LAZYGIT_VERSION=$(curl -s "https://api.github.com/repos/jesseduffield/lazygit/releases/latest" | grep -Po '"tag_name": "v\K[^"]*') + curl -Lo lazygit.tar.gz "https://github.com/jesseduffield/lazygit/releases/latest/download/lazygit_${LAZYGIT_VERSION}_Linux_x86_64.tar.gz" + mkdir -p lazygit-temp + tar xf lazygit.tar.gz -C lazygit-temp + sudo mv lazygit-temp/lazygit /usr/local/bin + rm -rf lazygit-temp lazygit.tar.gz + echo -e "${GREEN}Lazygit installed successfully!${NC}" + else + echo -e "${GREEN}Lazygit is already installed${NC}" + fi + ;; + *) + echo -e "${YELLOW}Unknown special package: $pkg${NC}" + ;; + esac +done + # Install Zsh if not already installed echo -e "${YELLOW}Installing Zsh...${NC}" if ! command -v zsh &> /dev/null; then @@ -247,20 +324,6 @@ else echo -e "${YELLOW}Warning: nvm installation may require a new shell session${NC}" fi -# Install Lazydocker (not available in apt repositories) -echo -e "${YELLOW}Installing Lazydocker...${NC}" -if ! command -v lazydocker &> /dev/null; then - LAZYDOCKER_VERSION=$(curl -s "https://api.github.com/repos/jesseduffield/lazydocker/releases/latest" | grep -Po '"tag_name": "v\K[^"]*') - curl -Lo lazydocker.tar.gz "https://github.com/jesseduffield/lazydocker/releases/latest/download/lazydocker_${LAZYDOCKER_VERSION}_Linux_x86_64.tar.gz" - mkdir -p lazydocker-temp - tar xf lazydocker.tar.gz -C lazydocker-temp - sudo mv lazydocker-temp/lazydocker /usr/local/bin - rm -rf lazydocker-temp lazydocker.tar.gz - echo -e "${GREEN}Lazydocker installed successfully!${NC}" -else - echo -e "Lazydocker is already installed" -fi - # Define a reusable function for cloning Zsh plugins clone_zsh_plugin() { local plugin_url=$1 @@ -285,13 +348,13 @@ COMPLETION_SCRIPT="$DOTFILES_DIR/completions/backup-scripts-completion.bash" if [ -f "$COMPLETION_SCRIPT" ]; then # Create completions directory in home mkdir -p "$HOME/.local/share/bash-completion/completions" - + # Copy completion script to user's completion directory cp "$COMPLETION_SCRIPT" "$HOME/.local/share/bash-completion/completions/" - + # Make sure it's executable chmod +x "$HOME/.local/share/bash-completion/completions/backup-scripts-completion.bash" - + echo -e "${GREEN}Bash completion script installed successfully!${NC}" else echo -e "${YELLOW}Warning: Bash completion script not found at $COMPLETION_SCRIPT${NC}" @@ -314,8 +377,14 @@ mkdir -p "$ZSH_CUSTOM" # Create a copy of the original aliases file for backup cp "$DOTFILES_SUBDIR/my-aliases.zsh" "$ALIASES_FILE.bak" -# First, copy all general aliases except those we'll modify based on OS -grep -v "alias cat=" "$DOTFILES_SUBDIR/my-aliases.zsh" | grep -v "alias fd=" | grep -v "alias fzf=" > "$ALIASES_FILE" +# First, copy all general aliases except those we'll modify based on OS and available commands +grep -v "^alias cat=" "$DOTFILES_SUBDIR/my-aliases.zsh" | \ +grep -v "^alias fd=" | \ +grep -v "^alias fzf=" | \ +grep -v "^alias ls=" | \ +grep -v "^alias ll=" | \ +grep -v "^alias la=" | \ +grep -v "^alias l=" > "$ALIASES_FILE" # Function to check for command existence and add appropriate alias add_conditional_alias() { @@ -360,6 +429,34 @@ if command -v fzf &> /dev/null; then fi fi +# Set up eza aliases if eza is available +if command -v eza &> /dev/null; then + echo -e "${YELLOW}Setting up eza aliases...${NC}" + cat >> "$ALIASES_FILE" << 'EOF' + +# 🌟 Eza aliases - Modern replacement for ls +alias ls="eza --color=auto --group-directories-first" +alias la="eza -la --color=auto --group-directories-first" +alias ll="eza -laFh --color=auto --group-directories-first" +alias l="eza -1 --color=auto --group-directories-first" +alias lt="eza --tree --level=2 --color=auto --group-directories-first" +alias llt="eza -la --tree --level=2 --color=auto --group-directories-first" +alias lg="eza -la --git --color=auto --group-directories-first" +alias lh="eza -la --color=auto --group-directories-first --sort=size" +alias lr="eza -la --color=auto --group-directories-first --sort=modified" +alias lx="eza -la --color=auto --group-directories-first --sort=extension" +alias tree="eza --tree --color=auto --group-directories-first" +EOF + echo -e "${GREEN}Eza aliases configured successfully!${NC}" +else + echo -e "${YELLOW}Eza not found. Using traditional ls aliases.${NC}" + cat >> "$ALIASES_FILE" << 'EOF' + +# Traditional ls aliases +alias ll="ls -laFh --group-directories-first --color=auto" +EOF +fi + # Also create a symlink from the custom aliases file back to the dotfiles directory for persistence # This allows changes made to aliases.zsh to be tracked in the dotfiles repo echo -e "${YELLOW}Creating symlink to save customized aliases back to dotfiles...${NC}" diff --git a/setup/test-setup.sh b/setup/test-setup.sh index 65be382..0fe2d52 100755 --- a/setup/test-setup.sh +++ b/setup/test-setup.sh @@ -16,20 +16,7 @@ NC='\033[0m' # No Color MAX_INSTALL_ATTEMPTS=3 CURRENT_ATTEMPT=1 -# Log file -# C log_both "\n${BLUE}Debugging lolcat package:${NC}" "Debugging lolcat package:" - if [ -f "/usr/games/lolcat" ]; then - log_both "- Lolcat found at /usr/games/lolcat" - ls -la /usr/games/lolcat >> "$LOG_FILE" - else - log_both "- Lolcat not found at /usr/games/lolcat" - fi - if check_command lolcat; then - log_both "- Lolcat found in PATH" - command -v lolcat >> "$LOG_FILE" - else - log_both "- Lolcat not found in PATH" - firectory if it doesn't exist and is writable +# Log file setup - Try to use /logs directory if it doesn't exist and is writable # First, try creating the logs directory in case it doesn't exist if [ -d "/logs" ] || mkdir -p /logs 2>/dev/null; then if [ -w "/logs" ]; then @@ -68,10 +55,10 @@ echo "Starting setup test at $(date)" > "$LOG_FILE" || { log_both() { local colored_message="$1" local clean_message="$2" - + # Display colored message to terminal echo -e "$colored_message" - + # Log clean message to file if [ -n "$clean_message" ]; then echo "$clean_message" >> "$LOG_FILE" @@ -134,9 +121,9 @@ test_package() { local pkg=$1 local cmd=${2:-$1} local alt_cmd=$3 # Optional alternative command name - + echo -en "Testing if $pkg is installed... " - + # Special case for cowsay and lolcat which might be in different paths if [ "$pkg" = "cowsay" ]; then if check_command "$cmd"; then @@ -208,7 +195,7 @@ test_file_exists() { # Get actual package name based on distribution get_package_name() { local pkg=$1 - + # Handle Debian-specific package name differences if [[ "$ID" == "debian" ]]; then case "$pkg" in @@ -230,16 +217,16 @@ install_missing_packages() { local packages=("$@") local install_cmd_name local install_cmd=() - + if [ ${#packages[@]} -eq 0 ]; then echo -e "${GREEN}No packages to install${NC}" echo "No packages to install" >> "$LOG_FILE" return 0 fi - + echo -e "\n${BLUE}=== Installing missing packages (Attempt $CURRENT_ATTEMPT of $MAX_INSTALL_ATTEMPTS) ===${NC}" echo "=== Installing missing packages (Attempt $CURRENT_ATTEMPT of $MAX_INSTALL_ATTEMPTS) ===" >> "$LOG_FILE" - + # Determine the best installation command if check_command nala; then install_cmd=(sudo DEBIAN_FRONTEND=noninteractive nala install -y) @@ -252,14 +239,14 @@ install_missing_packages() { echo -e "${YELLOW}Using apt-get for package installation${NC}" echo "Using apt-get for package installation" >> "$LOG_FILE" fi - + # Convert package list to distribution-specific names local install_list=() for pkg in "${packages[@]}"; do local actual_pkg=$(get_package_name "$pkg") install_list+=("$actual_pkg") done - + # Update package lists echo -e "${YELLOW}Updating package lists...${NC}" echo "Updating package lists" >> "$LOG_FILE" @@ -270,30 +257,30 @@ install_missing_packages() { echo -e "${GREEN}Running: sudo DEBIAN_FRONTEND=noninteractive apt-get update${NC}" sudo DEBIAN_FRONTEND=noninteractive apt-get update | tee -a "$LOG_FILE" fi - + # Install packages echo -e "${YELLOW}Installing packages: ${install_list[*]}${NC}" echo "Installing packages: ${install_list[*]}" >> "$LOG_FILE" - + # Show the exact command being run for debugging echo -e "${BLUE}Running: ${install_cmd[*]} ${install_list[*]}${NC}" - + # Execute the install command with the package list if ! "${install_cmd[@]}" "${install_list[@]}" 2>&1 | tee -a "$LOG_FILE"; then echo -e "${RED}Failed to install some packages. Check the log for details.${NC}" echo "Failed to install some packages" >> "$LOG_FILE" - + # Try to install packages one by one to identify problematic ones echo -e "${YELLOW}Trying to install packages individually...${NC}" echo "Trying to install packages individually" >> "$LOG_FILE" - + installed_this_round=() local failed_this_round=() - + for i in "${!packages[@]}"; do local pkg="${packages[$i]}" local actual_pkg="${install_list[$i]}" - + echo -en "Installing $pkg as $actual_pkg... " if "${install_cmd[@]}" "$actual_pkg" >> "$LOG_FILE" 2>&1; then echo -e "${GREEN}✓${NC}" @@ -305,7 +292,7 @@ install_missing_packages() { failed_this_round+=("$pkg") fi done - + failed_packages=("${failed_this_round[@]}") return 1 else @@ -391,10 +378,10 @@ fi if [ -f "$HOME/shell/setup/packages.list" ]; then echo -e "${YELLOW}Testing package availability in repositories:${NC}" echo "Testing package availability:" >> "$LOG_FILE" - + # Exclude commented lines and empty lines packages=$(grep -v '^//' "$HOME/shell/setup/packages.list" | grep -v -e '^$') - + for pkg in $packages; do echo -en "Checking if $pkg is available in repos... " actual_pkg=$(get_package_name "$pkg") @@ -441,7 +428,7 @@ while [ $CURRENT_ATTEMPT -le $MAX_INSTALL_ATTEMPTS ]; do if [ -f "$HOME/shell/setup/packages.list" ]; then # Exclude commented lines and empty lines packages=$(grep -v '^//' "$HOME/shell/setup/packages.list" | grep -v -e '^$') - + for pkg in $packages; do case "$pkg" in "bat") @@ -465,7 +452,7 @@ while [ $CURRENT_ATTEMPT -le $MAX_INSTALL_ATTEMPTS ]; do else log_both "- Cowsay not found in PATH" fi - + if ! test_package "cowsay" "cowsay"; then ((errors++)) missing_packages+=("$pkg") @@ -486,7 +473,7 @@ while [ $CURRENT_ATTEMPT -le $MAX_INSTALL_ATTEMPTS ]; do else echo -e "- Lolcat not found in PATH" | tee -a "$LOG_FILE" fi - + if ! test_package "lolcat" "lolcat"; then ((errors++)) missing_packages+=("$pkg") @@ -500,24 +487,24 @@ while [ $CURRENT_ATTEMPT -le $MAX_INSTALL_ATTEMPTS ]; do ;; esac done - + # Report missing packages if [ ${#missing_packages[@]} -gt 0 ]; then echo -e "\n${YELLOW}Missing packages:${NC}" for pkg in "${missing_packages[@]}"; do echo -e "- ${RED}$pkg${NC}" done - + # Count installed vs. total packages total_pkgs=$(grep -v '^//' "$HOME/shell/setup/packages.list" | grep -v -e '^$' | wc -l) installed_pkgs=$((total_pkgs - ${#missing_packages[@]})) echo -e "${GREEN}$installed_pkgs of $total_pkgs packages installed${NC} (${YELLOW}${#missing_packages[@]} missing${NC})" echo "$installed_pkgs of $total_pkgs packages installed (${#missing_packages[@]} missing)" >> "$LOG_FILE" - + # Install missing packages if we haven't reached the maximum attempts if [ $CURRENT_ATTEMPT -lt $MAX_INSTALL_ATTEMPTS ]; then install_missing_packages "${missing_packages[@]}" - + echo -e "\n${BLUE}=== Installation Results ===${NC}" if [ ${#installed_this_round[@]} -gt 0 ]; then echo -e "${GREEN}Successfully installed:${NC}" @@ -526,7 +513,7 @@ while [ $CURRENT_ATTEMPT -le $MAX_INSTALL_ATTEMPTS ]; do done echo "Successfully installed: ${installed_this_round[*]}" >> "$LOG_FILE" fi - + if [ ${#failed_packages[@]} -gt 0 ]; then echo -e "${RED}Failed to install:${NC}" for pkg in "${failed_packages[@]}"; do @@ -534,7 +521,7 @@ while [ $CURRENT_ATTEMPT -le $MAX_INSTALL_ATTEMPTS ]; do done echo "Failed to install: ${failed_packages[*]}" >> "$LOG_FILE" fi - + CURRENT_ATTEMPT=$((CURRENT_ATTEMPT + 1)) echo -e "\n${YELLOW}Continuing to next test iteration...${NC}" echo "Continuing to next test iteration" >> "$LOG_FILE" @@ -550,7 +537,7 @@ while [ $CURRENT_ATTEMPT -le $MAX_INSTALL_ATTEMPTS ]; do echo -e "${RED}packages.list file not found at $HOME/shell/setup/packages.list${NC}" echo "packages.list file not found" >> "$LOG_FILE" fi - + # If no missing packages or we've reached max attempts, break out of the loop if [ ${#missing_packages[@]} -eq 0 ] || [ $CURRENT_ATTEMPT -ge $MAX_INSTALL_ATTEMPTS ]; then break @@ -563,11 +550,11 @@ done if [ -d "$HOME/.nvm" ]; then echo -e "NVM: ${GREEN}Installed${NC}" echo "NVM: Installed" >> "$LOG_FILE" - + # Source NVM export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" - + # Test Node.js installed by NVM if check_command node; then node_version=$(node -v) @@ -619,7 +606,7 @@ for dotfile in "${dotfiles[@]}"; do if [ -L "$dotfile" ]; then echo -e "Dotfile $dotfile: ${GREEN}Symlinked${NC}" echo "Dotfile $dotfile: Symlinked" >> "$LOG_FILE" - + # Check if symlink is valid if [ -e "$dotfile" ]; then target=$(readlink -f "$dotfile") @@ -649,7 +636,7 @@ if [ $errors -eq 0 ]; then else echo -e "${RED}Found $errors potential issues with your setup.${NC}" echo "Result: Found $errors potential issues" >> "$LOG_FILE" - + # Display missing packages if any if [ ${#missing_packages[@]} -gt 0 ]; then echo -e "\n${YELLOW}The following packages were not found:${NC}" @@ -658,13 +645,13 @@ else echo -e " - ${RED}$pkg${NC}" echo " - $pkg" >> "$LOG_FILE" done - + if [ $CURRENT_ATTEMPT -gt $MAX_INSTALL_ATTEMPTS ]; then echo -e "\n${RED}Reached maximum installation attempts ($MAX_INSTALL_ATTEMPTS).${NC}" echo -e "${YELLOW}Some packages could not be installed automatically.${NC}" echo "Reached maximum installation attempts" >> "$LOG_FILE" fi - + echo -e "\n${BLUE}You can manually install these packages with:${NC}" echo -e " sudo apt-get install ${missing_packages[*]}" fi @@ -688,12 +675,12 @@ if [[ "$ID" == "debian" ]]; then echo "1. Ensure Debian's 'universe' equivalent repositories are enabled (contrib, non-free)" echo "2. Some packages like 'bat' may have different names in Debian (batcat)" echo "3. Consider adding Debian-specific adjustments to setup.sh" - + # Add specific Debian package name mappings echo -e "\nOn Debian, you may need these package name adjustments:" echo " - bat → batcat" echo " - (add more as needed)" - + echo "Debian package name mappings may be required" >> "$LOG_FILE" fi @@ -701,16 +688,16 @@ fi check_bootstrapped_environment() { echo -e "\n${BLUE}=== Checking for bootstrapped environment ===${NC}" echo "=== Checking for bootstrapped environment ===" >> "$LOG_FILE" - + if [ -d "$HOME/shell" ] && [ -f "$HOME/shell/bootstrap.sh" ]; then echo -e "${GREEN}Environment appears to be bootstrapped:${NC}" echo "Environment is bootstrapped" >> "$LOG_FILE" - + # Check the shell repository structure if [ -d "$HOME/shell/setup" ] && [ -f "$HOME/shell/setup/setup.sh" ]; then echo -e " - ${GREEN}Setup directory and script present${NC}" echo "Setup directory and script: Present" >> "$LOG_FILE" - + # Check if setup.sh is executable if [ -x "$HOME/shell/setup/setup.sh" ]; then echo -e " - ${GREEN}Setup script is executable${NC}" @@ -723,12 +710,12 @@ check_bootstrapped_environment() { echo -e " - ${RED}Setup directory or setup.sh missing${NC}" echo "Setup directory or setup.sh: Missing" >> "$LOG_FILE" fi - + # Check packages.list if [ -f "$HOME/shell/setup/packages.list" ]; then echo -e " - ${GREEN}Packages list present${NC}" echo "Packages list: Present" >> "$LOG_FILE" - + # Count packages in list pkg_count=$(grep -v '^//' "$HOME/shell/setup/packages.list" | grep -v -e '^$' | wc -l) echo -e " - ${GREEN}Package list contains $pkg_count packages${NC}" @@ -737,12 +724,12 @@ check_bootstrapped_environment() { echo -e " - ${RED}Packages list missing${NC}" echo "Packages list: Missing" >> "$LOG_FILE" fi - + # Check dotfiles directory if [ -d "$HOME/shell/dotfiles" ]; then echo -e " - ${GREEN}Dotfiles directory present${NC}" echo "Dotfiles directory: Present" >> "$LOG_FILE" - + # Check if dotfiles are properly symlinked dotfiles_linked=true for dotfile in "$HOME/.zshrc" "$HOME/.nanorc" "$HOME/.profile" "$HOME/.gitconfig"; do @@ -759,7 +746,7 @@ check_bootstrapped_environment() { break fi done - + if $dotfiles_linked; then echo -e " - ${GREEN}Dotfiles are properly symlinked${NC}" echo "Dotfiles symlinked: Yes" >> "$LOG_FILE"