Create a new AUR (Arch User Repository) package with proper structure, validation, and git setup.
Package name: $ARGUMENTS[0] Source type: $ARGUMENTS[1]
Workflow
Gather package information:
- Package name (provided by user)
- Source type (npm, rust, go, git, binary, appimage)
- Fetch metadata from upstream (version, description, license, URL)
Create package directory structure:
- Directory named after the package
.gitignorefor build artifactsPKGBUILDwith appropriate structure for source type
Generate checksums (skip for
-gitpackages):updpkgsumsBuild and validate:
makepkg -f # Build the package namcap PKGBUILD # Lint PKGBUILD namcap *.pkg.tar.zst # Lint built packageGenerate metadata:
makepkg --printsrcinfo > .SRCINFOInitialize git and push to AUR:
git init git remote add origin ssh://aur@aur.archlinux.org/<package-name>.git git add . git commit -m "feat: initial commit for <package-name>" git push -u origin master
.gitignore
Create with the following content:
pkg
src
<package-name>-*
*.tar.zst
For NPM packages, use the actual package name (without scope for scoped packages).
For AppImage packages, also include squashfs-root, *.AppImage, and the downloaded license file.
Common PKGBUILD Structure
All PKGBUILD files include these fields:
pkgname=<package-name>
pkgver=<version>
pkgrel=1
pkgdesc="<package description>"
arch=(any) # or (x86_64) for architecture-specific
url="<upstream-url>"
license=('<license>')
depends=() # runtime dependencies
makedepends=() # build-time dependencies
source=(<source-url>)
sha256sums=('SKIP') # Update with updpkgsums
package() {
# Installation steps
}
Source-Specific Instructions
Load the appropriate reference file based on source type:
- NPM packages: See
references/npm-packages.md- For Node.js packages from npm registry - Rust packages: See
references/rust-packages.md- For Cargo-based Rust projects - Go packages: See
references/go-packages.md- For Go modules - VCS/Git packages: See
references/vcs-packages.md- For-gitpackages tracking upstream - Binary packages: See
references/binary-packages.md- For pre-compiled binaries - AppImage packages: See
references/appimage-packages.md- For AppImage binaries (typically Electron apps)
Useful Commands
| Command | Purpose |
|---|---|
updpkgsums |
Update sha256sums from source files |
makepkg --printsrcinfo > .SRCINFO |
Generate .SRCINFO metadata |
makepkg -f |
Build package (force rebuild) |
makepkg -si |
Build and install package |
namcap PKGBUILD |
Lint PKGBUILD for issues |
namcap *.pkg.tar.zst |
Lint built package |
Package Naming Conventions
- Standard:
<package-name>- For release tarballs - VCS tracking:
<package-name>-git- For git repositories - Binary:
<package-name>-bin- For pre-compiled binaries - AppImage:
<package-name>-appimage- For AppImage binaries
Additional Resources
Reference Files
references/npm-packages.md- NPM package specifics (scoped packages, registry URLs, permission fixes)references/rust-packages.md- Rust/Cargo package specifics (build flags, LTO issues, workspaces)references/go-packages.md- Go module specifics (build flags, GOPATH handling)references/vcs-packages.md- VCS/Git package specifics (pkgver() function, provides/conflicts)references/binary-packages.md- Binary package specifics (release downloads, architecture handling)references/appimage-packages.md- AppImage package specifics (extraction, desktop integration, /opt/ install)
Examples
examples/pkgbuild-template- Basic PKGBUILD template structure