#!/bin/bash

user=$(whoami)
if [ -n "$user" ] && [[ "$user" != "root" ]]; then gksu "xterm -e $0"; exit 0; fi

IFS=$'\n'
file1=/etc/fstab
fl=($(cat $file1 | sed -n "s/^$/\#/;p;"))
[[ ! ${fl[@]} =~ "swap" ]] && [ -n "$(lsblk -o KNAME,FSTYPE | grep "swap")" ] && fl=(${fl[@]} "UUID=11111111-2222-3333-4444-555555555555 swap swap defaults 0 0")
mv $file1 $file1.bak
lsblk=($(lsblk -o 'KNAME,TYPE,MOUNTPOINT'))
mp="$(lsblk -o 'KNAME,TYPE,MOUNTPOINT' | grep -n '/$')"
n_mp=${mp%:*}
for ((k=n_mp; k>0; k--)); do disk="${lsblk[$k]}"; [[ "$disk" =~ "disk" ]] && break; done
dev_root="$(echo "$disk" | awk '{ print $1 }')"

for l in "${fl[@]}"; do
  if [[ $l =~ " / " ]] && [[ ${l:0:1} != "#" ]]; then
    b=${l%% *}
    blk="$(lsblk -o KNAME,MOUNTPOINT,UUID | grep " / ")"
    dev=${blk%% *}
    uuid=${blk##* }
    l=${l/$b/UUID=$uuid}
  fi
  if [[ $l =~ "swap" ]] && [[ ${l:0:1} != "#" ]]; then
    b=${l%% *}    
    blk="$(lsblk -o KNAME,FSTYPE,MOUNTPOINT,UUID | grep -E "\[SWAP\]")"
    uuid=${blk##* }
    l=${l/$b/UUID=$uuid}
  fi
  echo $l >> $file1
  systemctl daemon-reload
done

file2=/etc/default/grub
fl=($(cat $file2 | sed -n "s/^$/\#/;p;"))
[[ ! ${fl[@]} =~ GRUB_CMDLINE_LINUX_DEFAULT=.*resume= ]] && [ -n "$(lsblk -o KNAME,MOUNTPOINT | grep -E "\[SWAP\]")" ] && fl=(${fl[@]/$(printf '\n')GRUB_CMDLINE_LINUX_DEFAULT=\"/$(printf '\n')GRUB_CMDLINE_LINUX_DEFAULT=\"resume=UUID })
mv $file2 $file2.bak # "

for l in "${fl[@]}"; do
  if [[ $l =~ "resume=" ]]; then
    b=${l#*resume=}
    b=${b%% *}; b=${b%%\"} # "
    blk="$(lsblk -o KNAME,FSTYPE,MOUNTPOINT,UUID | grep -E "\[SWAP\]")"
    uuid=${blk##* }
    l=${l/$b/UUID=$uuid}
  fi
  echo "$l" >> $file2
done

IFS=$'\n'
file3=/etc/grub.d/40_custom
fl=($(cat $file3 | sed -n "s/^$/\#/;p;"))
mv $file3 /etc/grub.d/40_custom.bak
chmod a-x /etc/grub.d/40_custom.bak

for l in ${fl[@]}; do
  << 'Bedingung_1'
  [[ $l =~ "TinyCore" ]] && tc=true
  if $tc && [[ $l =~ hd[0-9]+\, ]]; then
    blk=($(lsblk -o KNAME,MOUNTPOINT | grep " /$"))
    [ ${blk[0]:2:1} = "a" ] && m=0 || m=1
    n=${blk[0]:3:1}
    pos="${l%hd*}"; pos=${#pos}
    b="${l:$pos:5}"
    [[ ${l:$((pos+5)):1} =~ [0-9] ]] && b="${l:$pos:6}"
    l=${l/$b/hd$m,$n}
    tc=false
  fi
Bedingung_1
  if [[ $l =~ resume=|tce= ]]; then
    if [[ $l =~ resume= ]]; then recog="resume="; typ="\[SWAP\]"; else recog="tce="; typ=" / "; fi
    b=${l#*$recog}
    b="$(echo "$b" | sed -E 's~(^/[^/]*/[^/^ ]*).*~\1~; s~(^UUID=[^/]*).*~\1~')"
    blk="$(lsblk -o KNAME,FSTYPE,MOUNTPOINT,UUID | grep -E "$typ")"
    uuid="${blk##* }"
    l=${l/$b/UUID=$uuid}
  fi
  echo $l >> $file3
done
chmod a+x $file3

<< '10linux'
file4=/etc/grub.d/10_linux
dev=$(lsblk -o KNAME,MOUNTPOINT,FSTYPE | grep " / ")
dev=${dev%% *}
sed -e "s/linux$(printf '\t')\${rel_dirname}\/\${basename} root=\${linux_root_device_thisversion} ro \${args}/linux$(printf '\t')\${rel_dirname}\/\${basename} root=\/dev\/$dev ro \${args}/" $file4 > $file4.new
mv $file4.new $file4
chmod a+x $file4
10linux

restore-grub --no-read

