initial commit
This commit is contained in:
		
							
								
								
									
										258
									
								
								deck.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										258
									
								
								deck.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,258 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
set -f
 | 
			
		||||
 | 
			
		||||
MainMenu="Install/Tools/Download/Test/Dump"
 | 
			
		||||
 | 
			
		||||
Install="Back/Install_this_script_to_disk/Docker/multilib"
 | 
			
		||||
    Docker="Back/Install_docker/Change_storage_driver"
 | 
			
		||||
        Install_docker() { $dlcmd - -q https://get.docker.com | $rootcmd sh; }
 | 
			
		||||
 | 
			
		||||
Tools="Back/File_browser"
 | 
			
		||||
    File_browser() {
 | 
			
		||||
        MODE="File_browser"
 | 
			
		||||
        FILE_PATH="$FILE_PATH/$1"
 | 
			
		||||
        list=$(ls -ha "$FILE_PATH")
 | 
			
		||||
        logprint "$list"
 | 
			
		||||
        newlist=$(split_ls "$list")
 | 
			
		||||
        newlist=$(split_ls2 "$newlist")
 | 
			
		||||
        logprint "$newlist"
 | 
			
		||||
        drawmenu $newlist
 | 
			
		||||
        
 | 
			
		||||
}
 | 
			
		||||
Download="Back/Utilities/ISOs/Configs/NAS_Browser"
 | 
			
		||||
    Utilities="Back/Proxmox_post_install_script"
 | 
			
		||||
        Proxmox_post_install_script() { $dlcmd - -q deck.sh/p; $rootcmd bash; }
 | 
			
		||||
    NAS_Browser() { curl -k "sftp://$SFTP_HOST:$SFTP_PORT/$SFTP_START/$1" --user "$SFTP_USER:$SFTP_PASS"; }
 | 
			
		||||
#MODE="Nas_Browser"; 
 | 
			
		||||
Test="Back/Network_connectivity"
 | 
			
		||||
    Network_connectivity() { (ping 1.1.1.1 -c3 || (echo "No network access!" && sleep 1.5)) && (ping deck.sh -c3 || (echo "No DNS!" && sleep 1.5)) && echo "Looks good!" && sleep 1; }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
STARTINGMENU=$MainMenu # note: cannot be a child unless it specifies the parent name instead of "Back"
 | 
			
		||||
SFTP_HOST=git.deck.sh
 | 
			
		||||
SFTP_PORT=32850
 | 
			
		||||
SFTP_USER=cole
 | 
			
		||||
SFTP_PASS=
 | 
			
		||||
SFTP_START=/mnt/dalek
 | 
			
		||||
FILE_PATH=$(pwd)
 | 
			
		||||
 | 
			
		||||
SIZE=$(stty size)
 | 
			
		||||
WIDTH=$(printf "$SIZE" | cut -d' ' -f2)
 | 
			
		||||
HEIGHT=$(printf "$SIZE" | cut -d' ' -f1)
 | 
			
		||||
# echo $WIDTH $HEIGHT 
 | 
			
		||||
oldifs=$IFS
 | 
			
		||||
Back="Back" # Internal use, do not change
 | 
			
		||||
MENUSTACK="$STARTINGMENU" # initialize stack
 | 
			
		||||
CURRENTMENU="$STARTINGMENU" # initialize current menu
 | 
			
		||||
MENUSIZE=0
 | 
			
		||||
MODE=""
 | 
			
		||||
logprint() {
 | 
			
		||||
	echo "$@" >> log.txt
 | 
			
		||||
}
 | 
			
		||||
getNth()  { shift "$(( $1 + 1 ))"; printf '%s\n' "$1"; }
 | 
			
		||||
getLast() { getNth "$(( $(length "$@") - 1 ))" "$@"; }
 | 
			
		||||
length()  { echo "$#"; }
 | 
			
		||||
deleteFirst() {
 | 
			
		||||
    shift
 | 
			
		||||
    MENUSTACK=""
 | 
			
		||||
    for menu in $@; do
 | 
			
		||||
        if [[ "$MENUSTACK" = "" ]]; then
 | 
			
		||||
            MENUSTACK="$menu"
 | 
			
		||||
        else
 | 
			
		||||
            MENUSTACK="$MENUSTACK|$menu"
 | 
			
		||||
        fi
 | 
			
		||||
    done
 | 
			
		||||
    logprint "Deleted entry. State: $MENUSTACK"
 | 
			
		||||
}
 | 
			
		||||
addFirst() { MENUSTACK="$1|$MENUSTACK"; }
 | 
			
		||||
 | 
			
		||||
clrline() {
 | 
			
		||||
    printf "\33[2K\r"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
relamove() {
 | 
			
		||||
    # relamove 1 -2 = move right 1 and down 2
 | 
			
		||||
    if [[ "$2" -gt 0 ]]; then 
 | 
			
		||||
        printf "\033["$2"A"
 | 
			
		||||
    elif [[ "$2" -lt 0 ]]; then
 | 
			
		||||
        invert=$(echo $2 | cut -d'-' -f 2)
 | 
			
		||||
        printf "\033["$invert"B"
 | 
			
		||||
    fi
 | 
			
		||||
    if [[ "$1" -gt 0 ]]; then 
 | 
			
		||||
        printf "\033["$1"C"  
 | 
			
		||||
    elif [[ "$1" -lt 0 ]]; then
 | 
			
		||||
        invert=$(echo $1 | cut -d'-' -f 2)
 | 
			
		||||
        printf "\033["$invert"D"
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
menumove() {
 | 
			
		||||
    if [[ "$1" -lt 0 && $(($MENUPOS - $1)) -lt $MENUSIZE ]]; then
 | 
			
		||||
        printf " "
 | 
			
		||||
        relamove -1 $1
 | 
			
		||||
        printf "*"
 | 
			
		||||
        relamove -1 0
 | 
			
		||||
        MENUPOS=$(($MENUPOS - $1))
 | 
			
		||||
    elif [[ "$1" -gt 0 && $(($MENUPOS - $1)) -ge 0 ]]; then
 | 
			
		||||
        printf " "
 | 
			
		||||
        relamove -1 $1
 | 
			
		||||
        printf "*"
 | 
			
		||||
        relamove -1 0
 | 
			
		||||
        MENUPOS=$(($MENUPOS - $1))
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
split() {
 | 
			
		||||
    old_ifs=$IFS
 | 
			
		||||
    IFS=$2
 | 
			
		||||
    set -- $1
 | 
			
		||||
    printf '%s ' "$@"
 | 
			
		||||
    IFS=$old_ifs
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
split_ls() {
 | 
			
		||||
    old_ifs=$IFS
 | 
			
		||||
    IFS=$'\n'
 | 
			
		||||
    set -- $1
 | 
			
		||||
    printf '%s/' "$@"
 | 
			
		||||
    IFS=$old_ifs
 | 
			
		||||
}
 | 
			
		||||
split_ls2() {
 | 
			
		||||
    old_ifs=$IFS
 | 
			
		||||
    IFS=' '
 | 
			
		||||
    set -- $1
 | 
			
		||||
    printf '%s_' "$@"
 | 
			
		||||
    IFS=$old_ifs
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Initial values
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
drawmenu() {
 | 
			
		||||
    # initialize menu only. too expensize to do each time
 | 
			
		||||
    IFS="|"
 | 
			
		||||
    if [[ "$1" = "Back" && "$(length $MENUSTACK)" -gt 1 ]]; then
 | 
			
		||||
        deleteFirst $MENUSTACK 
 | 
			
		||||
    elif [[ $(getNth 0 "$MENUSTACK") != "$1" && "$1" != "Back" && "$MODE" = "" ]]; then
 | 
			
		||||
        addFirst $1
 | 
			
		||||
        logprint "Adding $1"
 | 
			
		||||
        logprint "State: $MENUSTACK"
 | 
			
		||||
    fi
 | 
			
		||||
    if [[ "$MODE" != "" ]]; then
 | 
			
		||||
        CURRENTMENU="$1" # when not using the stack, pull directly from the arg list
 | 
			
		||||
    else
 | 
			
		||||
        CURRENTMENU="$(getNth 0 $MENUSTACK)"
 | 
			
		||||
    fi
 | 
			
		||||
    logprint "Drawing $CURRENTMENU"
 | 
			
		||||
    OLDMENUSIZE=$MENUSIZE    
 | 
			
		||||
    MENUSIZE=0
 | 
			
		||||
    MENUPOS=0
 | 
			
		||||
	relamove -$WIDTH $HEIGHT
 | 
			
		||||
    IFS="/"
 | 
			
		||||
    for line in $CURRENTMENU; do
 | 
			
		||||
        MENUSIZE=$(($MENUSIZE + 1))
 | 
			
		||||
        relamove -$WIDTH -1
 | 
			
		||||
        clrline
 | 
			
		||||
        relamove 5 0
 | 
			
		||||
        IFS=$oldifs
 | 
			
		||||
        split "$line" _ 
 | 
			
		||||
        IFS="/"
 | 
			
		||||
        #printf "$line"
 | 
			
		||||
    done
 | 
			
		||||
    logprint "Old size: $OLDMENUSIZE, New size $MENUSIZE"
 | 
			
		||||
    IFS=$oldifs
 | 
			
		||||
    if [[ "$OLDMENUSIZE" -gt "$MENUSIZE" ]]; then
 | 
			
		||||
        for line in $(seq $(($OLDMENUSIZE - $MENUSIZE))); do
 | 
			
		||||
            relamove 0 -1
 | 
			
		||||
            clrline
 | 
			
		||||
        done
 | 
			
		||||
        relamove 0 $(($OLDMENUSIZE - $MENUSIZE + 1))
 | 
			
		||||
    fi
 | 
			
		||||
    relamove -$WIDTH $MENUSIZE
 | 
			
		||||
    relamove 4 -1
 | 
			
		||||
    printf "*"
 | 
			
		||||
    relamove -1 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
selected() {
 | 
			
		||||
    IFS="/"
 | 
			
		||||
    temp_pos_count=0
 | 
			
		||||
    for line in $CURRENTMENU; do
 | 
			
		||||
        if [[ "$temp_pos_count" = "$MENUPOS" ]]; then
 | 
			
		||||
            IFS=$oldifs
 | 
			
		||||
            logprint "Got: $(eval echo \"\$$line\")"
 | 
			
		||||
            if [[ "$MODE" != "" ]]; then
 | 
			
		||||
                $MODE "$line"
 | 
			
		||||
            elif [[ "$(eval echo \"\$$line\")" = "" ]]; then
 | 
			
		||||
                clear
 | 
			
		||||
                "$line" # execute function
 | 
			
		||||
                sleep 0.5
 | 
			
		||||
                clear
 | 
			
		||||
                IFS="|"
 | 
			
		||||
                deleteFirst $MENUSTACK
 | 
			
		||||
                IFS=$oldifs
 | 
			
		||||
                drawmenu "$CURRENTMENU"
 | 
			
		||||
            else
 | 
			
		||||
    	        drawmenu "$(eval echo \"\$$line\")"
 | 
			
		||||
    	    fi
 | 
			
		||||
    	    break
 | 
			
		||||
    	fi
 | 
			
		||||
        temp_pos_count=$(($temp_pos_count + 1))
 | 
			
		||||
    done
 | 
			
		||||
    IFS=$oldifs
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# check for downloader to use
 | 
			
		||||
if which curl; then
 | 
			
		||||
    dlcmd="curl -fsSL -o"
 | 
			
		||||
elif which wget; then
 | 
			
		||||
    dlcmd="wget -O"
 | 
			
		||||
else
 | 
			
		||||
    dlcmd="echo No downloader found!"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# check for root util
 | 
			
		||||
if [[ "$USER" = "root" ]]; then
 | 
			
		||||
    rootcmd=""
 | 
			
		||||
elif which sudo; then
 | 
			
		||||
    rootcmd="sudo"
 | 
			
		||||
elif which doas; then
 | 
			
		||||
    rootcmd="doas"
 | 
			
		||||
else
 | 
			
		||||
    dlcmd="echo No root access possible!"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Startup: clear screen and load main menu
 | 
			
		||||
clear
 | 
			
		||||
drawmenu "$STARTINGMENU"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# input loop
 | 
			
		||||
while read -rsn1 ui; do
 | 
			
		||||
    case "$ui" in
 | 
			
		||||
    $'\x1b')    # Handle ESC sequence.
 | 
			
		||||
        # Flush read. We account for sequences for Fx keys as
 | 
			
		||||
        # well. 6 should suffice far more then enough.
 | 
			
		||||
        read -rsn1 -t 0.01 tmp
 | 
			
		||||
        if [[ "$tmp" == "[" ]]; then
 | 
			
		||||
            read -rsn1 -t 0.01 tmp
 | 
			
		||||
            case "$tmp" in
 | 
			
		||||
            "A") menumove 1;; # up
 | 
			
		||||
            "B") menumove -1;; # down
 | 
			
		||||
            "C") selected;; # right
 | 
			
		||||
            "D") drawmenu "Back" ;; # left
 | 
			
		||||
            esac
 | 
			
		||||
        fi
 | 
			
		||||
        # Flush "stdin"
 | 
			
		||||
        read -rsn5 -t 0.01
 | 
			
		||||
        ;;
 | 
			
		||||
    # Other one byte (char) cases. Here only quit.
 | 
			
		||||
    q) break;;
 | 
			
		||||
    "") selected 
 | 
			
		||||
    esac
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
clear
 | 
			
		||||
		Reference in New Issue
	
	Block a user