#!/bin/bash
#shellcheck disable=SC1091
# wslu - Windows 10 linux Subsystem Utility
# Component of Windows 10 linux Subsystem Utility
# <https://github.com/wslutilities/wslu>
# Copyright (C) 2019 Patrick Wu
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

# Current utility
wslu_util_fullpath="$0"
wslu_util_name="${wslu_util_fullpath##*/}"

# Version
wslu_version=4.1.3-1
wslu_prefix="/usr"
wslu_dest_dir=""

# Speed up script by using unicode.
LC_ALL=C
LANG=C

# current state location
wslu_state_dir=${XDG_STATE_HOME:-$HOME/.local/state}/wslu
if [ ! -d "$wslu_state_dir" ]; then
	mkdir -p "$wslu_state_dir"
fi

# prevent bash -x
set +x

bash_version_full=$(bash --version | head -n 1)
bash_version_major=$(echo "$bash_version_full" | cut -d ' ' -f 4 | cut -d '.' -f 1)
bash_version_minor=$(echo "$bash_version_full" | cut -d ' ' -f 4 | cut -d '.' -f 2)

# pipeline content to pipe... if it is wslclip
if [[ "$wslu_util_name" == "wslclip" ]]; then
	if [[ -p /dev/stdin ]]; then
		PIPE=$(cat -)
	fi
fi

# conf handling module
__wsl_conf_read() {
	if [ -f /etc/wsl.conf ]; then
		tmp="$(sed -nr "/^\[${1}\]/ { :l /^${2}[ ]*=/ { s/[^=]*=[ ]*//; p; q;}; n; b l;}" /etc/wsl.conf)"
		if [ -n "$tmp" ]; then
			if [ ${#tmp} -ge 2 ]; then
				if [ "${tmp:0:1}" == '"' ] && [ "${tmp: -1}" == '"' ]; then
					echo "${tmp:1:-1}"
				elif [ "${tmp:0:1}" == "'" ] && [ "${tmp: -1}" == "'" ]; then
					echo "${tmp:1:-1}"
				else
					echo "$tmp"
				fi
			else
				echo "$tmp"
			fi
		fi
	fi
}

# checking interopability
if __wsl_conf_read interop enabled | grep false >/dev/null; then
	 echo -e "WSL Interopability is disabled and WSL Utilities won't work. Please enable it by:
	1. open /etc/wsl.conf using root or equivalent editing permission;
	2. under [interop] section, set enabled to true;
	3. restart your distribution."
	exit 1
elif grep ^disabled /proc/sys/fs/binfmt_misc/WSLInterop >/dev/null; then
	 echo -e "WSL Interopability is temporarily disabled and WSL Utilities won't work. Please enable it by:
	# echo 1 > /proc/sys/fs/binfmt_misc/WSLInterop"
	exit 1
fi

# when --verbose, verbose; when --debug, debug.
#
# They should not exist at the same time, otherwise
# the output would be too messy.
wslu_debug=""
if [ "$1" == "--verbose" ]; then
	echo -e '\e[38;5;202m\033[1m[verbose] Showing verbose output. \033(B\033[m' 1>&2
	shift
	set -x
elif [ "$1" == "--debug" ]; then
	wslu_debug="--debug"
	echo -e '\e[38;5;202m\033[1m[debug:'"${wslu_util_fullpath}"'] Showing debug output. \033(B\033[m' 1>&2
	shift
fi

# variables
## color
black=$(echo -e '\e[30m')
red=$(echo -e '\e[31m')
green=$(echo -e '\e[32m')
brown=$(echo -e '\e[33m')
blue=$(echo -e '\e[34m')
purple=$(echo -e '\e[35m')
cyan=$(echo -e '\e[36m')
yellow=$(echo -e '\e[33m')
white=$(echo -e '\e[37m')
dark_gray=$(echo -e '\e[1;30m')
light_red=$(echo -e '\e[1;31m')
light_green=$(echo -e '\e[1;32m')
light_blue=$(echo -e '\e[1;34m')
light_purple=$(echo -e '\e[1;35m')
light_cyan=$(echo -e '\e[1;36m')
light_gray=$(echo -e '\e[37m')
orange=$(echo -e '\e[38;5;202m')
light_orange=$(echo -e '\e[38;5;214m')
deep_purple=$(echo -e '\e[38;5;140m')
bold=$(echo -e '\033[1m')
reset=$(echo -e '\033(B\033[m')

## indicator
info="${green}[info]${reset}"
input_info="${cyan}[input]${reset}"
error="${red}[error]${reset}"
warn="${orange}[warn]${reset}"

## Windows build number constant
# Windows 10
readonly BN_SPR_CREATORS=15063		#1703, Redstone 2, Creators Update
readonly BN_FAL_CREATORS=16299		#1709, Redstone 3, Fall Creators Update
readonly BN_APR_EIGHTEEN=17134		#1803, Redstone 4, April 2018 Update
readonly BN_OCT_EIGHTEEN=17763		#1809, Redstone 5, October 2018 Update
readonly BN_MAY_NINETEEN=18362		#1903, 19H1, May 2019 Update
readonly BN_NOV_NINETEEN=18363		#1909, 19H2, November 2019 Update
readonly BN_MAY_TWENTYTY=19041		#2004, 20H1, May 2020 Update
readonly BN_OCT_NINETEEN=19042		#20H2, Windows 10 October 2020 Update
readonly BN_MAY_TWNETONE=19043		#21H1, Windows 10 May 2021 Update
readonly BN_NOV_TWENTONE=19044		#21H2, Windows 10 November 2021 Update
# Windows 11
readonly BN_ELEVEN_21H2=22000		#21H2, Windows 11

# echo functions
function debug_echo {
	[ "$wslu_debug" == "--debug" ] && echo "${orange}${bold}[debug:${wslu_util_fullpath}]${reset} $*" 1>&2;
}

function error_echo {
	echo "${error} $1"
	exit "$2"
}

# Check if the version number of bash is greater or equal to 4.4
if [ "$bash_version_major" -lt 4 ] || { [ "$bash_version_major" -eq 4 ] && [ "$bash_version_minor" -lt 4 ]; }; then
	error_echo "Bash version is too old. Please upgrade to 4.4 or later." 1
fi


# source default config
if [ -f "${wslu_dest_dir}${wslu_prefix}/share/wslu/conf" ]; then
	debug_echo "source default setting"
	source "${wslu_dest_dir}${wslu_prefix}/share/wslu/conf"
fi

# source user-defined config
if [ -f "${wslu_dest_dir}${wslu_prefix}/share/wslu/custom.conf" ]; then
	debug_echo "${wslu_dest_dir}${wslu_prefix}/share/wslu/custom.conf found, sourcing"
	source "${wslu_dest_dir}${wslu_prefix}/share/wslu/custom.conf"
fi

if [ -f "${wslu_dest_dir}/etc/wslu/conf" ]; then
	debug_echo "${wslu_dest_dir}/etc/wslu/conf found, sourcing"
	source "${wslu_dest_dir}/etc/wslu/conf"
fi

if [ -f "/etc/wslu/custom.conf" ]; then
	debug_echo "/etc/wslu/custom.conf found, sourcing"
	source "/etc/wslu/custom.conf"
fi

if [ -f "$HOME/.config/wslu/conf" ]; then
	debug_echo "$HOME/.config/wslu/conf found, sourcing"
	source "$HOME/.config/wslu/conf"
fi
if [ -f "$HOME/.wslurc" ]; then
	debug_echo "$HOME/.wslurc found, sourcing"
	source "$HOME/.wslurc"
fi

# functions

function help {
	app_name=$wslu_util_name
	echo -e "$app_name - Part of wslu, a collection of utilities for Windows Subsystem for Linux (WSL)
Usage: $2

For more help for $app_name, please use the command \`man $app_name\` or visit the following site: https://wslutiliti.es/wslu/man/$app_name.html.
For overall help, you can use the command \`man wslu\` or visite the following site: https://wslutiliti.es/wslu."
}

function version {
	echo "wslu v$wslu_version"
}

function double_dash_p {
	echo "${@//\\/\\\\}"
}

function interop_prefix {

	win_location="/mnt/"
	tmp="$(__wsl_conf_read automount root)"
	[ "$tmp" == "" ] || win_location="$tmp"
	[[ "$win_location" =~ ^.*/$ ]] || win_location="$win_location/" # make sure it always end with slash
	unset tmp
	echo "$win_location"

	unset win_location
}

function sysdrive_prefix {
	hard_reset=0
	for pt in "$(interop_prefix)"/*; do
		[[ -e "$pt" ]] || break
		if [ "$(echo "$pt" | wc -l)" -eq 1 ]; then
			if [ -d "$pt/Windows/System32" ]; then
				hard_reset=1
				pt=${pt%/}
				win_location="${pt##*/}"
				break
			fi
		fi 
	done

	if [ $hard_reset -eq 0 ]; then
		win_location="c"
	fi

	echo "$win_location"

	unset win_location
	unset hard_reset
}

function wslu_get_build {
	build=$("$(interop_prefix)$(sysdrive_prefix)"/Windows/System32/reg.exe query "HKLM\\Software\\Microsoft\\Windows NT\\CurrentVersion" /v CurrentBuild | tail -n 2 | head -n 1 | sed -e 's|\r||g')
	echo "${build##* }"
}

function wslu_get_wsl_ver {
	wslutmpbuild="$(( $(wslu_get_build) + 0 ))"
	if [ $wslutmpbuild -ge $BN_MAY_NINETEEN ]; then
		# The environment variable only available in 19H1 or later.
		wslu_distro_regpath=$("$(interop_prefix)$(sysdrive_prefix)"/Windows/System32/reg.exe query "HKCU\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Lxss" /s /f DistributionName 2>&1 | sed -e 's|\r||g' | grep -B1 -e "$WSL_DISTRO_NAME$" | head -n1 )
		if "$(interop_prefix)$(sysdrive_prefix)"/Windows/System32/reg.exe query "$wslu_distro_regpath" /v Flags &>/dev/null; then
			wslu_distro_version=$("$(interop_prefix)$(sysdrive_prefix)"/Windows/System32/reg.exe query "$wslu_distro_regpath" /v Flags | tail -n 2 | head -n 1 | sed -e 's|\r||g')
			wslu_distro_version=${wslu_distro_version##* }
			wslu_distro_version_processed=$(( "$(printf "%d\n" "$wslu_distro_version")" / 8 ))
			if [ "$wslu_distro_version_processed" == "1" ]; then
				echo "2"
			elif [ "$wslu_distro_version_processed" == "0" ]; then
				echo "1"
			fi
		else
			echo "1"
		fi
	else
		echo "1"
	fi
}

function chcp_com {
	"$(interop_prefix)$(sysdrive_prefix)"/Windows/System32/chcp.com "$@" >/dev/null
}

function winps_exec {
	debug_echo "winps_exec: called with command $*"
	if [[ "$WSLU_POWERSHELL_CHCP_WORKAROUND" == "true" ]]; then
		wslutmpbuild="$(wslu_get_build)"
		cp="$(cat "${wslu_state_dir}"/oemcp)"
		[ "$wslutmpbuild" -ge $BN_OCT_NINETEEN ] || chcp_com "$cp"
		"$(interop_prefix)$(sysdrive_prefix)"/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -Command "[Console]::OutputEncoding = [System.Text.Encoding]::UTF8; [Console]::InputEncoding = [System.Text.Encoding]::GetEncoding($cp); $*"
		EXIT_STATUS=$?
		[ "$wslutmpbuild" -ge $BN_OCT_NINETEEN ] || chcp_com 65001
		return $EXIT_STATUS
	else
		"$(interop_prefix)$(sysdrive_prefix)"/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -Command "$*"
		EXIT_STATUS=$?
		return $EXIT_STATUS
	fi
}

function cmd_exec {
	debug_echo "cmd_exec: called with command $*"
	"$(interop_prefix)$(sysdrive_prefix)"/Windows/System32/cmd.exe /c "$@"
	EXIT_STATUS=$?
	return $EXIT_STATUS
}

function baseexec_gen {
	debug_echo "baseexec_gen: called"
	wslutmpbuild="$(( $(wslu_get_build) + 0 ))"
	debug_echo "baseexec_gen: winbuild: $wslutmpbuild"
	if [ $wslutmpbuild -ge $BN_MAY_NINETEEN ]; then
		# The environment variable only available in 19H1 or later.
		debug_echo "baseexec_gen: 19H1 or higher"
		wslu_distro_regpath=$("$(interop_prefix)"c/Windows/System32/reg.exe query "HKCU\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Lxss" /s /f DistributionName 2>&1 | sed -e 's|\r||g' | grep -B1 -e "$WSL_DISTRO_NAME$" | head -n1 )
		if "$(interop_prefix)$(sysdrive_prefix)"/Windows/System32/reg.exe query "$wslu_distro_regpath" /v PackageFamilyName &>/dev/null; then
			wslu_distro_packagename=$("$(interop_prefix)$(sysdrive_prefix)"/Windows/System32/reg.exe query "$wslu_distro_regpath" /v PackageFamilyName | tail -n 2 | head -n 1 | sed -e 's|\r||g')
			# if it is a store distro
			debug_echo "baseexec_gen: store distro: $wslu_distro_packagename"
			wslu_distro_packagename=${wslu_distro_packagename##* }
			wslu_base_exec_folder_path="$(wslpath "$(winps_exec "[Environment]::GetFolderPath('LocalApplicationData')" | tr -d "\r")\\Microsoft\\WindowsApps\\$wslu_distro_packagename")"
			debug_echo "baseexec_gen: base_exe_folder_path: $wslu_base_exec_folder_path"
			if find "$wslu_base_exec_folder_path" -name "*.exe" -print -quit &>/dev/null; then
				debug_echo "baseexec_gen: found exe in wslu_base_exec_folder_path"
				wslpath -w "$(find "$wslu_base_exec_folder_path" -name "*.exe" -print -quit)" > "${wslu_state_dir}"/baseexec
			else
				debug_echo "baseexec_gen: do not have base exec in the folder; use fallback"
				echo "$(wslpath -w "$(interop_prefix)$(sysdrive_prefix)")\\Windows\\System32\\wsl.exe" > "${wslu_state_dir}"/baseexec
			fi
		else
			debug_echo "baseexec_gen: imported distro"
			# if it is imported distro
			echo "$(wslpath -w "$(interop_prefix)$(sysdrive_prefix)")Windows\\System32\\wsl.exe" > "${wslu_state_dir}"/baseexec
		fi
	else
		debug_echo "baseexec_gen: fallback mode"
		# older version fallback.
		echo "$(wslpath -w "$(interop_prefix)$(sysdrive_prefix)")\\Windows\\System32\\wsl.exe" > "${wslu_state_dir}"/baseexec
	fi
}

function var_gen {
	debug_echo "var_gen: called"
	date +"%s" > "${wslu_state_dir}"/triggered_time

	rm -f "${wslu_state_dir}"/baseexec
	rm -f "${wslu_state_dir}"/oemcp

	# generate oem codepage
	"$(interop_prefix)$(sysdrive_prefix)"/Windows/System32/reg.exe query "HKLM\\SYSTEM\\CurrentControlSet\\Control\\Nls\\CodePage" /v OEMCP 2>&1 | sed -n 3p | sed -e 's|\r||g' | grep -o '[[:digit:]]*' > "${wslu_state_dir}"/oemcp
	# generate base exe location
	baseexec_gen

}

function wslu_function_check {
	# from https://stackoverflow.com/questions/85880/determine-if-a-function-exists-in-bash
	debug_echo "wslu_function_check: called with $*"
	declare -f -F "$1" > /dev/null
	return $?
}

function wslu_file_check {
	debug_echo "wslu_file_check: called with $*"
	should_i_show=""
	[[ "$3" == "?!S" ]] && should_i_show="n"

	if [[ ! -f "$1/$2" ]]; then
		[[ -z "$should_i_show" ]] && echo "${warn} $2 not found in Windows directory. Copying right now..."
		[[ -d "$1" ]] || mkdir "$1"
		if [[ -f "/usr/share/wslu/$2" ]]; then
			cp "/usr/share/wslu/$2" "$1"
			[[ -z "$should_i_show" ]] && echo "${info} $2 copied. Located at \"$1\"."
		else
			[[ -z "$should_i_show" ]] && echo "${error} $2 not found. Failed to copy."
			exit 30
		fi
	fi
}

function wslpy_check {
	debug_echo "wslpy_check"
	if type python3 > /dev/null 2>&1; then
		debug_echo "wslpy_check: python3 installed."
		tmp_wslpy_ver="$(python3 -c "import wslpy; print(wslpy.__version__)" 2>/dev/null)"
		if [[ "$tmp_wslpy_ver" != "" ]]; then
			debug_echo "wslpy_check: wslpy installed."
			older_ver="$(echo -e "$tmp_wslpy_ver\n0.1.0" | sort -n -t. | head -n1)"
			if [[ "$older_ver" == "$tmp_wslpy_ver" ]]; then
				debug_echo "wslpy_check: wslpy installed but a version < 0.1.0 is installed."
				return 1
			else
				debug_echo "wslpy_check: wslpy >= 0.1.0 is installed."
				return
			fi
		else
			debug_echo "wslpy_check: wslpy not installed."
			return 1
		fi
	else
		debug_echo "wslpy_check: python3 not installed."
		return 1
	fi
}


# pre_check to make sure WSL_INTEROP is properly set in WSL2
if [ "$(wslu_get_wsl_ver)" == "2" ] && [ -z "$WSL_INTEROP" ]; then
	for i in $(pstree -np -s $$ | grep -o -E '[0-9]+'); do
		if [[ -e "/run/WSL/${i}_interop" ]]; then
			export WSL_INTEROP=/run/WSL/${i}_interop
		fi
	done
fi

# first run, saving some information
if [ ! -d ~/.config/wslu ]; then
	debug_echo "first run; creating ~/.config/wslu"
	mkdir -p ~/.config/wslu
fi

# This gets tirggered then:
# 1. if it's the first time the script is triggered, i.e.,
#    ${wslu_state_dir}/triggered time
# 2. if update_time is also not present, i.e.,
#    badly installed packages or installed via install script
if [ ! -f "${wslu_state_dir}"/triggered_time ] || [ ! -f /usr/share/wslu/updated_time ]; then
	debug_echo "first run or update_time not present; calling var_gen"
	var_gen
# This gets triggered when:
#    installed time is larger than the last triggered time
elif [ "$(cat "${wslu_state_dir}"/triggered_time)" -lt "$(cat /usr/share/wslu/updated_time)" ]; then
	debug_echo "upgraded package; calling var_gen"
	var_gen
fi

# basic distro detection
distro="$(sed -n -e '/^NAME=.*/p' /etc/os-release | sed -e 's/^NAME=\"//g')"
case $distro in
	*Clear\ Linux*) distro="clear";;
	*Common\ Base\ Linux\ Mariner*) distro="cblm";;
	*Pengwin*) distro="pengwin";;
	*WLinux*) distro="wlinux";;
	Ubuntu*) distro="ubuntu";;
	*Debian*) distro="debian";;
	*Kali*) distro="kali";;
	openSUSE*) distro="opensuse";;
	SLES*) distro="sles";;
	Alpine*) distro="alpine";;
	Arch*) distro="archlinux";;
	*Oracle*) distro="oracle";;
	AlmaLinux*) distro="almalinux";;
	Scientific*) distro="scilinux";;
	*Fedora\ Remix\ for\ WSL*) distro="fedoraremix";;
	*Fedora*) distro="fedora";;
	*Gentoo*) distro="gentoo";;
	*Generic*) [ "fedora" == "$(grep -e "LIKE=" /etc/os-release | sed -e 's/ID_LIKE=//g')" ] && distro="oldfedora" || distro="unknown";;
	*) distro="unknown";;
esac

debug_echo "distro: $distro"
# shellcheck shell=bash
is_color=0
is_generic=0

help_short="wslfetch [-hvcg] [-t THEME] [-o OPTIONS]"

PARSED_ARGUMENTS=$(getopt -a -n "${wslu_util_name##*/}" -o hvtcgo: --long help,version,theme,colorbar,generic,options: -- "$@")
#shellcheck disable=SC2181
[ "$?" != "0" ] && help "$wslu_util_name" "$help_short"

eval set -- "$PARSED_ARGUMENTS"
while :
do
	case "$1" in
		-h|--help) help "$_tmp_cmdname" "$help_short"; exit;;
		-v|--version) version; exit;;
		-t|--theme) shift; WSLFETCH_THEME_PATH="$1"; shift;;
		-c|--colorbar) is_color=1; shift;;
		-g|--generic) is_generic=1; shift;;
		-o|--options) shift; WSLFETCH_INFO_SECTION="$1"; shift;;
		--) shift; break ;;
		*) echo "Unexpected option: $1"
			help "$_tmp_cmdname" "$help_short"
			exit 1;;
	esac
done

debug_echo "is_color: $is_color"
debug_echo "is_generic: $is_generic"
debug_echo "WSLFETCH_INFO_SECTION: $WSLFETCH_INFO_SECTION"
debug_echo "WSLFETCH_COLORBAR: $WSLFETCH_COLORBAR"
debug_echo "WSLFETCH_ASCII_PATH: $WSLFETCH_ASCII_PATH"

if [[ "$is_generic" == "1" ]] || [[ -n "$WSLFETCH_THEME_PATH" ]]; then
	distro=""
fi
case "$distro" in
	'ubuntu')
		t="${red}${bold}"
		ascii_text=(
			"${bold}${red}               .-/+oossssoo+/-.               ${reset}"
			"${bold}${red}           \`:+ssssssssssssssssss+:\`           ${reset}"
			"${bold}${red}         -+ssssssssssssssssssyyssss+-         ${reset}"
			"${bold}${red}       .ossssssssssssssssss${white}dMMMNy${red}sssso.       ${reset}"
			"${bold}${red}      /sssssssssss${white}hdmmNNmmyNMMMMh${red}ssssss/      ${reset}"
			"${bold}${red}     +sssssssss${white}hm${red}yd${white}MMMMMMMNddddy${red}ssssssss+     ${reset}"
			"${bold}${red}    /ssssssss${white}hNMMM${red}yh${white}hyyyyhmNMMMNh${red}ssssssss/    ${reset}"
			"${bold}${red}   .ssssssss${white}dMMMNh${red}ssssssssss${white}hNMMMd${red}ssssssss.   ${reset}"
			"${bold}${red}   +ssss${white}hhhyNMMNy${red}ssssssssssss${white}yNMMMy${red}sssssss+   ${reset}"
			"${bold}${red}   oss${white}yNMMMNyMMh${red}ssssssssssssss${white}hmmmh${red}ssssssso   ${reset}"
			"${bold}${red}   oss${white}yNMMMNyMMh${red}sssssssssssssshmmmh${red}ssssssso   ${reset}"
			"${bold}${red}   +ssss${white}hhhyNMMNy${red}ssssssssssss${white}yNMMMy${red}sssssss+   ${reset}"
			"${bold}${red}   .ssssssss${white}dMMMNh${red}ssssssssss${white}hNMMMd${red}ssssssss.   ${reset}"
			"${bold}${red}    /ssssssss${white}hNMMM${red}yh${white}hyyyyhdNMMMNh${red}ssssssss/    ${reset}"
			"${bold}${red}     +sssssssss${white}dm${red}yd${white}MMMMMMMMddddy${red}ssssssss+     ${reset}"
			"${bold}${red}      /sssssssssss${white}hdmNNNNmyNMMMMh${red}ssssss/      ${reset}"
			"${bold}${red}       .ossssssssssssssssss${white}dMMMNy${red}sssso.       ${reset}"
			"${bold}${red}         -+sssssssssssssssss${white}yyy${red}ssss+-         ${reset}"
			"${bold}${red}           \`:+ssssssssssssssssss+:\`           ${reset}"
			"${bold}${red}               .-/+oossssoo+/-.               ${reset}");;
	'debian')
		t="${light_red}${bold}"
		ascii_text=(
			"${white}         _,met\$\$\$\$\$gg.               ${reset}"
			"${white}      ,g\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$P.            ${reset}"
			"${white}    ,g\$\$P\"\"       \"\"\"Y\$\$.\".          ${reset}"
			"${white}   ,\$\$P'              \`\$\$\$.          ${reset}"
			"${white}  ',\$\$P       ,ggs.     \`\$\$b:        ${reset}"
			"${white}  \`d\$\$'     ,\$P\"\'   ${light_red}.${white}    \$\$\$        ${reset}"
			"${white}   \$\$P      d\$\'     ${light_red},${white}    \$\$P        ${reset}"
			"${white}   \$\$:      \$\$.   ${light_red}-${white}    ,d\$\$'         ${reset}"
			"${white}   \$\$\;      Y\$b._   _,d\$P'          ${reset}"
			"${white}   Y\$\$.    ${light_red}\`.${white}\`\"Y\$\$\$\$P\"'              ${reset}"
			"${white}   \`\$\$b      ${light_red}\"-.__                   ${reset}"
			"${white}    \`Y\$\$                             ${reset}"
			"${white}     \`Y\$\$.                           ${reset}"
			"${white}       \`\$\$b.                         ${reset}"
			"${white}         \`Y\$\$b.                      ${reset}"
			"${white}            \`\"Y\$b._                  ${reset}"
			"${white}                \`\"\"\"\"                ${reset}");;
	'kali')
		t="${light_blue}${bold}"
		ascii_text=(
			"${light_blue}..............                                     "
			"${light_blue}            ..,;:ccc,.                             ${reset}"
			"${light_blue}          ......''';lxO.                           ${reset}"
			"${light_blue}.....''''..........,:ld;                           ${reset}"
			"${light_blue}           .';;;:::;,,.x,                          ${reset}"
			"${light_blue}      ..'''.            0Xxoc:,.  ...              ${reset}"
			"${light_blue}  ....                ,ONkc;,;cokOdc',.            ${reset}"
			"${light_blue} .                   OMo           ':${black}dd${light_blue}o.          ${reset}"
			"${light_blue}                    dMc               :OO;         ${reset}"
			"${light_blue}                    0M.                 .:o.       ${reset}"
			"${light_blue}                    ;Wd                            ${reset}"
			"${light_blue}                     ;XO,                          ${reset}"
			"${light_blue}                       ,d0Odlc;,..                 ${reset}"
			"${light_blue}                           ..',;:cdOOd::,.         ${reset}"
			"${light_blue}                                    .:d;.':;.      ${reset}"
			"${light_blue}                                       'd,  .'     ${reset}"
			"${light_blue}                                         ;l   ..   ${reset}"
			"${light_blue}                                          .o       ${reset}"
			"${light_blue}                                            c      ${reset}"
			"${light_blue}                                            .'     ${reset}"
			"${light_blue}                                             .     ${reset}");;
	'opensuse')
		t="${light_green}${bold}"
		ascii_text=(
			"${light_gray}             .;ldkO0000Okdl;.                   ${reset}"
			"${light_gray}         .;d00xl:^''''''^:ok00d;.               ${reset}"
			"${light_gray}       .d00l'                'o00d.             ${reset}"
			"${light_gray}     .d0Kd'${light_green}  Okxol:;,.          ${light_gray}:O0d.           ${reset}"
			"${light_gray}    .OK${light_green}KKK0kOKKKKKKKKKKOxo:,      ${light_gray}lKO.          ${reset}"
			"${light_gray}   ,0K${light_green}KKKKKKKKKKKKKKK0P^${light_gray},,,${light_green}^dx:${light_gray}    ;00,         ${reset}"
			"${light_gray}  .OK${light_green}KKKKKKKKKKKKKKKk'${light_gray}.oOPPb.${light_green}'0k.${light_gray}   cKO.        ${reset}"
			"${light_gray}  :KK${light_green}KKKKKKKKKKKKKKK: ${light_gray}kKx..dd ${light_green}lKd${light_gray}   'OK:        ${reset}"
			"${light_gray}  dKK${light_green}KKKKKKKKKOx0KKKd ${light_gray}^0KKKO' ${light_green}kKKc${light_gray}   dKd        ${reset}"
			"${light_gray}  dKK${light_green}KKKKKKKKKK;.;oOKx,..${light_gray}^${light_green}..;kKKK0.${light_gray}  dKd        ${reset}"
			"${light_gray}  :KK${light_green}KKKKKKKKKK0o;...^cdxxOK0O/^^'  ${light_gray}.0K:        ${reset}"
			"${light_gray}   kKK${light_green}KKKKKKKKKKKKK0x;,,......,;od  ${light_gray}lKk         ${reset}"
			"${light_gray}   '0K${light_green}KKKKKKKKKKKKKKKKKKKK00KKOo^  ${light_gray}c00'         ${reset}"
			"${light_gray}    'kK${light_green}KKOxddxkOO00000Okxoc;''   ${light_gray}.dKk'          ${reset}"
			"${light_gray}      l0Ko.                    .c00l'           ${reset}"
			"${light_gray}       'l0Kk:.              .;xK0l'             ${reset}"
			"${light_gray}          'lkK0xl:;,,,,;:ldO0kl'                ${reset}"
			"${light_gray}              '^:ldxkkkkxdl:^'                  ${reset}");;
 	'pengwin')
		t="${purple}${bold}"
		ascii_text=(
			"${light_purple}                       ...\`               ${reset}"
			"${light_purple}                       \`-///:-\`           ${reset}"
			"${light_purple}                         .+${purple}ssys${light_purple}/          ${reset}"
			"${light_purple}                          +${purple}yyyyy${light_purple}o         ${reset}"
			"${purple}                          -yyyyyy:        ${reset}"
			"${purple}             \`.:/+ooo+/:\` -yyyyyy+        ${reset}"
			"${purple}           \`:oyyyyyys+:-.\`syyyyyy:        ${reset}"
			"${purple}          .syyyyyyo-\`   .oyyyyyyo         ${reset}"
			"${purple}         \`syyyyyy/   \`-+yyyyyyy/\`         ${reset}"
			"${purple}         /yyyyyy+ -/osyyyyyyo/.           ${reset}"
			"${purple}         +yyyyyy-  \`.-:::-.\`              ${reset}"
			"${purple}         .yyyyyy-                         ${reset}"
			"${light_purple}          :${purple}yyyyy${light_purple}o                         ${reset}"
			"${light_purple}           .+${purple}ooo${light_purple}+:                        ${reset}"
			"${light_purple}             \`.::/:.                      ${reset}");;
	'wlinux')
		t="${light_orange}${bold}"
		ascii_text=(
			"${light_orange}                 _.._                 ${reset}"
			"${light_orange}              .-'    \`-.              ${reset}"
			"${light_orange}             :          ;             ${reset}"
			"${light_orange}             ; ,_    _, ;             ${reset}"
			"${light_orange}             : \\{\"  \"}/ :             ${reset}"
			"${light_orange}            ,'.'\"=..=''.'.            ${reset}"
			"${light_orange}           ; / \      / \ ;           ${reset}"
			"${light_orange}         .' ;   '.__.'   ; '.         ${reset}"
			"${light_orange}      .-' .'              '. '-.      ${reset}"
			"${light_orange}    .'   ;                  ;   '.    ${reset}"
			"${light_orange}   /    /                    \    \   ${reset}"
			"${light_orange}  ;    ;                      ;    ;  ${reset}"
			"${light_orange}  ;   \`-._                  _.-'   ;  ${reset}"
			"${light_orange}   ;      ""--.        .--""      ;   ${reset}"
			"${light_orange}    '.    _    ;      ;    _    .'    ${reset}"
			"${light_orange}    {""..' '._.-.    .-._.' '..""}    ${reset}"
			"${light_orange}     \           ;  ;           /     ${reset}"
			"${light_orange}      :         :    :         :      ${reset}"
			"${light_orange}      :         :.__.:         :      ${reset}"
			"${light_orange}       \       /\"-..-\"\       /       ${reset}"
			"${light_orange}        '-.__.'        '.__.-'        ${reset}");;
	'sles')
		t="${green}${bold}"
		ascii_text=(
			"${green}             .;ldkO0000Okdl;.               ${reset}"
			"${green}         .;d00xl:^''''''^:ok00d;.           ${reset}"
			"${green}       .d00l'                'o00d.         ${reset}"
			"${green}     .d0Kd'  Okxol:;,.          :O0d.       ${reset}"
			"${green}    .OKKKK0kOKKKKKKKKKKOxo:,      lKO.      ${reset}"
			"${green}   ,0KKKKKKKKKKKKKKKK0P^,,,^dx:    ;00,     ${reset}"
			"${green}  .OKKKKKKKKKKKKKKKKk'.oOPPb.'0k.   cKO.    ${reset}"
			"${green}  :KKKKKKKKKKKKKKKKK: kKx..dd lKd   'OK:    ${reset}"
			"${green}  dKKKKKKKKKKKOx0KKKd ^0KKKO' kKKc   dKd    ${reset}"
			"${green}  dKKKKKKKKKKKK;.;oOKx,..^..;kKKK0.  dKd    ${reset}"
			"${green}  :KKKKKKKKKKKK0o;...^cdxxOK0O/^^'  .0K:    ${reset}"
			"${green}   kKKKKKKKKKKKKKKK0x;,,......,;od  lKk     ${reset}"
			"${green}   '0KKKKKKKKKKKKKKKKKKKKK00KKOo^  c00'     ${reset}"
			"${green}    'kKKKOxddxkOO00000Okxoc;''   .dKk'      ${reset}"
			"${green}      l0Ko.                    .c00l'       ${reset}"
			"${green}       'l0Kk:.              .;xK0l'         ${reset}"
			"${green}          'lkK0xl:;,,,,;:ldO0kl'            ${reset}"
			"${green}              '^:ldxkkkkxdl:^'              ${reset}");;
	'alpine')
		t="${blue}${bold}"
		ascii_text=(
			"${light_blue}        ................          ${reset}"
			"${light_blue}       ∴::::::::::::::::∴         ${reset}"
			"${light_blue}      ∴::::::::::::::::::∴        ${reset}"
			"${light_blue}     ∴::::::::::::::::::::∴       ${reset}"
			"${light_blue}    ∴:::::::. :::::':::::::∴      ${reset}"
			"${light_blue}   ∴:::::::.   ;::; ::::::::∴     ${reset}"
			"${light_blue}  ∴::::::;      ∵     :::::::∴    ${reset}"
			"${light_blue} ∴:::::.     .         .::::::∴   ${reset}"
			"${light_blue} ::::::     :::.    .    ::::::   ${reset}"
			"${light_blue} ∵::::     ::::::.  ::.   ::::∵   ${reset}"
			"${light_blue}  ∵:..   .:;::::::: :::.  :::∵    ${reset}"
			"${light_blue}   ∵::::::::::::::::::::::::∵     ${reset}"
			"${light_blue}    ∵::::::::::::::::::::::∵      ${reset}"
			"${light_blue}     ∵::::::::::::::::::::∵       ${reset}"
			"${light_blue}      ::::::::::::::::::::        ${reset}"
			"${light_blue}       ∵::::::::::::::::∵         ${reset}");;
	'archlinux')
		t="${light_cyan}${bold}"
		ascii_text=(
			"${light_cyan}                   -\`                 ${reset}"
			"${light_cyan}                  .o+\`                ${reset}"
			"${light_cyan}                 \`ooo/                ${reset}"
			"${light_cyan}                \`+oooo:               ${reset}"
			"${light_cyan}               \`+oooooo:              ${reset}"
			"${light_cyan}               -+oooooo+:             ${reset}"
			"${light_cyan}             \`/:-:++oooo+:            ${reset}"
			"${light_cyan}            \`/++++/+++++++:           ${reset}"
			"${light_cyan}           \`/++++++++++++++:          ${reset}"
			"${light_cyan}          \`/+++o${cyan}oooooooo${light_cyan}oooo/\`        ${reset}"
			"${cyan}         ${light_cyan}./${cyan}ooosssso++osssssso${light_cyan}+\`       ${reset}"
			"${cyan}        .oossssso-\`\`\`\`/ossssss+\`      ${reset}"
			"${cyan}       -osssssso.      :ssssssso.     ${reset}"
			"${cyan}      :osssssss/        osssso+++.    ${reset}"
			"${cyan}     /ossssssss/        +ssssooo/-    ${reset}"
			"${cyan}   \`/ossssso+/:-        -:/+osssso+-  ${reset}"
			"${cyan}  \`+sso+:-\`                 \`.-/+oso: ${reset}"
			"${cyan} \`++:.                           \`-/+/${reset}"
			"${cyan} .\`                                 \`/${reset}");;
	'scilinux')
		t="${light_blue}${bold}"
		ascii_text=(
			"${light_blue}                  =/;;/-                    ${reset}"
			"${light_blue}                 +:    //                   ${reset}"
			"${light_blue}                /;      /;                  ${reset}"
			"${light_blue}               -X        H.                 ${reset}"
			"${light_blue} .//;;;:;;-,   X=        :+   .-;:=;:;#;.   ${reset}"
			"${light_blue} M-       ,=;;;#:,      ,:#;;:=,       ,@   ${reset}"
			"${light_blue} :#           :#.=/++++/=.$=           #=   ${reset}"
			"${light_blue}  ,#;         #/:+/;,,/++:+/         ;+.    ${reset}"
			"${light_blue}    ,+/.    ,;@+,        ,#H;,    ,/+,      ${reset}"
			"${light_blue}       ;+;;/= @.  ${light_red}.H${white}#${light_red}#X   ${light_blue}-X :///+;         ${reset}"
			"${light_blue}       ;+=;;;.@,  ${white}.X${light_red}M${white}@$.  ${light_blue}=X.//;=#/.        ${reset}"
			"${light_blue}    ,;:      :@#=        =\$H:     .+#-      ${reset}"
			"${light_blue}  ,#=         #;-///==///-//         =#,    ${reset}"
			"${light_blue} ;+           :#-;;;:;;;;-X-           +:   ${reset}"
			"${light_blue} @-      .-;;;;M-        =M/;;;-.      -X   ${reset}"
			"${light_blue}  :;;::;;-.    #-        :+    ,-;;-;:==    ${reset}"
			"${light_blue}               ,X        H.                 ${reset}"
			"${light_blue}                ;/      #=                  ${reset}"
			"${light_blue}                 //    +;                   ${reset}"
			"${light_blue}                  '////'                    ${reset}");;
	'oracle')
		t="${red}${bold}"
		ascii_text=(
			"${red}      \`-/+++++++++++++++++/-.\`       ${reset}"
			"${red}    \`/syyyyyyyyyyyyyyyyyyyyyyys/.    ${reset}"
			"${red}   :yyyyo/-...............-/oyyyy/   ${reset}"
			"${red}  /yyys-                     .oyyy+  ${reset}"
			"${red} .yyyy\`                       \`syyy- ${reset}"
			"${red} :yyyo                         /yyy/ ${reset}"
			"${red} .yyyy\`                       \`syyy- ${reset}"
			"${red}  /yyys.                     .oyyyo  ${reset}"
			"${red}   /yyyyo:-...............-:oyyyy/\`  ${reset}"
			"${red}    \`/syyyyyyyyyyyyyyyyyyyyyyys+.    ${reset}"
			"${red}      \`.:/+ooooooooooooooo+/:.\`      ${reset}");;
	'oldfedora'|'fedora')
		t="${light_blue}${bold}"
		ascii_text=(
			"${light_blue}           /:-------------:\         ${reset}"
			"${light_blue}        :-------------------::       ${reset}"
			"${light_blue}      :-----------${white}/shhOHbmp${light_blue}---:\\     ${reset}"
			"${light_blue}    /-----------${white}omMMMNNNMMD  ${light_blue}---:    ${reset}"
			"${light_blue}   :-----------${white}sMMMMNMNMP${light_blue}.    ---:   ${reset}"
			"${light_blue}  :-----------${white}:MMMdP${light_blue}-------    ---\  ${reset}"
			"${light_blue} ,------------${white}:MMMd${light_blue}--------    ---:  ${reset}"
			"${light_blue} :------------${white}:MMMd${light_blue}-------    .---:  ${reset}"
			"${light_blue} :----    ${white}oNMMMMMMMMMNho${light_blue}     .----:  ${reset}"
			"${light_blue} :--     .${white}+shhhMMMmhhy++${light_blue}   .------/  ${reset}"
			"${light_blue} :-    -------${white}:MMMd${light_blue}--------------:   ${reset}"
			"${light_blue} :-   --------${white}/MMMd${light_blue}-------------;    ${reset}"
			"${light_blue} :-    ------${white}/hMMMy${light_blue}------------:     ${reset}"
			"${light_blue} :--${white} :dMNdhhdNMMNo${light_blue}------------;      ${reset}"
			"${light_blue} :---${white}:sdNMMMMNds:${light_blue}------------:       ${reset}"
			"${light_blue} :------${white}:://:${light_blue}-------------::         ${reset}"
			"${light_blue} :---------------------://           ${reset}");;
	'fedoraremix')
		t="${white}${deep_purple}"
		ascii_text=(
			"${white}                                                             ${reset}"
			"${white}                                                             ${reset}"
			"${white}                                                             ${reset}"
			"${white}           wgg              ,g                               ${reset}"
			"${white}          \$\$                ]$                               ${reset}"
			"${white}        'A\$\$A  g@PR&,  x\$NR&@$  g\$PR&w  \$N\$P* g&P&&y         ${reset}"
			"${white}          \$\$  \$\$gggg$  $~   1$ \$\$    &K \$F   \$E   \"\$.        ${reset}"
			"${white}          \$\$  ]\$w ,gg  &N,,w\$\$ \"\$w,,g$\" \$F   J\$w,,\$\$U        ${reset}"
			"${white}          \"     *T7'    \`7T' 7   \"TT'   7      ?T7 7 ™       ${reset}"
			"${deep_purple}         ,@@@@&8@@@@@M&@@@@@8R@@R@@@@@@@@@@@@@@@@@W          ${reset}"
			"${deep_purple}        .@@@@\`,@@@@F M ]@@@@ @ a@ @@@@ #@@@@,\`,@@@@@         ${reset}"
			"${deep_purple}         @@@@~]@@@@W *\"]@@@@j@ \$@ @@@@ #@@@F @ \$@@@@         ${reset}"
			"${deep_purple}          *R@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@RMF          ${reset}"
			"${white}                                                             ${reset}"
			"${white}                                                             ${reset}"
			"${white}                                                             ${reset}");;
 	'gentoo')
		t="${white}${light_purple}"
		ascii_text=(
			"${light_purple}         -/oyddmdhs+:.               ${reset}"
			"${light_purple}     -o${white}dNMMMMMMMMNNmhy+${light_purple}-\`            ${reset}"
			"${light_purple}   -y${white}NMMMMMMMMMMMNNNmmdhy${light_purple}+-          ${reset}"
			"${light_purple} \`o${white}mMMMMMMMMMMMMNmdmmmmddhhy${light_purple}/\`       ${reset}"
			"${light_purple} om${white}MMMMMMMMMMMN${light_purple}hhyyyo${white}hmdddhhhd${light_purple}o\`     ${reset}"
			"${light_purple}.y${white}dMMMMMMMMMMd${light_purple}hs++so/s${white}mdddhhhhdm${light_purple}+\`   ${reset}"
			"${light_purple} oy${white}hdmNMMMMMMMN${light_purple}dyooy${white}dmddddhhhhyhN${light_purple}d.  ${reset}"
			"${light_purple}  :o${white}yhhdNNMMMMMMMNNNmmdddhhhhhyym${light_purple}Mh  ${reset}"
			"${light_purple}    .:${white}+sydNMMMMMNNNmmmdddhhhhhhmM${light_purple}my  ${reset}"
			"${light_purple}       /m${white}MMMMMMNNNmmmdddhhhhhmMNh${light_purple}s:  ${reset}"
			"${light_purple}    \`o${white}NMMMMMMMNNNmmmddddhhdmMNhs${light_purple}+\`   ${reset}"
			"${light_purple}  \`s${white}NMMMMMMMMNNNmmmdddddmNMmhs${light_purple}/.     ${reset}"
			"${light_purple} /N${white}MMMMMMMMNNNNmmmdddmNMNdso${light_purple}:\`       ${reset}"
			"${light_purple}+M${white}MMMMMMNNNNNmmmmdmNMNdso${light_purple}/-          ${reset}"
			"${light_purple}yM${white}MNNNNNNNmmmmmNNMmhs+/${light_purple}-\`            ${reset}"
			"${light_purple}/h${white}MMNNNNNNNNMNdhs++/${light_purple}-\`               ${reset}"
			"${light_purple}\`/${white}ohdmmddhys+++/:${light_purple}.\`                  ${reset}"
			"${light_purple}  \`-//////:--.                       ${reset}");;
	"cblm")
		t="${blue}${bold}"
		ascii_text=(
			"${blue}  ____ ____    _     _                   ${reset}"
			"${blue} / ___| __ )  | |   (_)_ __  _   ___  __ ${reset}"
			"${blue}| |   |  _ \  | |   | | '_ \\| | | \\ \\/ / ${reset}"
			"${blue}| |___| |_) | | |___| | | | | |_| |>  <  ${reset}"
			"${blue} \\____|____/  |_____|_|_| |_|\\__,_/_/\\_\ ${reset}"
			"${blue}   __  __            _                   ${reset}"
			"${blue}  |  \\/  | __ _ _ __(_)_ __   ___ _ __   ${reset}"
			"${blue}  | |\\/| |/ _\` | '__| | '_ \\ / _ \\ '__|  ${reset}"
			"${blue}  | |  | | (_| | |  | | | | |  __/ |     ${reset}"
			"${blue}  |_|  |_|\\__,_|_|  |_|_| |_|\\___|_|     ${reset}");;
	"clear")
		t="${blue}${bold}"
		ascii_text=(
		"${blue}          BBB               ${reset}"
		"${blue}       BBBBBBBBB            ${reset}"
		"${blue}     BBBBBBBBBBBBBBB        ${reset}"
		"${blue}   BBBBBBBBBBBBBBBBBBBB     ${reset}"
		"${blue}   BBBBBBBBBBB         BBB  ${reset}"
		"${blue}  BBBBBBBB${brown}YYYYY             ${reset}"
		"${blue}  BBBBBBBB${brown}YYYYYY            ${reset}"
		"${blue}  BBBBBBBB${brown}YYYYYYY           ${reset}"
		"${blue}  BBBBBBBBB${brown}YYYYY${white}W           ${reset}"
		"${cyan} GG${blue}BBBBBBBY${brown}YYYY${white}WWW          ${reset}"
		"${cyan} GGG${blue}BBBBBBB${brown}YY${white}WWWWWWWW       ${reset}"
		"${cyan} GGGGGG${blue}BBBBBB${white}WWWWWWWW       ${reset}"
		"${cyan} GGGGGGGG${blue}BBBB${white}WWWWWWWW       ${reset}"
		"${cyan}GGGGGGGGGGG${blue}BBB${white}WWWWWWW       ${reset}"
		"${cyan}GGGGGGGGGGGGG${blue}B${white}WWWWWW        ${reset}"
		"${cyan}GGGGGGGG${white}WWWWWWWWWWW         ${reset}"
		"${cyan}GG${white}WWWWWWWWWWWWWWWW          ${reset}"
		"${white} WWWWWWWWWWWWWWWW           ${reset}"
		"${white}      WWWWWWWWWW            ${reset}"
		"${white}          WWW               ${reset}");;
	"almalinux")
		t="${blue}${bold}"
		ascii_text=(
		"${red}         'c:.                            ${reset}"
		"${red}        lkkkx, ..       ${brown}..   ,cc,        ${reset}"
		"${red}        okkkk:ckkx'  ${brown}.lxkkx.okkkkd       ${reset}"
		"${red}        .:llcokkx'  ${brown}:kkkxkko:xkkd,       ${reset}"
		"${red}      .xkkkkdood:  ${brown};kx,  .lkxlll;        ${reset}"
		"${red}       xkkx.       ${brown}xk'     xkkkkk:       ${reset}"
		"${red}       'xkx.       ${brown}xd      .....,.       ${reset}"
		"${blue}      .. ${red}:xkl'     ${brown}:c      ..''..        ${reset}"
		"${blue}    .dkx'  ${red}.:ldl:'. ${brown}'  ${green}':lollldkkxo;     ${reset}"
		"${blue}  .''lkkko'                     ${green}ckkkx.   ${reset}"
		"${blue}'xkkkd:kkd.       ..  ${cyan};'        ${green}:kkxo.   ${reset}"
		"${blue},xkkkd;kk'      ,d;    ${cyan}ld.   ${green}':dkd::cc,  ${reset}"
		"${blue} .,,.;xkko'.';lxo.      ${cyan}dx,  ${green}:kkk'xkkkkc ${reset}"
		"${blue}     'dkkkkkxo:.        ${cyan};kx  ${green}.kkk:;xkkd. ${reset}"
		"${blue}       .....   ${cyan}.;dk:.   ${cyan}lkk.  ${green}:;,        ${reset}"
		"${cyan}             :kkkkkkkdoxkkx              ${reset}"
		"${cyan}              ,c,,;;;:xkkd.              ${reset}"
		"${cyan}                ;kkkkl...                ${reset}"
		"${cyan}                ;kkkkl                   ${reset}"
		"${cyan}                 ,od;                    ${reset}"
		);;
	*)
		t="${cyan}${bold}"
		ascii_text=(
			"${cyan} /\$\$      /\$\$  /\$\$\$\$\$\$  /\$\$       "
			"${cyan}| \$\$  /\$ | \$\$ /\$\$__  \$\$| \$\$	  "
			"${cyan}| \$\$ /\$\$\$| \$\$| \$\$${reset}  ${cyan}\\__/| \$\$${reset}       "
			"${cyan}| \$\$${reset}${cyan}/\$\$${reset} ${cyan}\$\$${reset} ${cyan}\$\$${reset}${cyan}|  \$\$\$\$\$\$${reset} ${cyan}| \$\$${reset}       "
			"${cyan}| \$\$\$\$${reset}${cyan}_  \$\$\$\$${reset} ${cyan}\\____  \$\$${reset}${cyan}| \$\$${reset}	  "
			"${cyan}| \$\$\$${reset}${cyan}/ \\  \$\$\$${reset} ${cyan}/\$\$${reset}  ${cyan}\\ \$\$${reset}${cyan}| \$\$${reset}	  "
			"${cyan}| \$\$${reset}${cyan}/   \\  \$\$${reset}${cyan}|  \$\$\$\$\$\$${reset}${cyan}/| \$\$\$\$\$\$\$\$${reset} "
			"${cyan}|__/     \\__/ \\______/ |________/${reset} ");;
esac

if [[ -n "$WSLFETCH_THEME_PATH" ]]; then
	debug_echo "custom theme detected: $WSLFETCH_THEME_PATH"
	#shellcheck disable=SC1090
	source "$WSLFETCH_THEME_PATH"
fi

debug_echo "distro: $distro"
debug_echo "t: ${t}color${reset}"
debug_echo "ascii_text: ${ascii_text[*]}"

SAVEIFS=$IFS
info_collect=()
while IFS=$'\n' read -r line; do
	info_collect+=("$line");
done < <(wslsys "$wslu_debug" --wslfetch "${WSLFETCH_INFO_SECTION}" "${t}")
IFS=$SAVEIFS

wslf_ver="${info_collect[0]}"
debug_echo "collected wsl version: $wslf_ver"

debug_echo "constructing text"
info_text=("${t}Windows Subsystem for Linux (WSL${wslf_ver})${reset}"
"${t}${USER}${reset}@${t}$(</etc/hostname)${reset}")
info_text+=("${info_collect[@]:1}")

if [[ "$is_color" == "1" ]] || [[ "$WSLFETCH_COLORBAR" == "true" ]]; then
	debug_echo "constructing colorbar"
	info_text+=("${reset}"
	"   \e[40m   \e[41m   \e[42m   \e[43m   \e[44m   \e[45m   \e[46m   \e[47m   ${reset}"
	"   \e[48;5;8m   \e[48;5;9m   \e[48;5;10m   \e[48;5;11m   \e[48;5;12m   \e[48;5;13m   \e[48;5;14m   \e[48;5;15m   ${reset}")
fi

info_length=${#info_text[@]}
ascii_length=${#ascii_text[@]}
if [[ $ascii_length -lt $info_length ]]; then
	ascii_placeholder="$(yes -- " " | tr -d $'\n' | head -c $(( $(echo "${ascii_text[0]}" | sed -e 's/\x1b\[[0-9;]*m//g' -e 's/\x1b[(]B$//g' | wc -m) - 1 )))"
	for (( i=0; i<$((info_length - ascii_length)); i++ ));
	do
		ascii_text+=("$ascii_placeholder${reset}")
	done
	ascii_length=${#ascii_text[@]}
fi

# use for loop to read all values and indexes
for (( i=0; i<ascii_length; i++ ));
do
	tmp=""
	if [[ $i -le ${info_length} ]]; then
		tmp="${info_text[$i]}"
	fi
	echo -e "${ascii_text[$i]}${tmp}"
done
