#!/bin/sh
# xdg-open and gio-launch-desktop wrapper for sharun
# unsets env variables that cause issues to child processes

CURRENTDIR="$(cd "${0%/*}" && echo "$PWD")"
APPDIR="${APPDIR:-${SHARUN_DIR:-${CURRENTDIR%/*}}}"

NEWPATH=""
OLDIFS="$IFS"
IFS=:
for p in $PATH; do
	if [ "$p" != "$CURRENTDIR" ]; then
		NEWPATH="${NEWPATH:+$NEWPATH:}$p"
	fi
done
PATH="$NEWPATH"
IFS="$OLDIFS"
export PATH

problematic_vars="ALSA_CONFIG_PATH BABL_PATH DRIRC_CONFIGDIR __EGL_VENDOR_LIBRARY_DIRS \
	GBM_BACKENDS_PATH GCONV_PATH GDK_PIXBUF_MODULEDIR GDK_PIXBUF_MODULE_FILE GEGL_PATH \
	GIO_MODULE_DIR GI_TYPELIB_PATH GSETTINGS_SCHEMA_DIR GST_PLUGIN_PATH GST_PLUGIN_SCANNER \
	GST_PLUGIN_SYSTEM_PATH GST_PLUGIN_SYSTEM_PATH_1_0 GTK_DATA_PREFIX GTK_EXE_PREFIX \
	GTK_IM_MODULE_FILE GTK_PATH LIBDECOR_PLUGIN_DIR LIBGL_DRIVERS_PATH LIBVA_DRIVERS_PATH PERLLIB \
	PIPEWIRE_MODULE_DIR QT_PLUGIN_PATH SPA_PLUGIN_DIR TCL_LIBRARY TEXTDOMAINDIR TK_LIBRARY \
	XKB_CONFIG_ROOT XLOCALEDIR XTABLES_LIBDIR IMLIB2_LOADER_PATH IMLIB2_FILTER_PATH"

for var in $problematic_vars; do
	eval "value=\"\$$var\""
	case "$value" in
		"$APPDIR"/*)
			unset "$var"
			echo "unset $var to prevent issues" >&2
			;;
		*) continue ;;
	esac
done

# Restore HOME, XDG_CONFIG_HOME and XDG_DATA_HOME to their original values
# NOTE: The REAL_* vars are set by the uruntime
export HOME="${REAL_HOME:-$HOME}"
export XDG_DATA_HOME="${REAL_XDG_DATA_HOME:-$XDG_DATA_HOME}"
export XDG_CONFIG_HOME="${REAL_XDG_CONFIG_HOME:-$XDG_CONFIG_HOME}"
export XDG_CACHE_HOME="${REAL_XDG_CACHE_HOME:-$XDG_CACHE_HOME}"

if [ "${0##*/}" = "gio-launch-desktop" ]; then
	export GIO_LAUNCHED_DESKTOP_FILE_PID=$$
	exec "$@"
else
	exec xdg-open "$@"
fi
