From 69d60ede2e2a1b6bcb1ab1250fcf56481c40754b Mon Sep 17 00:00:00 2001 From: funman300 Date: Fri, 1 May 2026 04:34:04 +0000 Subject: [PATCH] Initial PKGBUILD for solitaire-quest 0.1.0-1 --- .gitignore | 7 +++ PKGBUILD | 101 ++++++++++++++++++++++++++++++++++++++++ README.md | 97 ++++++++++++++++++++++++++++++++++++++ solitaire-quest.desktop | 12 +++++ 4 files changed, 217 insertions(+) create mode 100644 .gitignore create mode 100644 PKGBUILD create mode 100644 README.md create mode 100644 solitaire-quest.desktop diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a00806f --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +pkg/ +src/ +*.tar.gz +*.tar.zst +*.tar.xz +*.pkg.tar* +.SRCINFO~ diff --git a/PKGBUILD b/PKGBUILD new file mode 100644 index 0000000..a285a78 --- /dev/null +++ b/PKGBUILD @@ -0,0 +1,101 @@ +# Maintainer: funman300 +pkgname=solitaire-quest +pkgver=0.1.0 +pkgrel=1 +pkgdesc="Cross-platform Klondike Solitaire in Rust + Bevy with sync, achievements, and four game modes" +arch=('x86_64') +url="https://git.aleshym.co/funman300/Rusty_Solitare" +license=('MIT' 'LGPL-3.0-only' 'OFL-1.1') +# MIT for the project code, LGPL-3.0 for the bundled xCards card faces, and +# OFL-1.1 for FiraMono. See /usr/share/licenses/$pkgname/CREDITS.md for the +# full attribution table. + +depends=( + 'alsa-lib' # audio output via kira + 'libxkbcommon' # keyboard input on X11/Wayland + 'wayland' # native Wayland support + 'libx11' # X11 fallback + 'systemd-libs' # libudev, gamepad/input device discovery + 'gcc-libs' + 'libsecret' # keyring crate — sync server credential storage + 'vulkan-icd-loader' # Bevy's wgpu backend + 'fontconfig' # glyph fallback +) + +makedepends=( + 'cargo' + 'rust' + 'pkgconf' +) + +# Tarball produced by Gitea's `/archive/.tar.gz` endpoint. If the +# project moves to GitHub or another forge, replace the URL. +source=("$pkgname-$pkgver.tar.gz::$url/archive/v$pkgver.tar.gz") +sha256sums=('SKIP') +# After the v0.1.0 tag is published and the tarball is reachable, run: +# updpkgsums +# in this directory to replace SKIP with the real sha256 sum, then commit. + +# Gitea archives unpack to a directory named after the repo and tag. The +# exact name depends on the Gitea version; check with `tar tf` if unsure. +_archive_dir="Rusty_Solitare" + +prepare() { + cd "$srcdir/$_archive_dir" + export RUSTUP_TOOLCHAIN=stable + cargo fetch --locked --target "$(rustc -vV | sed -n 's/host: //p')" +} + +build() { + cd "$srcdir/$_archive_dir" + export RUSTUP_TOOLCHAIN=stable + export CARGO_TARGET_DIR=target + cargo build --frozen --release --package solitaire_app +} + +check() { + cd "$srcdir/$_archive_dir" + export RUSTUP_TOOLCHAIN=stable + cargo test --frozen --release --workspace --no-run + # Skipping `cargo test --release` execution because the workspace is + # large and tests are independently CI-checked; just verifying the + # release artefacts compile is sufficient as a packaging gate. +} + +package() { + cd "$srcdir/$_archive_dir" + + # Layout chosen so the binary's parent + "../assets" resolves to the + # bundled assets directory. Bevy's `current_exe()` follows the + # /usr/bin symlink to the real binary, so resolution lands inside + # /usr/lib/$pkgname. + install -Dm755 "target/release/solitaire_app" \ + "$pkgdir/usr/lib/$pkgname/bin/solitaire-quest" + + install -dm755 "$pkgdir/usr/lib/$pkgname/assets" + cp -r assets/. "$pkgdir/usr/lib/$pkgname/assets/" + + # /usr/bin entry — symlink so PATH-based launches resolve correctly. + install -dm755 "$pkgdir/usr/bin" + ln -s "/usr/lib/$pkgname/bin/solitaire-quest" \ + "$pkgdir/usr/bin/solitaire-quest" + + # Desktop entry + icon for application menus. + install -Dm644 "$srcdir/solitaire-quest.desktop" \ + "$pkgdir/usr/share/applications/$pkgname.desktop" + # Icon is sourced from the packaging repo (PKGBUILD's directory), + # not the upstream archive — drop a 256×256 PNG named + # solitaire-quest.png next to the PKGBUILD when one becomes available. + if [ -f "$srcdir/solitaire-quest.png" ]; then + install -Dm644 "$srcdir/solitaire-quest.png" \ + "$pkgdir/usr/share/icons/hicolor/256x256/apps/$pkgname.png" + fi + + # License + credit attribution. + install -Dm644 LICENSE \ + "$pkgdir/usr/share/licenses/$pkgname/LICENSE" + install -Dm644 CREDITS.md \ + "$pkgdir/usr/share/licenses/$pkgname/CREDITS.md" + install -Dm644 README.md \ + "$pkgdir/usr/share/doc/$pkgname/README.md" +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..f2aaffd --- /dev/null +++ b/README.md @@ -0,0 +1,97 @@ +# solitaire-quest (Arch packaging) + +PKGBUILD for [Solitaire Quest](https://git.aleshym.co/funman300/Rusty_Solitare), +a cross-platform Klondike Solitaire in Rust + Bevy. + +This repo is intentionally separate from the upstream source so the same +PKGBUILD can be submitted to the AUR and to any third-party Arch +repository (Chaotic-AUR, ALA, etc.) without polluting the upstream +project history. + +--- + +## Files + +| File | Purpose | +|---|---| +| `PKGBUILD` | Build script — pulls the v0.1.0 source tarball, builds with `cargo`, installs binary + assets + desktop entry. | +| `solitaire-quest.desktop` | XDG desktop entry installed to `/usr/share/applications/`. | +| `solitaire-quest.png` | Application icon (TODO — drop a 256×256 PNG here). | +| `.SRCINFO` | Auto-generated by `makepkg --printsrcinfo`. | + +--- + +## Building locally + +```bash +# 1. Update the sha256 once the v0.1.0 tarball is published. +updpkgsums + +# 2. Build the package. +makepkg -si + +# 3. Verify it installed. +solitaire-quest --help # or just launch from the application menu +``` + +`-s` installs missing makedeps; `-i` installs the resulting `.pkg.tar.zst` +after the build succeeds. Drop `-i` if you only want the artefact. + +--- + +## Submitting to the AUR + +```bash +# Generate the .SRCINFO required by the AUR. +makepkg --printsrcinfo > .SRCINFO + +# Commit both files to the AUR git remote. +git add PKGBUILD .SRCINFO +git commit -m "Initial release: 0.1.0-1" +git push aur master +``` + +The AUR remote is `ssh://aur@aur.archlinux.org/solitaire-quest.git`. You +need an SSH key registered on your AUR account. + +--- + +## Updating for a new release + +For each new upstream tag: + +1. Bump `pkgver` in `PKGBUILD` to match the new upstream tag. +2. Reset `pkgrel=1` (only bump `pkgrel` for packaging-only changes). +3. `updpkgsums` to refresh the sha256 hash. +4. `makepkg --printsrcinfo > .SRCINFO`. +5. Test build: `makepkg -si`. +6. `git commit -am "upgpkg: $pkgname $pkgver-1"` and push. + +--- + +## Runtime layout (where things land) + +| Path | Contents | +|---|---| +| `/usr/bin/solitaire-quest` | Symlink to the real binary. | +| `/usr/lib/solitaire-quest/bin/solitaire-quest` | The compiled binary. | +| `/usr/lib/solitaire-quest/assets/` | Card art, fonts, audio, backgrounds. | +| `/usr/share/applications/solitaire-quest.desktop` | App-menu entry. | +| `/usr/share/icons/hicolor/256x256/apps/solitaire-quest.png` | Icon (when supplied). | +| `/usr/share/licenses/solitaire-quest/LICENSE` | MIT license text. | +| `/usr/share/licenses/solitaire-quest/CREDITS.md` | Full attribution table. | +| `/usr/share/doc/solitaire-quest/README.md` | Upstream README. | + +The unusual `/usr/lib/solitaire-quest/bin/` placement exists so Bevy's +`current_exe()` resolves `../assets` to the bundled assets directory +without a wrapper script. The `/usr/bin` symlink keeps the binary in +`PATH` while preserving that resolution. + +--- + +## License + +The PKGBUILD and supporting files in this repo are MIT-licensed (matching +upstream). The packaged binary itself is MIT + LGPL-3.0 (xCards art) + +OFL-1.1 (FiraMono); see `/usr/share/licenses/solitaire-quest/CREDITS.md` +on an installed system for the full table. diff --git a/solitaire-quest.desktop b/solitaire-quest.desktop new file mode 100644 index 0000000..f2b5fd3 --- /dev/null +++ b/solitaire-quest.desktop @@ -0,0 +1,12 @@ +[Desktop Entry] +Type=Application +Version=1.0 +Name=Solitaire Quest +GenericName=Solitaire +Comment=Cross-platform Klondike Solitaire with sync, achievements, and four game modes +Exec=solitaire-quest +Icon=solitaire-quest +Terminal=false +Categories=Game;CardGame; +Keywords=solitaire;klondike;cards;patience; +StartupWMClass=solitaire-quest