# vim: set filetype=zsh :

function () {
	MINILINE_NERD_FONTS=true;
	MINILINE_GLYPH_GIT="|\\";
	MINILINE_GLYPH_BRANCH="|/";
	MINILINE_GLYPH_COMMIT="@-";

	MINILINE_INCLUDE_VCS=true;

	MINILINE_COLOR_COMMIT="yellow"; #"#FFA500";
	MINILINE_COLOR_BRANCH="cyan";

	if $MINILINE_NERD_FONTS; then
		MINILINE_GLYPH_GIT=$'\ue702';
		MINILINE_GLYPH_BRANCH=$'\ue725';
		MINILINE_GLYPH_COMMIT=$'\ue729';
	fi

	prompt_opts=(cr percent subst);

	function ps_vcs() {
		ps_vcs="";

		! $MINILINE_INCLUDE_VCS && return;

		# search for git dir
		local found=false;
		local dir="$(readlink -f "$(pwd)")";
		while [[ "$dir" != "/" ]]; do
			if [[ -d "$dir/.git" ]]; then
				found=true;
				break;
			fi;

			dir="$(readlink -f "$dir/..")";
		done;

		# handle git repo
		if $found; then
			local git_dir="$dir/.git";

			# read current head
			local head_type="commit";
			local head="$(<"$git_dir/HEAD")";
			local branch;
			if [[ "$head" =~ 'ref: (.*)' ]]; then
				head="${match[1]}";
				head_type="branch";
				
				[[ "$head" =~ 'refs/heads/(.*)' ]];
				branch="${match[1]}";
			fi;

			if [[ "$head_type" == "commit" ]]; then
				[[ "$head" =~ '(........).*' ]]; # this might not be a valid commit but whos going to use a repo with smth that large
				ps_vcs=" | $MINILINE_GLYPH_COMMIT %F{$MINILINE_COLOR_COMMIT}${match[1]}%F{white}";
			elif [[ "$head_type" == "branch" ]]; then
				ps_vcs=" | $MINILINE_GLYPH_BRANCH %F{$MINILINE_COLOR_COMMIT}HEAD%F{$MINILINE_COLOR_BRANCH}@$branch%F{white}";
			fi;
		fi;
	}

	function precmd() {
		ps_vcs;
	}

	PS1=$'\u256d\u2500 %F{cyan}%n@%m%F{white} | %F{red}%/%f${ps_vcs} > \n\u2570%(!.#.$)%F{white} ';
	PS2=$'%{\x1b[A\u2502 \x1b[B\x1b[G%0G%}\u2570%(!.#.$)%F{white} ';
}