Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add: quickfzf 0.23 #610

Closed
wants to merge 9 commits into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
110 changes: 110 additions & 0 deletions quickfzf
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
#!/usr/bin/bash

# Author: zenobit
# Description: Uses fzf to provide a simple TUI for quickemu and quickget
# License MIT

# Define variables
progname="${progname:="${0##*/}"}"
version="0.23"
#EDITOR="nano"
vms=(*.conf)

# Set traps to catch the signals and exit gracefully
trap "exit" INT
trap "exit" EXIT

# Dependency check: check if fzf is installed and can be executed
if ! command -v fzf >/dev/null 2>&1; then
echo "You are missing fzf..." && exit 255
fi

if ! command -v quickemu >/dev/null 2>&1; then
echo "You are missing quickemu..." && exit 255
fi

QUICKGET=$(command -v quickget) || exit 255

# Display header
printf '%s: v.%s\nquickemu: v.%s\n' "$progname" "$version" "$(quickemu --version)"
if [ -z "$EDITOR" ]
then
echo "editor: Not set! edit configs will not work!"
else
echo "editor: $EDITOR"
fi
printf '\n Workdir: %s\n\n Prepared VMs:\n-------------\n' "$(pwd)"

# Check if there are any VMs
if [ ${#vms[@]} -eq 0 ]; then
echo "No VMs found."
exit 1
fi

# Print the names of the available VMs
printf "%s\n" "${vms[@]%.*}"
echo "-------------"

printf 'Press CTRL+c anytime to kill %s\n\n' "$progname"

# Action prompt
printf " Do you want to create a new VM? (c)
edit VM's config file (e)
or run an existing one? (press anything)\n"
read -rn 1 -s start
case $start in
c ) todo="create";;
e ) todo="edit";;
esac

# If the user chose to create a new VM
if [ "$todo" = "create" ]; then
os=$(quickget | sed 1d | cut -d':' -f2 | grep -o '[^ ]*' | fzf --cycle --header='Choose OS to download')
# If the OS is Windows
if [ "$os" = windows ]; then
answer=$(echo "Default English
Choose other language" | fzf --cycle)
# If the user wants another windows language
if [ "$answer" = "Choose other language" ]; then
wrelease=$(echo "8
10
11" | fzf --cycle)
# get window language list
wlend=$(($(cat $QUICKGET | sed '/Arabic/,$!d' | grep -n '}' | cut -d':' -f1 | head -n 1) - 1))
# get windows language
wlang=$(cat $QUICKGET | sed '/Arabic/,$!d' | head -n $wlend | cut -d'=' -f2 | tail -c +2 | head -c -2 | sed 's/^[ \t]*//' | fzf --cycle --header='Choose Language')
# downloading windows
printf '\n Trying to download Windows %s %s...\n\n' "$wrelease" "$wlang"
quickget "windows" "$wrelease" "$wlang"
fi
fi
# Get the release and edition to download, if necessary
choices=$(quickget "$os" | sed 1d)
if [ "$(echo "$choices" | wc -l)" = 1 ]; then
# get release
release=$(echo "$choices" | grep 'Releases' | cut -d':' -f2 | grep -o '[^ ]*' | fzf --cycle --header='Choose Release')
# downloading
printf '\n Trying to download %s %s...\n\n' "$os" "$release"
quickget "$os" "$release"
else
# get release
release=$(echo "$choices" | grep 'Releases' | cut -d':' -f2 | grep -o '[^ ]*' | fzf --cycle --header='Choose Release')
# get edition
edition=$(echo "$choices" | grep 'Editions' | cut -d':' -f2 | grep -o '[^ ]*' | fzf --cycle --header='Choose Edition')
# downloading
printf '\n Trying to download %s %s %s...\n\n' "$os" "$release" "$edition"
quickget "$os" "$release" "$edition"
fi
elif [ "$todo" = "edit" ]; then
editconfig=$(ls | grep '.conf' | fzf --cycle --header='Choose config to edit')
"$EDITOR" "$editconfig"
fi

# choose VM to run
chosen=$(echo "$(ls *.conf 2>/dev/null | sed 's/\.conf$//')" | fzf --cycle --header='Choose VM to run')

# Run chosen VM
printf '\n Starting %s...\n\n' "$chosen"
quickemu -vm "$chosen.conf"

exit 0