#!/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 άδεια έκδοσης.

# set -x

# Αρχικοποίηση του NoTails..Tails script Νο 1.
# Προσωπικές επιλογές. Αλλάξτε τις αν θέλετε ή απενεργοποιήστε τις με # μπροστά.
title1="1.Πριν Συνδεθούμε στο Tor"
echo -e '\033]2;'$title1'\007'
folder_name="NoTails..Tails-Files"

# Αν θέλετε να χρησιμοποιήσετε το script στο Linux Desktop σας με άλλο τερματικό
# πρώτο απλά μετακινήστε την διαταγή εκτέλεσης του τερματικού της αρεσκείας σας 
# πρώτο στην λιστα. Επίσης θα πρέπει να κάνετε το ίδιο και σε όλα τα script που 
# βρίσκονται μέσα στον φάκελο NoTails..Tails-Files
# Αρχική λίστα δοκιμής των διάφορων τερματικών. Την άφησα για τις δοκιμές σας
# όπως και όλα όσα χρειάζονται για να τις κάνετε με σχόλιο μπροστά ώστε να έχετε
# από κάπου να ξεκινήσετε.
# 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
desktop_type="$(echo $XDG_CURRENT_DESKTOP)"

# Αυτή η μεταβλητή καθορίζει αν οι επόμενες μεταβλητές μέχρι την dark_desktop θα
# επαναπροσδιορίζονται από ένα Zenity διάλογο ή όχι. Με true θα ερωτάστε και με
# οτιδήποτε άλλο θα παίρνει αυτές που είναι γραμμένες από εδώ και κάτω. 
change_initial_settings=true

# απενεργοποίησε τα 3d animations. Ειδικά στα παλια PC & VM είναι απαραίτητο
disable_3d_animations=true

# απενεργοποίησε το αυτόματο άνοιγμα των USB. Antimalware protection
disable_usb_auto_mount=true

# Δεν είναι για χόρταση το Tails... Μπαίνουμε βλέπουμε και φεύγουμε ;)
no_sleep_mode=true

# απενεργοποίησε ή ρύθμισε το dim της οθόνης ώστε να εξοικονομείς ενέργεια
no_dim_mode=false

# απενεργοποίησε το κλείδωμα της οθόνης
no_locked_screen=true

# απενεργοποίησε τις κάμερες του Η/Υ
no_laptop_camera=true

# απενεργοποίησε όλα τα μικρόφωνα στον Η/Υ
no_mic=true

# απενεργοποίησε τον περίφημο ... γεωεντοπισμό αν ... βρεθεί !!!
no_loc=true

# περισσότερο για να γίνει ποιο ελαφρύ το απενεργοποιών το file history
# αφού το persistence που έχουμε τα αρχεία μας είναι κρυπτογραφημένο & 
# το Tails read only ;)
no_file_history=true

# Βοηθάει στην εξοικονόμηση ενέργειας αλλά κάποια προγράμματα τα καταστρέφει
# οπτικά γιατί είναι παλιά; π.χ. to kleopatra που για αυτόν το λόγο το seahorse
# που είναι το gnome keys & manager δεν έχει πρόβλημα στο dark mode .
dark_desktop=true

# Αν δεν θέλετε το μπλε desktop που είναι προκαθορισμένο επιλέξτε άλλο χρώμα
# Το προκαθορισμένο είναι #023c88.
# Tip : Αν θέλετε να αλλάξετε το background χρώμα του τερματικού, όταν ανοίξει
# το παράθυρο με τα χρώματα κλικάρετε πάνω σε ένα και σύρετε μέσα στο ανοιχτό
# τερματικό χωρίς να πατήσετε τα OI/Cancel. Oμως πρέπει να ξέρετε οτι δεν αλλάζει
# το χρώμα των γραμμάτων και οτι αν το αλλάξετε σε σκοτεινό δεν θα φαίνονται;).
# Also ... Το προκαθορισμένο desktop color είναι #023c88 and ... WinXP = #357ec7 !
new_desktop_color=true
default_desktop_color="#023c88"

# αν δεν έχετε πρόβλημα με την ταχύτητα του ποντικιού κάντε to false.
adjust_mouse_speed=true

# έβαλα μόνο 2 γλώσσες ... αν θέλετε και άλλες δέστε το el_en_langs & προσθέστε 
# το αντίστοιχο πεδίο με το dconf-editor. Για ισπανικά π.χ: ,('xkb', 'es')
el_en_langs=false

# Αν θέλετε περισσότερες γλώσσες να προστεθούν στην εναλλαγή γλωσσών (το TAILS) 
# πρέπει και η προηγούμενη παράμετρος el_en_langs να την κάνετε false ώστε να 
# ανοίγει παράθυρο διαλόγου που θα επιλέγετε εσείς αυτές που θέλετε και να μην 
# διαλέγει αυτόματα ανάμεσα σε αγγλικά και ελληνικά όπως κάνοει τώρα. 
if [ $el_en_langs == false ]; then 
    need_more_langs=true
fi

# Η αλλαγή σε ελληνικά και πίσω γίνεται με τα κουμπιά control [Ctrl] + η μπάρα 
# [spacebar]
# Για να γίνει control+shift ή alt+shift ή κάτι παρόμοιο που μάθαμε όλοι θέλει... 
# recompile to gnome desktop. Καλά εντάξει ... lol
# Επειδή είναι πολύπλοκη διαδικασία δεν την συμπεριέλαβα σε κανέναν διάλογο ...
# Αν θέλετε άλλον συνδυασμό αφού τον βρείτε αλλάξτε τον μόνοι σας βρίσκοντας και 
# αλλάζοντας την εντολή που τρέχει απο την ακόλουθη μεταβλητή
# Η προκαθορισμένη επιλογή είναι; ['<Super>space', 'XF86Keyboard']
# Δηλαδή το κουμπί με σήμα των windows + spacebar αλλά την βρίσκω ευκολότερη αυτή
# με το μακρινότερο κουμπί + την μπάρα. 
new_key_bind=true

### disable tracker.of gnome 
# το χρειάζεται o totem player αλλά είναι αχρείαστο και βαραίνει το gnome
# το άφησα για να το απενεργοποιήσετε / αφαιρέσετε εσείς αν δεν την θέλετε.
# Για αυτό τον λόγο έχω το mpv στα συμπληρωματικά προγράμματα αν θέλετε
# να απενεργοποιήσετε αυτήν την υπηρεσία κάνοντας την true 
disable_tracker=false

### Αν θέλουμε να θυμάται το script αυτό τις επιλογές μας αλλάξτε την μεταβλητή 
# remind_my_zenity_settings σε true από false.
# Αυτή η μεταβλητή αφορά μόνο τις επιλογές σας σε zenity. όχι τις υπόλοιπες γιατί 
# για τις επόμενες από εδώ και κάτω είναι απαραίτητο να ερωτάται κάθε φορά αφού 
# μπορεί να αλλάξει και κατά την διάρκεια που δουλεύουμε λόγω π.χ.χρήσης κάποιας
# νέας εφαρμογής.
remind_my_zenity_settings=false
# ΣΗΜΑΝΤΙΚΌ
# Αν θέλετε να σας ξαναρωτήσει απλά διαγράψτε το αρχείο my_settings.txt που είναι
# μέσα στον φάκελο settings για να του δώσετε νέες ρυθμίσεις γιατί είναι ευκολότερο
# από το να κάνετε το changed_settings=true κάθε φορά ανοίγοντας και αλλάζοντας.
# το αρχείο αυτό. Πάντως ότι από τα δύο κάνετε είναι το ίδιο και το αυτό !
changed_settings=false
settings_folder="settings"
settings_file="my_settings.txt"
##

### Σημαντικό για επιπλέον προστασία αφού το fren firewall έχει τις δικές του
# προκαθορισμένες ρυθμίσεις και δεν πρέπει να τις πειράξουμε ... 
# Επίσης για όοους νομίζουν οτι δεν μας προστατεύει θα σας πω πως να κάνετε μόνοι 
# σας ένα τεστ απλά τρέχοντας το onion share αρχικά με Client - Πελάτης και μετά
# Server - εξυπηρετητής και να δείτε μόνοι σας τα αποτελέσματα.
#### ENABLE UFW Firewall FTW !!!
check_ufw=true

### Αυτός είναι ο τελευταίος έλεγχος όπου επιλέγουμε τι ρόλο θέλουμε να έχει το
# Tails usb μας κάθε φορά.
# Πρέπει να επιλέξετε true στο check_ufw γιατί αλλιώς και false να είναι  
# το κάνει true το check_ufw μόνο του αν δει οτι υπάρχει το ufw στο Tails σας.
# Στον διάλογο που ανοίγει με ΟΚ εκτελεί μια απο τις 3 επιλογές και με Cansel τπ
# αφήνει ως έχει σε περίπτωση που κλείσαμε τον browser και θέλουμε να το τρέξουμε
# ξανά το 1. για να ανοίξουμε τον browser + δικτυακή οθόνη συνδέσεων + system
# monitor.
# 
# Οι 3 επιλογές είναι :
# Client - Πελάτης . Κλείνει μια σειρά απο πόρτες και όλες τις UDP in! Επίσης
#                   αλλάζει μια ρύθμιση στο torsocks που είναι χρήσιμο μόνο σε
#                   όσους θέλουν να μοιράσουν αρχεία, δηλαδή η επόμενη επιλογή.
# Server - εξυπηρετητής . Διαγράφει όλες τις προηγούμενες ρυθμίσεις 
# Reset - Επαναφορά UFW . Επαναφέρει το UFW στην αρχική του κατάσταση !
check_tails_ufw_role=false

# ΤΕΛΟΣ ΤΟ TERMATIKO ΠΑΡΑΚΟΛΟΥΘΗΣHΣ Η/Υ, ΔΙΚΤΥΑΚΩΝ ΣΥΝΔΕΣΕΩΝ & TOR BROWSER
# Αυτό αν γίνει false θα πρέπει να ανοίξετε τον TOR BROWSER μόνοι σας μετά  
enable_ss_monitoring_and_tor=true

#
# ------------ ΑΠΟ ΕΔΩ ΚΑΙ ΚΑΤΩ ΟΤΙ ΠΕΙΡΑΖΕΤΕ ΕΧΕΙ ΕΠΙΔΡΑΣΗ ------------ 
# ----------------- ΣΤΗΝ ΑΡΧΙΚΗ ΛΕΙΤΟΥΡΓΙΑ ΤΟΥ SCRIPT ------------------
#

source "$HOME/Persistent/$folder_name/NT_Functions.sh"


# Χρώματα για τις οθόνες των τερματικών, 
# Με true έχετε τα χρώματα που έχω βάλει εγώ, με ble τα κάνετε όλα μπλε, με gre 
# όλα πράσινα, με yel όλα κίτρινα, με red όλα κόκκινα και με οτιδήποτε εκτός από 
# αυτές τις 5 ονομασίες δεν θα εμφανίζονται καθόλου χρώματα!
# Σημείωση: οι μεταβλητές του κάθε script ορίζουν τα χρώματα στο script του και
# μονο και δεν την έκανα συνάρτηση για να μπορούμε να έχουμε σε κάθε οθόνη 
# ξεχωριστά χρώματα μιας και αν γίνει συνάρτηση θα κληρονομεί τις ιδιότητες του 
# κύριου σεναρίου.
use_color="true"
NC='\033[0m'

# Βάλτε το δικό σας χρώμα αν θέλετε σαν ένα νέο elif αλλά αλλάξτε και την use_color
if [[ "$use_color" == "true" ]]; then 
    RED='\033[1;31m'; GRE='\033[1;32m'; YEL='\033[1;33m'; BLE='\033[1;36m'
elif [[ "$use_color" == "ble" ]]; then 
    RED='\033[1;36m'; GRE='\033[1;36m'; YEL='\033[1;36m'; BLE='\033[1;36m'
elif [[ "$use_color" == "gre" ]]; then
    RED='\033[1;32m'; GRE='\033[1;32m'; YEL='\033[1;32m'; BLE='\033[1;32m'
elif [[ "$use_color" == "yel" ]]; then
    RED='\033[1;33m'; GRE='\033[1;33m'; YEL='\033[1;33m'; BLE='\033[1;33m'
elif [[ "$use_color" == "red" ]]; then
    RED='\033[1;31m'; GRE='\033[1;31m'; YEL='\033[1;31m'; BLE='\033[1;31m'
else
    #χωρίς χρώματα καθόλου
    unset -v RED; unset -v GRE; unset -v YEL; unset -v BLE; unset -v NC
fi

# Έλεγχος για ύπαρξη του zenity. Χωρίς zenity που χρησιμοποεί το Tails OS δεν 
# έχει καμιά απολύτως χρησιμότητα το σενάριο αυτό. 
check_zenity_exists

# πιστοποίησε οτι ειναι Tails OS ή Debian έκδοση Linux
detect_Tails_OS_Linux_Desktop

# To login μας είτε ως μόνο του είτε από το κύριο σενάριο
if [ "$1" == "" ]; then
    echo -e "\r\n Θα χρειαστεί να γράψετε μια φορά το$BLE admin password$NC ως$GRE Sudo Pass$NC \n"
    sudo_passs
else
    adminz="$1"
    read -s -p " To script χρησιμοποιεί το admin password που έχετε ήδη βάλει " \
    adminpassword <<< $adminz;  
fi

# Επιβεβαίωση αλλά και επαναπροσδιορισμός των γραμμένων μεταβλητών μέσω του Zenity
# ώστε να μην επεξεργάζεστε το αρχείο αυτό .
# Δεν έβαλα να θυμάται τις ρυθμίσεις αυτές γιατί αυτό το παράθυρο ελέγχει και την
# μεταβλητή που κάνει να θυμάται τις επόμενες ρυθμίσεις ...
# Οι μόνες 2 ρυθμίσεις που δεν ελέγχονται ουσιαστικά είναι το κλείσιμο - άνοιγμα
# του Wifi και το μπλοκάρισμα του loc του GNOME γιατί πιστεύω ότι και οι 2 είναι
# οι σημαντικότερες και στο μεν Wifi πρέπει να έχουμε ξεκάθαρη άποψη αν είναι 
# ανοιχτό ή κλειστό και στο δε loc ότι αν είναι ενεργό είναι θέμα ασφαλείας μας
# αρχικά και φυσικά ουσιαστική κατάργηση της σωστής λειτουργίας του Tails OS USB!
# Αν παρόλα αυτά δεν θέλετε να ερωτάστε κάθε φορά και θέλετε σταθερές επιλογές πάντα
# Την έκανα μεταβλητή που είναι πρώτη πρώτη κιόλας στο αρχείο ώστε να μην ψάχνετε.
if [ "$change_initial_settings" = true ] && [ "$linux_type" == "Tails OS" ]; then
    echo -ne "\r\n\n Επιβεβαιώστε ή Αλλάξτε τις Ρυθμίσεις μέσα από το${BLE} Zenity${NC} παράθυρο "
    export -f anamoni_ektelesis
    anamoni_ektelesis "3" &

    EPILOGES="$(zen_no_gtkwarnings --title "Επιβεβαιώστε ή Αλλάξτε τις Ρυθμίσεις." \
        --forms  \
        --text "<span foreground='#ef172f'><b> *** Αυτές είναι οι Αρχικές Ρυθμίσεις του πρώτου σεναρίου. Αφού τις\n\
τροποποιήσετε μετά το OK αλλάζουν όλες τους, όμως με το Cancel δεν\n\
  αλλάζει καμία τους και συνεχίζει όπως είναι γραμμένες στο αρχείο...</b></span>" \
        --add-combo='Θέλετε Μαύρο ή Άσπρο το Desktop;' --combo-values='Μαύρο φόντο Desktop|Άσπρο φόντο Desktop' \
        --add-combo='Θέλετε 3d animations στο Desktop;' --combo-values='Όχι 3d Animations|Ναι 3d Animations' \
        --add-combo='Θέλετε αυτόματο άνοιγμα των USB;' --combo-values='Όχι automount USB|Ναι automount USB' \
        --add-combo='Θέλετε να μην πέφτει σε λήθαργο;' --combo-values='Όχι κατάσταση Sleep|Ναι κατάσταση Sleep' \
        --add-combo='Θέλετε να έχετε dim στην οθόνη;' --combo-values='Όχι dim στην οθόνη|Ναι dim στην οθόνη' \
        --add-combo='Θέλετε να κλειδώνει η οθόνη;' --combo-values='Όχι κλείδωμα οθόνης|Ναι κλείδωμα οθόνης' \
        --add-combo='Θέλετε κάμερα στο Laptop ή στον Η/Υ;' --combo-values='Όχι ενεργή κάμερα|Ναι με κάμερα' \
        --add-combo='Θέλετε μικρόφωνο στο Laptop ή Η/Υ;' --combo-values='Όχι μικρόφωνο|Ναι με μικρόφωνο' \
        --add-combo='Θέλετε να βλέπετε τα πρόσφατα αρχεία;' --combo-values='Όχι πρόσφατα αρχεία|Ναι πρόσφατα αρχεία' \
        --add-combo='Αλλαγή στα επόμενα Zenity Settings;' --combo-values='Όχι να μην αλλάξουν|Ναι να αλλάξουν' 
        )"


    if [ ! -z "${EPILOGES}" ]; then
            epilogi_1=$( cut -d '|' -f 1 <<< "$EPILOGES" )
            epilogi_2=$( cut -d '|' -f 2 <<< "$EPILOGES" )
            epilogi_3=$( cut -d '|' -f 3 <<< "$EPILOGES" )
            epilogi_4=$( cut -d '|' -f 4 <<< "$EPILOGES" )
            epilogi_5=$( cut -d '|' -f 5 <<< "$EPILOGES" )
            epilogi_6=$( cut -d '|' -f 6 <<< "$EPILOGES" )
            epilogi_7=$( cut -d '|' -f 7 <<< "$EPILOGES" )
            epilogi_8=$( cut -d '|' -f 8 <<< "$EPILOGES" )
            epilogi_9=$( cut -d '|' -f 9 <<< "$EPILOGES" )
            epilogi_10=$( cut -d '|' -f 10 <<< "$EPILOGES" )
            if [ "$epilogi_1" == "Μαύρο φόντο Desktop" ]; then
                dark_desktop=true
            elif [ "$epilogi_1" == "Άσπρο φόντο Desktop" ]; then
                dark_desktop=false
            else 
                echo -ne "\r\nΔεν μπορώ να αλλάξω το Μαύρο ή Άσπρο το Desktop προφανώς γιατί κάτι άλλαξε στην μεταβλητή\n"
            fi

            if [ "$epilogi_2" == "Όχι 3d Animations" ]; then
                disable_3d_animations=true
            elif [ "$epilogi_2" == "Ναι 3d Animations" ]; then
                disable_3d_animations=false
            else 
                echo -ne "\r\nΔεν μπορώ να αλλάξω το 3d animations προφανώς γιατί κάτι άλλαξε στην μεταβλητή\n"
            fi

            if [ "$epilogi_3" == "Όχι automount USB" ]; then
                disable_usb_auto_mount=true
            elif [ "$epilogi_3" == "Ναι automount USB" ]; then
                disable_usb_auto_mount=false
            else 
                echo -ne "\r\nΔεν μπορώ να αλλάξω το αυτόματο άνοιγμα των USB προφανώς γιατί κάτι άλλαξε στην μεταβλητή\n"
            fi

            if [ "$epilogi_4" == "Όχι κατάσταση Sleep" ]; then
                no_sleep_mode=true
            elif [ "$epilogi_4" == "Ναι κατάσταση Sleep" ]; then
                no_sleep_mode=false
            else 
                echo -ne "\r\nΔεν μπορώ να αλλάξω την κατάσταση Sleep προφανώς γιατί κάτι άλλαξε στην μεταβλητή\n"
            fi

            if [ "$epilogi_5" == "Όχι dim στην οθόνη" ]; then
                no_dim_mode=true
            elif [ "$epilogi_5" == "Ναι dim στην οθόνη" ]; then
                no_dim_mode=false
            else 
                echo -ne "\r\nΔεν μπορώ να αλλάξω το dim στην οθόνη προφανώς γιατί κάτι άλλαξε στην μεταβλητή\n"
            fi

            if [ "$epilogi_6" == "Όχι κλείδωμα οθόνης" ]; then
                no_locked_screen=true
            elif [ "$epilogi_6" == "Ναι κλείδωμα οθόνης" ]; then
                no_locked_screen=false
            else 
                echo -ne "\r\nΔεν μπορώ να αλλάξω το κλείδωμα οθόνης προφανώς γιατί κάτι άλλαξε στην μεταβλητή\n"
            fi

            if [ "$epilogi_7" == "Όχι ενεργή κάμερα" ]; then
                no_laptop_camera=true
            elif [ "$epilogi_7" == "Ναι με κάμερα" ]; then
                no_laptop_camera=false
            else 
                echo -ne "\r\nΔεν μπορώ να αλλάξω την κάμερα προφανώς γιατί κάτι άλλαξε στην μεταβλητή\n"
            fi

            if [ "$epilogi_8" == "Όχι μικρόφωνο" ]; then
                no_mic=true
            elif [ "$epilogi_8" == "Ναι με μικρόφωνο" ]; then
                no_mic=false
            else 
                echo -ne "\r\nΔεν μπορώ να αλλάξω το μικρόφωνο προφανώς γιατί κάτι άλλαξε στην μεταβλητή\n"
            fi

            if [ "$epilogi_9" == "Όχι πρόσφατα αρχεία" ]; then
                no_file_history=true
            elif [ "$epilogi_9" == "Ναι πρόσφατα αρχεία" ]; then
                no_file_history=false
            else 
                echo -ne "\r\nΔεν μπορώ να αλλάξω τα πρόσφατα αρχεία  προφανώς γιατί κάτι άλλαξε στην μεταβλητή\n"
            fi

            if [ "$epilogi_10" == "Όχι να μην αλλάξουν" ]; then
                # πάνε πακέτο αυτές οι 2 μεταβλητές ?
                # Ναι για να ερωτηθεί πρέπει να είναι true και ανεξάρτητα τι είναι
                # αρχικά γιατί πρέπει να βεβαιωθούμε ότι θα ερωτηθεί / ελεγχθεί
                remind_my_zenity_settings=true
                changed_settings=false
            elif [ "$epilogi_10" == "Ναι να αλλάξουν" ]; then
                remind_my_zenity_settings=true
                changed_settings=true
            else 
                echo -ne "\r\nΔεν μπορώ να αλλάξω να αλλάξουν τα Zenity Settings προφανώς γιατί κάτι άλλαξε στην μεταβλητή\n"
            fi
    else 
        echo -ne "\r\n Κρατάω τις παλιές ρυθμίσεις !\n"
    fi

fi


# Εξαρτώνται πως φαίνονται όλες οι ρυθμίσεις στο Desktop από αυτήν την επιλογή...
# οπως βλέπετε δεν είναι για όλα τα Desktops αυτές οι ρυθμίσεις
if [ "$linux_type" == "Tails OS" ]; then
    if [ "$dark_desktop" = true ]; then
        gsettings set org.gnome.desktop.interface gtk-theme 'Adwaita-dark'
        gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark'
    else 
        gsettings set org.gnome.desktop.interface gtk-theme 'Adwaita'
        if [ "$tails_version" == "7" ]; then
           gsettings set org.gnome.desktop.interface color-scheme 'prefer-light'
        else
           gsettings set org.gnome.desktop.interface color-scheme 'default'
        fi
    fi
fi

# βρίσκουμε αν χρησιμοποεί ο χρήστης wallpaper 
xrisimopoiw_wallpapper="$(detect_Wallpaper)"

# clear

# Αυτή είναι η μόνη επιλογή που δεν έχει διακόπτη γιατί αφορά το δίκτυο ...
# Με Yes κλείνει την wifi σύνδεση και με No ενεργοποιεί το wifi...
# Αυτό το έκανα έτσι γιατί αφενός πρέπει να έχουμε τον έλεγχο του wifi και να 
# μην το χρησιμοποιήσει κάποιο πρόγραμμα και αφετέρου μπορεί να χάσουμε το δίκτυο
# από το καλώδιο και να θέλουμε να χρησιμοποιήσουμε το wifi στην πορεία.
echo -e "\r\n\n Η $RED απενεργοποίηση $NC/$GRE ενεργοποίηση $NC του $BLE WIFI $NC μόνο μέσω του zenity παραθύρου!\n"

zenity --question --width 480 --title="Απενεργοποίηση του WIFI του Η/Υ" --text \
"
Αν o H/Y συνδέεται με καλώδιο στο Tor δίκτυο αλλά έχει και
WIFI κάρτα σημαίνει ότι θα έχουμε διαρροή δεδομένων και θα
πρέπει να πατήσετε το Yes για να Απενεργοποιηθεί το WIFI..

Αλλιώς πατήστε το No για να Ενεργοποιηθεί η WIFI κάρτα.

ΠΡΟΣΟΧΗ: Αν η κάρτα WIFI είναι ο κύριος φορέας Ίντερνετ στον
          Η/Υ θα πρέπει να πατήσετε No για να Ενεργοποιηθεί.
"

case $? in
    0 )       
       echo -e "\r\n Αποσυνδέω το WIFI για λόγους ασφαλείας... ;)\n" ;
       sudo -S <<< "${adminpassword}"   nmcli radio wifi off 2>/dev/null ;
       ;;
    1 )
       echo -e "\r\n Συνεχίζω με το WIFI ενεργοποιημένο...\n"
       sudo -S <<< "${adminpassword}"   nmcli radio wifi on 2>/dev/null ;
       ;;
    -1 )
       echo -e "\r\n Κάτι αναπάντεχο προέκυψε...\n"
       ;;
esac

anamoni_ektelesis "3"
clear

# Zenity παράθυρο για επιβεβαίωση ή αλλαγή των αρχικών επιλογών μας.
# Δεν έχει σχέση με τις ρυθμίσεις μέσα στον settings φάκελο γιατί αυτές είναι 
# μόνο για τα zemity παράθυρα που ακολουθούν.

mnm_nees_rythimiseis(){
        echo -e "\r\n Επιλέξατε να θυμάται τις ρυθμίσεις σας.\n \
Αφού τις βάλετε, δεν θα ξαναρωτήσει για αυτές..."
        echo -e "\r\n Τελευταία φορά που έβαλα τις ρυθμίσεις μου ήταν στις $BLE $(date) $NC. \n" \
        > $HOME/Persistent/$folder_name/$settings_folder/$settings_file
        sleep 5
}


# Αν έχετε επιλέξει να θυμάται το σενάριο τις επιλογές σας στους zenity διαλόγους
# θα τις αλλάξει σιωπηλά όλες χωρίς να σας ρωτήσει.
# Την πρώτη φορά πάντα θα σας ρωτάει για να τις μάθει από εσάς αφού τις επιλέξετε
# και για να επιλέξετε άλλες απλά διαγράψτε το αρχείο my_settings.txt
# Επειδή το Tails δεν έχει την jq ή το jsawk για να χρησιμοποιήσω json αναγκαστικά
# χρησιμοποίησα έναν ολόκληρο φάκελο για τις ρυθμίσεις σας όπου κάθε αρχείο κρατάει
# εφαρμόζει κάθε ξεχωριστή εντολή και όλες εξαρτώνται από το αρχείο my_settings.txt
if [ "$remind_my_zenity_settings" == "true" ] && [ "$linux_type" == "Tails OS" ]; then
    # Αν είναι η πρώτη φορά δεν θα έχει το settings αρχείο
    if [ ! -f "$HOME/Persistent/$folder_name/$settings_folder/$settings_file" ]; then
        # Πρώτος έλεγχος για την ύπαρξη των φακέλων και μετά αν είναι η 1η φορά.
        # ελέγχουμε την τοποθεσία του φακέλου settings να είναι μέσα στον φάκελό μας
        if [ ! -d "$HOME/Persistent/$folder_name/$settings_folder" ]; then
            echo -e "\r\n Ο φάκελος με τα settings του NoTails.. Tails λείπει, τον δημιουργώ τώρα."
            mkdir -p "$HOME/Persistent/$folder_name/$settings_folder"
        fi
        changed_settings=true
    fi
    if [ "$changed_settings" = true ]; then
        export -f mnm_nees_rythimiseis
        mnm_nees_rythimiseis
    else 
        last_time=$(date -r "$HOME/Persistent/$folder_name/$settings_folder/$settings_file" +"%d-%m-%Y %H:%M:%S")
        echo -e "\r\n Εφαρμόζω τις ρυθμίσεις σας όπως τις βάλατε στις $BLE $last_time $NC."
        sleep 3
        # δεν κάνουμε changed_settings=false γιατί δεν χρειάζεται να γράψουμε 
        # αρχικά αλλάζουμε τις ρυθμίσεις των μεταβλητών ώστε να μην τρέξουν ..
        new_desktop_color=false
        adjust_mouse_speed=false
        need_more_langs=false
        if [ "$dark_desktop" = true ]; then
            gsettings set org.gnome.desktop.background picture-uri-dark ""
        else
            gsettings set org.gnome.desktop.background picture-uri ""   
        fi
        export -f anamoni_ektelesis
        anamoni_ektelesis "16" &
        gsettings set org.gnome.desktop.background primary-color \
"$(head -n 1 "$HOME/Persistent/$folder_name/$settings_folder/desktop_color.txt")"
        gsettings set org.gnome.desktop.background secondary-color \
"$(head -n 1 "$HOME/Persistent/$folder_name/$settings_folder/desktop_color.txt")"
        gsettings set org.gnome.desktop.peripherals.mouse speed \
"$(head -n 1 "$HOME/Persistent/$folder_name/$settings_folder/mouse_speed.txt")"
        gsettings set org.gnome.desktop.input-sources sources \
"$(head -n 1 "$HOME/Persistent/$folder_name/$settings_folder/languages.txt")"
    fi
fi

# sleep 3


if [ "$linux_type" == "Tails OS" ]; then
    # 3d animations
    if [ "$disable_3d_animations" = true ]; then
        gsettings set org.gnome.desktop.interface enable-animations false
    else
        gsettings set org.gnome.desktop.interface enable-animations true
    fi

    # usb automount
    if [ "$disable_usb_auto_mount" = true ]; then
        gsettings set org.gnome.desktop.media-handling automount false  
        gsettings set org.gnome.desktop.media-handling automount-open false
    else
        gsettings set org.gnome.desktop.media-handling automount true
        gsettings set org.gnome.desktop.media-handling automount-open true
    fi

    # sleep mode
    if [ "$no_sleep_mode" = true ]; then
        gsettings set org.gnome.desktop.session idle-delay 0
    else 
        gsettings set org.gnome.desktop.session idle-delay 300
    fi

    # dim mode
    if [ "$no_dim_mode" = true ]; then
        gsettings set org.gnome.settings-daemon.plugins.power idle-dim false
    else
        gsettings set org.gnome.settings-daemon.plugins.power idle-brightness 30
    fi

    # lock screen
    if [ "$no_locked_screen" = true ]; then
        gsettings set org.gnome.desktop.screensaver lock-enabled false
    else 
        gsettings set org.gnome.desktop.screensaver lock-enabled true
    fi

    # laptop camera
    if [ "$no_laptop_camera" = true ]; then
        gsettings set org.gnome.desktop.privacy disable-camera true
    else 
        gsettings set org.gnome.desktop.privacy disable-camera false
    fi

    # microphone
    if [ "$no_mic" = true ]; then
        gsettings set org.gnome.desktop.privacy disable-microphone true
    else 
        gsettings set org.gnome.desktop.privacy disable-microphone false
    fi

fi

# ότι και να είναι ή ... γίνεται ... θα την ελέγξω !!!
if [[ ! -z "${no_loc}" || -v no_loc || -z "${no_loc}" ]]; then 
    if [ "$(gsettings get org.gnome.system.location enabled)" == "true" ]; then
        echo -e "\r\n $YEL ΠΡΟΣΟΧΗ $NC: Βρέθηκε η τοποθεσία ενεργοποιημένη ! \n"
        echo -e "\r\n Αν δεν την ενεργοποιήσατε εσείς είναι σημάδι αλλοίωσης του Tails ! \n"
        echo -e "\r\n Την απενεργοποιώ και συνιστώ να ελέγξετε το Tails USB σας ... \n"
        gsettings set org.gnome.system.location enabled false
        zen_no_gtkwarnings --error  --width=370 --height=120 \
        --title='Η ΤΟΠΟΘΕΣΙΑ ΒΡΕΘΗΚΕ ΕΝΕΡΓΗ' \
        --text '<b> \r\n ΠΡΟΣΟΧΗ:   Βρέθηκε η τοποθεσία ενεργοποιημένη !\n \
Αν δεν την ενεργοποιήσατε εσείς είναι σημάδι αλλοίωσης του Tails ! \n \
Την απενεργοποιώ και σας συνιστώ να ελέγξετε το Tails USB σας ...  \n  </b>'
    fi
fi

if [ "$linux_type" == "Tails OS" ]; then
    if [ "$no_file_history" = true ]; then
        gsettings set org.gnome.desktop.privacy remember-recent-files false
    else
        gsettings set org.gnome.desktop.privacy remember-recent-files true
    fi

    if [ "$disable_tracker" = true ]; then
        systemctl --user stop tracker-miner-fs-3.service
        kill `ps -A | grep tracker | awk '{print $1}' `
        systemctl --user mask tracker-miner-fs-3.service
    fi
fi

clear

change_desktop_color(){
    if [ "$dark_desktop" = true ]; then
        gsettings set org.gnome.desktop.background picture-uri-dark ""
    else
        gsettings set org.gnome.desktop.background picture-uri ""
    fi  
    gsettings set org.gnome.desktop.background primary-color "$1"
    gsettings set org.gnome.desktop.background secondary-color "$1"
}

# Δυστυχώς υπάρχουν πολλές διαφορές με όλα τα υπόλοιπα Desktops που ξεπερνάνε τον
# σκοπό αυτού του Zenity Script που δημιουργήθηκε αρχικά για το Tails OS
if [ "$new_desktop_color" = true ]  && [ "$linux_type" == "Tails OS" ]; then
    # Πιστή αντιγραφή απο την βοήθεια του Gnome για το zenity
    # https://help.gnome.org/users/zenity/stable/color-selection.html.en
    echo -e "\r\n Επέλεξε το χρώμα της Επιφάνειας Εργασίας.\n"
    echo -e "\r\n Με $RED Cancel$NC γυρίζει ή δεν αλλάζει το Προκαθορισμένο μπλε χρώμα.\n"
    echo -e "\r\n Το$RED Cancel$NC δεν αλλάζει χρώμα αν χρησιμοποιείτε φωτογραφία στην Επιφάνεια Εργασίας!\n "
COLOR=`zen_no_gtkwarnings --color-selection --title "Επέλεξε το χρώμα της Επιφάνειας Εργασίας" \
--show-palette`

case $? in
    0 )
        echo -e "\r\n Επιλέξατε το $BLE $COLOR $NC χρώμα.\n"
        export -f change_desktop_color
        change_desktop_color "$COLOR"
        if [ "$changed_settings" = true ]; then
            echo "$COLOR" > "$HOME/Persistent/$folder_name/$settings_folder/desktop_color.txt"
        fi
        ;;
    1 )
        echo -e "\r\n Δεν επιλέξατε κάποιο χρώμα και γυρίζω στο προκαθορισμένο \n \
 μόνο αν δεν έχετε κάποια φωτογραφία για την Επιφάνεια Εργασίας σας!"
        # Το προκαθρισμένο ειναι #023c88 and WinXP = #357ec7 !!!
        if [ "$xrisimopoiw_wallpapper" == "false" ]; then
            export -f change_desktop_color
            change_desktop_color "$default_desktop_color"
        fi
        if [ "$changed_settings" = true ]; then
            echo "$default_desktop_color" > "$HOME/Persistent/$folder_name/$settings_folder/desktop_color.txt"
        fi
        ;;
    -1 )
        echo -e "\r\n Κάτι αναπάντεχο προέκυψε...\n"
        ;;
esac
fi

if [ "$linux_type" == "Tails OS" ]; then
    sleep 3
    clear
fi

# Δυστυχώς υπάρχουν πολλές διαφορές με όλα τα υπόλοιπα Desktops που ξεπερνάνε τον
# σκοπό αυτού του Zenity Script που δημιουργήθηκε αρχικά για το Tails OS.
if [ "$adjust_mouse_speed" = true ] && [ "$linux_type" == "Tails OS" ]; then
    # Πιστή αντιγραφή απο την βοήθεια του Gnome για το zenity
    # https://help.gnome.org/users/zenity/stable/scale.html.en
    echo -e "\r\n Επέλεξε την ταχύτητα του ποντικιού / mouse σου.\n"
    echo -e "Εξαιτίας περιορισμού των τιμών από το GUI του script"
    echo -e "οι πραγματικές τιμές εμφανίζονται x10. Δηλαδή 10=1."
    echo -e "\r\n Με $RED Cancel $NC δεν αλλάζει η Προκαθορισμένη ταχύτητα.\n"

    VALUE=`zenity --scale --title="Ταχύτητα Mouse" --text="Επέλεξε την ταχύτητα του \
    ποντικιού.\n\n Εξαιτίας περιορισμού των τιμών από το GUI του script\nοι πραγματικές \
    τιμές εμφανίζονται x10. Δηλαδή 10=1" --value=0 --min-value=-10 --max-value=10 --step=1 `
    #echo $VALUE
    case $? in
             0 ) 
                integer_result=$(bc <<< "$VALUE")
                # echo $integer_result   
                if [ "$integer_result" != "0" ]; then
                    diairetis=$(echo 10 | bc)
                    # echo $diairetis
                    mousespeed=$(echo "scale=1; $integer_result / $diairetis" | bc)
                    # echo $mousespeed 
                    echo -e "\r\n Επιλέχθηκε ${mousespeed} ταχύτητα του ποντικιού. \n"
                    gsettings set org.gnome.desktop.peripherals.mouse speed "${mousespeed}" > /dev/null 2>&1
                    if [ "$changed_settings" = true ]; then
                        echo "${mousespeed}" > "$HOME/Persistent/$folder_name/$settings_folder/mouse_speed.txt"
                    fi
                    sleep 5
                else 
                    echo -e "\r\n Δεν άλλαξε η ταχύτητα του ποντικιού ... ;)"
                    if [ "$changed_settings" = true ]; then
                        echo "0" > "$HOME/Persistent/$folder_name/$settings_folder/mouse_speed.txt"
                    fi    
                fi
                ;;
             1 )
                echo -e "\r\n Δεν επέλεξες καμία αλλαγή στην ταχύτητα του ποντικιού. \n"
                if [ "$changed_settings" = true ]; then
                    echo "0" > "$HOME/Persistent/$folder_name/$settings_folder/mouse_speed.txt"
                fi
                ;;
            -1 )
                echo -e "\r\n Κάποιο πρόβλημα παρουσιάστηκε... Παρακαλώ ενημερώστε με. \n"
                ;;
    esac
fi

if [ "$linux_type" == "Tails OS" ]; then
    sleep 3
    clear
fi


# Δυστυχώς υπάρχουν πολλές διαφορές με όλα τα υπόλοιπα Desktops που ξεπερνάνε τον
# σκοπό αυτού του Zenity Script που δημιουργήθηκε αρχικά για το Tails OS.
if [ "$el_en_langs" = true ] && [ "$linux_type" == "Tails OS" ]; then      
    gsettings set org.gnome.desktop.input-sources sources "[('xkb', 'gr'), ('xkb', 'us')]" > /dev/null 2>&1
fi

change_need_more_langs(){
    if [ ! -f "$HOME/Persistent/$folder_name/$settings_folder/languages.txt" ]; then
        echo "$1" > "$HOME/Persistent/$folder_name/$settings_folder/languages.txt"
    fi
}


# Δυστυχώς υπάρχουν πολλές διαφορές με όλα τα υπόλοιπα Desktops που ξεπερνάνε τον
# σκοπό αυτού του Zenity Script που δημιουργήθηκε αρχικά μόνο για το Tails OS.
if [ "$need_more_langs" = true ] && [ "$linux_type" == "Tails OS" ]; then
    ###  Περισσότερες γλώσσες μπορείτε να βρείτε και να βάλετε με την εντολή
    ###  localectl list-x11-keymap-layouts
    ###  Στον φάκελο /usr/share/X11/xkb/symbols θα βρείτε όλες τις διαθέσιμες.
    ###  Εδώ θα πρέπει να αναφέρω ότι το gr που έχουμε δεν είναι τυχαίο !
    ###  Προέρχεται από τα Γραικανικά που μιλούν στην Νότια Ιταλία μιας και 
    ###  με νόμο του 1999, η Ιταλική βουλή έχει αναγνωρίσει τη Γραικάνικη
    ###  κοινότητα του Σαλέντου και της Καλαβρίοας ως “ελληνική εθνική και ...
    ###  γλωσσική μειονότητα”. Εξ' ου και το... gr ;)
    ###  Υ.Γ. Όσοι ψάχνετε "Μακεδονικά" ή τα Κυπριακά χρησιμοποιήστε τα Ελληνικά.
    ###  Είναι το ίδιο και το αυτό άλλωστε όπως και τα άγγλικά, διαβάστε γιατί...
    ###
    ###  logocracy as phenomenon is a symptom and not a problem of our... epoch.
    ###  ΕΛ. ΜΕΤΑΦΡΑΣΗ τώρα...
    ###  η λογοκρισία ως φαινόμενο είναι ένα σύμπτωμα και όχι ένα πρόβλημα της... 
    ###  εποχής μας!
    ###
    ###  Οι 150.000 ελληνικές λέξεις στις συνολικά 470.000 αγγλικές μιλάνε μόνες 
    ###  τους και πολύ δυνατότερα στους ακόμα σκεπτόμενους ανυθρώπους... ;)
    ###  Στο ερώτημα γιατί έβαλα την Ιαπωνική γλώσσα 3η η απάντηση βρίσκεται στην
    ###  Ιστορία της Μικρασιατικής Καταστροφής του Ελληνισμού της Μικράς Ασίας 
    ###  και του Πόντου όπου μόνο ένας Ιάπωνας πλοίαρχος εμπορικού πλοίου πέταξε
    ###  τα εμπορεύματά του πλοίου του στην θάλασσα για να μαζέψει τους ...
    ###  ΠΡΑΓΜΑΤΙΚΟΥΣ ΠΡΟΣΦΥΓΕΣ που ήταν στο νερό γιατί έφευγαν από εμπόλεμη ζώνη!
    ###  Με αυτά τα δύο πιστεύω ότι καταλάβατε όλοι ότι δεν μάθαμε Ιστορία στο 
    ###  Σχολείο αλλά ιστορικά γεγονότα και ημερομηνίες έτσι όπως ήθελαν αυτοί
    ###  που μας κυβερνάνε εδώ και 2000 χρόνια από έξω και ... τίποτα άλλο!!!
    ###                             ¯\_ (ツ)_/¯
    echo -e "\r\n Επιλέξτε τις Γλώσσες του πληκτρολογίου αας μέσα απο το μενού.\n"
    GLWSSES="$(zenity --width=320 --height=444 \
    --list --title="Επιλογή Γλώσσας" \
    --text="     <b>Διαθέσιμες Γλώσσες πληκτρολογίου.</b>     " \
    --checklist  \
    --multiple \
    --separator="-" \
    --column=" A/A "  \
    --column="Σύμβολο"  \
    --column="Ονομασία Γλώσσας"  \
     "true" "gr" "Ελληνικά "\
     "true" "us" "Αγγλικά "\
     "false" "jp" "Ιαπωνικά" \
     "false" "cn" "Κινεζικά" \
     "false" "in" "Ινδικά" \
     "false" "il" "Ισραηλινά" \
     "false" "ara" "Αραβικά" \
     "false" "ro" "Ρουμανικά" \
     "false" "rs" "Σερβικά" \
     "false" "ru" "Ρωσικά" \
     "false" "pt" "Πορτογαλικά" \
     "false" "kr" "Κορεατικά" \
     "false" "es" "Ισπανικά" \
     "false" "fr" "Γαλλικά" \
     "false" "de" "Γερμανικά" \
     "false" "it" "Ιταλικά")"


    if [ "$GLWSSES" == "" ]; then
        # αρχική λίστα 
        # [('xkb', 'us'), ('ibus', 'libpinyin'), ('ibus', 'mozc-jp'), ('ibus', 'hangul'), ('ibus', 'Unikey'), ('ibus', 'chewing')] 
        echo -e "\r\n Δεν διάλεξες καμία γλώσσα. Προσθέτω τα $BLE Ελληνικά $NC στις αρχικές.\n"
        gsettings set org.gnome.desktop.input-sources sources "[('xkb', 'gr'), ('xkb', 'us'), ('ibus', 'libpinyin'), ('ibus', 'mozc-jp'), ('ibus', 'hangul'), ('ibus', 'Unikey'), ('ibus', 'chewing')]" > /dev/null 2>&1
        if [ "$changed_settings" = true ]; then
            echo "[('xkb', 'gr'), ('xkb', 'us'), ('ibus', 'libpinyin'), ('ibus', 'mozc-jp'), ('ibus', 'hangul'), ('ibus', 'Unikey'), ('ibus', 'chewing')]" > "$HOME/Persistent/$folder_name/$settings_folder/languages.txt"
        fi
    else
        readarray -d '-' -t myarray <<< "$GLWSSES"
        prettyarray=$(awk '{ printf "%s", $0 }' <<< "${myarray[@]}")
        finalarray=()
        for k in "${myarray[@]}"; do 
            g="('xkb', '$k')"
            if [ "$k"  != "${myarray[@]:(-1)}" ]; then
                finalarray+="$g, "
            else
                finalarray+="$g "
            fi
        done
        # αφαιρεί το τελευταίο κενό που βάζει το zenity στο $k με αποτέλεσμα να
        # μην φέρνει την τελευταία γλώσσα ...
        finalarray=$(awk '{ printf "%s", $0 }' <<< "${finalarray}")
        echo -e "\r\n Όλα τα σύμβολα των γλωσσών που διάλεξες είναι :$BLE $prettyarray $NC\n"
        echo -e "\r\n Ενεργοποιώ στο πληκτρολόγιο τις γλώσσες που διάλεξες.\n"
        gsettings set org.gnome.desktop.input-sources sources "[${finalarray}]" > /dev/null 2>&1
        if [ "$changed_settings" = true ]; then
            echo "[${finalarray}]" > "$HOME/Persistent/$folder_name/$settings_folder/languages.txt"
        fi
    fi
fi

# Δυστυχώς υπάρχουν πολλές διαφορές με όλα τα υπόλοιπα Desktops που ξεπερνάνε τον
# σκοπό αυτού του Zenity Script που δημιουργήθηκε αρχικά για το Tails OS.
if [ "$new_key_bind" = true ] && [ "$linux_type" == "Tails OS" ]; then
   # χάνει το focus στο TOR BROWSWER λόγω του enter = Return ...  
   #gsettings set org.gnome.desktop.wm.keybindings switch-input-source "['<Shift><Control>Return']"
   #gsettings set org.gnome.desktop.wm.keybindings switch-input-source-backward "['<Control>Return']"
   gsettings set org.gnome.desktop.wm.keybindings switch-input-source "['<Control>space']" > /dev/null 2>&1
   #gsettings set org.gnome.desktop.wm.keybindings switch-input-source-backward "['<Shift><Control>Right']" > /dev/null 2>&1  
fi


if [ "$linux_type" == "Tails OS" ]; then
    # usb protection 
    sleep 3
    clear
fi

check_ufw_status(){
    local ufw_status="disabled"
    if [[ "$(sudo -S <<< "${adminpassword}"  ufw status | grep Status 2> /dev/null )" == "Status: active"  ]]; then
        local ufw_status="enabled"
    fi
    echo "$ufw_status"
}


try_hard_enable_ufw(){

    # echo "try"
    sudo -S <<< "${adminpassword}"   ufw --dry-run enable 2>/dev/null
    sleep 2
    sudo -S <<< "${adminpassword}"   ufw enable 2>/dev/null
    sleep 2
    sudo -S <<< "${adminpassword}"   ufw --force enable 2>/dev/null
    sleep 2
    #sudo -S <<< "${adminpassword}"   ufw --force reload 2>/dev/null
    if  [[ "$?" == "0" ]]; then
        #echo "Η έναρξη του UFW πέτυχε !"
        return 0
    else
        #echo "reset"
        sudo -S <<< "${adminpassword}"  ufw --dry-run reset 2>/dev/null
        sleep 2
        sudo -S <<< "${adminpassword}"  ufw reset 2>/dev/null
        sleep 2
        sudo -S <<< "${adminpassword}"  ufw --force reset 2>/dev/null
        sleep 2
        sudo -S <<< "${adminpassword}"  ufw --dry-run disable  2>/dev/null
        sleep 2
        sudo -S <<< "${adminpassword}"  ufw disable  2>/dev/null
        sleep 2
        return 1
    fi   
}

if [ "$check_ufw" = true ] && [ "$linux_type" == "Tails OS" ]; then
    if [ ! -f  /usr/sbin/ufw ]; then
        # αναγκαστικά πρέπει να γίνει το check_tails_ufw_role false για να μην τρέξει
        check_tails_ufw_role=false
        echo -e "\r\n Το $YEL UFW $NC δεν υπάρχει πια...\n"
        sleep 1
        echo -e "\r Αν θέλεις την μέγιστη προστασία πρέπει...\n"
        sleep 1
        echo -e "\r Αφού μπεις στο TOR το πρώτο που πρέπει να κάνεις είναι... \n"
        sleep 1
        echo -e "\r Να το εγκαταστήσεις είτε με την 2η εντολή ή με την [sudo apt install ufw]...\n"
        sleep 1
        echo -e "\r Και μετά να ξανατρέξεις την 1η εντολή για να εφαρμοστούν οι επιπλέον κανόνες... \n"
        sleep 1
        read -p "Για να συνεχίσει πάτα το κουμπί y, αλλιώς με οποιοδήποτε key + enter κλείνει!" CONDITION;
        if ! [[ $CONDITION == "y" || $CONDITION == "Y" || $CONDITION == "Υ" || $CONDITION == "υ" ]]; then
            echo -e "\r\nΔεν πατήθηκε το κουμπί Υ/y/Υ/υ ... Βγαίνω ... :) "
            sleep 3
            exit
         fi
     else
        check_tails_ufw_role=true
        ####
        # ενεργοποίηση του ufw με τις ελάχιστες ρυθμίσεις 
        # 1> /dev/null 2> /dev/null 2>&1  >&2 /dev/null 2> /dev/null
        ### ΟΤΙ ΔΕΝ ΣΑΣ ΑΡΕΣΕΙ / ΔΗΜΙΟΥΡΓΕΙ ΠΡΟΒΛΗΜΑΤΑ ΤΟ ΕΞΑΙΡΕΙΤΕ ME # 
        # οι 2 πρώτες εντολές είναι απαραίτητες για να τρέχει το UFW 
        echo -e "\r\n Ενεργοποιώ το${BLE} UFW Firewall${NC} ως πρόσθετη προστασία στο${BLE} TOR${NC} δίκτυο \n"
        #sudo -S <<< "${adminpassword}"  ufw --dry-run enable 2>/dev/null
        #sleep 4
        echo -e "\r\n Αν αποτύχει η ενεργοποίηση του UFW με Ctrl + C σταματάει να προσπαθεί"
        check_ufw_status
        if [[ "$(check_ufw_status)" == "disabled" ]]; then 
            try_hard_enable_ufw
        fi
        until [[ "$(check_ufw_status)" == "enabled" ]]; do
            # echo "Η έναρξη του UFW απέτυχε !"
            sleep 5
            try_hard_enable_ufw
            trap "echo 'Σταματάω να προσπαθώ και κλείνω το script σε 3 δευτερόλεπτα'; sleep 3; exit" SIGINT
        done
        if [ "$linux_type" == "Tails OS" ]; then  
            sleep 2
            sudo -S <<< "${adminpassword}"  ufw --force reload 2>/dev/null
            sleep 4
            sudo -S <<< "${adminpassword}"  systemctl restart ufw 2>/dev/null 
            sleep 2
        fi
        clear
        if [[ "$(sudo -S <<< "${adminpassword}"  ufw status | grep Status )" == "Status: active"  ]]; then
            sudo -S <<< "${adminpassword}"  ufw status verbose 2>/dev/null
            echo -e "\r\n Το $BLE UFW $NC ενεργοποιήθηκε & ξεκίνησε !!! ;)"
        else
            echo -e "\r\n Το $BLE UFW $NC Δεν ενεργοποιήθηκε ! (: "
        fi
        sleep 2
     fi
fi

##
oi_UFW_roloi_mou(){
    if [ "$1" == "ufw" ]; then 
        ### όλα τα udp in χρησιμοποιούνται για ... remote control !!! 
        ### GOODBYE SNEAKY UDP ;)
        sudo -S <<< "${adminpassword}"  ufw prepend deny from any proto udp 2>/dev/null  
        sleep 1
        ## The port on which Tor will listen for local connections from Tor
        ## controller applications, as documented in control-spec.txt.
        #ControlPort 9051
        ## If you enable the controlport, be sure to enable one of these
        ## authentication methods, to prevent attackers from accessing it.
        #HashedControlPassword 16:872860B76453A77D60CA2BB8C1A7042072093276A3D701AD684053EC4C
        #CookieAuthentication 1
        ## στο Tails είναι η 9052 . Ετσι την κλείνουμε
        sudo -S <<< "${adminpassword}"  ufw prepend deny from any to 127.0.0.1 port 9052 2>/dev/null
        ## ss -tuwnlp λέει ... 2 ports "ακούν" εκτός της 9052 που είναι για το Tor. 
        ## BB.. η 631 είναι για print server και η 951 gia ups server. Αν δεν 
        ## έχετε ups/printer δεν σας χρειάζονται! 
        sudo -S <<< "${adminpassword}"  ufw prepend deny proto tcp to any port 631 2>/dev/null 
        sleep 1
        sudo -S <<< "${adminpassword}"  ufw prepend deny proto tcp to any port 951 2>/dev/null
        sleep 1
        ## Το 224.0.0.0/16 ip range χρειάζεται απο τις εφαρμογές για τις υπηρεσίες
        ## MULTICASTING ... Δηλαδή ενας server "εκπέμπει" σε πολλούς ταυτόχρονα
        ## χωρίς πραγματικά να στέλνει σε ολους τα δεδομένα του παρά μόνο μια φόρά
        ## Θέλετε να κάνετε MULTICASTING ΕΚΠΟΜΠΕΣ ? Ρητορικό το ερώτημα ...
        sudo -S <<< "${adminpassword}"  ufw prepend deny out to "224.0.0.0/16" 2>/dev/null
        sleep 1
        ## μπορείτε να χρησιμοποιήσετε όποια άλλη port στο ssh. Η εντολή εννοεί 
        ## την 22 πόρτα αλλά αν σας επιτεθεί για να σας χακάρει κανένα ... bot 
        ## τουλάχιστον να αποφύγετε την default SSH port.
        sudo -S <<< "${adminpassword}"  ufw prepend deny out ssh 2>/dev/null 
        sleep 1
        ### UDP 1900 OUT IS A DANGEROUS PORT !!! 
        # Στο x0rz's blog article μπορείτε να διαβάστε σχετικά με την 1900 udp port των router.
        sudo -S <<< "${adminpassword}"  ufw prepend deny out from any to any port 1900 proto udp 2>/dev/null 
        sleep 1
        ### no ssh / ftp / nfs / http servers
        ### ssh server on port 22 on tails usb ? lol
        local services=( "ssh" "nfs" "ftp" "http" "https")
        for i in "${services[@]}"; do
            sudo -S <<< "${adminpassword}"  ufw prepend deny "$i" 2>/dev/null
            sleep 1
        done
        clear
        sudo -S <<< "${adminpassword}"  ufw status verbose 2>/dev/null  
    elif [ "$1" == "ufw delete" ]; then 
        ## όλα τα udp in χρησιμοποιούνται για ... remote control !!! 
        ## GOODBYE SNEAKY UDP ;)
        sudo -S <<< "${adminpassword}"  ufw delete deny from any proto udp 2>/dev/null  
        sleep 1
        ## The port on which Tor will listen for local connections from Tor
        ## controller applications, as documented in control-spec.txt.
        #ControlPort 9051
        ## If you enable the controlport, be sure to enable one of these
        ## authentication methods, to prevent attackers from accessing it.
        #HashedControlPassword 16:872860B76453A77D60CA2BB8C1A7042072093276A3D701AD684053EC4C
        #CookieAuthentication 1
        ## στο Tails είναι η 9052.
        sudo -S <<< "${adminpassword}"  ufw prepend deny from any to 127.0.0.1 port 9052 2>/dev/null
        ## ss -tuwnlp λέει ... 2 ports "ακούν"  εκτός της 9052 που είναι για το Tor. BB ...
        ## η 631 είναι για print server και η 951 gia ups server. Αν δεν έχετε 
        ## ups/printer δεν χρειάζονται! 
        sudo -S <<< "${adminpassword}"  ufw delete deny proto tcp to any port 631 2>/dev/null 
        sleep 1
        sudo -S <<< "${adminpassword}"  ufw delete deny proto tcp to any port 951 2>/dev/null
        sleep 1
        ## Το 224.0.0.0/16 ip range χρειάζεται απο τις εφαρμογές για τις υπηρεσίες
        ## MULTICASTING ... Δηλαδή ενας server "εκπέμπει" σε πολλούς ταυτόχρονα
        ## χωρίς πραγματικά να στέλνει σε ολους τα δεδομένα του παρά μόνο μια φόρά
        ## Θέλετε να κάνετε MULTICASTING ΕΚΠΟΜΠΕΣ ? Ρητορικό το ερώτημα ...
        sudo -S <<< "${adminpassword}"  ufw delete deny out to "224.0.0.0/16" 2>/dev/null
        sleep 1
        ## μπορείτε να χρησιμοποιήσετε όποια άλλη port στο ssh. Η εντολή ssh εννοεί 
        ## την 22 αλλά την κλείνω στο client για την περιπτωση που σας επιτεθεί 
        ## για να σας χακάρει κανένα bot και να αποφύγετε την default SSH port
        ## για την outgoing κίνηση. Βάλτε ## αν δεν σας χρειάζεται ούτε ως πελάτης
        sudo -S <<< "${adminpassword}"  ufw delete deny out ssh 2>/dev/null 
        sleep 1
        ### UDP 1900 OUT IS A DANGEROUS PORT !!! 
        # Στο x0rz's blog article μπορείτε να διαβάστε σχετικά με την 1900 udp port των router.
        sudo -S <<< "${adminpassword}"  ufw delete deny out from any to any port 1900 proto udp 2>/dev/null 
        sleep 1
        ### ssh / ftp / nfs / http servers
        ### ssh server on port 22 on tails usb ? lol το αφήνω για να το αλλάξετε εσείς
        local no_services=( "ssh" "nfs" "ftp" "http" "https")
        for i in "${no_services[@]}"; do
            sudo -S <<< "${adminpassword}"  ufw delete deny "$i" 2>/dev/null
            sleep 1
        done
        clear
        sudo -S <<< "${adminpassword}"  ufw status verbose 2>/dev/null 
    else 
        echo -e "something stopped working on script${BLE} UFW${NC} rules... check the ufw commands"
        sudo -S <<< "${adminpassword}"  ufw status verbose 2>/dev/null 
    fi

}

### protect control port 9052
protect_control_port(){
    if [ "$(grep -i 'CookieAuthentication 1' /etc/tor/torrc)" == "" ]; then
        sudo -S <<< "${adminpassword}"  sed -i -e 's/ControlPort 127.0.0.1:9052/ControlPort 127.0.0.1:9052\nCookieAuthentication 1/g' /etc/tor/torrc 2>/dev/null
    fi
}


if [ "$check_tails_ufw_role" == "true" ] && [ "$check_ufw" == "true" ] && [ "$linux_type" == "Tails OS" ]; then

    ### Στο τέλος επιλέγουμε αν το usb stick μας θα μπορεί να μοιράζεται ή όχι
    # αρχεία για να επιτευξουμε την μέγιστη προστασία ανά περίσταση χρήσης
    client_server_epilogi=$(zen_no_gtkwarnings --title "Επιλογή ρόλου του Tails USB και ρύθμιση UFW Firewall" --width=400 --height=120 \
        --forms \
        --text '<span foreground="#ef172f">  Επιλέξτε αν θα λειτουργήσει το Tails USB ως Client δηλαδή Πελάτης ή \
ως Server δηλαδή ως Εξυπηρετητής για να μοιράσετε αρχεία και υπηρεσίες</span>' \
        --add-combo 'Επιλογή ρόλου του Tails και ρύθμιση UFW : ' \
        --combo-values " Client - Πελάτης | Server - Εξυπηρετητής | Reset - Επαναφορά UFW "  
        )
    
    
        case $? in
             0 )
                if [[ "$?" == "0" && "$client_server_epilogi" != " " ]]; then
                    clear
                    epilogi_rolou="$( cut -d '|' -f1 <<< $client_server_epilogi )"
                    echo -e "\r\n Επιλέξατε τον${BLE} $epilogi_rolou ${NC}ρόλο για το${BLE} Tails USB${NC} !"
                    sleep 3
                else 
                    clear
                    echo -e "\r\n Δεν επιλέξατε κάποιον ρόλο και θα ενεργοποιήσω τον${BLE} Client - Πελάτης${NC} ρόλο !"
                    $epilogi_rolou=" Client - Πελάτης "
                    sleep 3
                fi
                if [ "$epilogi_rolou" == " Client - Πελάτης " ]; then
                    # αυτούς τους ρόλους θεωρώ οτι χρειάζονται.Αν δεν σας ικανοποιούν μπορείτε να
                    # τους αλλάξετε ή αφαιρέσετε τελείως ! Π.χ. υπάρχει ένα θέμα με το localhost 
                    # που ακούει το TOR socks και το UFW αλλά δεν θεωρώ οτι επηρεάζει το Tails.
                    # Αν πάλι θέλετε να είστε σίγουροι αντικαταστήστε τις εντολές με τις iptables.
                    # Π.χ η πόρτα 631 κλείνει τελείως και στην localhost με την εξής εντολή
                    # sudo -S <<< "${adminpassword}"  -- iptables  -I INPUT -p tcp -i lo --dport 631 -j DROP
                    clear
                    export -f oi_UFW_roloi_mou
                    oi_UFW_roloi_mou "ufw"
                    clear
                    sudo -S <<< "${adminpassword}"  ufw status verbose 2>/dev/null  
                    echo -e "\r\n Το $BLE UFW $NC έκλεισε όλα τα${YEL} UDP${NC} ${BLE}in${NC} \
και τα ${BLE}ftp${NC}, ${BLE}http${NC}, ${BLE}ssh${NC}, ${BLE}UPNP${NC} Server ;)"
                    sleep 10
                    clear
                    echo -e "\r\nAllowOutboundLocalhost${YEL} 0${NC} στο${GRE} torsocks.conf${NC} !\n"
                    #sudo -S <<< "${adminpassword}"  sed -i -e 's/AllowOutboundLocalhost 2/AllowOutboundLocalhost 1/g' /etc/tor/torsocks.conf 2>/dev/null & sleep 3
                    sudo -S <<< "${adminpassword}"  sed -i 's/^AllowOutboundLocalhost.*/AllowOutboundLocalhost 0/' /etc/tor/torsocks.conf 2>/dev/null & sleep 3
                    # ControlPort 127.0.0.1:9052 only on Tails
                    if [ "$linux_type" == "Tails OS" ]; then
                        export -f protect_control_port
                        protect_control_port
                    fi
                    clear
                    echo -e "\r\n Κάνω Restart το $BLE Tor $NC \n"
                    sudo -S <<< "${adminpassword}"  systemctl restart tor.service 2>/dev/null & 
                    export -f anamoni_ektelesis
                    anamoni_ektelesis "3"
                elif [ "$epilogi_rolou" == " Server - Εξυπηρετητής " ]; then
                    # είναι οι ίδιοι ακριβώς ρόλοι με του  client μόνο που τους διαγράφουμε !
                    clear
                    export -f oi_UFW_roloi_mou
                    oi_UFW_roloi_mou "ufw delete"
                    clear
                    sudo -S <<< "${adminpassword}"  ufw status verbose 2>/dev/null  
                    echo -e "\r\n Το $BLE UFW $NC άνοιξε όλες τις${YEL} UDP${NC} \
${BLE}in${NC} και τα ${BLE}ftp${NC}, ${BLE}http${NC}, ${BLE}ssh${NC}, ${BLE}UPNP${NC} Server ports !!!"
                    sleep 10
                    clear
                    echo -e "\r\nAllowOutboundLocalhost${YEL} 2${NC} στο${BLE} torsocks.conf${NC} !\n"
                    #sudo -S <<< "${adminpassword}"  sed -i -e 's/AllowOutboundLocalhost 1/AllowOutboundLocalhost 2/g' /etc/tor/torsocks.conf 2>/dev/null & sleep 3
                    sudo -S <<< "${adminpassword}"  sed -i -e 's/^AllowOutboundLocalhost.*/AllowOutboundLocalhost 2/' /etc/tor/torsocks.conf 2>/dev/null & sleep 3
                    # ControlPort 127.0.0.1:9052 only on Tails
                    if [ "$linux_type" == "Tails OS" ]; then
                        export -f protect_control_port
                        protect_control_port
                    fi
                    clear
                    echo -e "\r\n Κάνω Restart το $BLE Tor $NC \n"
                    sudo -S <<< "${adminpassword}"  systemctl restart tor.service 2>/dev/null & 
                    export -f anamoni_ektelesis
                    anamoni_ektelesis "3"
                    #sleep 3
                elif [ "$epilogi_rolou" == " Reset - Επαναφορά UFW " ]; then
                    clear
                    echo -e "\r\n Επαναφέρω το $BLE UFW $NC στις αρχικές του ρυθμίσεις !\n"
                    sudo -S <<< "${adminpassword}"  ufw --force reset 2>/dev/null
                    sleep 4
                    sudo -S <<< "${adminpassword}"  ufw --dry-run enable 2>/dev/null
                    sleep 4
                    sudo -S <<< "${adminpassword}"  ufw --force reload 2>/dev/null
                    sleep 4
                    sudo -S <<< "${adminpassword}"  -- systemctl restart ufw 2>/dev/null 
                    sleep 2
                    sudo -S <<< "${adminpassword}"  ufw status verbose 2>/dev/null
                    sleep 2
                else 
                    echo -e "\r\n Δεν αλλάζω τίποτα ούτε στο $BLE UFW $NC ούτε στο${GRE} torsocks.conf${NC} !\n"
                    sleep 3
                fi
                ;;
             1 )
                clear
                echo -e "\r\n Δεν αλλάζω τίποτα ούτε στο $BLE UFW $NC ούτε στο${GRE} torsocks.conf${NC} !\n"
                # ControlPort 127.0.0.1:9052 only on Tails αλλά μιας και είναι listen ...
                if [ "$linux_type" == "Tails OS" ]; then
                    export -f protect_control_port
                    protect_control_port
                fi
                sleep 3
                ;;
            -1 )
                clear
                echo -e "\r\n Κάποιο πρόβλημα παρουσιάστηκε... Παρακαλώ ελέξτε πρώτα την ακεραιότητα των αρχείων πριν με ενημερώσετε. \n"
                sleep 3
                ;;
        esac

fi

browser_reminder(){
    if [ ! -f "$HOME/Persistent/NoTails..Tails-Files/browser_reminder.txt" ]; then

        echo -e "\r\n Η σημασία των filters του $BLE UBLOCK Addon $NC είναι μεγάλη. \n"
        echo -e "\r\n Περισσότερα θα μάθετε στο κείμενο του παραθύρου ! \n"
        zen_no_gtkwarnings --question \
        --title="Ενημέρωση για τα Geolocation Trackers και την σημασία του UBLOCK Addon " \
        --width=570 --height=336 \
        --text "    Μην ξεχνάτε να ενημερώνετε καθημερινά τα filters του UBLOCK Addon ! \n
    Δυστυχώς οι Geolocation Javascript Trackers μπορούν να παρακάμψουν... \n
    Την οποιαδήποτε απόκρυψη τοποθεσίας προσφέρει το Tor &amp; ο Browser του ! \n" \
        --ellipsize \
        --ok-label="Θέλω να ξαναδώ το μήνυμα!" \
        --cancel-label="Δεν Θέλω να ξαναδώ το μήνυμα!"

        case $? in
            0 )

                echo -e "\r\nΟ Χρήστης κατάλαβε αλλά θέλει να ξαναδεί το μήνυμα για το UBLOCK Addon.\n"
                sleep 3   
                ;;
            1 )
                echo -e "\r\nΟ Χρήστης κατάλαβε τι πρέπει να κάνει καθημερινά με το UBLOCK Addon στις $(date)\n
                και δεν θέλει να ξαναδεί το μήνυμα!\n" > $HOME/Persistent/NoTails..Tails-Files/browser_reminder.txt

                sleep 3
                ;;
            -1 )
                echo -e "\r\nΚάτι αναπάντεχο προέκυψε...\n"
                sleep 3
                ;;
        esac
    fi
}

# έχετε δεν έχετε εγκατστήσει το Tor και τον Tor Browser δεν επηρεάζει κάτι η
# εκτέλεση της ακόλουθης μεταβλητής
if [ "$enable_ss_monitoring_and_tor" = true ]; then
    clear
    browser_reminder
    clear
    # Η διεύθυνση που ανοίγει ειναι το wiki σε onion domain και είναι εκτός από
    # πηγή πληροφοριών ένας εύκολος τρόπος να ελέγξουμε αν συνδεθήκαμε σωστά στο TOR.
    if [ "$linux_type" == "Tails OS" ]; then 
        watch -n 1 'ss -tuwan | grep -E "ESTAB|State" | grep -v "127.0.0.1" | grep -v "10.200.1.1"' & 
        gnome-system-monitor > /dev/null 2>&1 & 
        tor-browser http://zqktlwiuavvvqqt4ybvgvi7tyo4hjl5xgfuvpdf6otjiycgwqbym2qad.onion/wiki/index.php/Main_Page > /dev/null 2>&1 &
        wait
    else
        ourtorbrowser="$(detect_tor_browser_command_on_desktop)"
        watch -n 1 'ss -tuwan | grep -E "ESTAB|State" | grep -v "127.0.0.1" ' & 
        $ourtorbrowser http://zqktlwiuavvvqqt4ybvgvi7tyo4hjl5xgfuvpdf6otjiycgwqbym2qad.onion/wiki/index.php/Main_Page > /dev/null 2>&1  &
        wait
    fi
fi
