Parch

Packaging for Parch

Parch GNU/Linux uses the pacman package system and the PKGBUILD package format it inherited from Arch. Everything on a Parch system, from the kernel to the first-party desktop tools, is delivered as a .pkg.tar.zst archive that pacman can install, upgrade, and remove atomically. This section covers the whole packaging pipeline: reading and writing PKGBUILDs, building with makepkg, validating and testing, submitting your package by email, and maintaining it afterwards.

Anatomy of a package file

A package is a compressed tar archive. You can list its contents without installing it:

Inspect a package
$ tar -tf parch-example-1.4.2-1-x86_64.pkg.tar.zst
.PKGINFO
.MTREE
.INSTALL
usr/
usr/bin/
usr/bin/example
usr/share/
usr/share/licenses/
usr/share/licenses/parch-example/LICENSE
MemberPurpose
.PKGINFOMachine-readable metadata: name, version, dependencies, build options. Pacman reads this to resolve dependencies.
.MTREEGzipped inventory of every file in the package with sizes and SHA-256 digests. Pacman uses it to verify installed files with pacman -Qkk.
.INSTALLOptional shell script with pre_install, post_install, pre_upgrade, post_upgrade, pre_remove, and post_remove hooks. Present only when the PKGBUILD sets install=.
usr/, etc/, …The actual file tree that pacman extracts onto the system.

Everything outside the file tree is metadata generated by makepkg from the PKGBUILD, so a good package starts with a good PKGBUILD.

The three package origins

Every package on a Parch system comes from one of three places:

OriginWhat it isExamples
Upstream ArchPackages taken unmodified from the Arch repositories (core, extra, multilib). Parch tracks Arch and does not rebuild these.linux, plasma-desktop, firefox
Parch-modifiedUpstream software rebuilt with Parch patches, defaults, or branding.calamares-parch, themed session packages
Parch-exclusiveSoftware written for Parch that exists nowhere else.parch-welcome, parch-update, Pastor (the Parch Store), mirrorman, gamehub, pordle, PKM

Parch-exclusive and Parch-modified packages carry the parch- name prefix so they are easy to spot with pacman -Ss. The full naming rules are on the naming and versioning page.

The repository layer

Binary packages are distributed through two Parch repositories, listed in /etc/pacman.conf before the upstream repos:

/etc/pacman.conf (repository entries)
[void]
SigLevel = Optional TrustedOnly
Server = https://raw.githubusercontent.com/parchlinux/void/main/x86_64/

[world]
SigLevel = Never
Server = https://github.com/parchlinux/world/raw/refs/heads/main/x86_64/

[core]
Include = /etc/pacman.d/mirrorlist

[extra]
Include = /etc/pacman.d/mirrorlist
  • world (github.com/parchlinux/world) is the stable repository. It carries all Parch-exclusive and Parch-modified binaries and is enabled on every installed system.
  • Void (github.com/parchlinux/Void) is the testing repository. New packages and updates land here first and move to world after community testing.

The packaging pipeline

A package travels this path from your editor to user systems:

  1. Write the PKGBUILD: metadata, sources, checksums, and the four build functions.
  2. Build locally: makepkg downloads sources, compiles, and produces the .pkg.tar.zst.
  3. Validate and test: namcap, a clean chroot build with pkgctl build, install/upgrade/remove checks.
  4. Submit by email: contact@parchlinux.com with the PKGBUILD, .SRCINFO, and test evidence.
  5. Review: the team checks naming, licenses, dependencies, and packaging quality.
  6. Publish to Void: accepted packages appear in the testing repository as binaries.
  7. Promote to world: after community testing, the package becomes stable.

The source of step 1 and 2 is the PKGBUILD itself, not a binary blob: even though Parch distributes binaries, everything reaches users as a reviewed, reproducible recipe. If you are packaging your own application, start from the application development section for the build side and come back here for distribution. Packages that should appear on an ISO are wired in through the package list, see ISO building for that integration.

In this section

Continue in Packaging