#!/bin/bash export LC_ALL=C progname="${progname:="${0##*/}"}" version="0.4" #GTK_THEME="alt-dialog" DH_CONFIG_DIR="$HOME/.config/distrohopper" DH_CONFIG="$DH_CONFIG_DIR/distrohopper.conf" DH_ICON_DIR="/usr/share/icons/distrohopper" TERMINAL=sakura replace='"!"' export "DH_CONFIG_DIR" "DH_CONFIG" "DH_ICON_DIR" "TERMINAL" "replace" source "$DH_CONFIG" cd "$VMS_DIR" || exit # Set traps to catch the signals and exit gracefully trap "exit" INT trap "exit" EXIT # dependencies checks if ! command -v yad >/dev/null 2>&1; then echo "You are missing yad..." >&2 exit 1 fi # run TUI instead if [ "$1" = "-t" ] ; then printf '%s: v.%s\nquickemu: v.%s\n\n VMs dir: %s\n\n' "$progname" "$version" "$(quickemu --version)" "$(pwd)" vms=(*.conf) # 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 printf ' Prepared VMs:\n-------------\n\n' # 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 "-------------" # Action prompt printf " Do you want to create a new VM? (c) or run an existing one? (press anything)\n" read -rn 1 -s start case $start in c ) todo="create" ;; 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 or CTRL-c or ESC to quit') # 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 or CTRL-c or ESC to quit') # 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 or CTRL-c or ESC to quit') # 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 or CTRL-c or ESC to quit') # get edition edition=$(echo "$choices" | grep 'Editions' | cut -d':' -f2 | grep -o '[^ ]*' | fzf --cycle --header='Choose Edition or CTRL-c or ESC to quit') # downloading printf '\n Trying to download %s %s %s...\n\n' "$os" "$release" "$edition" quickget "$os" "$release" "$edition" fi # choose VM to run choosed=$(echo "$(ls ./***.conf 2>/dev/null | sed 's/\.conf$//')" | fzf --cycle --header='Choose VM to run or CTRL-c or ESC to quit') # Run choosed VM printf '\n Starting %s...\n\n' "$choosed" quickemu -vm "$choosed.conf" fi else # run GUI key=$((RANDOM % 9000 + 1000)) GTK_THEME="alt-dialog" yad --plug="$key" --tabnum=1 --monitor --icons --listen --read-dir="$DH_CONFIG_DIR"/ready --sort-by-name --no-buttons --borders=0 --icon-size=48 --item-width=76 & yad --plug="$key" --tabnum=2 --monitor --icons --listen --read-dir="$DH_CONFIG_DIR"/supported --sort-by-name --no-buttons --borders=0 --icon-size=48 --item-width=76 & yad --plug="$key" --tabnum=3 --monitor --icons --listen --read-dir="$DH_CONFIG_DIR" --sort-by-name --no-buttons --borders=0 --icon-size=48 --item-width=76 & yad --dynamic --notebook --key="$key" --monitor --window-icon="$DH_ICON_DIR"/hop.svg --width=900 --height=800 --title="DistroHopper $version" --listen --no-buttons --tab="run VM" --tab="download VM" --tab="settings" fi exit 0