bvdeenen icon

xbld void restricted package builder

bvdeenen | PRO | 07/21/26 12:11:52 PM UTC | 0 ⭐ | 26480 👁️ | Never ⏰ | []
Bash |

1.96 KB

|

Software

|

0 👍

/

0 👎

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