function xbld() {
local dir="${1:-$HOME/void-packages}"
if [[ ! -d "$dir/srcpkgs" ]]; then
echo "Error: $dir does not look like a void-packages tree" >&2
return 1
fi
(
set -e
cd "$dir" || exit 1
git pull --rebase
# Collect restricted package names cleanly
local pkgs
pkgs=$(
shopt -s extglob nullglob
cd srcpkgs 2>/dev/null || exit 1
grep -l '^restricted=yes' **/template 2>/dev/null |
awk -F/ '{print $1}' |
sort -u
)
if [[ -z "$pkgs" ]]; then
echo "No restricted packages found." >&2
exit 0
fi
# fzf single select with bat preview
local selection
selection=$(
echo "$pkgs" | fzf \
--height 60% \
--layout=reverse \
--border \
--prompt="Select restricted package to build+install → " \
--header="Restricted packages in $(basename "$dir")" \
--preview 'p={}; bat --color=always --style=numbers --line-range :500 "$PWD/srcpkgs/$p/template" ' \
--preview-window=right:50%:wrap \
--header='ctrl-u=check for updates' \
--bind "ctrl-u:preview( ./xbps-src update-check {} )"
)
if [[ -z "$selection" ]]; then
echo "Nothing selected."
exit 0
fi
echo
echo "→ Selected: $selection"
echo " Building and installing..."
# Optional: clean first if you often want fresh builds
# ./xbps-src clean-restricted "$selection" # uncomment if desired
if ./xbps-src pkg "$selection" && command -v xi >/dev/null 2>&1; then
yes | xi "$selection"
else
echo "Build failed or 'xi' command not found." >&2
return 1
fi
)
return $?
}
Comments