#!/bin/bash
# This script was auto generated using the code-cleanup package http://forumubuntusoftware.info/viewtopic.php?f=23&t=9480
# Do a search and replace for ultimateedition.info followed by a search and replace REPLACEME with the name of your program & delete this line.

# ==============================================================================
# title			:REPLACEME
# description	:YOURDESCRIPTION
# author		:theemahn <theemahn@theemahn-msa2>
# date			:07/08/2025
# version		:1.0
# usage			:REPLACEME --help
# manual		:man REPLACEME
# notes			:See change-log below for further information.
# ==============================================================================
# Change-log: 1.0: unreleased
# ==============================================================================

# Modify the below information to correlate with the software you are designing.
APPNAME="Ultimate Arch Linux Fast Install"
PROGNAME="setup"
PROGRAMMER="TheeMahn"
BUILDDATE="07/08/2025"
VERSION="1.0"
DOMAIN="theemahn-msa2"
WEBSITE="${DOMAIN}"
EMAIL="<${PROGRAMMER}@${DOMAIN}>"


if [[ -f "ultimate-common" ]]; then
	source ultimate-common
elif [[ -f "/usr/share/ultimate_edition/ultimate-common" ]]; then
	source /usr/share/ultimate_edition/ultimate-common
else
	echo "No Ultimate Edition common source. Please install ultimate-edition-common."
	if [[ "${ISARCH}" ]]; then
		Encapsulate "sudo pacman -Syuu ultimate-edition-common"
	else
		Encapsulate "sudo apt-get install ultimate-edition-common"
	fi
	exit 0;
fi

Exit () {
	if ! [[ "${SUPPRESS}" ]]; then
		Timer "Stop" "${APPNAME}"
		FullBar
	fi
}

trap Exit EXIT


apptitle="(${APPNAME}) - Version: ${VERSION} Build date: ${BUILDDATE} (GPLv3)"
baseurl=https://os-builder.com
cpl=0
skipfont="0"
fspkgs=""

# Pull in common software
if [[ -f "ultimate-common" ]]; then
	source ultimate-common
elif [[ -f "/usr/share/ultimate_edition/ultimate-common" ]]; then
	source /usr/share/ultimate_edition/ultimate-common
else
	echo "No Ultimate Edition common source. Please install ultimate-edition-common."
	exit 0;
fi
# --------------------------------------------------------
mainmenu(){
	if [ "${1}" = "" ]; then
		nextitem="."
	else
		nextitem=${1}
	fi
	options=()
	options+=("${txtlanguage}" "Language")
	options+=("${txtsetkeymap}" "(loadkeys ...)")
	options+=("${txteditor}" "(${txtoptional})")
	options+=("${txtdiskpartmenu}" "")
	options+=("${txtselectpartsmenu}" "")
	options+=("" "")
	options+=("${txtreboot}" "")
	sel=$(dialog --backtitle "${apptitle}" --title "${txtmainmenu}" --cancel-button "${txtexit}" --default-item "${nextitem}" --menu "" 0 0 0 \
		"${options[@]}" \
		3>&1 1>&2 2>&3)
	if [ "$?" = "0" ]; then
		case ${sel} in
			"${txtlanguage}")
				chooselanguage
				nextitem="${txtsetkeymap}"
			;;
			"${txtsetkeymap}")
				setkeymap
				nextitem="${txtdiskpartmenu}"
			;;
			"${txteditor}")
				chooseeditor
				nextitem="${txtdiskpartmenu}"
			;;
			"${txtdiskpartmenu}")
				diskpartmenu
				nextitem="${txtselectpartsmenu}"
			;;
			"${txtselectpartsmenu}")
				selectparts
				nextitem="${txtreboot}"
			;;
			"${txthelp}")
				help
				nextitem="${txtreboot}"
			;;
			"${txtchangelog}")
				showchangelog
				nextitem="${txtreboot}"
			;;
			"${txtreboot}")
				rebootpc
				nextitem="${txtreboot}"
			;;
		esac
		mainmenu "${nextitem}"
	else
		clear
	fi
}

chooselanguage(){
	options=()
	options+=("Arabic" "(By Mohammad Alawadi)")
	options+=("Brazilian" "(By MaxWilliamJF)")
	options+=("Dutch" "(By bowero)")
	options+=("English" "(By MatMoul)")
	options+=("French" "(By MatMoul)")
	options+=("German" "(By untergrundbiber)")
	options+=("Greek" "(By quelotic)")
	options+=("Italian" "(By thegoldgoat)")
	options+=("Hungarian" "(By KardiWeb)")
	options+=("Norwegian" "(By mrboen94)")
	options+=("Polish" "(By dawidd6)")
	options+=("Portuguese" "(By hugok)")
	options+=("Russian" "(By Anonymous_Prodject)")
	options+=("Spanish" "(By Mystogab)")
	options+=("Turkish" "(By c0b41)")
	sel=$(dialog --backtitle "${apptitle}" --title "${txtlanguage}" --menu "" 0 0 0 \
		"${options[@]}" \
		3>&1 1>&2 2>&3)
	if [ "$?" = "0" ]; then
		clear
		if [ "${sel}" = "English" ]; then
			loadstrings
		else
			eval $(curl -L ${baseurl}/lng/${sel} | sed '/^#/ d')
		fi
		if [ "${skipfont}" = "0" ]; then
			eval $(setfont ${font})
		fi
		font=
		if [ "$(cat /etc/locale.gen | grep ""#${locale}"")" != "" ]; then
			sed -i "/#${locale}/s/^#//g" /etc/locale.gen
			locale-gen
		fi
		export LANG=${locale}
	fi
}

setkeymap(){
	#items=$(localectl list-keymaps)
	#options=()
	#for item in ${items}; do
	#  options+=("${item}" "")
	#done
	items=$(find /usr/share/kbd/keymaps/ -type f -printf "%f\n" | sort -V)
	options=()
	for item in ${items}; do
		options+=("${item%%.*}" "")
	done
	keymap=$(dialog --backtitle "${apptitle}" --title "${txtsetkeymap}" --menu "" 0 0 0 \
		"${options[@]}" \
		3>&1 1>&2 2>&3)
	if [ "$?" = "0" ]; then
		clear
		echo "loadkeys ${keymap}"
		loadkeys ${keymap}
		pressanykey
	fi
}

chooseeditor(){
	options=()
	options+=("nano" "")
	options+=("vim" "")
	options+=("vi" "")
	options+=("edit" "")
	sel=$(dialog --backtitle "${apptitle}" --title "${txteditor}" --menu "" 0 0 0 \
		"${options[@]}" \
		3>&1 1>&2 2>&3)
	if [ "$?" = "0" ]; then
		clear
		echo "export EDITOR=${sel}"
		export EDITOR=${sel}
		EDITOR=${sel}
		pressanykey
	fi
}

rebootpc(){
	if (dialog --backtitle "${apptitle}" --title "${txtreboot}" --defaultno --yesno "${txtreboot} ?" 0 0) then
		clear
		if [[ -f "/mnt/etc/vsftpd/user_list" ]]; then
			Encapsulate" Injecting username to FTP access."
			sed -i "s/ultimate/${USER_NAME}/g" /mnt/etc/vsftpd/user_list
		fi
		reboot
	fi
}
# --------------------------------------------------------



# --------------------------------------------------------
selectdisk(){
		items=$(lsblk -d -p -n -l -o NAME,SIZE -e 7,11)
		options=()
		IFS_ORIG=$IFS
		IFS=$'\n'
		for item in ${items}
		do
				options+=("${item}" "")
		done
		IFS=$IFS_ORIG
		result=$(dialog --backtitle "${APPTITLE}" --title "${1}" --menu "" 0 0 0 "${options[@]}" 3>&1 1>&2 2>&3)
		if [ "$?" != "0" ]
		then
				return 1
		fi
		echo ${result%%\ *}
		return 0
}

diskpartmenu(){
	if [ "${1}" = "" ]; then
		nextitem="."
	else
		nextitem=${1}
	fi
	options=()
	if [ "${eficomputer}" == "0" ]; then
		options+=("${txtautoparts} (gpt)" "")
		options+=("${txtautoparts} (dos)" "")
	else
		options+=("${txtautoparts} (gpt,efi)" "")
		options+=("${txtautoparts} (gpt)" "")
		options+=("${txtautoparts} (dos)" "")
		options+=("${txtautoparts} (gpt,bios+efi,noswap)" "")
	fi
	options+=("${txteditparts} (cfdisk)" "")
	options+=("${txteditparts} (cgdisk)" "")
	sel=$(dialog --backtitle "${apptitle}" --title "${txtdiskpartmenu}" --cancel-button "${txtback}" --default-item "${nextitem}" --menu "" 0 0 0 \
		"${options[@]}" \
		3>&1 1>&2 2>&3)
	if [ "$?" = "0" ]; then
		case ${sel} in
			"${txtautoparts} (dos)")
				diskpartautodos
				nextitem="${txtautoparts} (dos)"
			;;
			"${txtautoparts} (gpt)")
				diskpartautogpt
				nextitem="${txtautoparts} (gpt)"
			;;
			"${txtautoparts} (gpt,efi)")
				diskpartautoefi
				nextitem="${txtautoparts} (gpt,efi)"
			;;
			"${txtautoparts} (gpt,bios+efi,noswap)")
				diskpartautoefiusb
				nextitem="${txtautoparts} (gpt,bios+efi,noswap)"
			;;
			"${txteditparts} (cfdisk)")
				diskpartcfdisk
				nextitem="${txteditparts} (cfdisk)"
			;;
			"${txteditparts} (cgdisk)")
				diskpartcgdisk
				nextitem="${txteditparts} (cgdisk)"
			;;
		esac
		diskpartmenu "${nextitem}"
	fi
}


diskpartautodos(){
		device=$(selectdisk "${txtautoparts} (dos)")
	if [ "$?" = "0" ]; then
		if (dialog --backtitle "${apptitle}" --title "${txtautoparts} (dos)" --defaultno --yesno "${txtautopartsconfirm//%1/${device}}" 0 0) then
			clear
			echo "${txtautopartclear}"
			parted ${device} mklabel msdos
			sleep 1
			echo "${txtautopartcreate//%1/boot}"
			echo -e "n\np\n\n\n+512M\na\nw" | fdisk ${device}
			sleep 1
			echo "${txtautopartcreate//%1/swap}"
			swapsize=$(cat /proc/meminfo | grep MemTotal | awk '{ print $2 }')
			swapsize=$((${swapsize}/1000))"M"
			echo -e "n\np\n\n\n+${swapsize}\nt\n\n82\nw" | fdisk ${device}
			sleep 1
			echo "${txtautopartcreate//%1/root}"
			echo -e "n\np\n\n\n\nw" | fdisk ${device}
			sleep 1
			echo ""
			pressanykey
			if [ "${device::8}" == "/dev/nvm" ]; then
				bootdev=${device}"p1"
				swapdev=${device}"p2"
				rootdev=${device}"p3"
			else
				bootdev=${device}"1"
				swapdev=${device}"2"
				rootdev=${device}"3"
			fi
			efimode="0"
		fi
	fi
}

diskpartautogpt(){
		device=$(selectdisk "${txtautoparts} (gpt)")
	if [ "$?" = "0" ]; then
		if (dialog --backtitle "${apptitle}" --title "${txtautoparts} (gpt)" --defaultno --yesno "${txtautopartsconfirm//%1/${device}}" 0 0) then
			clear
			echo "${txtautopartclear}"
			parted ${device} mklabel gpt
			echo "${txtautopartcreate//%1/BIOS boot}"
			sgdisk ${device} -n=1:0:+31M -t=1:ef02 -c=0:mbrboot
			echo "${txtautopartcreate//%1/boot}"
			sgdisk ${device} -n=2:0:+512M -c=0:boot
			echo "${txtautopartcreate//%1/swap}"
			swapsize=$(cat /proc/meminfo | grep MemTotal | awk '{ print $2 }')
			swapsize=$((${swapsize}/1000))"M"
			sgdisk ${device} -n=3:0:+${swapsize} -t=3:8200 -c=0:swap
			echo "${txtautopartcreate//%1/root}"
			sgdisk ${device} -n=4:0:0 -c=0:root
			echo ""
			pressanykey
			if [ "${device::8}" == "/dev/nvm" ]; then
				bootdev=${device}"p2"
				swapdev=${device}"p3"
				rootdev=${device}"p4"
			else
				bootdev=${device}"2"
				swapdev=${device}"3"
				rootdev=${device}"4"
			fi
			efimode="0"
		fi
	fi
}

diskpartautoefi(){
		device=$(selectdisk "${txtautoparts} (gpt,efi)")
	if [ "$?" = "0" ]; then
		if (dialog --backtitle "${apptitle}" --title "${txtautoparts} (gpt,efi)" --defaultno --yesno "${txtautopartsconfirm//%1/${device}}" 0 0) then
			clear
			echo "${txtautopartclear}"
			parted ${device} mklabel gpt
			echo "${txtautopartcreate//%1/EFI boot}"
			sgdisk ${device} -n=1:0:+1024M -t=1:ef00 -c=0:boot
			echo "${txtautopartcreate//%1/swap}"
			swapsize=$(cat /proc/meminfo | grep MemTotal | awk '{ print $2 }')
			swapsize=$((${swapsize}/1000))"M"
			sgdisk ${device} -n=2:0:+${swapsize} -t=2:8200 -c=0:swap
			echo "${txtautopartcreate//%1/root}"
			sgdisk ${device} -n=3:0:0 -c=0:root
			echo ""
			pressanykey
			if [ "${device::8}" == "/dev/nvm" ]; then
				bootdev=${device}"p1"
				swapdev=${device}"p2"
				rootdev=${device}"p3"
			else
				bootdev=${device}"1"
				swapdev=${device}"2"
				rootdev=${device}"3"
			fi
			efimode="1"
		fi
	fi
}

diskpartautoefiusb(){
		device=$(selectdisk "${txtautoparts} (gpt,efi)")
	if [ "$?" = "0" ]; then
		if (dialog --backtitle "${apptitle}" --title "${txtautoparts} (gpt,efi)" --defaultno --yesno "${txtautopartsconfirm//%1/${device}}" 0 0) then
			clear
			echo "${txtautopartclear}"
			parted ${device} mklabel gpt
			echo "${txtautopartcreate//%1/EFI boot}"
			sgdisk ${device} -n=1:0:+1024M -t=1:ef00
			echo "${txtautopartcreate//%1/BIOS boot}"
			sgdisk ${device} -n=2:0:+31M -t=2:ef02
			echo "${txtautopartcreate//%1/root}"
			sgdisk ${device} -n=3:0:0
			echo "${txthybridpartcreate}"
			echo -e "r\nh\n3\nN\n\nY\nN\nw\nY\n" | gdisk ${device}
			echo ""
			pressanykey
			if [ "${device::8}" == "/dev/nvm" ]; then
				bootdev=${device}"p1"
				swapdev=
				rootdev=${device}"p3"
			else
				bootdev=${device}"1"
				swapdev=
				rootdev=${device}"3"
			fi
			efimode="2"
		fi
	fi
}

diskpartcfdisk(){
		device=$( selectdisk "${txteditparts} (cfdisk)" )
	if [ "$?" = "0" ]; then
		clear
		cfdisk ${device}
	fi
}

diskpartcgdisk(){
		device=$( selectdisk "${txteditparts} (cgdisk)" )
	if [ "$?" = "0" ]; then
		clear
		cgdisk ${device}
	fi
}
# --------------------------------------------------------



# --------------------------------------------------------
selectparts(){
	items=$(lsblk -p -n -l -o NAME -e 7,11)
	options=()
	for item in ${items}; do
		options+=("${item}" "")
	done

	bootdev=$(dialog --backtitle "${apptitle}" --title "${txtselectpartsmenu}" --default-item "${bootdev}" --menu "${txtselectdevice//%1/boot}" 0 0 0 \
		"none" "-" \
		"${options[@]}" \
		3>&1 1>&2 2>&3)
	if [ ! "$?" = "0" ]; then
		return 1
	else
		if [ "${bootdev}" = "none" ]; then
			bootdev=
		fi
	fi

	swapdev=$(dialog --backtitle "${apptitle}" --title "${txtselectpartsmenu}" --default-item "${swapdev}" --menu "${txtselectdevice//%1/swap}" 0 0 0 \
		"none" "-" \
		"${options[@]}" \
		3>&1 1>&2 2>&3)
	if [ ! "$?" = "0" ]; then
		return 1
	else
		if [ "${swapdev}" = "none" ]; then
			swapdev=
		fi
	fi

	rootdev=$(dialog --backtitle "${apptitle}" --title "${txtselectpartsmenu}" --default-item "${rootdev}" --menu "${txtselectdevice//%1/root}" 0 0 0 \
		"${options[@]}" \
		3>&1 1>&2 2>&3)
	if [ ! "$?" = "0" ]; then
		return 1
	fi
	realrootdev=${rootdev}

	homedev=$(dialog --backtitle "${apptitle}" --title "${txtselectpartsmenu}" --menu "${txtselectdevice//%1/home}" 0 0 0 \
		"none" "-" \
		"${options[@]}" \
		3>&1 1>&2 2>&3)
	if [ ! "$?" = "0" ]; then
		return 1
	else
		if [ "${homedev}" = "none" ]; then
			homedev=
		fi
	fi

	msg="${txtselecteddevices}\n\n"
	msg=${msg}"boot : "${bootdev}"\n"
	msg=${msg}"swap : "${swapdev}"\n"
	msg=${msg}"root : "${rootdev}"\n"
	msg=${msg}"home : "${homedev}"\n\n"
	if (dialog --backtitle "${apptitle}" --title "${txtselectpartsmenu}" --yesno "${msg}" 0 0) then
		isnvme=0
		if [ "${bootdev::8}" == "/dev/nvm" ]; then
			isnvme=1
		fi
		if [ "${rootdev::8}" == "/dev/nvm" ]; then
			isnvme=1
		fi
		mountmenu
	fi
}
# --------------------------------------------------------



# --------------------------------------------------------
mountmenu(){
	if [ "${1}" = "" ]; then
		nextitem="."
	else
		nextitem=${1}
	fi
	options=()
	options+=("${txtformatdevices}" "")
	options+=("${txtmount}" "${txtmountdesc}")
	sel=$(dialog --backtitle "${apptitle}" --title "${txtformatmountmenu}" --cancel-button "${txtback}" --default-item "${nextitem}" --menu "" 0 0 0 \
		"${options[@]}" \
		3>&1 1>&2 2>&3)
	if [ "$?" = "0" ]; then
		case ${sel} in
			"${txtformatdevices}")
				formatdevices
				nextitem="${txtmount}"
			;;
			"${txtmount}")
				mountparts
				nextitem="${txtmount}"
			;;
		esac
		mountmenu "${nextitem}"
	fi
}


formatdevices(){
	if (dialog --backtitle "${apptitle}" --title "${txtformatdevices}" --defaultno --yesno "${txtformatdeviceconfirm}" 0 0) then
		fspkgs=""
		if [ ! "${bootdev}" = "" ]; then
			formatbootdevice boot ${bootdev}
		fi
		if [ ! "${swapdev}" = "" ]; then
			formatswapdevice swap ${swapdev}
		fi
		formatdevice root ${rootdev}
		if [ ! "${homedev}" = "" ]; then
			formatdevice home ${homedev}
		fi
	fi
}
formatbootdevice(){
	options=()
	if [ "${efimode}" == "1" ]||[ "${efimode}" = "2" ]; then
		options+=("fat32" "(EFI)")
	fi
	options+=("ext2" "")
	options+=("ext3" "")
	options+=("ext4" "")
	if [ ! "${efimode}" = "1" ]&&[ ! "${efimode}" = "2" ]; then
		options+=("fat32" "(EFI)")
	fi
	sel=$(dialog --backtitle "${apptitle}" --title "${txtformatdevice}" --menu "${txtselectpartformat//%1/${1} (${2})}" 0 0 0 \
		"${options[@]}" \
		3>&1 1>&2 2>&3)
	if [ ! "$?" = "0" ]; then
		return 1
	fi
	clear
	echo "${txtformatingpart//%1/${2}} ${sel}"
	echo "----------------------------------------------"
	case ${sel} in
		ext2)
			echo "mkfs.ext2 ${2}"
			mkfs.ext2 ${2}
		;;
		ext3)
			echo "mkfs.ext3 ${2}"
			mkfs.ext3 ${2}
		;;
		ext4)
			echo "mkfs.ext4 ${2}"
			mkfs.ext4 ${2}
		;;
		fat32)
			fspkgs="${fspkgs[@]} dosfstools"
			echo "mkfs.fat ${2}"
			mkfs.fat ${2}
		;;
	esac
	echo ""
	pressanykey
}
formatswapdevice(){
	options=()
	options+=("swap" "")
	sel=$(dialog --backtitle "${apptitle}" --title "${txtformatdevice}" --menu "${txtselectpartformat//%1/${1} (${2})}" 0 0 0 \
		"${options[@]}" \
		3>&1 1>&2 2>&3)
	if [ ! "$?" = "0" ]; then
		return 1
	fi
	clear
	echo "${txtformatingpart//%1/${swapdev}} swap"
	echo "----------------------------------------------------"
	case ${sel} in
		swap)
			echo "mkswap ${swapdev}"
			mkswap ${swapdev}
			echo ""
			pressanykey
		;;
	esac
	clear
}
formatdevice(){
	options=()
	options+=("btrfs" "")
	options+=("ext4" "")
	options+=("ext3" "")
	options+=("ext2" "")
	options+=("xfs" "")
	options+=("f2fs" "")
	options+=("jfs" "")
	options+=("reiserfs" "")
	if [ ! "${3}" = "noluks" ]; then
		options+=("luks" "encrypted")
	fi
	sel=$(dialog --backtitle "${apptitle}" --title "${txtformatdevice}" --menu "${txtselectpartformat//%1/${1} (${2})}" 0 0 0 \
		"${options[@]}" \
		3>&1 1>&2 2>&3)
	if [ ! "$?" = "0" ]; then
		return 1
	fi
	clear
	echo "${txtformatingpart//%1/${2}} ${sel}"
	echo "----------------------------------------------"
	case ${sel} in
		btrfs)
			fspkgs="${fspkgs[@]} btrfs-progs"
			echo "mkfs.btrfs -f ${2}"
			mkfs.btrfs -f ${2}
			if [ "${1}" = "root" ]; then
				echo "mount ${2} /mnt"
				echo "btrfs subvolume create /mnt/root"
				echo "btrfs subvolume set-default /mnt/root"
				echo "umount /mnt"
				mount ${2} /mnt
				btrfs subvolume create /mnt/root
				btrfs subvolume set-default /mnt/root
				umount /mnt
			fi
		;;
		ext4)
			echo "mkfs.ext4 ${2}"
			mkfs.ext4 ${2}
		;;
		ext3)
			echo "mkfs.ext3 ${2}"
			mkfs.ext3 ${2}
		;;
		ext2)
			echo "mkfs.ext2 ${2}"
			mkfs.ext2 ${2}
		;;
		xfs)
			fspkgs="${fspkgs[@]} xfsprogs"
			echo "mkfs.xfs -f ${2}"
			mkfs.xfs -f ${2}
		;;
		f2fs)
			fspkgs="${fspkgs[@]} f2fs-tools"
			echo "mkfs.f2fs -f $2"
			mkfs.f2fs -f $2
		;;
		jfs)
			fspkgs="${fspkgs[@]} jfsutils"
			echo "mkfs.jfs -f ${2}"
			mkfs.jfs -f ${2}
		;;
		reiserfs)
			fspkgs="${fspkgs[@]} reiserfsprogs"
			echo "mkfs.reiserfs -f ${2}"
			mkfs.reiserfs -f ${2}
		;;
		luks)
			echo "${txtcreateluksdevice}"
			echo "cryptsetup luksFormat ${2}"
			cryptsetup luksFormat ${2}
			if [ ! "$?" = "0" ]; then
				pressanykey
				return 1
			fi
			pressanykey
			echo ""
			echo "${txtopenluksdevice}"
			echo "cryptsetup luksOpen ${2} ${1}"
			cryptsetup luksOpen ${2} ${1}
			if [ ! "$?" = "0" ]; then
				pressanykey
				return 1
			fi
			pressanykey
			options=()
			options+=("normal" "")
			options+=("fast" "")
			sel=$(dialog --backtitle "${apptitle}" --title "${txtformatdevice}" --menu "Wipe device ?" --cancel-button="${txtignore}" 0 0 0 \
				"${options[@]}" \
				3>&1 1>&2 2>&3)
			if [ "$?" = "0" ]; then
				case ${sel} in
					normal)
						echo "dd if=/dev/zero of=/dev/mapper/${1}"
						dd if=/dev/zero of=/dev/mapper/${1} & PID=$! &>/dev/null
					;;
					fast)
						echo "dd if=/dev/zero of=/dev/mapper/${1} bs=60M"
						dd if=/dev/zero of=/dev/mapper/${1} bs=60M & PID=$! &>/dev/null
					;;
				esac
				clear
				sleep 1
				while kill -USR1 ${PID} &>/dev/null
				do
					sleep 1
				done
			fi
			echo ""
			pressanykey
			formatdevice ${1} /dev/mapper/${1} noluks
			if [ "${1}" = "root" ]; then
				realrootdev=${rootdev}
				rootdev=/dev/mapper/${1}
				luksroot=1
				luksrootuuid=$(cryptsetup luksUUID ${2})
			else
				case ${1} in
					home) homedev=/dev/mapper/${1} ;;
				esac
				luksdrive=1
				crypttab="\n${1}    UUID=$(cryptsetup luksUUID ${2})    none"
			fi
			echo ""
			echo "${txtluksdevicecreated}"
		;;
	esac
	echo ""
	pressanykey
}

mountparts(){
	clear
	echo "mount ${rootdev} /mnt"
	mount ${rootdev} /mnt
	echo "mkdir /mnt/{boot,home}"
	mkdir /mnt/{boot,home} 2>/dev/null
	if [ ! "${bootdev}" = "" ]; then
		echo "mount ${bootdev} /mnt/boot"
		mount ${bootdev} /mnt/boot
	fi
	if [ ! "${swapdev}" = "" ]; then
		echo "swapon ${swapdev}"
		swapon ${swapdev}
	fi
	if [ ! "${homedev}" = "" ]; then
		echo "mount ${homedev} /mnt/home"
		mount ${homedev} /mnt/home
	fi
	pressanykey
	installmenu
}
# --------------------------------------------------------



# --------------------------------------------------------
installmenu(){
	if [ "${1}" = "" ]; then
		nextitem="${txtinstallarchlinux}"
	else
		nextitem=${1}
	fi
	options=()
	#options+=("${txtselectmirrorsbycountry}" "(${txtoptional})")
	options+=("${txteditmirrorlist}" "(${txtoptional})")
	options+=("${txtfiltermirrorlist}" "reflector (${txtoptional})")
	options+=("${txtparalleldownloads}" "(${txtoptional})")
	options+=("${txtinstallarchlinux}" "pacstrap")
	options+=("${txtconfigarchlinux}" "")
	sel=$(dialog --backtitle "${apptitle}" --title "${txtinstallmenu}" --cancel-button "${txtunmount}" --default-item "${nextitem}" --menu "" 0 0 0 \
		"${options[@]}" \
		3>&1 1>&2 2>&3)
	if [ "$?" = "0" ]; then
		case ${sel} in
			"${txtselectmirrorsbycountry}")
				selectmirrorsbycountry
				nextitem="${txtinstallarchlinux}"
			;;
			"${txteditmirrorlist}")
				${EDITOR} /etc/pacman.d/mirrorlist
				nextitem="${txtinstallarchlinux}"
			;;
			"${txtfiltermirrorlist}")
				filtermirrorlist
				nextitem="${txtparalleldownloads}"
			;;
			"${txtparalleldownloads}")
				paralleldownloads
				nextitem="${txtinstallarchlinuk}"
			;;
			"${txtinstallarchlinux}")
				if(installbase) then
					nextitem="${txtconfigarchlinux}"
				fi
			;;
			"${txtconfigarchlinux}")
				archmenu
				nextitem="${txtconfigarchlinux}"
			;;
		esac
		installmenu "${nextitem}"
	else
		unmountdevices
	fi
}

selectmirrorsbycountry() {
		if [[ ! -f /etc/pacman.d/mirrorlist.backup ]]; then
				cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.backup
		fi
		items=$( sed -n "/^##.*/N; {s/^## \(.*\)\nServer.*/\1/p}" < /etc/pacman.d/mirrorlist.backup | sort -u )
		options=()
		IFS_ORIG=$IFS
		IFS=$'\n'
		for item in ${items}; do
				options+=("${item}" "")
		done
		IFS=$IFS_ORIG
		country=$(dialog --backtitle "${APPTITLE}" --title "${txtselectcountry}" --menu "" 0 0 0 "${options[@]}" 3>&1 1>&2 2>&3)
		if [ "$?" != "0" ]; then
				return 1
		fi
		sed "s/^\(Server .*\)/\#\1/;/^## $country/N; {s/^\(## .*\n\)\#Server \(.*\)/\1Server \2/}" < /etc/pacman.d/mirrorlist.backup > /etc/pacman.d/mirrorlist
}

filtermirrorlist() {
		command -v reflector > /dev/null || {
			echo "pacman -S --noconfirm reflector"
			pacman -S --noconfirm reflector
		}
		options=()
		options+=("${txtfiltermirrorlist}" "")
		options+=("${txtedit//%1/reflector.conf}" "")
		sel=$(dialog --backtitle "${apptitle}" --title "${txtinstallmenu}" --cancel-button "${txtback}" --default-item "Filter mirrorlist" --menu "" 0 0 0 \
                	"${options[@]}" \
                	3>&1 1>&2 2>&3)
		case ${sel} in
			"${txtfiltermirrorlist}")
				clear
				echo "systemctl start reflector.service"
				systemctl start reflector.service
				pressanykey
			;;
			"${txtedit//%1/reflector.conf}")
				${EDITOR} /etc/xdg/reflector/reflector.conf
				filtermirrorlist
			;;
		esac
}

paralleldownloads() {
		numpkg=$(dialog --backtitle "${apptitle}" --title "${txtparallelprompt}" --inputbox "" 0 0 "5" 3>&1 1>&2 2>&3)
                if [ "$?" = "0" ]; then
			if [[ "$numpkg" =~ ^[1-9][0-9]*$ ]] ; then
				sed -i "s/.*ParallelDownloads.*/ParallelDownloads = ${numpkg}/" /etc/pacman.conf
			else
				clear
				unset numpkg
				echo ${txtincorrectinput}
                		pressanykey
                        fi
                fi


}

installbase(){
	pkgs="base"
	options=()
	options+=("linux" "")
	options+=("linux-lts" "")
	options+=("linux-zen" "")
	options+=("linux-hardened" "")
	sel=$(dialog --backtitle "${apptitle}" --title "${txtinstallarchlinuxkernel}" --menu "" 0 0 0 \
		"${options[@]}" \
		3>&1 1>&2 2>&3)
	if [ "$?" = "0" ]; then
		pkgs+=" ${sel}"
	else
		return 1
	fi

	options=()
	options+=("linux-firmware" "(${txtoptional})" on)
	sel=$(dialog --backtitle "${apptitle}" --title "${txtinstallarchlinuxfirmwares}" --checklist "" 0 0 0 \
		"${options[@]}" \
		3>&1 1>&2 2>&3)
	if [ ! "$?" = "0" ]; then
		return 1
	fi
	for itm in $sel; do
		pkgs="$pkgs $(echo $itm | sed 's/"//g')"
	done

	options=()
	if [[ "${fspkgs}" == *"dosfstools"* ]]; then
		options+=("dosfstools" "" on)
	else
		options+=("dosfstools" "" off)
	fi
	if [[ "${fspkgs}" == *"btrfs-progs"* ]]; then
		options+=("btrfs-progs" "" on)
	else
		options+=("btrfs-progs" "" off)
	fi
	if [[ "${fspkgs}" == *"xfsprogs"* ]]; then
		options+=("xfsprogs" "" on)
	else
		options+=("xfsprogs" "" off)
	fi
	if [[ "${fspkgs}" == *"f2fs-tools"* ]]; then
		options+=("f2fs-tools" "" on)
	else
		options+=("f2fs-tools" "" off)
	fi
	if [[ "${fspkgs}" == *"jfsutils"* ]]; then
		options+=("jfsutils" "" on)
	else
		options+=("jfsutils" "" off)
	fi
	if [[ "${fspkgs}" == *"reiserfsprogs"* ]]; then
		options+=("reiserfsprogs" "" on)
	else
		options+=("reiserfsprogs" "" off)
	fi
	options+=("lvm2" "" off)
	options+=("dmraid" "" off)
	sel=$(dialog --backtitle "${apptitle}" --title "${txtinstallarchlinuxfilesystems}" --checklist "" 0 0 0 \
		"${options[@]}" \
		3>&1 1>&2 2>&3)
	if [ ! "$?" = "0" ]; then
		return 1
	fi
	for itm in $sel; do
		pkgs="$pkgs $(echo $itm | sed 's/"//g')"
	done

	if [[ ${cpl} == 1 ]]; then
		sed -i '/^\s*$/d' /tmp/archfi-custom-package-list
		sed -i '/^#/ d' /tmp/archfi-custom-package-list
		options=()
		while read pkg; do
			options+=("${pkg}" "" on)
		done < /tmp/archfi-custom-package-list
		sel=$(dialog --backtitle "${apptitle}" --title "${txtinstallarchlinuxcustompackagelist}" --checklist "" 0 0 0 \
			"${options[@]}" \
			3>&1 1>&2 2>&3)
		if [ ! "$?" = "0" ]; then
			return 1
		fi
		for itm in $sel; do
			pkgs="$pkgs $(echo $itm | sed 's/"//g')"
		done
	fi

	clear
	echo "pacstrap /mnt ${pkgs}"
	pacstrap /mnt ${pkgs}
	if [ ! -z $numpkg ]; then
		sed -i "s/.*ParallelDownloads.*/ParallelDownloads = ${numpkg}/" /mnt/etc/pacman.conf
	fi
	pressanykey
}

unmountdevices(){
	clear
	echo "umount -R /mnt"
	umount -R /mnt
	if [ ! "${swapdev}" = "" ]; then
		echo "swapoff ${swapdev}"
		swapoff ${swapdev}
	fi
	pressanykey
}
# --------------------------------------------------------



# --------------------------------------------------------
archmenu(){
	if [ "${1}" = "" ]; then
		nextitem="."
	else
		nextitem=${1}
	fi
	options=()
	options+=("${txtsethostname}" "/etc/hostname")
	options+=("${txtsetkeymap}" "/etc/vconsole.conf")
	options+=("${txtsetfont}" "/etc/vconsole.conf (${txtoptional})")
	options+=("${txtsetlocale}" "/etc/locale.conf, /etc/locale.gen")
	options+=("${txtsettime}" "/etc/localtime")
	options+=("${txtsetrootpassword}" "")
	options+=("${txtgenerate//%1/fstab}" "")
	if [ "${luksdrive}" = "1" ]; then
		options+=("${txtgenerate//%1/crypttab}" "")
	fi
	if [ "${luksroot}" = "1" ]; then
		options+=("${txtgenerate//%1/mkinitcpio.conf-luks}" "(encrypt hooks)")
	fi
	if [ "${isnvme}" = "1" ]; then
		options+=("${txtgenerate//%1/mkinitcpio.conf-nvme}" "(nvme module)")
	fi
	options+=("${txtedit//%1/fstab}" "(${txtoptional})")
	options+=("${txtedit//%1/crypttab}" "(${txtoptional})")
	options+=("${txtedit//%1/mkinitcpio.conf}" "(${txtoptional})")
	options+=("${txtedit//%1/mirrorlist}" "(${txtoptional})")
	options+=("${txtbootloader}" "")
	options+=("${txtextrasmenu}" "")
	options+=("archdi" "${txtarchdidesc}")
	sel=$(dialog --backtitle "${apptitle}" --title "${txtarchinstallmenu}" --cancel-button "${txtback}" --default-item "${nextitem}" --menu "" 0 0 0 \
		"${options[@]}" \
		3>&1 1>&2 2>&3)
	if [ "$?" = "0" ]; then
		case ${sel} in
			"${txtsethostname}")
				archsethostname
				nextitem="${txtsetkeymap}"
			;;
			"${txtsetkeymap}")
				archsetkeymap
				nextitem="${txtsetlocale}"
			;;
			"${txtsetfont}")
				archsetfont
				nextitem="${txtsetlocale}"
			;;
			"${txtsetlocale}")
				archsetlocale
				nextitem="${txtsettime}"
			;;
			"${txtsettime}")
				archsettime
				nextitem="${txtsetrootpassword}"
			;;
			"${txtsetrootpassword}")
				archsetrootpassword
				nextitem="${txtgenerate//%1/fstab}"
			;;
			"${txtgenerate//%1/fstab}")
				archgenfstabmenu
				if [ "${luksdrive}" = "1" ]; then
					nextitem="${txtgenerate//%1/crypttab}"
				else
					if [ "${luksroot}" = "1" ]; then
						nextitem="${txtgenerate//%1/mkinitcpio.conf-luks}"
					else
						if [ "${isnvme}" = "1" ]; then
							nextitem="${txtgenerate//%1/mkinitcpio.conf-nvme}"
						else
							nextitem="${txtbootloader}"
						fi
					fi
				fi
			;;
			"${txtgenerate//%1/crypttab}")
				archgencrypttab
				if [ "${luksroot}" = "1" ]; then
					nextitem="${txtgenerate//%1/mkinitcpio.conf-luks}"
				else
					if [ "${isnvme}" = "1" ]; then
						nextitem="${txtgenerate//%1/mkinitcpio.conf-nvme}"
					else
						nextitem="${txtbootloader}"
					fi
				fi
			;;
			"${txtgenerate//%1/mkinitcpio.conf-luks}")
				archgenmkinitcpioluks
				if [ "${isnvme}" = "1" ]; then
					nextitem="${txtgenerate//%1/mkinitcpio.conf-nvme}"
				else
					nextitem="${txtbootloader}"
				fi
			;;
			"${txtgenerate//%1/mkinitcpio.conf-nvme}")
				archgenmkinitcpionvme
				nextitem="${txtbootloader}"
			;;
			"${txtedit//%1/fstab}")
				${EDITOR} /mnt/etc/fstab
				nextitem="${txtedit//%1/fstab}"
			;;
			"${txtedit//%1/crypttab}")
				${EDITOR} /mnt/etc/crypttab
				nextitem="${txtedit//%1/crypttab}"
			;;
			"${txtedit//%1/mkinitcpio.conf}")
				archeditmkinitcpio
				nextitem="${txtedit//%1/mkinitcpio.conf}"
			;;
			"${txtedit//%1/mirrorlist}")
				${EDITOR} /mnt/etc/pacman.d/mirrorlist
				nextitem="${txtedit//%1/mirrorlist}"
			;;
			"${txtbootloader}")
				archbootloadermenu
				nextitem="${txtextrasmenu}"
			;;
			"${txtextrasmenu}")
				archextrasmenu
				nextitem="archdi"
			;;
			"archdi")
				installarchdi
				nextitem="archdi"
			;;
		esac
		archmenu "${nextitem}"
	fi
}

archchroot(){
	echo "arch-chroot /mnt /root"
	cp ${0} /mnt/root
	chmod 755 /mnt/root/$(basename "${0}")
	echo "dialog is required for archfi, it will be installed as dep. Then it will removed when cleaning orphan."
	echo "arch-chroot /mnt pacman -S --asdeps --needed --noconfirm dialog"
	arch-chroot /mnt pacman -S --asdeps --needed --noconfirm dialog
	arch-chroot /mnt /root/$(basename "${0}") --chroot ${1} ${2}
	rm /mnt/root/$(basename "${0}")
	echo "exit"
}


archsethostname(){
	hostname=$(dialog --backtitle "${apptitle}" --title "${txtsethostname}" --inputbox "" 0 0 "archlinux" 3>&1 1>&2 2>&3)
	if [ "$?" = "0" ]; then
		clear
		echo "echo \"${hostname}\" > /mnt/etc/hostname"
		echo "${hostname}" > /mnt/etc/hostname
		pressanykey
	fi
}

archsetkeymap(){
	#items=$(localectl list-keymaps)
	#options=()
	#for item in ${items}; do
	#  options+=("${item}" "")
	#done
	items=$(find /usr/share/kbd/keymaps/ -type f -printf "%f\n" | sort -V)
	options=()
	defsel=""
	for item in ${items}; do
		if [ "${item%%.*}" == "${keymap}" ]; then
			defsel="${item%%.*}"
		fi
		options+=("${item%%.*}" "")
	done
	keymap=$(dialog --backtitle "${apptitle}" --title "${txtsetkeymap}" --default-item "${defsel}" --menu "" 0 0 0 \
		"${options[@]}" \
		3>&1 1>&2 2>&3)
	if [ "$?" = "0" ]; then
		clear
		echo "echo \"KEYMAP=${keymap}\" > /mnt/etc/vconsole.conf"
		echo "KEYMAP=${keymap}" > /mnt/etc/vconsole.conf
		pressanykey
	fi
}

archsetfont(){
	items=$(find /usr/share/kbd/consolefonts/*.psfu.gz -printf "%f\n")

	options=()
	for item in ${items}; do
		options+=("${item%%.*}" "")
	done
	vcfont=$(dialog --backtitle "${apptitle}" --title "${txtsetfont} (${txtoptional})" --menu "" 0 0 0 \
		"${options[@]}" \
		3>&1 1>&2 2>&3)
	if [ "$?" = "0" ]; then
		clear
		echo "echo \"FONT=${vcfont}\" >> /mnt/etc/vconsole.conf"
		echo "FONT=${vcfont}" >> /mnt/etc/vconsole.conf
		pressanykey
	fi
}

archsetlocale(){
	items=$(ls /usr/share/i18n/locales)
	options=()
	defsel=""
	for item in ${items}; do
		if [ "${defsel}" == "" ]&&[ "${keymap::2}" == "${item::2}" ]; then
			defsel="${item}"
		fi
		options+=("${item}" "")
	done
	locale=$(dialog --backtitle "${apptitle}" --title "${txtsetlocale}" --default-item "${defsel}" --menu "" 0 0 0 \
		"${options[@]}" \
		3>&1 1>&2 2>&3)
	if [ "$?" = "0" ]; then
		clear
		echo "echo \"LANG=${locale}.UTF-8\" > /mnt/etc/locale.conf"
		echo "LANG=${locale}.UTF-8" > /mnt/etc/locale.conf
		echo "echo \"LC_COLLATE=C\" >> /mnt/etc/locale.conf"
		echo "LC_COLLATE=C" >> /mnt/etc/locale.conf
		echo "sed -i '/#${locale}.UTF-8/s/^#//g' /mnt/etc/locale.gen"
		sed -i '/#'${locale}'.UTF-8/s/^#//g' /mnt/etc/locale.gen
		archchroot setlocale
		pressanykey
	fi
}
archsetlocalechroot(){
	echo "locale-gen"
	locale-gen
	exit
}

archsettime(){
	items=$(ls -l /mnt/usr/share/zoneinfo/ | grep '^d' | gawk -F':[0-9]* ' '/:/{print $2}')
	options=()
	for item in ${items}; do
		options+=("${item}" "")
	done

	timezone=$(dialog --backtitle "${apptitle}" --title "${txtsettime}" --menu "" 0 0 0 \
		"${options[@]}" \
		3>&1 1>&2 2>&3)
	if [ ! "$?" = "0" ]; then
		return 1
	fi


	items=$(ls /mnt/usr/share/zoneinfo/${timezone}/)
	options=()
	for item in ${items}; do
		options+=("${item}" "")
	done

	timezone=${timezone}/$(dialog --backtitle "${apptitle}" --title "${txtsettime}" --menu "" 0 0 0 \
		"${options[@]}" \
		3>&1 1>&2 2>&3)
	if [ ! "$?" = "0" ]; then
		return 1
	fi

	clear
	echo "ln -sf /mnt/usr/share/zoneinfo/${timezone} /mnt/etc/localtime"
	ln -sf /usr/share/zoneinfo/${timezone} /mnt/etc/localtime
	pressanykey

	options=()
	options+=("UTC" "")
	options+=("Local" "")
	sel=$(dialog --backtitle "${apptitle}" --title "${txtsettime}" --menu "${txthwclock}" 0 0 0 \
		"${options[@]}" \
		3>&1 1>&2 2>&3)
	if [ ! "$?" = "0" ]; then
		return 1
	fi

	clear
	case ${sel} in
		"${txthwclockutc}")
			archchroot settimeutc
		;;
		"${txthwclocklocal}")
			archchroot settimelocal
		;;
	esac

#	if (dialog --backtitle "${apptitle}" --title "${txtsettime}" --yesno "${txtuseutcclock}" 0 0) then
#		clear
#		archchroot settimeutc
#	else
#		clear
#		archchroot settimelocal
#	fi

	pressanykey

}
archsettimeutcchroot(){
	echo "hwclock --systohc --utc"
	hwclock --systohc --utc
	exit
}
archsettimelocalchroot(){
	echo "hwclock --systohc --localtime"
	hwclock --systohc --localtime
	exit
}

archsetrootpassword(){
	clear
	archchroot setrootpassword
	pressanykey
}
archsetrootpasswordchroot(){
	echo "passwd root"
	passed=1
	while [[ ${passed} != 0 ]]; do
		passwd root
		passed=$?
	done
	exit
}

archgenfstabmenu(){
	options=()
	options+=("UUID" "genfstab -U")
	options+=("LABEL" "genfstab -L")
	options+=("PARTUUID" "genfstab -t PARTUUID")
	options+=("PARTLABEL" "genfstab -t PARTLABEL")
	sel=$(dialog --backtitle "${apptitle}" --title "${txtgenerate//%1/fstab}" --cancel-button "${txtback}" --default-item "${nextitem}" --menu "" 0 0 0 \
		"${options[@]}" \
		3>&1 1>&2 2>&3)
	if [ "$?" = "0" ]; then
		case ${sel} in
			"UUID")
				clear
				echo "genfstab -U -p /mnt > /mnt/etc/fstab"
				genfstab -U -p /mnt > /mnt/etc/fstab
			;;
			"LABEL")
				clear
				echo "genfstab -L -p /mnt > /mnt/etc/fstab"
				genfstab -L -p /mnt > /mnt/etc/fstab
			;;
			"PARTUUID")
				clear
				echo "genfstab -t PARTUUID -p /mnt > /mnt/etc/fstab"
				genfstab -t PARTUUID -p /mnt > /mnt/etc/fstab
			;;
			"PARTLABEL")
				clear
				echo "genfstab -t PARTLABEL -p /mnt > /mnt/etc/fstab"
				genfstab -t PARTLABEL -p /mnt > /mnt/etc/fstab
			;;
		esac
	fi
	pressanykey
}

archgencrypttab(){
	clear
	echo "echo -e \"${crypttab}\" >> /mnt/etc/crypttab"
	echo -e "${crypttab}" >> /mnt/etc/crypttab
	pressanykey
}

archgenmkinitcpioluks(){
	clear
	echo "sed -i \"s/block filesystems/block encrypt filesystems/g\" /mnt/etc/mkinitcpio.conf"
	sed -i "s/block filesystems/block encrypt filesystems/g" /mnt/etc/mkinitcpio.conf
	archchroot genmkinitcpio
	pressanykey
}
archgenmkinitcpionvme(){
	clear
	echo "sed -i \"s/MODULES=()/MODULES=(nvme)/g\" /mnt/etc/mkinitcpio.conf"
	sed -i "s/MODULES=()/MODULES=(nvme)/g" /mnt/etc/mkinitcpio.conf
	archchroot genmkinitcpio
	pressanykey
}

archeditmkinitcpio(){
	${EDITOR} /mnt/etc/mkinitcpio.conf
	if (dialog --backtitle "${apptitle}" --title "${txtedit//%1/mkinitcpio.conf}" --yesno "${txtgenerate//%1/mkinitcpio} ?" 0 0) then
		clear
		archchroot genmkinitcpio
		pressanykey
	fi
}
archgenmkinitcpiochroot(){
	echo "mkinitcpio -p linux"
	mkinitcpio -p linux
	exit
}


archbootloadermenu(){
	options=()
	options+=("grub" "")
	if [ "${efimode}" == "1" ]; then
		options+=("systemd-boot" "")
		options+=("refind" "")
	fi
	if [ "${efimode}" != "2" ]; then
		options+=("syslinux" "")
	fi
	sel=$(dialog --backtitle "${apptitle}" --title "${txtbootloadermenu}" --cancel-button "${txtback}" --menu "" 0 0 0 \
		"${options[@]}" \
		3>&1 1>&2 2>&3)
	if [ "$?" = "0" ]; then
		case ${sel} in
			"grub") archbootloadergrubmenu;;
			"systemd-boot")archbootloadersystemdbmenu;;
			"refind") archbootloaderrefindmenu;;
			"syslinux")archbootloadersyslinuxbmenu;;
		esac
	fi
}


archbootloadergrubmenu(){
	if [ "${1}" = "" ]; then
		nextblitem="."
	else
		nextblitem=${1}
	fi
	options=()
	options+=("${txtinstall//%1/grub}" "pacstrap grub (efibootmgr), grub-mkconfig")
	options+=("${txtedit//%1/grub}" "(${txtoptional})")
	options+=("${txtinstall//%1/bootloader}" "grub-install")
	sel=$(dialog --backtitle "${apptitle}" --title "${txtbootloadergrubmenu}" --cancel-button "${txtback}" --default-item "${nextblitem}" --menu "" 0 0 0 \
		"${options[@]}" \
		3>&1 1>&2 2>&3)
	if [ "$?" = "0" ]; then
		case ${sel} in
			"${txtinstall//%1/grub}")
				archgrubinstall
				nextblitem="${txtinstall//%1/bootloader}"
			;;
			"${txtedit//%1/grub}")
				${EDITOR} /mnt/etc/default/grub
				if (dialog --backtitle "${apptitle}" --title "${txtedit//%1/grub}" --yesno "${txtrungrubmakeconfig}" 0 0) then
					clear
					archchroot grubinstall
					pressanykey
				fi
				nextblitem="${txtinstall//%1/bootloader}"
			;;
			"${txtinstall//%1/bootloader}")
				archgrubinstallbootloader
				nextblitem="${txtinstall//%1/bootloader}"
			;;
		esac
		archbootloadergrubmenu "${nextblitem}"
	fi
}

archgrubinstall(){
	clear
	echo "pacstrap /mnt grub"
	pacstrap /mnt grub
	pressanykey

	if [ "${eficomputer}" == "1" ]; then
		if [ "${efimode}" == "1" ]||[ "${efimode}" == "2" ]; then
			if (dialog --backtitle "${apptitle}" --title "${txtinstall//%1/efibootmgr}" --yesno "${txtefibootmgr}" 0 0) then
				clear
				echo "pacstrap /mnt efibootmgr"
				pacstrap /mnt efibootmgr
				pressanykey
			fi
		else
			if (dialog --backtitle "${apptitle}" --title "${txtinstall//%1/efibootmgr}" --defaultno --yesno "${txtefibootmgr}" 0 0) then
				clear
				echo "pacstrap /mnt efibootmgr"
				pacstrap /mnt efibootmgr
				pressanykey
			fi
		fi
	fi

	if [ "${luksroot}" = "1" ]; then
		if (dialog --backtitle "${apptitle}" --title "${txtinstall//%1/grub}" --yesno "${txtgrubluksdetected}" 0 0) then
			clear
			echo "sed -i /GRUB_CMDLINE_LINUX=/c\GRUB_CMDLINE_LINUX=\\\"cryptdevice=/dev/disk/by-uuid/${luksrootuuid}:root\\\" /mnt/etc/default/grub"
			sed -i /GRUB_CMDLINE_LINUX=/c\GRUB_CMDLINE_LINUX=\"cryptdevice=/dev/disk/by-uuid/${luksrootuuid}:root\" /mnt/etc/default/grub
			pressanykey
		fi
	fi

	clear
	archchroot grubinstall
	pressanykey
}
archgrubinstallchroot(){
	echo "mkdir /boot/grub"
	echo "grub-mkconfig -o /boot/grub/grub.cfg"
	mkdir /boot/grub
	grub-mkconfig -o /boot/grub/grub.cfg
	exit
}

archgrubinstallbootloader(){
		device=$( selectdisk "${txtinstall//%1/bootloader}" )
	if [ "$?" = "0" ]; then
		if [ "${eficomputer}" == "1" ]; then
			options=()
			if [ "${efimode}" = "1" ]; then
				options+=("EFI" "")
				options+=("BIOS" "")
				options+=("BIOS+EFI" "")
			elif [ "${efimode}" = "2" ]; then
				options+=("BIOS+EFI" "")
				options+=("BIOS" "")
				options+=("EFI" "")
			else
				options+=("BIOS" "")
				options+=("EFI" "")
				options+=("BIOS+EFI" "")
			fi
			sel=$(dialog --backtitle "${apptitle}" --title "${txtinstall//%1/bootloader}" --cancel-button "${txtback}" --menu "" 0 0 0 \
				"${options[@]}" \
				3>&1 1>&2 2>&3)
			if [ "$?" = "0" ]; then
				clear
				case ${sel} in
					"BIOS") archchroot grubbootloaderinstall ${device};;
					"EFI") archchroot grubbootloaderefiinstall ${device};;
					"BIOS+EFI") archchroot grubbootloaderefiusbinstall ${device};;
				esac
				pressanykey
			fi
		else
			clear
			archchroot grubbootloaderinstall ${device}
			pressanykey
		fi
	fi
}
archgrubinstallbootloaderchroot(){
	if [ ! "${1}" = "none" ]; then
		echo "grub-install --target=i386-pc --recheck ${1}"
		grub-install --target=i386-pc --recheck ${1}
	fi
	exit
}
archgrubinstallbootloaderefichroot(){
	if [ ! "${1}" = "none" ]; then
		echo "grub-install --target=x86_64-efi --efi-directory=/boot --recheck ${1}"
		grub-install --target=x86_64-efi --efi-directory=/boot --recheck ${1}
		isvbox=$(lspci | grep "VirtualBox G")
		if [ "${isvbox}" ]; then
			echo "VirtualBox detected, creating startup.nsh..."
			echo "\EFI\arch\grubx64.efi" > /boot/startup.nsh
		fi
	fi
	exit
}
archgrubinstallbootloaderefiusbchroot(){
	if [ ! "${1}" = "none" ]; then
		echo "grub-install --target=i386-pc --recheck ${1}"
		grub-install --target=i386-pc --recheck ${1}
		echo "grub-install --target=x86_64-efi --efi-directory=/boot --removable --recheck ${1}"
		grub-install --target=x86_64-efi --efi-directory=/boot --removable --recheck ${1}
		isvbox=$(lspci | grep "VirtualBox G")
		if [ "${isvbox}" ]; then
			echo "VirtualBox detected, creating startup.nsh..."
			echo "\EFI\arch\grubx64.efi" > /boot/startup.nsh
		fi
	fi
	exit
}


archbootloadersyslinuxbmenu(){
	if [ "${1}" = "" ]; then
		nextblitem="."
	else
		nextblitem=${1}
	fi
	options=()
	options+=("${txtinstall//%1/syslinux}" "pacstrap syslinux (gptfdisk,mtools)")
	options+=("${txtedit//%1/syslinux}" "(${txtoptional})")
	options+=("${txtinstall//%1/bootloader}" "syslinux-install_update")
	sel=$(dialog --backtitle "${apptitle}" --title "${txtbootloadersyslinuxmenu}" --cancel-button "${txtback}" --default-item "${nextblitem}" --menu "" 0 0 0 \
		"${options[@]}" \
		3>&1 1>&2 2>&3)
	if [ "$?" = "0" ]; then
		case ${sel} in
			"${txtinstall//%1/syslinux}")
				archsyslinuxinstall
				nextblitem="${txtinstall//%1/bootloader}"
			;;
			"${txtedit//%1/syslinux}")
				${EDITOR} /mnt/boot/syslinux/syslinux.cfg
				nextblitem="${txtinstall//%1/bootloader}"
			;;
			"${txtinstall//%1/bootloader}")
				archsyslinuxinstallbootloader
				nextblitem="${txtinstall//%1/bootloader}"
			;;
		esac
		archbootloadersyslinuxbmenu "${nextblitem}"
	fi
}
archsyslinuxinstall(){
	clear

	if [ "${efimode}" == "1" ]||[ "${efimode}" == "2" ]; then
		echo "${txtsyslinuxaddefibootmgr}"
		additionalpkg=${additionalpkg}"efibootmgr "
	fi

	if [ "${isnvme}" = "1" ]; then
		if [ "$(parted ${realrootdev::(-2)} print|grep gpt)" != "" ]; then
			echo "${txtsyslinuxaddgptfdisk}"
			additionalpkg=${additionalpkg}"gptfdisk "
		fi
	else
		if [ "$(parted ${realrootdev::8} print|grep gpt)" != "" ]; then
			echo "${txtsyslinuxaddgptfdisk}"
			additionalpkg=${additionalpkg}"gptfdisk "
		fi
	fi

	if [ "${bootdev}" != "" ]; then
		if [ "$(parted ${bootdev} print|grep fat)" != "" ]; then
			echo "${txtsyslinuxaddmtools}"
			additionalpkg=${additionalpkg}"mtools "
		fi
	fi

	echo "pacstrap /mnt syslinux ${additionalpkg}"
	pacstrap /mnt syslinux ${additionalpkg}
	pressanykey

	clear
	echo "Updating /boot/syslinux/syslinux.cfg"
	if [ "${luksroot}" = "1" ]; then
		echo "sed -i \"/APPEND\ root=/c\    APPEND root=/dev/mapper/root cryptdevice=${realrootdev}:root rw\" /mnt/boot/syslinux/syslinux.cfg"
		sed -i "/APPEND\ root=/c\    APPEND root=/dev/mapper/root cryptdevice=${realrootdev}:root\ rw" /mnt/boot/syslinux/syslinux.cfg
	else
		echo "sed -i \"/APPEND\ root=/c\    APPEND root=${rootdev} rw\" /mnt/boot/syslinux/syslinux.cfg"
		sed -i "/APPEND\ root=/c\    APPEND root=${rootdev}\ rw" /mnt/boot/syslinux/syslinux.cfg
	fi

	pressanykey
}
archsyslinuxinstallbootloader(){
	clear
	if [ "${efimode}" == "1" ]||[ "${efimode}" == "2" ]; then
		archchroot syslinuxbootloaderefiinstall ${bootdev}
	else
		archchroot syslinuxbootloaderinstall ${bootdev}
	fi
	pressanykey
}
archsyslinuxinstallbootloaderchroot(){
	if [ ! "${1}" = "none" ]; then
		echo "syslinux-install_update -i -a -m"
		syslinux-install_update -i -a -m
	fi
	exit
}
archsyslinuxinstallbootloaderefichroot(){
	if [ ! "${1}" = "none" ]; then
		echo "cp -r /usr/lib/syslinux/efi64/* /boot/syslinux"
		cp -r /usr/lib/syslinux/efi64/* /boot/syslinux
		if [ "${1::8}" == "/dev/nvm" ]; then
			echo "efibootmgr --create --disk ${1::(-2)} --part ${1:(-1)} --loader /syslinux/syslinux.efi --label "Syslinux" --verbose"
			efibootmgr --create --disk ${1::(-2)} --part ${1:(-1)} --loader /syslinux/syslinux.efi --label "Syslinux" --verbose
		else
			echo "efibootmgr --create --disk ${1::8} --part ${1:(-1)} --loader /syslinux/syslinux.efi --label "Syslinux" --verbose"
			efibootmgr --create --disk ${1::8} --part ${1:(-1)} --loader /syslinux/syslinux.efi --label "Syslinux" --verbose
		fi
		isvbox=$(lspci | grep "VirtualBox G")
		if [ "${isvbox}" ]; then
			echo "VirtualBox detected, creating startup.nsh..."
			echo "\syslinux\syslinux.efi" > /boot/startup.nsh
		fi
	fi
	exit
}


archbootloadersystemdbmenu(){
	if [ "${1}" = "" ]; then
		nextblitem="."
	else
		nextblitem=${1}
	fi
	options=()
	options+=("${txtinstall//%1/systemd-boot}" "bootctl install")
	options+=("${txtedit//%1/loader.conf}" "(${txtoptional})")
	options+=("${txtedit//%1/entries}" "(${txtoptional})")
	sel=$(dialog --backtitle "${apptitle}" --title "${txtbootloadersystemdmenu}" --cancel-button "${txtback}" --default-item "${nextblitem}" --menu "" 0 0 0 \
		"${options[@]}" \
		3>&1 1>&2 2>&3)
	if [ "$?" = "0" ]; then
		case ${sel} in
			"${txtinstall//%1/systemd-boot}")
				archsystemdinstall
				nextblitem="${txtinstall//%1/loader.conf}"
			;;
			"${txtedit//%1/loader.conf}")
				${EDITOR} /mnt/boot/loader/loader.conf
				nextblitem="${txtedit//%1/entries}"
			;;
			"${txtedit//%1/entries}")
				${EDITOR} /mnt/boot/loader/entries/*
				nextblitem="${txtedit//%1/entries}"
			;;
		esac
		archbootloadersystemdbmenu "${nextblitem}"
	fi
}
archsystemdinstall(){
	clear
	archchroot systemdbootloaderinstall ${realrootdev}

	partuuid=$(blkid -s PARTUUID -o value ${realrootdev})
	parttype=$(blkid -s TYPE -o value ${rootdev})

	echo "cp /mnt/usr/share/systemd/bootctl/arch.conf /mnt/boot/loader/entries"
	echo "echo \"timeout 2\" >> /mnt/boot/loader/loader.conf"
	echo "cp /mnt/usr/share/systemd/bootctl/loader.conf /mnt/boot/loader"
	if [ "${luksroot}" = "1" ]; then
		cryptuuid=$(blkid -s UUID -o value ${realrootdev})
		echo "sed -i \"s/PARTUUID=XXXX/\\/dev\\/mapper\\/root/\" /mnt/boot/loader/entries/arch.conf"
		echo "sed -i \"s/XXXX/${parttype}/\" /mnt/boot/loader/entries/arch.conf"
		echo "sed -i \"s/root=/cryptdevice=UUID=${cryptuuid}:root root=/\" /mnt/boot/loader/entries/arch.conf"
	else
		echo "sed -i \"s/PARTUUID=XXXX/PARTUUID=${partuuid}/\" /mnt/boot/loader/entries/arch.conf"
		echo "sed -i \"s/XXXX/${parttype}/\" /mnt/boot/loader/entries/arch.conf"
	fi
	echo "cp /mnt/boot/loader/entries/arch.conf /mnt/boot/loader/entries/arch-fallback.conf"
	echo "sed -i \"s/Arch Linux/Arch Linux Fallback/\" /mnt/boot/loader/entries/arch-fallback.conf"
	echo "sed -i \"s/initramfs-linux/initramfs-linux-fallback/\" /mnt/boot/loader/entries/arch-fallback.conf"

	cp /mnt/usr/share/systemd/bootctl/loader.conf /mnt/boot/loader
	echo "timeout 2" >> /mnt/boot/loader/loader.conf
	cp /mnt/usr/share/systemd/bootctl/arch.conf /mnt/boot/loader/entries


	if [ "${luksroot}" = "1" ]; then
		sed -i "s/PARTUUID=XXXX/\/dev\/mapper\/root/" /mnt/boot/loader/entries/arch.conf
		sed -i "s/XXXX/${parttype}/" /mnt/boot/loader/entries/arch.conf
		sed -i "s/root=/cryptdevice=UUID=${cryptuuid}:root root=/" /mnt/boot/loader/entries/arch.conf
	else
		sed -i "s/PARTUUID=XXXX/PARTUUID=${partuuid}/" /mnt/boot/loader/entries/arch.conf
		sed -i "s/XXXX/${parttype}/" /mnt/boot/loader/entries/arch.conf
	fi

	cp /mnt/boot/loader/entries/arch.conf /mnt/boot/loader/entries/arch-fallback.conf
	sed -i "s/Arch Linux/Arch Linux Fallback/" /mnt/boot/loader/entries/arch-fallback.conf
	sed -i "s/initramfs-linux/initramfs-linux-fallback/" /mnt/boot/loader/entries/arch-fallback.conf

	pressanykey
}
archsystemdinstallchroot(){
	echo "bootctl --path=/boot install"
	bootctl --path=/boot install
	isvbox=$(lspci | grep "VirtualBox G")
	if [ "${isvbox}" ]; then
		echo "VirtualBox detected, creating startup.nsh..."
		echo "\EFI\systemd\systemd-bootx64.efi" > /boot/startup.nsh
	fi
}


archbootloaderrefindmenu(){
	if [ "${1}" = "" ]; then
		nextblitem="."
	else
		nextblitem=${1}
	fi
	options=()
	options+=("${txtinstall//%1/refind}" "pacstrap refind-efi")
	options+=("${txtedit//%1/refind_linux.conf}" "(${txtoptional})")
	sel=$(dialog --backtitle "${apptitle}" --title "${txtbootloaderrefindmenu}" --cancel-button "${txtback}" --default-item "${nextblitem}" --menu "" 0 0 0 \
		"${options[@]}" \
		3>&1 1>&2 2>&3)
	if [ "$?" = "0" ]; then
		case ${sel} in
			"${txtinstall//%1/refind}")
				archrefindinstall
				nextblitem="${txtedit//%1/refind_linux.conf}"
			;;
			"${txtedit//%1/refind_linux.conf}")
				${EDITOR} /mnt/boot/refind_linux.conf
				nextblitem="${txtedit//%1/refind_linux.conf}"
			;;
		esac
		archbootloaderrefindmenu "${nextblitem}"
	fi

}
archrefindinstall(){
	clear

	echo "pacstrap /mnt refind"
	echo "archchroot refindbootloaderinstall ${realrootdev}"
	echo "echo \"\\\"Arch Linux         \\\" \\\"root=UUID=${rootuuid} rw add_efi_memmap\\\"\" > /mnt/boot/refind_linux.conf"
	echo "echo \"\\\"Arch Linux Fallback\\\" \\\"root=UUID=${rootuuid} rw add_efi_memmap initrd=/initramfs-linux-fallback.img\\\"\" >> /mnt/boot/refind_linux.conf"
	echo "echo \"\\\"Arch Linux Terminal\\\" \\\"root=UUID=${rootuuid} rw add_efi_memmap systemd.unit=multi-user.target\\\"\" >> /mnt/boot/refind_linux.conf"

	pacstrap /mnt refind-efi
	archchroot refindbootloaderinstall ${realrootdev}
	rootuuid=$(blkid -s UUID -o value ${realrootdev})
	echo "\"Arch Linux         \" \"root=UUID=${rootuuid} rw add_efi_memmap\"" > /mnt/boot/refind_linux.conf
	echo "\"Arch Linux Fallback\" \"root=UUID=${rootuuid} rw add_efi_memmap initrd=/initramfs-linux-fallback.img\"" >> /mnt/boot/refind_linux.conf
	echo "\"Arch Linux Terminal\" \"root=UUID=${rootuuid} rw add_efi_memmap systemd.unit=multi-user.target\"" >> /mnt/boot/refind_linux.conf
	pressanykey
}
archrefindinstallchroot(){
	#--usedefault /dev/sdXY --alldrivers
	echo "refind-install"
	refind-install
	isvbox=$(lspci | grep "VirtualBox G")
	if [ "${isvbox}" ]; then
		echo "VirtualBox detected, creating startup.nsh..."
		echo "\EFI\refind\refind_x64.efi" > /boot/startup.nsh
	fi
}


archextrasmenu(){
	pkgs=""
	options=()
	options+=("nano" "" on)
	options+=("vim" "" on)
	options+=("dhcpcd" "" on)
	options+=("networkmanager" "" off)
	sel=$(dialog --backtitle "${apptitle}" --title "${txtextrasmenu}" --checklist "" 0 0 0 \
		"${options[@]}" \
		3>&1 1>&2 2>&3)
	if [ ! "$?" = "0" ]; then
		return 1
	fi
	for itm in $sel; do
		pkgs="$pkgs $(echo $itm | sed 's/"//g')"
	done
	clear
	echo "pacstrap /mnt ${pkgs}"
	pacstrap /mnt ${pkgs}
	if [[ "${pkgs}" == *"dhcpcd"* ]]; then
		archchroot enabledhcpcd
	fi
	if [[ "${pkgs}" == *"networkmanager"* ]]; then
		archchroot enablenetworkmanager
	fi
	pressanykey
}
archenabledhcpcdchroot(){
	echo "systemctl enable dhcpcd"
	systemctl enable dhcpcd
	exit
}

archenablenetworkmanagerchroot(){
	echo "systemctl enable NetworkManager"
	systemctl enable NetworkManager
	exit
}

installarchdi(){
	dialog --backtitle "${apptitle}" --title "archdi" --msgbox "${txtinstallarchdi}" 0 0
	if [ "$?" = "0" ]; then
		options=()
		options+=("${txtarchdiinstallandlaunch}" "")
		options+=("${txtarchdilaunch}" "")
		options+=("${txtarchdiinstall}" "")
		sel=$(dialog --backtitle "${apptitle}" --title "${txtarchdimenu}" --cancel-button "${txtback}" --menu "" 0 0 0 \
			"${options[@]}" \
			3>&1 1>&2 2>&3)
		if [ "$?" = "0" ]; then
			case ${sel} in
				"${txtarchdiinstallandlaunch}") archchroot archdiinstallandlaunch;;
				"${txtarchdilaunch}") archchroot archdilaunch;;
				"${txtarchdiinstall}")
					clear
					archchroot archdiinstall
					pressanykey
				;;
			esac
		fi
	fi
}
archdidownload(){
	txtselectserver="Select source server :"
	txtback="Back"
	options=()
	options+=("sourceforge.net" " (Recommended)")
	options+=("github.com" "")
	sel=$(dialog --backtitle "${apptitle}" --title "${txtselectserver}" --cancel-button "${txtback}" --menu "" 0 0 0 \
		"${options[@]}" \
		3>&1 1>&2 2>&3)
	if [ "$?" = "0" ]; then
		case ${sel} in
			"sourceforge.net")
				archdiurl=archdi.sourceforge.net/archdi
			;;
			"github.com")
				archdiurl=matmoul.github.io/archdi >archdi
			;;
		esac
	fi
	echo "curl -L ${archdiurl} >archdi"
	curl -L ${archdiurl} >archdi
}
archdiinstallandlaunchchroot(){
	cd
	archdidownload
	sh archdi -i
	archdi --chroot
	exit
}
archdilaunchchroot(){
	cd
	archdidownload
	sh archdi --chroot
	rm archdi
	exit
}
archdiinstallchroot(){
	cd
	archdidownload
	sh archdi -i
	exit
}
# --------------------------------------------------------



# --------------------------------------------------------
pressanykey(){
	read -n1 -p "${txtpressanykey}"
}

loadstrings(){

	locale=en_US.UTF-8
	#font=

	txtexit="Exit"
	txtback="Back"
	txtignore="Ignore"

	txtselectserver="Select source server :"

	txtmainmenu="Main Menu"
	txtlanguage="Language"
	txtsetkeymap="Set Keyboard Layout"
	txteditor="Editor"
	txtdiskpartmenu="Disk Partitions"
	txtselectpartsmenu="Select Partitions and Install"
	txthelp="Help"
	txtchangelog="Changelog"
	txtreboot="Reboot"

	txtautoparts="Auto Partitions"
	txteditparts="Edit Partitions"

	txtautopartsconfirm="Selected device : %1\n\nAll data will be erased ! \n\nContinue ?"

	txtautopartclear="Clear all partition data"
	txtautopartcreate="Create %1 partition"
	txthybridpartcreate="Set hybrid MBR"
	txtautopartsettype="Set %1 partition type"

	txtselectdevice="Select %1 device :"
	txtselecteddevices="Selected devices :"

	txtformatmountmenu="Format and Mount"
	txtformatdevices="Format Devices"
	txtformatdevice="Format Device"
	txtmount="Mount"
	txtunmount="Unmount"
	txtmountdesc="Install or Config"

	txtformatdeviceconfirm="Warning, all data on selected devices will be erased ! \nFormat devices ?"

	txtselectpartformat="Select partition format for %1 :"
	txtformatingpart="Formatting partition %1 as"
	txtcreateluksdevice="Create luks device :"
	txtopenluksdevice="Open luks device :"
	txtluksdevicecreated="luks device created !"

	txtinstallmenu="Install Menu"

	txtarchinstallmenu="Arch Install Menu"

	txtselectmirrorsbycountry="Select mirrors by country"
	txtselectcountry="Select country"
	txteditmirrorlist="Edit mirrorlist"
	txtfiltermirrorlist="Filter mirrorlist"
	txtparalleldownloads="Parallel Downloads"
	txtinstallarchlinux="Install Arch Linux"
	txtinstallarchlinuxkernel="Kernel"
	txtinstallarchlinuxfirmwares="Firmwares"
	txtinstallarchlinuxfilesystems="File Systems"
	txtinstallarchlinuxcustompackagelist="Custom Package List"
	txtconfigarchlinux="Config Arch Linux"

	txtparallelprompt="Number of packages to download in Parallel"
	txtincorrectinput="Please enter a number greater than 0"

	txtsethostname="Set Computer Name"
	txtsetfont="Set Font"
	txtsetlocale="Set Locale"
	txtsettime="Set Time"
	txtsetrootpassword="Set root password"

	txthwclock="Hardware clock :"
	txthwclockutc="UTC"
	txthwclocklocal="Local"

	txtbootloader="Bootloader"
	txtbootloadermenu="Choose your bootloader"

	txtefibootmgr="efibootmgr is required for EFI computers."

	txtbootloadergrubmenu="Grub Install Menu"
	txtrungrubmakeconfig="Run grub-mkconfig ?"
	txtgrubluksdetected="Encrypted root partion !\n\nAdd cryptdevice= to GRUB_CMDLINE_LINUX in /etc/default/grub ?"

	txtbootloadersyslinuxmenu="Syslinux Install Menu"
	txtsyslinuxaddefibootmgr="EFI install require efibootmgr"
	txtsyslinuxaddgptfdisk="GPT disk require gptfdisk"
	txtsyslinuxaddmtools="FAT boot part require mtools"

	txtbootloadersystemdmenu="Systemd-boot Install Menu"

	txtbootloaderrefindmenu="rEFInd Install Menu"

	txtextrasmenu="Extras"

	txtoptional="Optional"
	txtrecommandeasyinst="Recommanded for easy install"
	txtset="Set %1"
	txtgenerate="Generate %1"
	txtedit="Edit %1"
	txtinstall="Install %1"
	txtenable="Enable %1"

	txtpressanykey="Press any key to continue."

	txtarchdidesc="Full desktop install script"
	txtinstallarchdi="Arch Linux Desktop Install (archdi) is a second script who can help you to install a full workstation.\n\nYou can just launch the script or install it. Choose in the next menu."
	txtarchdiinstallandlaunch="Install and run archdi"
	txtarchdiinstall="Install archdi"
	txtarchdilaunch="Launch archdi"
}

# --------------------------------------------------------



# --------------------------------------------------------
while (( "$#" )); do
	case ${1} in
		--help)
			echo "archfi"
			echo "------"
			echo "-cpl | --custom-package-list url  Set custom package list url"
			echo "-sf | --skip-font                 Skip setfont from language files"
			echo "-efiX                             -efi0 : disable EFI, -efi1 efi inst, -efi2 efi hybrid inst"
			echo "-t | --test ghusername ghbranch   Test archfi script and language"
			exit 0
		;;
		-cpl | --custom-package-list)
			curl -L ${2} > /tmp/archfi-custom-package-list
			if [[ "$?" != "0" ]]; then
				echo "Error downloading custom package list"
				exit 0
			fi
			cpl=1
		;;
		-sf | --skip-font) skipfont=1;;
		-t | --test)
			curl -L https://raw.githubusercontent.com/${2}/archfi/${3}/archfi > archfi
			sh archfi -tt ${2} ${3}
			exit 0
		;;
		-tt) baseurl="https://raw.githubusercontent.com/${2}/archfi/${3}";;
		-efi0) efimode=0;;
		-efi1)
			eficomputer=1
			efimode=1
		;;
		-efi2)
			eficomputer=1
			efimode=2
		;;
		--chroot) chroot=1
							command=${2}
							args=${3};;
	esac
	shift
done

if [ "${chroot}" = "1" ]; then
	case ${command} in
		'setrootpassword') archsetrootpasswordchroot;;
		'setlocale') archsetlocalechroot;;
		'settimeutc') archsettimeutcchroot;;
		'settimelocal') archsettimelocalchroot;;
		'genmkinitcpio') archgenmkinitcpiochroot;;
		'enabledhcpcd') archenabledhcpcdchroot;;
		'enablenetworkmanager') archenablenetworkmanagerchroot;;
		'grubinstall') archgrubinstallchroot;;
		'grubbootloaderinstall') archgrubinstallbootloaderchroot ${args};;
		'grubbootloaderefiinstall') archgrubinstallbootloaderefichroot ${args};;
		'grubbootloaderefiusbinstall') archgrubinstallbootloaderefiusbchroot ${args};;
		'syslinuxbootloaderinstall') archsyslinuxinstallbootloaderchroot ${args};;
		'syslinuxbootloaderefiinstall') archsyslinuxinstallbootloaderefichroot ${args};;
		'systemdbootloaderinstall') archsystemdinstallchroot ${args};;
		'refindbootloaderinstall') archrefindinstallchroot ${args};;
		'archdiinstallandlaunch') archdiinstallandlaunchchroot;;
		'archdiinstall') archdiinstallchroot;;
		'archdilaunch') archdilaunchchroot;;
	esac
else
	VersionDump "$@"
	Encapsulate ""
	systemctl start pacman-init.service & Spinner "Initilizing pacman, please wait..."
	pacman -Sy --needed arch-install-scripts dialog & Spinner "Pulling dialog, please wait..."
	dmesg |grep efi: > /dev/null
	if [ "$?" == "1" ]; then
		if [ "${eficomputer}" != "1" ]; then
			eficomputer=0
		fi
	else
		eficomputer=1
		if [ "${efimode}" == "" ]; then
			efimode=1
		fi
	fi
	cat << EOF > dialog.archfi
use_shadow = OFF
title_color = (BLACK,WHITE,OFF)
button_label_active_color = (WHITE,BLUE,ON)
button_label_inactive_color = (BLACK,WHITE,OFF)
tag_color = (BLACK,WHITE,OFF)
tag_selected_color = (WHITE,BLUE,ON)
tag_key_color = (BLACK,WHITE,OFF)
tag_key_selected_color = (WHITE,BLUE,ON)
check_color = tag_color
check_selected_color = tag_selected_color
EOF
	export DIALOGRC="dialog.archfi"
	loadstrings
	EDITOR=nano
	mainmenu
	rm dialog.archfi
fi

exit 0
# --------------------------------------------------------
