diff --git a/Changelog.md b/Changelog.md index 4f4090b8..7eeda34f 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,26 +1,37 @@ +# Neofetch 2.0 + + + ## Contributors -- **[@JorgeGonzalez](https://github.com/JorgeGonzalez)** - - -## General - -- Fixed issue where info wasn't detected properly but the subtitle was still displayed. +- **[@konimex](https://github.com/konimex)** +- **[@TonCherAmi](https://github.com/TonCherAmi)** ## Operating System -- Added support for DracOS. +- Added support for Haiku OS. **[@konimex](https://github.com/konimex)** +- Added support for GNU Hurd. **[@konimex](https://github.com/konimex)** + + +## Ascii + +- Added generic Linux ascii art to display if neofetch doesn't have the right logo for your distro. +- Added Netrunner. **[@konimex](https://github.com/konimex)** +- Added Korora. **[@konimex](https://github.com/konimex)** + + +# Images + +- Fixed images not appearing in st. ## Info -**Terminal**
+**Distro**
-- Added support for HyperTerm. **[@JorgeGonzalez](https://github.com/JorgeGonzalez)** +- [Linux] Source `/etc/*-release` files instead of having a dozen separate `awk` commands. +**GPU**
-**Terminal Font**
- -- Added support for HyperTerm. **[@JorgeGonzalez](https://github.com/JorgeGonzalez)** - +- [Linux] Properly detect gpu in multi gpu setups. **[@TonCherAmi](https://github.com/TonCherAmi)** diff --git a/ascii/distro/haiku b/ascii/distro/haiku new file mode 100644 index 00000000..d0926c5d --- /dev/null +++ b/ascii/distro/haiku @@ -0,0 +1,19 @@ +"\ +${c2} :dc' + 'l:;'${c1},${c2}'ck. .;dc:. + co ${c1}..${c2}k. .;; ':o. + co ${c1}..${c2}k. ol ${c1}.${c2}0. + co ${c1}..${c2}k. oc ${c1}..${c2}0. + co ${c1}..${c2}k. oc ${c1}..${c2}0. +.Ol,. co ${c1}...''${c2}Oc;kkodxOdddOoc,. + ';lxxlxOdxkxk0kd${c1}oooll${c2}dl${c1}ccc:${c2}clxd; + ..${c1}oOolllllccccccc:::::${c2}od; + cx:ooc${c1}:::::::;${c2}cooolcX. + cd${c1}.${c2}''cloxdoollc' ${c1}...${c2}0. + cd${c1}......${c2}k;${c1}.${c2}xl${c1}.... .${c2}0. + .::c${c1};..${c2}cx;${c1}.${c2}xo${c1}..... .${c2}0. + '::c'${c1}...${c2}do${c1}..... .${c2}K, + cd,.${c1}....:${c2}O,${c1} + ':clod:'${c1} + ${c1} +" diff --git a/ascii/distro/korora b/ascii/distro/korora new file mode 100644 index 00000000..a46f0075 --- /dev/null +++ b/ascii/distro/korora @@ -0,0 +1,18 @@ +"\ +${c2} ____________ + _add55555555554${c1}: + _w?'${c1}\`\`\`\`\`\`\`\`\`\`'${c2})k${c1}: + _Z'${c1}\`${c2} ]k${c1}: + m(${c1}\`${c2} )k${c1}: + _.ss${c1}\`${c2}m[${c1}\`${c2}, ]e${c1}: + .uY\"^\`${c1}\`${c2}Xc${c1}\`${c2}?Ss. d(${c1}\` + jF'${c1}\`${c2} \`@. ${c1}\`${c2}Sc .jr${c1}\` + jr${c1}\`${c2} \`?n_ ${c1}\`${c2}$; _a2\"${c1}\` +.m${c1}:${c2} \`~M${c1}\`${c2}1k${c1}\`${c2}5?!\`${c1}\` +:#${c1}:${c2} ${c1}\`${c2})e${c1}\`\`\` +:m${c1}:${c2} ,#'${c1}\` +:#${c1}:${c2} .s2'${c1}\` +:m,________.aa7^${c1}\` +:#baaaaaaas!J'${c1}\` + \`\`\`\`\`\`\`\`\`\`\` +" diff --git a/ascii/distro/linux b/ascii/distro/linux new file mode 100644 index 00000000..dff5a167 --- /dev/null +++ b/ascii/distro/linux @@ -0,0 +1,14 @@ +"\ +${c2} ##### +${c2} ####### +${c2} ##${c1}O${c2}#${c1}O${c2}## +${c2} #${c3}#####${c2}# +${c2} ##${c1}##${c3}###${c1}##${c2}## +${c2} #${c1}##########${c2}## +${c2} #${c1}############${c2}## +${c2} #${c1}############${c2}### +${c3} ##${c2}#${c1}###########${c2}##${c3}# +${c3}######${c2}#${c1}#######${c2}#${c3}###### +${c3}#######${c2}#${c1}#####${c2}#${c3}####### +${c3} #####${c2}#######${c3}##### +" diff --git a/ascii/distro/netrunner b/ascii/distro/netrunner new file mode 100644 index 00000000..29ce7429 --- /dev/null +++ b/ascii/distro/netrunner @@ -0,0 +1,24 @@ +"\ +${c1}nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn +nnnnnnnnnnnnnn nnnnnnnnnnnnnn +nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn +nnnnnnn nnnnnnnnnnnnnnnnnnnn nnnnnnn +nnnn nnnnnnnnnnnnnnnnnnnnnnnnnn nnnn +nnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnn +nn nnnnnnnnnnnnnnnnnnnnnn nnnnnnnn nn +n nnnnnnnnnnnnnnnnn nnnnnnnnnn n +n nnnnnnnnnnn nnnnnnnnnnn n +n nnnnnn nnnnnnnnnnnn n +n nnnnnnnnnnn nnnnnnnnnnnn n +n nnnnnnnnnnnnn nnnnnnnnnnnn n +n nnnnnnnnnnnnnnnn nnnnnnnnnnnnn n +n nnnnnnnnnnnnnnnnn nnnnnnnnnnnnn n +n nnnnnnnnnnnnnnnnnn nnnnnnnnnnnn n +nn nnnnnnnnnnnnnnnnn nnnnnnnnnnnn nn +nnn nnnnnnnnnnnnnnn nnnnnnnnnnn nnn +nnnnn nnnnnnnnnnnnnn nnnnnnnnn nnnnn +nnnnnnn nnnnnnnnnnnnnnnnnnnn nnnnnnn +nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn +nnnnnnnnnnnnnn nnnnnnnnnnnnnn +nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn +" diff --git a/neofetch b/neofetch index 2137cee2..18cb519e 100755 --- a/neofetch +++ b/neofetch @@ -30,6 +30,8 @@ getos() { *"BSD" | "DragonFly" | "Bitrig") os="BSD" ;; "CYGWIN"*) os="Windows" ;; "SunOS") os="Solaris" ;; + "Haiku") os="Haiku" ;; + "GNU"*) os="GNU" ;; *) printf "%s\n" "Unknown OS detected: $(uname)"; exit 1 ;; esac } @@ -98,7 +100,7 @@ getmodel() { ;; "BSD") - model="$(sysctl -n hw.vendor hw.product 2>/dev/null)" + model="$(sysctl -n hw.vendor hw.product)" ;; "Windows") @@ -122,13 +124,13 @@ getdistro() { [ "$distro" ] && return case "$os" in - "Linux" ) - if grep -q 'Microsoft' /proc/version >/dev/null 2>&1 || \ - grep -q 'Microsoft' /proc/sys/kernel/osrelease >/dev/null 2>&1; then + "Linux" | "GNU") + if grep -q 'Microsoft' /proc/version >/dev/null || \ + grep -q 'Microsoft' /proc/sys/kernel/osrelease >/dev/null; then case "$distro_shorthand" in - "on") distro="$(lsb_release -sir 2>/dev/null) [Windows 10]" ;; + "on") distro="$(lsb_release -sir) [Windows 10]" ;; "tiny") distro="Windows 10" ;; - *) distro="$(lsb_release -sd 2>/dev/null) on Windows 10" ;; + *) distro="$(lsb_release -sd) on Windows 10" ;; esac ascii_distro="Windows 10" @@ -138,18 +140,18 @@ getdistro() { *) distro="Red Star OS $(awk -F'[^0-9*]' '$0=$2' /etc/redstar-release)" esac - elif type -p lsb_release >/dev/null 2>&1; then + elif type -p lsb_release >/dev/null; then case "$distro_shorthand" in "on") lsb_flags="-sir" ;; "tiny") lsb_flags="-si" ;; *) lsb_flags="-sd" ;; esac - distro="$(lsb_release $lsb_flags 2>/dev/null)" + distro="$(lsb_release $lsb_flags)" - elif type -p guix >/dev/null 2>&1; then + elif type -p guix >/dev/null; then distro="GuixSD" - elif type -p crux >/dev/null 2>&1; then + elif type -p crux >/dev/null; then distro="$(crux)" case "$distro_shorthand" in "on") distro="${distro//version}" ;; @@ -160,26 +162,20 @@ getdistro() { distro="Android $(getprop ro.build.version.release)" else - # Workarounds are included in every shorthand option + # Source the os-release file + for file in /etc/*ease /usr/lib/*ease; do + source "$file" + done + case "$distro_shorthand" in - "on") - distro="$(awk -F'=' '/^NAME|VERSION_ID=/ {print $2; exit}' /etc/*ease /usr/lib/*ease)" - [ -z "$distro" ] && distro="$(awk -F'=' '/^DISTRIB_ID|DISTRIB_RELEASE=/ {print $2}' /etc/openwrt_release)" - ;; - - "tiny") - distro="$(awk -F'=' '/^NAME=/ {print $2; exit}' /etc/*ease /usr/lib/*ease)" - [ -z "$distro" ] && distro="$(awk -F'=' '/^TAILS_PRODUCT_NAME=/ {print $2}' /etc/*ease)" - [ -z "$distro" ] && distro="$(awk -F'=' '/^DISTRIB_ID=/ {print $2}' /etc/openwrt_release)" - ;; - - *) - distro="$(awk -F'=' '/^PRETTY_NAME=/ {print $2; exit}' /etc/*ease /usr/lib/*ease)" - [ -z "$distro" ] && distro="$(awk -F'=' '{print $2}' /etc/*ease)" - [ -z "$distro" ] && distro="$(awk '/BLAG/ {print $1; exit}' /etc/*ease)" - [ -z "$distro" ] && distro="$(awk -F'=' '/^DISTRIB_DESCRIPTION=/ {print $2}' /etc/openwrt_release)" - ;; + "on") distro="${NAME:-${DISTRIB_ID}} ${VERSION_ID:-${DISTRIB_RELEASE}}" ;; + "tiny") distro="${NAME:-${DISTRIB_ID:-"${TAILS_PRODUCT_NAME}"}}" ;; + "off") distro="${PRETTY_NAME:-${DISTRIB_DESCRIPTION}} ${UBUNTU_CODENAME}" ;; esac + + # Workarounds for distros that go against the os-release standard. + [ -z "$(trim "$distro")" ] && distro="$(awk '/BLAG/ {print $1; exit}' /etc/*ease /usr/lib/*ease)" + [ -z "$(trim "$distro")" ] && distro="$(awk -F'=' '{print $2; exit}' /etc/*ease /usr/lib/*ease)" fi distro="${distro//\"}" distro="${distro//\'}" @@ -253,6 +249,10 @@ getdistro() { esac distro="${distro/\(*}" ;; + + "Haiku") + distro="$(uname -sv | awk '{print $1 " " $2}')" + ;; esac # Get architecture @@ -303,52 +303,64 @@ getkernel() { # Uptime {{{ getuptime() { - # Get uptime in seconds + + # Since Haiku's uptime cannot be fetched in seconds, a case outside + # the usual case is needed case "$os" in - "Linux" | "Windows") - seconds="$(< /proc/uptime)" - seconds="${seconds/.*}" + "Haiku") + uptime="$(uptime -u)" + uptime="${uptime/up }" ;; - "Mac OS X" | "iPhone OS" | "BSD") - boot="$(sysctl -n kern.boottime)" - boot="${boot/'{ sec = '}" - boot="${boot/,*}" + *) + # Get uptime in seconds + case "$os" in + "Linux" | "Windows") + seconds="$(< /proc/uptime)" + seconds="${seconds/.*}" + ;; - # Get current date in seconds - now="$(date +%s)" - seconds="$((now - boot))" - ;; + "Mac OS X" | "iPhone OS" | "BSD") + boot="$(sysctl -n kern.boottime)" + boot="${boot/'{ sec = '}" + boot="${boot/,*}" - "Solaris") - seconds="$(kstat -p unix:0:system_misc:snaptime | awk '{print $2}')" - seconds="${seconds/.*}" + # Get current date in seconds + now="$(date +%s)" + seconds="$((now - boot))" + ;; + + "Solaris") + seconds="$(kstat -p unix:0:system_misc:snaptime | awk '{print $2}')" + seconds="${seconds/.*}" + ;; + esac + + days="$((seconds / 60 / 60 / 24)) days" + hours="$((seconds / 60 / 60 % 24)) hours" + minutes="$((seconds / 60 % 60)) minutes" + + case "$days" in + "0 days") unset days ;; + "1 days") days="${days/s}" ;; + esac + + case "$hours" in + "0 hours") unset hours ;; + "1 hours") hours="${hours/s}" ;; + esac + + case "$minutes" in + "0 minutes") unset minutes ;; + "1 minutes") minutes="${minutes/s}" ;; + esac + + uptime="${days:+$days, }${hours:+$hours, }${minutes}" + uptime="${uptime%', '}" + uptime="${uptime:-${seconds} seconds}" ;; esac - days="$((seconds / 60 / 60 / 24)) days" - hours="$((seconds / 60 / 60 % 24)) hours" - minutes="$((seconds / 60 % 60)) minutes" - - case "$days" in - "0 days") unset days ;; - "1 days") days="${days/s}" ;; - esac - - case "$hours" in - "0 hours") unset hours ;; - "1 hours") hours="${hours/s}" ;; - esac - - case "$minutes" in - "0 minutes") unset minutes ;; - "1 minutes") minutes="${minutes/s}" ;; - esac - - uptime="${days:+$days, }${hours:+$hours, }${minutes}" - uptime="${uptime%', '}" - uptime="${uptime:-${seconds} seconds}" - # Make the output of uptime smaller. case "$uptime_shorthand" in "on") @@ -376,52 +388,52 @@ getuptime() { getpackages() { case "$os" in - "Linux" | "iPhone OS" | "Solaris") - type -p pacman >/dev/null 2>&1 && \ + "Linux" | "iPhone OS" | "Solaris" | "GNU") + type -p pacman >/dev/null && \ packages="$(pacman -Qq --color never | wc -l)" - type -p dpkg >/dev/null 2>&1 && \ + type -p dpkg >/dev/null && \ packages="$((packages+=$(dpkg --get-selections | grep -cv deinstall$)))" - type -p /sbin/pkgtool >/dev/null 2>&1 && \ + type -p /sbin/pkgtool >/dev/null && \ packages="$((packages+=$(ls -1 /var/log/packages | wc -l)))" - type -p rpm >/dev/null 2>&1 && \ + type -p rpm >/dev/null && \ packages="$((packages+=$(rpm -qa | wc -l)))" - type -p xbps-query >/dev/null 2>&1 && \ + type -p xbps-query >/dev/null && \ packages="$((packages+=$(xbps-query -l | wc -l)))" - type -p pkginfo >/dev/null 2>&1 && \ + type -p pkginfo >/dev/null && \ packages="$((packages+=$(pkginfo -i | wc -l)))" - type -p pisi >/dev/null 2>&1 && \ + type -p pisi >/dev/null && \ packages="$((packages+=$(pisi list-installed | wc -l)))" - if type -p pkg >/dev/null 2>&1; then + if type -p pkg >/dev/null; then packages="$((packages+=$(ls -1 /var/db/pkg | wc -l)))" [ "$packages" == "0" ] && packages="$((packages+=$(pkg list | wc -l)))" fi - type -p emerge >/dev/null 2>&1 && \ + type -p emerge >/dev/null && \ packages="$((packages+=$(ls -d /var/db/pkg/*/* | wc -l)))" - type -p nix-env >/dev/null 2>&1 && \ + type -p nix-env >/dev/null && \ packages="$((packages+=$(ls -d -1 /nix/store/*/ | wc -l)))" - type -p guix >/dev/null 2>&1 && \ + type -p guix >/dev/null && \ packages="$((packages+=$(ls -d -1 /gnu/store/*/ | wc -l)))" - type -p apk >/dev/null 2>&1 && \ + type -p apk >/dev/null && \ packages="$((packages+=$(apk info | wc -l)))" - type -p opkg >/dev/null 2>&1 && \ + type -p opkg >/dev/null && \ packages="$((packages+=$(opkg list-installed | wc -l)))" - type -p pacman-g2 >/dev/null 2>&1 && \ + type -p pacman-g2 >/dev/null && \ packages="$((packages+=$(pacman-g2 -Q | wc -l)))" - type -p cave >/dev/null 2>&1 && \ + type -p cave >/dev/null && \ packages="$((packages+=$(ls -d -1 /var/db/paludis/repositories/cross-installed/*/data/* /var/db/paludis/repositories/installed/data/* | wc -l)))" ;; @@ -429,14 +441,14 @@ getpackages() { [ -d "/usr/local/bin" ] && \ packages="$(($(ls -l /usr/local/bin/ | grep -v "\(../Cellar/\|brew\)" | wc -l) - 1))" - type -p port >/dev/null 2>&1 && \ - packages="$((packages + $(port installed 2>/dev/null | wc -l) - 1))" + type -p port >/dev/null && \ + packages="$((packages + $(port installed | wc -l) - 1))" - type -p brew >/dev/null 2>&1 && \ - packages="$((packages + $(find /usr/local/Cellar -maxdepth 1 2>/dev/null | wc -l) - 1))" + type -p brew >/dev/null && \ + packages="$((packages + $(find /usr/local/Cellar -maxdepth 1 | wc -l) - 1))" - type -p pkgin >/dev/null 2>&1 && \ - packages="$((packages + $(pkgin list 2>/dev/null | wc -l)))" + type -p pkgin >/dev/null && \ + packages="$((packages + $(pkgin list | wc -l)))" ;; "BSD") @@ -445,9 +457,9 @@ getpackages() { "PacBSD"*) packages="$(pacman -Qq --color never | wc -l)" ;; *) - if type -p pkg_info >/dev/null 2>&1; then + if type -p pkg_info >/dev/null; then packages="$(pkg_info | wc -l)" - elif type -p pkg >/dev/null 2>&1; then + elif type -p pkg >/dev/null; then packages="$(pkg info | wc -l)" fi ;; @@ -461,6 +473,10 @@ getpackages() { [ -d "/cygdrive/c/ProgramData/chocolatey/lib" ] && \ packages="$((packages+=$(ls -1 /cygdrive/c/ProgramData/chocolatey/lib | wc -l)))" ;; + + "Haiku") + packages="$(ls -1 /boot/system/package-links | wc -l)" + ;; esac [ "$packages" == "0" ] && unset packages @@ -529,12 +545,12 @@ getde() { esac if [ -n "$DISPLAY" ] && [ -z "$de" ]; then - de="$(xprop -root | awk '/KDE_SESSION_VERSION|^_MUFFIN|xfce4|xfce5/' 2>/dev/null)" + de="$(xprop -root | awk '/KDE_SESSION_VERSION|^_MUFFIN|xfce4|xfce5/')" case "$de" in "KDE_SESSION_VERSION"*) de="KDE${de/* = }" ;; *"TDE_FULL_SESSION"*) de="Trinity" ;; - *"MUFFIN"*) de="$(cinnamon --version 2>/dev/null)"; de="${de:-Cinnamon}" ;; + *"MUFFIN"*) de="$(cinnamon --version)"; de="${de:-Cinnamon}" ;; *"xfce4"*) de="XFCE4" ;; *"xfce5"*) de="XFCE5" ;; esac @@ -547,8 +563,8 @@ getde() { getwm() { if [ -n "$DISPLAY" ] && [ "$os" != "Mac OS X" ]; then - id="$(xprop -root -notype | awk '$1=="_NET_SUPPORTING_WM_CHECK:"{print $5}' 2>/dev/null)" - wm="$(xprop -id "$id" -notype -f _NET_WM_NAME 8t 2>/dev/null)" + id="$(xprop -root -notype | awk '$1=="_NET_SUPPORTING_WM_CHECK:"{print $5}')" + wm="$(xprop -id "$id" -notype -f _NET_WM_NAME 8t)" wm="${wm/*_NET_WM_NAME = }" wm="${wm/\"}" wm="${wm/\"*}" @@ -589,28 +605,28 @@ getwmtheme() { ;; "Compiz" | "Mutter" | "GNOME Shell" | "Gala") - if type -p gsettings >/dev/null 2>&1; then + if type -p gsettings >/dev/null; then wmtheme="$(gsettings get org.gnome.shell.extensions.user-theme name)" [ -z "${wmtheme//\'}" ] && \ wmtheme="$(gsettings get org.gnome.desktop.wm.preferences theme)" - elif type -p gconftool-2 >/dev/null 2>&1; then + elif type -p gconftool-2 >/dev/null; then wmtheme="$(gconftool-2 -g /apps/metacity/general/theme)" fi ;; "Metacity"*) if [ "$de" == "Deepin" ]; then - wmtheme="$(gsettings get com.deepin.wrap.gnome.desktop.wm.preferences theme 2>/dev/null)" + wmtheme="$(gsettings get com.deepin.wrap.gnome.desktop.wm.preferences theme)" else - wmtheme="$(gconftool-2 -g /apps/metacity/general/theme 2>/dev/null)" + wmtheme="$(gconftool-2 -g /apps/metacity/general/theme)" fi ;; "E17" | "Enlightenment") - if type -p eet >/dev/null 2>&1; then + if type -p eet >/dev/null; then wmtheme="$(eet -d "$HOME/.e/e/config/standard/e.cfg" config | awk '/value \"file\" string.*.edj/ {print $4}')" wmtheme="${wmtheme##*/}" wmtheme="${wmtheme%.*}" @@ -673,7 +689,7 @@ getwmtheme() { path="/proc/registry/HKEY_CURRENT_USER/Software/Microsoft" path+="/Windows/CurrentVersion/Themes/CurrentTheme" - wmtheme="$(head -n1 "$path" 2>/dev/null)" + wmtheme="$(head -n1 "$path")" wmtheme="${wmtheme##*\\}" wmtheme="${wmtheme%.*}" ;; @@ -845,6 +861,24 @@ getcpu() { cpu="$cpu @ ${speed}GHz" ;; + + "Haiku") + cpu="$(sysinfo -cpu | awk -F '\\"' '/CPU #0/ {print $2}')" + cpu="${cpu/@*}" + speed="$(sysinfo -cpu | awk '/running at/ {print $NF; exit}')" + speed="${speed/MHz}" + speed="$((speed / 100))" + cores="$(sysinfo -cpu | grep -c 'CPU #')" + + # Fix for speed under 1ghz + if [ -z ] "${speed:1}"; then + speed="0.${speed}" + else + speed="${speed:0:1}.${speed:1}" + fi + + cpu="$cpu @ ${speed}GHz" + ;; esac # Remove uneeded patterns from cpu output @@ -899,7 +933,7 @@ getcpu_usage() { cpu_usage="${cpu_usage//[[:space:]]}" ;; - "Linux" | "Mac OS X" | "iPhone OS" | "BSD" | "Solaris") + "Linux" | "Mac OS X" | "iPhone OS" | "BSD" | "Solaris" | "GNU") # Get cores if unset if [ -z "$cores" ]; then case "$os" in @@ -929,12 +963,21 @@ getcpu_usage() { getgpu() { case "$os" in - "Linux") + "Linux" | "GNU") # Use cache if it exists if [ -f "/tmp/neofetch/gpu" ]; then source "/tmp/neofetch/gpu" else - gpu="$(PATH="/sbin:$PATH" lspci -mm | awk -F '\\"|\\" \\"' '/3D|VGA/ {print $3 " " $4}')" + bdf_number="$(PATH="/sbin:$PATH" lspci -k | grep -A2 'VGA' | grep -B2 'Kernel driver in use' | awk '/^\w/ {print $1}')" + + if [ -z "$bdf_number" ]; then + # Fallback if no kernel driver is in use + gpu="$(PATH="/sbin:$PATH" lspci -mm | awk -F '\\"|\\" \\"' '/3D|VGA/ {print $3 " " $4}')" + + else + # Find the currently used GPU by its BDF + gpu="$(PATH="/sbin:$PATH" lspci -mm | awk -v bdf_number="$bdf_number" -F '\\"|\\" \\"' '$0 ~ bdf_number {print $3 " " $4}')" + fi case "$gpu" in intel*) gpu="Intel Integrated Graphics" ;; @@ -1009,7 +1052,7 @@ getgpu() { "BSD" | "Solaris") case "$distro" in "FreeBSD"* | "DragonFlyBSD"* | "PacBSD"*) - gpu="$(pciconf -lv 2>/dev/null | grep -B 4 "VGA" | grep "device")" + gpu="$(pciconf -lv | grep -B 4 "VGA" | grep "device")" gpu="${gpu/*device*= }" gpu="${gpu//\'}" ;; @@ -1025,6 +1068,10 @@ getgpu() { gpu="$(wmic path Win32_VideoController get caption /value)" gpu="${gpu/Caption'='}" ;; + + "Haiku") + gpu="$(listdev | grep -A2 -e 'device Display controller' | awk -F':' '/device beef/ {print $2}')" + ;; esac if [ "$gpu_brand" == "off" ]; then @@ -1040,7 +1087,7 @@ getgpu() { getmemory() { case "$os" in - "Linux" | "Windows") + "Linux" | "Windows" | "GNU") # MemUsed = Memtotal + Shmem - MemFree - Buffers - Cached - SReclaimable # Source: https://github.com/KittyKatt/screenFetch/issues/386#issuecomment-249312716 while IFS=":" read -r a b; do @@ -1085,6 +1132,12 @@ getmemory() { memfree="$(($(sar -r 1 1 | tail -1 | awk 'BEGIN {FS=" "} {print $2}') / 1024))" memused="$((memtotal - memfree))" ;; + + "Haiku") + memtotal="$(($(sysinfo -mem | awk -F '\\/ |)' '{print $2; exit}') / 1024 / 1024))" + memused="$(sysinfo -mem | awk -F '\\/|)' '{print $2; exit}')" + memused="$((${memused/max} / 1024 / 1024))" + ;; esac memory="${memused}MB / ${memtotal}MB" @@ -1106,13 +1159,13 @@ getsong() { case "${player/*\/}" in "mpd"*) - song="$(mpc current 2>/dev/null)" - state="$(mpc | awk -F '\\[|\\]' '/\[/ {printf $2}' 2>/dev/null)" + song="$(mpc current)" + state="$(mpc | awk -F '\\[|\\]' '/\[/ {printf $2}')" ;; "cmus"*) IFS=$'\n' - song=($(cmus-remote -Q | grep "tag artist \|tag title \|status" 2>/dev/null | sort)) + song=($(cmus-remote -Q | grep "tag artist \|tag title \|status" | sort)) state="${song[0]/status }" artist="${song[1]/tag artist }" title="${song[2]/tag title }" @@ -1120,8 +1173,8 @@ getsong() { ;; "mocp"*) - song="$(mocp -Q "%artist - %song" 2>/dev/null)" - state="$(mocp -Q "%state" 2>/dev/null)" + song="$(mocp -Q "%artist - %song")" + state="$(mocp -Q "%state")" ;; "spotify"*) @@ -1147,8 +1200,8 @@ getsong() { ;; "google play"*) - song="$(gpmdp-remote current 2>/dev/null)" - state="$(gpmdp-remote status 2>/dev/null)" + song="$(gpmdp-remote current)" + state="$(gpmdp-remote status)" ;; "itunes"*) @@ -1220,8 +1273,8 @@ getsong() { getresolution() { case "$os" in - "Linux" | "BSD" | "Solaris") - if type -p xrandr >/dev/null 2>&1; then + "Linux" | "BSD" | "Solaris" | "GNU") + if type -p xrandr >/dev/null; then case "$refresh_rate" in "on") resolution="$(xrandr --nograb --current | awk 'match($0,/[0-9]*\.[0-9]*\*/) {printf $1 " @ " substr($0,RSTART,RLENGTH) "Hz, "}')" ;; "off") resolution="$(xrandr --nograb --current | awk '/\*/ {printf $1 ", "}')" ;; @@ -1229,14 +1282,14 @@ getresolution() { resolution="${resolution//\*}" resolution="${resolution//\.[0-9][0-9]}" - elif type -p xdpyinfo >/dev/null 2>&1; then - resolution="$(xdpyinfo 2>/dev/null | awk '/dimensions:/ {printf $2}')" + elif type -p xdpyinfo >/dev/null; then + resolution="$(xdpyinfo | awk '/dimensions:/ {printf $2}')" fi ;; "Mac OS X") - if type -p screenresolution >/dev/null 2>&1; then - resolution="$(screenresolution get 2>&1 | awk '/Display/ {printf $6 "Hz, "}')" + if type -p screenresolution >/dev/null; then + resolution="$(screenresolution get | awk '/Display/ {printf $6 "Hz, "}')" resolution="${resolution//x??@/ @ }" else @@ -1259,15 +1312,23 @@ getresolution() { ;; "Windows") - width="$(wmic path Win32_VideoController get CurrentHorizontalResolution /value 2>/dev/null)" + width="$(wmic path Win32_VideoController get CurrentHorizontalResolution /value)" width="${width/CurrentHorizontalResolution'='/}" - height="$(wmic path Win32_VideoController get CurrentVerticalResolution /value 2>/dev/null)" + height="$(wmic path Win32_VideoController get CurrentVerticalResolution /value)" height="${height/CurrentVerticalResolution'='/}" [ "$width" ] && \ resolution="${width}x${height}" ;; + + "Haiku") + resolution="$(screenmode | awk -F ' |, ' '{printf $2 "x" $3 " @ " $6 $7}')" + + case "$refresh_rate" in + "off") resolution="${resolution/ @*}" ;; + esac + ;; esac resolution="${resolution%,*}" @@ -1329,18 +1390,18 @@ getstyle() { ;; *"Cinnamon") - if type -p gsettings >/dev/null 2>&1; then + if type -p gsettings >/dev/null; then gtk3theme="$(gsettings get org.cinnamon.desktop.interface "$gsettings")" gtk2theme="${gtk3theme}" fi ;; "Gnome"* | "Unity"* | "Budgie"*) - if type -p gsettings >/dev/null 2>&1; then + if type -p gsettings >/dev/null; then gtk3theme="$(gsettings get org.gnome.desktop.interface "$gsettings")" gtk2theme="${gtk3theme}" - elif type -p gconftool-2 >/dev/null 2>&1; then + elif type -p gconftool-2 >/dev/null; then gtk2theme="$(gconftool-2 -g /desktop/gnome/interface/"$gconf")" fi ;; @@ -1351,7 +1412,7 @@ getstyle() { ;; "Xfce"*) - type -p xfconf-query >/dev/null 2>&1 && \ + type -p xfconf-query >/dev/null && \ gtk2theme="$(xfconf-query -c xsettings -p "$xfconf")" ;; esac @@ -1376,7 +1437,7 @@ getstyle() { if [ -f "$XDG_CONFIG_HOME/gtk-3.0/settings.ini" ]; then gtk3theme="$(grep "^[^#]*$name" "$XDG_CONFIG_HOME/gtk-3.0/settings.ini")" - elif type -p gsettings >/dev/null 2>&1; then + elif type -p gsettings >/dev/null; then gtk3theme="$(gsettings get org.gnome.desktop.interface $gsettings)" elif [ -f "/usr/share/gtk-3.0/settings.ini" ]; then @@ -1557,7 +1618,7 @@ gettermfont() { getdisk() { # df flags case "$os" in - "Linux" | "iPhone OS" | "Windows" | "Solaris") + "Linux" | "iPhone OS" | "Windows" | "Solaris" | "GNU") df_flags="-h -l --total" df_dir="total" @@ -1567,7 +1628,7 @@ getdisk() { esac ;; - "Mac OS X" | "BSD") + "Mac OS X" | "BSD" | "Haiku") case "$distro" in "FreeBSD"* | *"OS X"* | "Mac"* ) df_flags="-l -H /" @@ -1580,7 +1641,7 @@ getdisk() { esac # Get the disk info - disk="$(df $df_flags 2>/dev/null | awk -v dir="$df_dir" '$0 ~ dir {print $2 ":" $3 ":" $5}')" + disk="$(df $df_flags | awk -v dir="$df_dir" '$0 ~ dir {print $2 ":" $3 ":" $5}')" # Format the output disk_used="${disk#*:}" @@ -1685,6 +1746,12 @@ getbattery() { [ "$battery" ] && \ battery+="%" ;; + + "Haiku") + battery0full="$(awk -F '[^0-9]*' 'NR==2 {print $4}' /dev/power/acpi_battery/0)" + battery0now="$(awk -F '[^0-9]*' 'NR==5 {print $4}' /dev/power/acpi_battery/0)" + battery="$((battery0full / battery0now * 100))%" + ;; esac case "$battery_state" in @@ -1720,20 +1787,25 @@ getlocalip() { "Windows") localip="$(ipconfig | awk -F ': ' '/IPv4 Address/ {printf $2}')" ;; + + "Haiku") + localip="$(ifconfig | awk -F ': ' '/Bcast/ {print $2}')" + localip="${localip/', Bcast'}" + ;; esac } getpublicip() { - if type -p dig >/dev/null 2>&1; then - publicip="$(dig +time=1 +tries=1 +short myip.opendns.com @resolver1.opendns.com 2>/dev/null)" + if type -p dig >/dev/null; then + publicip="$(dig +time=1 +tries=1 +short myip.opendns.com @resolver1.opendns.com)" fi - if [ -z "$publicip" ] && type -p curl >/dev/null 2>&1; then - publicip="$(curl --max-time 10 -w '\n' "$public_ip_host" 2>/dev/null)" + if [ -z "$publicip" ] && type -p curl >/dev/null; then + publicip="$(curl --max-time 10 -w '\n' "$public_ip_host")" fi - if [ -z "$publicip" ] && type -p wget >/dev/null 2>&1; then - publicip="$(wget -T 10 -qO- "$public_ip_host" 2>/dev/null; printf "%s")" + if [ -z "$publicip" ] && type -p wget >/dev/null; then + publicip="$(wget -T 10 -qO- "$public_ip_host"; printf "%s")" fi } @@ -1752,7 +1824,7 @@ getusers() { getbirthday() { case "$os" in - "linux" | "iPhone OS") + "Linux" | "GNU" | "iPhone OS") birthday="$(ls -alct --full-time / | awk '/lost\+found|private/ {printf $6 " " $7}')" date_cmd="$(date -d"$birthday" "$birthday_format")" ;; @@ -1800,6 +1872,11 @@ getbirthday() { birthday="$(ls -alct --full-time /var/sadm/system/logs/install_log | awk '{printf $6 " " $7}')" date_cmd="$(date -d"$birthday" "$birthday_format")" ;; + + "Haiku") + birthday="$(ls -alctd --full-time /boot | awk '{printf $6 " " $7}')" + date_cmd="$(date -d"$birthday" "$birthday_format")" + ;; esac # Strip seconds from time output @@ -1858,19 +1935,19 @@ getcols() { getwallpaper() { case "$os" in "Linux" | "BSD") - if type -p feh >/dev/null 2>&1 && [ -f "$HOME/.fehbg" ]; then + if type -p feh >/dev/null && [ -f "$HOME/.fehbg" ]; then img="$(awk -F\' '/feh/ {printf $2}' "$HOME/.fehbg")" - elif type -p nitrogen >/dev/null 2>&1; then + elif type -p nitrogen >/dev/null; then img="$(awk -F'=' '/file/ {printf $2;exit;}' "$XDG_CONFIG_HOME/nitrogen/bg-saved.cfg")" - elif type -p gsettings >/dev/null 2>&1; then + elif type -p gsettings >/dev/null; then # Get DE if user has disabled the function. [ -z "$de" ] && getde case "$de" in - "MATE"*) img="$(gsettings get org.mate.background picture-filename 2>/dev/null)" ;; - *) img="$(gsettings get org.gnome.desktop.background picture-uri 2>/dev/null)" ;; + "MATE"*) img="$(gsettings get org.mate.background picture-filename)" ;; + *) img="$(gsettings get org.gnome.desktop.background picture-uri)" ;; esac # Strip quotes etc from the path. @@ -1989,7 +2066,7 @@ getimage() { type -p convert >/dev/null 2>&1 || image="ascii" case "$image" in - "wall") getwallpaper ;; + "wall") getwallpaper 2>/dev/null ;; "ascii") getascii; return ;; *) if [ -d "$image" ]; then @@ -2223,7 +2300,7 @@ displayimage() { # appearing in specific terminal emulators. sleep 0.05 printf "%b%s\n" "0;1;$xoffset;$yoffset;$width;$height;;;;;$img\n4;\n3;" |\ - $w3m_img_path -bg "$background_color" 2>/dev/null || padding="\033[0C" + $w3m_img_path -bg "$background_color" >/dev/null & 2>&1 || padding="\033[0C" ;; "iterm2") @@ -2454,11 +2531,11 @@ colors() { ascii_distro="redhat" ;; - "Kogaion"* | "Elementary"* | "GalliumOS"* | "Rosa"* | "OpenWrt"*) + "Kogaion"* | "Elementary"* | "GalliumOS"* | "Rosa"* | "OpenWrt"* | "Netrunner"*) setcolors 4 7 ;; - "Fedora"* | "Sabayon"* | "Frugalware"* | "Exherbo"*) + "Fedora"* | "Korora"* | "Sabayon"* | "Frugalware"* | "Exherbo"*) setcolors 4 7 1 ;; @@ -2561,9 +2638,26 @@ colors() { setcolors 1 2 4 3 ;; - "Raspbian"* | *) + "Haiku"*) + setcolors 2 0 + ;; + + "Raspbian"*) setcolors 2 1 ;; + + "Linux") + setcolors fg 8 3 + ;; + + *) + case "$os" in + "Linux") + ascii_distro="linux" + setcolors fg 8 3 + ;; + esac + ;; esac # Overwrite distro colors if '$ascii_colors' doesn't @@ -2888,7 +2982,7 @@ dynamicprompt() { fi # Add some padding - printf "\n\n" + printf "\n\n\n" } # }}} @@ -3254,7 +3348,7 @@ main() { fi # Print the info - printinfo + printinfo 2>/dev/null # Prompt calculation if [ "$image" != "off" ]; then