Overview/x-repo — package repository
Repository Layout
Top level
app/ Next.js portal source (App Router)
components/ React components used by the portal
lib/ Client helpers (i18n dictionary)
packages/ Package sources and build artifacts
public/ Static content served on GitHub Pages
repo/x86_64/ [x] pacman repository (db + .pkg.tar.zst tarballs)
x/x86_64/ Native endpoint (.xp packages) used by xpm
images/, fonts/ Website assets
build-packages.sh Local build + repo-add script
docs/ Documentation
.github/workflows/ CI/CD workflows
packages/
One directory per package. Each may contain a PKGBUILD, an XBUILD, or both, plus
package-local files.
PKGBUILD— Arch-compatible source descriptor. Built withmakepkg, produces a.pkg.tar.zstfor the pacman repository.XBUILD— native descriptor for the xpkg/xpm path, produces an.xppackage. The native workflow that consumed it is currently disabled; kept for reference indocs/build-x-native-workflow.md.
The README notes that while PKGBUILD is kept for legacy Arch tooling, XBUILD is the
native path for xpkg/xpm.
Buildable packages (PKGBUILD)
x-release— X Linux identity and branding (PKGBUILD1.0-8). Ships theos-releasetemplate, GRUB defaults, distributor logo, wallpapers and thex-release-applytool, plus pacman hooks (99-x-os-release.hook,99-x-grub.hook) that re-apply branding afterfilesystem/grubupgrades.x-dev— development environment package (PKGBUILD1.0-2). Installs/usr/bin/x-dev-envand helpers under/usr/share/x-dev/(shell aliases, NVIDIA/QEMU/Node setup scripts). Depends onzsh git base-devel curl wget.install=x-dev.installruns the post-install logic.
Only these two are built by build-packages.sh from their PKGBUILD today.
x-scripts: imported artifact, no source here
x-scripts is not built in this repository. Its PKGBUILD lives in the sibling
repo equislinux/scripts under scripts/packaging/ and packages the whole provisioning
payload (phases, CLI x, configs). The resulting tarball is built there and imported
into this repo, committed under public/repo/x86_64/ (currently
x-scripts-0.1.0-19-any.pkg.tar.zst).
- There is no
packages/x-scripts/source directory here. - The published artifact and the
PKGBUILDinscripts/packaging/are aligned at0.1.0-19(the multi-kernel payload revision).build-packages.shimports the sibling build automatically; re-run it when republishing the payload.
Prebuilt artifacts, no sources
packages/xpm/,packages/xpkg/— committed.xpbinaries (with.sigfiles).packages/xfetch/,packages/xtop/— committed.pkg.tar.zstbinaries.
These are leftovers of the native packaging path, not sources. The native workflow that
regenerated them from upstream repos is disabled (see docs/build-x-native-workflow.md).
public/repo/x86_64/ — the [x] pacman repository
This directory is the pacman-facing repository. Files present:
| File | Role |
|---|---|
x.db, x.db.tar.gz | Package database (x.db is the uncompressed copy of x.db.tar.gz). |
x.db.sig, x.db.tar.gz.sig | Detached OpenPGP signature over the package database (signed builds). |
x.files, x.files.tar.gz | File-list database for pacman -F. |
x.files.sig, x.files.tar.gz.sig | Detached signature over the file-list database (signed builds). |
*.pkg.tar.zst | The packages: x-release-1.0-8, x-dev-1.0-2, x-scripts-0.1.0-19, xpm-0.1.0-3. |
*.pkg.tar.zst.sig | Detached OpenPGP signature next to each package (signed builds). |
SHA256SUMS | Checksums over every file in the directory. |
SHA256SUMS.sig | Detached signature over SHA256SUMS (signed builds). |
signing.pub, trustedkeys.gpg | Public project key and the GPG keyring consumers import to verify the repository (signing.pub is the armored key; trustedkeys.gpg is the binary keyring). |
Clients configure the repository in pacman.conf as:
[x]
Server = https://equislinux.github.io/x-repo/repo/x86_64
How the database is updated (repo-add)
The database is never edited by hand. build-packages.sh regenerates it with
repo-add:
cd public/repo/x86_64
rm -f x.db x.files x.db.tar.gz x.files.tar.gz x.db.tar.gz.old x.files.tar.gz.old
repo-add -R x.db.tar.gz *.pkg.tar.zst
rm -f x.db x.files
cp x.db.tar.gz x.db
cp x.files.tar.gz x.files
sha256sum * > SHA256SUMS
repo-addcreatesx.db.tar.gzandx.files.tar.gzfrom the.pkg.tar.zstfiles.- The database is rebuilt from scratch from the tarballs present in the directory, so entries for packages that no longer exist are dropped too.
x.db/x.filesare plain copies of the.tar.gzfiles so pacman can read them directly.- By default the database is regenerated unsigned. When
X_REPO_SIGN_KEYis exported,build-packages.shcallsrepo-add -s -k, signsSHA256SUMS, and (re-)exportstrustedkeys.gpg+signing.pub; the signed state lives on thefeat/signingbranch today (see signing.md). SHA256SUMSis regenerated from every file in the directory and signed asSHA256SUMS.sigwhen signing is enabled.- Per-package signatures (
*.pkg.tar.zst.sig) come frommakepkg --signand are kept next to their tarball.
public/x/x86_64/ — native .xp endpoint
Companion endpoint for xpm. It holds .xp packages (xpkg, xpm, x-release),
its own database (x.db.tar.gz, x.files.tar.gz), signing.pub/trustedkeys.gpg and
a SHA256SUMS. It was generated by the disabled native workflow and is served at
https://equislinux.github.io/x-repo/x/x86_64/. The documented xpm repository URL is
https://equislinux.github.io/x-repo/x/$arch.
build-packages.sh
Local script (run from the repo root, requires an Arch-like environment with
makepkg and repo-add). It:
- Builds the configured PKGBUILD packages in place (
build_pkgbuild x-release,build_pkgbuild x-dev) usingmakepkg -cf --noconfirm. Thebuild_xbuildhelper for the native path is present but commented out. - Copies every
packages/*/*.pkg.tar.zstintopublic/repo/x86_64/and removes the build artifact afterwards. - Regenerates the pacman database and
SHA256SUMSas shown above. - Prints the closing reminder:
Commit public/repo/x86_64/ and push, then run the deploy workflow.
To add a new PKGBUILD package to the flow, add its directory to build_pkgbuild
calls. Externally built packages (such as x-scripts) are imported automatically
from ../scripts/packaging/; you can also drop a .pkg.tar.zst directly into
public/repo/x86_64/ before running ./build-packages.sh --index-only.