#!/bin/bash
## Το NoTails.. Tails Μενού στα Ελληνικά είναι ένα αρθρωτό (modular) Zenity
## σενάριο (script) ανοιχτού κώδικα (open source) για το Tails OS Live USB.
##
## Copyright (C) 2025  Rebelstreamers, version 1.0 από το gamelink.gr
##
## Το πρόγραμμα αυτό μεταφέρεται σε εσάς "AS IS" και χωρίς καμία υποχρέωση από 
## τον δημιουργό του και καλύπτεται απο την AGPLv3 GNU άδεια έκδοσης.


#
# ΟΙ 2 ΑΡΧΙΚΕΣ ΜΕΤΑΒΛΗΤΕΣ ΜΑΣ
our_user="$(whoami)"

dektop_file=("NoTails-Tails-Μενού.desktop" "YWC-eDownloader.desktop")

# Απαραίτητο για να αλλάξουμε την εντολή bash στο desktop αρχειο του standalone
# σεναρίου μιας και είναι ποιο ωραίο να μην έχει όλα τα υπομενού όταν τρέχει το
# τερματικό αλλά και να διαμορφώσουμε την δικιά μας προτίμηση στις διαστάσεις του
# τερματικού αλλά και πως θα εμφανίζεται.
# Επίσης όσοι θέλουν να κάνουν port στα μη υποστηριζόμενα τερματικά μέχρι στιγμής
# καλό είναι να αρχίσουν απο εδώ τις αλλαγές τους μιας και δεν έχει ούτε login
# που καθυστερούν τις δοκιμές αλλά και δεν επηρεάζει καθόλου το NoTails..Tails 
# Mενού!

# Ακολουθεί σχεδόν πιστή αντιγραφή από το πρώτο όπου έχει και τα δεδομένα από τις 
# δοκιμές μου.

# Αν θέλετε να χρησιμοποιήσετε το script στο Linux Desktop σας με άλλο τερματικό
# πρώτο απλά μετακινήστε την διαταγή εκτέλεσης του τερματικού της αρεσκείας σας 
# πρώτο στην λιστα. 
# Αρχική λίστα δοκιμής των διάφορων τερματικών. Την άφησα για τις δοκιμές σας
# όπως και όλα όσα χρειάζονται για να τις κάνετε με σχόλιο μπροστά ώστε να έχετε
# από κάπου να ξεκινήσετε.
# original_terminal_list=("kgx" "gnome-terminal" "ptyxis" "mate-terminal" \
#    "konsole" "xfce4-terminal" "qterminal" "lxterminal" "uxterm" "xterm")
terminal_list=("kgx" "gnome-terminal" "ptyxis" "mate-terminal" )
# Χρειάζεται ως μεταβλητή σε όσα script εφαρμόζουν ρυθμίσεις. Το τερματικό είναι
# ανεξάρτητο της έκδοσης του Desktop και ανεξάρτητο της έκδοσης Linux

# μας φέρνει το 1ο τερματικό απο την λίστα που καλούμε
yparxi_termatikou(){
    myarray=($@)
    for i in "${myarray[@]}"; do
        if [ "$(command -v $i)" != "" ]; then
            echo "$i"
            break
        fi
    done
}

to_termatiko_mas="$(yparxi_termatikou "${terminal_list[@]}")"
#echo "$to_termatiko_mas"

if [ "$to_termatiko_mas" == "kgx" ]; then
    # Τρομερά απίθανο σενάριο να βρεθεί το kgx σε Tails παλιότερο της 7.0 έκδοσης
    # Για τον απλούστατο λόγο ότι είναι μια σχετικά πρόσφατη εφαρμογή!
    # Τώρα αν το λειτουργικό δεν είναι το Tails OS και έχει το kgx και τρέχει το
    # script μέσα από τον Persistent φάκελο μαζί με όλα τα υπόλοιπα και είναι 
    # debian η βάση του (π.χ UBUNTU) το script θα χρησιμοποιήσει το gnome-terminal
    # αλλιώς αν είναι το mate-terminal θα χρησιμοποιήσει το mate-terminal και
    # ότου καθεξής αν έχετε την δικιά σας προτίμηση προσθέστε ένα elif και αφού
    # το τρέξετε απλά αλλάξτε τις διαστάσεις και το τελικό command στον επόμενο
    # έλεγχο ... Καλό White Hacking :)
    tails_version="7"
elif [ "$to_termatiko_mas" == "gnome-terminal" ]; then
    # αν το χρησιμοποιήσετε σε TAILS 6 ή σε Linux με το GNOME XORG που δεν βάζει
    # το kgx. Τα Debian desktop που έχουν το gnome-terminal ως προκαθορισμένο είναι:
    # 1) UBUNTU 22 LTS 2) Cinnamon 3) Metacity kai 3) το Debian Default Desktop
    tails_version="6"
elif [ "$to_termatiko_mas" == "ptyxis" ]; then
    # αν το χρησιμοποιήσετε σε νεο UBUNTU DESKTOP (μετα την 25 εκδοση). Τα παλια
    # αλλά ακόμα ενεργά (22 LTS)χρησιμοποιουν gnome-terminal
    tails_version="7u"
elif [ "$to_termatiko_mas" == "mate-terminal" ]; then
    # αν το χρησιμοποιήσετε σε MATE DESKTOP
    tails_version="7m"
# elif [ "$to_termatiko_mas" == "konsole" ]; then
#     # αν το χρησιμοποιήσετε σε KDE DESKTOP 
#     tails_version="7k"
# elif [ "$to_termatiko_mas" == "xfce4-terminal" ]; then
#     # αν το χρησιμοποιήσετε σε Xfce DESKTOP
#     tails_version="7xf"
# elif [ "$to_termatiko_mas" == "qterminal" ]; then
#     # αν το χρησιμοποιήσετε σε LXQt DESKTOP 
#     tails_version="7q"
# elif [ "$to_termatiko_mas" == "lxterminal" ]; then
#     # αν το χρησιμοποιήσετε σε LXDE DESKTOP
#     tails_version="7lx"
# elif [ "$to_termatiko_mas" == "uxterm" ]; then
#     tails_version="7ux"
# elif [ "$to_termatiko_mas" == "xterm" ]; then
#     tails_version="7xt"        
else
    #σημαίνει οτι η συνάρτηση δεν επέστρεψε τίποτα από την terminal_list
    echo -ne "\r\n To script δεν θα αλλάξει την εντολή εκτέλεσης του τερματικού! \n"
    zenity --error --width=350 --height=240 --text \
"  To script δεν θα αλλάξει την εντολή εκτέλεσης του τερματικού! \n"
    sleep 3
    tails_version="no_terminal"
fi


# Μετά το Tails 7.0 δεν υπάρχει το gnome-terminal το οποίο έχει αντικατασταθεί
# από το gnome-console (kgx) και η παρακάτω αλλαγή είναι επιβεβλημένη για όσους
# έχουν δικά τους ή παλιότερα Tails με gnome-terminal. Φυσικά αν θέλετε άλλα
# τερματικά αυτό το σημείο είναι που πρέπει να αλλάξετε πρώτα αλλά πρέπει να 
# θυμάστε ότι gnome-terminal σημαίνει Tails OS 6 και παλιότερο και kgx σημαίνει 
# Tails 7.0 και νεώτερο. Φυσικά πάντα ελέγχοντας & αλλάζοντας τις διαφορές τους! 
if [ "$tails_version" == "7" ]; then
    # Πάντα 1ος ο έλεγχος για το Tails 7 για να επιλέγει το kgx μιας και δεν 
    # δεν υπάρχουν οι πληροφορίες έκδοσης της διανομής μέσω των lsb αρχείων. 
    # Στο 3ο script για τον έλεγχο του Tor εγκαθιστούμε αναγκαστικά και μέχρι 
    # στιγμής δεν μπορούμε να το αποφύγουμε το gnome-terminal. Οπότε για να μην 
    # γυρίζει σε gnome-terminal αν το βρει εγκατεστημένο το ρωτάμε πρώτο!
    term_command='kgx -- sh -c '
elif [ "$tails_version" == "6" ]; then
    # Αν χρησιμοποιείται για κάποιο λόγο ακόμα το Tails OS 6 ή το GNOME γιατί...
    # To προκαθορισμένο του GNOME είναι ακόμα το gnome-terminal και το δοκίμασα 
    # σε Virtual Machine. Αν οι διαστάσεις είναι λάθος στον Η/Υ σας αλλάξτε τις!
    if [ "$linux_type" == "Tails OS" ]; then
        term_command='gnome-terminal --window --hide-menubar -- sh -c '
    else 
         term_command='gnome-terminal --hide-menubar -- sh -c '
    fi
    # INFO:
    # Στσ νέσ GNOME/ΜΑΤΕ παρουσιάζονται warningς για ένα gtk-module. Αυτό φεύγει
    # αν βάλετε # μπροστά στην πρόταση gtk-modules=colorreload-gtk-module
    # δηλαδή να γίνει #gtk-modules=colorreload-gtk-module στο αρχείο 
    # .config/gtk-4.0/settings.ini. Αν θέλετε να το κάνετε με command εκτελέστε
    # την επόμενη εντολή σε ξεχωριστό τερματικό. Δεν την εκτέλεσα από εδώ μέσα
    # γιατί μπορεί στο μέλλον να εξαφανιστεί το μήνυμα και να κάνει ζημιά!
    # sed -i -e "/^gtk-modules=colorreload-gtk-module/s/^/#/"  "$HOME/.config/gtk-4.0/settings.ini"
    # άλλα παρόμοια warnings που συνάντησα ήταν για GTK_IM_MODULE=xim
elif [ "$tails_version" == "7u" ]; then
    # To προκαθορισμένο του UBUNTU 25 είναι το ptyxis και το δοκίμασα σε Virtual 
    # Machine. Αν οι διαστάσεις είναι λάθος στον Η/Υ σας αλλάξτε τις !
    # Η έκδοση 22 LTS θα χρησιμοποιήσει το gnome-terminal του Tails 6 από πάνω.  
    term_command='ptyxis -- sh -c '
elif [ "$tails_version" == "7m" ]; then
    # To προκαθορισμένο του DEBIAN MATE είναι το mate-terminal και το δοκίμασα 
    #  σε Virtual Machine. Αν οι διαστάσεις είναι λάθος στον Η/Υ σας αλλάξτε τις!
    term_command='mate-terminal --hide-menubar -- sh -c '
    # η από κάτω εντολή αφαιρεί τα warnings αλλά μην την εκτελέσετε από εδώ μέσα
    # sed -i -e '/^gtk-modules=colorreload-gtk-module/s/^/#/' $HOME/.config/gtk-4.0/settings.ini
# elif [ "$tails_version" == "7k" ]; then
#     # To προκαθορισμένο του KDE Desktop είναι το konsole terminal και το δοκίμασα 
#     # σε Virtual Machine αλλά δεν κατάφερα να το κάνω να δουλέψει. 
#     # Εγκαταστήστε για να χρησιμοποιήθεί κάποιο άλλο ...
#     term_command='konsole'
#     zen_list_menu='zenity --list '
#     diastaseis_menu='--width=570 --height=350'
#     entoli_ektelesis="-e"
# elif [ "$tails_version" == "7xf" ]; then
#     # To προκαθορισμένο του Xfce4 είναι το xfce4-terminal και το δοκίμασα 
#     # σε Virtual Machine. Για να κρατήσει ανοιχτό το καλούμενο σενάριο ήθελε 
#     # την παράμετρο -c μέσα στην εντολή bash αλλά στο τέλος δεν αναγνώριζε τον 
#     # κωδικό ως $1 ... οπότε ... Εγκαταστήστε για να χρησιμοποιήθεί κάποιο άλλο 
#     # απὸ την terminal_list !
#     term_command='xfce4-terminal --window --hide-menubar'
#     zen_list_menu='zenity --list '
#     diastaseis_menu='--width=570 --height=430'
#     entoli_ektelesis="-e"
# elif [ "$tails_version" == "7q" ]; then
#     # To προκαθορισμένο του LXQr Desktop είναι το qterminal και το δοκίμασα 
#     # σε Virtual Machine αλλά δεν κατάφερα να το κάνω να δουλέψει. 
#     # Εγκαταστήστε για να χρησιμοποιήθεί κάποιο άλλο ...
#     term_command='qterminal'
#     zen_list_menu='zenity --list '
#    diastaseis_menu='--width=570 --height=430'
# elif [ "$tails_version" == "7lx" ]; then
#     term_command='lxterminal'
#     zen_list_menu='zenity --list '
#     diastaseis_menu='--width=570 --height=420'
#     entoli_ektelesis="-- command=" 
# elif [ "$tails_version" == "7ux" ]; then
#     term_command='uxterm'
#     zen_list_menu='zenity --list '
#     diastaseis_menu='--width=570 --height=420'
#     entoli_ektelesis="-e"
# elif [ "$tails_version" == "7xt" ]; then
#     term_command='xterm'
#     zen_list_menu='zenity --list '
#     diastaseis_menu='--width=570 --height=420'
#     entoli_ektelesis="-e"
else
    # οχι τερματικό με επιτυχημένες εντολές διαμόρφωσής του!
    # tails_version="no_terminal" και το bash θα αλλαχθεί με ... bash ;)
    echo -ne "Δεν υπάρχει τερματικό και δεν θα αλλάξει τίποτα"
    term_command="bash"
fi




echo -ne "\r\n Δημιουργώ τα Desktop entries για τον χρήστη $our_user \n"


ektelesi_entolwn_antigrafis(){
    if ! $(cp -f "$HOME/Persistent/NoTails..Tails-Files/$1" "$HOME/.local/share/applications/") ;then
    	return 1
    fi
    sleep 1
    if ! $(chown ""$our_user":"$our_user"" "$HOME/.local/share/applications/$1"); then
    	return 2
    fi
    sleep 1
    if [ "$our_user" != "amnesia" ]; then
        if ! $(sed -i -e 's/amnesia/'"$our_user"'/g' "$HOME/.local/share/applications/$1"); then
        	return 3
        fi
    fi
    sleep 1
    if ! $(chmod a+x "$HOME/.local/share/applications/$1"); then
    	return 4
    fi
    # if ! $(chmod a+x "$HOME/Persistent/NoTails..Tails-Files/5.standalone-download-video-with-yt-dlp.sh"); then
    #     return 6
    # fi
    # if ! $(chmod a+x "$HOME/Persistent/NoTails..Tails-Files/8.Torrent-Transmission.sh"); then
    #     return 7
    # fi

}

make_them_exec(){
    ### έλεγχος και των σεναρίων να είναι εκτελέσιμα
    if ! $(chmod a+x "$HOME/Persistent/NoTails-Tails-Μενού.sh"); then
        return 5
    fi
    local metritis=5
    for i in $(ls $HOME/Persistent/NoTails..Tails-Files/*.sh); do
        #echo $i;
        ((metritis+=1))
        if ! $(chmod a+x "$i"); then
            return $metritis
        fi
    done
}

elegxos_fakelou(){
	# δεν καταστρέφει ή δεν δημιουργεί νέο φάκελο με την -p παράμετρο
    mkdir -p $HOME/.local/share/applications
}

# αρχικά και κοινό για όλα τα desktop files
elegxos_fakelou

for i in "${dektop_file[@]}"; do
    echo "Εκτελώ τις εντολές για το $i menu entry"
    ektelesi_entolwn_antigrafis $i
    sleep 1
    if [ "$i" == "YWC-eDownloader.desktop" ];  then
        # echo "Εκτελώ τις εντολές για το $i menu entry"
        ektelesi_entolwn_antigrafis $i
        sleep 1
        if [ "$our_user" != "amnesia" ]; then
            # οι χρήστες του Tails δεν χρειάζονται αλλαγή τερματικού αφού είναι
            # έτοιμο προς χρήση/
            echo "Αλλά και αλλαγή τερματικού εκτέλεσης σε $term_command"
            sed -i -e 's/bash/'"$term_command"'/g' "$HOME/.local/share/applications/$i"
        fi
        sleep 1
    fi
done

make_them_exec

if [[ "$?" == "0" ]]; then
	echo -ne "\r\n Όλες οι εντολές της συνάρτησης εκτελέστηκαν επιτυχώς και \n
 την συντόμευση για την εφαρμογή θα την βρείτε στο υπομενού Other. \n\n"
else
	echo -ne "\r\n Δεν μπόρεσα να εκτελέσω μια ή περισσότερες εντολές της ektelesi_entolwn_antigrafis \n
 συνάρτησης! Το ανώτερω μήνυμα περιέχει και το πρόβλημα στο σημείο που εμφανίστηκε. \n\n"
fi
read -p "Πατήστε ενα κουμπί για να κλείσει το script ... "

