diff --git a/snapx-bin/.SRCINFO b/snapx-bin/.SRCINFO new file mode 100644 index 0000000..f257dd7 --- /dev/null +++ b/snapx-bin/.SRCINFO @@ -0,0 +1,18 @@ +pkgbase = snapx-bin + pkgdesc = Screenshot tool that handles images, text, and video - ShareX fork, Avalonia UI (upstream binary) + pkgver = 0.4.0 + pkgrel = 1 + url = https://github.com/SnapXL/SnapX + arch = x86_64 + license = GPL-3.0-or-later + depends = glibc + depends = gcc-libs + depends = hicolor-icon-theme + provides = snapx-ui + conflicts = snapx-ui + options = !strip + options = !debug + source = https://github.com/Felitendo/PKGBUILDS/releases/download/snapx-bin-0.4.0/snapx-bin-0.4.0.tar.zst + sha256sums = d2098cac542bca82e68be0a4fa98db22f2d84d35c683d18582382dc9206eb5ee + +pkgname = snapx-bin diff --git a/snapx-bin/PKGBUILD b/snapx-bin/PKGBUILD new file mode 100644 index 0000000..1d66c44 --- /dev/null +++ b/snapx-bin/PKGBUILD @@ -0,0 +1,22 @@ +# Maintainer: Felitendo +# This PKGBUILD is updated automatically: +# https://github.com/Felitendo/PKGBUILDS + +pkgname=snapx-bin +pkgver=0.4.0 +pkgrel=1 +pkgdesc="Screenshot tool that handles images, text, and video - ShareX fork, Avalonia UI (upstream binary)" +arch=('x86_64') +url="https://github.com/SnapXL/SnapX" +license=('GPL-3.0-or-later') +depends=('glibc' 'gcc-libs' 'hicolor-icon-theme') +provides=('snapx-ui') +conflicts=('snapx-ui') +options=('!strip' '!debug') +source=("https://github.com/Felitendo/PKGBUILDS/releases/download/${pkgname}-${pkgver}/${pkgname}-${pkgver}.tar.zst") +sha256sums=('d2098cac542bca82e68be0a4fa98db22f2d84d35c683d18582382dc9206eb5ee') + +package() { + cp -a "$srcdir/usr" "$pkgdir/" + cp -a "$srcdir/opt" "$pkgdir/" +} diff --git a/snapx-bin/pkg.sh b/snapx-bin/pkg.sh new file mode 100644 index 0000000..3ffc7b6 --- /dev/null +++ b/snapx-bin/pkg.sh @@ -0,0 +1,52 @@ +# snapx-bin - SnapX (https://github.com/SnapXL/SnapX), screenshot/sharing +# tool forked from ShareX, C#/.NET Avalonia UI. +# +# Upstream ships a self-contained Linux bundle per (pre)release, but the +# asset names embed build metadata (e.g. ...-0.4.0-alpha.0+g7eafb0f-X64...) +# that cannot be derived from the version alone. build_artifact() therefore +# resolves the asset by pattern via the GitHub API and repackages it under +# our own predictable name. All upstream releases are marked prerelease, so +# latest_version() reads the release list instead of /latest. + +UPSTREAM_REPO="SnapXL/SnapX" + +BUILD_DEPS=() + +latest_version() { + gh api "repos/$UPSTREAM_REPO/releases" --jq '.[0].tag_name' | sed 's/^v//' +} + +# build_artifact +build_artifact() { + local ver="$1" outfile="$2" + local workdir destdir asset + workdir="$(mktemp -d)" + destdir="$(mktemp -d)" + + asset="$(gh api "repos/$UPSTREAM_REPO/releases/tags/v$ver" --jq '.assets[].name' \ + | grep '^SnapX-UI-Release-Linux-' | grep -v musl | grep -- '-X64\.tar\.zst$')" + [[ "$(wc -l <<< "$asset")" -eq 1 ]] || { echo "expected exactly one UI asset, got: $asset" >&2; return 1; } + + gh release download "v$ver" -R "$UPSTREAM_REPO" --pattern "$asset" --dir "$workdir" + mkdir -p "$destdir/opt/snapx" + tar -xf "$workdir/$asset" -C "$destdir/opt/snapx" + chmod 755 "$destdir/opt/snapx/snapx-ui" + + # upstream's launcher resolves its own directory, so a symlink from + # /usr/bin would break it - use a wrapper instead + mkdir -p "$destdir/usr/bin" + cat > "$destdir/usr/bin/snapx-ui" << 'EOF' +#!/bin/sh +exec /opt/snapx/snapx-ui "$@" +EOF + chmod 755 "$destdir/usr/bin/snapx-ui" + + # desktop file, icons and metainfo from the source tree + curl -sfL "https://github.com/$UPSTREAM_REPO/archive/refs/tags/v$ver.tar.gz" | tar -xz -C "$workdir" + cp -a "$workdir/SnapX-$ver/packaging/usr/share" "$destdir/usr/" + + tar --zstd --sort=name --owner=0 --group=0 --numeric-owner --mtime='@0' \ + -cf "$outfile" -C "$destdir" usr opt + + rm -rf "$workdir" "$destdir" +}