mirror of
				https://github.com/oSoWoSo/DistroHopper.git
				synced 2024-08-14 22:46:53 +00:00 
			
		
		
		
	raise to 0.76
This commit is contained in:
		
							parent
							
								
									ee4739dcc5
								
							
						
					
					
						commit
						d33704f44d
					
				
					 2 changed files with 8 additions and 520 deletions
				
			
		
							
								
								
									
										11
									
								
								dh
									
										
									
									
									
								
							
							
						
						
									
										11
									
								
								dh
									
										
									
									
									
								
							|  | @ -7,13 +7,17 @@ export "TEXTDOMAINDIR" "TEXTDOMAIN" | ||||||
| 
 | 
 | ||||||
| # bugs notice | # bugs notice | ||||||
| function some_bugs() { | function some_bugs() { | ||||||
|  | 	echo "" | ||||||
| 	echo $"Done" | 	echo $"Done" | ||||||
|  | 	echo "" | ||||||
| 	echo $"PS: You saw some bugs?" | 	echo $"PS: You saw some bugs?" | ||||||
| 	echo $"Could you please provide feedback?" | 	echo $"Could you please provide feedback?" | ||||||
| 	echo $"How do you like DistroHopper?" | 	echo $"How do you like DistroHopper?" | ||||||
| 	echo $"What can be improved, added, changed?" | 	echo $"What can be improved, added, changed?" | ||||||
| 	echo $" Let me know..." | 	echo $" Let me know..." | ||||||
| 	echo $"Flawless distro hopping..." && echo "zenobit" | 	echo "" | ||||||
|  | 	echo $"Wish you flawless distro hopping..." | ||||||
|  | 	echo "			zenobit" | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| function show_help() { | function show_help() { | ||||||
|  | @ -79,7 +83,7 @@ function set_variables() { | ||||||
| 	#bash -x ./dh 2>&1 | tee output.log | 	#bash -x ./dh 2>&1 | tee output.log | ||||||
| 	#progname="${progname:="${0##*/}"}" | 	#progname="${progname:="${0##*/}"}" | ||||||
| 	progname="DistroHopper" | 	progname="DistroHopper" | ||||||
| 	version="0.7" | 	version="0.76" | ||||||
| 	#GTK_THEME="alt-dialog" | 	#GTK_THEME="alt-dialog" | ||||||
| 	DH_CONFIG_DIR="$HOME/.config/distrohopper" | 	DH_CONFIG_DIR="$HOME/.config/distrohopper" | ||||||
| 	DH_CONFIG="$DH_CONFIG_DIR/distrohopper.conf" | 	DH_CONFIG="$DH_CONFIG_DIR/distrohopper.conf" | ||||||
|  | @ -121,6 +125,8 @@ function install_prereq() { | ||||||
| 			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 gettext yad fzf | 			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 gettext yad fzf | ||||||
| 		elif grep -q fedora /etc/os-release; then | 		elif grep -q fedora /etc/os-release; then | ||||||
| 			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 gettext yad fzf | 			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 gettext yad fzf | ||||||
|  | 		elif grep -q nix /etc/os-release; then | ||||||
|  | 			echo "#TODO" | ||||||
| 		elif grep -q openSUSE /etc/os-release; then | 		elif grep -q openSUSE /etc/os-release; then | ||||||
| 			# openSUSE supports dnf, but the default is zypper | 			# openSUSE supports dnf, but the default is zypper | ||||||
| 			if hash dnf 2>/dev/null; then | 			if hash dnf 2>/dev/null; then | ||||||
|  | @ -444,7 +450,6 @@ set_variables | ||||||
| if [[ $# -eq 0 ]]; then | if [[ $# -eq 0 ]]; then | ||||||
|     printf $"No argumet provided!\n\n" |     printf $"No argumet provided!\n\n" | ||||||
|     show_help |     show_help | ||||||
|     exit 0 |  | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
| while [[ $# -gt 0 ]] | while [[ $# -gt 0 ]] | ||||||
|  |  | ||||||
							
								
								
									
										517
									
								
								dh.sh
									
										
									
									
									
								
							
							
						
						
									
										517
									
								
								dh.sh
									
										
									
									
									
								
							|  | @ -1,517 +0,0 @@ | ||||||
| #!/bin/bash |  | ||||||
| 
 |  | ||||||
| # |  | ||||||
| #LANGUAGE=cs_CZ |  | ||||||
| #LANG=cs_CZ |  | ||||||
| TEXTDOMAIN=distrohopper |  | ||||||
| TEXTDOMAINDIR=/usr/share/locale |  | ||||||
| 
 |  | ||||||
| # bugs notice |  | ||||||
| function some_bugs() { |  | ||||||
| 	echo $"Done" |  | ||||||
| 	echo $"PS: You saw some bugs?" |  | ||||||
| 	echo $"Could you please provide feedback?" |  | ||||||
| 	echo $"How do you like DistroHopper?" |  | ||||||
| 	echo $"What can be improved, added, changed?" |  | ||||||
| 	echo $" Let me know..." |  | ||||||
| 	echo $"Flawless distro hopping..." && echo "zenobit" |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function show_help() { |  | ||||||
| 	printf "DistroHopper v. $version\nquickemu v. $("$prefix"quickemu --version)\n" |  | ||||||
| echo $"Possible arguments:" |  | ||||||
| echo $"	-h	--help			Show this help and exit" |  | ||||||
|  echo "---------------------------------------------------------" |  | ||||||
| echo $"	-d	--dir			Set default directory where VMs are stored" |  | ||||||
| echo $"	-i	--install		Install DistroHopper" |  | ||||||
|  echo "---------------------------------------------------------" |  | ||||||
| echo $"	-m	--mode			Portable mode" |  | ||||||
|  echo "---------------------------------------------------------" |  | ||||||
| echo $"	-s	--supported		Update supported VMs" |  | ||||||
| echo $"	-r	--ready			Update ready to run VMs" |  | ||||||
|  echo "---------------------------------------------------------" |  | ||||||
| echo $"	-t	--tui			Run TUI" |  | ||||||
| echo $"	-g	--gui			Run GUI" |  | ||||||
|  echo "---------------------------------------------------------" |  | ||||||
| echo $"	-a	--add			Add new distro to quickget" |  | ||||||
| echo $"	-f	--functions		Sort functions in quickget" |  | ||||||
| echo $"	-p	--push			Push changed quickget to quickemu project #todo" |  | ||||||
|  echo "---------------------------------------------------------" |  | ||||||
| echo $"	-c	--copy			Copy all ISOs to target dir (for Ventoy)" |  | ||||||
|  echo "---------------------------------------------------------" |  | ||||||
| 	echo $"Homepage: dh.osowoso.xyz" |  | ||||||
| 	echo $"Project hosted at: https://github.com/oSoWoSo/DistroHopper" |  | ||||||
| 	echo $"Chat group on SimpleX: https://tinyurl.com/7hm4kcjx" |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function portable() { |  | ||||||
| 	[ -f "$DH_CONFIG" ] && mode_installed || mode_portable |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function mode_portable() { |  | ||||||
| 	VMS_DIR="$(pwd)" |  | ||||||
| 	DH_CONFIG_DIR="$(pwd)" |  | ||||||
| 	DH_ICON_DIR="$(pwd)/icons" |  | ||||||
| 	prefix=./ |  | ||||||
| 	export "VMS_DIR" "DH_CONFIG_DIR" "DH_ICON_DIR" "TERMINAL" "replace" "prefix" |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function mode_installed() { |  | ||||||
| 	source "$DH_CONFIG" |  | ||||||
| 	prefix= |  | ||||||
| 	export "prefix" |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| # installation |  | ||||||
| function check_gui_dependencies() { |  | ||||||
| 	[ -f "$PREFIX/yad" ] || echo $"Missing yad!" |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function check_tui_dependencies() { |  | ||||||
| 	[ -f "$PREFIX/fzf" ] || echo $"Missing fzf!" |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function set_variables() { |  | ||||||
| 	#progname="${progname:="${0##*/}"}" |  | ||||||
| 	progname="DistroHopper" |  | ||||||
| 	version="0.7" |  | ||||||
| 	#GTK_THEME="alt-dialog" |  | ||||||
| 	DH_CONFIG_DIR="$HOME/.config/distrohopper" |  | ||||||
| 	DH_CONFIG="$DH_CONFIG_DIR/distrohopper.conf" |  | ||||||
| 	DH_ICON_DIR="/usr/share/icons/distrohopper" |  | ||||||
| 	TEXTDOMAIN=distrohopper |  | ||||||
| 	TEXTDOMAINDIR=/usr/share/locale |  | ||||||
| 	PREFIX="/usr/bin/" |  | ||||||
| 	TERMINAL=sakura |  | ||||||
| 	replace='"!"' |  | ||||||
| 	export "DH_CONFIG_DIR" "DH_CONFIG" "TEXTDOMAIN" "TEXTDOMAINDIR" "replace" "DH_ICON_DIR" "PREFIX" "TERMINAL" |  | ||||||
| 	portable |  | ||||||
| 	# Set traps to catch the signals and exit gracefully |  | ||||||
| 	trap "exit" INT |  | ||||||
| 	trap "exit" EXIT |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function create_structure() { |  | ||||||
| 	source distrohopper.conf |  | ||||||
| 	echo $"creating config dir..." |  | ||||||
| 	mkdir -p "$DH_CONFIG_DIR" |  | ||||||
| 	echo $"creating icons dir as root..." |  | ||||||
| 	mkdir -p "$DH_ICON_DIR"  >/dev/null 2>&1 || sudo mkdir -p "$DH_ICON_DIR" |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function set_dir() { |  | ||||||
| 	NEWDIR="$(yad --file --directory --title="Where to save VMs?")" |  | ||||||
| 	VMS_DIR="$NEWDIR" |  | ||||||
| 	echo "VMS_DIR=\"$VMS_DIR\" |  | ||||||
| 	export \"VMS_DIR\"" >> "$DH_CONFIG" |  | ||||||
| 	export "VMS_DIR" |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function install_prereq() { |  | ||||||
| 	# (Void linux) |  | ||||||
| 	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 gettext |  | ||||||
| 	# Debian: 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 |  | ||||||
| 	# Fedora: 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 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function install_dh() { |  | ||||||
| 	cp dh quickget quickemu macrecovery windowskey "$PREFIX" >/dev/null 2>&1 || sudo cp dh quickget quickemu macrecovery windowskey "$PREFIX" |  | ||||||
| 	# quickget also to config directory for adding new distros... |  | ||||||
| 	cp quickget "$DH_CONFIG_DIR/" |  | ||||||
| 	echo $"Copying icons..." |  | ||||||
| 	cp icons/* "$DH_ICON_DIR/" >/dev/null 2>&1 || sudo cp icons/* "$DH_ICON_DIR/" |  | ||||||
| 	echo $"Copying to config dir..." |  | ||||||
| 	cp -r ready "$DH_CONFIG_DIR/" |  | ||||||
| 	cp -r supported "$DH_CONFIG_DIR/" |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function install_process() { |  | ||||||
| 	check_tui_dependencies |  | ||||||
| 	check_gui_dependencies |  | ||||||
| 	#check_quickemu_dependencies |  | ||||||
| 	echo $"Creating directory structure..." \ |  | ||||||
| 	 && create_structure \ |  | ||||||
| 	 && echo $"Setting up directory..." \ |  | ||||||
| 	 && set_dir \ |  | ||||||
| 	 && echo $"Installing needed..." \ |  | ||||||
| 	 && echo $"For now voidlinux only" \ |  | ||||||
| 	 && install_prereq \ |  | ||||||
| 	 && echo $"Installing DistroHopper to bin..." \ |  | ||||||
| 	 && install_dh |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| # basic |  | ||||||
| function renew_ready() { |  | ||||||
| 	cd "$VMS_DIR" || exit 1 |  | ||||||
| 	rm "$DH_CONFIG_DIR"/ready/*.desktop |  | ||||||
| #	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 |  | ||||||
| 		# content of desktop files (ready to run VMs) |  | ||||||
| 		desktop_file_content="[Desktop Entry] |  | ||||||
| Type=Application |  | ||||||
| Name=$vm_desktop |  | ||||||
| Exec=sh -c 'cd \"$VMS_DIR\" && "$prefix"quickemu -vm $vm_conf' |  | ||||||
| Icon=$icon_file |  | ||||||
| Categories=System;Virtualization;" |  | ||||||
| 		# create desktop files (ready to run VMs) |  | ||||||
| 		echo "$desktop_file_content" > "$DH_CONFIG_DIR"/ready/"$vm_desktop".desktop |  | ||||||
| 	done |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function renew_supported() { |  | ||||||
| 	rm "$DH_CONFIG_DIR"/supported/*.desktop |  | ||||||
| 	# get supported VMs |  | ||||||
| 	"$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=$("$prefix"quickget "$vm_desktop" | grep 'Releases' | cut -d':' -f2 | sed 's/^ //') |  | ||||||
| 		editions=$("$prefix"quickget "$vm_desktop" | grep 'Editions' | cut -d':' -f2 | 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 |  | ||||||
| 		# Check if there are editions |  | ||||||
| 		if [ -z "$editions" ]; then |  | ||||||
| 			# Create desktop file for VMs without editions |  | ||||||
| 			desktop_file_content="[Desktop Entry] |  | ||||||
| Type=Application |  | ||||||
| Name=$get_name |  | ||||||
| releases=$releases |  | ||||||
| replace=$replace |  | ||||||
| Exec=sh -c 'cd \"$VMS_DIR\" && yad --form --field=\"Release:CB\" \"${releases// /$replace}\" | cut -d\"|\" -f1 | xargs -I{} sh -c \""$prefix"quickget $get_name {}\"' |  | ||||||
| Icon=$icon_file |  | ||||||
| Categories=System;Virtualization;" |  | ||||||
| 			echo "$desktop_file_content" > "$DH_CONFIG_DIR"/supported/"$vm_desktop".desktop |  | ||||||
| 		else |  | ||||||
| 			# Create desktop file for VMs with editions |  | ||||||
| 			desktop_file_content="[Desktop Entry] |  | ||||||
| Type=Application |  | ||||||
| Name=$get_name |  | ||||||
| releases=$releases |  | ||||||
| editions=$editions |  | ||||||
| replace=$replace |  | ||||||
| Exec=sh -c 'cd \"$VMS_DIR\" && yad --form --separator=\" \" --field=\"Release:CB\" \"${releases// /$replace}\" --field=\"Edition:CB\" \"${editions// /$replace}\" | xargs -I{} sh -c \"$prefixquickget $get_name {}\"' |  | ||||||
| Icon=$icon_file |  | ||||||
| Categories=System;Virtualization;" |  | ||||||
| 			echo "$desktop_file_content" > "$DH_CONFIG_DIR"/supported/"$vm_desktop".desktop |  | ||||||
| 		fi |  | ||||||
| 	done < "$DH_CONFIG_DIR"/supported.md |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function renew_supported_test() { |  | ||||||
| 	rm "$DH_CONFIG_DIR"/test/ubuntu.desktop |  | ||||||
| 	# get supported VMs |  | ||||||
| 	"$prefix"quickget | sed 1d | cut -d':' -f2 | grep -o '[^ ]*' > "$DH_CONFIG_DIR/ubuntu.md" |  | ||||||
| 	while read -r get_name; do |  | ||||||
| 		vm_desktop=ubuntu |  | ||||||
| 		releases=$("$prefix"quickget "$vm_desktop" | grep 'Releases' | cut -d':' -f2 | sed 's/^ //') |  | ||||||
| 		editions=$("$prefix"quickget "$vm_desktop" | grep 'Editions' | cut -d':' -f2 | 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 |  | ||||||
| 		# Check if there are editions |  | ||||||
| 		if [ -z "$editions" ]; then |  | ||||||
| 			# Create desktop file for VMs without editions |  | ||||||
| 			desktop_file_content="[Desktop Entry] |  | ||||||
| Type=Application |  | ||||||
| Name=$get_name |  | ||||||
| releases=$releases |  | ||||||
| replace=$replace |  | ||||||
| Exec=sh -c 'cd \"$VMS_DIR\" && yad --form --field=\"Release:CB\" \"${releases// /$replace}\" | cut -d\"|\" -f1 | xargs -I{} sh -c \""$prefix"quickget $get_name {}\"' |  | ||||||
| Icon=$icon_file |  | ||||||
| Categories=System;Virtualization;" |  | ||||||
| 			echo "$desktop_file_content" > "$DH_CONFIG_DIR"/test/ubuntu.desktop |  | ||||||
| 		else |  | ||||||
| 			# Create desktop file for VMs with editions |  | ||||||
| 			desktop_file_content="[Desktop Entry] |  | ||||||
| Type=Application |  | ||||||
| Name=$get_name |  | ||||||
| releases=$releases |  | ||||||
| editions=$editions |  | ||||||
| replace=$replace |  | ||||||
| Exec=sh -c 'cd \"$VMS_DIR\" && yad --form --separator=\" \" --field=\"Release:CB\" \"${releases// /$replace}\" --field=\"Edition:CB\" \"${editions// /$replace}\" | xargs -I{} sh -c \"$prefixquickget $get_name {}\"' |  | ||||||
| Icon=$icon_file |  | ||||||
| Categories=System;Virtualization;" |  | ||||||
| 			echo "$desktop_file_content" > "$DH_CONFIG_DIR"/test/ubuntu.desktop |  | ||||||
| 		fi |  | ||||||
| 	done < "$DH_CONFIG_DIR"/test/ubuntu.md |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function run_gui() { |  | ||||||
| 	check_gui_dependencies |  | ||||||
| 	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 run_tui() { |  | ||||||
| 	check_tui_dependencies |  | ||||||
| 	vms=(*.conf) |  | ||||||
| 	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=$("$prefix"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 "$prefix"quickget | sed '/Arabic/,$!d' | grep -n '}' | cut -d':' -f1 | head -n 1) - 1)) |  | ||||||
| 				# get windows language |  | ||||||
| 				wlang=$(cat "$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') |  | ||||||
| 				# downloading windows |  | ||||||
| 				printf '\n Trying to download Windows %s %s...\n\n' "$wrelease" "$wlang" |  | ||||||
| 				"$prefix"quickget "windows" "$wrelease" "$wlang" |  | ||||||
| 			fi |  | ||||||
| 		fi |  | ||||||
| 		# Get the release and edition to download, if necessary |  | ||||||
| 		choices=$("$prefix"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" |  | ||||||
| 			"$prefix"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" |  | ||||||
| 			"$prefix"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" |  | ||||||
| 		"$prefix"quickemu -vm "$choosed.conf" |  | ||||||
| 	fi |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| # more |  | ||||||
| function isos_to_dir() { |  | ||||||
| 	yad --file --directory > target |  | ||||||
| 	cd "$VMS_DIR" || exit 1 |  | ||||||
| 	cp */*.iso "$target" |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function add_distro() { |  | ||||||
| 	TMP_DIR="/tmp" |  | ||||||
| 	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)" |  | ||||||
| 	echo "    $NAME)           PRETTY_NAME=$PRETTY_NAME;; |  | ||||||
| " >  ${TMP_DIR}/${NAME}.tmp |  | ||||||
| 	{ echo "    $NAME \\ |  | ||||||
| "; echo "function releases_$NAME() { |  | ||||||
| 	echo $RELEASES |  | ||||||
| } |  | ||||||
| "; echo "function editions_$NAME() { |  | ||||||
| 	echo $EDITIONS |  | ||||||
| } |  | ||||||
| "; echo "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}\" |  | ||||||
| } |  | ||||||
| "; } >> ${TMP_DIR}/${NAME}.tmp |  | ||||||
| 	meld "${TMP_DIR}/${NAME}.tmp $DH_CONFIG_DIR/quickget" |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function sort_functions() { |  | ||||||
| 	# 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 localization() { |  | ||||||
| 	#. gettext.sh |  | ||||||
| 	TEXTDOMAIN=distrohopper |  | ||||||
| 	TEXTDOMAINDIR=/usr/share/locale |  | ||||||
| 	mkdir lang |  | ||||||
| 	mkdir lang/cs |  | ||||||
| 	bash --dump-po-strings dh > lang/source.pot |  | ||||||
| 	cp lang/source.pot lang/cs/distrohopper.pot.tmp |  | ||||||
| 	meld lang/cs/distrohopper.pot.tmp lang/cs/distrohopper.pot && rm lang/cs/distrohopper.pot.tmp |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| create_translation() { |  | ||||||
| 	echo $"Which language you want use [en,cs]?" |  | ||||||
| 	read -rn 1 -s lang |  | ||||||
| 	echo $"Choosed language is: $lang" |  | ||||||
| 	echo $"Dumping language source..." |  | ||||||
| 	bash --dump-po-strings dh.sh > "$DH_CONFIG_DIR"/locale/dh-source.pot |  | ||||||
| 	echo $"Merging changes... (Do it yourself)" |  | ||||||
| 	meld "$DH_CONFIG_DIR"/locale/dh-source.pot "$DH_CONFIG_DIR"/distrohopper-"$lang".pot |  | ||||||
| 	echo $"Generating .mo file..." |  | ||||||
| 	msgfmt -o "$DH_CONFIG_DIR"/locale/distrohopper-"$lang".mo "$DH_CONFIG_DIR"/locale/distrohopper-"$lang".pot |  | ||||||
| 	echo $"Copying translation to '/usr/share/local'..." |  | ||||||
| 	sudo cp "$DH_CONFIG_DIR"/locale/distrohopper-"$lang".mo /usr/share/locale/"$lang"/LC_MESSAGES/distrohopper.mo |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| # run |  | ||||||
| set_variables |  | ||||||
| 
 |  | ||||||
| if [[ $# -eq 0 ]]; then |  | ||||||
|     printf $"No argumet provided!\n\n" |  | ||||||
|     show_help |  | ||||||
|     exit 0 |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| while [[ $# -gt 0 ]] |  | ||||||
| do |  | ||||||
| 	key="$1" |  | ||||||
| 	case $key in |  | ||||||
| 		-h|--help) |  | ||||||
| 			show_help |  | ||||||
| 			shift |  | ||||||
| 			;; |  | ||||||
| 		-d|-dir) |  | ||||||
| 			set_dir |  | ||||||
| 			shift |  | ||||||
| 			;; |  | ||||||
| 		-i|--install) |  | ||||||
| 			echo $"Starting installation..." |  | ||||||
| 			install_process |  | ||||||
| 			shift |  | ||||||
| 			;; |  | ||||||
| 		-m|--mode) |  | ||||||
| 			echo $"Switching to portable mode!" |  | ||||||
| 			mode_portable |  | ||||||
| 			shift |  | ||||||
| 			;; |  | ||||||
| 		-s|--supported) |  | ||||||
| 			echo $"Updating supported VMs..." |  | ||||||
| 			renew_supported |  | ||||||
| 			shift |  | ||||||
| 			;; |  | ||||||
| 		-r|--ready) |  | ||||||
| 			echo $"Updating ready VMs..." |  | ||||||
| 			renew_ready |  | ||||||
| 			shift |  | ||||||
| 			;; |  | ||||||
| 		-t|--tui) |  | ||||||
| 			echo $"Running TUI..." |  | ||||||
| 			run_tui |  | ||||||
| 			shift |  | ||||||
| 			;; |  | ||||||
| 		-g|--gui) |  | ||||||
| 			echo $"Starting DistroHopper GUI..." |  | ||||||
| 			run_gui |  | ||||||
| 			shift |  | ||||||
| 			;; |  | ||||||
| 		-a|--add) |  | ||||||
| 			echo $"Adding new distro started..." |  | ||||||
| 			add_distro |  | ||||||
| 			shift |  | ||||||
| 			;; |  | ||||||
| 		-f|--functions) |  | ||||||
| 			echo $"Sorting functions in template..." |  | ||||||
| 			sort_functions |  | ||||||
| 			shift |  | ||||||
| 			;; |  | ||||||
| 		-p|--push) |  | ||||||
| 			echo $"Pushing changes to... #TODO" |  | ||||||
| 			push_changes |  | ||||||
| 			shift |  | ||||||
| 			;; |  | ||||||
| 		-c|--copy) |  | ||||||
| 			echo $"Copying ISOs to dir. It will take some time..." |  | ||||||
| 			isos_to_dir |  | ||||||
| 			shift |  | ||||||
| 			;; |  | ||||||
| 		-e|--test) |  | ||||||
| 			echo $"Running supported test..." |  | ||||||
| 			renew_supported_test |  | ||||||
| 			shift |  | ||||||
| 			;; |  | ||||||
| 		-l|--language) |  | ||||||
| 			create_translation |  | ||||||
| 			shift |  | ||||||
| 			;; |  | ||||||
| 		*) |  | ||||||
| 			printf $"Invalid option: $1\n\n" |  | ||||||
| 			show_help |  | ||||||
| 			exit 1 |  | ||||||
| 			;; |  | ||||||
| 	esac |  | ||||||
| done |  | ||||||
| 
 |  | ||||||
| some_bugs |  | ||||||
| 
 |  | ||||||
| exit 0 |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue