Added upgrade features, cat, multi-selector, new-menu

This commit is contained in:
2026-08-26 16:19:38 +01:00
parent 97d9ae202a
commit 9ebb62f13e
4 changed files with 1109 additions and 901 deletions
+151 -37
View File
@@ -8,11 +8,75 @@ pause() {
read -rp "Press Enter to continue..."
}
debmess(){
$debdescription="$1"
echo "DEBUG MESSAGE: $debdescription"
echo "Press enter to continue..."
read debmess
# ========================
# OS & DEPENDENCIES
# ========================
install_dependencies() {
echo "============================================="
echo "[ Checking and installing dependencies... ]"
echo "============================================="
local need_jq=0
local need_curl=0
if ! command -v jq >/dev/null 2>&1; then
need_jq=1
fi
if ! command -v curl >/dev/null 2>&1; then
need_curl=1
fi
if [[ $need_jq -eq 0 && $need_curl -eq 0 ]]; then
echo " -> Dependencies (jq, curl) are already installed."
return 0
fi
local sudo_cmd=""
if [[ "$EUID" -ne 0 ]] && command -v sudo >/dev/null 2>&1; then
sudo_cmd="sudo"
fi
# Distro detection
local distro=""
if [[ -f /etc/os-release ]]; then
# shellcheck disable=SC1091
source /etc/os-release
distro="${ID:-unknown}"
echo " -> Detected OS: ${PRETTY_NAME:-$distro}"
fi
echo " -> Installing required packages (jq, curl)..."
if command -v apt-get >/dev/null 2>&1; then
echo " -> Using apt package manager..."
$sudo_cmd apt-get update -qq && $sudo_cmd apt-get install -y jq curl
elif command -v dnf >/dev/null 2>&1; then
echo " -> Using dnf package manager..."
$sudo_cmd dnf install -y jq curl
elif command -v yum >/dev/null 2>&1; then
echo " -> Using yum package manager..."
$sudo_cmd yum install -y jq curl
elif command -v pacman >/dev/null 2>&1; then
echo " -> Using pacman package manager..."
$sudo_cmd pacman -Sy --noconfirm jq curl
elif command -v zypper >/dev/null 2>&1; then
echo " -> Using zypper package manager..."
$sudo_cmd zypper --non-interactive in jq curl
elif command -v apk >/dev/null 2>&1; then
echo " -> Using apk package manager..."
$sudo_cmd apk add --no-cache jq curl
elif command -v brew >/dev/null 2>&1; then
echo " -> Using Homebrew..."
brew install jq curl
else
echo " -> [WARNING] No supported package manager found. Please install 'jq' and 'curl' manually."
fi
if command -v jq >/dev/null 2>&1; then
echo " -> [OK] jq is installed."
else
echo " -> [WARNING] jq could not be installed automatically."
fi
}
select_user() {
@@ -31,7 +95,7 @@ select_user() {
exit 1
elif [[ -d "/home/$choice" ]]; then
read -rp "Confirm user '$choice'? (y/N): " confirm
if [[ "$confirm" == "y" ]]; then
if [[ "$confirm" == "y" || "$confirm" == "Y" ]]; then
selected_user="$choice"
return
fi
@@ -68,8 +132,8 @@ while true; do
exit 1
;;
*)
read -rp "Confirm current user '$current_user'? (y/N): " confirm
if [[ "$confirm" == "y" ]]; then
read -rp "Confirm current user '$current_user'? (Y/n): " confirm
if [[ "$confirm" == "y" || "$confirm" == "Y" || -z "$confirm" ]]; then
selected_user="$current_user"
break
fi
@@ -79,16 +143,21 @@ while true; do
clear
done
# ========================
# DEPENDENCIES CHECK
# ========================
install_dependencies
# ========================
# VARIABLES
# ========================
if [ "$selected_user" == "root" ]; then
home="/root"
bashrc="$home/.bashrc"
home="/root"
bashrc="$home/.bashrc"
else
home="/home/$selected_user"
bashrc="$home/.bashrc"
home="/home/$selected_user"
bashrc="$home/.bashrc"
fi
mainfolder="$home/.bashrc.d"
@@ -102,30 +171,62 @@ script_dir="$(cd "$(dirname "$0")" && pwd)"
# ========================
# CREATE DIRECTORIES
# ========================
echo "[ Creating folders... ]"
echo ""
echo "[ Creating modular directories... ]"
#mkdir -p "$neededfolder"
mkdir -p "$neededfolder"
mkdir -p "$availablefolder"
mkdir -p "$enabledfolder"
mkdir -p "$removedfolder"
# ========================
# BACKUP .bashrc
# BACKUP AND MIGRATE .bashrc
# ========================
backup_file="$home/bashrc-backup-$(date +%F_%H-%M-%S)"
if [[ -f "$bashrc" ]]; then
cp "$bashrc" "$home/bashrc-backup-$(date +%F)"
echo "[ Backup created ]"
cp "$bashrc" "$backup_file"
echo "[ Backup created at $backup_file ]"
# Check if existing bashrc has meaningful content (excluding empty lines and existing modular block)
cleaned_bashrc=$(grep -v "Modular Bashrc" "$bashrc" | grep -v "scripts-needed" | grep -v "scripts-enabled" | grep -v "scripts-available" | tr -d '[:space:]')
if [[ -n "$cleaned_bashrc" ]]; then
echo "[ Migrating existing .bashrc content into 00_default.sh... ]"
cat << 'EOF' > "$availablefolder/00_default.sh"
#!/bin/bash
# ============================================================
# Modular Bashrc - 00_default.sh
# Migrated automatically from your pre-existing ~/.bashrc
# Add your custom exports, aliases and functions here!
# ============================================================
EOF
cat "$bashrc" >> "$availablefolder/00_default.sh"
echo "" >> "$availablefolder/00_default.sh"
# Automatically enable 00_default.sh so user keeps their previous configuration active
ln -sf "$availablefolder/00_default.sh" "$enabledfolder/00_default.sh"
echo " -> [OK] 00_default.sh created and enabled in scripts-enabled/"
else
if [[ -f "$script_dir/00_default.sh" ]]; then
cp "$script_dir/00_default.sh" "$availablefolder/00_default.sh"
echo " -> Copied standard 00_default.sh template"
fi
fi
else
echo "[ WARNING: .bashrc not found, creating a new one ]"
touch "$bashrc"
echo "[ WARNING: .bashrc not found, creating modular base ]"
if [[ -f "$script_dir/00_default.sh" ]]; then
cp "$script_dir/00_default.sh" "$availablefolder/00_default.sh"
fi
fi
# ========================
# MODIFY .bashrc
# WRITE CLEAN .bashrc
# ========================
if [[ -f "$script_dir/NEEDED-FOR-INSTALLER" ]]; then
cat "$script_dir/NEEDED-FOR-INSTALLER" >> "$bashrc"
echo "[ Updated .bashrc ]"
cat "$script_dir/NEEDED-FOR-INSTALLER" > "$bashrc"
echo "[ Updated .bashrc with clean modular loader ]"
else
echo "[ ERROR: NEEDED-FOR-INSTALLER missing ]"
exit 1
@@ -135,20 +236,22 @@ fi
# COPY NEEDED SCRIPTS
# ========================
needed_to_copy="$script_dir/scripts-needed"
cp -r $needed_to_copy $mainfolder
echo "[ Main logic scripts installed ]"
if [[ -d "$needed_to_copy" ]]; then
cp -r "$needed_to_copy"/* "$neededfolder/"
chmod 750 "$neededfolder"/*.sh 2>/dev/null
echo "[ Main logic scripts installed in scripts-needed ]"
fi
# ========================
# COPY DEFAULT SCRIPTS
# ========================
echo "[ Installing default scripts... ]"
echo "[ Installing default available scripts... ]"
default_scripts=(
"00_default.sh"
"01_git-cli-highlitgh.sh"
"02_git-cli-highlitgh-root.sh"
"03_bashboard.sh"
"04_aliases"
"04_aliases.sh"
)
for script in "${default_scripts[@]}"; do
@@ -160,19 +263,24 @@ for script in "${default_scripts[@]}"; do
fi
done
# ========================
# APPLY CHANGES
# ========================
# shellcheck disable=SC1090
#source "$bashrc"
source ~/.bashrc
echo "[ Bashrc reloaded ]"
# Save version/commit information if inside git repo
repo_dir="$(cd "$script_dir/.." && pwd)"
if git -C "$repo_dir" rev-parse --is-inside-work-tree >/dev/null 2>&1; then
current_commit=$(git -C "$repo_dir" rev-parse HEAD 2>/dev/null)
echo "$current_commit" > "$mainfolder/.version"
else
date +%s > "$mainfolder/.version"
fi
# Fix ownership if running as root for a normal user
if [[ "$current_user" == "root" && "$selected_user" != "root" ]]; then
chown -R "$selected_user":"$selected_user" "$mainfolder" "$bashrc" "$backup_file" 2>/dev/null
fi
pause
# ========================
# FINAL MESSAGE
# ========================
clear
echo ""
echo "##################################"
echo " Installation Done "
echo "##################################"
@@ -182,8 +290,14 @@ echo " $availablefolder"
echo ""
echo "Use commands:"
echo " brc-script -> manage scripts"
echo " brc-script -l -> list scripts"
echo " brc-script --cat -> preview a script"
echo " brc-script -e -> enable script(s)"
echo " brc-script -d -> disable script(s)"
echo " brc-script --update -> check Gitea updates"
echo " brc-script --upgrade -> upgrade scripts"
echo " refresh-brc -> reload config"
echo ""
echo "##################################"
echo " Thanks for using this script! "
echo " Thanks for using Modular Bashrc! "
echo "##################################"