which pacman >/dev/null || return 0

# Arch aliases
alias pac='noglob sudo pacman'
alias pacs='pac -Syu --needed'
alias pacr='pac -R --recursive'
alias yays='noglob yay -Sy --needed'
alias yayr='noglob yay -R --cascade --recursive'
alias yau='yay -Syu --nobatchinstall'

# Helper function to integrate yay and fzf
yzf() {
	pos=$1
	shift
	sed "s/ /\t/g" |
		fzf --nth=$pos --multi --history="${FZF_HISTDIR:-$XDG_STATE_HOME/fzf}/history-yzf$pos" \
			--preview-window=60%,border-left \
			--bind="double-click:execute(xdg-open 'https://archlinux.org/packages/{$pos}'),alt-enter:execute(xdg-open 'https://aur.archlinux.org/packages?K={$pos}&SB=p&SO=d&PP=100')" \
			 "$@" | cut -f$pos | xargs
}

# Dev note: print -s adds a shell history entry

# List installable packages into fzf and install selection
yas() {
	cache_dir="/tmp/yas-$USER"
	test "$1" = "-y" && rm -rf "$cache_dir" && shift
	mkdir -p "$cache_dir"
	preview_cache="$cache_dir/preview_{2}"
	list_cache="$cache_dir/list$*"
	{ test "$(cat "$list_cache" | wc -l)" -lt 50000 && rm "$list_cache"; } 2>/dev/null
	pkg=$(
		( cat "$list_cache" 2>/dev/null ||
			{ pacman --color=always -Sl "$@"; yay --color=always -Sl aur "$@" } |
			sed 's/ [^ ]*unknown-version[^ ]*//' | tee "$list_cache" ) |
		yzf 2 --tiebreak=index --preview="cat $preview_cache 2>/dev/null | grep -v 'Querying' | grep . || yay --color always -Si {2} | tee $preview_cache"
	)
	if test -n "$pkg"
		then echo "Installing $pkg..."
			cmd="yay -S $pkg"
			print -s "$cmd"
			eval "$cmd" || yay -Sy $pkg
			rehash
	fi
}
# List installed packages into fzf and remove selection
# Tip: use -e to list only explicitly installed packages
yar() {
	pkg=$(yay --color=always -Q "$@" | yzf 1 --tiebreak=length --preview="yay --color always -Qli {1}")
	if test -n "$pkg"
		then echo "Removing $pkg..."
			cmd="yay -R --cascade --recursive $pkg"
			print -s "$cmd"
			eval "$cmd"
	fi
}