-
-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
153 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,153 @@ | ||
#!/usr/bin/bash | ||
# Author: zenobit | ||
# Description: Uses gum to provide a simple VMs runner for quickemu and quickget | ||
# License MIT | ||
|
||
_define_variables() { | ||
progname="${progname:="${0##*/}"}" | ||
version='0.1' | ||
vms=(*.conf) | ||
color=$(( RANDOM % 255 + 1 )) | ||
#export BORDER="rounded" | ||
export BORDERS_FOREGROUND="$color" | ||
export GUM_FILTER_INDICATOR_FOREGROUND="$color" | ||
export GUM_CHOOSE_CURSOR_FOREGROUND="$color" | ||
export GUM_CHOOSE_SELECTED_FOREGROUND="$color" | ||
export GUM_FILTER_SELECTED_PREFIX_FOREGROUND="$color" | ||
export GUM_FILTER_SELECTED_PREFIX_BORDER_FOREGROUND="$color" | ||
export GUM_FILTER_MATCH_FOREGROUND="$color" | ||
export GUM_FILTER_PROMPT_FOREGROUND="$color" | ||
|
||
if ! command -v quickemu >/dev/null 2>&1; then | ||
echo 'You are missing quickemu!' | ||
fi | ||
QUICKGET=$(command -v quickget) | ||
if ! command -v gum >/dev/null 2>&1; then | ||
echo 'You are missing gum! Exiting...' && exit 1 | ||
fi | ||
} | ||
|
||
_generate_supported(){ | ||
echo "Extracting OS Editions and Releases..." | ||
rm -rf /tmp/distros | ||
mkdir -p /tmp/distros | ||
"$QUICKGET" | awk 'NR==2,/zorin/' | cut -d':' -f2 | grep -o '[^ ]*' > /tmp/supported | ||
while read -r get_name; do | ||
supported=$($QUICKGET $get_name | sed 1d) | ||
echo ${get_name} | ||
echo "$supported" | ||
echo "$supported" > "/tmp/distros/${get_name}" | ||
done < /tmp/supported | ||
} | ||
|
||
_if_needed() { | ||
if [ ! -f /tmp/supported ]; then | ||
_generate_supported | ||
fi | ||
} | ||
|
||
show_vms() { | ||
if [ ${#vms[@]} -eq 0 ]; then | ||
echo 'No VMs found.' | ||
else | ||
echo "${vms[@]%.*}" | tr " " "\n" | ||
fi | ||
} | ||
|
||
show_headers() { | ||
distro=$(shuf -n 1 /tmp/supported) | ||
homepage=$("$QUICKGET" -h "${distro}") | ||
|
||
header_logo=$(gum style --padding "0 1" --border=rounded --border-foreground $color " Simple VMs runner | ||
▄▄▄▄ ▄▄▄ ▄ ▄ ▄ ▄ | ||
█ █ █ █ █ █ █▄ █ | ||
█ █ █▄▀ █ █ █ ▀▄█ | ||
█▄▀▄ █ ▀▄ █▄▄█ █ █ | ||
v$version▀ for quickemu") | ||
|
||
tip_header=$(gum style --bold "Tip: ") | ||
tip_distro=$(gum style $distro) | ||
tip_temp=$(gum join --align top "$tip_header" "$tip_distro") | ||
tip_homepage=$(gum style $homepage) | ||
tip=$(gum join --vertical --align top "$tip_temp" "$tip_homepage") | ||
tip_border=$(gum style --padding "0 1" --border=rounded --border-foreground $color "$tip") | ||
|
||
vms_header=$(gum style --align center --bold "virtual machines:" && gum style $(echo "${vms[@]%.*}" | tr " " "\n")) | ||
vms_border=$(gum style --padding "0 1" --border=rounded --border-foreground $color "$vms_header") | ||
|
||
gum join --vertical --align top "$header_logo" "$tip_border" "$vms_border" | ||
} | ||
|
||
gum_choose_os() { | ||
os=$(gum filter < /tmp/supported) | ||
choices=$(cat "/tmp/distros/$os") | ||
} | ||
|
||
gum_choose_release() { | ||
release=$(echo "$choices" | grep 'Releases:' | cut -d':' -f2 | grep -o '[^ ]*' | gum filter --sort) | ||
} | ||
|
||
gum_choose_edition() { | ||
edition=$(echo "$choices" | grep 'Editions:' | cut -d':' -f2 | grep -o '[^ ]*' | gum filter --sort) | ||
} | ||
|
||
gum_choose_VM() { | ||
if ls | grep ".conf" ; then | ||
chosen=$(ls -1 | grep ".conf" | rev | cut -d'.' -f2- | rev | gum filter) | ||
else | ||
echo "No VMs to run." | ||
fi | ||
#chosen=$(printf '%s\n' "${vms[@]%.conf}" | gum filter --height "$("${vms[@]%.conf}" | wc -l)" --header='Choose VM to run') | ||
} | ||
|
||
create_VM() { | ||
gum_choose_os | ||
if [ -z "$os" ]; then exit 100 | ||
elif [ "$(echo "$choices" | wc -l)" = 1 ]; then | ||
clear | ||
gum_choose_release | ||
clear | ||
"$QUICKGET $os $release" | ||
else | ||
clear | ||
gum_choose_release | ||
clear | ||
gum_choose_edition | ||
clear | ||
"$QUICKGET $os $release $edition" | ||
fi | ||
show_headers | ||
} | ||
|
||
run_VM() { | ||
quickemu -vm "$chosen.conf" | ||
} | ||
|
||
open_distro_homepage(){ | ||
gum_choose_os | ||
"$QUICKGET" -o "${os}" >/dev/null 2>&1 & | ||
} | ||
|
||
# MENU | ||
_show_menu() { | ||
while true | ||
do | ||
start=$(echo "create | ||
run | ||
homepage | ||
EXIT $progname" | gum choose --selected run) | ||
case $start in | ||
create ) create_VM;; | ||
run ) gum_choose_VM && run_VM;; | ||
homepage ) open_distro_homepage;; | ||
"EXIT $progname" ) exit 0;; | ||
esac | ||
done | ||
} | ||
|
||
# run | ||
clear | ||
_define_variables | ||
_if_needed | ||
show_headers | ||
_show_menu |