2025-11-04 11:54:52 -05:00
2025-11-04 00:18:22 -05:00
2025-11-10 15:07:18 +01:00
2025-10-26 23:53:13 -04:00
2025-10-27 00:50:41 -04:00
2025-10-30 00:56:48 -04:00

Omarchy Package Repository

Build system for the Omarchy Package Repository. Builds PKGBUILDs from local sources and AUR, signs them, and syncs to production.

Multi-Architecture: Supports both x86_64 and aarch64 (ARM64).

Prerequisites

aarch64 Builds (Optional)

To build ARM64 packages on x86_64, enable QEMU emulation:

# Run after each reboot
docker run --privileged --rm tonistiigi/binfmt --install arm64

# Verify
docker run --rm --platform linux/arm64 alpine:latest uname -m
# Should output: aarch64

Note: aarch64 builds use QEMU and slower than native x86_64 builds.

Quick Start

Complete Workflow

# Build, sign, promote, clean, and sync
bin/repo release

# Single package
bin/repo release --package omarchy-nvim

# ARM64
bin/repo release --arch aarch64 --package omarchy-nvim

Step-by-Step

bin/repo build                          # Build (unsigned)
bin/repo sign                           # Sign packages
bin/repo promote                        # Copy to production
bin/repo clean                          # Remove old versions
bin/repo sync pkgs.omarchy.org/x86_64   # Sync to remote

Commands

Build

bin/repo build                                   # All packages (x86_64)
bin/repo build --package yay cursor-bin          # Specific packages
bin/repo build --arch aarch64                    # ARM64

Output: Unsigned .pkg.tar.zst in build-output/

Sign

bin/repo sign

Fetches GPG key from 1Password or environment, signs all packages in build-output/.

Promote

bin/repo promote                    # Copy to production
bin/repo promote --arch aarch64     # ARM64
bin/repo promote --dry-run          # Preview

Copies signed packages from build-output/ → pkgs.omarchy.org/.

Clean

bin/repo clean                      # Keep 2 versions
bin/repo clean --keep 3             # Keep 3 versions
bin/repo clean --dry-run            # Preview

Removes old versions, updates database.

Sync

bin/repo sync pkgs.omarchy.org/x86_64                    # Production
bin/repo sync pkgs.omarchy.org/aarch64                   # ARM64
bin/repo sync pkgs.omarchy.org/x86_64 --skip-prod-check # No confirmation

Syncs to remote server using rclone.

Other

bin/repo list                       # List packages
bin/repo remove <package>           # Remove package
bin/repo update                     # Update database

Directory Structure

omarchy-pkgs/
├── pkgbuilds/              # Source PKGBUILDs
├── build-output/           # Unsigned packages (temporary)
│   ├── x86_64/
│   └── aarch64/
├── pkgs.omarchy.org/       # Signed packages (production)
│   ├── x86_64/
│   └── aarch64/
├── build/                  # Build scripts (in container)
└── bin/                    # CLI tools (on host)

Adding Packages

From AUR

# Add to sync list
echo "package-name" >> build/packages/omarchy-aur.packages

# Sync PKGBUILD
bin/sync-aur package-name

# Build and release
bin/repo release --package package-name

Local Patches for AUR Packages

Create pkgbuilds/package-name/patches/*.patch to maintain modifications across AUR syncs:

cd pkgbuilds/package-name
# Make changes
git diff > patches/my-fix.patch
# Next sync will auto-apply patches

Custom Package

mkdir pkgbuilds/my-package
# Add PKGBUILD and files
bin/repo release --package my-package

Architecture-Specific Notes

x86_64

  • Native builds (fast)
  • Mirrors: mirror.omarchy.org, rackspace, pkgbuild.com

aarch64

  • QEMU emulation required on x86_64 hosts (slower)
  • Uses Arch Linux ARM repositories
  • Additional repos: [alarm], [aur]
  • Same workflow, just add --arch aarch64

Building for Both Architectures

# Build x86_64
bin/repo release --package myapp

# Build aarch64
bin/repo release --arch aarch64 --package myapp

# Sync both
bin/repo sync pkgs.omarchy.org/x86_64
bin/repo sync pkgs.omarchy.org/aarch64

Dependency Resolution

The build system automatically handles inter-package dependencies:

  1. Parses depends=() and makedepends=() from PKGBUILDs
  2. Builds in correct order
  3. Makes newly-built packages available via temporary [omarchy-build] repo

Example: If aether depends on hyprshade, hyprshade is built first.

Version Management

Packages are only rebuilt if:

  • PKGBUILD version is newer than repository version
  • Package doesn't exist in production
S
Description
No description provided
Readme MIT
3.7 MiB
Languages
Shell 93.5%
Python 2.4%
C 1.7%
Lua 1.3%
Dockerfile 0.9%
Other 0.2%