mirror of
https://github.com/alvinlollo/Single-install-script.git
synced 2026-06-15 03:04:26 +10:00
Create installbeta.sh
This commit is contained in:
@@ -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`.
|
||||
@@ -42,6 +42,7 @@ flatpak
|
||||
fortune-mod
|
||||
fuse-overlayfs
|
||||
fzf
|
||||
gemini-cli
|
||||
git
|
||||
glib2-devel
|
||||
gnome-2048
|
||||
|
||||
+85
-126
@@ -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."
|
||||
Reference in New Issue
Block a user