#!/bin/bash # omarchy:summary=Build and install an Omarchy package from a local checkout # omarchy:group=dev # omarchy:args=[package-name] [path-to-checkout] # omarchy:examples=omarchy dev pkg-test omarchy-settings | omarchy dev pkg-test omarchy ~/Work/omarchy/omarchy-installer set -euo pipefail if [[ ${1:-} == "-h" || ${1:-} == "--help" ]]; then cat <[.dirty]' so 'pacman -Q' makes it obvious where the installed version came from. PKGBUILDs are read from \${OMARCHY_PKGBUILDS_DIR:-~/Work/omarchy/omarchy-pkgs/pkgbuilds}//. USAGE exit 0 fi PKG="${1:-omarchy-settings}" CHECKOUT="${2:-$HOME/Work/omarchy/omarchy-installer}" PKGBUILDS_ROOT="${OMARCHY_PKGBUILDS_DIR:-$HOME/Work/omarchy/omarchy-pkgs/pkgbuilds}" PKGBUILD_DIR="$PKGBUILDS_ROOT/$PKG" if [[ ! -d "$CHECKOUT" ]]; then echo "Error: checkout not found at $CHECKOUT" >&2 exit 1 fi if [[ ! -f "$PKGBUILD_DIR/PKGBUILD" ]]; then echo "Error: PKGBUILD not found at $PKGBUILD_DIR/PKGBUILD" >&2 echo " Pass a different package name as arg 1, or set OMARCHY_PKGBUILDS_DIR." >&2 exit 1 fi build_dir=$(mktemp -d -t omarchy-dev-pkg-test.XXXXXX) trap 'rm -rf "$build_dir"' EXIT cp -a "$PKGBUILD_DIR/." "$build_dir/" # pkgver=dev.[.dirty] so pacman -Q makes the source obvious. short_sha=$(git -C "$CHECKOUT" rev-parse --short HEAD 2>/dev/null || echo "local") dirty="" if [[ -d "$CHECKOUT/.git" ]] && [[ -n "$(git -C "$CHECKOUT" status --porcelain)" ]]; then dirty=".dirty" fi new_pkgver="dev.${short_sha}${dirty}" sed -i "s/^pkgver=.*/pkgver=${new_pkgver}/" "$build_dir/PKGBUILD" echo "Building $PKG ${new_pkgver} from $CHECKOUT" echo " build dir: $build_dir" echo " PKGBUILD : $PKGBUILD_DIR/PKGBUILD" echo cd "$build_dir" OMARCHY_SRC="$CHECKOUT" makepkg -s --skipchecksums --noconfirm "${@:3}" # Install separately so we can pass --overwrite='*' (makepkg -i can't). # Dev builds frequently conflict with files left behind by previous # script-installed Omarchy versions; the build is the authoritative state. built_pkg=$(ls -t "$build_dir"/*.pkg.tar.* 2>/dev/null | grep -v '\.sig$' | head -1) if [[ -z $built_pkg ]]; then echo "Error: no built package found in $build_dir" >&2 exit 1 fi sudo pacman -U --noconfirm --overwrite='*' "$built_pkg"