From f75a5f36512d98908e9c81a36c5ea6b9e710f369 Mon Sep 17 00:00:00 2001 From: Wayne Heaney <42350981+wheaney@users.noreply.github.com> Date: Mon, 22 Jul 2024 13:22:19 -0700 Subject: [PATCH] XDG reorg (#35) https://github.com/wheaney/breezy-desktop/issues/4 --- README.md | 4 +- bin/breezy_gnome_setup | 2 - bin/breezy_vulkan_setup | 19 +++- bin/package_gnome | 29 +++--- bin/package_vulkan | 65 +++++++----- modules/XRLinuxDriver | 2 +- vulkan/bin/breezy_vulkan_uninstall | 85 +++++++++++++--- vulkan/bin/breezy_vulkan_verify | 42 ++++++++ vulkan/bin/setup | 152 +++++++++++++++++++++-------- vulkan/bin/verify_installation | 42 -------- 10 files changed, 296 insertions(+), 146 deletions(-) create mode 100755 vulkan/bin/breezy_vulkan_verify delete mode 100755 vulkan/bin/verify_installation diff --git a/README.md b/README.md index 584e65e..adc3c33 100644 --- a/README.md +++ b/README.md @@ -154,9 +154,9 @@ Rerun the `breezy_vulkan_setup` script. No need to re-download this script, as i If you wish to completely remove the installation: * For **Breezy GNOME**: - * If you installed *via the setup script* run the following: `~/$XDG_BIN_HOME/breezy_gnome_uninstall` or `~/.local/bin/breezy_gnome_uninstall` if the XDG variable isn't set + * If you installed *via the setup script* run the following: `~/.local/bin/breezy_gnome_uninstall` * If you installed via `yay` run the following: `pacman -R breezy-desktop-gnome-git`, you may also want to uninstall the base driver with `pacman -R xr-driver-breezy-gnome-git` -* For **Breezy Vulkan** run the following: `sudo ~/bin/breezy_vulkan_uninstall`. This won't uninstall the base driver package, follow the instructions at the end of the uninstallation to do this manually. +* For **Breezy Vulkan** run the following: `~/.local/bin/breezy_vulkan_uninstall`. This won't uninstall the base driver package, follow the instructions at the end of the uninstallation to do this manually. ## Data Privacy Notice diff --git a/bin/breezy_gnome_setup b/bin/breezy_gnome_setup index 436d335..6ec8bb9 100755 --- a/bin/breezy_gnome_setup +++ b/bin/breezy_gnome_setup @@ -13,9 +13,7 @@ fi start_dir=$(pwd) - ARCH=$(uname -m) -echo "Building for $ARCH" # create temp directory tmp_dir=$(mktemp -d -t breezy-gnome-XXXXXXXXXX) diff --git a/bin/breezy_vulkan_setup b/bin/breezy_vulkan_setup index 637034b..464e785 100755 --- a/bin/breezy_vulkan_setup +++ b/bin/breezy_vulkan_setup @@ -14,17 +14,25 @@ fi start_dir=$(pwd) +ARCH=$(uname -m) +if [ "$ARCH" != "x86_64" ]; then + echo "Breezy Vulkan only supports x86_64 currently" + exit 1 +fi + # create temp directory tmp_dir=$(mktemp -d -t breezy-vulkan-XXXXXXXXXX) pushd $tmp_dir > /dev/null echo "Created temp directory: ${tmp_dir}" -# if the first argument is "-v" then the second argument is metrics version, and the third argument is binary path -# otherwise, if the first argument is present, it's the binary path +binary_download_url="https://github.com/wheaney/breezy-desktop/releases/latest/download/breezyVulkan-$ARCH.tar.gz" if [ "$1" = "-v" ] then metrics_version="$2" binary_path_arg="$3" +elif [ "$1" = "--tag" ] && [ -n "$2" ] +then + binary_download_url="https://github.com/wheaney/breezy-desktop/releases/download/$2/breezyVulkan-$ARCH.tar.gz" else binary_path_arg="$1" fi @@ -32,8 +40,9 @@ fi if [ -z "$binary_path_arg" ] then # download and unzip the latest driver - echo "Downloading latest release to: ${tmp_dir}/breezyVulkan.tar.gz" - curl -L -O https://github.com/wheaney/breezy-desktop/releases/latest/download/breezyVulkan.tar.gz + echo "Downloading to: ${tmp_dir}/breezyVulkan-$ARCH.tar.gz" + curl -L -O $binary_download_url + binary_path_arg="breezyVulkan-$ARCH.tar.gz" else if [[ "$binary_path_arg" = /* ]]; then abs_path="$binary_path_arg" @@ -45,7 +54,7 @@ else fi echo "Extracting to: ${tmp_dir}/breezy_vulkan" -tar -xf breezyVulkan.tar.gz +tar -xf $(basename $binary_path_arg) pushd breezy_vulkan > /dev/null diff --git a/bin/package_gnome b/bin/package_gnome index b4a112b..b6c7aa3 100755 --- a/bin/package_gnome +++ b/bin/package_gnome @@ -23,8 +23,8 @@ PACKAGE_DIR=$GNOME_BUILD_DIR/breezy_gnome rm -rf $PACKAGE_DIR mkdir -p $PACKAGE_DIR -XREAL_DRIVER_DIR=$ROOT_DIR/modules/XRLinuxDriver -source $XREAL_DRIVER_DIR/bin/inject_ua +XR_DRIVER_DIR=$ROOT_DIR/modules/XRLinuxDriver +source $XR_DRIVER_DIR/bin/inject_ua # if a custom_banner image exists, copy it over the sombrero one if [ -e "$VULKAN_DIR/custom_banner.png" ]; then @@ -33,36 +33,37 @@ fi # copy vulkan setup scripts and configs mkdir -p $PACKAGE_DIR/bin -copy_and_inject_ua "$XREAL_DRIVER_DIR/bin/ua.sh" "$PACKAGE_DIR/bin" "$GNOME_DIR/bin/setup" "$GNOME_DIR/bin/breezy_gnome_verify" "$GNOME_DIR/bin/breezy_gnome_uninstall" +copy_and_inject_ua "$XR_DRIVER_DIR/bin/ua.sh" "$PACKAGE_DIR/bin" "$GNOME_DIR/bin/setup" "$GNOME_DIR/bin/breezy_gnome_verify" "$GNOME_DIR/bin/breezy_gnome_uninstall" -XREAL_BINARY=$XREAL_DRIVER_DIR/out/xrealAirLinuxDriver-$ARCH.tar.gz -pushd $XREAL_DRIVER_DIR +XR_DRIVER_BINARY=$XR_DRIVER_DIR/out/xrDriver-$ARCH.tar.gz -if [ ! -e "$XREAL_BINARY" ] || [ "$1" == "--rebuild-driver" ]; then +if [ ! -e "$XR_DRIVER_BINARY" ] || [ "$1" == "--rebuild-driver" ]; then # if a file exists at custom_banner_config.yml, copy it to the xrealAirLinuxDriver directory if [ -e "$VULKAN_DIR/custom_banner_config.yml" ]; then - cp $VULKAN_DIR/custom_banner_config.yml $XREAL_DRIVER_DIR + cp $VULKAN_DIR/custom_banner_config.yml $XR_DRIVER_DIR fi + pushd $XR_DRIVER_DIR + # strange issue where the base library produces a .so file if the build is not cleaned rm -rf build/ docker-build/init.sh BREEZY_DESKTOP=1 docker-build/run-build.sh $ARCH + popd fi -popd TMP_DIR=$(mktemp -d -t breezy-gnome-XXXXXXXXXX) pushd $TMP_DIR -cp $XREAL_BINARY $TMP_DIR/xrealAirLinuxDriver.tar.gz -tar -xf $TMP_DIR/xrealAirLinuxDriver.tar.gz +cp $XR_DRIVER_BINARY $TMP_DIR/xrDriver.tar.gz +tar -xf $TMP_DIR/xrDriver.tar.gz -XREAL_MANIFEST_LINE=$(sha256sum driver_air_glasses/manifest) +XR_DRIVER_MANIFEST_LINE=$(sha256sum xr_driver/manifest) popd rm -rf $TMP_DIR -cp $XREAL_BINARY $PACKAGE_DIR/xrealAirLinuxDriver.tar.gz -cp $XREAL_DRIVER_DIR/bin/xreal_driver_setup $PACKAGE_DIR/bin +cp $XR_DRIVER_BINARY $PACKAGE_DIR/xrDriver.tar.gz +cp $XR_DRIVER_DIR/bin/xr_driver_setup $PACKAGE_DIR/bin gnome/bin/package_extension cp gnome/out/breezydesktop@xronlinux.com.shell-extension.zip $PACKAGE_DIR @@ -78,7 +79,7 @@ cp ui/out/com.xronlinux.BreezyDesktop-$ARCH.flatpak $PACKAGE_DIR/com.xronlinux.B # create manifest file for verifying installed file checksums against the originally packaged versions # include any file that doesn't get modified during setup (e.g. vkBasalt.json files) pushd $PACKAGE_DIR -echo $XREAL_MANIFEST_LINE > manifest +echo $XR_DRIVER_MANIFEST_LINE > manifest echo -e "$GNOME_MANIFEST_LINE breezydesktop@xronlinux.com" >> manifest popd diff --git a/bin/package_vulkan b/bin/package_vulkan index 0b70169..76d854e 100755 --- a/bin/package_vulkan +++ b/bin/package_vulkan @@ -3,27 +3,28 @@ # exit when any command fails set -e -XREAL_DRIVER_DIR=modules/XRLinuxDriver -source $XREAL_DRIVER_DIR/bin/inject_ua +ARCH=${ARCH:-$(uname -m)} +echo "Building Breezy Vulkan for $ARCH" -# check out submodules, recursively for nested ones -git submodule update --init --recursive +XR_DRIVER_DIR=modules/XRLinuxDriver +source $XR_DRIVER_DIR/bin/inject_ua VULKAN_DIR=vulkan -VULKAN_BUILD=$VULKAN_DIR/build -if [ ! -d "$VULKAN_BUILD" ]; then - mkdir -p $VULKAN_BUILD +VULKAN_BUILD_DIR=$VULKAN_DIR/build +if [ ! -d "$VULKAN_BUILD_DIR" ]; then + mkdir -p $VULKAN_BUILD_DIR else - rm -rf $VULKAN_BUILD/* + rm -rf $VULKAN_BUILD_DIR/* fi VULKAN_MODULES=$VULKAN_DIR/modules -PACKAGE_DIR=$VULKAN_BUILD/breezy_vulkan +PACKAGE_DIR=$VULKAN_BUILD_DIR/breezy_vulkan if [ ! -d "$PACKAGE_DIR" ]; then mkdir -p $PACKAGE_DIR else rm -rf $PACKAGE_DIR/* fi +BUILD_FILE_NAME=breezyVulkan-$ARCH.tar.gz # build vkBasalt VKBASALT_MODULE_DIR=$VULKAN_MODULES/vkBasalt @@ -53,41 +54,55 @@ fi # copy vulkan setup scripts and configs mkdir -p $PACKAGE_DIR/bin -copy_and_inject_ua "$XREAL_DRIVER_DIR/bin/ua.sh" "$PACKAGE_DIR/bin" "$VULKAN_DIR/bin/setup" "$VULKAN_DIR/bin/verify_installation" "$VULKAN_DIR/bin/breezy_vulkan_uninstall" +copy_and_inject_ua "$XR_DRIVER_DIR/bin/ua.sh" "$PACKAGE_DIR/bin" "$VULKAN_DIR/bin/setup" "$VULKAN_DIR/bin/breezy_vulkan_verify" "$VULKAN_DIR/bin/breezy_vulkan_uninstall" cp -r $VULKAN_DIR/config $PACKAGE_DIR -# build xreal driver -XREAL_BINARY=$XREAL_DRIVER_DIR/build/xrealAirLinuxDriver.tar.gz +# build XR driver +XR_DRIVER_BINARY=$XR_DRIVER_DIR/out/xrDriver-$ARCH.tar.gz -if [ ! -e "$XREAL_BINARY" ] || [ "$1" != "--skip-module-builds" ]; then +if [ ! -e "$XR_DRIVER_BINARY" ] || [ "$1" != "--skip-module-builds" ]; then # if a file exists at custom_banner_config.yml, copy it to the xrealAirLinuxDriver directory if [ -e "$VULKAN_DIR/custom_banner_config.yml" ]; then - cp $VULKAN_DIR/custom_banner_config.yml $XREAL_DRIVER_DIR + cp $VULKAN_DIR/custom_banner_config.yml $XR_DRIVER_DIR fi - pushd $XREAL_DRIVER_DIR + pushd $XR_DRIVER_DIR # strange issue where the base library produces a .so file if the build is not cleaned rm -rf build/ - bin/package -else - pushd $XREAL_DRIVER_DIR + docker-build/init.sh + docker-build/run-build.sh $ARCH + popd fi -XREAL_MANIFEST_LINE=$(sha256sum build/driver_air_glasses/manifest) -popd +TMP_DIR=$(mktemp -d -t breezy-vulkan-XXXXXXXXXX) +cp $XR_DRIVER_BINARY $TMP_DIR/xrDriver.tar.gz +pushd $TMP_DIR +tar -xf $TMP_DIR/xrDriver.tar.gz -# copy xreal binary and setup script -cp $XREAL_BINARY $PACKAGE_DIR -cp $XREAL_DRIVER_DIR/bin/xreal_driver_setup $PACKAGE_DIR/bin +XR_DRIVER_MANIFEST_LINE=$(sha256sum xr_driver/manifest) +popd +rm -rf $TMP_DIR + +# copy XR driver binary and setup script +cp $XR_DRIVER_BINARY $PACKAGE_DIR/xrDriver.tar.gz +cp $XR_DRIVER_DIR/bin/xr_driver_setup $PACKAGE_DIR/bin # create manifest file for verifying installed file checksums against the originally packaged versions # include any file that doesn't get modified during setup (e.g. vkBasalt.json files) pushd $PACKAGE_DIR -echo $XREAL_MANIFEST_LINE > manifest +echo $XR_DRIVER_MANIFEST_LINE > manifest sha256sum bin/breezy_vulkan_uninstall vkBasalt.64/libvkbasalt.so vkBasalt.32/libvkbasalt.so *.fx* *.png >> manifest popd # bundle everything up -tar -zcvf $VULKAN_BUILD/breezyVulkan.tar.gz --directory $VULKAN_BUILD breezy_vulkan \ No newline at end of file +pushd $VULKAN_BUILD_DIR +tar -zcvf $BUILD_FILE_NAME breezy_vulkan +popd + +mkdir -p out +if [ -e "out/$BUILD_FILE_NAME" ]; then + rm out/$BUILD_FILE_NAME +fi +cp $VULKAN_BUILD_DIR/$BUILD_FILE_NAME out \ No newline at end of file diff --git a/modules/XRLinuxDriver b/modules/XRLinuxDriver index 21452bc..a0bf750 160000 --- a/modules/XRLinuxDriver +++ b/modules/XRLinuxDriver @@ -1 +1 @@ -Subproject commit 21452bcf6a073888186448e247ed8ddca85946aa +Subproject commit a0bf7506445d61eb62da7684f361a2435300fad0 diff --git a/vulkan/bin/breezy_vulkan_uninstall b/vulkan/bin/breezy_vulkan_uninstall index d88eaaa..2871771 100755 --- a/vulkan/bin/breezy_vulkan_uninstall +++ b/vulkan/bin/breezy_vulkan_uninstall @@ -14,31 +14,88 @@ if [ "$(id -u)" != "0" ]; then exit 1 fi +# Get the directory of the current script +script_dir=$(dirname "$0") + USER=${SUDO_USER:-$USER} +GROUP=$(id -gn $USER) USER_HOME=$(getent passwd $USER | cut -d: -f6) + +if [ -z "$XDG_DATA_HOME" ]; then + XDG_DATA_HOME="$USER_HOME/.local/share" +fi +DATA_DIR="$XDG_DATA_HOME/breezy_vulkan" +if [ ! -d "$DATA_DIR" ]; then + mkdir -p $DATA_DIR +fi +VULKAN_DATA_DIR="$XDG_DATA_HOME/vulkan" +XR_DRIVER_DATA_DIR="$XDG_DATA_HOME/breezy_vulkan" + +if [ -z "$XDG_CONFIG_HOME" ]; then + XDG_CONFIG_HOME="$USER_HOME/.config" +fi +CONFIG_DIR="$XDG_CONFIG_HOME/breezy_vulkan" +if [ ! -d "$CONFIG_DIR" ]; then + mkdir -p $CONFIG_DIR +fi + +if [ -z "$XDG_BIN_HOME" ]; then + XDG_BIN_HOME="$USER_HOME/.local/bin" +fi +OLD_BIN_DIR="$USER_HOME/bin" +BIN_DIR="$XDG_BIN_HOME" +if [ ! -d "$BIN_DIR" ]; then + mkdir -p $BIN_DIR +fi + +if [ -z "$XDG_STATE_HOME" ]; then + XDG_STATE_HOME="$USER_HOME/.local/state" +fi +STATE_DIR="$XDG_STATE_HOME/breezy_vulkan" +if [ ! -d "$STATE_DIR" ]; then + mkdir -p $STATE_DIR +fi + +LIB_DIR="$USER_HOME/.local/lib" +if [ ! -d "$LIB_DIR" ]; then + mkdir -p "$LIB_DIR" +fi + +LIB32_DIR="$USER_HOME/.local/lib32" +if [ ! -d "$LIB32_DIR" ]; then + mkdir -p "$LIB32_DIR" +fi + if [ "$for_install" -eq 0 ]; then UA_EVENT_NAME="breezy_uninstall" UA_CLIENT_ID="BreezyVulkan" #INJECT_UA_CALL fi -[ "$for_install" -eq 0 ] && echo "Removing vkBasalt binaries from $USER_HOME/.local/lib[32]/" -rm $USER_HOME/.local/lib/libvkbasalt.so -rm $USER_HOME/.local/lib32/libvkbasalt.so +[ "$for_install" -eq 0 ] && echo "Removing vkBasalt binaries from $LIB_DIR[32]/" +rm $LIB_DIR/libvkbasalt.so +rm $LIB32_DIR/libvkbasalt.so -[ "$for_install" -eq 0 ] && echo "Removing vkBasalt vulkan layer configs from $USER_HOME/.local/share/vulkan/implicit_layer.d/" -rm $USER_HOME/.local/share/vulkan/implicit_layer.d/vkBasalt.json -rm $USER_HOME/.local/share/vulkan/implicit_layer.d/vkBasalt.x86.json +[ "$for_install" -eq 0 ] && echo "Removing vkBasalt vulkan layer configs from $VULKAN_DATA_DIR/implicit_layer.d/" +rm $VULKAN_DATA_DIR/implicit_layer.d/vkBasalt.json +rm $VULKAN_DATA_DIR/implicit_layer.d/vkBasalt.x86.json -[ "$for_install" -eq 0 ] && echo "Removing vkBasalt and reshade directories at $USER_HOME/.config/" -rm -rf $USER_HOME/.config/vkBasalt -rm -rf $USER_HOME/.config/reshade +[ "$for_install" -eq 0 ] && echo "Removing vkBasalt and reshade directories at $CONFIG_DIR/" +rm -rf $CONFIG_DIR/vkBasalt +rm -rf $CONFIG_DIR/reshade -[ "$for_install" -eq 0 ] && echo "Removing scripts at $USER_HOME/.local/bin/breezy_vulkan" -rm -rf $USER_HOME/.local/bin/breezy_vulkan +[ "$for_install" -eq 0 ] && echo "Removing scripts at $BIN_DIR" +rm -f $BIN_DIR/breezy_vulkan_verify -[ "$for_install" -eq 0 ] && echo "SKIPPING xrealAirLinuxDriver uninstall to keep mouse/joystick driver functionality." -[ "$for_install" -eq 0 ] && echo "To manually uninstall xrealAirLinuxDriver, do: \"sudo ~/bin/xreal_driver_uninstall\"" +[ "$for_install" -eq 0 ] && echo "SKIPPING xrDriver uninstall to keep mouse/joystick driver functionality." +[ "$for_install" -eq 0 ] && echo "To manually uninstall xrDriver, do: \"sudo xr_driver_uninstall\"" # this script is self-deleting, leave this as the last command -rm -f $USER_HOME/bin/breezy_vulkan_uninstall \ No newline at end of file +# remove the one we're not using first +if [ "$script_dir" = "$OLD_BIN_DIR" ]; then + rm -f "$BIN_DIR/breezy_vulkan_uninstall" + rm -f "$OLD_BIN_DIR/breezy_vulkan_uninstall" +else + rm -f "$OLD_BIN_DIR/breezy_vulkan_uninstall" + rm -f "$BIN_DIR/breezy_vulkan_uninstall" +fi \ No newline at end of file diff --git a/vulkan/bin/breezy_vulkan_verify b/vulkan/bin/breezy_vulkan_verify new file mode 100755 index 0000000..be901e2 --- /dev/null +++ b/vulkan/bin/breezy_vulkan_verify @@ -0,0 +1,42 @@ +#!/usr/bin/env bash + +set -e + +# create a string to string mapping, file name to expected file location +declare -A file_paths +file_paths=( + ["bin/breezy_vulkan_uninstall"]="{bin_dir}/breezy_vulkan_uninstall" + ["vkBasalt.64/libvkbasalt.so"]="{lib_dir}/libvkbasalt.so" + ["vkBasalt.32/libvkbasalt.so"]="{lib32_dir}/libvkbasalt.so" + ["IMUAdjust.fx"]="{reshade_config_dir}/Shaders/IMUAdjust.fx" + ["ReShade.fxh"]="{reshade_config_dir}/Shaders/ReShade.fxh" + ["ReShadeUI.fxh"]="{reshade_config_dir}/Shaders/ReShadeUI.fxh" + ["Sideview.fx"]="{reshade_config_dir}/Shaders/Sideview.fx" + ["calibrating.png"]="{reshade_config_dir}/Textures/calibrating.png" + ["custom_banner.png"]="{reshade_config_dir}/Textures/custom_banner.png" + ["xr_driver/manifest"]="{xr_driver_data_dir}/manifest" +) + +# verify the file hashes in ./manifest +while IFS= read -r line +do + # split the line into hash and filename + manifest_hash=$(echo $line | awk '{print $1}') + file=$(echo $line | awk '{print $2}') + + actual_file_path=${file_paths[$file]} + + # compute the SHA256 hash of the actual file + actual_hash=$(sha256sum $actual_file_path | awk '{print $1}') + + # compare the hashes + if ! [ "$manifest_hash" = "$actual_hash" ]; then + echo "Verification failed" >&2 + exit 1 + fi +done < "{data_dir}/manifest" + +# if our checks succeeded, run the xr_driver verify script +{bin_dir}/xr_driver_verify > /dev/null + +echo "Verification succeeded" \ No newline at end of file diff --git a/vulkan/bin/setup b/vulkan/bin/setup index a55476a..ab5bac4 100755 --- a/vulkan/bin/setup +++ b/vulkan/bin/setup @@ -6,8 +6,53 @@ set -e # to a specific release of the code, and guarantees it will never run along-side newer or older binaries. USER=${SUDO_USER:-$USER} +GROUP=$(id -gn $USER) USER_HOME=$(getent passwd $USER | cut -d: -f6) UA_EVENT_NAME="breezy_install" + +if [ -z "$XDG_DATA_HOME" ]; then + XDG_DATA_HOME="$USER_HOME/.local/share" +fi +DATA_DIR="$XDG_DATA_HOME/breezy_vulkan" +if [ ! -d "$DATA_DIR" ]; then + mkdir -p $DATA_DIR +fi +VULKAN_DATA_DIR="$XDG_DATA_HOME/vulkan" +XR_DRIVER_DATA_DIR="$XDG_DATA_HOME/xr_driver" + +if [ -z "$XDG_CONFIG_HOME" ]; then + XDG_CONFIG_HOME="$USER_HOME/.config" +fi +RESHADE_CONFIG_DIR="$XDG_CONFIG_HOME/reshade" +VKBASALT_CONFIG_DIR="$XDG_CONFIG_HOME/vkBasalt" + +if [ -z "$XDG_BIN_HOME" ]; then + XDG_BIN_HOME="$USER_HOME/.local/bin" +fi +OLD_BIN_DIR="$USER_HOME/bin" +BIN_DIR="$XDG_BIN_HOME" +if [ ! -d "$BIN_DIR" ]; then + mkdir -p $BIN_DIR +fi + +if [ -z "$XDG_STATE_HOME" ]; then + XDG_STATE_HOME="$USER_HOME/.local/state" +fi +STATE_DIR="$XDG_STATE_HOME/breezy_vulkan" +if [ ! -d "$STATE_DIR" ]; then + mkdir -p $STATE_DIR +fi + +LIB_DIR="$USER_HOME/.local/lib" +if [ ! -d "$LIB_DIR" ]; then + mkdir -p "$LIB_DIR" +fi + +LIB32_DIR="$USER_HOME/.local/lib32" +if [ ! -d "$LIB32_DIR" ]; then + mkdir -p "$LIB32_DIR" +fi + if [ -e "$USER_HOME/bin/breezy_vulkan_uninstall" ]; then echo "Cleaning up the previous installation" @@ -17,68 +62,93 @@ if [ -e "$USER_HOME/bin/breezy_vulkan_uninstall" ]; then UA_EVENT_NAME="breezy_update" fi +if [ -e "$BIN_DIR/breezy_vulkan_uninstall" ]; then + echo "Cleaning up the previous installation" + + # ` || true` will ensure that this can't cause a failure, even with `set -e` + $BIN_DIR/breezy_vulkan_uninstall --for-install || true + + UA_EVENT_NAME="breezy_update" +fi + UA_CLIENT_ID="BreezyVulkan" UA_EVENT_VERSION="$1" #INJECT_UA_CALL -echo "Copying the breezy_vulkan scripts to ${USER_HOME}/bin" -if [ ! -d "$USER_HOME/bin" ]; then - su -c 'mkdir -p '$USER_HOME'/bin' $USER -fi -cp bin/breezy_vulkan_uninstall $USER_HOME/bin -echo "Installing vkBasalt; copying binaries, configs, and shader files to ${USER_HOME}/.local and ${USER_HOME}/.config" +# escaping sed replace: https://stackoverflow.com/questions/407523/escape-a-string-for-a-sed-replace-pattern +ESCAPED_BIN_DIR=$(printf '%s\n' "$BIN_DIR" | sed -e 's/[\/&]/\\&/g') +ESCAPED_LIB_DIR=$(printf '%s\n' "$LIB_DIR" | sed -e 's/[\/&]/\\&/g') +ESCAPED_LIB32_DIR=$(printf '%s\n' "$LIB32_DIR" | sed -e 's/[\/&]/\\&/g') +ESCAPED_RESHADE_CONFIG_DIR=$(printf '%s\n' "$RESHADE_CONFIG_DIR" | sed -e 's/[\/&]/\\&/g') +ESCAPED_STATE_DIR=$(printf '%s\n' "$STATE_DIR" | sed -e 's/[\/&]/\\&/g') +ESCAPED_DATA_DIR=$(printf '%s\n' "$DATA_DIR" | sed -e 's/[\/&]/\\&/g') +ESCAPED_XR_DRIVER_DATA_DIR=$(printf '%s\n' "$XR_DRIVER_DATA_DIR" | sed -e 's/[\/&]/\\&/g') + +echo "Copying the breezy_vulkan scripts to ${BIN_DIR} and related files to ${DATA_DIR}" +cp bin/breezy_vulkan_uninstall $BIN_DIR +sed -i -e "s/{bin_dir}/$ESCAPED_BIN_DIR/g" \ + -e "s/{lib_dir}/$ESCAPED_LIB_DIR/g" \ + -e "s/{lib32_dir}/$ESCAPED_LIB32_DIR/g" \ + -e "s/{reshade_config_dir}/$ESCAPED_RESHADE_CONFIG_DIR/g" \ + -e "s/{state_dir}/$ESCAPED_STATE_DIR/g" \ + -e "s/{data_dir}/$ESCAPED_DATA_DIR/g" \ + -e "s/{xr_driver_data_dir}/$ESCAPED_XR_DRIVER_DATA_DIR/g" \ + bin/breezy_vulkan_verify +cp bin/breezy_vulkan_verify $BIN_DIR +cp manifest $DATA_DIR + +# keep putting this in the old location in case an older version of the script tries to find it +cp bin/breezy_vulkan_uninstall $OLD_BIN_DIR + +echo "Installing vkBasalt; copying binaries, configs, and shader files" # much of the setup below was informed by https://github.com/simons-public/steam-deck-vkbasalt-install # copy the vkBasalt binaries and configs -su -c 'mkdir -p '$USER_HOME'/.local/{lib,lib32,share/vulkan/implicit_layer.d}' $USER -su -c 'mkdir -p '$USER_HOME'/.config/{vkBasalt,reshade/Shaders,reshade/Textures}' $USER -cp vkBasalt.64/libvkbasalt.so $USER_HOME/.local/lib/ -cp vkBasalt.32/libvkbasalt.so $USER_HOME/.local/lib32/ -chown $USER:$USER $USER_HOME/.local/lib/libvkbasalt.so -chown $USER:$USER $USER_HOME/.local/lib32/libvkbasalt.so +mkdir -p "$VULKAN_DATA_DIR"/implicit_layer.d +mkdir -p "$XDG_CONFIG_HOME"/{vkBasalt,reshade/Shaders,reshade/Textures} +cp vkBasalt.64/libvkbasalt.so $LIB_DIR/ +cp vkBasalt.32/libvkbasalt.so $LIB32_DIR/ # there is only one vkBasalt.json file, use the 64-bit directory for both, copy and make replacements if grep -q SteamOS /etc/os-release ; then - sed -e "s|libvkbasalt.so|${USER_HOME}/.local/lib/libvkbasalt.so|" -e "s/ENABLE_VKBASALT/SteamDeck/" vkBasalt.64/vkBasalt.json > $USER_HOME/.local/share/vulkan/implicit_layer.d/vkBasalt.json - sed -e "s|libvkbasalt.so|${USER_HOME}/.local/lib32/libvkbasalt.so|" -e "s/ENABLE_VKBASALT/SteamDeck/" vkBasalt.64/vkBasalt.json > $USER_HOME/.local/share/vulkan/implicit_layer.d/vkBasalt.x86.json + sed -e "s|libvkbasalt.so|${LIB_DIR}/libvkbasalt.so|" -e "s/ENABLE_VKBASALT/SteamDeck/" vkBasalt.64/vkBasalt.json > $VULKAN_DATA_DIR/implicit_layer.d/vkBasalt.json + sed -e "s|libvkbasalt.so|${LIB32_DIR}/libvkbasalt.so|" -e "s/ENABLE_VKBASALT/SteamDeck/" vkBasalt.64/vkBasalt.json > $VULKAN_DATA_DIR/implicit_layer.d/vkBasalt.x86.json else - sed -e "s|libvkbasalt.so|${USER_HOME}/.local/lib/libvkbasalt.so|" vkBasalt.64/vkBasalt.json > $USER_HOME/.local/share/vulkan/implicit_layer.d/vkBasalt.json - sed -e "s|libvkbasalt.so|${USER_HOME}/.local/lib32/libvkbasalt.so|" vkBasalt.64/vkBasalt.json > $USER_HOME/.local/share/vulkan/implicit_layer.d/vkBasalt.x86.json + sed -e "s|libvkbasalt.so|${LIB_DIR}/libvkbasalt.so|" vkBasalt.64/vkBasalt.json > $VULKAN_DATA_DIR/implicit_layer.d/vkBasalt.json + sed -e "s|libvkbasalt.so|${LIB32_DIR}/libvkbasalt.so|" vkBasalt.64/vkBasalt.json > $VULKAN_DATA_DIR/implicit_layer.d/vkBasalt.x86.json fi -chown $USER:$USER $USER_HOME/.local/share/vulkan/implicit_layer.d/vkBasalt.* # copy the vkBasalt.conf file and make replacements -sed -e "s|/path/to/reshade-shaders|${USER_HOME}/.config/reshade|" \ - -e "s|/path/to/virtual_display|${USER_HOME}/.config/reshade/Shaders/IMUAdjust.fx|" \ - -e "s|/path/to/sideview|${USER_HOME}/.config/reshade/Shaders/Sideview.fx|" \ - config/vkBasalt.conf > $USER_HOME/.config/vkBasalt/vkBasalt.conf -chown -R $USER:$USER $USER_HOME/.config/vkBasalt +sed -e "s|/path/to/reshade-shaders|${RESHADE_CONFIG_DIR}|" \ + -e "s|/path/to/virtual_display|${RESHADE_CONFIG_DIR}/Shaders/IMUAdjust.fx|" \ + -e "s|/path/to/sideview|${RESHADE_CONFIG_DIR}/Shaders/Sideview.fx|" \ + config/vkBasalt.conf > $VKBASALT_CONFIG_DIR/vkBasalt.conf -echo "Installing the Sombrero shaders and texture files to ${USER_HOME}/.config/reshade/{Shaders,Textures}" -cp *.fx* $USER_HOME/.config/reshade/Shaders -cp *.png $USER_HOME/.config/reshade/Textures -chown -R $USER:$USER $USER_HOME/.config/reshade +echo "Installing the Sombrero shaders and texture files to ${RESHADE_CONFIG_DIR}/{Shaders,Textures}" +cp *.fx* $RESHADE_CONFIG_DIR/Shaders +cp *.png $RESHADE_CONFIG_DIR/Textures -# escaping sed replace: https://stackoverflow.com/questions/407523/escape-a-string-for-a-sed-replace-pattern -ESCAPED_USER_HOME=$(printf '%s\n' "$USER_HOME" | sed -e 's/[\/&]/\\&/g') +chown -R $USER:$GROUP $LIB_DIR +chown -R $USER:$GROUP $LIB32_DIR +chown -R $USER:$GROUP $DATA_DIR +chown -R $USER:$GROUP $VULKAN_DATA_DIR +chown -R $USER:$GROUP $RESHADE_CONFIG_DIR +chown -R $USER:$GROUP $VKBASALT_CONFIG_DIR +chown -R $USER:$GROUP $STATE_DIR +chown -R $USER:$GROUP $BIN_DIR/breezy_vulkan_* -echo "Copying the verification script and manifest to ${USER_HOME}/.local/bin/breezy_vulkan" -sed -i -e "s/{user_home}/$ESCAPED_USER_HOME/g" bin/verify_installation -if [ ! -d "$USER_HOME/.local/bin/breezy_vulkan" ]; then - mkdir -p $USER_HOME/.local/bin/breezy_vulkan -fi -cp -p bin/verify_installation $USER_HOME/.local/bin/breezy_vulkan -cp manifest $USER_HOME/.local/bin/breezy_vulkan +# clear bash's cache of executable locations, so it can find the newly installed scripts +hash -r -# set up the XREAL driver using the local binary -echo "Installing xrealAirLinuxDriver" -echo "BEGIN - xreal_driver_setup" +# set up the XR driver using the local binary +echo "Installing xrDriver" +echo "BEGIN - xr_driver_setup" if [ -z "$1" ] then - bin/xreal_driver_setup $(pwd)/xrealAirLinuxDriver.tar.gz + bin/xr_driver_setup $(pwd)/xrDriver.tar.gz else - bin/xreal_driver_setup -v $1 $(pwd)/xrealAirLinuxDriver.tar.gz + bin/xr_driver_setup -v $1 $(pwd)/xrDriver.tar.gz fi -echo "END - xreal_driver_setup" \ No newline at end of file +echo "END - xr_driver_setup" \ No newline at end of file diff --git a/vulkan/bin/verify_installation b/vulkan/bin/verify_installation deleted file mode 100755 index 9cfcb85..0000000 --- a/vulkan/bin/verify_installation +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env bash - -set -e - -# create a string to string mapping, file name to expected file location -declare -A file_paths -file_paths=( - ["bin/breezy_vulkan_uninstall"]="{user_home}/bin/breezy_vulkan_uninstall" - ["vkBasalt.64/libvkbasalt.so"]="{user_home}/.local/lib/libvkbasalt.so" - ["vkBasalt.32/libvkbasalt.so"]="{user_home}/.local/lib32/libvkbasalt.so" - ["IMUAdjust.fx"]="{user_home}/.config/reshade/Shaders/IMUAdjust.fx" - ["ReShade.fxh"]="{user_home}/.config/reshade/Shaders/ReShade.fxh" - ["ReShadeUI.fxh"]="{user_home}/.config/reshade/Shaders/ReShadeUI.fxh" - ["Sideview.fx"]="{user_home}/.config/reshade/Shaders/Sideview.fx" - ["calibrating.png"]="{user_home}/.config/reshade/Textures/calibrating.png" - ["custom_banner.png"]="{user_home}/.config/reshade/Textures/custom_banner.png" - ["build/driver_air_glasses/manifest"]="{user_home}/.local/bin/xr_driver/manifest" -) - -# verify the file hashes in ./manifest -while IFS= read -r line -do - # split the line into hash and filename - manifest_hash=$(echo $line | awk '{print $1}') - file=$(echo $line | awk '{print $2}') - - actual_file_path=${file_paths[$file]} - - # compute the SHA256 hash of the actual file - actual_hash=$(sha256sum $actual_file_path | awk '{print $1}') - - # compare the hashes - if ! [ "$manifest_hash" = "$actual_hash" ]; then - echo "Verification failed" >&2 - exit 1 - fi -done < "{user_home}/.local/bin/breezy_vulkan/manifest" - -# if our checks succeeded, run the xr_driver verify script -{user_home}/.local/bin/xr_driver/verify_installation > /dev/null - -echo "Verification succeeded" \ No newline at end of file