diff --git a/neofetch b/neofetch index 129779c8..c6556a93 100755 --- a/neofetch +++ b/neofetch @@ -75,7 +75,6 @@ print_info() { info "Memory" memory # info "GPU Driver" gpu_driver # Linux/macOS only - # info "CPU Usage" cpu_usage # info "Disk" disk # info "Battery" battery # info "Font" font @@ -408,6 +407,13 @@ public_ip_host="http://ident.me" # Flag: --ip_timeout public_ip_timeout=2 +# Local IP interface +# +# Default: 'auto' (interface of default route) +# Values: 'auto', 'en0', 'en1' +# Flag: --ip_interface +local_ip_interface=('auto') + # Desktop Environment @@ -508,6 +514,7 @@ disk_percent="on" # iTunes # juk # lollypop +# MellowPlayer # mocp # mopidy # mpd @@ -721,8 +728,7 @@ bar_color_total="distro" # # Default: 'off' # Values: 'bar', 'infobar', 'barinfo', 'off' -# Flags: --cpu_display -# --memory_display +# Flags: --memory_display # --battery_display # --disk_display # @@ -731,7 +737,6 @@ bar_color_total="distro" # infobar: 'info [---=======]' # barinfo: '[---=======] info' # off: 'info' -cpu_display="off" memory_display="off" battery_display="off" disk_display="off" @@ -743,8 +748,9 @@ disk_display="off" # Image backend. # # Default: 'ascii' -# Values: 'ascii', 'caca', 'chafa', 'jp2a', 'iterm2', 'off', -# 'pot', 'termpix', 'pixterm', 'tycat', 'w3m', 'kitty' +# Values: 'ascii', 'caca', 'catimg', 'chafa', 'jp2a', 'iterm2', 'off', +# 'pot', 'termpix', 'pixterm', 'tycat', 'w3m', 'kitty', 'ueberzug' + # Flag: --backend image_backend="ascii" @@ -880,6 +886,14 @@ crop_offset="center" # --size image_size="auto" +# Catimg block size. +# Control the resolution of catimg. +# +# Default: '2' +# Values: '1', '2' +# Flags: --catimg_size +catimg_size="2" + # Gap between image and text # # Default: '3' @@ -967,6 +981,10 @@ get_distro() { *) distro="Red Star OS $(awk -F'[^0-9*]' '$0=$2' /etc/redstar-release)" esac + elif [[ -f /etc/armbian-release ]]; then + . /etc/armbian-release + distro="Armbian $DISTRIBUTION_CODENAME (${VERSION:-})" + elif [[ -f /etc/siduction-version ]]; then case $distro_shorthand in on|tiny) distro=Siduction ;; @@ -1432,7 +1450,7 @@ get_uptime() { d="$((s / 60 / 60 / 24)) days" h="$((s / 60 / 60 % 24)) hours" - m="$((s / 60 % 60)) mins" + m="$((s / 60 % 60)) minutes" # Remove plural if < 2. ((${d/ *} == 1)) && d=${d/s} @@ -1446,41 +1464,52 @@ get_uptime() { uptime=${d:+$d, }${h:+$h, }$m uptime=${uptime%', '} - uptime=${uptime:-$s secs} + uptime=${uptime:-$s seconds} # Make the output of uptime smaller. case $uptime_shorthand in - on) ;; + on) + uptime=${uptime/ minutes/ mins} + uptime=${uptime/ minute/ min} + uptime=${uptime/ seconds/ secs} + ;; tiny) uptime=${uptime/ days/d} uptime=${uptime/ day/d} uptime=${uptime/ hours/h} uptime=${uptime/ hour/h} - uptime=${uptime/ mins/m} - uptime=${uptime/ min/m} - uptime=${uptime/ secs/s} + uptime=${uptime/ minutes/m} + uptime=${uptime/ minute/m} + uptime=${uptime/ seconds/s} uptime=${uptime//,} ;; esac } get_packages() { + # to adjust the number of pkgs per pkg manager + pkgs_h=0 + # has: Check if package manager installed. # dir: Count files or dirs in a glob. # pac: If packages > 0, log package manager name. # tot: Count lines in command output. has() { type -p "$1" >/dev/null && manager=$1; } - dir() { ((packages+=$#)); pac "$#"; } + dir() { ((packages+=$#)); pac "$(($#-pkgs_h))"; } pac() { (($1 > 0)) && { managers+=("$1 (${manager})"); manager_string+="${manager}, "; }; } - tot() { IFS=$'\n' read -d "" -ra pkgs <<< "$("$@")";((packages+=${#pkgs[@]}));pac "${#pkgs[@]}";} + tot() { + IFS=$'\n' read -d "" -ra pkgs <<< "$("$@")"; + ((packages+=${#pkgs[@]})); + pac "$((${#pkgs[@]}-pkgs_h))"; + } # Redefine tot() for Bedrock Linux. [[ -f /bedrock/etc/bedrock-release && $PATH == */bedrock/cross/* ]] && { tot() { IFS=$'\n' read -d "" -ra pkgs <<< "$(for s in $(brl list); do strat -r "$s" "$@"; done)" ((packages+="${#pkgs[@]}")) - pac "${#pkgs[@]}" + pac "$((${#pkgs[@]}-pkgs_h))"; } br_prefix="/bedrock/strata/*" } @@ -1489,6 +1518,7 @@ get_packages() { Linux|BSD|"iPhone OS"|Solaris) # Package Manager Programs. has kiss && tot kiss l + has cpt-list && tot cpt-list has pacman-key && tot pacman -Qq --color never has dpkg && tot dpkg-query -f '.\n' -W has rpm && tot rpm -qa @@ -1499,7 +1529,7 @@ get_packages() { has lvu && tot lvu installed has tce-status && tot tce-status -i has pkg_info && tot pkg_info - has tazpkg && tot tazpkg list && ((packages-=6)) + has tazpkg && pkgs_h=6 tot tazpkg list && ((packages-=6)) has sorcery && tot gaze installed has alps && tot alps showinstalled has butch && tot butch list @@ -1560,7 +1590,8 @@ get_packages() { # Snap hangs if the command is run without the daemon running. # Only run snap if the daemon is also running. - has snap && ps -e | grep -qFm 1 snapd >/dev/null && tot snap list && ((packages-=1)) + has snap && ps -e | grep -qFm 1 snapd >/dev/null && \ + pkgs_h=1 tot snap list && ((packages-=1)) # This is the only standard location for appimages. # See: https://github.com/AppImage/AppImageKit/wiki @@ -1568,7 +1599,7 @@ get_packages() { ;; "Mac OS X"|"macOS"|MINIX) - has port && tot port installed && ((packages-=1)) + has port && pkgs_h=1 tot port installed && ((packages-=1)) has brew && dir /usr/local/Cellar/* has pkgin && tot pkgin list @@ -1590,9 +1621,9 @@ get_packages() { esac # Scoop environment throws errors if `tot scoop list` is used - has scoop && dir ~/scoop/apps/* && ((packages-=1)) + has scoop && pkgs_h=1 dir ~/scoop/apps/* && ((packages-=1)) - # Count chocolatey packages. + # Count chocolatey packages. [[ -d /cygdrive/c/ProgramData/chocolatey/lib ]] && \ dir /cygdrive/c/ProgramData/chocolatey/lib/* ;; @@ -1600,11 +1631,11 @@ get_packages() { Haiku) has pkgman && dir /boot/system/package-links/* packages=${packages/pkgman/depot} - ;; + ;; IRIX) manager=swpkg - tot versions -b && ((packages-=3)) + pkgs_h=3 tot versions -b && ((packages-=3)) ;; esac @@ -1687,8 +1718,17 @@ get_de() { Windows) case $distro in - "Windows 8"*|"Windows 10"*) de="Modern UI/Metro" ;; - *) de=Aero + *"Windows 10"*) + de=Fluent + ;; + + *"Windows 8"*) + de=Metro + ;; + + *) + de=Aero + ;; esac ;; @@ -1778,9 +1818,15 @@ get_de() { de_ver=${de_ver/* } de_ver=${de_ver//\"} - de="$de $de_ver" + de+=" $de_ver" fi + # TODO: + # - New config option + flag: --de_display_server on/off ? + # - Add display of X11, Arcan and anything else relevant. + [[ $de && $WAYLAND_DISPLAY ]] && + de+=" (Wayland)" + de_run=1 } @@ -1793,38 +1839,58 @@ get_wm() { *) ps_flags=(-e) ;; esac - if [[ $WAYLAND_DISPLAY ]]; then - wm=$(ps "${ps_flags[@]}" | grep -m 1 -o -F \ - -e arcan \ - -e asc \ - -e clayland \ - -e dwc \ - -e fireplace \ - -e gnome-shell \ - -e greenfield \ - -e grefsen \ - -e kwin \ - -e lipstick \ - -e maynard \ - -e mazecompositor \ - -e motorcar \ - -e orbital \ - -e orbment \ - -e perceptia \ - -e rustland \ - -e sway \ - -e ulubis \ - -e velox \ - -e wavy \ - -e way-cooler \ - -e wayfire \ - -e wayhouse \ - -e westeros \ - -e westford \ - -e weston) + if [[ -O "${XDG_RUNTIME_DIR}/${WAYLAND_DISPLAY:-wayland-0}" ]]; then + if tmp_pid="$(lsof -t "${XDG_RUNTIME_DIR}/${WAYLAND_DISPLAY:-wayland-0}" 2>&1)" || + tmp_pid="$(fuser "${XDG_RUNTIME_DIR}/${WAYLAND_DISPLAY:-wayland-0}" 2>&1)"; then + wm="$(ps -p "${tmp_pid}" -ho comm=)" + else + # lsof may not exist, or may need root on some systems. Similarly fuser. + # On those systems we search for a list of known window managers, this can mistakenly + # match processes for another user or session and will miss unlisted window managers. + wm=$(ps "${ps_flags[@]}" | grep -m 1 -o -F \ + -e arcan \ + -e asc \ + -e clayland \ + -e dwc \ + -e fireplace \ + -e gnome-shell \ + -e greenfield \ + -e grefsen \ + -e kwin \ + -e lipstick \ + -e maynard \ + -e mazecompositor \ + -e motorcar \ + -e orbital \ + -e orbment \ + -e perceptia \ + -e rustland \ + -e sway \ + -e ulubis \ + -e velox \ + -e wavy \ + -e way-cooler \ + -e wayfire \ + -e wayhouse \ + -e westeros \ + -e westford \ + -e weston) + fi elif [[ $DISPLAY && $os != "Mac OS X" && $os != "macOS" && $os != FreeMiNT ]]; then - type -p xprop &>/dev/null && { + # non-EWMH WMs. + wm=$(ps "${ps_flags[@]}" | grep -m 1 -o \ + -e "[s]owm" \ + -e "[c]atwm" \ + -e "[f]vwm" \ + -e "[d]wm" \ + -e "[2]bwm" \ + -e "[m]onsterwm" \ + -e "[t]inywm" \ + -e "[x]11fs" \ + -e "[x]monad") + + [[ -z $wm ]] && type -p xprop &>/dev/null && { id=$(xprop -root -notype _NET_SUPPORTING_WM_CHECK) id=${id##* } wm=$(xprop -id "$id" -notype -len 100 -f _NET_WM_NAME 8t) @@ -1833,19 +1899,6 @@ get_wm() { wm=${wm/\"*} } - # Fallback for non-EWMH WMs. - [[ $wm ]] || - wm=$(ps "${ps_flags[@]}" | grep -m 1 -o \ - -e "[s]owm" \ - -e "[c]atwm" \ - -e "[f]vwm" \ - -e "[d]wm" \ - -e "[2]bwm" \ - -e "[m]onsterwm" \ - -e "[t]inywm" \ - -e "[x]11fs" \ - -e "[x]monad") - else case $os in "Mac OS X"|"macOS") @@ -1869,15 +1922,21 @@ get_wm() { ;; Windows) - wm=$(tasklist | grep -m 1 -o -F \ - -e bugn \ - -e Windawesome \ - -e blackbox \ - -e emerge \ - -e litestep) + wm=$( + tasklist | - [[ $wm == blackbox ]] && wm="bbLean (Blackbox)" - wm=${wm:+$wm, }Explorer + grep -Fom 1 \ + -e bugn \ + -e Windawesome \ + -e blackbox \ + -e emerge \ + -e litestep + ) + + [[ $wm == blackbox ]] && + wm="bbLean (Blackbox)" + + wm=${wm:+$wm, }DWM.exe ;; FreeMiNT) @@ -2097,7 +2156,7 @@ get_cpu() { # Select the right temperature file. for temp_dir in /sys/class/hwmon/*; do - [[ "$(< "${temp_dir}/name")" =~ (coretemp|fam15h_power|k10temp) ]] && { + [[ "$(< "${temp_dir}/name")" =~ (cpu_thermal|coretemp|fam15h_power|k10temp) ]] && { temp_dirs=("$temp_dir"/temp*_input) temp_dir=${temp_dirs[0]} break @@ -2196,8 +2255,7 @@ get_cpu() { ;; "OpenBSD"* | "Bitrig"*) deg="$(sysctl hw.sensors | \ - awk -F '=| degC' '/lm0.temp|cpu0.temp/ {print $2; exit}')" - deg="${deg/00/0}" + awk -F'=|degC' '/(ksmn|adt|lm|cpu)0.temp0/ {printf("%2.1f", $2); exit}')" ;; esac ;; @@ -2336,47 +2394,6 @@ get_cpu() { fi } -get_cpu_usage() { - case $os in - "Windows") - cpu_usage="$(wmic cpu get loadpercentage)" - cpu_usage="${cpu_usage/LoadPercentage}" - cpu_usage="${cpu_usage//[[:space:]]}" - ;; - - *) - # Get CPU cores if unset. - if [[ "$cpu_cores" != "logical" ]]; then - case $os in - "Linux" | "MINIX") cores="$(grep -c "^processor" /proc/cpuinfo)" ;; - "Mac OS X"|"macOS") cores="$(sysctl -n hw.logicalcpu_max)" ;; - "BSD") cores="$(sysctl -n hw.ncpu)" ;; - "Solaris") cores="$(kstat -m cpu_info | grep -c -F "chip_id")" ;; - "Haiku") cores="$(sysinfo -cpu | grep -c -F 'CPU #')" ;; - "iPhone OS") cores="${cpu/*\(}"; cores="${cores/\)*}" ;; - "IRIX") cores="$(sysconf NPROC_ONLN)" ;; - "FreeMiNT") cores="$(sysctl -n hw.ncpu)" ;; - - "AIX") - cores="$(lparstat -i | awk -F':' '/Online Virtual CPUs/ {printf $2}')" - ;; - esac - fi - - cpu_usage="$(ps aux | awk 'BEGIN {sum=0} {sum+=$3}; END {print sum}')" - cpu_usage="$((${cpu_usage/\.*} / ${cores:-1}))" - ;; - esac - - # Print the bar. - case $cpu_display in - "bar") cpu_usage="$(bar "$cpu_usage" 100)" ;; - "infobar") cpu_usage="${cpu_usage}% $(bar "$cpu_usage" 100)" ;; - "barinfo") cpu_usage="$(bar "$cpu_usage" 100)${info_color} ${cpu_usage}%" ;; - *) cpu_usage="${cpu_usage}%" ;; - esac -} - get_gpu() { case $os in "Linux") @@ -2500,10 +2517,15 @@ get_gpu() { "Windows") while read -r line; do - prin "${subtitle:+${subtitle}${gpu_name}}" "$(trim "$line")" - done < <(wmic path Win32_VideoController get caption) + line=$(trim "$line") - gpu=${gpu//Caption} + [[ -z $win_gpu ]] || [[ -z "$line" ]] && { + win_gpu=1 + continue + } + + prin "${subtitle:+${subtitle}${gpu_name}}" "$line" + done < <(wmic path Win32_VideoController get caption) ;; "Haiku") @@ -2520,7 +2542,7 @@ get_gpu() { ;; *) - gpu="$(glxinfo | grep -F 'OpenGL renderer string')" + gpu="$(glxinfo -B | grep -F 'OpenGL renderer string')" gpu="${gpu/OpenGL renderer string: }" ;; esac @@ -2695,6 +2717,7 @@ get_song() { "iTunes" "juk" "lollypop" + "MellowPlayer" "mocp" "mopidy" "mpd" @@ -2771,6 +2794,7 @@ get_song() { "netease-cloud-music"*) get_song_dbus "netease-cloud-music" ;; "plasma-browser-integration"*) get_song_dbus "plasma-browser-integration" ;; "io.elementary.music"*) get_song_dbus "Music" ;; + "MellowPlayer"*) get_song_dbus "MellowPlayer3" ;; "mpd"* | "mopidy"*) song="$(mpc -f '%artist% \n%album% \n%title%' current "${mpc_args[@]}")" @@ -3406,15 +3430,16 @@ END # like a font definition. NOTE: There is a slight limitation in this approach. # Technically "Font Name" is a valid font. As it doesn't specify any font options # though it is hard to match it correctly amongst the rest of the noise. - [[ -n "$binary" ]] && \ - term_font="$(strings "$binary" | grep -F -m 1 \ - -e "pixelsize=" \ - -e "size=" \ - -e "antialias=" \ - -e "autohint=")" + [[ -n "$binary" ]] && + term_font=$( + strings "$binary" | + + grep -m 1 "*font[^2]" + ) fi term_font="${term_font/xft:}" + term_font="${term_font#*=}" term_font="${term_font/:*}" ;; @@ -3666,6 +3691,9 @@ get_battery() { battery="$(wmic Path Win32_Battery get EstimatedChargeRemaining)" battery="${battery/EstimatedChargeRemaining}" battery="$(trim "$battery")%" + state="$(wmic /NameSpace:'\\root\WMI' Path BatteryStatus get Charging)" + state="${state/Charging}" + [[ "$state" == *TRUE* ]] && battery_state="charging" ;; "Haiku") @@ -3687,9 +3715,25 @@ get_battery() { get_local_ip() { case $os in "Linux" | "BSD" | "Solaris" | "AIX" | "IRIX") - local_ip="$(ip route get 1 | awk -F'src' '{print $2; exit}')" - local_ip="${local_ip/uid*}" - [[ -z "$local_ip" ]] && local_ip="$(ifconfig -a | awk '/broadcast/ {print $2; exit}')" + if [[ "${local_ip_interface[0]}" == "auto" ]]; then + local_ip="$(ip route get 1 | awk -F'src' '{print $2; exit}')" + local_ip="${local_ip/uid*}" + [[ "$local_ip" ]] || local_ip="$(ifconfig -a | awk '/broadcast/ {print $2; exit}')" + else + for interface in "${local_ip_interface[@]}"; do + local_ip="$(ip addr show "$interface" 2> /dev/null | + awk '/inet / {print $2; exit}')" + local_ip="${local_ip/\/*}" + [[ "$local_ip" ]] || + local_ip="$(ifconfig "$interface" 2> /dev/null | + awk '/broadcast/ {print $2; exit}')" + if [[ -n "$local_ip" ]]; then + prin "$interface" "$local_ip" + else + err "Local IP: Could not detect local ip for $interface" + fi + done + fi ;; "MINIX") @@ -3697,8 +3741,19 @@ get_local_ip() { ;; "Mac OS X" | "macOS" | "iPhone OS") - local_ip="$(ipconfig getifaddr en0)" - [[ -z "$local_ip" ]] && local_ip="$(ipconfig getifaddr en1)" + if [[ "${local_ip_interface[0]}" == "auto" ]]; then + interface="$(route get 1 | awk -F': ' '/interface/ {printf $2; exit}')" + local_ip="$(ipconfig getifaddr "$interface")" + else + for interface in "${local_ip_interface[@]}"; do + local_ip="$(ipconfig getifaddr "$interface")" + if [[ -n "$local_ip" ]]; then + prin "$interface" "$local_ip" + else + err "Local IP: Could not detect local ip for $interface" + fi + done + fi ;; "Windows") @@ -3801,11 +3856,11 @@ get_cols() { [${text_padding}C${zws}} # Add block height to info height. - ((info_height+=block_range[1]>7?block_height+3:block_height+2)) + ((info_height+=block_range[1]>7?block_height+2:block_height+1)) case $col_offset in - "auto") printf '\n\e[%bC%b\n\n' "$text_padding" "${zws}${cols}" ;; - *) printf '\n\e[%bC%b\n\n' "$col_offset" "${zws}${cols}" ;; + "auto") printf '\n\e[%bC%b\n' "$text_padding" "${zws}${cols}" ;; + *) printf '\n\e[%bC%b\n' "$col_offset" "${zws}${cols}" ;; esac fi @@ -3825,14 +3880,15 @@ image_backend() { "ascii") print_ascii ;; "off") image_backend="off" ;; - "caca" | "chafa" | "jp2a" | "iterm2" | "termpix" |\ - "tycat" | "w3m" | "sixel" | "pixterm" | "kitty" | "pot") + "caca" | "catimg" | "chafa" | "jp2a" | "iterm2" | "termpix" |\ + "tycat" | "w3m" | "sixel" | "pixterm" | "kitty" | "pot", | "ueberzug") get_image_source [[ ! -f "$image" ]] && { to_ascii "Image: '$image_source' doesn't exist, falling back to ascii mode." return } + [[ "$image_backend" == "ueberzug" ]] && wait=true; get_window_size @@ -3850,9 +3906,9 @@ image_backend() { *) err "Image: Unknown image backend specified '$image_backend'." - err "Image: Valid backends are: 'ascii', 'caca', 'chafa', 'jp2a', 'iterm2', 'kitty', - 'off', 'sixel', 'pot', 'pixterm', 'termpix', 'tycat', - 'w3m')" + err "Image: Valid backends are: 'ascii', 'caca', 'catimg', 'chafa', 'jp2a', 'iterm2', + 'kitty', 'off', 'sixel', 'pot', 'pixterm', 'termpix', + 'tycat', 'w3m')" err "Image: Falling back to ascii mode." print_ascii ;; @@ -3906,7 +3962,14 @@ print_ascii() { done <<< "${ascii_data//\$\{??\}}" # Fallback if file not found. - ((lines==1)) && { lines=; ascii_len=; image_source=auto; get_distro_ascii; print_ascii; return; } + ((lines==1)) && { + lines= + ascii_len= + image_source=auto + get_distro_ascii + print_ascii + return + } # Colors. ascii_data="${ascii_data//\$\{c1\}/$c1}" @@ -4264,6 +4327,28 @@ display_image() { "$image" ;; + + "ueberzug") + if [ "$wait" = true ];then + wait=false; + else + source "$(ueberzug library)" + ImageLayer 0< <( + ImageLayer::add\ + ['identifier']="neofetch"\ + ['x']="$xoffset" ['y']="$yoffset"\ + ['max_width']="$((width / font_width))"\ + ['max_height']="$((height / font_height))"\ + ['path']="$image"; + read -rs; + ) + fi + ;; + + "catimg") + catimg -w "$((width*catimg_size / font_width))" -r "$catimg_size" "$image" + ;; + "chafa") chafa --stretch --size="$((width / font_width))x$((height / font_height))" "$image" ;; @@ -4861,6 +4946,7 @@ INFO: --ip_host url URL to query for public IP --ip_timeout int Public IP timeout (in seconds). + --ip_interface value Interface(s) to use for local IP --song_format format Print the song data in a specific format (see config file). --song_shorthand on/off Print the Artist/Album/Title on separate lines. --memory_percent on/off Display memory percentage. @@ -4890,8 +4976,6 @@ BARS: --bar_length num Length in spaces to make the bars. --bar_colors num num Colors to make the bar. Set in this order: elapsed, total - --cpu_display mode Bar mode. - Possible values: bar, infobar, barinfo, off --memory_display mode Bar mode. Possible values: bar, infobar, barinfo, off --battery_display mode Bar mode. @@ -4901,8 +4985,8 @@ BARS: IMAGE BACKEND: --backend backend Which image backend to use. - Possible values: 'ascii', 'caca', 'chafa', 'jp2a', 'iterm2', - 'off', 'sixel', 'tycat', 'w3m', 'kitty' + Possible values: 'ascii', 'caca', 'catimg', 'chafa', 'jp2a', + 'iterm2', 'off', 'sixel', 'tycat', 'w3m', 'kitty' --source source Which image or ascii file to use. Possible values: 'auto', 'ascii', 'wallpaper', '/path/to/img', '/path/to/ascii', '/path/to/dir/', 'command output' [ascii] @@ -4912,6 +4996,7 @@ IMAGE BACKEND: NEW: neofetch --ascii \"\$(fortune | cowsay -W 30)\" --caca source Shortcut to use 'caca' backend. + --catimg source Shortcut to use 'catimg' backend. --chafa source Shortcut to use 'chafa' backend. --iterm2 source Shortcut to use 'iterm2' backend. --jp2a source Shortcut to use 'jp2a' backend. @@ -4922,6 +5007,7 @@ IMAGE BACKEND: --termpix source Shortcut to use 'termpix' backend. --tycat source Shortcut to use 'tycat' backend. --w3m source Shortcut to use 'w3m' backend. + --ueberzug source Shortcut to use 'ueberzug' backend --off Shortcut to use 'off' backend (Disable ascii art). NOTE: 'source; can be any of the following: 'auto', 'ascii', 'wallpaper', '/path/to/img', @@ -4985,6 +5071,7 @@ IMAGE: in some terminals emulators when using image mode. --size 00px | --size 00% How to size the image. Possible values: auto, 00px, 00%, none + --catimg_size 1/2 Change the resolution of catimg. --crop_mode mode Which crop mode to use Takes the values: normal, fit, fill --crop_offset value Change the crop offset for normal mode. @@ -5054,6 +5141,17 @@ get_args() { "--shell_version") shell_version="$2" ;; "--ip_host") public_ip_host="$2" ;; "--ip_timeout") public_ip_timeout="$2" ;; + "--ip_interface") + unset local_ip_interface + for arg in "$@"; do + case "$arg" in + "--ip_interface") ;; + "-"*) break ;; + *) local_ip_interface+=("$arg") ;; + esac + done + ;; + "--song_format") song_format="$2" ;; "--song_shorthand") song_shorthand="$2" ;; "--music_player") music_player="$2" ;; @@ -5128,7 +5226,6 @@ get_args() { bar_color_total="$3" ;; - "--cpu_display") cpu_display="$2" ;; "--memory_display") memory_display="$2" ;; "--battery_display") battery_display="$2" ;; "--disk_display") disk_display="$2" ;; @@ -5136,8 +5233,9 @@ get_args() { # Image backend "--backend") image_backend="$2" ;; "--source") image_source="$2" ;; - "--ascii" | "--caca" | "--chafa" | "--jp2a" | "--iterm2" | "--off" | "--pot" |\ - "--pixterm" | "--sixel" | "--termpix" | "--tycat" | "--w3m" | "--kitty") + "--ascii" | "--caca" | "--catimg" | "--chafa" | "--jp2a" | "--iterm2" | "--off" |\ + "--pot" | "--pixterm" | "--sixel" | "--termpix" | "--tycat" | "--w3m" | "--kitty" |\ + "--ueberzug") image_backend="${1/--}" case $2 in "-"* | "") ;; @@ -5148,6 +5246,7 @@ get_args() { # Image options "--loop") image_loop="on" ;; "--image_size" | "--size") image_size="$2" ;; + "--catimg_size") catimg_size="$2" ;; "--crop_mode") crop_mode="$2" ;; "--crop_offset") crop_offset="$2" ;; "--xoffset") xoffset="$2" ;; @@ -5244,7 +5343,6 @@ get_args() { info "GPU Driver" gpu_driver info "Memory" memory - info "CPU Usage" cpu_usage info "Disk" disk info "Battery" battery info "Font" font @@ -5266,7 +5364,6 @@ get_args() { refresh_rate="on" shell_version="on" - cpu_display="infobar" memory_display="infobar" disk_display="infobar" cpu_temp="C" @@ -5297,6 +5394,7 @@ get_simple() { old_functions() { # Removed functions for backwards compatibility. get_line_break() { :; } + get_cpu_usage() { :; } } get_distro_ascii() { @@ -5511,6 +5609,34 @@ ${c1} -o o- EOF ;; + "instantOS"*) + set_colors 4 6 + read -rd '' ascii_data <<'EOF' + +${c1} + 'cx0XWWMMWNKOd:'. + .;kNMMMMMMMMMMMMMWNKd' + 'kNMMMMMMWNNNWMMMMMMMMXo. +,0MMMMMW0o;'..,:dKWMMMMMWx. +OMMMMMXl. .xNMMMMMNo +WMMMMNl .kWWMMMMO' +MMMMMX; oNWMMMMK, +NMMMMWo .OWMMMMMK, +kWMMMMNd. ,kWMMMMMMK, +'kWMMMMWXxl:;;:okNMMMMMMMMK, + .oXMMMMMMMWWWMMMMMMMMMMMMK, + 'oKWMMMMMMMMMMMMMMMMMMMK, + .;lxOKXXXXXXXXXXXXXXXO;...... + ................,d0000000kd:. + .kMMMMMMMMMW0; + .kMMMMMMMMMMMX + .xMMMMMMMMMMMW + cXMMMMMMMMMM0 + :0WMMMMMMNx, + .o0NMWNOc. +EOF + ;; + "Antergos"*) set_colors 4 6 read -rd '' ascii_data <<'EOF' @@ -5629,6 +5755,30 @@ dhhyys+/-` EOF ;; + "Archcraft"*) + set_colors 6 6 7 1 + read -rd '' ascii_data <<'EOF' +${c1} -m: + :NMM+ .+ + +MMMMMo -NMy + sMMMMMMMy -MMMMh` + yMMMMMMMMMd` oMMMMd` + `dMMMMMMMMMMMm. /MMMMm- + .mMMMMMm-dMMMMMN- :NMMMN: + -NMMMMMd` yMMMMMN: .mMMMM/ + :NMMMMMy sMMMMMM+ `dMMMMo + +MMMMMMs +MMMMMMs `hMMMMy + oMMMMMMMds- :NMMMMMy sMMMMh` + yMMMMMNoydMMmo` -NMMMMMd` +MMMMd. + `dMMMMMN- `:yNNs` .mMMMMMm. /MMMMm- + .mMMMMMm. :hN/ `dMMMMMN- -NMMMN: + -NMMMMMd` -hh` `yMMMMMN: .mMMMM/ + :NMMMMMy `s` :h. oMMMMMM+ `----- + +MMMMMMo .dMm. `o. +MMMMMMo +sMMMMMM+ .mMMMN: :` :NMMMMMy +EOF + ;; + "arcolinux_small"*) set_colors 7 4 read -rd '' ascii_data <<'EOF' @@ -7677,6 +7827,34 @@ EOF \ LE \ / \ DE \ / \________\/ +EOF + ;; + + "LaxerOS"*) + set_colors 7 4 + read -rd '' ascii_data <<'EOF' +${c2} + /. + `://:- + `//////: + .////////:` + -//////////:` + -/////////////` + :///////////////. + `://////.```-//////- + `://///:` .//////- + `//////: `//////: + .//////- `://///:` + -//////- `://///:` + -//////. ://////` + ://////` -//////. + `/////:` ./////: + .-::-` .:::-` + +.:://////////////////////////////////::. +//////////////////////////////////////// +.:////////////////////////////////////:. + EOF ;; @@ -8128,6 +8306,31 @@ ${c2} ``-:::::-`` EOF ;; + "Live Raizo"* | "Live_Raizo"*) + set_colors 3 + read -rd '' ascii_data <<'EOF' +${c1} `......` + -+shmNMMMMMMNmhs/. + :smMMMMMmmhyyhmmMMMMMmo- + -hMMMMd+:. `----` .:odMMMMh- + `hMMMN+. .odNMMMMMMNdo. .yMMMMs` + hMMMd. -dMMMMmdhhdNMMMNh` .mMMMh +oMMMm` :MMMNs.:sddy:-sMMMN- `NMMM+ +mMMMs dMMMo sMMMMMMd yMMMd sMMMm +----` .---` oNMMMMMh `---. .---- + .sMMy: + /MM/ + +dMMms. + hMMMMMMN + `dMMMMMMm: + .+ss+sMNysMMoomMd+ss+. + +MMMMMMN` +MM/ hMMMMMNs + sMMMMMMm-hNMMMd-hMMMMMMd + :yddh+`hMMMMMMN :yddy/` + .hMMMMd: + `..` +EOF + ;; "mx_small"*) set_colors 4 6 7 @@ -9105,6 +9308,30 @@ ${c1} `..--..` EOF ;; + "Quibian"*) + set_colors 3 7 + read -rd '' ascii_data <<'EOF' +${c1} `.--::::::::--.` + `.-:::-..`` ``..-::-.` + .::::-` .${c2}+${c1}:`` `.-::.` + .::::.` -::::::-` `.::. + `-:::-` -:::::::::--..`` .::` + `::::- .${c2}oy${c1}:::::::---.```.: `::` + -:::: `.-:::::::::::-.``` `:: +.::::.`-:::::::::::::. `:. +-::::.::::::::::::::: -: +::::::::::::::::::::` `: +:::::::::::::::::::- `: +::::::::::::::::::: -- +.:::::::::::::::::` `:` +`::::::::::::::::: -` + .:::::::::::::::- -` + `::::::::::::::- `.` + .::::::::::::- `` + `.--:::::-. +EOF + ;; + "Radix"*) set_colors 1 2 read -rd '' ascii_data <<'EOF' @@ -9132,16 +9359,15 @@ EOF "Raspbian_small"*) set_colors 2 1 read -rd '' ascii_data <<'EOF' -${c1} .~~. .~~. - '. \\ ' ' / .' -${c2} .~ .~~~..~. - : .~.'~'.~. : - ~ ( ) ( ) ~ -( : '~'.~.'~' : ) - ~ .~ ( ) ~. ~ - ( : '~' : ) - '~ .~~~. ~' - '~' +${c1} .. ,. + :oo: .:oo: + 'o\\o o/o: +${c2} :: . :: . :: +:: ::: ::: :: +:' '',.'' ': + ::: :::: ::: + ':, '' ,:' + ' ~::~ ' EOF ;; @@ -10192,6 +10418,32 @@ oss${c2}yNMMMNyMMh${c1}sssssssssssssshmmmh${c1}ssssssso EOF ;; + "Univention"*) + set_colors 1 7 + read -rd '' ascii_data <<'EOF' +${c1} ./osssssssssssssssssssssso+- + `ohhhhhhhhhhhhhhhhhhhhhhhhhhhhy: + shhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh- + `-//${c2}sssss${c1}/hhhhhhhhhhhhhh+${c2}s${c1}.hhhhhhhhh+ + .ohhhy${c2}sssss${c1}.hhhhhhhhhhhhhh.${c2}sss${c1}+hhhhhhh+ +.yhhhhy${c2}sssss${c1}.hhhhhhhhhhhhhh.${c2}ssss${c1}:hhhhhh+ ++hhhhhy${c2}sssss${c1}.hhhhhhhhhhhhhh.${c2}sssss${c1}yhhhhh+ ++hhhhhy${c2}sssss${c1}.hhhhhhhhhhhhhh.${c2}sssss${c1}yhhhhh+ ++hhhhhy${c2}sssss${c1}.hhhhhhhhhhhhhh.${c2}sssss${c1}yhhhhh+ ++hhhhhy${c2}sssss${c1}.hhhhhhhhhhhhhh.${c2}sssss${c1}yhhhhh+ ++hhhhhy${c2}sssss${c1}.hhhhhhhhhhhhhh.${c2}sssss${c1}yhhhhh+ ++hhhhhy${c2}sssss${c1}.hhhhhhhhhhhhhh.${c2}sssss${c1}yhhhhh+ ++hhhhhy${c2}sssss${c1}.hhhhhhhhhhhhhh.${c2}sssss${c1}yhhhhh+ ++hhhhhy${c2}ssssss${c1}+yhhhhhhhhhhy/${c2}ssssss${c1}yhhhhh+ ++hhhhhh:${c2}sssssss${c1}:hhhhhhh+${c2}.ssssssss${c1}yhhhhy. ++hhhhhhh+`${c2}ssssssssssssssss${c1}hh${c2}sssss${c1}yhhho` ++hhhhhhhhhs+${c2}ssssssssssss${c1}+hh+${c2}sssss${c1}/:-` +-hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhho + :yhhhhhhhhhhhhhhhhhhhhhhhhhhhh+` + -+ossssssssssssssssssssss+:` +EOF + ;; + "Venom"*) set_colors 8 4 read -rd '' ascii_data <<'EOF' @@ -10248,6 +10500,36 @@ ${c1} -1vvnvv. `~+++` ++|+++ ~|Invnvnvvnvvvnnv}+` -~|{*l}*|~ EOF + + ;; + + "semc"*) + set_colors 2 8 + read -rd '' ascii_data <<'EOF' +${c1} __.;=====;.__ + _.=+==++=++=+=+===;. + -=+++=+===+=+=+++++=_ + . -=:`` `--==+=++==. + _vi, ` --+=++++: + .uvnvi. _._ -==+==+. + .vvnvnI` .;==|==;. :|=||=|. +${c2} _______._______.___ ___. ______ + / | ____| \/ | / | + | (----| |__ | \ / || ,----' + \ \ | __| | |\/| || | +.----) | | |____| | | || `----. +|_______/ |_______|__| |__| \______| + +${c1} -1vvnvv. `~+++` ++|+++ + +vnvnnv, `-|=== + +vnvnvns. . :=- + -Invnvvnsi..___..=sv=. ` + +Invnvnvnnnnnnnnvvnn;. + ~|Invnvnvvnvvvnnv}+` + -~|{*l}*|~ + +EOF + ;; "Obarun"*) @@ -10596,6 +10878,7 @@ main() { # w3m-img: Draw the image a second time to fix # rendering issues in specific terminal emulators. [[ $image_backend == *w3m* ]] && display_image + [[ $image_backend == *ueberzug* ]] && display_image # Add neofetch info to verbose output. err "Neofetch command: $0 $*" diff --git a/neofetch.1 b/neofetch.1 index 5cadd702..4a766043 100644 --- a/neofetch.1 +++ b/neofetch.1 @@ -235,7 +235,7 @@ Possible values: bar, infobar, barinfo, off \fB\-\-backend\fR backend Which image backend to use. Possible values: 'ascii', 'caca', 'chafa', 'jp2a', 'iterm2', -\&'off', 'sixel', 'tycat', 'w3m', 'kitty' +\&'off', 'sixel', 'tycat', 'w3m', 'kitty', 'ueberzug' .TP \fB\-\-source\fR source Which image or ascii file to use. @@ -280,6 +280,9 @@ Shortcut to use 'tycat' backend. \fB\-\-w3m\fR source Shortcut to use 'w3m' backend. .TP +\fB\-\-ueberzug\fR source +Shortcut to use 'ueberzug' backend. +.TP \fB\-\-off\fR Shortcut to use 'off' backend (Disable ascii art). .IP @@ -365,11 +368,11 @@ west, center, east, southwest, south, southeast .TP \fB\-\-xoffset\fR px How close the image will be to the left edge of the -window. This only works with w3m. +window. This only works with w3m and ueberzug. .TP \fB\-\-yoffset\fR px How close the image will be to the top edge of the -window. This only works with w3m. +window. This only works with w3m and ueberzug. .TP \fB\-\-bg_color\fR color Background color to display behind transparent image.