#!/bin/bash # mb-status 󰳈 󰻌 󰂪 󰮯 : updates, disk space, dir sizes # TODO: additional configurable dirs to monitor # TODO: own commands below updates # TODO: own commands at bottom CFGDIR="$HOME/.config/mabox" UPDATES_LIST="/tmp/updates/updates_list" AUR_UPDATES_LIST="/tmp/updates/aur_updates_list" mkdir -p /tmp/updates if [[ ! -f "$UPDATES_LIST" ]];then touch "$UPDATES_LIST" chmod 666 "${UPDATES_LIST}" fi if [[ ! -f "$AUR_UPDATES_LIST" ]]; then touch "$AUR_UPDATES_LIST" chmod 666 "$AUR_UPDATES_LIST" fi # all config values stored here!!! . $HOME/.config/mabox/mabox.conf if [ -z ${disk_limit+x} ]; then mb-setvar disk_limit=90 mb-setvar big_pkgs=0 mb-setvar ok_icon=󰞑 mb-setvar ok_fgcolor='#008000' mb-setvar warn_fgcolor='#FFFFFF' mb-setvar warn_bgcolor='#ff5722' mb-setvar dir_size_monitor=y . $HOME/.config/mabox/mabox.conf fi disk_limit=${disk_limit:-70} big_pkgs=${big_pkgs:-20} OK_ICON=${ok_icon:-"󰕥"} OK_FGCOLOR=${ok_fgcolor:-"#008000"} WARN_FGCOLOR=${warn_fgcolor:-"#FFFFFF"} WARN_BGCOLOR=${warn_bgcolor:-"#bd1e24"} # install date INST=$(stat -c %W /) INSTDATE=$(stat -c %w /|awk '{print $1}') TODAY=$(date +%s) DIFF=$(( (TODAY - INST) / 86400 )) if [[ "$DIFF" > "1" ]];then DAGO="(${DIFF} ${DAYS_AGO})" else DAGO="" fi REPO=$(wc -l $UPDATES_LIST | awk '{print $1}') AUR=$(wc -l $AUR_UPDATES_LIST | awk '{print $1}') updates=$((REPO + AUR)) left(){ menu ipc } ## MENU menu(){ case $LANG in pl*) _KERNEL="jądro" _PKGS="pakiety" _BIGGEST_PKGS="największe pakiety" _CLICK_PKG_INFO="kliknij nazwę po info" _PKGS_STATS="Statystyki pakietów" _QDIRPKG="QDirStat (GUI)" _INSTALLED="zainstalowany" _DAYS_AGO="dni" _YESTERDAY="wczoraj" _TODAY="dzisiaj" _UP_TO_DATE="System jest aktualny" _CHECK_NOW="Sprawdź aktualizacje teraz!" _PENDING="Dostępne aktualizacje" _GO_TO_FORUM="Idź na forum" _UPDATE_YAY="Aktualizuj za pomocą yay" _NO_AUR="(bez AUR)" _UPDATE_PACMAN="Aktualizuj za pomocą pacman" _UPDATE_PAMAC="Aktualizuj Pamac (gui)" _RENEW_KEYS="Odśwież klucze (PGP)" _RANK_MIRROR="Ranking mirrorów" _MIRROR_RANKING="Ranking mirrorów" _DISCS="Dyski" _DIR_SIZE_MONITOR="Monitor wielkości katalogów" _LOGS="Logi /var/log/journal" _VACUUM_LOGS="Czyść Logi" _VACUUM_1DAY="Zachowaj z 1 dnia" _VACUUM_7DAYS="Zachowaj z 7 dni" _VACUUM_200M="Zachowaj 200M" _VACUUM_500M="Zachowaj 500M" _PACMAN_CACHE="Cache Pacmana" _EMPTY_PACMAN_CACHE="Wyczyść cache pacmana" _TRASH="Śmietnik" _OPEN="Otwórz" _EMPTY="Opróżnij" _QDIRSTAT="QDirStat (statystyki katalogów)" _SETTINGS="Ustawienia" _SHOW_BIGGEST="Pokaż listę największych pakietów" _HOW_MANY="Ile pakietów pokazać?" _DISABLED="wyłączone" _DU_ALERT_LEVEL="Poziom alertu zajętości dysków" _WARN="UWAGA" _ICON_OK="OK ikona i kolor" _ICON="Ikona" _COLOR="Kolor" _ICON_COLORS="Kolory i Ikona" ;; *) _KERNEL="kernel" _PKGS="pkgs" _BIGGEST_PKGS="biggest packages" _CLICK_PKG_INFO="click pkgname for info" _PKGS_STATS="Package statistics" _QDIRPKG="QDirStat (GUI)" _INSTALLED="installed" _DAYS_AGO="days" _YESTERDAY="yesterday" _TODAY="today" _UP_TO_DATE="System is up to date!" _CHECK_NOW="Check for updates now" _PENDING="Pending updates" _GO_TO_FORUM="Update announcement" _UPDATE_YAY="Update with yay" _NO_AUR="(no AUR)" _UPDATE_PACMAN="Update with pacman" _UPDATE_PAMAC="Update with Pamac (gui)" _RENEW_KEYS="Renew PGP keys" _RANK_MIRROR="Rank mirrors" _MIRROR_RANKING="Mirror ranking" _DISCS="Discs" _DIR_SIZE_MONITOR="Directory size monitor" _LOGS="Logs /var/log/journal" _VACUUM_LOGS="Vacuum Logs" _VACUUM_1DAY="Keep 1 day" _VACUUM_7DAYS="Keep 7 days" _VACUUM_200M="Keep 200M" _VACUUM_500M="Keep 500M" _PACMAN_CACHE="Pacman cache" _EMPTY_PACMAN_CACHE="Clean pacman cache" _TRASH="Trash Can" _OPEN="Open" _EMPTY="Empty" _QDIRSTAT="QDirStat (directory statistics)" _SETTINGS="Settings" _SHOW_BIGGEST="Show biggest pkgs list" _HOW_MANY="How many?" _DISABLED="disabled" _DU_ALERT_LEVEL="Disk usage alert level" _WARN="WARNING" _ICON_OK="OK icon and color" _ICON="Icon" _COLOR="Color" _ICON_COLORS="Colors and Icon" ;; esac tint2-send refresh-execp mb-status [[ "${1}" == "settings" ]] && option="--checkout=settings" || option="" PKGS=$(pacman -Qq 2>/dev/null | wc -l) # kernel version KERN="${KERN:-$(uname -sr | awk '{print $2}')}" KERN="${KERN/-*/}" #KERN="${KERN/linux/}" #KERN="${KERN,,}" out+=("^sep(Mabox Linux $(lsb_release -rs) $(lsb_release -cs))") out+=(" $_KERNEL: ${KERN},manjaro-settings-manager -m msm_kernel") ## Biggest PKGS if hash expac 2>/dev/null && [[ "${big_pkgs}" -gt 0 ]];then out+=(" $_PKGS: $PKGS,^checkout(pkgs)") out2+=("^tag(pkgs)") out2+=("^sep(${big_pkgs} $_BIGGEST_PKGS)") out2+=("^sep($_CLICK_PKG_INFO)") count=0 while IFS=' ' read -r pkgname size rest do ((count++)) out2+=("$(printf '%2s.' $count) $pkgname $size M,mb-cli pkginfo $pkgname") done< <(expac -H M '%-20n %10m' | sort -rhk 2 | head -n "${big_pkgs}") out2+=("^sep($_PKGS_STATS)") out2+=(" yay -Ps,mb-cli stats") if hash qdirstat 2>/dev/null;then out2+=("󰀻 $_QDIRPKG,qdirstat pkg:/") fi else out+=(" $_PKGS: $PKGS,mb-cli stats") fi if [[ "$DIFF" -gt "1" ]];then DAGO="$DIFF ${_DAYS_AGO}" elif [[ "$DIFF" = "1" ]];then DAGO="$_YESTERDAY" else DAGO="$_TODAY" fi if hash calamares 2>/dev/null ;then : else out+=(" $_INSTALLED: $INSTDATE $DAGO,mcc") fi if [[ "${updates}" == 0 ]];then out+=("^sep( ${OK_ICON} $_UP_TO_DATE)") out+=("󰦛 $_CHECK_NOW,checkupdates.sh -p") out+=("^sep()") out+=("$_RANK_MIRROR,^checkout(mirrors)") out2+=("^tag(mirrors)") out2+=("^sep($_MIRROR_RANKING)") out2+=("Fasttrack pacman-mirrors -f5,mb-cli mirrors") out2+=("All pacman-mirrors -i -c all,mb-cli mirrors_all") out2+=("Geoip pacman-mirrors -i --geoip,mb-cli mirrors_geo") fi if [[ "${updates}" != 0 ]];then out+=("^sep( 󰮯 $_PENDING: ${updates} )") out+=("^sep( repo: ${REPO} AUR: ${AUR} )") [[ "${updates}" -gt 10 ]] && out+=("$_GO_TO_FORUM: Mabox forum, xdg-open https://forum.maboxlinux.org/c/news-development/updates/25" "$_GO_TO_FORUM: Manjaro forum,xdg-open https://forum.manjaro.org/c/announcements/stable-updates/" "^sep()") out+=("$_UPDATE_YAY $_NO_AUR,mb-cli update-noaur") out+=("$_UPDATE_YAY,mb-cli update") out+=("$_UPDATE_PACMAN,mb-cli pacupdate") out+=("$_RENEW_KEYS,^term(sudo pacman -Sy archlinux-keyring manjaro-keyring mabox-keyring;read -p "${FINISHED}"") #out+=("^sep()") #out+=("$_UPDATE_PAMAC,pamac-manager --updates") out+=("^sep($_MIRROR_RANKING)") out+=("Fasttrack pacman-mirrors -f5,mb-cli mirrors") out+=("All pacman-mirrors -i -c all,mb-cli mirrors_all") out+=("Geoip pacman-mirrors -i --geoip,mb-cli mirrors_geo") fi ## DISCS if hash qdirstat 2>/dev/null;then qdir=" -q" else qdir="" fi if [[ "${disk_limit}" -gt "0" ]];then out+=("^sep($_DISCS)") while read DEVICE SIZE USED FREE PERCENT MOUNT do [[ "${#MOUNT}" -gt "10" ]] && MOUNTLBL=${MOUNT##*/} || MOUNTLBL=${MOUNT} [[ "${#MOUNTLBL}" -gt "10" ]] && MOUNTLBL=${MOUNTLBL:0:12} [[ "${MOUNT}" = *"media"* ]] && ICON="󱊟" || ICON="󰋊" [[ "${PERCENT::-1}" -ge "${disk_limit}" ]] && PERCENT=" ${PERCENT} " || PERCENT=" ${PERCENT} " out+=("$ICON $MOUNTLBL $DEVICE $PERCENT,^pipe(jgbrowser ${MOUNT}${qdir})") done < <(df -h | grep '^/dev' | grep -v 'boot' | grep -v 'loop' | grep -v '/run/media') fi ## DIR SIZE MONITOR if [[ "${dir_size_monitor}" == "y" ]];then out+=("^sep($_DIR_SIZE_MONITOR)") logsize=$(du -sh /var/log/journal|awk '{print $1}') paccachesize=$(du -sh /var/cache/pacman/pkg|awk '{print $1}') trashsize=$(du -sh ~/.local/share/Trash|awk '{print $1}') downsize=$(du -sh $(xdg-user-dir DOWNLOAD)|awk '{print $1}') [[ "${logsize}" == *G* ]] && logsize=" ${logsize} " || logsize=" ${logsize} " if [[ "${paccachesize}" == *K* ]];then paccachesize="" else [[ "${paccachesize}" == *G* ]] && paccachesize=" ${paccachesize} " || paccachesize=" ${paccachesize} " fi if [[ "${trashsize}" == *K* ]];then trashsize="" else [[ "${trashsize}" == *G* ]] && trashsize=" ${trashsize} " || trashsize=" ${trashsize} " fi [[ "${downsize}" == *G* ]] && downsize=" ${downsize} " || downsize=" ${downsize} " out+=("\"\"\"$_LOGS ${logsize}\"\"\",^checkout(logs)") out2+=("^tag(logs)") out2+=("^sep($_VACUUM_LOGS)") out2+=("$_VACUUM_1DAY,mb-cli vacuum 1d") out2+=("$_VACUUM_7DAYS,mb-cli vacuum 7d") out2+=("$_VACUUM_200M,mb-cli vacuum 200M") out2+=("$_VACUUM_500M,mb-cli vacuum 500M") out+=("\"\"\"$_PACMAN_CACHE ${paccachesize}\"\"\",^checkout(paccache)") out2+=("^tag(paccache)") out2+=("^sep($_PACMAN_CACHE)") out2+=("$_EMPTY_PACMAN_CACHE,mb-cli paccache_clean") out+=("\"\"\"$_TRASH ${trashsize}\"\"\",^checkout(trash)") out2+=("^tag(trash)") out2+=("^sep($_TRASH)") out2+=("$_EMPTY $_TRASH,rm -r ~/.local/share/Trash/*/*;mb-status menu") out2+=("$_OPEN $_TRASH,pcmanfm trash://") out+=("\"\"\"$(basename $(xdg-user-dir DOWNLOAD)) ${downsize}\"\"\",^pipe(jgbrowser $(xdg-user-dir DOWNLOAD)$qdir)") fi out+=("^sep()") out+=(" $_SETTINGS,^checkout(settings)") out2+=("^tag(settings)") out2+=("^sep($_SETTINGS)") [[ "$1" == "settings" ]] && out2+=("${arrow_string_left} ${arrow_string_left} ${arrow_string_left},^back()" "^sep()") # BIG PKGS if hash expac 2>/dev/null;then [[ "${big_pkgs}" -gt "0" ]] && out2+=(" $_SHOW_BIGGEST,^checkout(biggest)") || out2+=("󰄱 $_SHOW_BIGGEST,^checkout(biggest)") out3+=("^tag(biggest)") out3+=("^sep($_HOW_MANY)") [[ "${big_pkgs}" == "0" ]] && out3+=(" 0 ($_DISABLED),mb-setvar big_pkgs=0;mb-status menu ipc") || out3+=(" 0 ($_DISABLED),mb-setvar big_pkgs=0;mb-status menu ipc") out3+=("^sep()") [[ "${big_pkgs}" == "10" ]] && out3+=(" 10,mb-setvar big_pkgs=10;mb-status menu ipc") || out3+=(" 10,mb-setvar big_pkgs=10;mb-status menu ipc") [[ "${big_pkgs}" == "20" ]] && out3+=(" 20,mb-setvar big_pkgs=20;mb-status menu ipc") || out3+=(" 20,mb-setvar big_pkgs=20;mb-status menu ipc") [[ "${big_pkgs}" == "30" ]] && out3+=(" 30,mb-setvar big_pkgs=30;mb-status menu ipc") || out3+=(" 30,mb-setvar big_pkgs=30;mb-status menu ipc") [[ "${big_pkgs}" == "40" ]] && out3+=(" 40,mb-setvar big_pkgs=40;mb-status menu ipc") || out3+=(" 40,mb-setvar big_pkgs=40;mb-status menu ipc") fi out2+=("^sep($_DU_ALERT_LEVEL)") [[ "$disk_limit" == "0" ]] && out2+=(" 0 ($_DISABLED) ,mb-setvar disk_limit=0;mb-status menu settings") || out2+=(" 0 ($_DISABLED),mb-setvar disk_limit=0;mb-status menu settings") [[ "$disk_limit" == "75" ]] && out2+=(" 75% ,mb-setvar disk_limit=75;mb-status menu settings") || out2+=(" 75%,mb-setvar disk_limit=75;mb-status menu settings") [[ "$disk_limit" == "80" ]] && out2+=(" 80% ,mb-setvar disk_limit=80;mb-status menu settings") || out2+=(" 80%,mb-setvar disk_limit=80;mb-status menu settings") [[ "$disk_limit" == "85" ]] && out2+=(" 85% ,mb-setvar disk_limit=85;mb-status menu settings") || out2+=(" 85%,mb-setvar disk_limit=85;mb-status menu settings") [[ "$disk_limit" == "90" ]] && out2+=(" 90% ,mb-setvar disk_limit=90;mb-status menu settings") || out2+=(" 90%,mb-setvar disk_limit=90;mb-status menu settings") [[ "$disk_limit" == "95" ]] && out2+=(" 95% ,mb-setvar disk_limit=95;mb-status menu settings") || out2+=(" 95%,mb-setvar disk_limit=95;mb-status menu settings") out2+=("^sep($_DIR_SIZE_MONITOR)") [[ "${dir_size_monitor}" == "y" ]] && out2+=(" $_DIR_SIZE_MONITOR,mb-setvar dir_size_monitor=n;mb-status menu settings") ||out2+=("󰄱 $_DIR_SIZE_MONITOR,mb-setvar dir_size_monitor=y;mb-status menu settings") out2+=("^sep($_ICON_COLORS)") icons=("󰕥" "󰞑" "" "" "" "" "󰸞") out2+=("${OK_ICON} $_ICON_OK,^checkout(icon)") out3+=("^tag(icon)") out3+=("^sep($_ICON)") for i in ${icons[@]};do [[ "${OK_ICON}" == "${i}" ]] && out3+=("$i") || out3+=("$i,mb-setvar ok_icon=${i};mb-status menu settings") done okcols=("#EEEEEE" "#CCCCCC" "#AAAAAA" "#222222" "#a4c400" "#60a917" "#288C44" "#008a00" "#00aba9" "#1ba1e2" "#3e65ff" "#f472d0") warncols=("#d80073" "#a20025" "#e51400" "#fa6800" "#f0a30a" "#e3c800") #out2+=(" $_COLOR_OK,^checkout(colok)") #out3+=("^tag(colok)") out3+=("^sep($_COLOR)") for i in ${okcols[@]};do [[ "${OK_FGCOLOR}" == "${i}" ]] && out3+=(" ,mb-status menu settings") || out3+=(" ,mb-setvar ok_fgcolor=${i};mb-status menu settings") done out2+=(" $_WARN ,^checkout(colwarn)") out3+=("^tag(colwarn)") out3+=("^sep($_WARN)") [[ "${WARN_BGCOLOR}" == "#bd1e24" && "${WARN_FGCOLOR}" == "#FFFFFF" ]] && out3+=(" warning ,mb-status menu settings") || out3+=(" warning ,mb-setvar warn_bgcolor='#bd1e24' ${CONF_FILE};mb-setvar warn_fgcolor='#FFFFFF' ${CONF_FILE};mb-status menu settings") [[ "${WARN_BGCOLOR}" == "#e91e63" && "${WARN_FGCOLOR}" == "#FFFFFF" ]] && out3+=(" pink ,mb-status menu settings") || out3+=(" pink ,mb-setvar warn_bgcolor='#e91e63' ${CONF_FILE};mb-setvar warn_fgcolor='#FFFFFF' ${CONF_FILE};mb-status menu settings") [[ "${WARN_BGCOLOR}" == "#ff5722" && "${WARN_FGCOLOR}" == "#FFFFFF" ]] && out3+=(" deep orange ,mb-status menu settings") || out3+=(" deep orange ,mb-setvar warn_bgcolor='#ff5722' ${CONF_FILE};mb-setvar warn_fgcolor='#FFFFFF' ${CONF_FILE};mb-status menu settings") [[ "${WARN_BGCOLOR}" == "#ff9800" && "${WARN_FGCOLOR}" == "#000000" ]] && out3+=(" orange ,mb-status menu settings") || out3+=(" orange ,mb-setvar warn_bgcolor='#ff9800' ${CONF_FILE};mb-setvar warn_fgcolor='#000000' ${CONF_FILE};mb-status menu settings") [[ "${WARN_BGCOLOR}" == "#f6c700" && "${WARN_FGCOLOR}" == "#000000" ]] && out3+=(" yellow ,mb-status menu settings") || out3+=(" yellow ,mb-setvar warn_bgcolor='#f6c700' ${CONF_FILE};mb-setvar warn_fgcolor='#000000' ${CONF_FILE};mb-status menu settings") [[ "${WARN_BGCOLOR}" == "#000000" && "${WARN_FGCOLOR}" == "#FFFFFF" ]] && out3+=(" black ,mb-status menu settings") || out3+=(" black ,mb-setvar warn_bgcolor='#000000' ${CONF_FILE};mb-setvar warn_fgcolor='#FFFFFF' ${CONF_FILE};mb-status menu settings") #for i in ${warncols[@]};do #[[ "${COLOR_WARN}" == "${i}" ]] && out3+=(" ,mb-status menu settings") || out3+=(" ,mb-setvar color_warn=${i} ${CONF_FILE};mb-status menu settings") #done [[ "$1" == "settings" ]] && out2+=("^sep()" "${arrow_string_left} ${arrow_string_left} ${arrow_string_left},^back()") . /usr/share/mb-jgtools/pipemenu-standalone.cfg MENU_PADDING_TOP=${jgtools_padding:-0} POSITION_MODE="center" MENU_HALIGN="center" MENU_VALIGN="center" [[ "${1}" == "ipc" ]] && POSITION_MODE="ipc" [[ "${1}" == "settings" ]] && POSITION_MODE="ipc" #notify-send.sh "Pos" "${POSITION_MODE}" JGWIDTH=300 TABS=190 [ $(pidof picom) ] && MENU_RADIUS=$jgtools_radius [ -z $jgmenu_use_borders ] && menu_border=0 icons=0 iconmargin=0 mkconfigfile echo menu_height_mode=dynamic >> ${CONFIG_FILE} cat < ${MENU_ITEMS} $(printf '%s\n' "${out[@]}") $(printf '%s\n' "${out2[@]}") $(printf '%s\n' "${out3[@]}") EOF jgmenu --config-file=${CONFIG_FILE} --csv-file=${MENU_ITEMS} ${option} 2>/dev/null } #dnotify(){ #LINK="exo-open --launch WebBrowser maboxlinux.org/donate" #yad --width="400" --center --height="80" --window-icon="mbcc" --borders="10" --image="emote-love" --image-on-top --title "Request for Donation" \ #--text-align="center" --text="Donate to Mabox " \ #--form --align="center" \ #--field="Mabox needs your help... Donations fund":LBL \ #--field="development and infrastructure":LBL \ #--field="important for Mabox's continued existence.":LBL \ #--button="Donate":"$LINK" --button="No Thanks":"0" #} #updates=100 status(){ #if [[ "$DIFF" -gt "1" ]];then #DDATE=$(date +%Y-%m-%d) #if [[ $((DIFF % 100)) == "0" ]] && [[ ! -f "$CFGDIR/.$DDATE" ]];then #touch "$CFGDIR/.$DDATE" #dnotify &>/dev/null #fi #fi #disk space dirty=0 if [[ "${disk_limit}" -gt "0" ]];then while read DEVICE SIZE USED FREE PERCENT MOUNT do [[ "${PERCENT::-1}" -ge "${disk_limit}" ]] && dirty=1 done < <(df -h | grep '^/dev' | grep -v 'boot' | grep -v 'loop' | grep -v '/run/media') fi [[ "${dirty}" == 1 ]] && msg=" 󰻌 " || msg=" ${OK_ICON} " [[ "${updates}" -gt 0 ]] && msg=" 󰮯 ${updates} " echo "${msg}" } case "$1" in status) status;; left) left;; menu) menu "$2";; esac