Create installbeta.sh

This commit is contained in:
Alvin Vilaythong
2025-11-12 11:12:54 +11:00
parent 8eb6627d4d
commit 3e45cfb170
3 changed files with 128 additions and 126 deletions
+42
View File
@@ -0,0 +1,42 @@
# Project Overview
This project consists of a collection of shell scripts designed to automate the installation and configuration of a development environment on Arch Linux-based systems. It uses `pacman` for system packages and `yay` for AUR packages.
The main components are:
- **`install.sh`**: The primary script that runs through the entire installation process.
- **`installbeta.sh`**: A newer, interactive version of the installation script that uses `whiptail` to provide a menu-driven interface.
- **`zsh.sh`**: A script dedicated to setting up Zsh, Oh My Zsh, and several useful plugins.
- **`LazyVim.sh`**: A script for setting up a LazyVim configuration for Neovim.
- **`configs/`**: A directory containing configuration files, including `.zshrc` and lists of packages to be installed (`PackagesPacman.txt`, `PackagesYay.txt`).
# Building and Running
These are shell scripts and do not require a build process. They can be executed directly.
**Running the main installation:**
```bash
./install.sh
```
**Running the interactive installation:**
```bash
./installbeta.sh
```
**Running individual setup scripts:**
```bash
./zsh.sh
./LazyVim.sh
```
# Development Conventions
- The scripts are written in `bash`.
- They are designed to be run on Arch Linux and may have some compatibility with other systems (e.g., `zsh.sh` has checks for `apt`).
- The scripts use `set -eux pipefail` to ensure that they exit on any error and print commands as they are executed, which is good for debugging. This is toggled off for specific commands that might fail without being critical.
- The scripts frequently use `curl` to download other scripts or configuration files from the associated GitHub repository.
- Package lists are maintained in `configs/PackagesPacman.txt` and `configs/PackagesYay.txt`.
- Python dependencies for some tools are listed in `requirements.txt` and installed via `pip`.
+1
View File
@@ -42,6 +42,7 @@ flatpak
fortune-mod
fuse-overlayfs
fzf
gemini-cli
git
glib2-devel
gnome-2048
+85 -126
View File
@@ -1,147 +1,106 @@
#!/bin/bash
#!/usr/bin/bash
clear
echo -e "\e[0m\c"
# shellcheck disable=SC2016
echo '
____ _ _ _ _ _
| _ \ _ _ __ _| |_ _(_)_ __ | | ___ | | | ___
| __ ) _ _ __ _| |_ _(_)_ __ | | ___ | | | ___
| _ \| | | | / _ | \ \ / / | _ \| |/ _ \| | |/ _ \
| |_) | |_| | | (_| | |\ V /| | | | | | (_) | | | (_) |
|____/ \__ | \__ _|_| \_/ |_|_| |_|_|\___/|_|_|\___/
|___/
|____/ \__ | \__ _|_| \_/ |_|_| |_|_|\___/|_|_|\___/
|___/
--------------- Single Download script ---------------
--------------- Single Download script (BETA) ---------------
'
# Install prerequisites
echo "Install prerequisites"
echo
sudo apt update
sudo apt install -y git zsh curl git build-essential whiptail
echo
# Update system
echo "Update system"
echo
sudo apt full-upgrade -y
echo
# Build whiptail command
whiptail_command=(
whiptail --title "Select Options" --checklist "Choose options to install" 28 85 20
)
whiptail_options=(
"homebrew" "Installs homebrew using the install script" "OFF"
"ohmyzsh" "Installs Oh-My-Zsh with plugins and configurations" "ON"
"gef" "Installs GEF (https://github.com/hugsy/gef/)" "OFF"
"apt_packages" "Installs packages and utilities" "ON"
"casaos" "Installs CasaOs using the install script" "OFF"
"docker" "Installs Docker with install script" "OFF"
)
# Append options to the whiptail command
for i in "${!whiptail_options[@]}"; do
whiptail_command+=("${whiptail_options[$i]}")
done
# Function to get user selections
get_user_selection() {
local selections
# Execute whiptail and capture the output
selections=$(whiptail "${whiptail_command[@]}" 2>/dev/null)
if [ $? -ne 0 ]; then
echo "INFO No options selected. Exiting."
exit 1
fi
echo "$selections"
# Function to display error message
function error_handler() {
echo " "
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
echo "An error occurred. Please check the output above for details."
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
echo " "
}
# Function to execute commands based on user selection
execute_commands() {
local options=("$@") # Get options as an array
# Trap errors
trap error_handler ERR
for option in "${options[@]}"; do
case "$option" in
"homebrew")
echo "INFO Executing commands for Homebrew"
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" || echo "ERROR Failed to install Homebrew"
brew update || echo "ERROR Homebrew update failed"
brew upgrade || echo "ERROR Homebrew upgrade failed"
brew install fzf gcc eza thefuck gh || echo "ERROR Failed to install Homebrew packages"
;;
"ohmyzsh")
echo "INFO Executing commands for Oh-My-Zsh"
sudo apt install zsh fzf -y || echo "ERROR Failed to install zsh and fzf"
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" || echo "ERROR Failed to install Oh-My-Zsh"
#Install prerequisites
sudo pacman -Syu git zsh curl --noconfirm --needed
# Installs plugins
git clone https://github.com/zsh-users/zsh-history-substring-search ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-history-substring-search || echo "ERROR Failed to install zsh-history-substring-search"
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions || echo "ERROR Failed to install zsh-autosuggestions"
git clone https://github.com/z-shell/zsh-eza ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-eza || echo "ERROR Failed to install zsh-eza"
git clone --depth 1 https://github.com/unixorn/fzf-zsh-plugin.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/fzf-zsh-plugin || echo "ERROR Failed to install fzf-zsh-plugin"
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting || echo "ERROR Failed to install zsh-syntax-highlighting"
# Ensure whiptail is installed
if ! command -v whiptail >/dev/null; then
echo "whiptail is not installed. Installing it now..."
sudo pacman -S --noconfirm whiptail || { echo "Failed to install whiptail. Exiting."; exit 1; }
fi
echo "INFO Configuring Oh-MyZsh"
# Options for the whiptail menu
OPTIONS=(
1 "Run zsh setup script" OFF
2 "Run LazyVim setup script" OFF
3 "Install Docker" OFF
4 "Install Pacman Packages" OFF
5 "Install Yay and AUR Packages" OFF
)
# Backup old config file if it exists
if [ -f ~/.zshrc ]; then
cp ~/.zshrc ~/.zshrc.backup || echo "ERROR Failed to backup .zshrc"
fi
CHOICE=$(whiptail --title "Installation Options" --checklist \
"Choose components to install:" 20 78 10 \
"${OPTIONS[@]}" 3>&1 1>&2 2>&3)
# Download and replace config file
curl -fsSL https://raw.githubusercontent.com/alvinlollo/Single-install-script/refs/heads/main/configs/.zshrc -o ~/.zshrc || echo "ERROR Failed to download .zshrc"
mkdir -p ~/.fzf/shell || echo "ERROR Failed to create .fzf/shell"
touch ~/.fzf/shell/key-bindings.zsh || echo "ERROR Failed to create key-bindings.zsh"
source ~/.zshrc
source ~/.zshrc
source ~/.zshrc
;;
"gef")
echo "INFO Executing commands for GEF"
bash -c "$(curl -fsSL https://gef.blah.cat/sh)" || echo "ERROR Failed to install GEF"
;;
"apt_packages")
echo "INFO Executing commands for apt Packages"
sudo apt install -y python3 python3-pip git htop golang figlet irssi cmatrix neofetch cowsay fortune-mod tint smartmontools udevil samba cifs-utils mergerfs tty-clock lolcat libsass1 dpkg npm python3 needrestart lynx wget curl zsh net-tools network-manager tmux --fix-missing || echo "ERROR Failed to install apt packages"
;;
"casaos")
echo "INFO Executing commands for Casa Os"
curl -fsSL https://get.casaos.io | sudo bash || echo "ERROR Failed to install CasaOS"
;;
"docker")
echo "INFO Executing commands for Docker"
curl -fsSL https://get.docker.com | sh || echo "ERROR Failed to install Docker"
;;
*)
echo "WARN Unknown option: $option"
;;
esac
done
}
# Main script logic
echo "INFO Starting the installation process..."
# Get user selections
selected_options=$(get_user_selection)
# Check if selected_options is empty
if [ -z "$selected_options" ]; then
echo "INFO No options selected. Exiting."
exitstatus=$?
if [ $exitstatus = 0 ]; then
echo "User selected: $CHOICE"
else
echo "User cancelled installation."
exit 1
fi
# Convert selected options into an array (splitting by space)
IFS=' ' read -r -a options <<< "$selected_options"
# Fail on any command.
set -eux pipefail
# Execute commands based on selections
execute_commands "${options[@]}"
# Process selected options
for selection in $CHOICE; do
clean_selection=$(echo $selection | tr -d '"')
case $clean_selection in
"1")
echo "Running zsh setup script..."
curl -fsSL https://raw.githubusercontent.com/alvinlollo/Single-install-script/refs/heads/main/zsh.sh | bash
;;
"2")
echo "Running LazyVim setup script..."
curl -fsSL https://raw.githubusercontent.com/alvinlollo/Single-install-script/refs/heads/main/LazyVim.sh | bash
;;
"3")
echo "Installing Docker..."
if ! command -v docker >/dev/null; then
echo "docker is NOT installed. Running installation commands..."
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
else
echo "Docker is already installed."
fi
;;
"4")
echo "Installing Pacman Packages..."
curl -fsSL https://raw.githubusercontent.com/alvinlollo/Single-install-script/refs/heads/main/configs/PackagesPacman.txt | sudo pacman -S - --needed --noconfirm
;;
"5")
echo "Installing Yay and Yay Packages..."
sudo pacman -S --needed --noconfirm efibootmgr sbsigntools mokutil sbctl # These were in the original script before yay install
if ! command -v yay >/dev/null; then
echo "yay is NOT installed. Running installation commands..."
git clone https://aur.archlinux.org/yay.git /tmp/yay_install
(cd /tmp/yay_install && makepkg -si --noconfirm)
rm -rf /tmp/yay_install
else
echo "Yay is already installed."
fi
# Assuming PackagesYay.txt for yay packages, as per common practice
curl -fsSL https://raw.githubusercontent.com/alvinlollo/Single-install-script/refs/heads/main/configs/PackagesYay.txt | yay -S --needed --save --answerclean All --answerdiff All - --noconfirm
;;
*)
echo "Invalid option selected: $selection"
;;
esac
done
echo "INFO Installation process completed."
exit 0
echo "Installation process complete."