feat: restructure repo

This commit is contained in:
2020-11-08 21:55:05 +01:00
parent 6d45d2f0cd
commit ad4ca67841
23 changed files with 441 additions and 261 deletions

35
helpers/installer.sh Normal file
View File

@ -0,0 +1,35 @@
isInstalled() {
if [ "$(which $1)" != "" ]; then
return 0
fi
return 1
}
installOptional() {
echo "install optional '$*'"
# Check if any of the listed programs are installed
# if not install the first one;
for prog in "$@"; do
if isInstalled $prog; then
echo "$prog is installed"
break
fi
done
install $1
}
install() {
# Check if program is already installed
if isInstalled $1; then
echo " - $1 is already installed"
else
echo " - installing $1 ..."
apt-get install $1 -y >/dev/null
echo " - finished"
fi
}
[[ "${1}" != "--source-only" ]] && install "${@}"

14
helpers/linker.sh Normal file
View File

@ -0,0 +1,14 @@
#!/bin/bash
linkFile() {
#Move old file
if [ -f "$HOME/$1" ]; then
echo " - moving old file to $1_bak"
mv "$HOME/$1" "$HOME/$1_bak"
fi
echo " - linking $1 --> $HOME/$1"
ln -s "$(pwd)/configs/$1" "$HOME/$1"
}
[[ "${1}" != "--source-only" ]] && linkFile "${@}"

108
helpers/multiselect.sh Normal file
View File

@ -0,0 +1,108 @@
#!/bin/bash
# from SO: https://stackoverflow.com/a/54261882/317605 (by https://stackoverflow.com/users/8207842/dols3m)
function multiselect() {
# little helpers for terminal print control and key input
ESC=$(printf "\033")
cursor_blink_on() { printf "$ESC[?25h"; }
cursor_blink_off() { printf "$ESC[?25l"; }
cursor_to() { printf "$ESC[$1;${2:-1}H"; }
print_inactive() { printf "$2 $1 "; }
print_active() { printf "$2 $ESC[7m $1 $ESC[27m"; }
get_cursor_row() {
IFS=';' read -sdR -p $'\E[6n' ROW COL
echo ${ROW#*[}
}
key_input() {
local key
IFS= read -rsn1 key 2>/dev/null >&2
if [[ $key = "" ]]; then echo enter; fi
if [[ $key = $'\x20' ]]; then echo space; fi
if [[ $key = $'\x1b' ]]; then
read -rsn2 key
if [[ $key = [A ]]; then echo up; fi
if [[ $key = [B ]]; then echo down; fi
fi
}
toggle_option() {
local arr_name=$1
eval "local arr=(\"\${${arr_name}[@]}\")"
local option=$2
if [[ ${arr[option]} == true ]]; then
arr[option]=
else
arr[option]=true
fi
eval $arr_name='("${arr[@]}")'
}
local retval=$1
local options
local defaults
IFS=';' read -r -a options <<<"$2"
if [[ -z $3 ]]; then
defaults=()
else
IFS=';' read -r -a defaults <<<"$3"
fi
local selected=()
for ((i = 0; i < ${#options[@]}; i++)); do
selected+=("${defaults[i]:-false}")
printf "\n"
done
# determine current screen position for overwriting the options
local lastrow=$(get_cursor_row)
local startrow=$(($lastrow - ${#options[@]}))
# ensure cursor and input echoing back on upon a ctrl+c during read -s
trap "cursor_blink_on; stty echo; printf '\n'; exit" 2
cursor_blink_off
local active=0
while true; do
# print options by overwriting the last lines
local idx=0
for option in "${options[@]}"; do
local prefix=" [ ]"
if [[ ${selected[idx]} == true ]]; then
prefix=" [x]"
fi
cursor_to $(($startrow + $idx))
if [ $idx -eq $active ]; then
print_active "$option" "$prefix"
else
print_inactive "$option" "$prefix"
fi
((idx++))
done
# user key control
case $(key_input) in
space) toggle_option selected $active ;;
enter) break ;;
up)
((active--))
if [ $active -lt 0 ]; then active=$((${#options[@]} - 1)); fi
;;
down)
((active++))
if [ $active -ge ${#options[@]} ]; then active=0; fi
;;
esac
done
# cursor position back to normal
cursor_to $lastrow
printf "\n"
cursor_blink_on
eval $retval='("${selected[@]}")'
}
[[ "${1}" != "--source-only" ]] && multiselect "${@}"

11
helpers/prompt.sh Normal file
View File

@ -0,0 +1,11 @@
#!/bin/bash
prompt() {
read -p "$1 (y/n)? " choice
case "$choice" in
y | Y) echo "yes" ;;
n | N) echo "no" ;;
*) echo "invalid" ;;
esac
}
[[ "${1}" != "--source-only" ]] && prompt "${@}"

0
helpers/spinner.sh Normal file
View File