mirror of
https://github.com/oSoWoSo/DistroHopper.git
synced 2024-08-14 22:46:53 +00:00
zenobit
7fb5c35af1
✨ feat(dh): add support for multiple package managers
The dependencies_install function has been refactored to use separate functions for each package manager. This makes it easier to add support for new package managers in the future. Support for apt, pacman, xbps, and dnf has been added. This improves the flexibility of the script as it can now be used on a wider range of systems.
767 lines
22 KiB
Bash
Executable file
767 lines
22 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# shellcheck disable=1078,1079,1091,2027,2034
|
|
|
|
# shellcheck source=/dev/null
|
|
if [[ -f "lang/${LANGUAGE}.cfg" ]]; then
|
|
source "lang/${LANGUAGE}.cfg"
|
|
elif [[ -f "lang/${LANG:0:5}.cfg" ]]; then
|
|
source "lang/${LANG:0:5}.cfg"
|
|
elif [[ -f "lang/${LANG:0:2}.cfg" ]]; then
|
|
source "lang/${LANG:0:2}.cfg"
|
|
else
|
|
source "lang/en.cfg"
|
|
fi
|
|
|
|
trap 'exit' SIGINT SIGTERM SIGQUIT
|
|
set -e
|
|
echo "$MSG_RUNNING"
|
|
|
|
while true
|
|
do
|
|
function bugs_notice_show() {
|
|
echo ""
|
|
echo "$MSG_DONE"
|
|
echo ""
|
|
echo "$MSG_BUGS"
|
|
echo "$MSG_FEEDBACK"
|
|
echo "$MSG_LIKE"
|
|
echo "$MSG_IMPROVE"
|
|
echo "$MSG_KNOW"
|
|
echo ""
|
|
echo "$MSG_FLAWLESS"
|
|
echo " zenobit"
|
|
}
|
|
|
|
function help_show() {
|
|
echo "DistroHopper v. $version"
|
|
echo "quickemu v. $("$portable_prefix"quickemu --version)"
|
|
printf "$MSG_H_FIRST ./dh i && dh s g\n"
|
|
echo "$MSG_ARGUMENTS"
|
|
printf $"\th\thelp\t\t\t$MSG_H_HELP\n"
|
|
echo "---------------------------------------------------------"
|
|
printf $"\td\tdir\t\t\t$MSG_H_DIR\n"
|
|
printf $"\ti\tinstall\t\t\t$MSG_H_INSTALL\n"
|
|
echo "---------------------------------------------------------"
|
|
printf $"\tm\tmode\t\t\t$MSG_H_MODE\n"
|
|
echo "---------------------------------------------------------"
|
|
printf $"\ts\tsupported\t\t$MSG_H_SUPPORTED\n"
|
|
printf $"\tr\tready\t\t\t$MSG_H_READY\n"
|
|
echo "---------------------------------------------------------"
|
|
printf $"\tt\ttui\t\t\t$MSG_H_TUI\n"
|
|
printf $"\tg\tgui\t\t\t$MSG_H_GUI\n"
|
|
echo "---------------------------------------------------------"
|
|
printf $"\ta\tadd\t\t\t$MSG_H_ADD\n"
|
|
printf $"\tf\tfunctions\t\t$MSG_H_SORT\n"
|
|
printf $"\tp\tpush\t\t\t$MSG_H_PUSH\n"
|
|
echo "---------------------------------------------------------"
|
|
printf $"\tc\tcopy\t\t\t$MSG_H_COPY\n"
|
|
echo "---------------------------------------------------------"
|
|
printf $"\tl\tlanguage\t\t$MSG_H_TRANSLATE\n"
|
|
echo "---------------------------------------------------------"
|
|
echo "$MSG_HOMEPAGE"
|
|
echo "$MSG_HOSTED"
|
|
echo "$MSG_CHAT"
|
|
}
|
|
|
|
function check_and_set_mode() {
|
|
[ -f "$DH_CONFIG" ] && work_in_choosed_dir || work_in_current_dir
|
|
}
|
|
|
|
function work_in_current_dir() {
|
|
VMS_DIR="$(pwd)"
|
|
DH_CONFIG_DIR="$(pwd)"
|
|
DH_ICON_DIR="$(pwd)/icons"
|
|
portable_prefix='./'
|
|
#export "VMS_DIR" "DH_CONFIG_DIR" "DH_ICON_DIR" "TERMINAL" "replace" "portable_prefix"
|
|
}
|
|
|
|
function work_in_choosed_dir() {
|
|
# shellcheck source=distrohopper.conf
|
|
source "$DH_CONFIG"
|
|
portable_prefix=''
|
|
#export "portable_prefix"
|
|
}
|
|
|
|
# installation ---------------------------------------------------------
|
|
|
|
function dependencies_check_gui() {
|
|
[ -f "$PATH_PREFIX/yad" ] || echo "$MSG_YAD"
|
|
}
|
|
|
|
function dependencies_check_tui() {
|
|
[ -f "$PATH_PREFIX/fzf" ] || echo "$MSG_FZF"
|
|
}
|
|
|
|
function variables_set() {
|
|
# DEBUG mod
|
|
#bash -x ./dh 2>&1 | tee output.log
|
|
#progname="${progname:="${0##*/}"}"
|
|
progname="DistroHopper"
|
|
version="0.77b"
|
|
#GTK_THEME="alt-dialog"
|
|
DH_CONFIG_DIR="$HOME/.config/distrohopper"
|
|
DH_CONFIG="$DH_CONFIG_DIR/distrohopper.conf"
|
|
DH_ICON_DIR="/usr/share/icons/distrohopper"
|
|
PATH_PREFIX="/usr/bin/"
|
|
TMP_DIR="/tmp"
|
|
TERMINAL="sakura"
|
|
replace='"!"'
|
|
#export "DH_CONFIG_DIR" "DH_CONFIG" "replace" "DH_ICON_DIR" "PATH_PREFIX" "TMP_DIR" "TERMINAL"
|
|
check_and_set_mode
|
|
# Set traps to catch the signals and exit gracefully
|
|
trap "exit" INT
|
|
trap "exit" EXIT
|
|
}
|
|
|
|
function desktop_entry_create() {
|
|
cat <<EOF > ${DESKTOP_FILE}
|
|
[Desktop Entry]
|
|
Version=$version
|
|
Type=$type
|
|
Name=$name
|
|
GenericName=$gname
|
|
Comment=$comment
|
|
Exec=$execmd
|
|
Icon=$icon
|
|
Terminal=$terminal
|
|
X-MultipleArgs=$args
|
|
Type=$type
|
|
Categories=$categories
|
|
StartupNotify=$notify
|
|
MimeType=$mime
|
|
Keywords=$keyword
|
|
|
|
EOF
|
|
}
|
|
|
|
function directory_structure_create() {
|
|
source distrohopper.conf
|
|
echo "$MSG_CONFIG"
|
|
mkdir -p "$DH_CONFIG_DIR"
|
|
echo "$MSG_ICONS"
|
|
mkdir -p "$DH_ICON_DIR" >/dev/null 2>&1 || sudo mkdir -p "$DH_ICON_DIR"
|
|
}
|
|
|
|
function desktop_entry_distrohopper() {
|
|
echo "$MSG_INTERM"
|
|
run_in_terminal
|
|
DESKTOP_FILE="${TMP_DIR}/dh.desktop"
|
|
type='Application'
|
|
name='DistroHopper'
|
|
comment='Quickly download, create and run VM of any#TODO operating system.'
|
|
version='0.77b'
|
|
execmd="sh -c 'cd ${VMS_DIR} && dh g'"
|
|
if [ "$interminal" == "yes" ]; then
|
|
terminal='true'
|
|
fi
|
|
icon="$DH_ICON_DIR/hop.svg"
|
|
categories='System;Virtualization;'
|
|
desktop_entry_create
|
|
sudo cp ${TMP_DIR}/dh.desktop /usr/share/applications/
|
|
}
|
|
|
|
function virtual_machines_directory_choose() {
|
|
NEWDIR="$(yad --width=900 --height=900 --file --directory --title="Where to save VMs?")"
|
|
VMS_DIR="$NEWDIR"
|
|
echo "VMS_DIR=\"$VMS_DIR\"
|
|
export \"VMS_DIR\"" >> "$DH_CONFIG"
|
|
}
|
|
|
|
WIP2() {
|
|
if [ -f /etc/os-release ]; then
|
|
common_dependencies="bash coreutils fzf grep jq lsb procps python3 usbutils util-linux sed wget xdg-user-dirs yad"
|
|
if grep -q arch /etc/os-release; then
|
|
install_command="sudo pacman -S $common_dependencies cdrtools edk2-ovmf spice-gtk xorg-xrandr"
|
|
elif [[ -f /etc/debian_version ]]; then
|
|
install_command="sudo apt install $common_dependencies cdrtools genisoimage spice-client-gtk unzip"
|
|
elif grep -q void /etc/os-release; then
|
|
install_command="sudo xbps-install -S $common_dependencies cdrtools procps-ng xrandr"
|
|
elif grep -q fedora /etc/os-release; then
|
|
install_command="sudo dnf install $common_dependencies cdrtools edk2-tools spice-gtk-tools"
|
|
elif grep -q nix /etc/os-release; then
|
|
echo "#TODO"
|
|
install_command="nix"
|
|
elif grep -q openSUSE /etc/os-release; then
|
|
# openSUSE supports dnf, but the default is zypper
|
|
if hash dnf 2>/dev/null; then
|
|
install_command="sudo dnf install $common_dependencies cdrtools edk2-tools spice-gtk-tools"
|
|
fi
|
|
fi
|
|
fi
|
|
$install_command
|
|
}
|
|
|
|
function dependencies_install() {
|
|
# Find the current distribution and install dependecies
|
|
if [ -f /etc/os-release ]; then
|
|
if [ -f "$PATH_PREFIX/pacman" ]; then
|
|
install_needed_pacman
|
|
elif [ -f "$PATH_PREFIX/apt" ]; then
|
|
install_needed_apt
|
|
elif [ -f "$PATH_PREFIX/xbps-install" ]; then
|
|
install_needed_xbps
|
|
elif [ -f "$PATH_PREFIX/dnf" ]; then
|
|
install_needed_dnf
|
|
else
|
|
echo "$MSG_ERROR: $MSG_NO_DISTRO"
|
|
exit 1
|
|
fi
|
|
fi
|
|
}
|
|
|
|
function install_needed_atp() {
|
|
sudo apt install qemu bash coreutils ovmf grep jq lsb procps python3 genisoimage usbutils util-linux sed spice-client-gtk swtpm wget xdg-user-dirs zsync unzip yad fzf
|
|
}
|
|
|
|
function install_needed_pacman() {
|
|
sudo pacman -S cdrtools coreutils edk2-ovmf grep jq procps python3 qemu-full sed socat spice-gtk swtpm usbutils util-linux wget xdg-user-dirs xorg-xrandr zsync getext yad fzf
|
|
}
|
|
|
|
function install_needed_xbps() {
|
|
sudo xbps-install -S qemu bash coreutils grep jq procps-ng python3 util-linux sed spice-gtk swtpm usbutils wget xdg-user-dirs xrandr unzip zsync socat yad fzf
|
|
}
|
|
|
|
function install_needed_dnf() {
|
|
sudo dnf install qemu bash coreutils edk2-tools grep jq lsb procps python3 genisoimage usbutils util-linux sed spice-gtk-tools swtpm wget xdg-user-dirs xrandr unzip yad fzf
|
|
}
|
|
|
|
function distrohopper_install() {
|
|
cp dh quickget quickemu macrecovery windowskey "$PATH_PREFIX" >/dev/null 2>&1 || sudo cp dh quickget quickemu macrecovery windowskey "$PATH_PREFIX"
|
|
# quickget also to config directory for adding new distros...
|
|
cp quickget "$DH_CONFIG_DIR/"
|
|
echo "$MSG_C_ICONS"
|
|
cp icons/* "$DH_ICON_DIR/" >/dev/null 2>&1 || sudo cp icons/* "$DH_ICON_DIR/"
|
|
echo "$MSG_C_ENTRIES"
|
|
cp -r ready "$DH_CONFIG_DIR/"
|
|
cp -r supported "$DH_CONFIG_DIR/"
|
|
cp -r lang "$DH_CONFIG_DIR/"
|
|
}
|
|
|
|
function installation_process() {
|
|
dependencies_check_tui
|
|
dependencies_check_gui
|
|
echo "$MSG_NEEDED"
|
|
dependencies_install
|
|
echo "$MSG_STRUCTURE" \
|
|
&& directory_structure_create \
|
|
&& echo "$MSG_SETTINGUP" \
|
|
&& virtual_machines_directory_choose \
|
|
&& echo "$MSG_INSTALLING" \
|
|
&& distrohopper_install \
|
|
&& echo "$MSG_C_ENTRY" \
|
|
&& desktop_entry_distrohopper
|
|
}
|
|
|
|
# basic ----------------------------------------------------------------
|
|
|
|
function run_in_terminal() {
|
|
read -r response
|
|
if [[ "$response" =~ ^[YyAa]$ ]]; then
|
|
interminal="yes"
|
|
else
|
|
interminal="no"
|
|
fi
|
|
}
|
|
|
|
function virtual_machines_update_ready() {
|
|
cd "$VMS_DIR" || exit 1
|
|
# for files in "$VMS_DIR"/*; do
|
|
# if [ ! -e *.conf ]; then
|
|
# echo $"No .conf files found"
|
|
# return
|
|
# fi
|
|
for vm_conf in *.conf; do
|
|
if [ "$vm_conf" == "distrohopper.conf" ]; then
|
|
continue # skip processing distrohopper.conf
|
|
fi
|
|
vm_desktop=$(basename "$VMS_DIR/$vm_conf" .conf)
|
|
# Use fuzzy matching to find the best matching icon file (ready to run VMs)
|
|
icon_name=$(basename "$VMS_DIR/$vm_conf" .conf | cut -d'-' -f -2)
|
|
icon_file=$(find "$DH_ICON_DIR" -type f -iname "${icon_name// /}.*")
|
|
# If no icon was found, try shorter name (ready to run VMs)
|
|
if [ -z "$icon_file" ]; then
|
|
icon_name=$(basename "$VMS_DIR/$vm_conf" .conf | cut -d'-' -f1)
|
|
icon_file=$(find "$DH_ICON_DIR" -type f -iname "${icon_name// /}.*")
|
|
elif [ -z "$icon_file" ]; then
|
|
icon_file="$DH_ICON_DIR/tux.svg"
|
|
fi
|
|
DESKTOP_FILE="$DH_CONFIG_DIR/ready/$vm_desktop.desktop"
|
|
type='Application'
|
|
name="$vm_desktop"
|
|
comment='Quickly download, create and run VM of any#TODO operating system.'
|
|
version='0.77b'
|
|
execmd="$TERM -e sh -c 'cd ${VMS_DIR} && ${portable_prefix}quickemu -vm ${vm_conf};$SHELL'"
|
|
icon="$icon_file"
|
|
categories='System;Virtualization;'
|
|
desktop_entry_create
|
|
done
|
|
}
|
|
|
|
function virtual_machines_update_supported() {
|
|
echo "$MSG_Q_INTERM"
|
|
run_in_terminal
|
|
# get supported VMs
|
|
"$portable_prefix"quickget | sed 1d | cut -d':' -f2 | grep -o '[^ ]*' > "$DH_CONFIG_DIR/supported.md"
|
|
while read -r get_name; do
|
|
vm_desktop=$(echo "$get_name" | tr ' ' '_')
|
|
releases=$("$portable_prefix"quickget "$vm_desktop" | grep 'Releases' | cut -d':' -f2 | sed 's/^ //' | sed 's/ *$//')
|
|
editions=$("$portable_prefix"quickget "$vm_desktop" | grep 'Editions' | cut -d':' -f2 | sed 's/^ //' | sed 's/ *$//')
|
|
icon_name="$DH_ICON_DIR/$get_name"
|
|
if [ -f "$icon_name.svg" ]; then
|
|
icon_file="$icon_name.svg"
|
|
elif [ -f "$icon_name.png" ]; then
|
|
icon_file="$icon_name.png"
|
|
else
|
|
icon_file="$DH_ICON_DIR/tux.svg"
|
|
fi
|
|
echo "$MSG_CREATING $vm_desktop $MSG_DESKTOP_ENTRY"
|
|
echo ""
|
|
# Check if there are editions
|
|
DESKTOP_FILE="$DH_CONFIG_DIR/supported/$vm_desktop.desktop"
|
|
type='Application'
|
|
name="$get_name"
|
|
if [ -z "$editions" ]; then
|
|
execmd="$TERM -e sh -c 'cd $VMS_DIR && yad --form --field=\"Release:CB\" \"${releases// /$replace}\" | cut -d\' | \' -f1 | xargs -I{} sh -c \"${portable_prefix}quickget $get_name {}\";$SHELL'"
|
|
elif [ "$interminal" == "yes" ]; then
|
|
terminal='true'
|
|
else
|
|
execmd="sh -c 'cd $VMS_DIR && yad --form --separator=\" \" --field=\"Release:CB\" \"${releases// /$replace}\" --field=\"Edition:CB\" \"${editions// /$replace}\" | xargs -I{} sh -c \"${portable_prefix}quickget $get_name {}\";$SHELL'"
|
|
fi
|
|
icon="$icon_file"
|
|
categories='System;Virtualization;'
|
|
desktop_entry_create
|
|
done < "$DH_CONFIG_DIR"/supported.md
|
|
}
|
|
|
|
function distrohopper_run_gui() {
|
|
dependencies_check_gui
|
|
key=$((RANDOM % 9000 + 1000))
|
|
yad --plug="$key" --tabnum=1 --monitor --icons --listen --read-dir="$DH_CONFIG_DIR"/ready --sort-by-name --no-buttons --borders=0 --icon-size=46 --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=46 --item-width=76 &
|
|
yad --dynamic --notebook --key="$key" --monitor --listen --window-icon="$DH_ICON_DIR"/hop.svg --width=900 --height=900 --title="DistroHopper" --tab="run VM" --tab="download VM"
|
|
}
|
|
|
|
function WIP() {
|
|
#define functions for buttons
|
|
ABOUT="distrohopper_about"
|
|
HELP="help_show"
|
|
DIR=""
|
|
LANG=""
|
|
INSTALL=""
|
|
MODE=""
|
|
SUPPORTED=""
|
|
READY=""
|
|
TUI=""
|
|
ADD=""
|
|
SORT=""
|
|
PUSH=""
|
|
COPY=""
|
|
TRANSLATE=""
|
|
TEST=""
|
|
dependencies_check_gui
|
|
key=$((RANDOM % 9000 + 1000))
|
|
yad --plug="$key" --tabnum=1 --monitor --icons --listen --read-dir="$DH_CONFIG_DIR"/ready --sort-by-name --borders=0 --icon-size=46 --item-width=76 &
|
|
yad --plug="$key" --tabnum=2 --monitor --icons --listen --read-dir="$DH_CONFIG_DIR"/supported --sort-by-name --borders=0 --icon-size=46 --item-width=76 &
|
|
yad --plug="$key" --tabnum=3 --monitor --icons --borders=0 --icon-size=46 --item-width=76 --columns=2 --form --text-align=center \
|
|
--field="Help!!Show this help and exit":fbtn "$HELP" \
|
|
--field="Set VMs Directory!Set default directory where VMs are stored":DIR "$DIR" \
|
|
--field="Language!Enter new language string" "${lang:-$lang}" \
|
|
--field="Install DistroHopper!!Install DistroHopper":fbtn "$INSTALL" \
|
|
--field="Portable mode!Portable mode":fbtn "$MODE" \
|
|
--field="Supported!!Update supported VMs":fbtn "$SUPPORTED" \
|
|
--field="Ready!!Update ready to run VMs":fbtn "$READY" \
|
|
--field="Tui!!Run terminal user interface (TUI)":fbtn "$TUI" \
|
|
--field="Add!!Add new distro to quickget":fbtn "$ADD" \
|
|
--field="Sort!!Sort functions in quickget":fbtn "$SORT" \
|
|
--field="Push!!Push changed quickget to quickemu project #todo":fbtn "$PUSH" \
|
|
--field="Copy!!Copy all ISOs to target dir (for Ventoy)":fbtn "$COPY" \
|
|
--field="Translate DistroHopper!!Translate DistroHopper":fbtn "$TRANSLATE" \
|
|
--field="Test!!Work in Progress":fbtn "$TEST" \
|
|
--field="About!!Show info about DistroHopper":fbtn "$ABOUT" \
|
|
--button="Exit":0 &
|
|
yad --dynamic --notebook --key="$key" --monitor --listen --no-buttons \
|
|
--mouse --selectable-labels \
|
|
--window-icon="$DH_ICON_DIR/hop.svg" --width=900 --height=900 \
|
|
--title="DistroHopper" --tab="run VM" --tab="download VM" --tab="Options"
|
|
# posible: --undecorated --fixed ontop --buttons-layout=spread edge start end center --keep-icon-size --image=IMAGE --splash
|
|
VAR1="$?"
|
|
echo " DEBUG: VAR1 = $VAR1"
|
|
echo $?
|
|
}
|
|
|
|
distrohopper_about() {
|
|
yad --about --pname=DistroHopper --image="$DH_ICON_DIR"/hop.svg --pversion="$version" \
|
|
--copyright=AGPL3 --comments="random comment" --license=ALGPL3 --authors=zenobit --website=dh.osowoso.xyz \
|
|
--website-label="oSoWoSo"
|
|
}
|
|
|
|
function distrohopper_run_tui() {
|
|
dependencies_check_tui
|
|
tui_run
|
|
if [ "$todo" = "create" ]; then
|
|
virtual_machine_create
|
|
if [ "$os" = windows ]; then
|
|
tui_windows
|
|
else
|
|
tui_get_releases_and_editions
|
|
fzf_choose_release
|
|
if [ "$(echo "$choices" | wc -l)" = 1 ]; then
|
|
quickget_download_os_release
|
|
else
|
|
fzf_choose_edition
|
|
quickget_download_os_release_edition
|
|
fi
|
|
fi
|
|
else
|
|
fzf_choose_virtual_machine_to_run
|
|
virtual_machine_run
|
|
fi
|
|
}
|
|
|
|
tui_run() {
|
|
cd "$VMS_DIR" || exit 1
|
|
vms=(*.conf)
|
|
printf "$MSG_PREPARED:\n-------------\n\n"
|
|
# Check if there are any VMs
|
|
if [ ${#vms[@]} -eq 0 ]; then
|
|
echo "$MSG_NO_VM"
|
|
exit 1
|
|
fi
|
|
# Print the names of the available VMs
|
|
printf "%s\n" "${vms[@]%.*}"
|
|
echo "-------------"
|
|
# Action prompt
|
|
echo "$MSG_NEW (c)"
|
|
printf "$MSG_OR_RUN\n"
|
|
read -rn 1 -s start
|
|
case $start in
|
|
c )
|
|
todo="create"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
tui_windows() {
|
|
fzf_choose_language_windows_other
|
|
if [ "$answer" = "Choose other language" ]; then
|
|
fzf_choose_release_windows
|
|
quickget_get_windows_languages_list
|
|
fzf_choose_language_windows
|
|
quickget_download_windows
|
|
fi
|
|
}
|
|
|
|
function fzf_choose_release() {
|
|
release=$(echo "$releases" | fzf --cycle --header='Choose Release
|
|
or CTRL-c or ESC to quit')
|
|
}
|
|
|
|
function fzf_choose_edition() {
|
|
edition=$(echo "$editions" | fzf --cycle --header='Choose Edition
|
|
or CTRL-c or ESC to quit')
|
|
}
|
|
|
|
function fzf_choose_release_windows() {
|
|
wrelease=$(echo "8
|
|
10
|
|
11" | fzf --cycle)
|
|
}
|
|
|
|
function fzf_choose_language_windows() {
|
|
wlang=$(cat "$portable_prefix"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')
|
|
}
|
|
|
|
function fzf_choose_language_windows_other() {
|
|
answer=$(echo "Default English
|
|
Choose other language" | fzf --cycle)
|
|
}
|
|
|
|
function fzf_choose_virtual_machine_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')
|
|
}
|
|
|
|
function quickget_get_releases_and_editions() {
|
|
result=$(quickget "$choices" | sed 1d | cut -d':' -f2 | grep -o '[^ ]*')
|
|
releases=$(echo "$result" | head -1)
|
|
editions=$(echo "$result" | tail -1)
|
|
}
|
|
|
|
function quickget_get_windows_languages_list() {
|
|
wlend=$(($(cat "$portable_prefix"quickget | sed '/Arabic/,$!d' | grep -n '}' | cut -d':' -f1 | head -n 1) - 1))
|
|
}
|
|
|
|
function quickget_download_os_release() {
|
|
printf $"\n $MSG_TRYING %s %s...\n\n" "$os" "$release"
|
|
"$portable_prefix"quickget "$os" "$release"
|
|
}
|
|
|
|
function quickget_download_os_release_edition() {
|
|
printf $"\n $MSG_TRYING %s %s %s...\n\n" "$os" "$release" "$edition"
|
|
"$portable_prefix"quickget "$os" "$release" "$edition"
|
|
}
|
|
|
|
function quickget_download_windows() {
|
|
printf $"\n $MSG_TRYING %s %s...\n\n" "$wrelease" "$wlang"
|
|
"$portable_prefix"quickget "windows" "$wrelease" "$wlang"
|
|
}
|
|
|
|
function virtual_machine_create() {
|
|
os=$("$portable_prefix"quickget | sed 1d | cut -d':' -f2 | grep -o '[^ ]*' | fzf --cycle --header='Choose OS to download
|
|
or CTRL-c or ESC to quit')
|
|
}
|
|
|
|
function virtual_machine_run() {
|
|
printf $"\n $MSG_STARTING %s...\n\n" "$choosed"
|
|
"$portable_prefix"quickemu -vm "$choosed.conf"
|
|
}
|
|
|
|
# more -----------------------------------------------------------------
|
|
|
|
function TOOL_copy_ISOs_to_dir() {
|
|
yad --width=900 --height=900 --file --directory > target
|
|
cd "$VMS_DIR" || exit 1
|
|
# shellcheck disable=2154
|
|
cp ./*glob*/*.iso "$target"
|
|
}
|
|
# shellcheck disable=2086
|
|
function TOOL_quickget_add_distro() {
|
|
yad --form --field="Pretty name" "" --field="Name" "" --field="Releases" "" --field="Editions" "" --field="URL" "" --field="ISO" "" --field="Checksum file" "" > ${TMP_DIR}/template.tmp
|
|
PRETTY_NAME="$(cat ${TMP_DIR}/template.tmp | cut -d'|' -f1)"
|
|
NAME="$(cat ${TMP_DIR}/template.tmp | cut -d'|' -f2)"
|
|
RELEASES="$(cat ${TMP_DIR}/template.tmp | cut -d'|' -f3)"
|
|
EDITIONS="$(cat ${TMP_DIR}/template.tmp | cut -d'|' -f4)"
|
|
URL="$(cat ${TMP_DIR}/template.tmp | cut -d'|' -f5)"
|
|
ISO="$(cat ${TMP_DIR}/template.tmp | cut -d'|' -f6)"
|
|
CHECKSUM_FILE="$(cat ${TMP_DIR}/template.tmp | cut -d'|' -f7)"
|
|
cat <<EOF > ${TMP_DIR}/template.tmp
|
|
#32
|
|
|
|
$NAME) PRETTY_NAME="$PRETTY_NAME";;
|
|
|
|
#184+
|
|
|
|
$NAME \\
|
|
|
|
#262+
|
|
|
|
function releases_$NAME() {
|
|
echo $RELEASES
|
|
}
|
|
|
|
function editions_$NAME() {
|
|
echo $EDITIONS
|
|
}
|
|
|
|
#1052+
|
|
|
|
function get_$NAME() {
|
|
local EDITION="\${1:-}"
|
|
local HASH=""
|
|
local ISO="$ISO"
|
|
local URL="$URL"
|
|
HASH="\$(wget -q -O- \${URL}/\${CHECKSUM_FILE} | grep (\${ISO} | cut -d' ' -f4)"
|
|
echo "\${URL}/\${ISO}" "\${HASH}"
|
|
}
|
|
|
|
EOF
|
|
echo "Done"
|
|
meld "${TMP_DIR}"/template.tmp "$DH_CONFIG_DIR"/quickget
|
|
}
|
|
|
|
function TOOL_quickget_sort_functions() {
|
|
#TODO
|
|
# Get the name of the script from the command line argument
|
|
script_name=$1
|
|
# Get a list of all the function names in the script
|
|
function_names=$(grep -oP '^[[:space:]]*function \K\w+' "$script_name")
|
|
# Sort the function names alphabetically
|
|
sorted_function_names=$(echo "$function_names" | sort)
|
|
# Loop through the sorted function names and print the function definitions
|
|
for function_name in $sorted_function_names
|
|
do
|
|
# Print the function definition to stdout
|
|
grep -A "$(wc -l < "$script_name")" -w "function $function_name" "$script_name"
|
|
done
|
|
}
|
|
|
|
function TOOL_dh_translate() {
|
|
echo "$MSG_LANG_CHANGE"
|
|
echo "$MSG_LANG_CODE"
|
|
read lang
|
|
echo "$MSG_LANG: $lang"
|
|
echo "$MSG_DUMP"
|
|
bash --dump-po-strings dh > "$DH_CONFIG_DIR"/lang/dh-source.pot
|
|
echo "$MSG_MERGING"
|
|
meld "$DH_CONFIG_DIR"/lang/dh-source.pot "$DH_CONFIG_DIR"/lang/distrohopper-"$lang".pot
|
|
echo "$MSG_MO"
|
|
msgfmt -o "$DH_CONFIG_DIR"/lang/distrohopper-"$lang".mo "$DH_CONFIG_DIR"/lang/distrohopper-"$lang".pot
|
|
echo "$MSG_COPY $lang $MSG_TRANSLATION '/usr/share/local' $MSG_AS_ROOT"
|
|
read response
|
|
if [[ "$response" =~ ^[YyAa]$ ]]; then
|
|
echo "$MSG_C_TRANSLATION '/usr/share/local'..."
|
|
sudo cp "$DH_CONFIG_DIR"/lang/distrohopper-"$lang".mo /usr/share/lang/"$lang"/LC_MESSAGES/distrohopper.mo
|
|
fi
|
|
}
|
|
|
|
TOOL_set_default_terminal() {
|
|
echo "Choose a default terminal:"
|
|
select term in alacritty foot gnome-terminal kitty konsole mate-terminal roxterm sakura st tilix xfce4-terminal xterm custom; do
|
|
case $term in
|
|
alacritty)
|
|
export TERMINAL=alacritty
|
|
break
|
|
;;
|
|
foot)
|
|
export TERMINAL=foot
|
|
break
|
|
;;
|
|
gnome-terminal)
|
|
export TERMINAL=gnome-terminal
|
|
break
|
|
;;
|
|
kitty)
|
|
export TERMINAL=kitty
|
|
break
|
|
;;
|
|
konsole)
|
|
export TERMINAL=konsole
|
|
break
|
|
;;
|
|
mate-terminal)
|
|
export TERMINAL=mate-terminal
|
|
break
|
|
;;
|
|
roxterm)
|
|
export TERMINAL=roxterm
|
|
break
|
|
;;
|
|
sakura)
|
|
export TERMINAL=sakura
|
|
break
|
|
;;
|
|
st)
|
|
export TERMINAL=st
|
|
break
|
|
;;
|
|
tilix)
|
|
export TERMINAL=tilix
|
|
break
|
|
;;
|
|
xfce4-terminal)
|
|
export TERMINAL=xfce4-terminal
|
|
break
|
|
;;
|
|
xterm)
|
|
export TERMINAL=xterm
|
|
break
|
|
;;
|
|
custom)
|
|
read -p "Enter the command to launch your preferred terminal emulator: " custom_terminal
|
|
export TERMINAL=$custom_terminal
|
|
break
|
|
;;
|
|
*)
|
|
echo "Invalid option, please choose again."
|
|
;;
|
|
esac
|
|
done
|
|
|
|
echo "Default terminal set to $TERMINAL."
|
|
}
|
|
|
|
|
|
# run ------------------------------------------------------------------
|
|
|
|
variables_set
|
|
|
|
if [[ $# -eq 0 ]]; then
|
|
printf "$MSG_NO\n\n"
|
|
help_show
|
|
fi
|
|
|
|
while [[ $# -gt 0 ]]
|
|
do
|
|
key="$1"
|
|
case $key in
|
|
h|help)
|
|
help_show
|
|
shift
|
|
;;
|
|
d|dir)
|
|
virtual_machines_directory_choose
|
|
shift
|
|
;;
|
|
i|install)
|
|
echo "$MSG_S_INSTALLATION"
|
|
installation_process
|
|
shift
|
|
;;
|
|
m|mode)
|
|
echo "$MSG_MODE"
|
|
work_in_current_dir
|
|
shift
|
|
;;
|
|
s|supported)
|
|
echo "$MSG_U_SUPPORTED"
|
|
virtual_machines_update_supported
|
|
shift
|
|
;;
|
|
r|ready)
|
|
echo "$MSG_U_READY"
|
|
virtual_machines_update_ready
|
|
shift
|
|
;;
|
|
t|tui)
|
|
echo "$MSG_S_TUI"
|
|
distrohopper_run_tui
|
|
shift
|
|
;;
|
|
g|gui)
|
|
echo "$MSG_S_GUI"
|
|
distrohopper_run_gui
|
|
shift
|
|
;;
|
|
a|add)
|
|
echo "$MSG_ADD_STARTED"
|
|
TOOL_quickget_add_distro
|
|
shift
|
|
;;
|
|
f|functions)
|
|
echo "$MSG_SORTING"
|
|
TOOL_quickget_sort_functions
|
|
shift
|
|
;;
|
|
p|push)
|
|
echo "$MSG_PUSHING"
|
|
push_changes
|
|
shift
|
|
;;
|
|
c|copy)
|
|
echo "$MSG_C_ISOS"
|
|
TOOL_copy_ISOs_to_dir
|
|
shift
|
|
;;
|
|
l|language)
|
|
TOOL_dh_translate
|
|
shift
|
|
;;
|
|
z)
|
|
WIP
|
|
shift
|
|
;;
|
|
*)
|
|
echo "$MSG_INVALID: $1"
|
|
echo ""
|
|
help_show
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
bugs_notice_show
|
|
|
|
exit 0
|
|
|
|
done
|