Skip to content

Instantly share code, notes, and snippets.

@rs4231199
Created January 4, 2022 15:28
Show Gist options
  • Save rs4231199/06be7de6e9c29f8627f8cc0b45700f77 to your computer and use it in GitHub Desktop.
Save rs4231199/06be7de6e9c29f8627f8cc0b45700f77 to your computer and use it in GitHub Desktop.

Revisions

  1. rs4231199 created this gist Jan 4, 2022.
    190 changes: 190 additions & 0 deletions nerdfetch_custom.sh
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,190 @@
    #!/bin/sh

    ## OS/ENVIRONMENT INFO DETECTION

    ostype="$(uname)"

    if command -v getprop > /dev/null; then
    linuxtype=android
    else
    linuxtype=none
    fi
    kernel="$(echo $(uname -r) | cut -d'-' -f1-1)"
    case $ostype in
    "Linux"*)
    if [ $linuxtype = android ]; then
    host=$(hostname)
    USER=$(bash -c 'echo $USERNAME')
    os="Android $(getprop ro.build.version.release)"
    else
    host="$(cat /proc/sys/kernel/hostname)"
    . /etc/os-release
    if [ -f /bedrock/etc/bedrock-release ]; then
    os="$(brl version)"
    else
    os="${PRETTY_NAME}"
    fi
    fi
    shell=${SHELL##*/};;
    "Darwin"*)
    host="$(hostname -f | sed -e 's/^[^.]*\.//')"
    while IFS='<>' read -r _ _ line _; do
    case $line in
    ProductVersion)
    IFS='<>' read -r _ _ mac_version _
    break;;
    esac
    done < /System/Library/CoreServices/SystemVersion.plist
    os="macOS ${mac_version}";;
    *)
    os="Idk"
    host="host"
    esac

    ## PACKAGE MANAGER AND PACKAGES DETECTION

    manager=$(which nix-env pkg yum zypper dnf rpm apt brew port xbps-query emerge cave apk kiss pmm /usr/sbin/slackpkg bulge yay pacman paru cpm pmm eopkg 2>/dev/null)
    manager=${manager##*/}
    case $manager in
    cpm) packages="$(cpm C)";;
    brew) packages="$(printf '%s\n' "$(brew --cellar)/"* | wc -l | tr -d '[:space:]')";;
    port) packages="$(port installed | wc -l)";;
    apt) packages="$(dpkg-query -f '${binary:Package}\n' -W | wc -l)";;
    rpm) packages="$(rpm -qa --last| wc -l)";;
    yum) packages="$(yum list installed | wc -l)";;
    dnf) packages="$(dnf list installed | wc -l)";;
    zypper) packages="$(zypper se | wc -l)";;
    pacman) packages="$(pacman -Q | wc -l)";;
    yay) packages="$(yay -Q | wc -l)";;
    paru) packages="$(paru -Q | wc -l)";;
    kiss) packages="$(kiss list | wc -l)";;
    pkg|emerge) packages="$(qlist -I | wc -l)";;
    cave) packages="$(cave show installed-slots | wc -l)";;
    xbps-query) packages="$(xbps-query -l | wc -l)";;
    nix-env) packages="$(nix-store -q --requisites /run/current-system/sw | wc -l)";;
    apk) packages="$(apk list --installed | wc -l)";;
    pmm) packages="$(/bedrock/libexec/pmm pacman pmm -Q 2>/dev/null | wc -l )";;
    eopkg) packages="$(eopkg li | wc -l)";;
    /usr/sbin/slackpkg) packages="$(ls /var/log/packages | wc -l)";;
    bulge) packages="$(bulge list | wc -l)";;
    *)
    packages="$(ls /usr/bin | wc -l)"
    manager="bin";;
    esac

    ## UPTIME DETECTION

    if [ $linuxtype = android ]; then
    uptime="$(echo $(uptime -p) | cut -c 4-)"
    else
    case $ostype in
    "Linux")
    IFS=. read -r s _ < /proc/uptime;;
    *)
    s=$(sysctl -n kern.boottime)
    s=${s#*=}
    s=${s%,*}
    s=$(($(date +%s) - s));;
    esac
    d="$((s / 60 / 60 / 24))"
    h="$((s / 60 / 60 % 24))"
    m="$((s / 60 % 60))"
    # Plurals
    [ "$d" -gt 1 ] && dp=s
    [ "$h" -gt 1 ] && hp=s
    [ "$m" -gt 1 ] && mp=s
    [ "$s" -gt 1 ] && sp=s
    # Hide empty fields.
    [ "$d" = 0 ] && d=
    [ "$h" = 0 ] && h=
    [ "$m" = 0 ] && m=
    [ "$m" != "" ] && s=
    # Make the output of uptime smaller.
    [ "$d" ] && uptime="$d day$dp, "
    [ "$h" ] && uptime="$uptime$h hour$hp, "
    [ "$m" ] && uptime="$uptime$m min$mp"
    [ "$s" ] && uptime="$uptime$s sec$sp"
    uptime=${uptime%, }
    fi

    ## RAM DETECTION

    case $ostype in
    "Linux")
    while IFS=':k ' read -r key val _; do
    case $key in
    MemTotal)
    mem_used=$((mem_used + val))
    mem_full=$val;;
    Shmem) mem_used=$((mem_used + val));;
    MemFree|Buffers|Cached|SReclaimable) mem_used=$((mem_used - val));;
    esac
    done < /proc/meminfo
    mem_used=$((mem_used / 1024))
    mem_full=$((mem_full / 1024));;
    "Darwin"*)
    mem_full=$(($(sysctl -n hw.memsize) / 1024 / 1024))
    while IFS=:. read -r key val; do
    case $key in
    *' wired'*|*' active'*|*' occupied'*)
    mem_used=$((mem_used + ${val:-0}));;
    esac
    done <<-EOF
    $(vm_stat)
    EOF

    mem_used=$((mem_used * 4 / 1024));;
    *)
    mem_full="idk"
    mem_used="idk"
    esac
    memstat="${mem_used}/${mem_full} MB"
    if which dc > /dev/null 2>&1; then
    mempercent="($(echo 100 ${mem_used} \* ${mem_full} / p | dc)%)"
    fi

    ## Disk Usage
    IFS=$'\n' read -d "" -ra disks <<< "$(df -P -h /)"
    disk=${disks[1]}
    IFS=" " read -ra disk_info <<< "$disk"
    disk_perc=${disk_info[-2]/\%}
    diskstat="${disk_info[-4]/i}/${disk_info[-5]/i}${disk_perc:+ ($disk_perc%)}"


    ## DEFINE COLORS

    bold=''
    black=''
    red=''
    green=''
    yellow=''
    blue=''
    magenta=''
    cyan=''
    white=''
    grey=''
    reset=''

    ## USER VARIABLES -- YOU CAN CHANGE THESE

    lc="${reset}${bold}${magenta}" # labels
    nc="${reset}${bold}${yellow}" # user
    hn="${reset}${bold}${blue}" # hostname
    ic="${reset}${green}" # info
    c0="${reset}${grey}" # first color
    c1="${reset}${white}" # second color
    c2="${reset}${yellow}" # third color

    ## OUTPUT

    cat <<EOF
    ${c0} ___ ${nc}${USER}${red}@${reset}${hn}${host}${reset}
    ${c0} (${c1}.. ${c0}\ ${lc}${ic}${os}${reset}
    ${c0} (${c2}<> ${c0}| ${lc}${ic}${kernel}${reset}
    ${c0} /${c1}/ \\ ${c0}\\ ${lc}${ic}${packages} (${manager})${reset}
    ${c0} ( ${c1}| | ${c0}/| ${lc}${ic}${uptime}${reset}
    ${c2} _${c0}/\\ ${c1}__)${c0}/${c2}_${c0}) ${lc}${ic}${RAM}${memstat} ${mempercent}
    ${c2} \/${c0}-____${c2}\/${reset} ${lc}${ic}${diskstat}${reset}
    EOF
    # ${c2} \/${c0}-____${c2}\/${reset} ${lc} ${red}███${green}███${yellow}███${blue}███${magenta}███${cyan}███${reset}