X Linux
Documentation menu

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 with makepkg, produces a .pkg.tar.zst for the pacman repository.
  • XBUILD — native descriptor for the xpkg/xpm path, produces an .xp package. The native workflow that consumed it is currently disabled; kept for reference in docs/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 (PKGBUILD 1.0-8). Ships the os-release template, GRUB defaults, distributor logo, wallpapers and the x-release-apply tool, plus pacman hooks (99-x-os-release.hook, 99-x-grub.hook) that re-apply branding after filesystem/grub upgrades.
  • x-dev — development environment package (PKGBUILD 1.0-2). Installs /usr/bin/x-dev-env and helpers under /usr/share/x-dev/ (shell aliases, NVIDIA/QEMU/Node setup scripts). Depends on zsh git base-devel curl wget. install=x-dev.install runs 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 xlnux/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-1-any.pkg.tar.zst).

  • There is no packages/x-scripts/ source directory here.
  • The published artifact in this repo is version 0.1.0-1; the PKGBUILD in the scripts repo has since moved on (pkgrel 11). Re-import an updated build from scripts/packaging/ when republishing the payload.

Prebuilt artifacts, no sources

  • packages/xpm/, packages/xpkg/ — committed .xp binaries (with .sig files).
  • packages/xfetch/, packages/xtop/ — committed .pkg.tar.zst binaries.

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:

FileRole
x.db, x.db.tar.gzPackage database (x.db is the uncompressed copy of x.db.tar.gz).
x.files, x.files.tar.gzFile-list database for pacman -F.
*.pkg.tar.zstThe packages: x-release-1.0-8, x-dev-1.0-2, x-scripts-0.1.0-1, xpm-0.1.0-3.
SHA256SUMSChecksums over every file in the directory.
signing.pub, trustedkeys.gpgSigning/trust material consumed by the native endpoint.

Clients configure the repository in pacman.conf as:

[x]
Server = https://xlnux.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.old x.files.tar.gz.old
repo-add -n -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-add creates x.db.tar.gz and x.files.tar.gz from the .pkg.tar.zst files.
  • -R removes any package from the database that is no longer in the directory (cleanup of old versions); -n only adds packages that are not already in the database.
  • x.db/x.files are plain copies of the .tar.gz files so pacman can read them directly.
  • No signing flag is passed today, so the database is regenerated unsigned.
  • SHA256SUMS is regenerated from every file in the directory.

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://xlnux.github.io/x-repo/x/x86_64/. The documented xpm repository URL is https://xlnux.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:

  1. Builds the configured PKGBUILD packages in place (build_pkgbuild x-release, build_pkgbuild x-dev) using makepkg -cf --noconfirm. The build_xbuild helper for the native path is present but commented out.
  2. Copies every packages/*/*.pkg.tar.zst into public/repo/x86_64/ and removes the build artifact afterwards.
  3. Regenerates the pacman database and SHA256SUMS as shown above.
  4. 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. To import an externally built package (such as x-scripts), place its .pkg.tar.zst so the copy step picks it up (e.g. drop it under a packages/*/ directory or directly into public/repo/x86_64/ before running the script).

Edit this page on GitHub