diff --git a/Jenkinsfile b/Jenkinsfile index acabbea..56d57d8 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -75,8 +75,16 @@ pipeline { --syslinux-splash config/binary_syslinux/splash.jpg \ --union-filesystem unionfs \ --username bob \ + −−templates config/templates -k retrodebian1 + cp -R /usr/share/live-helper/templates/* config/templates/ + + sed -i 's|^menu color sel.*|menu color sel * #ff82c059 #c0000000 none|' \ + -i 's|^menu color unsel.*|menu color unsel * #8082c059 #00000000 none|' \ + -i 's|^menu color hotkey.*|menu color hotkey * #fff01e1e #00000000 none|' \ + config/templates/templates/syslinux/menu/header.cfg + chmod +x /root/update-initramfs.sh chmod +x /root/zzz-config-live.sh cp /root/update-initramfs.sh config/chroot_local-hooks diff --git a/neofetch b/neofetch index 96dad71..816ce0f 100644 --- a/neofetch +++ b/neofetch @@ -1,681 +1,676 @@ #!/bin/bash -# retrodebian-fetch - minimal neofetch-like tool for Debian Etch / bash 3.1 -# Linux only, old X11 desktop oriented, no modern image backends. -VERSION="0.1-etchtarget" +VERSION="0.2-retrodebian" PATH=$PATH:/usr/sbin:/sbin LC_ALL=C LANG=C -# Defaults -separator=":" -underline_enabled="on" -underline_char="-" -bold_enabled="on" -color_blocks="on" -os_arch="on" -kernel_shorthand="on" -uptime_shorthand="on" -shell_path="off" -shell_version="on" -cpu_brand="on" -cpu_cores="logical" -cpu_speed="on" -gpu_brand="on" -memory_percent="off" -memory_unit="mib" -refresh_rate="off" -distro_shorthand="off" -package_managers="on" -stdout_mode="off" -ascii_distro="auto" -disable_list="" +USE_COLOR=1 +SHOW_ASCII=1 -reset='\033[0m' -bold='\033[1m' +ESC="$(printf '\033')" +C_RESET="${ESC}[0m" +C_BOLD="${ESC}[1m" +C_RED="${ESC}[31m" +C_BLUE="${ESC}[34m" +C_WHITE="${ESC}[37m" +C_GREEN="${ESC}[32m" +C_BGREEN="${ESC}[1;32m" +C_CYAN="${ESC}[36m" -# Colors -c_title='\033[1;31m' -c_sub='\033[1;34m' -c_info='\033[0m' -c_colon='\033[0m' -c_under='\033[0m' +if [ "$USE_COLOR" != "1" ]; then + C_RESET="" + C_BOLD="" + C_RED="" + C_BLUE="" + C_WHITE="" +fi -info_height=0 -text_padding=0 -ascii_lines=0 -ascii_width=0 - -say() { - printf '%s\n' "$*" -} trim() { - echo "$*" | awk '{gsub(/^[ \t]+|[ \t]+$/, ""); print}' + echo "$1" | sed 's/^[[:space:]]*//; s/[[:space:]]*$//' } -strip_esc() { - echo "$1" | sed 's/\x1b\[[0-9;]*m//g' + +strip_ansi() { + echo "$1" | sed 's/'"$ESC"'\\[[0-9;]*m//g' } -color() { - case "$1" in - 0) printf '\033[30m' ;; - 1) printf '\033[31m' ;; - 2) printf '\033[32m' ;; - 3) printf '\033[33m' ;; - 4) printf '\033[34m' ;; - 5) printf '\033[35m' ;; - 6) printf '\033[36m' ;; - 7) printf '\033[37m' ;; - *) printf '\033[37m' ;; - esac + +repeat_char() { + ch="$1" + count="$2" + out="" + + while [ "$count" -gt 0 ] 2>/dev/null; do + out="${out}${ch}" + count="$(expr "$count" - 1)" + done + + echo "$out" } -set_distro_colors() { - case "$distro" in - Debian*) c_title="$(color 1)$bold"; c_sub="$(color 1)$bold" ;; - Ubuntu*) c_title="$(color 1)$bold"; c_sub="$(color 3)$bold" ;; - "Linux Mint"*) c_title="$(color 2)$bold"; c_sub="$(color 2)$bold" ;; - *) c_title="$(color 4)$bold"; c_sub="$(color 4)$bold" ;; - esac + +get_term_cols() { + TERM_COLS=80 + + if type tput >/dev/null 2>&1; then + cols="$(tput cols 2>/dev/null)" + case "$cols" in + ''|*[!0-9]*) + ;; + *) + if [ "$cols" -gt 0 ] 2>/dev/null; then + TERM_COLS="$cols" + return + fi + ;; + esac + fi + + if type stty >/dev/null 2>&1; then + cols="$(stty size 2>/dev/null | awk '{print $2}')" + case "$cols" in + ''|*[!0-9]*) + ;; + *) + if [ "$cols" -gt 0 ] 2>/dev/null; then + TERM_COLS="$cols" + return + fi + ;; + esac + fi } + +get_user_host() { + if [ -n "$USER" ]; then + F_USER="$USER" + else + F_USER="$(id -un 2>/dev/null)" + fi + + if [ -z "$F_USER" ]; then + F_USER="user" + fi + + F_HOST="$(hostname 2>/dev/null)" + if [ -z "$F_HOST" ]; then + F_HOST="host" + fi + + F_TITLE="${C_RED}${C_BOLD}${F_USER}${C_RESET}@${C_RED}${C_BOLD}${F_HOST}${C_RESET}" +} + + get_os() { - os="Linux" -} - -get_kernel() { - kname=`uname -s 2>/dev/null` - krel=`uname -r 2>/dev/null` - kmach=`uname -m 2>/dev/null` - - if [ "$kernel_shorthand" = "on" ]; then - kernel="$krel" - else - kernel="$kname $krel" - fi -} - -get_distro() { - distro="" + F_OS="Linux" if [ -f /etc/debian_version ]; then - debv=`cat /etc/debian_version 2>/dev/null` + debv="$(cat /etc/debian_version 2>/dev/null)" + debv="$(trim "$debv")" + if [ -f /etc/issue ]; then - issue=`head -n 1 /etc/issue | sed 's/\\l//g' | sed 's/\\n//g'` - issue=`trim "$issue"` + issue="$(head -n 1 /etc/issue 2>/dev/null)" + issue="$(echo "$issue" | sed 's/\\n//g; s/\\l//g')" + issue="$(trim "$issue")" + + case "$issue" in + Debian*|Ubuntu*) + F_OS="$issue" + ;; + *) + if [ -n "$debv" ]; then + F_OS="Debian GNU/Linux $debv" + else + F_OS="Debian GNU/Linux" + fi + ;; + esac + else + if [ -n "$debv" ]; then + F_OS="Debian GNU/Linux $debv" + else + F_OS="Debian GNU/Linux" + fi fi - - case "$issue" in - Debian*) distro="$issue" ;; - Ubuntu*) distro="$issue" ;; - *) distro="Debian GNU/Linux $debv" ;; - esac - elif [ -f /etc/issue ]; then - distro=`head -n 1 /etc/issue | sed 's/\\l//g' | sed 's/\\n//g'` - distro=`trim "$distro"` - else - distro="Linux" fi - if [ "$distro_shorthand" = "on" ] || [ "$distro_shorthand" = "tiny" ]; then - case "$distro" in - Debian*) distro="Debian" ;; - Ubuntu*) distro="Ubuntu" ;; - "Linux Mint"*) distro="Linux Mint" ;; - esac - fi - - if [ "$os_arch" = "on" ]; then - distro="$distro $kmach" + arch="$(uname -m 2>/dev/null)" + arch="$(trim "$arch")" + if [ -n "$arch" ]; then + F_OS="${F_OS} ${arch}" fi } -get_model() { - model="" +get_host_model() { + F_HOSTMODEL="" + if [ -r /sys/devices/virtual/dmi/id/board_vendor ] || [ -r /sys/devices/virtual/dmi/id/board_name ]; then - bv=`cat /sys/devices/virtual/dmi/id/board_vendor 2>/dev/null` - bn=`cat /sys/devices/virtual/dmi/id/board_name 2>/dev/null` - model=`trim "$bv $bn"` + bv="$(cat /sys/devices/virtual/dmi/id/board_vendor 2>/dev/null)" + bn="$(cat /sys/devices/virtual/dmi/id/board_name 2>/dev/null)" + F_HOSTMODEL="$(trim "$bv $bn")" fi - if [ -z "$model" ] && [ -r /sys/devices/virtual/dmi/id/product_name ]; then - pn=`cat /sys/devices/virtual/dmi/id/product_name 2>/dev/null` - pv=`cat /sys/devices/virtual/dmi/id/product_version 2>/dev/null` - model=`trim "$pn $pv"` - fi - - if [ -z "$model" ]; then - model="Unknown" + if [ -z "$F_HOSTMODEL" ] && [ -r /sys/devices/virtual/dmi/id/product_name ]; then + pn="$(cat /sys/devices/virtual/dmi/id/product_name 2>/dev/null)" + pv="$(cat /sys/devices/virtual/dmi/id/product_version 2>/dev/null)" + F_HOSTMODEL="$(trim "$pn $pv")" fi } + +get_kernel() { + ks="$(uname -s 2>/dev/null)" + kr="$(uname -r 2>/dev/null)" + F_KERNEL="$(trim "$ks $kr")" +} + + get_uptime() { - secs="" + F_UPTIME="" + if [ -r /proc/uptime ]; then - secs=`awk '{print int($1)}' /proc/uptime 2>/dev/null` - fi + secs="$(awk '{print int($1)}' /proc/uptime 2>/dev/null)" - if [ -z "$secs" ]; then - uptime="Unknown" - return - fi + if [ -n "$secs" ]; then + d="$(expr "$secs" / 86400)" + h="$(expr \( "$secs" % 86400 \) / 3600)" + m="$(expr \( "$secs" % 3600 \) / 60)" - d=`expr $secs / 86400` - h=`expr \( $secs % 86400 \) / 3600` - m=`expr \( $secs % 3600 \) / 60` + out="" - if [ "$uptime_shorthand" = "tiny" ]; then - uptime="" - [ "$d" -gt 0 ] && uptime="$uptime${d}d " - [ "$h" -gt 0 ] && uptime="$uptime${h}h " - [ "$m" -gt 0 ] && uptime="$uptime${m}m" - uptime=`trim "$uptime"` - else - uptime="" - [ "$d" -gt 0 ] && uptime="$uptime${d} day" - [ "$d" -gt 1 ] && uptime="$uptime${d} days" - [ "$h" -gt 0 ] && uptime="$uptime${uptime:+, }${h} hour" - [ "$h" -gt 1 ] && uptime="$uptime${uptime%, hour}${h} hours" - [ "$m" -gt 0 ] && uptime="$uptime${uptime:+, }${m} min" - [ -z "$uptime" ] && uptime="${secs} sec" - fi -} + if [ "$d" -gt 0 ] 2>/dev/null; then + if [ "$d" -eq 1 ] 2>/dev/null; then + out="1 day" + else + out="$d days" + fi + fi -get_packages() { - packages="" - if type dpkg-query >/dev/null 2>&1; then - cnt=`dpkg-query -W -f='x\n' 2>/dev/null | wc -l | awk '{print $1}'` - if [ "$package_managers" = "on" ]; then - packages="$cnt (dpkg)" - else - packages="$cnt" + if [ "$h" -gt 0 ] 2>/dev/null; then + if [ -n "$out" ]; then + out="${out}, " + fi + if [ "$h" -eq 1 ] 2>/dev/null; then + out="${out}1 hour" + else + out="${out}${h} hours" + fi + fi + + if [ "$m" -gt 0 ] 2>/dev/null; then + if [ -n "$out" ]; then + out="${out}, " + fi + out="${out}${m} min" + fi + + if [ -z "$out" ]; then + out="${secs} sec" + fi + + F_UPTIME="$out" fi fi } + +get_packages() { + F_PACKAGES="" + + if type dpkg-query >/dev/null 2>&1; then + cnt="$(dpkg-query -W -f='x\n' 2>/dev/null | wc -l | awk '{print $1}')" + cnt="$(trim "$cnt")" + if [ -n "$cnt" ]; then + F_PACKAGES="$cnt (dpkg)" + fi + fi +} + + get_shell() { + F_SHELL="" + shn="$SHELL" if [ -z "$shn" ]; then shn="/bin/sh" fi - if [ "$shell_path" = "off" ]; then - shn=`basename "$shn"` + base="$(basename "$shn" 2>/dev/null)" + if [ -z "$base" ]; then + base="sh" fi - shell="$shn" + F_SHELL="$base" - if [ "$shell_version" = "on" ]; then - case "$SHELL" in - *bash) - if [ -n "$BASH_VERSION" ]; then - shell="$shell ${BASH_VERSION%%-*}" - else - v=`$SHELL --version 2>/dev/null | head -n 1 | sed 's/.*version //' | awk '{print $1}'` - [ -n "$v" ] && shell="$shell $v" - fi - ;; - *) - ;; - esac - fi -} - -get_resolution() { - resolution="" - - if [ -n "$DISPLAY" ]; then - if type xrandr >/dev/null 2>&1; then - resolution=`xrandr 2>/dev/null | awk '/ connected/ && /[0-9]+x[0-9]+/ {for(i=1;i<=NF;i++) if ($i ~ /[0-9]+x[0-9]+\+/) {gsub(/\+.*/, "", $i); print $i; exit}}'` - fi - - if [ -z "$resolution" ] && type xdpyinfo >/dev/null 2>&1; then - resolution=`xdpyinfo 2>/dev/null | awk '/dimensions:/ {print $2; exit}'` - fi - fi -} - -get_de() { - de="" - if [ -n "$DESKTOP_SESSION" ]; then - de="$DESKTOP_SESSION" - elif [ -n "$XDG_CURRENT_DESKTOP" ]; then - de="$XDG_CURRENT_DESKTOP" - elif [ -n "$GNOME_DESKTOP_SESSION_ID" ]; then - de="GNOME" - elif [ -n "$KDE_FULL_SESSION" ]; then - de="KDE" - fi - - case "$de" in - gnome*|GNOME*) de="GNOME" ;; - xfce*|XFCE*) de="Xfce" ;; - lxde*|LXDE*) de="LXDE" ;; - kde*|KDE*) de="KDE" ;; - fluxbox*|Fluxbox*) de="Fluxbox" ;; - openbox*|Openbox*) de="Openbox" ;; + case "$base" in + bash) + if [ -n "$BASH_VERSION" ]; then + bv="$(echo "$BASH_VERSION" | sed 's/-.*//')" + F_SHELL="$base $bv" + fi + ;; esac } + +get_resolution() { + F_RESOLUTION="" + + if [ -n "$DISPLAY" ]; then + if type xrandr >/dev/null 2>&1; then + F_RESOLUTION="$(xrandr 2>/dev/null | awk ' + / connected/ && /[0-9]+x[0-9]+/ { + for (i = 1; i <= NF; i++) { + if ($i ~ /[0-9]+x[0-9]+\+/) { + gsub(/\+.*/, "", $i) + print $i + exit + } + } + } + ')" + fi + + if [ -z "$F_RESOLUTION" ] && type xdpyinfo >/dev/null 2>&1; then + F_RESOLUTION="$(xdpyinfo 2>/dev/null | awk '/dimensions:/ {print $2; exit}')" + fi + fi +} + + +get_de() { + F_DE="" + + if [ -n "$DESKTOP_SESSION" ]; then + F_DE="$DESKTOP_SESSION" + elif [ -n "$XDG_CURRENT_DESKTOP" ]; then + F_DE="$XDG_CURRENT_DESKTOP" + elif [ -n "$GNOME_DESKTOP_SESSION_ID" ]; then + F_DE="GNOME" + elif [ -n "$KDE_FULL_SESSION" ]; then + F_DE="KDE" + fi + + case "$F_DE" in + gnome*|GNOME*) + F_DE="GNOME" + ;; + xfce*|XFCE*) + F_DE="Xfce" + ;; + lxde*|LXDE*) + F_DE="LXDE" + ;; + kde*|KDE*) + F_DE="KDE" + ;; + fluxbox*|Fluxbox*) + F_DE="Fluxbox" + ;; + openbox*|Openbox*) + F_DE="Openbox" + ;; + esac +} + + get_wm() { - wm="" + F_WM="" + if [ -n "$DISPLAY" ]; then if type xprop >/dev/null 2>&1; then - wid=`xprop -root _NET_SUPPORTING_WM_CHECK 2>/dev/null | awk '{print $NF}'` + wid="$(xprop -root _NET_SUPPORTING_WM_CHECK 2>/dev/null | awk '{print $NF}')" if [ -n "$wid" ]; then - wm=`xprop -id "$wid" _NET_WM_NAME 2>/dev/null | sed 's/.*= //' | sed 's/^"//' | sed 's/"$//'` + F_WM="$(xprop -id "$wid" _NET_WM_NAME 2>/dev/null | sed 's/.*= //' | sed 's/^"//' | sed 's/"$//')" fi fi - if [ -z "$wm" ]; then - wm=`ps -e 2>/dev/null | egrep 'fluxbox|openbox|xfwm4|metacity|kwin|icewm|fvwm|blackbox|enlightenment' | head -n 1 | awk '{print $NF}'` + if [ -z "$F_WM" ]; then + F_WM="$(ps -e 2>/dev/null | egrep 'fluxbox|openbox|xfwm4|metacity|kwin|icewm|fvwm|blackbox|enlightenment' | head -n 1 | awk '{print $NF}')" fi fi } -get_theme() { - theme="" - if [ -f "$HOME/.gtkrc-2.0" ]; then - theme=`grep 'gtk-theme-name' "$HOME/.gtkrc-2.0" 2>/dev/null | head -n 1 | sed 's/.*=//' | sed "s/'//g" | sed 's/"//g'` - theme=`trim "$theme"` - fi -} - -get_icons() { - icons="" - if [ -f "$HOME/.gtkrc-2.0" ]; then - icons=`grep 'gtk-icon-theme-name' "$HOME/.gtkrc-2.0" 2>/dev/null | head -n 1 | sed 's/.*=//' | sed "s/'//g" | sed 's/"//g'` - icons=`trim "$icons"` - fi -} - -get_term() { - term="${TERM_PROGRAM}" - [ -z "$term" ] && term="$TERM" - [ -z "$term" ] && term="unknown" -} - -get_term_font() { - term_font="" - if [ -f "$HOME/.Xdefaults" ]; then - term_font=`grep -i 'vt100.font:' "$HOME/.Xdefaults" 2>/dev/null | head -n 1 | sed 's/.*font:[[:space:]]*//'` - fi - if [ -z "$term_font" ] && [ -f "$HOME/.Xresources" ]; then - term_font=`grep -i 'vt100.font:' "$HOME/.Xresources" 2>/dev/null | head -n 1 | sed 's/.*font:[[:space:]]*//'` - fi -} get_cpu() { + F_CPU="" + F_CPU_NAME="" + cpu="" speed="" cores="" if [ -r /proc/cpuinfo ]; then - cpu=`awk -F ': ' '/model name/ {print $2; exit} /cpu/ && !seen {seen=1; print $2; exit}' /proc/cpuinfo 2>/dev/null` - speed=`awk -F ': ' '/cpu MHz/ {printf "%d", $2; exit}' /proc/cpuinfo 2>/dev/null` - if [ "$cpu_cores" = "logical" ] || [ "$cpu_cores" = "on" ]; then - cores=`grep -c '^processor' /proc/cpuinfo 2>/dev/null` - fi + cpu="$(awk -F ': ' ' + /model name/ { print $2; exit } + /cpu[[:space:]]*:/ { print $2; exit } + /Hardware/ { print $2; exit } + /Processor/ { print $2; exit } + ' /proc/cpuinfo 2>/dev/null)" + + speed="$(awk -F ': ' '/cpu MHz/ { printf "%d", $2; exit }' /proc/cpuinfo 2>/dev/null)" + cores="$(grep -c '^processor' /proc/cpuinfo 2>/dev/null)" fi - cpu=`trim "$cpu"` - cpu=`echo "$cpu" | sed 's/(TM)//g; s/(R)//g; s/ CPU//g; s/ Processor//g; s/ */ /g'` + cpu="$(trim "$cpu")" + cpu="$(echo "$cpu" | sed 's/(TM)//g; s/(R)//g; s/ */ /g')" + cpu="$(trim "$cpu")" - if [ "$cpu_brand" = "off" ]; then - cpu=`echo "$cpu" | sed 's/^Intel //; s/^AMD //'` + if [ -n "$cpu" ]; then + F_CPU_NAME="$cpu" fi - [ -n "$cores" ] && [ "$cpu_cores" != "off" ] && cpu="$cpu ($cores)" + out="$cpu" - if [ "$cpu_speed" = "on" ] && [ -n "$speed" ]; then + if [ -n "$cores" ] && [ -n "$out" ]; then + out="${out} (${cores})" + fi + + if [ -n "$speed" ] && [ -n "$out" ]; then if [ "$speed" -ge 1000 ] 2>/dev/null; then - ghz_major=`expr $speed / 1000` - ghz_minor=`expr \( $speed % 1000 \) / 100` - cpu="$cpu @ ${ghz_major}.${ghz_minor}GHz" + ghz_major="$(expr "$speed" / 1000)" + ghz_minor="$(expr \( "$speed" % 1000 \) / 100)" + out="${out} @ ${ghz_major}.${ghz_minor}GHz" else - cpu="$cpu @ ${speed}MHz" + out="${out} @ ${speed}MHz" fi fi + + F_CPU="$out" } + get_gpu() { - gpu="" - if type lspci >/dev/null 2>&1; then - gpu=`lspci 2>/dev/null | egrep 'VGA compatible controller|Display controller|3D controller' | head -n 1 | sed 's/^[0-9a-fA-F:.]* //'` - gpu=`trim "$gpu"` - gpu=`echo "$gpu" | sed 's/Corporation//g; s/ Inc\.//g; s/\[//g; s/\]//g; s/ */ /g'` - gpu=`trim "$gpu"` + F_GPU="" - if [ "$gpu_brand" = "off" ]; then - gpu=`echo "$gpu" | sed 's/^Intel //; s/^NVIDIA //; s/^ATI //; s/^Advanced Micro Devices, //; s/^AMD //'` - fi + if type lspci >/dev/null 2>&1; then + F_GPU="$(lspci 2>/dev/null | egrep 'VGA compatible controller|Display controller|3D controller' | head -n 1 | sed 's/^[0-9A-Fa-f:.]* //')" + F_GPU="$(trim "$F_GPU")" + F_GPU="$(echo "$F_GPU" | sed 's/Corporation//g; s/ Inc\.//g; s/\[//g; s/\]//g; s/ */ /g')" + F_GPU="$(trim "$F_GPU")" fi } + get_memory() { + F_MEMORY="" + mem_total=0 mem_free=0 mem_buffers=0 mem_cached=0 mem_avail=0 - while read a b c; do - case "$a" in - MemTotal:) mem_total=$b ;; - MemFree:) mem_free=$b ;; - Buffers:) mem_buffers=$b ;; - Cached:) mem_cached=$b ;; - MemAvailable:) mem_avail=$b ;; - esac - done < /proc/meminfo - - if [ "$mem_avail" -gt 0 ] 2>/dev/null; then - mem_used=`expr \( $mem_total - $mem_avail \) / 1024` - else - mem_used=`expr \( $mem_total - $mem_free - $mem_buffers - $mem_cached \) / 1024` - fi - mem_total=`expr $mem_total / 1024` - - mem_label="MiB" - if [ "$memory_unit" = "gib" ]; then - mu1=`awk 'BEGIN { printf "%.2f", '"$mem_used"'/1024 }'` - mu2=`awk 'BEGIN { printf "%.2f", '"$mem_total"'/1024 }'` - memory="$mu1 GiB / $mu2 GiB" - elif [ "$memory_unit" = "kib" ]; then - memory="`expr $mem_used \* 1024` KiB / `expr $mem_total \* 1024` KiB" - else - memory="$mem_used ${mem_label} / $mem_total ${mem_label}" - fi - - if [ "$memory_percent" = "on" ] && [ "$mem_total" -gt 0 ] 2>/dev/null; then - pct=`expr $mem_used \* 100 / $mem_total` - memory="$memory ($pct%)" - fi -} - -get_disk() { - disk="" - if type df >/dev/null 2>&1; then - line=`df -h / 2>/dev/null | tail -n 1` - size=`echo "$line" | awk '{print $2}'` - used=`echo "$line" | awk '{print $3}'` - usep=`echo "$line" | awk '{print $5}'` - [ -n "$used" ] && disk="$used / $size ($usep)" - fi -} - -get_cols() { - if [ "$color_blocks" != "on" ] || [ "$stdout_mode" = "on" ]; then - return - fi - - printf '\n' - i=0 - while [ $i -le 7 ]; do - printf '\033[4%sm %s' "$i" "$reset" - i=`expr $i + 1` - done - printf '\n' - info_height=`expr $info_height + 2` -} - -get_title() { - usern="${USER}" - [ -z "$usern" ] && usern=`id -un 2>/dev/null` - hostn=`hostname 2>/dev/null` - title="${c_title}${bold}${usern}${reset}${c_info}@${c_title}${bold}${hostn}${reset}" - raw="${usern}@${hostn}" - title_len=`echo "$raw" | awk '{print length}'` -} - -get_underline() { - if [ "$underline_enabled" != "on" ]; then - return - fi - u="" - i=0 - while [ $i -lt "$title_len" ]; do - u="$u$underline_char" - i=`expr $i + 1` - done - pad_print "${c_under}${u}${reset}" - info_height=`expr $info_height + 1` -} - -pad_print() { - if [ "$stdout_mode" = "on" ]; then - printf '%s\n' "$1" - else - if [ "$text_padding" -gt 0 ] 2>/dev/null; then - printf '%*s%s\n' "$text_padding" '' "$1" - else - printf '%s\n' "$1" - fi - fi -} - -prin() { - key="$1" - val="$2" - if [ -n "$val" ]; then - out="${c_sub}${bold}${key}${reset}${c_colon}${separator}${reset} ${c_info}${val}${reset}" - else - out="$key" - fi - pad_print "$out" - info_height=`expr $info_height + 1` -} - -info() { - label="$1" - func="$2" - [ -z "$func" ] && func="$1" - - case " $disable_list " in - *" $func "*) return ;; - esac - - eval get_$func - eval val='${'$func'}' - val=`trim "$val"` - [ -n "$val" ] && prin "$label" "$val" -} - -get_ascii() { - case "$ascii_distro" in - auto) - case "$distro" in - Debian*) ascii_name="debian" ;; - Ubuntu*) ascii_name="ubuntu" ;; - "Linux Mint"*) ascii_name="mint" ;; - *) ascii_name="linux" ;; + if [ -r /proc/meminfo ]; then + while read a b c; do + case "$a" in + MemTotal:) mem_total="$b" ;; + MemFree:) mem_free="$b" ;; + Buffers:) mem_buffers="$b" ;; + Cached:) mem_cached="$b" ;; + MemAvailable:) mem_avail="$b" ;; esac - ;; - *) ascii_name="$ascii_distro" ;; - esac + done < /proc/meminfo + fi - case "$ascii_name" in - debian) - ascii_data='${c1} _,met$$$$$gg. - ,g$$$$$$$$$$$$$$$P. - ,g$$P" """Y$$.". - ,$$P' -,' -`d$$' - $$P - $$: - $$; - Y$$. - `$$b - `Y$$. - `$$b. - `Y$$b. - `"Y$b._ - `"""${reset}' - c1="$(color 1)$bold" - ;; - ubuntu) - ascii_data='${c1} .-/+oossssoo+/-. - `:+ssssssssssssssssss+:` - -+ssssssssssssssssssyyssss+- - .ossssssssssssssssss${c2}dMMMNy${c1}sssso. - /sssssssssss${c2}hdmmNNmmyNMMMMh${c1}ssssss/ - +sssssssss${c2}hm${c1}yd${c2}MMMMMMMNddddy${c1}ssssssss+ - /ssssssss${c2}hNMMM${c1}yh${c2}hyyyyhmNMMMNh${c1}ssssssss/ -.ssssssss${c2}dMMMNh${c1}ssssssssss${c2}hNMMMd${c1}ssssssss. -+ssss${c2}hhhyNMMNy${c1}ssssssssssss${c2}yNMMMy${c1}sssssss+ -oss${c2}yNMMMNyMMh${c1}ssssssssssssss${c2}hmmmh${c1}ssssssso -${reset}' - c1="$(color 1)$bold" - c2="$(color 3)$bold" - ;; - mint) - ascii_data='${c1} ___________ -|_ \\ - | ${c2}| _____ ${c1}| - | ${c2}| | | | ${c1}| - | ${c2}| | | | ${c1}| - | ${c2}\\__${c2}___/ ${c1}| - \\_________/${reset}' - c1="$(color 2)$bold" - c2="$(color 7)$bold" - ;; - *) - ascii_data='${c1} ##### - ####### - ##O#O## - ####### - ########### - ############# - ############### -${reset}' - c1="$(color 7)$bold" - ;; - esac + if [ "$mem_total" -gt 0 ] 2>/dev/null; then + if [ "$mem_avail" -gt 0 ] 2>/dev/null; then + mem_used="$(expr "$mem_total" - "$mem_avail")" + else + mem_used="$(expr "$mem_total" - "$mem_free" - "$mem_buffers" - "$mem_cached")" + fi + + mem_used_mib="$(expr "$mem_used" / 1024)" + mem_total_mib="$(expr "$mem_total" / 1024)" + + F_MEMORY="${mem_used_mib} MiB / ${mem_total_mib} MiB" + fi } -print_ascii() { - get_ascii - ascii_lines=0 - ascii_width=0 - oldifs="$IFS" - IFS=' -' - for line in `printf '%b -' "$ascii_data"`; do - l=`strip_esc "$line"` - len=`echo "$l" | awk '{print length}'` - [ "$len" -gt "$ascii_width" ] && ascii_width="$len" - ascii_lines=`expr $ascii_lines + 1` - done - IFS="$oldifs" - text_padding=`expr $ascii_width + 3` - printf '%b -' "$ascii_data" + +get_swap() { + F_SWAP="" + + swap_total=0 + swap_free=0 + + if [ -r /proc/meminfo ]; then + while read a b c; do + case "$a" in + SwapTotal:) swap_total="$b" ;; + SwapFree:) swap_free="$b" ;; + esac + done < /proc/meminfo + fi + + if [ "$swap_total" -gt 0 ] 2>/dev/null; then + swap_used="$(expr "$swap_total" - "$swap_free")" + swap_used_mib="$(expr "$swap_used" / 1024)" + swap_total_mib="$(expr "$swap_total" / 1024)" + F_SWAP="${swap_used_mib} MiB / ${swap_total_mib} MiB" + fi +} + + +get_root_disk() { + F_DISK="" + + if type df >/dev/null 2>&1; then + F_DISK="$(df -hP / 2>/dev/null | awk 'NR == 2 { print $3 " / " $2 " (" $5 "), " $4 " free" }')" + F_DISK="$(trim "$F_DISK")" + fi +} + +build_ascii_block() { + out="$1" + + : > "$out" + + if [ "$SHOW_ASCII" != "1" ]; then + return + fi + + cat > "$out" <> "$file" + fi +} + + +build_info_block() { + out="$1" + + : > "$out" + + echo "$F_TITLE" >> "$out" + + title_plain="$(strip_ansi "$F_TITLE")" + title_len="$(echo "$title_plain" | awk '{print length($0)}')" + underline="$(repeat_char "-" "$title_len")" + echo "$underline" >> "$out" + echo "" >> "$out" + + write_info_line "$out" "OS" "$F_OS" + write_info_line "$out" "RetroDebian" "$F_RETRODEBIAN" + write_info_line "$out" "Host" "$F_HOSTMODEL" + write_info_line "$out" "Kernel" "$F_KERNEL" + write_info_line "$out" "Uptime" "$F_UPTIME" + write_info_line "$out" "Packages" "$F_PACKAGES" + write_info_line "$out" "Shell" "$F_SHELL" + write_info_line "$out" "Resolution" "$F_RESOLUTION" + write_info_line "$out" "DE" "$F_DE" + write_info_line "$out" "WM" "$F_WM" + write_info_line "$out" "CPU" "$F_CPU" + write_info_line "$out" "GPU" "$F_GPU" + write_info_line "$out" "Memory" "$F_MEMORY" + write_info_line "$out" "Swap" "$F_SWAP" + write_info_line "$out" "Disk" "$F_DISK" +} + +render_output() { + left="/tmp/retrodebian-fetch-left.$$" + right="/tmp/retrodebian-fetch-right.$$" + + trap 'rm -f "$left" "$right"' 0 1 2 3 15 + + build_ascii_block "$left" + build_info_block "$right" + get_term_cols + + if [ "$SHOW_ASCII" = "1" ] && [ "$TERM_COLS" -ge 76 ] 2>/dev/null; then + left_width="$(awk ' + { + n = length($0) + if (n > max) { + max = n + } + } + END { + if (max < 1) { + max = 1 + } + print max + } + ' "$left")" + + gap=3 + pad_width="$(expr "$left_width" + "$gap")" + + exec 3<"$left" + exec 4<"$right" + + left_done=0 + right_done=0 + + while :; do + if [ "$left_done" -eq 0 ]; then + if IFS= read -r l <&3; then + : + else + l="" + left_done=1 + fi + else + l="" + fi + + if [ "$right_done" -eq 0 ]; then + if IFS= read -r r <&4; then + : + else + r="" + right_done=1 + fi + else + r="" + fi + + if [ "$left_done" -eq 1 ] && [ "$right_done" -eq 1 ] && [ -z "$l" ] && [ -z "$r" ]; then + break + fi + + printf "%-${pad_width}s%s\n" "$l" "$r" + done + + exec 3<&- + exec 4<&- + else + if [ "$SHOW_ASCII" = "1" ]; then + cat "$left" + echo "" + fi + cat "$right" + fi + + rm -f "$left" "$right" + trap - 0 1 2 3 15 } usage() { - cat <