# Copyright (c) 2010, 2012, 2013, 2014
#       Thorsten Glaser <tg@mirbsd.org>
# This file is provided under the same terms as mksh.
#-
# Minimal /system/etc/mkshrc for Android
#
# Support: https://launchpad.net/mksh

unset PATH HOME PREFIX

export MKLIB="/system/usr/share/lib-mkshrc/lib"
export MKBIN="/system/usr/share/lib-mkshrc/bin"
# FAQ: https://github.com/Magisk-Modules-Alt-Repo/mkshrc/wiki/FAQ#ld_library_path-problems
# export LD_LIBRARY_PATH="/vendor/lib:/system/lib"
export ANDROID_ROOT="/system"
export ANDROID_ASSETS="/system/app"
export ANDROID_DATA="/data"
export ANDROID_STORAGE="/storage"
export ANDROID_ART_ROOT="/apex/com.android.art"
export ANDROID_I18N_ROOT="/apex/com.android.i18n"
export ANDROID_TZDATA_ROOT="/apex/com.android.tzdata"
export EXTERNAL_STORAGE="/sdcard"
export ASEC_MOUNTPOINT="/mnt/asec"
export LOOP_MOUNTPOINT="/mnt/obb"
export BOOTCLASSPATH="/system/framework/core.jar:/system/framework/core-junit.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/android.policy.jar:/system/framework/services.jar:/system/framework/apache-xml.jar:/system/framework/filterfw.jar"

source $MKLIB/util/sudo.sh
source $MKLIB/util/setperm.sh
source $MKLIB/util/f2c.sh

export PATH="/system/bin:/sbin:/vendor/bin:/system/sbin:/system/xbin:/system/product/bin:/system/usr/share/bin-get/bin:/system/system_ext/bin"

export USER=$(id -un)
export USERID=$(id -u)
export ROOTFS=$(/system/bin/getprop "persist.mkshrc_v2.rootfs" "/data/mkuser" | sed 's/^"\(.*\)"$/\1/')
export PREFIX="$ROOTFS/usr"
# FAQ: https://github.com/Magisk-Modules-Alt-Repo/mkshrc/wiki/FAQ#how-to-edit-hostname
export HOSTNAME=$(uname -n)

export HISTCONTROL="ignoreboth"
export HISTSIZE="1000"
export HISTFILESIZE="2000"

if [ "$USER" = "root" ]; then
  export HOME="$ROOTFS/root"
else
  export HOME="$ROOTFS/home/$USER"
fi

export HISTFILE="$HOME/.mksh_history"

##############
# Environment creation // START
##############

if [ ! -d "$ROOTFS" ]; then
  sudo mkdir $ROOTFS
  setperm:insecure $ROOTFS 0 9997 1777 u:object_r:magisk_file:s0

  for path in usr opt proc run var home etc dev mnt root tmp; do
    if [ ! -d "$ROOTFS/$path" ]; then
      sudo mkdir "$ROOTFS/$path"
      setperm:insecure "$ROOTFS/$path" 0 0 0755 u:object_r:magisk_file:s0
    fi
  done
  # Needs to be write able
  setperm:insecure "$ROOTFS/tmp" 2000 2000 0777 u:object_r:magisk_file:s0

  for path2 in bin include lib lib32 lib64 libexec libx32 "local" share; do
    if [ ! -d "$ROOTFS/usr/$path2" ]; then
      sudo mkdir "$ROOTFS/usr/$path2"
      setperm:insecure "$ROOTFS/usr/$path2" 0 0 0755 u:object_r:magisk_file:s0
    fi
  done

  for path3 in "profile.d" "env.d"; do
    if [ ! -d "$ROOTFS/etc/$path3" ]; then
      sudo mkdir "$ROOTFS/etc/$path3"
      setperm:insecure "$ROOTFS/etc/$path3" 0 0 0755 u:object_r:magisk_file:s0
    fi
  done

  MBB="/data/adb/magisk/busybox"
  KBB="/data/adb/ksu/bin/busybox"

  if [ "$USER" = "root" ]; then
    if [ -f "$MBB" ]; then
      ln -s $MBB $PREFIX/bin/busybox
    elif [ -f "$KBB" ]; then
      ln -s $KBB $PREFIX/bin/busybox
    else
      echo "Unable to link BusyBox"
    fi
  fi

  if [ -d "$ROOTFS/etc" ]; then
    echo "# Clean up temop files\nfor sdgdfbb in \$ROOTFS/tmp; do\n  if [ -d \"\$sdgdfbb\" ]; then\n    rm -rf \"\$sdgdfbb\" >/dev/null\n    mkdir \"\$sdgdfbb\" >/dev/null\n  fi\ndone" >$ROOTFS/etc/exitrc
  fi

  if [ -d "$ROOTFS/etc/profile.d" ]; then
    ln -s $MKLIB/util/ppsu.sh $ROOTFS/etc/profile.d/ppsu.sh
    ln -s $MKLIB/util/sudo.sh $ROOTFS/etc/profile.d/sudo.sh
  fi

  for bin in $(ls $MKBIN); do
    if [ -f "$MKBIN/$bin" ]; then
      ln -s $MKBIN/$bin $PREFIX/bin/$bin
    fi
  done

  # Needs to be separate linked
  ln -s $MKBIN/xh $PREFIX/bin/xhs
  ln -s $MKBIN/open $PREFIX/bin/xdg-open
fi

if [ ! -d "$ROOTFS/home/$USER" ]; then
  if [ ! "$USER" = "root" ]; then
    sudo mkdir $ROOTFS/home/$USER
    setperm:insecure $ROOTFS/home/$USER $USERID $USERID 1755 u:object_r:magisk_file:s0
  fi

  if [ ! "$USER" = "root" ]; then
    # Public directories
    ln -s /storage/self/primary/Pictures $HOME/Pictures
    ln -s /storage/self/primary/Download $HOME/Download
    ln -s /storage/self/primary/Movies $HOME/Movies
    ln -s /storage/self/primary/Music $HOME/Music
    ln -s /storage/self/primary/Documents $HOME/Documents
  fi

  if [ ! -f "$HOME/.mkshrc" ]; then
    echo "# Aliases\nalias bsu='su -p -s bash'\nalias ls='ls --color=auto'\nalias lsa='ls --color=auto -A'\nalias nano='nano -l'\n# set PATH so it includes user's private bin if it exists\nif [ -d \"\$HOME/.local/bin\" ]; then\n    export PATH=\"\$HOME/.local/bin:\$PATH\"\nfi" >$HOME/.mkshrc
    if [ ! -f "$HOME/.bashrc" ]; then
      ln -s $HOME/.mkshrc $HOME/.bashrc
    fi
  fi
fi

##############
# Environment creation // END
##############

if ((USER_ID)); then MODE_PS1='$'; else MODE_PS1='#'; fi
PS1=$'\e[35m┌\e[0m\e[92m$USER@$HOSTNAME\e[0m:\e[38;5;33m${PWD:-?}\e[0m\n\e[35m└─\e[0m$MODE_PS1 '

export MKSHRCSYS_INSTALLED="true"
export TMPDIR="$ROOTFS/tmp"
export TERM="xterm-256color"
export SHELL="/system/bin/sh"
export PATH="$PREFIX/bin:$HOME/.local/bin:$PATH"

if [ -d "$ROOTFS" ]; then
  # Loads user defined scripts and environment variables
  for script in $ROOTFS/etc/profile.d/*.sh; do
    if [ -f $script ]; then
      source $script
    fi
  done
  for envscript in $ROOTFS/etc/env.d/*.sh; do
    if [ -f $envscript ]; then
      source $envscript
    fi
  done
  unset script envscript

  # Keep the storage clear and use user based mkshrc
  if [ -f "$HOME/.mkshrc" ]; then
    # $HOME/.bashrc is the same. Do not import.
    source $HOME/.mkshrc
  fi
fi

for rc in /system/etc/mkshrc.d/*.sh; do
  if [ -f $rc ]; then
    source $rc
  fi
done

if [ -f "$ROOTFS/etc/exitrc" ]; then
  trap "source $ROOTFS/etc/exitrc" EXIT
fi
