Added upgrade features, cat, multi-selector, new-menu
This commit is contained in:
+173
-138
@@ -1,168 +1,204 @@
|
||||
#!/bin/bash
|
||||
|
||||
############# DEPENDENCIES #############
|
||||
|
||||
# - Debian Based OS (for now)
|
||||
# - curl
|
||||
# - lm-sensors
|
||||
# apt update && apt install curl lm-sensors
|
||||
|
||||
# - lm-sensors (optional for temp)
|
||||
# - jq (optional)
|
||||
############################################
|
||||
|
||||
colorize() {
|
||||
local value=$1
|
||||
local green_limit=$2
|
||||
local yellow_limit=$3
|
||||
local value=$1
|
||||
local green_limit=$2
|
||||
local yellow_limit=$3
|
||||
|
||||
if [ "$value" -lt "$green_limit" ]; then
|
||||
echo -e "${GREEN}${value}${NC}"
|
||||
elif [ "$value" -lt "$yellow_limit" ]; then
|
||||
echo -e "${YELLOW}${value}${NC}"
|
||||
else
|
||||
echo -e "${RED}${value}${NC}"
|
||||
fi
|
||||
if [ "$value" -lt "$green_limit" ]; then
|
||||
echo -e "${GREEN}${value}${NC}"
|
||||
elif [ "$value" -lt "$yellow_limit" ]; then
|
||||
echo -e "${YELLOW}${value}${NC}"
|
||||
else
|
||||
echo -e "${RED}${value}${NC}"
|
||||
fi
|
||||
}
|
||||
|
||||
function dashboard_fast() {
|
||||
#### CHANGABLE OPTIONS ####
|
||||
ISTHISVM=0 # Change to 1 if this is a VM. This will remove the temperature bit.
|
||||
MIN_CHECK_IP=30 # Change this value to set the timing cache for checking the public IP.
|
||||
MIN_CHECK_UPDATE=120 # Change this value to set the timing cache for checking updates.
|
||||
LOCAL_CACHE=1 # Change this value to 1 if you want to create the local cache in the ~/.bashrc.d/.dashboard_cache.
|
||||
UI_SHOWS=1 # Change to 1 if cockpit has been installed. This will shows the IP and port Link.
|
||||
#### CHANGABLE OPTIONS ####
|
||||
ISTHISVM=0 # Change to 1 if this is a VM. This will remove the temperature bit.
|
||||
MIN_CHECK_IP=30 # Timing cache (minutes) for checking the public IP.
|
||||
MIN_CHECK_UPDATE=120 # Timing cache (minutes) for checking updates.
|
||||
LOCAL_CACHE=1 # 1: ~/.bashrc.d/.dashboard_cache, 0: /tmp/.dashboard_cache
|
||||
|
||||
#### Colors ####
|
||||
GREEN="\e[32m"
|
||||
YELLOW="\e[33m"
|
||||
RED="\e[31m"
|
||||
CYAN="\e[36m"
|
||||
BOLD="\e[1m"
|
||||
NC="\e[0m" # reset
|
||||
|
||||
#### Cache ####
|
||||
if [ $LOCAL_CACHE -ne 1 ]; then
|
||||
CACHE_DIR="/tmp/.dashboard_cache"
|
||||
else
|
||||
CACHE_DIR="${HOME}/.bashrc.d/.dashboard_cache"
|
||||
fi
|
||||
mkdir -p "$CACHE_DIR" 2>/dev/null
|
||||
|
||||
#### Overview ####
|
||||
echo -e "${CYAN}========================================${NC}"
|
||||
echo -e "${BOLD} 🖥️ SYSTEM OVERVIEW${NC}"
|
||||
echo -e "${CYAN}========================================${NC}"
|
||||
|
||||
#### Colors ####
|
||||
GREEN="\e[32m"
|
||||
YELLOW="\e[33m"
|
||||
RED="\e[31m"
|
||||
CYAN="\e[36m"
|
||||
BOLD="\e[1m"
|
||||
NC="\e[0m" # reset
|
||||
|
||||
|
||||
#### Cache ####
|
||||
if [ $LOCAL_CACHE -ne 1 ]; then
|
||||
CACHE_DIR="/tmp/.dashboard_cache"
|
||||
else
|
||||
CACHE_DIR="/home/$(whoami)/.bashrc.d/.dashboard_cache"
|
||||
fi
|
||||
mkdir -p "$CACHE_DIR"
|
||||
|
||||
#### Overview ####
|
||||
echo -e "${CYAN}========================================${NC}"
|
||||
echo -e "${BOLD} 🖥️ SYSTEM OVERVIEW${NC}"
|
||||
echo -e "${CYAN}========================================${NC}"
|
||||
|
||||
#### OS Informations Include ####
|
||||
#### OS Informations Include ####
|
||||
if [ -f /etc/os-release ]; then
|
||||
# shellcheck disable=SC1091
|
||||
source /etc/os-release
|
||||
|
||||
|
||||
#### OS info ###
|
||||
echo -e "${CYAN}DISTRO:${NC} $PRETTY_NAME"
|
||||
echo -e "${CYAN}DISTRO:${NC} ${PRETTY_NAME:-$ID}"
|
||||
echo -e "${CYAN}ID:${NC} $ID"
|
||||
echo -e "${CYAN}VERSION:${NC} $VERSION"
|
||||
echo -e "${CYAN}URL:${NC} $HOME_URL"
|
||||
echo -e "${CYAN}BUGS_URL:${NC} $BUG_REPORT_URL"
|
||||
[ -n "$VERSION" ] && echo -e "${CYAN}VERSION:${NC} $VERSION"
|
||||
[ -n "$HOME_URL" ] && echo -e "${CYAN}URL:${NC} $HOME_URL"
|
||||
[ -n "$BUG_REPORT_URL" ] && echo -e "${CYAN}BUGS_URL:${NC} $BUG_REPORT_URL"
|
||||
echo -e "${CYAN}========================================${NC}"
|
||||
fi
|
||||
|
||||
#### Hostname ####
|
||||
echo "📛 $(hostname)"
|
||||
|
||||
#### Local IP ####
|
||||
LOCAL_IPS=$(hostname -I 2>/dev/null | xargs)
|
||||
PRIMARY_IP=$(echo "$LOCAL_IPS" | awk '{print $1}')
|
||||
|
||||
if [ -z "$LOCAL_IPS" ]; then
|
||||
echo "🏠 Local IP: NOT AVAILABLE (no network?)"
|
||||
else
|
||||
echo "🏠 Local IP: $LOCAL_IPS"
|
||||
fi
|
||||
|
||||
#### Cockpit Web UI Auto-Detection ####
|
||||
COCKPIT_DETECTED=0
|
||||
COCKPIT_PORT=""
|
||||
|
||||
# Check if cockpit is installed or socket/service exists
|
||||
if command -v cockpit-ws >/dev/null 2>&1 || command -v cockpit-bridge >/dev/null 2>&1 || [ -d /etc/cockpit ] || systemctl list-unit-files 2>/dev/null | grep -q "cockpit.socket"; then
|
||||
COCKPIT_DETECTED=1
|
||||
|
||||
#### Hostname ####
|
||||
echo "📛 $(hostname)"
|
||||
|
||||
|
||||
#### Local IP ####
|
||||
LOCAL_IPS=$(hostname -I 2>/dev/null | xargs)
|
||||
PRIMARY_IP=$(echo "$LOCAL_IPS" | awk '{print $1}')
|
||||
|
||||
if [ -z "$LOCAL_IPS" ]; then
|
||||
echo "🏠 Local IP: NOT AVAILABLE (no network?)"
|
||||
if [ $UI_SHOWS -eq 1 ]; then echo "🌐 Web UI: NOT AVAILABLE"; fi
|
||||
else
|
||||
echo "🏠 Local IP: $LOCAL_IPS"
|
||||
if [ $UI_SHOWS -eq 1 ]; then echo "🌐 Web UI: http://$PRIMARY_IP:9090"; fi
|
||||
# 1. Search port in /etc/cockpit/cockpit.conf
|
||||
if [ -f /etc/cockpit/cockpit.conf ]; then
|
||||
COCKPIT_PORT=$(grep -Ei '^\s*(Port|Listen)\s*=' /etc/cockpit/cockpit.conf 2>/dev/null | head -n1 | awk -F= '{print $2}' | tr -d ' ')
|
||||
fi
|
||||
|
||||
|
||||
#### Public IP ####
|
||||
if [ -f "$CACHE_DIR/public_ip" ] && find "$CACHE_DIR/public_ip" -mmin -$MIN_CHECK_IP | grep -q .; then
|
||||
PUBLIC_IP=$(cat "$CACHE_DIR/public_ip")
|
||||
else
|
||||
PUBLIC_IP=$(timeout 2 curl -s ifconfig.me 2>/dev/null)
|
||||
if [ -n "$PUBLIC_IP" ]; then
|
||||
echo "$PUBLIC_IP" > "$CACHE_DIR/public_ip"
|
||||
fi
|
||||
# 2. Search port in systemd socket definition
|
||||
if [ -z "$COCKPIT_PORT" ] && command -v systemctl >/dev/null 2>&1; then
|
||||
COCKPIT_PORT=$(systemctl cat cockpit.socket 2>/dev/null | grep -E '^ListenStream=' | head -n1 | awk -F= '{print $2}' | tr -d ' ')
|
||||
fi
|
||||
|
||||
if [ -z "$PUBLIC_IP" ]; then
|
||||
echo "🌍 Public IP: NOT AVAILABLE (no internet?)"
|
||||
else
|
||||
echo "🌍 Public IP: $PUBLIC_IP"
|
||||
# 3. Search port in listening sockets
|
||||
if [ -z "$COCKPIT_PORT" ] && command -v ss >/dev/null 2>&1; then
|
||||
COCKPIT_PORT=$(ss -tlnp 2>/dev/null | grep -E 'cockpit|cockpit-ws' | awk '{print $4}' | awk -F: '{print $NF}' | head -n1)
|
||||
fi
|
||||
#echo ""
|
||||
echo -e "${CYAN} .................................. ${NC}"
|
||||
|
||||
#### Cpu ####
|
||||
# 4. Default fallback port for Cockpit is 9090
|
||||
if [ -z "$COCKPIT_PORT" ]; then
|
||||
COCKPIT_PORT=9090
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ $COCKPIT_DETECTED -eq 1 ] && [ -n "$PRIMARY_IP" ]; then
|
||||
echo -e "🌐 Cockpit UI: ${GREEN}https://${PRIMARY_IP}:${COCKPIT_PORT}${NC}"
|
||||
fi
|
||||
|
||||
#### Public IP ####
|
||||
if [ -f "$CACHE_DIR/public_ip" ] && find "$CACHE_DIR/public_ip" -mmin -$MIN_CHECK_IP | grep -q . 2>/dev/null; then
|
||||
PUBLIC_IP=$(cat "$CACHE_DIR/public_ip" 2>/dev/null)
|
||||
else
|
||||
PUBLIC_IP=$(timeout 2 curl -s ifconfig.me 2>/dev/null)
|
||||
if [ -n "$PUBLIC_IP" ]; then
|
||||
echo "$PUBLIC_IP" > "$CACHE_DIR/public_ip" 2>/dev/null
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -z "$PUBLIC_IP" ]; then
|
||||
echo "🌍 Public IP: NOT AVAILABLE (no internet?)"
|
||||
else
|
||||
echo "🌍 Public IP: $PUBLIC_IP"
|
||||
fi
|
||||
echo -e "${CYAN} .................................. ${NC}"
|
||||
|
||||
#### Cpu ####
|
||||
if [ -r /proc/loadavg ]; then
|
||||
LOAD=$(awk '{print $1}' /proc/loadavg)
|
||||
CPU_PCT=$(awk -v l="$LOAD" -v n="$(nproc)" 'BEGIN {printf "%d", (l*100/n)}')
|
||||
CPU_PCT=$(awk -v l="$LOAD" -v n="$(nproc 2>/dev/null || echo 1)" 'BEGIN {printf "%d", (l*100/n)}')
|
||||
CPU_COLOR=$(colorize "$CPU_PCT" 50 80)
|
||||
echo -e "🧠 CPU: ${CPU_COLOR}%"
|
||||
fi
|
||||
|
||||
|
||||
#### Ram ####
|
||||
read MEM_TOTAL MEM_USED <<< $(free -m | awk '/Mem:/ {print $2, $3}')
|
||||
MEM_PCT=$((MEM_USED * 100 / MEM_TOTAL))
|
||||
MEM_COLOR=$(colorize "$MEM_PCT" 50 80)
|
||||
echo -e "💾 RAM: ${MEM_COLOR}% (${MEM_USED}/${MEM_TOTAL}MB)"
|
||||
|
||||
|
||||
|
||||
#### Diskspace ####
|
||||
DISK_PCT=$(df / | awk 'NR==2 {gsub("%",""); print $5}')
|
||||
DISK_COLOR=$(colorize "$DISK_PCT" 50 80)
|
||||
DISK=$(df -h / | awk 'NR==2 {print $3 "/" $2}')
|
||||
echo -e "📦 Disk: ${DISK} (${DISK_COLOR}%)"
|
||||
|
||||
|
||||
|
||||
#### Uptime ####
|
||||
echo "⏱️ Uptime: $(awk '{printf "%dd %dh %dm", $1/86400, ($1%86400)/3600, ($1%3600)/60}' /proc/uptime)"
|
||||
|
||||
|
||||
#### Load Avarage ####
|
||||
echo "📊 Load avg: $(awk '{print $1, $2, $3}' /proc/loadavg)"
|
||||
|
||||
|
||||
|
||||
#### Updates ####
|
||||
if command -v apt >/dev/null 2>&1; then
|
||||
if [ -f "$CACHE_DIR/updates" ] && find "$CACHE_DIR/updates" -mmin -$MIN_CHECK_UPDATE | grep -q .; then
|
||||
UPDATES=$(cat "$CACHE_DIR/updates")
|
||||
else
|
||||
UPDATES=$(apt list --upgradable 2>/dev/null | wc -l)
|
||||
UPDATES=$((UPDATES - 1))
|
||||
echo "$UPDATES" > "$CACHE_DIR/updates"
|
||||
fi
|
||||
|
||||
## 🎨 Dinamic Color ##
|
||||
if [ "$UPDATES" -eq 0 ]; then
|
||||
UPD_COLOR="${GREEN}${UPDATES}${NC}"
|
||||
elif [ "$UPDATES" -le 20 ]; then
|
||||
UPD_COLOR="${YELLOW}${UPDATES}${NC}"
|
||||
else
|
||||
UPD_COLOR="${RED}${UPDATES}${NC}"
|
||||
fi
|
||||
|
||||
echo -e "📦 Updates: $UPD_COLOR"
|
||||
else
|
||||
echo "📦 Updates: N/A"
|
||||
#### Ram ####
|
||||
if command -v free >/dev/null 2>&1; then
|
||||
read -r MEM_TOTAL MEM_USED <<< "$(free -m | awk '/Mem:/ {print $2, $3}')"
|
||||
if [ -n "$MEM_TOTAL" ] && [ "$MEM_TOTAL" -gt 0 ]; then
|
||||
MEM_PCT=$((MEM_USED * 100 / MEM_TOTAL))
|
||||
MEM_COLOR=$(colorize "$MEM_PCT" 50 80)
|
||||
echo -e "💾 RAM: ${MEM_COLOR}% (${MEM_USED}/${MEM_TOTAL}MB)"
|
||||
fi
|
||||
fi
|
||||
|
||||
#### Diskspace ####
|
||||
if command -v df >/dev/null 2>&1; then
|
||||
DISK_PCT=$(df / 2>/dev/null | awk 'NR==2 {gsub("%",""); print $5}')
|
||||
DISK_COLOR=$(colorize "${DISK_PCT:-0}" 50 80)
|
||||
DISK=$(df -h / 2>/dev/null | awk 'NR==2 {print $3 "/" $2}')
|
||||
echo -e "📦 Disk: ${DISK} (${DISK_COLOR}%)"
|
||||
fi
|
||||
|
||||
#### Uptime ####
|
||||
if [ -r /proc/uptime ]; then
|
||||
echo "⏱️ Uptime: $(awk '{printf "%dd %dh %dm", $1/86400, ($1%86400)/3600, ($1%3600)/60}' /proc/uptime)"
|
||||
fi
|
||||
|
||||
#### Temperature ####
|
||||
if [ $ISTHISVM -ne 1 ]; then
|
||||
if [ -f /sys/class/thermal/thermal_zone0/temp ]; then
|
||||
TEMP_RAW=$(cat /sys/class/thermal/thermal_zone0/temp)
|
||||
#### Load Average ####
|
||||
if [ -r /proc/loadavg ]; then
|
||||
echo "📊 Load avg: $(awk '{print $1, $2, $3}' /proc/loadavg)"
|
||||
fi
|
||||
|
||||
#### Updates (Cross-Distro) ####
|
||||
if [ -f "$CACHE_DIR/updates" ] && find "$CACHE_DIR/updates" -mmin -$MIN_CHECK_UPDATE | grep -q . 2>/dev/null; then
|
||||
UPDATES=$(cat "$CACHE_DIR/updates" 2>/dev/null)
|
||||
else
|
||||
UPDATES=0
|
||||
if command -v apt >/dev/null 2>&1; then
|
||||
UPDATES=$(apt list --upgradable 2>/dev/null | grep -c "upgradable from" 2>/dev/null || true)
|
||||
elif command -v dnf >/dev/null 2>&1; then
|
||||
UPDATES=$(dnf check-update -q 2>/dev/null | grep -E '\.(x86_64|noarch|aarch64|i686)' | wc -l)
|
||||
elif command -v pacman >/dev/null 2>&1; then
|
||||
UPDATES=$(checkupdates 2>/dev/null | wc -l || pacman -Qu 2>/dev/null | wc -l)
|
||||
elif command -v zypper >/dev/null 2>&1; then
|
||||
UPDATES=$(zypper list-updates 2>/dev/null | grep -c '^v ' || true)
|
||||
elif command -v apk >/dev/null 2>&1; then
|
||||
UPDATES=$(apk version -l '<' 2>/dev/null | wc -l)
|
||||
else
|
||||
UPDATES="N/A"
|
||||
fi
|
||||
echo "$UPDATES" > "$CACHE_DIR/updates" 2>/dev/null
|
||||
fi
|
||||
|
||||
## Dynamic Color for Updates ##
|
||||
if [[ "$UPDATES" =~ ^[0-9]+$ ]]; then
|
||||
if [ "$UPDATES" -eq 0 ]; then
|
||||
UPD_COLOR="${GREEN}${UPDATES}${NC}"
|
||||
elif [ "$UPDATES" -le 20 ]; then
|
||||
UPD_COLOR="${YELLOW}${UPDATES}${NC}"
|
||||
else
|
||||
UPD_COLOR="${RED}${UPDATES}${NC}"
|
||||
fi
|
||||
echo -e "📦 Updates: $UPD_COLOR"
|
||||
else
|
||||
echo "📦 Updates: N/A"
|
||||
fi
|
||||
|
||||
#### Temperature ####
|
||||
if [ $ISTHISVM -ne 1 ]; then
|
||||
if [ -f /sys/class/thermal/thermal_zone0/temp ]; then
|
||||
TEMP_RAW=$(cat /sys/class/thermal/thermal_zone0/temp 2>/dev/null)
|
||||
if [ -n "$TEMP_RAW" ]; then
|
||||
TEMP=$((TEMP_RAW/1000))
|
||||
|
||||
if [ "$TEMP" -lt 50 ]; then
|
||||
@@ -176,12 +212,11 @@ function dashboard_fast() {
|
||||
echo -e "🌡️ Temp: $TEMP_COLOR"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
echo -e "${CYAN}========================================${NC}"
|
||||
echo -e "${CYAN}========================================${NC}"
|
||||
}
|
||||
|
||||
|
||||
|
||||
if [[ $- == *i* ]]; then
|
||||
dashboard_fast
|
||||
dashboard_fast
|
||||
fi
|
||||
|
||||
+151
-37
@@ -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 "##################################"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user