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 --noprovides --noremovemake' alias yayr='noglob yay -R --cascade --recursive' # 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 }