VUP
VUP is a Void Linux user package repository: prebuilt .xbps packages, GitHub-hosted repositories, CI-built templates, and a workflow that tries to feel close to Void instead of inventing a separate ecosystem.
Problem
User repositories are easy to start and easy to turn into unmaintainable shell glue. VUP exists to keep the repository close to xbps-src while still making binaries practical to consume.
Shape
The repository is intentionally boring infrastructure. Templates follow Void conventions, packages build in GitHub Actions, and release assets act as XBPS repositories. There is no custom package server to keep alive.
Each category gets its own release stream per architecture. GitHub Pages publishes an index that maps package names to categories, architectures, and versions so tooling can find the right repository without hardcoding everything.
CI only rebuilds what changed. That matters because the project should scale by adding templates, not by making every package change rebuild the world.
Website
VUP also has a web frontend at voiduserpackages.org. The package list supports category filtering and search, and each package page has quick-copy install commands for the selected architecture.
That part matters for people who do not want to install vuru: the site can give them the longer XBPS repository commands directly. It also includes a source/template viewer, so package pages are closer to a modern AUR-style page than just a download index.
The site is built as a modern React Router SSR app. That is more machinery than this personal site, but it makes sense there because VUP needs package browsing, filtering, source views, and generated install commands.
xbps-src Patches
VUP carries a few patches against upstream void-packages / xbps-src to make the categorized repository layout work cleanly.
Upstream Void uses:
srcpkgs/<pkgname>/template
VUP uses:
srcpkgs/<category>/<pkgname>/template
That needs support in the build tooling, otherwise every useful command has to fight the directory layout. The patches add category-aware template resolution in common.sh, export the resolved package directory as _srcpkg_dir, expose XBPS_PKG_CATEGORY, and make FILESDIR / PATCHESDIR use the resolved path.
git.sh also uses _srcpkg_dir for SOURCE_DATE_EPOCH, so categorized templates still get correct source date handling. xbps-src itself checks srcpkgs/core/xbps-triggers/files before falling back to the flat trigger path.
None of this is glamorous, but it is the difference between VUP feeling integrated and every package operation needing special-case glue.
Repository Model
Packages live under:
vup/srcpkgs/<category>/<pkgname>/template
The categories are intentionally simple: core, utilities, editors, messenger, and programming. VUP-specific checks catch required template fields and common packaging mistakes before a maintainer has to care.
Policy
VUP is a build system, not a software review board. If a template builds, it can be accepted. That does not mean the software is safe, legal, maintained, or sane.
Users should read templates before installing things from random people on the internet. That is not a joke policy; that is the actual threat model.