#!/usr/bin/env bash

#   z0mbi3
#   https://github.com/gh0stzk/dotfiles
#   z0mbi3.zk@protonmail.com
#   This script is a modified version of https://github.com/Mangeshrex/rxfetch

esc=""
rst="${esc}[0m"


c1="[38;2;177;196;195m";   c2="[38;2;161;188;185m";   c3="[38;2;148;182;175m";   c4="[38;2;189;202;204m"
c5="[38;2;191;203;205m";   c6="[38;2;146;169;175m";   c7="[38;2;89;125;137m";   c8="[38;2;123;152;159m"
c9="[38;2;179;197;197m";   c10="[38;2;182;198;199m";   c11="[38;2;190;203;204m";   c12="[38;2;175;195;194m"
c13="[38;2;200;207;211m";   c14="[38;2;192;204;206m";   c15="[38;2;183;199;200m";   c16="[38;2;186;200;201m"
c17="[38;2;86;108;140m";   c18="[38;2;54;79;121m";   c19="[38;2;53;78;120m";   c20="[38;2;55;80;121m"
c21="[38;2;57;81;122m";   c22="[38;2;56;80;122m";   c23="[38;2;54;79;120m";   c24="[38;2;65;89;128m"
c25="[38;2;192;204;205m";   c26="[38;2;79;119;130m";   c27="[38;2;89;123;137m";   c28="[38;2;181;198;198m"
c29="[38;2;183;200;200m";   c30="[38;2;84;125;133m";   c31="[38;2;83;124;132m";   c32="[38;2;157;173;119m"
c33="[38;2;180;188;115m";   c34="[38;2;181;189;116m";   c35="[38;2;180;189;116m";   c36="[38;2;188;201;203m"
c37="[38;2;170;181;117m";   c38="[38;2;58;83;123m";   c39="[38;2;59;84;123m";   c40="[38;2;57;82;123m"
c41="[38;2;50;75;119m";   c42="[38;2;187;204;202m";   c43="[38;2;190;202;205m";   c44="[38;2;178;197;196m"
c45="[38;2;183;200;199m";   c46="[38;2;186;203;201m";   c47="[38;2;58;83;125m";   c48="[38;2;56;82;123m"
c49="[38;2;150;162;116m";   c50="[38;2;179;187;115m";   c51="[38;2;205;225;163m";   c52="[38;2;214;238;180m"
c53="[38;2;214;239;181m";   c54="[38;2;211;235;175m";   c55="[38;2;179;186;113m";   c56="[38;2;185;192;114m"
c57="[38;2;48;74;123m";   c58="[38;2;54;78;122m";   c59="[38;2;86;128;134m";   c60="[38;2;89;126;136m"
c61="[38;2;194;204;207m";   c62="[38;2;185;202;201m";   c63="[38;2;55;80;123m";   c64="[38;2;177;187;115m"
c65="[38;2;211;234;173m";   c66="[38;2;219;247;190m";   c67="[38;2;195;210;140m";   c68="[38;2;185;196;122m"
c69="[38;2;184;192;118m";   c70="[38;2;181;189;115m";   c71="[38;2;182;190;116m";   c72="[38;2;185;195;121m"
c73="[38;2;189;199;127m";   c74="[38;2;221;249;192m";   c75="[38;2;223;252;195m";   c76="[38;2;178;185;110m"
c77="[38;2;187;194;115m";   c78="[38;2;49;75;123m";   c79="[38;2;61;82;127m";   c80="[38;2;54;79;123m"
c81="[38;2;178;187;115m";   c82="[38;2;180;188;114m";   c83="[38;2;130;124;56m";   c84="[38;2;115;105;38m"
c85="[38;2;114;103;37m";   c86="[38;2;139;136;66m";   c87="[38;2;173;179;105m";   c88="[38;2;174;180;106m"
c89="[38;2;167;171;98m";   c90="[38;2;114;102;36m";   c91="[38;2;111;99;33m";   c92="[38;2;184;194;119m"
c93="[38;2;188;195;115m";   c94="[38;2;168;196;189m";   c95="[38;2;171;193;192m";   c96="[38;2;67;98;126m"
c97="[38;2;64;95;126m";   c98="[38;2;180;187;114m";   c99="[38;2;81;57;34m";   c100="[38;2;51;19;10m"
c101="[38;2;107;83;77m";   c102="[38;2;127;107;101m";   c103="[38;2;126;111;77m";   c104="[38;2;123;114;42m"
c105="[38;2;112;100;36m";   c106="[38;2;96;77;29m";   c107="[38;2;98;81;37m";   c108="[38;2;128;107;103m"
c109="[38;2;121;100;94m";   c110="[38;2;48;15;7m";   c111="[38;2;42;7;3m";   c112="[38;2;188;199;121m"
c113="[38;2;188;194;115m";   c114="[38;2;59;92;127m";   c115="[38;2;70;97;129m";   c116="[38;2;177;187;114m"
c117="[38;2;179;187;114m";   c118="[38;2;50;18;9m";   c119="[38;2;66;36;29m";   c120="[38;2;73;45;37m"
c121="[38;2;94;74;39m";   c122="[38;2;123;115;42m";   c123="[38;2;139;135;64m";   c124="[38;2;164;167;101m"
c125="[38;2;150;153;94m";   c126="[38;2;30;30;30m";   c127="[38;2;31;28;28m";   c128="[38;2;50;16;8m"
c129="[38;2;191;193;117m";   c130="[38;2;185;194;118m";   c131="[38;2;186;196;119m";   c132="[38;2;183;193;117m"
c133="[38;2;106;111;68m";   c134="[38;2;0;0;1m";   c135="[38;2;0;0;0m";   c136="[38;2;16;16;10m"
c137="[38;2;189;197;120m";   c138="[38;2;188;196;119m";   c139="[38;2;192;199;118m";   c140="[38;2;72;116;133m"
c141="[38;2;82;122;136m";   c142="[38;2;138;170;107m";   c143="[38;2;178;187;114m";   c144="[38;2;136;132;58m"
c145="[38;2;121;114;40m";   c146="[38;2;163;169;101m";   c147="[38;2;221;247;187m";   c148="[38;2;224;250;189m"
c149="[38;2;222;249;188m";   c150="[38;2;212;234;172m";   c151="[38;2;119;110;36m";   c152="[38;2;125;118;44m"
c153="[38;2;165;209;157m";   c154="[38;2;209;235;178m";   c155="[38;2;61;65;50m";   c156="[38;2;6;3;2m"
c157="[38;2;3;0;0m";   c158="[38;2;2;0;0m";   c159="[38;2;190;193;118m";   c160="[38;2;1;0;0m"
c161="[38;2;3;4;4m";   c162="[38;2;21;23;18m";   c163="[38;2;213;239;181m";   c164="[38;2;219;247;188m"
c165="[38;2;40;2;0m";   c166="[38;2;49;15;7m";   c167="[38;2;49;16;8m";   c168="[38;2;52;10;3m"
c169="[38;2;0;4;3m";   c170="[38;2;2;4;3m";   c171="[38;2;164;184;139m";   c172="[38;2;213;236;179m"
c173="[38;2;230;88;84m";   c174="[38;2;236;34;49m";   c175="[38;2;235;32;48m";   c176="[38;2;231;31;47m"
c177="[38;2;144;19;29m";   c178="[38;2;23;26;19m";   c179="[38;2;211;236;179m";   c180="[38;2;193;216;164m"
c181="[38;2;3;4;3m";   c182="[38;2;51;16;8m";   c183="[38;2;48;15;8m";   c184="[38;2;48;18;9m"
c185="[38;2;51;7;1m";   c186="[38;2;45;4;3m";   c187="[38;2;41;11;8m";   c188="[38;2;42;11;8m"
c189="[38;2;40;14;7m";   c190="[38;2;55;21;12m";   c191="[38;2;179;190;143m";   c192="[38;2;224;248;189m"
c193="[38;2;237;161;133m";   c194="[38;2;251;42;57m";   c195="[38;2;255;122;135m";   c196="[38;2;255;255;255m"
c197="[38;2;248;248;243m";   c198="[38;2;131;122;43m";   c199="[38;2;121;114;41m";   c200="[38;2;44;11;8m"
c201="[38;2;35;6;8m";   c202="[38;2;154;95;8m";   c203="[38;2;34;5;8m";   c204="[38;2;44;3;3m"
c205="[38;2;163;91;2m";   c206="[38;2;152;93;8m";   c207="[38;2;151;93;8m";   c208="[38;2;48;14;7m"
c209="[38;2;46;12;7m";   c210="[38;2;10;3;1m";   c211="[38;2;37;12;6m";   c212="[38;2;51;17;8m"
c213="[38;2;65;17;11m";   c214="[38;2;85;19;17m";   c215="[38;2;102;56;27m";   c216="[38;2;127;117;42m"
c217="[38;2;113;106;37m";   c218="[38;2;157;94;7m";   c219="[38;2;149;89;7m";   c220="[38;2;148;90;8m"
c221="[38;2;158;98;8m";   c222="[38;2;43;11;8m"

#colors
CBK=$(tput setaf 0)
CRE=$(tput setaf 1)
CGR=$(tput setaf 2)
CYE=$(tput setaf 3)
CBL=$(tput setaf 4)

CMA=$(tput setaf 5)
CCY=$(tput setaf 6)
CWH=$(tput setaf 7)
CBD=$(tput bold)
CNC=$(tput sgr0)

get_init() {
	if pidof -q systemd; then
		echo 'systemd'
	elif [ -f '/sbin/openrc' ]; then
		echo 'openrc'
	elif [ -f '/sbin/dinit' ]; then
		echo 'dinit'
	else
		cut -d ' ' -f 1 /proc/1/comm
	fi
}

get_uptime() {
		uptime -p | sed 's/up//'
}

get_pkg_count() {
	package_managers=('xbps-install' 'apk' 'port' 'apt' 'pacman' 'nix' 'dnf' 'rpm' 'emerge' 'eopkg')
	for package_manager in "${package_managers[@]}"; do
		if command -v "$package_manager" 2>/dev/null >&2; then
			case "$package_manager" in
			xbps-install) xbps-query -l | wc -l ;;
			apk) apk search | wc -l ;;
			apt) if [ "$kernel" != "Darwin" ]; then 
					echo $(($(apt list --installed 2>/dev/null | wc -l) - 1))
				 else
					echo 0
				 fi
				 ;;
			pacman) pacman -Q | wc -l ;;
			nix) nix-env -qa --installed '*' | wc -l ;;
			dnf) dnf list installed | wc -l ;;
			rpm) rpm -qa | wc -l ;;
			emerge) qlist -I | wc -l ;;
			port) port installed 2>/dev/null | wc -l | awk 'NR==1{print $1}' ;;
			eopkg) eopkg li | wc -l ;;
			esac

			# if a package manager is found return from the function
			return
		fi
	done
	echo 0
}

# Get package information formatted
get_package_info() {
	pkg_count=$(get_pkg_count)

	if [ "$pkg_count" -ne 0 ]; then
		echo -n "$pkg_count"
	else
		echo "Unknown"
	fi
}

distro() {
		awk -F '"' '/PRETTY_NAME/ { print $2 }' /etc/os-release
}

storage() {
    df -h --output=used / | awk 'NR == 2 { print $1 }'
}

# Get Memory usage
get_mem () {
  free --mega | awk 'NR == 2 { print $3" MB" }'
}

# Get DE/WM
# Reference: https://github.com/unixporn/robbb/blob/master/fetcher.sh
get_de_wm() {
	wm="${XDG_CURRENT_DESKTOP#*:}"
	[ "$wm" ] || wm="$DESKTOP_SESSION"

	# for most WMs
	[ ! "$wm" ] && [ "$DISPLAY" ] && command -v xprop >/dev/null && {
		id=$(xprop -root -notype _NET_SUPPORTING_WM_CHECK 2>/dev/null)
		id=${id##* }
		wm=$(xprop -id "$id" -notype -len 100 -f _NET_WM_NAME 8t 2>/dev/null | grep '^_NET_WM_NAME' | cut -d\" -f 2)
	}

	# for non-EWMH WMs
	[ ! "$wm" ] || [ "$wm" = "LG3D" ] && {
		wms=('sway' 'kiwmi' 'wayfire' 'sowm' 'catwm' 'fvwm' 'dwm' '2bwm' 'monsterwm' 'tinywm' 'xmonad')
		for current_wm in "${wms[@]}"; do
			if pgrep -x "$current_wm" 2>/dev/null >&2; then
				wm="${current_wm}";
				break
			fi
		done
	}

	echo "${wm:-unknown}"
}

cat << EOF
                   
                   ${CBD}${c1}█${c2}█
            ${c3}█${c4}█${c5}█${c4}█${c6}█${c7}█${c8}█${c9}█${c10}█${c11}█${c12}█
      ${c13}█${c14}█  ${c15}█${c16}█${c17}█${c18}█${c19}█${c19}█${c20}█${c21}█${c22}█${c19}█${c19}█${c23}█${c24}█${c36}█${c25}█${c26}█${c27}█
        ${c28}█${c29}█${c30}█${c31}█${c32}█${c33}█${c34}█${c34}█${c34}█${c34}█${c34}█${c34}█${c34}█${c35}█${c37}█${c38}█${c39}█${c40}█${c41}█${c42}█${c43}█
      ${c5}█${c44}█${c45}█${c46}█${c47}█${c48}█${c49}█${c50}█${c51}█${c52}█${c53}█${c53}█${c53}█${c53}█${c53}█${c53}█${c54}█${c55}█${c56}█${c57}█${c58}█${c59}█${c60}█       ${CMA}os${CWH}     $(distro)
      ${c61}█${c62}█${c38}█${c63}█${c64}█${c34}█${c65}█${c66}█${c67}█${c68}█${c69}█${c70}█${c70}█${c70}█${c71}█${c72}█${c73}█${c74}█${c75}█${c76}█${c77}█${c78}█${c79}█       ${CGR}ker${CWH}    $(uname -r)
      ${c61}█${c62}█${c40}█${c80}█${c81}█${c82}█${c83}█${c84}█${c85}█${c84}█${c86}█${c87}█${c88}█${c88}█${c89}█${c90}█${c85}█${c85}█${c91}█${c92}█${c93}█${c78}█${c41}█${c94}█${c95}█     ${CCY}pkgs${CWH}   $(get_package_info)
        ${c96}█${c97}█${c81}█${c98}█${c99}█${c100}█${c101}█${c102}█${c103}█${c104}█${c105}█${c106}█${c107}█${c108}█${c109}█${c110}█${c111}█${c112}█${c113}█${c114}█${c115}█       ${CBL}sh${CWH}     ${SHELL##*/}  ${CYE}󰮯 ${CYE} ${CGR}󰊠 ${CGR} ${CBL}󰊠 ${CBL} ${CRE}󰊠 ${CRE} ${CCY}󰊠 ${CCY} ${CMA}󰊠 ${CMA}
          ${c116}█${c117}█${c99}█${c118}█${c119}█${c120}█${c121}█${c122}█${c123}█${c124}█${c125}█${c126}█${c127}█${c128}█${c111}█${c112}█${c129}█         ${CYE}ram${CWH}    $(get_mem)
          ${c116}█${c70}█${c130}█${c131}█${c131}█${c132}█${c133}█${c134}█${c135}█${c135}█${c136}█${c137}█${c138}█${c131}█${c139}█${c140}█${c141}█         ${CRE}de/wm${CWH}  $(get_de_wm)
            ${c142}█${c143}█${c144}█${c145}█${c146}█${c147}█${c148}█${c149}█${c150}█${c151}█${c152}█${c71}█${c159}█           ${CMA}init${CWH}   $(get_init)
            ${c153}█${c154}█${c155}█${c156}█${c157}█${c158}█${c160}█${c135}█${c135}█${c161}█${c162}█${c163}█${c164}█${c165}█${c166}█${c167}█${c168}█       ${CBL}disk${CWH}   $(storage) Used
          ${c169}█${c170}█${c171}█${c172}█${c173}█${c174}█${c175}█${c176}█${c177}█${c157}█${c178}█${c179}█${c180}█${c181}█${c181}█${c135}█${c135}█${c182}█${c183}█${c184}█${c185}█     ${CYE}up${CWH}    $(get_uptime)
      ${c186}█${c187}█${c187}█${c188}█${c135}█${c135}█${c189}█${c190}█${c191}█${c192}█${c193}█${c194}█${c195}█${c196}█${c197}█${c198}█${c199}█${c135}█${c135}█${c200}█${c201}█${c202}█${c202}█${c203}█${c204}█
    ${c205}█${c206}█${c207}█${c207}█${c207}█${c202}█${c208}█${c209}█${c210}█${c135}█${c211}█${c212}█${c213}█${c214}█${c215}█${c216}█${c217}█${c135}█${c135}█${c135}█${c135}█${c218}█${c219}█${c220}█${c220}█${c207}█${c221}█${c222}█${c168}█${rst}

EOF
