Claude
Skills
Sign in
Back

create-aur-package

Included with Lifetime
$97 forever

This skill should be used when the user asks to "create an AUR package", "make a new AUR package", "scaffold AUR package", "create PKGBUILD", "package for AUR", or mentions AUR package creation with a specific source type (npm, rust, go, git, binary, appimage). Provides comprehensive guidance for creating Arch User Repository packages with proper structure, checksums, and git setup.

Backend & APIs

What this skill does


Create a new AUR (Arch User Repository) package with proper structure, validation, and git setup.

Package name: $ARGUMENTS[0]
Source type: $ARGUMENTS[1]

## Workflow

1. **Gather package information**:
   - Package name (provided by user)
   - Source type (npm, rust, go, git, binary, appimage)
   - Fetch metadata from upstream (version, description, license, URL)

2. **Create package directory structure**:
   - Directory named after the package
   - `.gitignore` for build artifacts
   - `PKGBUILD` with appropriate structure for source type

3. **Generate checksums** (skip for `-git` packages):
   ```bash
   updpkgsums
   ```

4. **Build and validate**:
   ```bash
   makepkg -f              # Build the package
   namcap PKGBUILD         # Lint PKGBUILD
   namcap *.pkg.tar.zst    # Lint built package
   ```

5. **Generate metadata**:
   ```bash
   makepkg --printsrcinfo > .SRCINFO
   ```

6. **Initialize git and push to AUR**:
   ```bash
   git init
   git remote add origin ssh://[email protected]/<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:

```bash
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 `-git` packages 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

Related in Backend & APIs