#!/bin/bash

if [ -e "/etc/bigmountall-no" ]; then
   exit
fi

if [ ! -e "/media" ]; then
   ln -s /mnt /media
   ln -s /run/media /mnt/user-mount
fi

# Change space delimiters to newline
OIFS=$IFS
IFS=$'\n'

UserLastLogin="$(grep ^User= /var/lib/sddm/state.conf | cut -f2 -d= | sed 's| $||g')"

if [ "$UserLastLogin" = "" ]; then
   UserID=1000
   GroupID=1000
else
   UserID=$(id -u $UserLastLogin)
   GroupID=$(id -g $UserLastLogin)
fi

# Display all partitions except swap
for i in $(blkid | grep -ve 'TYPE="swap"' -ve 'TYPE="squashfs"'); do
   # echo $i | sed 's|:.*||g;s|.*/||g;s|[0-9]||g' Isolate the device, e.g., sda
   # echo $i | sed 's|:.*||g;s|.*/||g' Isolate the partition, e.g., sda1

   PARTITION="$(echo $i | sed 's|:.*||g;s|.*/||g')"

   # By default, consider not removable
   bigremovable=n

   # Check if the device is removable
   if [ "$(cat /sys/block/$(echo $i | sed 's|:.*||g;s|.*/||g;s|[0-9].*||g')/removable)" = "1" ]; then
      bigremovable=y
   fi

   # Check if the device is USB
   if [ "$(udisksctl info -b $(echo $i | sed 's|:.*||g;s|[0-9].*||g') | grep -e "-usb-")" != "" ]; then
      bigremovable=y
   fi

   # Check if the device is hidden
   if [ "$(udisksctl info -b /dev/$PARTITION | grep -e "HintIgnore:.*true")" != "" ]; then
      bigremovable=y
   fi

   # Check if the device is already mounted
   if [ "$(grep "^/dev/$PARTITION" /proc/mounts)" != "" ]; then
      bigremovable=y
   fi

   # Check if the device is removable; if not, proceed to mount
   if [ "$bigremovable" = "n" ]; then
      # Check if the partition is NTFS
      if [ "$(echo $i | grep 'TYPE="ntfs"')" != "" ]; then
         mkdir "/mnt/$PARTITION" 2> /dev/null
         ntfsfix "/dev/$PARTITION"
         mount -t lowntfs-3g -o uid=$UserID,gid=$GroupID,rw,user,noatime,exec,umask=000,nodev,nofail,x-gvfs-show "/dev/$PARTITION" "/mnt/$PARTITION"
         # mount -o noatime,rw,windows_names "/dev/$PARTITION" "/mnt/$PARTITION"
         # ntfs-3g -o noatime,windows_names "/dev/$PARTITION" "/mnt/$PARTITION"
      elif [ "$(echo $i | grep "TYPE=\".*fat.*\"")" != "" ]; then
         mkdir "/mnt/$PARTITION" 2> /dev/null
         mount -o noatime,rw,umask=000,nodev,nofail,x-gvfs-show "/dev/$PARTITION" "/mnt/$PARTITION"
      else
         mkdir "/mnt/$PARTITION" 2> /dev/null
         mount -o noatime,rw,nodev,nofail,x-gvfs-show "/dev/$PARTITION" "/mnt/$PARTITION"
      fi
      # Create symbolic links between device and label, e.g., /mnt/sda1 /mnt/files
      if [ "$(echo $i | grep 'LABEL=')" != "" ]; then
         # if [ ! -e "/mnt/$(echo $i | sed 's|.*LABEL="||g;s|" UUID=.*||g')" ]
         if [ ! -e "/mnt/$(echo $i | sed 's/^[^"]*"\([^"]*\)".*/\1/')" ]; then
            # ln -s "/mnt/$PARTITION" "/mnt/$(echo $i | sed 's|.*LABEL="||g;s|" UUID=.*||g')" 2> /dev/null
            ln -s "/mnt/$PARTITION" "/mnt/$(echo $i | sed 's/^[^"]*"\([^"]*\)".*/\1/')" 2> /dev/null
         fi
      fi
   fi
done
IFS=$OIFS
