#!/bin/bash

# MX Linux pkexec wrapper to retain QT environment
# Usage:
#        mx-pkexec mx-apps ...
# original code by fehlix for MX-Linux

if test "$EUID" != 0; then
    # normal user
    QTENV="${XDG_RUNTIME_DIR:-/tmp}/mx-pkexec-qtenv.$EUID.$PPID.$$.$RANDOM$RANDOM"
    if [ -f "$QTENV" ] ; then
        rm  $QTENV
    fi
    umask 0022
	touch "$QTENV"
	while IFS=$'\n' read -r ENV; do 
		IFS='=' read PAR VAL < <(echo $ENV); 
		echo "export $PAR=${VAL@Q}" >> $QTENV 
	done < <(printenv | grep -E '^LANG=|^LANGUAGE=|^LC_|^QT_')

    echo "CURRENT_WORK_DIR='$PWD'" >> "$QTENV"
    chmod +r "$QTENV"
    pkexec /usr/bin/mx-pkexec "--qtenv" "$QTENV" "${@}"
    if [ -f "$QTENV" ] ; then
       rm  $QTENV
    fi
fi
if test "$EUID" == 0; then
    # root user
    # set XDG_RUNTIME_DIR - do nothing if already set
    if [ x"$XDG_RUNTIME_DIR" = "x" ]; then
      XDG_RUNTIME_DIR=/run/user/0
      export XDG_RUNTIME_DIR
      [ -d $XDG_RUNTIME_DIR ] || mkdir -p $XDG_RUNTIME_DIR
      chmod 700 $XDG_RUNTIME_DIR
      chown 0:0 $XDG_RUNTIME_DIR
    fi
    if  [ "x$1" = "x--qtenv" ]; then
        QTENV="$2"
        shift
        shift
        if [ -f "$QTENV" -a  "x$QTENV" != "x${QTENV#*/mx-pkexec-qtenv.}" ] ; then 
            . "$QTENV"
            rm  "$QTENV"
            cd "${CURRENT_WORK_DIR}" 
            unset CURRENT_WORK_DIR
        fi
        PATH="/usr/local/bin:$PATH"
    fi
    eval set "$@"
    RUN="$1"
    shift
    echo Starting  "$RUN" "${@}"
    command -v "$RUN" >/dev/null || { echo "mx-pkexec: Command '$RUN' not found"; exit 1; }
    exec "$RUN" "${@}"
fi
exit

