diff --git a/pack.d/geforce-now.sh b/pack.d/geforce-now.sh new file mode 100755 index 00000000..b3f586f2 --- /dev/null +++ b/pack.d/geforce-now.sh @@ -0,0 +1,49 @@ +#!/bin/sh + +TAR="$1" +RETURNTARNAME="$2" + +. $(dirname $0)/common.sh + +APP_DIR="$TAR" +[ -d "$APP_DIR" ] || fatal "Can't find app directory" + +CEF_DIR="$APP_DIR/cef" +[ -d "$CEF_DIR" ] || fatal "Can't find cef directory in the flatpak bundle" +[ -x "$CEF_DIR/GeForceNOW" ] || fatal "Can't find GeForceNOW binary in $CEF_DIR" + +DESKTOP_FILE="$APP_DIR/share/applications/com.nvidia.geforcenow.desktop" + +VERSION=$(sed -n 's/.*"productVersion"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p' "$APP_DIR/nvc/NvTelemetry.json" 2>/dev/null | head -n1) +[ -n "$VERSION" ] || fatal "Can't get version from NvTelemetry.json" + +mkdir -p opt/$PRODUCT usr/bin usr/share/applications usr/share/icons + +cp -a "$APP_DIR/"* opt/$PRODUCT/ + +cat <usr/bin/$PRODUCT +#!/bin/sh +cd /opt/$PRODUCT/cef || exit 1 +exec ./GeForceNOW "\$@" +EOF +chmod 755 usr/bin/$PRODUCT + +cp "$DESKTOP_FILE" usr/share/applications/$PRODUCT.desktop || fatal "Can't copy desktop file" +subst "s|^Exec=.*|Exec=$PRODUCT %U|" usr/share/applications/$PRODUCT.desktop + +cp -a "$APP_DIR/share/icons/"* usr/share/icons/ 2>/dev/null + +PKGNAME=$PRODUCT-$VERSION.tar +erc pack $PKGNAME opt usr + +cat <$PKGNAME.eepm.yaml +name: $PRODUCT +version: $VERSION +group: Games +license: Proprietary +url: https://www.nvidia.com/en-us/geforce-now/ +summary: NVIDIA GeForce NOW cloud gaming +description: NVIDIA GeForce NOW transforms your device into a high-end gaming rig. +EOF + +return_tar $PKGNAME diff --git a/play.d/common.sh b/play.d/common.sh index c4338b91..16ec59c7 100755 --- a/play.d/common.sh +++ b/play.d/common.sh @@ -265,6 +265,61 @@ snap_get_pkgurl() eget -O- -H Snap-Device-Series:16 https://api.snapcraft.io/v2/snaps/info/$SNAPNAME | epm --inscript tool json -b | grep -A 8 "$ARCH" | grep '\["channel-map",[0-9],"download","url"\]' | head -n1 | sed 's/.*"\(https:\/\/.*\)".*/\1/' } +# Checkout a flatpak app from a flatpak remote repository via ostree. +# Usage: get_flatpak_app_dir [branch] [arch] +# flatpakrepo_url - URL of the .flatpakrepo file +# app_id - Flatpak application ID (e.g. com.nvidia.geforcenow) +# branch - branch name (default: master) +# arch - flatpak architecture name (default: uname -m) +# Prints path to the checked out app files directory. +# Requires: ostree +get_flatpak_app_dir() +{ + local flatpakrepo_url="$1" + local app_id="$2" + local branch="${3:-master}" + local arch="${4:-$(uname -m)}" + + local flatpakrepo_content + flatpakrepo_content=$(fetch_url "$flatpakrepo_url") || fatal "Can't fetch $flatpakrepo_url" + local repo_url + repo_url=$(echo "$flatpakrepo_content" | sed -n 's/^Url=//p') + [ -n "$repo_url" ] || fatal "Can't parse Url from $flatpakrepo_url" + + is_command ostree || fatal "ostree is required to checkout flatpak apps" + + local tdir + tdir=$(mktemp -d --tmpdir="$BIGTMPDIR") || fatal + trap 'rm -rf "$tdir"' EXIT + + local ostree_repo="$tdir/repo" + local remote_name="eepm" + local flatpak_ref="app/$app_id/$arch/$branch" + + ostree init --repo="$ostree_repo" --mode=archive 1>&2 || fatal "Can't init ostree repo" + ostree remote add --repo="$ostree_repo" --no-gpg-verify "$remote_name" "$repo_url" 1>&2 || fatal "Can't add ostree remote $repo_url" + + info "Downloading $flatpak_ref from $repo_url ..." + ostree pull --repo="$ostree_repo" "$remote_name" "$flatpak_ref" 1>&2 || fatal "Can't pull $flatpak_ref from $repo_url" + + local commit + commit=$(ostree rev-parse --repo="$ostree_repo" "$flatpak_ref") || fatal "Can't resolve $flatpak_ref" + [ -n "$commit" ] || fatal "Can't resolve $flatpak_ref" + + local checkout_root="$tdir/checkout" + local app_dir="$tdir/$app_id" + ostree checkout --repo="$ostree_repo" --user-mode "$commit" "$checkout_root" 1>&2 || fatal "Can't checkout $flatpak_ref" + + mkdir -p "$app_dir" || fatal + if [ -d "$checkout_root/files" ] ; then + cp -a "$checkout_root/files/." "$app_dir/" || fatal "Can't copy flatpak app files" + else + cp -a "$checkout_root/." "$app_dir/" || fatal "Can't copy flatpak app files" + fi + rm -rf "$checkout_root" + echo "$app_dir" +} + snap_get_version() { local SNAPNAME="$1" diff --git a/play.d/geforce-now.sh b/play.d/geforce-now.sh new file mode 100755 index 00000000..0ad8d1d9 --- /dev/null +++ b/play.d/geforce-now.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +PKGNAME=geforce-now +SUPPORTEDARCHES="x86_64" +VERSION="$2" +DESCRIPTION='NVIDIA GeForce NOW cloud gaming from the official NVIDIA Flatpak repository' +URL="https://www.nvidia.com/en-us/geforce-now/" + +. $(dirname $0)/common.sh + +warn_version_is_not_supported + +epm assure ostree || fatal + +PKGURL=$(get_flatpak_app_dir "https://international.download.nvidia.com/GFNLinux/flatpak/geforcenow.flatpakrepo" "com.nvidia.geforcenow" "master" "x86_64") + +install_pack_pkgurl