Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 49 additions & 0 deletions pack.d/geforce-now.sh
Original file line number Diff line number Diff line change
@@ -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 <<EOF >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 <<EOF >$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
55 changes: 55 additions & 0 deletions play.d/common.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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 <flatpakrepo_url> <app_id> [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"
Expand Down
17 changes: 17 additions & 0 deletions play.d/geforce-now.sh
Original file line number Diff line number Diff line change
@@ -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
Loading