From 549aa12b4604f675eba6b02a0f3a607bc69dea22 Mon Sep 17 00:00:00 2001 From: TrudeEH Date: Tue, 5 Aug 2025 19:41:13 +0100 Subject: [PATCH] Add Arch Linux support; Various tweaks --- README.md | 2 +- dconf-settings.ini | 2 +- home/.bashrc | 9 +- home/Templates/markdown.md | 1 + home/Templates/text.txt | 0 images/debian.png | Bin 25057 -> 0 bytes install.sh | 348 +++++++++++++++++-------------------- scripts/battery | 33 ---- scripts/build-new-kernel | 40 ----- scripts/fetch | 36 ++-- scripts/mem | 27 --- scripts/mon | 75 -------- scripts/neticon | 13 -- scripts/p.sh | 215 ----------------------- scripts/temp | 5 - scripts/update | 42 +++-- scripts/volume | 28 --- 17 files changed, 215 insertions(+), 661 deletions(-) create mode 100644 home/Templates/markdown.md create mode 100644 home/Templates/text.txt delete mode 100644 images/debian.png delete mode 100755 scripts/battery delete mode 100755 scripts/build-new-kernel delete mode 100755 scripts/mem delete mode 100755 scripts/mon delete mode 100755 scripts/neticon delete mode 100644 scripts/p.sh delete mode 100755 scripts/temp delete mode 100755 scripts/volume diff --git a/README.md b/README.md index c562540a..744a9cc0 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Trude's Dotfiles

- Logo Circle + Logo Circle

diff --git a/dconf-settings.ini b/dconf-settings.ini index 883dd630..6554e545 100644 --- a/dconf-settings.ini +++ b/dconf-settings.ini @@ -113,7 +113,7 @@ remember-passwords=false [org/gnome/shell/extensions/vitals] fixed-widths=false -hot-sensors=['_memory_usage_', '_processor_usage_', '__temperature_max__'] +hot-sensors=['_processor_usage_', '_gpu#1_usage_', '_memory_usage_', '__temperature_max__'] icon-style=1 menu-centered=false position-in-panel=0 diff --git a/home/.bashrc b/home/.bashrc index 7fdbde18..f7073032 100644 --- a/home/.bashrc +++ b/home/.bashrc @@ -30,6 +30,13 @@ fi set completion-ignore-case On -export OFLAGS="--ozone-platform-hint=auto" +# Enable programmable completion features (loads all available completions) +if ! shopt -oq posix; then + if [ -f /usr/share/bash-completion/bash_completion ]; then + . /usr/share/bash-completion/bash_completion + elif [ -f /etc/bash_completion ]; then + . /etc/bash_completion + fi +fi export PATH=$PATH:$HOME/.local/bin diff --git a/home/Templates/markdown.md b/home/Templates/markdown.md new file mode 100644 index 00000000..1e0ca6a5 --- /dev/null +++ b/home/Templates/markdown.md @@ -0,0 +1 @@ +# diff --git a/home/Templates/text.txt b/home/Templates/text.txt new file mode 100644 index 00000000..e69de29b diff --git a/images/debian.png b/images/debian.png deleted file mode 100644 index 85ba883b158a1a4e3f4db2eeaa2bdbe9e7324e0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25057 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 diff --git a/install.sh b/install.sh index 1e07d19d..f93299c9 100755 --- a/install.sh +++ b/install.sh @@ -8,14 +8,59 @@ CYAN="\e[36m" BOLD="\e[1m" NC="\e[0m" +install_package() { + if command -v pacman >/dev/null 2>&1; then + sudo pacman -Sy $@ + elif command -v apt >/dev/null 2>&1; then + sudo apt install -y $@ + fi +} + +install_gnome_extension() { + uuid="$1" + + if [ -z "$uuid" ]; then + printf "%b\n" "${RED}Usage: install_gnome_extension ${NC}" + return 1 + fi + + if ! gnome-extensions list | grep -qw "$uuid"; then + printf "%b\n" "${YELLOW}[+]${NC} Sent install request for $uuid." + gdbus call --session --dest org.gnome.Shell.Extensions \ + --object-path /org/gnome/Shell/Extensions \ + --method org.gnome.Shell.Extensions.InstallRemoteExtension \ + "$uuid" >/dev/null 2>&1 + return 0 + elif gnome-extensions list --updates | grep -qw "$uuid"; then + printf "%b\n" "${YELLOW}[+]${NC} Sent update request for $uuid." + gdbus call --session --dest org.gnome.Shell.Extensions \ + --object-path /org/gnome/Shell/Extensions \ + --method org.gnome.Shell.Extensions.InstallRemoteExtension \ + "$uuid" >/dev/null 2>&1 + return 0 + else + printf "%b\n" "${GREEN}[✓]${NC} GNOME Extension $uuid is already installed." + return 0 + fi +} + trap 'printf "${RED}install.sh interrupted.${NC}"; exit 1' INT TERM if ! command -v whiptail >/dev/null 2>&1; then - echo "${YELLOW}Installing whiptail...${NC}" - sudo apt install -y whiptail + printf "%b\n" "${YELLOW}[+]${NC} Installing whiptail..." + install_package whiptail fi -testing_branch="trixie" +case "$XDG_CURRENT_DESKTOP" in +*GNOME*) + printf "%b\n" "${GREEN}[✓]${NC} Running on GNOME." + ;; +*) + whiptail --title "Warning" --msgbox \ + "Dconf settings and GNOME extensions can only be installed from within GNOME.\n\nPlease run this script again from within a GNOME session. The script will configure NetworkManager for you if needed." \ + 15 60 + ;; +esac window_height='15' window_width='60' @@ -23,10 +68,12 @@ window_width='60' W_MAIN=$( whiptail --notags --title "Trude's Dotfiles" \ --cancel-button "Exit" \ - --menu "Main Menu" $window_height $window_width 3 \ + --menu "Main Menu" $window_height $window_width 5 \ "install" "Install Dotfiles" \ "reload" "Reload Configuration" \ - "update" "Update Debian" \ + "paru" "Install Paru AUR Helper" \ + "flatpak" "Install Flatpak" \ + "update" "Update Distro" \ 3>&1 1>&2 2>&3 ) @@ -39,215 +86,144 @@ if [ $W_MAIN = "update" ]; then exit 0 fi -if [ $W_MAIN = "install" ]; then - W_DEB_SOURCES=$(whiptail --notags --title "Debian Sources" \ - --cancel-button "Skip" \ - --menu "Choose your Debian source:" $window_height $window_width 2 \ - "stable" "Stable" \ - "testing" "Testing ($testing_branch)" \ - 3>&1 1>&2 2>&3) -fi - -install_gnome_extension() { - uuid="$1" - - if [ -z "$uuid" ]; then - echo "${RED}Usage: install_gnome_extension ${NC}" - return 1 - fi - - if ! gnome-extensions list | grep -qw "$uuid"; then - echo "${GREEN}Sent install request for $uuid.${NC}" - gdbus call --session --dest org.gnome.Shell.Extensions \ - --object-path /org/gnome/Shell/Extensions \ - --method org.gnome.Shell.Extensions.InstallRemoteExtension \ - "$uuid" >/dev/null 2>&1 - return 0 - elif gnome-extensions list --updates | grep -qw "$uuid"; then - echo "${GREEN}Sent update request for $uuid.${NC}" - gdbus call --session --dest org.gnome.Shell.Extensions \ - --object-path /org/gnome/Shell/Extensions \ - --method org.gnome.Shell.Extensions.InstallRemoteExtension \ - "$uuid" >/dev/null 2>&1 - return 0 - else - echo "${GREEN}GNOME Extension $uuid is already installed.${NC}" - return 0 - fi -} - # Clone Dotfiles if not already present cd "$HOME/dotfiles" if [ "$(pwd)" != "$HOME/dotfiles" ]; then - echo "${YELLOW}Cloning dotfiles repository...${NC}" - sudo apt update - sudo apt install -y git + printf "%b\n" "${YELLOW}[+]${NC} Cloning dotfiles repository..." + install_package git if ! git clone https://git.trude.dev/trude/dotfiles --depth 1; then - echo "${RED}Error cloning dotfiles repository. Update skipped...${NC}" + printf "%b\n" "${RED}Error cloning dotfiles repository. Update skipped...${NC}" fi cd dotfiles || exit - echo "${GREEN}dotfiles repository cloned successfully.${NC}" -# else -# echo "${YELLOW}Updating dotfiles repository...${NC}" -# pull_output=$(git pull) -# echo "$pull_output" -# if ! echo "$pull_output" | grep -q "Already up to date."; then -# echo "${YELLOW}Changes detected. Re-running script...${NC}" -# exec "$0" "$@" -# fi + printf "%b\n" "${GREEN}[✓]${NC} Dotfiles repository cloned successfully." +else + printf "%b\n" "${YELLOW}[+]${NC} Updating dotfiles repository..." + pull_output=$(git pull) + echo "$pull_output" + if ! echo "$pull_output" | grep -q "Already up to date."; then + printf "%b\n" "${YELLOW}Changes detected. Please re-run the script. Ignore this warning if you don't have an internet connection.${NC}" + fi fi mkdir -p "$HOME/dotfiles/logs" +if [ $W_MAIN = "flatpak" ]; then + install_package flatpak + sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo +fi + +if [ $W_MAIN = "paru" ]; then + sudo pacman -S --needed base-devel + git clone https://aur.archlinux.org/paru.git --depth=1 + cd paru + makepkg -si + cd .. + rm -rf paru +fi + if [ $W_MAIN = "install" ]; then - echo "${YELLOW}Setting Debian Sources...${NC}" - case $W_DEB_SOURCES in - "stable") - echo "${CYAN}Using Stable sources.${NC}" - sudo cp /etc/apt/sources.list /etc/apt/sources.list.bckp - sudo sh -c 'cat > /etc/apt/sources.list < /etc/apt/sources.list <"$HOME/dotfiles/logs/font_install.log" -fi - -# UFW Firewall -if [ "$reload" = false ]; then - echo "${YELLOW}Setting up UFW...${NC}" - sudo ufw default deny incoming - sudo ufw default allow outgoing - if systemctl is-active --quiet sshd; then - echo "${YELLOW}SSH Server detected; Enabling SSH rule...${NC}" - sudo ufw limit 22/tcp + # Install fonts + printf "%b\n" "${YELLOW}[+]${NC} Installing fonts..." + mkdir -p "$HOME/.local/share/fonts" + cp -rf "$HOME/dotfiles/fonts/"* "$HOME/.local/share/fonts/" + if [ ! -f "$HOME/dotfiles/logs/font_install.log" ]; then + fc-cache -fv "$HOME/.local/share/fonts" >"$HOME/dotfiles/logs/font_install.log" fi - sudo ufw enable - sudo ss -tupln | tee "$HOME/dotfiles/logs/open_ports.log" - sudo ufw status numbered | tee "$HOME/dotfiles/logs/ufw_status.log" -fi -# Trude-only settings -if [ "$USER" = "trude" ]; then - # Git config - git config --global commit.gpgsign true - git config --global tag.gpgSign true - git config --global gpg.format ssh - git config --global user.signingkey ~/.ssh/id_ed25519.pub - git config --global user.name "TrudeEH" - git config --global user.email "ehtrude@gmail.com" + # UFW Firewall + if [ "$reload" = false ]; then + printf "%b\n" "${YELLOW}[+]${NC} Setting up UFW..." + sudo ufw default deny incoming + sudo ufw default allow outgoing + if systemctl is-active --quiet sshd; then + printf "%b\n" "${YELLOW}[+]${NC} SSH Server detected; Enabling SSH rule..." + sudo ufw limit 22/tcp + fi + sudo ufw enable + sudo ss -tupln | tee "$HOME/dotfiles/logs/open_ports.log" + sudo ufw status numbered | tee "$HOME/dotfiles/logs/ufw_status.log" + fi - # Clone password-store - if [ ! -f "$HOME/.ssh/id_ed25519" ] || [ ! -f "$HOME/.ssh/id_ed25519.pub" ]; then - echo "${RED}ED25519 key not found in ${CYAN}$HOME/.ssh/id_ed25519. ${RED}Please add your ED25519 key pair for password-store.${NC}" - elif ! gpg --list-keys "ehtrude@gmail.com" >/dev/null 2>&1; then - echo "${RED}GPG key for ehtrude@gmail.com not found. Please import the key for password-store.${NC}" - else - if [ ! -d "$HOME/.password-store" ]; then - echo "${YELLOW}Cloning password-store...${NC}" - chmod 700 ~/.ssh - chmod 600 ~/.ssh/* - if ! git clone git@git.trude.dev:trude/password-store.git "$HOME/.password-store"; then - echo "${RED}Error cloning password-store.${NC}" - else - echo "${GREEN}Password-store cloned successfully.${NC}" - fi + # Trude-only settings + if [ "$USER" = "trude" ]; then + # Git config + git config --global commit.gpgsign true + git config --global tag.gpgSign true + git config --global gpg.format ssh + git config --global user.signingkey ~/.ssh/id_ed25519.pub + git config --global user.name "TrudeEH" + git config --global user.email "ehtrude@gmail.com" + + # Clone password-store + if [ ! -f "$HOME/.ssh/id_ed25519" ] || [ ! -f "$HOME/.ssh/id_ed25519.pub" ]; then + printf "%b\n" "${RED}ED25519 key not found in ${CYAN}$HOME/.ssh/id_ed25519. ${RED}Please add your ED25519 key pair for password-store.${NC}" + elif ! gpg --list-keys "ehtrude@gmail.com" >/dev/null 2>&1; then + printf "%b\n" "${RED}GPG key for ehtrude@gmail.com not found. Please import the key for password-store.${NC}" else - echo "${CYAN}Password-store already present.${NC}" + if [ ! -d "$HOME/.password-store" ]; then + printf "%b\n" "${YELLOW}[+]${NC} Cloning password-store..." + chmod 700 ~/.ssh + chmod 600 ~/.ssh/* + if ! git clone git@git.trude.dev:trude/password-store.git "$HOME/.password-store"; then + printf "%b\n" "${RED}Error cloning password-store.${NC}" + else + printf "%b\n" "${GREEN}[✓]${NC} Password-store cloned successfully." + fi + else + printf "%b\n" "${GREEN}[✓]${NC} Password-store already present." + fi fi fi -fi -# Set up GNOME Desktop -case "$XDG_CURRENT_DESKTOP" in -*GNOME*) - echo "${YELLOW}Installing GNOME Extensions...${NC}" - install_gnome_extension "caffeine@patapon.info" - install_gnome_extension "Vitals@CoreCoding.com" - install_gnome_extension "appindicatorsupport@rgcjonas.gmail.com" - install_gnome_extension "gsconnect@andyholmes.github.io" + # Set up GNOME Desktop + case "$XDG_CURRENT_DESKTOP" in + *GNOME*) + printf "%b\n" "${YELLOW}[+]${NC} Installing GNOME Extensions..." + install_gnome_extension "caffeine@patapon.info" + install_gnome_extension "Vitals@CoreCoding.com" + install_gnome_extension "appindicatorsupport@rgcjonas.gmail.com" + install_gnome_extension "gsconnect@andyholmes.github.io" - echo "${YELLOW}Loading Dconf settings...${NC}" - if ! dconf load / <"$HOME/dotfiles/dconf-settings.ini"; then - echo "${RED}Error loading Dconf settings.${NC}" - fi - ;; -*) - echo - echo - echo "${RED}!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!${NC}" - echo - echo "${CYAN}Dconf settings and GNOME extensions can only be installed after restarting." - echo "${CYAN}Please run the script again from within GNOME (with the reload option).${NC}" - echo - echo "${RED}!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!${NC}" - echo - ;; -esac + printf "%b\n" "${YELLOW}[+]${NC} Loading Dconf settings..." + if ! dconf load / <"$HOME/dotfiles/dconf-settings.ini"; then + printf "%b\n" "${RED}Error loading Dconf settings.${NC}" + fi + ;; + *) + printf "\n\n" + printf "%b\n" "${RED}!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!${NC}" + printf "\n" + printf "%b\n" "${CYAN}Dconf settings and GNOME extensions can only be installed after restarting." + printf "%b\n" "${CYAN}Please run the script again from within GNOME (with the reload option).${NC}" + printf "\n" + printf "%b\n" "${RED}!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!${NC}" + printf "\n" + ;; + esac +fi \ No newline at end of file diff --git a/scripts/battery b/scripts/battery deleted file mode 100755 index 7e65d83a..00000000 --- a/scripts/battery +++ /dev/null @@ -1,33 +0,0 @@ -#! /bin/sh - -RED="\e[31m" -GREEN="\e[32m" -YELLOW="\e[33m" -MAGENTA="\e[35m" -CYAN="\e[36m" -BOLD="\e[1m" -NC="\e[0m" - -BATTERY_INFO=$(upower -i "$(upower -e | grep 'BAT')") -BATTERY_PERCENT=$(echo "$BATTERY_INFO" | grep -oP 'percentage:\s+\K\d+') -BATTERY_STATUS=$(echo "$BATTERY_INFO" | grep -oP 'state:\s+\K\w+') -CHARGE_CYCLES=$(echo "$BATTERY_INFO" | grep -oP 'cycle-count:\s+\K\d+') -WARNING_LEVEL=$(echo "$BATTERY_INFO" | grep -oP 'warning-level:\s+\K\w+') - -if [ "$BATTERY_STATUS" = "charging" ] || [ "$BATTERY_STATUS" = "pending" ]; then - COLOR=$CYAN -elif [ "$BATTERY_PERCENT" -ge 80 ]; then - COLOR=$GREEN -elif [ "$BATTERY_PERCENT" -ge 30 ]; then - COLOR=$YELLOW -else - COLOR=$RED -fi - -echo "${BOLD}Battery: ${COLOR}$BATTERY_PERCENT% ($BATTERY_STATUS)${NC}" -if [ -n "$CHARGE_CYCLES" ]; then - echo "${BOLD}Charge Cycles: ${MAGENTA}$CHARGE_CYCLES${NC}" -fi -if [ "$WARNING_LEVEL" != "none" ]; then - echo "${BOLD}Warning Level: ${RED}$WARNING_LEVEL${NC}" -fi diff --git a/scripts/build-new-kernel b/scripts/build-new-kernel deleted file mode 100755 index 3fbf23db..00000000 --- a/scripts/build-new-kernel +++ /dev/null @@ -1,40 +0,0 @@ -#! /bin/sh - -YELLOW="\e[33m" -NC="\e[0m" - -echo "\n${YELLOW}Downloading APT dependencies...${NC}\n" -sudo apt install build-essential git -y -sudo apt build-dep linux -y - -echo "\n${YELLOW}Downloading kernel source...${NC}\n" -mkdir linux-parent && cd linux-parent || exit 1 -git clone --depth 1 https://github.com/torvalds/linux -cd linux || exit 1 - -cp /boot/config-"$(uname -r)" .config # Copy current kernel config -make nconfig # Edit the current kernel configuration -diff /boot/config-"$(uname -r)" .config # Check your changes - -# Do not include debugging symbols. Alternatively, use `strip` to remove them. (these configs are working as of 6.14) -scripts/config --undefine GDB_SCRIPTS -scripts/config --undefine DEBUG_INFO -scripts/config --undefine DEBUG_INFO_SPLIT -scripts/config --undefine DEBUG_INFO_REDUCED -scripts/config --undefine DEBUG_INFO_COMPRESSED -scripts/config --set-val DEBUG_INFO_NONE y -scripts/config --set-val DEBUG_INFO_DWARF5 n -scripts/config --disable DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT - -echo "\n${YELLOW}Compiling the kernel...${NC}\n" -make -j"$(nproc)" deb-pkg LOCALVERSION=-custom - -echo "\n${YELLOW}Installing the generated dpkg packages...${NC}\n" -sudo dpkg -i ../linux-headers*-custom*.deb -sudo dpkg -i ../linux-image*-custom*.deb - -echo "\n${YELLOW}Cleaning up...${NC}\n" -cd ../.. -rm -rf linux-parent - -dpkg --list | grep linux-image diff --git a/scripts/fetch b/scripts/fetch index 6b2f9b86..94e98d0d 100755 --- a/scripts/fetch +++ b/scripts/fetch @@ -10,46 +10,46 @@ BOLD="\e[1m" NC="\e[0m" # User and host info -echo "${BOLD}${MAGENTA}${USER}@$(hostname)${NC}" -echo "---------" +printf "%b\n" "${BOLD}${MAGENTA}${USER}@$(hostname)${NC}" +printf "%b\n" "---------" # OS and architecture OS=$(grep '^PRETTY_NAME=' /etc/os-release | cut -d= -f2 | tr -d '"') ARCH=$(uname -m) -echo "${CYAN}OS:${NC} $OS $ARCH" +printf "%b\n" "${CYAN}OS:${NC} $OS $ARCH" # Host Model HOST_MODEL=$(cat /sys/class/dmi/id/product_name 2>/dev/null) HOST_VERSION=$(cat /sys/class/dmi/id/product_version 2>/dev/null) -echo "${CYAN}Host:${NC} ${HOST_VERSION} (${HOST_MODEL})" +printf "%b\n" "${CYAN}Host:${NC} ${HOST_VERSION} (${HOST_MODEL})" # Kernel version -echo "${CYAN}Kernel:${NC} Linux $(uname -r)" +printf "%b\n" "${CYAN}Kernel:${NC} Linux $(uname -r)" # Uptime UPTIME=$(uptime -p | sed 's/up //') -echo "${CYAN}Uptime:${NC} $UPTIME" +printf "%b\n" "${CYAN}Uptime:${NC} $UPTIME" # Package counts: dpkg and flatpak PKG_COUNT=$(dpkg-query -f '${binary:Package}\n' -W 2>/dev/null | wc -l) FLAT_COUNT=$(flatpak list 2>/dev/null | wc -l) -echo "${CYAN}Packages:${NC} ${PKG_COUNT} (dpkg), ${FLAT_COUNT} (flatpak)" +printf "%b\n" "${CYAN}Packages:${NC} ${PKG_COUNT} (dpkg), ${FLAT_COUNT} (flatpak)" # Shell and version BASH_VER=$(bash --version | head -n1 | awk '{print $4}' | cut -d'(' -f1) -echo "${CYAN}Shell:${NC} bash ${BASH_VER}" +printf "%b\n" "${CYAN}Shell:${NC} bash ${BASH_VER}" # Desktop Environment DE=${XDG_CURRENT_DESKTOP:-"Unknown"} -echo "${CYAN}DE:${NC} $DE" +printf "%b\n" "${CYAN}DE:${NC} $DE" # CPU model from /proc/cpuinfo CPU=$(awk -F: '/model name/ {print $2; exit}' /proc/cpuinfo | sed 's/^[ \t]*//') -echo "${CYAN}CPU:${NC} $CPU" +printf "%b\n" "${CYAN}CPU:${NC} $CPU" # GPU info GPU=$(lspci | grep -i 'vga\|3d' | head -n1 | cut -d: -f3 | sed 's/^[ \t]*//') -echo "${CYAN}GPU:${NC} $GPU" +printf "%b\n" "${CYAN}GPU:${NC} $GPU" # Memory usage mem_info=$(free | awk '/Mem:/ {print $2, $3}') @@ -68,7 +68,7 @@ fi mem_total=$(free -h | awk '/Mem:/ {print $2}') mem_used=$(free -h | awk '/Mem:/ {print $3}') -echo "${CYAN}Memory:${NC} ${mem_used} / ${mem_total} (${percent_color}${percent}%${NC})" +printf "%b\n" "${CYAN}Memory:${NC} ${mem_used} / ${mem_total} (${percent_color}${percent}%${NC})" # Swap usage swap_used=$(free -h | awk '/Swap/ {print $3}') @@ -83,7 +83,7 @@ else swap_perc_color=$RED fi -echo "${CYAN}Swap:${NC} ${swap_used} / ${swap_total} (${swap_perc_color}${swap_perc}%${NC})" +printf "%b\n" "${CYAN}Swap:${NC} ${swap_used} / ${swap_total} (${swap_perc_color}${swap_perc}%${NC})" # Root disk usage root_line=$(df -h / | awk 'NR==2') @@ -97,7 +97,7 @@ elif [ "$root_percent" -le 80 ]; then else root_color=$RED fi -echo "${CYAN}Disk (/):${NC} ${root_used} / ${root_total} (${root_color}${root_percent}%${NC})" +printf "%b\n" "${CYAN}Disk (/):${NC} ${root_used} / ${root_total} (${root_color}${root_percent}%${NC})" # /home disk usage home_line=$(df -h /home 2>/dev/null | awk 'NR==2') @@ -112,7 +112,7 @@ if [ -n "$home_line" ]; then else home_color=$RED fi - echo "${CYAN}Disk (/home):${NC} ${home_used} / ${home_total} (${home_color}${home_percent}%${NC})" + printf "%b\n" "${CYAN}Disk (/home):${NC} ${home_used} / ${home_total} (${home_color}${home_percent}%${NC})" fi # Determine the primary network interface used for internet access @@ -120,11 +120,11 @@ PRIMARY_IFACE=$(ip route get 8.8.8.8 2>/dev/null | awk '{print $5; exit}') if [ -n "$PRIMARY_IFACE" ]; then LOCAL_IP=$(ip addr show "$PRIMARY_IFACE" | awk '/inet / {print $2}' | cut -d'/' -f1) - echo "${CYAN}Local IP ($PRIMARY_IFACE):${NC} ${LOCAL_IP}" + printf "%b\n" "${CYAN}Local IP ($PRIMARY_IFACE):${NC} ${LOCAL_IP}" else - echo "${RED}Local IP:${NC} Unable to determine primary network interface." + printf "%b\n" "${RED}Local IP:${NC} Unable to determine primary network interface." fi # Current locale setting LOCALE=$(locale | awk -F= '/^LANG=/{print $2; exit}') -echo "${CYAN}Locale:${NC} $LOCALE" +printf "%b\n" "${CYAN}Locale:${NC} $LOCALE" diff --git a/scripts/mem b/scripts/mem deleted file mode 100755 index 36edb883..00000000 --- a/scripts/mem +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/sh - -RED="\e[31m" -GREEN="\e[32m" -YELLOW="\e[33m" -NC="\e[0m" - -mem_info=$(free | awk '/Mem:/ {print $2, $3}') -set -- $mem_info -total=$1 -used=$2 -percent=$(awk "BEGIN {printf \"%.0f\", ($used/$total)*100}") - -mem_total=$(free -h | awk '/Mem:/ {print $2}') -mem_used=$(free -h | awk '/Mem:/ {print $3}') -if [ -t 1 ]; then - if [ "$percent" -le 60 ]; then - percent_color=$GREEN - elif [ "$percent" -le 80 ]; then - percent_color=$YELLOW - else - percent_color=$RED - fi - echo " ${mem_used} / ${mem_total} (${percent_color}${percent}%${NC})" -else - echo "${mem_used} ${mem_total} ${percent}" -fi diff --git a/scripts/mon b/scripts/mon deleted file mode 100755 index 5e0dee83..00000000 --- a/scripts/mon +++ /dev/null @@ -1,75 +0,0 @@ -#! /bin/sh - -RED="\e[31m" -GREEN="\e[32m" -YELLOW="\e[33m" -CYAN="\e[36m" -NC="\e[0m" - -trap "echo '${CYAN}System Monitor interrupted.${NC}'; exit 1" INT TERM - -echo -echo -echo - -# Cache in tmpfs to improve speed and reduce SSD load -cache=/tmp/cpu-script-cache -rm /tmp/cpu-script-cache 2>/dev/null -while true; do - # CPU - cpu_stats=$(awk '/^cpu / {print $2 + $3 + $4 + $5, $5}' /proc/stat) - if [ ! -f "$cache" ]; then - echo "$cpu_stats" >"$cache" - cpu_color=$CYAN - usage="--" - else - prev_stats=$(cat "$cache") - total=$(echo "$prev_stats" | awk '{print $1}') - prev_idle=$(echo "$prev_stats" | awk '{print $2}') - curr_total=$(echo "$cpu_stats" | awk '{print $1}') - curr_idle=$(echo "$cpu_stats" | awk '{print $2}') - total_diff=$((curr_total - total)) - idle_diff=$((curr_idle - prev_idle)) - - if [ "$total_diff" -eq 0 ]; then - usage=0 # Avoid division by zero - else - usage=$((100 * (total_diff - idle_diff) / total_diff)) - fi - - if [ "$usage" -lt 50 ]; then - cpu_color=$GREEN - elif [ "$usage" -lt 70 ]; then - cpu_color=$YELLOW - else - cpu_color=$RED - fi - fi - - # MEMORY - mem_info=$(free | awk '/Mem:/ {print $2, $3}') - set -- $mem_info - total=$1 - used=$2 - percent=$(awk "BEGIN {printf \"%.0f\", ($used/$total)*100}") - - mem_total=$(free -h | awk '/Mem:/ {print $2}') - mem_used=$(free -h | awk '/Mem:/ {print $3}') - - if [ "$percent" -le 60 ]; then - mem_color=$GREEN - elif [ "$percent" -le 80 ]; then - mem_color=$YELLOW - else - mem_color=$RED - fi - - printf "\033[4A" - echo "=============================" - echo " ${cpu_color}${usage}%${NC} " - echo " ${mem_used} / ${mem_total} (${mem_color}${percent}%${NC}) " - echo "=============================" - - echo "$cpu_stats" >"$cache" - sleep 2 -done diff --git a/scripts/neticon b/scripts/neticon deleted file mode 100755 index a116c6f5..00000000 --- a/scripts/neticon +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh - -# Wifi -if [ "$(cat /sys/class/net/w*/operstate 2>/dev/null)" = 'up' ]; then - wifiicon="$(awk '/^[[:space:]]*w/ { gsub(/[[:space:]]+/, " "); print " ", int($3 * 100 / 70) "% " }' /proc/net/wireless)" -elif [ "$(cat /sys/class/net/w*/operstate 2>/dev/null)" = 'down' ]; then - wifiicon=" " -fi - -# Ethernet -[ "$(cat /sys/class/net/e*/operstate 2>/dev/null)" = 'up' ] && ethericon="󰛳 " || ethericon="󰅛 " - -printf "%s%s\n" "$wifiicon" "$ethericon" diff --git a/scripts/p.sh b/scripts/p.sh deleted file mode 100644 index bf204d90..00000000 --- a/scripts/p.sh +++ /dev/null @@ -1,215 +0,0 @@ -#! /bin/bash -# Cross-distro package manager UI - -RED="\e[31m" -GREEN="\e[32m" -YELLOW="\e[33m" -BLUE="\e[34m" -MAGENTA="\e[35m" -CYAN="\e[36m" -GRAY="\e[90m" - -BOLD="\e[1m" -FAINT="\e[2m" -ITALIC="\e[3m" -UNDERLINE="\e[4m" - -NC="\e[0m" - -pcheck() { - local pms=() - if command -v nix >/dev/null 2>&1; then - pms+=("nix") - fi - if command -v brew >/dev/null 2>&1; then - pms+=("brew") - fi - if command -v apt >/dev/null 2>&1; then - pms+=("apt") - elif command -v pacman >/dev/null 2>&1; then - if command -v paru >/dev/null 2>&1; then - pms+=("paru") - fi - pms+=("pacman") - elif command -v dnf >/dev/null 2>&1; then - pms+=("dnf") - fi - if command -v flatpak >/dev/null 2>&1; then - pms+=("flatpak") - fi - echo "${pms[@]}" -} - -p() ( - trap "echo -e '\n${RED}p interrupted.${NC}'; exit 1" SIGINT SIGTERM - packageManagers=($(pcheck)) - - updateP() { - if [[ ${packageManagers[@]} =~ "flatpak" ]]; then - printf "%b\n" "${YELLOW}Updating flatpak...${NC}" - flatpak update - flatpak uninstall --unused --delete-data - fi - if [[ ${packageManagers[@]} =~ "nix" ]]; then - printf "%b\n" "${YELLOW}Updating nix...${NC}" - nix-channel --update - nix-collect-garbage --delete-older-than 7d &>/dev/null - if command -v nixos-rebuild >/dev/null 2>&1; then - sudo nix-channel --update - printf "${YELLOW}Rebuilding NixOS...${NC}\n" - sudo nixos-rebuild switch &>/tmp/nixos_rebuild.log || ( - cat /tmp/nixos_rebuild.log | grep --color error && false - ) - fi - fi - if [[ ${packageManagers[@]} =~ "brew" ]]; then - printf "%b\n" "${YELLOW}Updating brew...${NC}" - brew update - brew doctor - brew upgrade - fi - if [[ ${packageManagers[@]} =~ "apt" ]]; then - printf "%b\n" "${YELLOW}Updating apt...${NC}" - sudo apt update - sudo apt upgrade - sudo apt dist-upgrade - sudo apt autoremove - sudo apt autoclean - elif [[ ${packageManagers[@]} =~ "pacman" ]]; then - printf "%b\n" "${YELLOW}Updating pacman...${NC}" - sudo sed -i 's/^#ParallelDownloads/ParallelDownloads/' /etc/pacman.conf - if [[ ${packageManagers[@]} =~ "paru" ]]; then - paru -Syu - else - sudo pacman -Syu - fi - sudo pacman -Rsn $(pacman -Qdtq) - if [ ! "$(command -v reflector)" ]; then - printf "%b\n" "${YELLOW}Selecting fastest pacman mirrors...${NC}" - sudo pacman -Sy --noconfirm reflector rsync curl - iso=$(curl -4 ifconfig.co/country-iso) - extra="FR" - sudo reflector -a 48 -c $iso -c $extra -f 5 -l 30 --verbose --sort rate --save /etc/pacman.d/mirrorlist - fi - if [ ! "$(command -v paccache)" ]; then - sudo pacman -Sy --noconfirm pacman-contrib - fi - paccache -rk1 - elif [[ ${packageManagers[@]} =~ "dnf" ]]; then - printf "%b\n" "${YELLOW}Updating dnf...${NC}" - sudo dnf upgrade --refresh - sudo dnf autoremove - fi - } - - installP() { - for pm in "${packageManagers[@]}"; do - printf "%b\n" "${YELLOW}Attempting ${pm} install...${NC}" - case "$pm" in - flatpak) - flatpak install "$1" - ;; - paru) - paru -Sy "$1" - ;; - apt) - sudo apt install "$1" - ;; - pacman) - sudo pacman -Sy "$1" - ;; - dnf) - sudo dnf install "$1" - ;; - brew) - brew install "$1" - ;; - *) - continue - ;; - esac - if [[ $? == 0 ]]; then - return 0 - fi - done - printf "%b\n" "${RED}ERROR: $1 not found.${NC}" - return 1 - } - - removeP() { - for pm in "${packageManagers[@]}"; do - printf "%b\n" "${YELLOW}Attempting ${pm} uninstall...${NC}" - case "$pm" in - flatpak) - flatpak uninstall "$1" - ;; - brew) - brew uninstall "$1" - ;; - apt) - sudo apt remove "$1" - ;; - pacman) - sudo pacman -Rs "$1" - ;; - paru) - paru -Rns "$1" - ;; - dnf) - sudo dnf remove "$1" - ;; - *) - continue - ;; - esac - if [[ $? == 0 ]]; then - return 0 - fi - done - printf "%b\n" "${RED}ERROR: $1 not found.${NC}" - return 1 - } - - shellP() { - if [[ ${packageManagers[@]} =~ "nix" ]]; then - printf "%b\n" "${YELLOW}Attempting to create nix shell...${NC}" - nix-shell -p $1 - if [[ $? == 0 ]]; then - return 0 - fi - fi - } - - # If no parameter or u - printf "%b\n" "${CYAN}Detected package managers: ${MAGENTA}${packageManagers[*]}${NC}" - if [ -z $1 ] || [ $1 = "u" ]; then - updateP - return 0 - elif [ $1 = "i" ]; then # If first parameter is i (install) - shift - for package in "$@"; do - installP $package - done - elif [ $1 = "r" ]; then # If first parameter is r (remove) - shift - for package in "$@"; do - removeP $package - done - elif [ $1 = "c" ]; then # If first parameter is c (check) - shift - for package in "$@"; do - checkP $package - done - elif [ $1 = "s" ]; then # If first parameter is s (shell) - shift - shellP $@ - else - printf "%b\n" "${YELLOW}${UNDERLINE}[i] Usage:${NC}" - printf "%b\n" "p (u) ${FAINT}- update os${NC}" - printf "%b\n" "p i package ${FAINT}- install package${NC}" - printf "%b\n" "p r package ${FAINT}- remove package${NC}" - printf "%b\n" "p s packages ${FAINT}- launch a nix shell with the specified packages${NC}" - printf "%b\n" "${FAINT}Supported package managers: flatpak, nix, brew, apt, paru, pacman, dnf${NC}" - return 1 - fi -) diff --git a/scripts/temp b/scripts/temp deleted file mode 100755 index 2d64173e..00000000 --- a/scripts/temp +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -paste <(cat /sys/class/thermal/thermal_zone*/type) <(cat /sys/class/thermal/thermal_zone*/temp) | - column -s "$(printf '\t')" -t | - sed 's/\(.\)..$/.\1°C/' diff --git a/scripts/update b/scripts/update index b11a3f9a..0bb49480 100755 --- a/scripts/update +++ b/scripts/update @@ -1,32 +1,38 @@ #! /bin/sh YELLOW="\e[33m" -GRAY="\e[90m" NC="\e[0m" -printf "%b\n" "${YELLOW}[+]${NC} Updating repos..." -printf "%b" "${GRAY}" -sudo apt-get update -printf "%b" "${NC}" +if command -v paru >/dev/null 2>&1; then + printf "%b\n" "${YELLOW}[+]${NC} Updating Arch using paru..." + paru + printf "%b\n" "${YELLOW}[+]${NC} Removing orphaned dependencies..." + sudo pacman -Rsn $(pacman -Qdtq) +elif command -v pacman >/dev/null 2>&1; then + printf "%b\n" "${YELLOW}[+]${NC} Updating Arch..." + sudo pacman -Syu + printf "%b\n" "${YELLOW}[+]${NC} Removing orphaned dependencies..." + sudo pacman -Rsn $(pacman -Qdtq) +elif command -v apt >/dev/null 2>&1; then + printf "%b\n" "${YELLOW}[+]${NC} Updating repos..." + sudo apt-get update + printf "%b" "${NC}" -printf "%b\n" "${YELLOW}[+]${NC} Upgrading packages..." -printf "%b" "${GRAY}" -sudo apt-get full-upgrade -printf "%b" "${NC}" + printf "%b\n" "${YELLOW}[+]${NC} Upgrading packages..." + sudo apt-get full-upgrade + printf "%b" "${NC}" -printf "%b\n" "${YELLOW}[+]${NC} Removing orphaned dependencies..." -printf "%b" "${GRAY}" -sudo apt-get autoremove -printf "%b" "${NC}" + printf "%b\n" "${YELLOW}[+]${NC} Removing orphaned dependencies..." + sudo apt-get autoremove + printf "%b" "${NC}" -printf "%b\n" "${YELLOW}[+]${NC} Cleaning up..." -printf "%b" "${GRAY}" -sudo apt-get autoclean -printf "%b" "${NC}" + printf "%b\n" "${YELLOW}[+]${NC} Cleaning up..." + sudo apt-get autoclean + printf "%b" "${NC}" +fi if command -v flatpak >/dev/null 2>&1; then printf "%b\n" "${YELLOW}[+]${NC} Updating flatpak packages..." - printf "%b" "${GRAY}" flatpak update flatpak uninstall --unused --delete-data printf "%b" "${NC}" diff --git a/scripts/volume b/scripts/volume deleted file mode 100755 index e314f5cf..00000000 --- a/scripts/volume +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/sh - -# Prints the current volume or  if muted. - -vol="$(wpctl get-volume @DEFAULT_AUDIO_SINK@)" - -# If muted, print  and exit. -[ "$vol" != "${vol%\[MUTED\]}" ] && echo " " && exit - -vol="${vol#Volume: }" - -split() { - # For ommiting the . without calling and external program. - IFS=$2 - set -- $1 - printf '%s' "$@" -} - -vol="$(printf "%.0f" "$(split "$vol" ".")")" - -case $1 in -$((vol >= 70))) icon=" " ;; -$((vol >= 30))) icon=" " ;; -$((vol >= 1))) icon=" " ;; -*) echo " " && exit ;; -esac - -echo "$icon$vol%"