mirror of
				https://github.com/oSoWoSo/DistroHopper.git
				synced 2024-08-14 22:46:53 +00:00 
			
		
		
		
	mapfile vms_not
This commit is contained in:
		
							parent
							
								
									1fb3c975fb
								
							
						
					
					
						commit
						91ef816696
					
				
					 1 changed files with 36 additions and 35 deletions
				
			
		
							
								
								
									
										71
									
								
								qrun
									
										
									
									
									
								
							
							
						
						
									
										71
									
								
								qrun
									
										
									
									
									
								
							|  | @ -6,9 +6,16 @@ | ||||||
| _define_variables() { | _define_variables() { | ||||||
| 	color=$(( RANDOM % 255 + 1 )) | 	color=$(( RANDOM % 255 + 1 )) | ||||||
| 	progname="${progname:="${0##*/}"}" | 	progname="${progname:="${0##*/}"}" | ||||||
| 	configdir="$HOME/.config/$progname" | 	#configdir="$HOME/.config/$progname" | ||||||
| 	version='0.2' | 	version='0.2' | ||||||
| 	vms=(*.conf) | 	vms=(*.conf) | ||||||
|  | 	if ! command -v gum >/dev/null 2>&1; then | ||||||
|  | 		echo 'You are missing gum! Exiting...' && exit 1 | ||||||
|  | 	fi | ||||||
|  | 	if ! command -v quickemu >/dev/null 2>&1; then | ||||||
|  | 		gum style --foreground 1 "You are missing quickemu!" | ||||||
|  | 	fi | ||||||
|  | 	QUICKGET=$(command -v quickget) | ||||||
| 	#export BORDER="rounded" | 	#export BORDER="rounded" | ||||||
| 	export BORDERS_FOREGROUND="$color" | 	export BORDERS_FOREGROUND="$color" | ||||||
| 	export GUM_CHOOSE_CURSOR_FOREGROUND="$color" | 	export GUM_CHOOSE_CURSOR_FOREGROUND="$color" | ||||||
|  | @ -23,13 +30,7 @@ _define_variables() { | ||||||
| 	export GUM_FILTER_PROMPT_FOREGROUND="$color" | 	export GUM_FILTER_PROMPT_FOREGROUND="$color" | ||||||
| 	export GUM_FILTER_SELECTED_PREFIX_FOREGROUND="$color" | 	export GUM_FILTER_SELECTED_PREFIX_FOREGROUND="$color" | ||||||
| 	export GUM_FILTER_SELECTED_PREFIX_BORDER_FOREGROUND="$color" | 	export GUM_FILTER_SELECTED_PREFIX_BORDER_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(){ | _generate_supported(){ | ||||||
|  | @ -53,7 +54,7 @@ _if_needed() { | ||||||
| 
 | 
 | ||||||
| show_vms() { | show_vms() { | ||||||
| 	if [ ${#vms[@]} -eq 0 ]; then | 	if [ ${#vms[@]} -eq 0 ]; then | ||||||
| 		echo 'No VMs found.' | 		gum style --foreground 1 "No VMs!" | ||||||
| 	else | 	else | ||||||
| 	echo "${vms[@]%.*}" | tr " " "\n" | 	echo "${vms[@]%.*}" | tr " " "\n" | ||||||
| 	fi | 	fi | ||||||
|  | @ -62,6 +63,11 @@ show_vms() { | ||||||
| color2=$(( RANDOM % 255 + 1 )) | color2=$(( RANDOM % 255 + 1 )) | ||||||
| 
 | 
 | ||||||
| show_headers() { | show_headers() { | ||||||
|  | 	if [ -f /tmp/icons ]; then | ||||||
|  | 		icons=yes | ||||||
|  | 	else | ||||||
|  | 		icons="" | ||||||
|  | 	fi | ||||||
| 	logo_0=$(gum style " Simple VMs runner") | 	logo_0=$(gum style " Simple VMs runner") | ||||||
| 	logo_1=$(gum style --foreground "$color2" "▄▄▄▄ ▄▄▄  ▄  ▄ ▄   ▄ | 	logo_1=$(gum style --foreground "$color2" "▄▄▄▄ ▄▄▄  ▄  ▄ ▄   ▄ | ||||||
| █  █ █  █ █  █ █▄  █ | █  █ █  █ █  █ █▄  █ | ||||||
|  | @ -76,8 +82,8 @@ show_headers() { | ||||||
| 
 | 
 | ||||||
| 	tip_header=$(gum style --bold "Tip: ") | 	tip_header=$(gum style --bold "Tip: ") | ||||||
| 	distro=$(shuf -n 1 /tmp/supported) | 	distro=$(shuf -n 1 /tmp/supported) | ||||||
| 	tip_distro=$(gum style --align left "$distro") | 	tip_distro=$(gum style "try $distro") | ||||||
| 	tip_temp=$(gum join --align top "$tip_header" "$tip_distro") | 	tip_temp=$(gum join "$tip_header" "$tip_distro") | ||||||
| 	homepage=$("$QUICKGET" -s "${distro}") | 	homepage=$("$QUICKGET" -s "${distro}") | ||||||
| 	tip_homepage=$(gum style --align left "$homepage") | 	tip_homepage=$(gum style --align left "$homepage") | ||||||
| 	tip=$(gum join --vertical --align top "$tip_temp" "$tip_homepage") | 	tip=$(gum join --vertical --align top "$tip_temp" "$tip_homepage") | ||||||
|  | @ -89,16 +95,11 @@ show_headers() { | ||||||
| 	vms_not=() | 	vms_not=() | ||||||
| 	vms_vm=$(gum style --bold "virtual machines:") | 	vms_vm=$(gum style --bold "virtual machines:") | ||||||
| 	vms_run="" | 	vms_run="" | ||||||
| 	if [ -n "$(find -name '*.pid')" ]; then | 	if [ -n "$(find . -name '*.pid')" ]; then | ||||||
| 		for pid_file in "${pid_files[@]}"; do | 		for pid_file in "${pid_files[@]}"; do | ||||||
| 			instance_name=$(basename "$pid_file" .pid) | 			instance_name=$(basename "$pid_file" .pid) | ||||||
| 			vms_running+=("$instance_name") | 			vms_running+=("$instance_name") | ||||||
| 		done | 		done | ||||||
| 		if [ -f /tmp/icons ]; then |  | ||||||
| 			icons=yes |  | ||||||
| 		else |  | ||||||
| 			icons="" |  | ||||||
| 		fi |  | ||||||
| 		if [ "$icons" == yes ]; then | 		if [ "$icons" == yes ]; then | ||||||
| 			running_logo=$(gum style --foreground "$color" --bold ".") | 			running_logo=$(gum style --foreground "$color" --bold ".") | ||||||
| 		else | 		else | ||||||
|  | @ -108,9 +109,10 @@ show_headers() { | ||||||
| 			vms_run+="$running_logo$instance " | 			vms_run+="$running_logo$instance " | ||||||
| 		done | 		done | ||||||
| 	fi | 	fi | ||||||
| 	vms_not=($(comm -23 <(printf "%s\n" "${vms[@]}" | rev | cut -d'.' -f2-9 | rev | sort) <(printf "%s\n" "${vms_running[@]}" | sort))) | 	#vms_not=($(comm -23 <(printf "%s\n" "${vms[@]}" | rev | cut -d'.' -f2-9 | rev | sort) <(printf "%s\n" "${vms_running[@]}" | sort))) | ||||||
|  | 	mapfile -t vms_not < <(comm -23 <(printf "%s\n" "${vms[@]}" | rev | cut -d'.' -f2-9 | rev | sort) <(printf "%s\n" "${vms_running[@]}" | sort)) | ||||||
| 	vms_not_next=$(gum style < <(printf '%s\n' "${vms_not[@]}")) | 	vms_not_next=$(gum style < <(printf '%s\n' "${vms_not[@]}")) | ||||||
| 	if [ ! -z "$(find -name '*.pid')" ]; then | 	if [ -n "$(find . -name '*.pid')" ]; then | ||||||
| 		vms_run_next=$(echo "$vms_run" | tr " " "\n") | 		vms_run_next=$(echo "$vms_run" | tr " " "\n") | ||||||
| 		vms_header=$(gum join --vertical "$vms_vm" "$vms_run_next" "$vms_not_next") | 		vms_header=$(gum join --vertical "$vms_vm" "$vms_run_next" "$vms_not_next") | ||||||
| 	else | 	else | ||||||
|  | @ -118,7 +120,7 @@ show_headers() { | ||||||
| 	fi | 	fi | ||||||
| 	vms_border=$(gum style --padding "0 1" --border=rounded --border-foreground $color "$vms_header") | 	vms_border=$(gum style --padding "0 1" --border=rounded --border-foreground $color "$vms_header") | ||||||
| 	header=$(gum join --align top "$logo_border" "$vms_border") | 	header=$(gum join --align top "$logo_border" "$vms_border") | ||||||
| 	gum join --align center --vertical "$header" "$tip_border" | 	gum join --align center --vertical "$tip_border" "$header" | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| gum_filter_os() { | gum_filter_os() { | ||||||
|  | @ -135,12 +137,11 @@ gum_filter_edition() { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| gum_choose_VM() { | gum_choose_VM() { | ||||||
| 	if find -maxdepth 1 -name '*.conf' >/dev/null 2>&1 ; then | 	if find . -maxdepth 1 -name '*.conf' >/dev/null 2>&1 ; then | ||||||
| 		chosen=$(find -maxdepth 1 -name '*.conf' | cut -d'/' -f2 | rev | cut -d'.' -f2-9 | rev | gum choose --select-if-one) | 		chosen=$(find . -maxdepth 1 -name '*.conf' | cut -d'/' -f2 | rev | cut -d'.' -f2-9 | rev | gum choose --select-if-one) | ||||||
| 	else | 	else | ||||||
| 		gum style --foreground 1 "Can't!" | 		gum style --foreground 1 "Can't!" | ||||||
| 	fi | 	fi | ||||||
| 	#chosen=$(printf '%s\n' "${vms[@]%.conf}" | gum filter --height "$("${vms[@]%.conf}" | wc -l)" --header='Choose VM to run') |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| create_VM() { | create_VM() { | ||||||
|  | @ -198,30 +199,31 @@ gum_choose_runnings() { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| get_ssh_port() { | get_ssh_port() { | ||||||
| 	port=$(grep 'ssh' < ${selected}.ports | cut -d',' -f2) | 	port=$(grep 'ssh' < "$selected".ports | cut -d',' -f2) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ssh_into() { | ssh_into() { | ||||||
| 	gum_choose_running | 	gum_choose_running | ||||||
| 	if [ ! -z "$selected" ]; then | 	if [ -n "$selected" ]; then | ||||||
| 		get_ssh_port | 		get_ssh_port | ||||||
| 		username=$(gum input --prompt "$selected user? ") | 		username=$(gum input --prompt "$selected user? ") | ||||||
| 		ssh ${username}@localhost -o ConnectTimeout=5 -o StrictHostKeyChecking=accept-new -p ${port} | 		ssh "$username"@localhost -o ConnectTimeout=5 -o StrictHostKeyChecking=accept-new -p "$port" | ||||||
|  | 		show_headers | ||||||
| 	fi | 	fi | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| kill_vm() { | kill_vm() { | ||||||
| 	gum_choose_running | 	gum_choose_running | ||||||
| 	if [ ! -z "$selected" ]; then | 	if [ -n "$selected" ]; then | ||||||
| 		echo "${selected}" | 		echo "${selected}" | ||||||
| 		gum confirm "Really kill $selected?" && pid=$(cat ${selected}.pid) && kill "$pid" | 		gum confirm "Really kill $selected?" && pid=$(cat "$selected".pid) && kill "$pid" | ||||||
| 		show_headers | 		show_headers | ||||||
| 	fi | 	fi | ||||||
| } | } | ||||||
| # test | # test | ||||||
| kill_vms() { | kill_vms() { | ||||||
|     gum_choose_runnings |     gum_choose_runnings | ||||||
|     if [ ! -z "$selected" ]; then |     if [ -n "$selected" ]; then | ||||||
|         for vm_name in "${selected[@]}"; do |         for vm_name in "${selected[@]}"; do | ||||||
|             gum confirm "Really kill $vm_name?" |             gum confirm "Really kill $vm_name?" | ||||||
|             pid=$(cat "${vm_name}.pid") |             pid=$(cat "${vm_name}.pid") | ||||||
|  | @ -232,13 +234,12 @@ kill_vms() { | ||||||
| } | } | ||||||
| # test | # test | ||||||
| gum_choose_VM_to_delete() { | gum_choose_VM_to_delete() { | ||||||
|     if ls | grep ".conf" >/dev/null 2>&1 ; then |     if [ -n "$(echo *.conf)" ]; then | ||||||
|         chosen=$(echo ${vms[@]%.*} | tr " " "\n" | gum choose) |         chosen=$(echo "${vms[@]%.*}" | tr " " "\n" | gum choose) | ||||||
|         echo 'Removing config(s)...' |         gum confirm "Really delete $chosen" && rm -r "$chosen" && rm "$chosen".conf | ||||||
|         gum confirm "Really delete ${chosen}" && rm -r $chosen && rm $chosen.conf |  | ||||||
|         show_headers |         show_headers | ||||||
|     else |     else | ||||||
|         echo "No VMs to delete" |         gum style --foreground 1 "No VMs!" | ||||||
|     fi |     fi | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -246,7 +247,7 @@ open_distro_homepage(){ | ||||||
| 	gum_filter_os | 	gum_filter_os | ||||||
| 	"$QUICKGET" -o "${os}" >/dev/null 2>&1 & | 	"$QUICKGET" -o "${os}" >/dev/null 2>&1 & | ||||||
| } | } | ||||||
| 
 | # shellcheck disable=SC2015 | ||||||
| icons_or() { | icons_or() { | ||||||
| 	gum confirm "   Use icons? | 	gum confirm "   Use icons? | ||||||
| need Nerd Fonts" && echo "yes" > /tmp/icons || rm /tmp/icons | need Nerd Fonts" && echo "yes" > /tmp/icons || rm /tmp/icons | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue