aboutsummaryrefslogtreecommitdiffstats
path: root/archfi
diff options
context:
space:
mode:
Diffstat (limited to 'archfi')
-rwxr-xr-xarchfi1147
1 files changed, 1147 insertions, 0 deletions
diff --git a/archfi b/archfi
new file mode 100755
index 0000000..f2bc998
--- /dev/null
+++ b/archfi
@@ -0,0 +1,1147 @@
+#!/bin/bash
+
+# Arch Linux Fast Install (archfi)
+# --------------------------------
+# author : matmoul[@sourceforge.net]
+# project : http://sourceforge.net/projects/archfi
+# license : GPLv3 (http://opensource.org/licenses/GPL-3.0)
+#
+# referance : https://wiki.archlinux.org/index.php/Installation_guide
+
+
+apptitle="Arch Linux Fast Install (archfi) - Version: 2015.06.28.20.37.40 (GPLv3)"
+baseurl=https://raw.githubusercontent.com/MatMoul/archfi/master
+
+
+
+# --------------------------------------------------------
+mainmenu(){
+ if [ "$1" = "" ]; then
+ nextitem="."
+ else
+ nextitem=$1
+ fi
+ options=()
+ options+=("$txtlanguage" "")
+ options+=("$txtsetkeymap" "(loadkeys ...)")
+ options+=("$txtdiskpartmenu" "")
+ options+=("$txtselectpartsmenu" "")
+ options+=("" "")
+ options+=("$txthelp" "")
+ options+=("$txtchangelog" "")
+ options+=("" "")
+ options+=("$txtreboot" "")
+ sel=$(whiptail --backtitle "$apptitle" --title "$txtmainmenu" --menu "" --cancel-button "Exit" --default-item "$nextitem" 0 0 0 \
+ "${options[@]}" \
+ 3>&1 1>&2 2>&3)
+ if [ "$?" = "0" ]; then
+ case $sel in
+ "$txtlanguage")
+ chooselanguage
+ nextitem="$txtsetkeymap"
+ ;;
+ "$txtsetkeymap")
+ setkeymap
+ 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+=("English" "(By MatMoul)")
+ options+=("French" "(By MatMoul)")
+ sel=$(whiptail --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')
+ #if [ "$learning" = "1" ]; then
+ # eval $(curl -L $baseurl/learn/$sel | sed '/^#/ d')
+ #fi
+ fi
+ fi
+}
+
+setkeymap(){
+ learn setkeymap
+ items=$(localectl list-keymaps)
+ options=()
+ for item in $items; do
+ options+=("$item" "")
+ done
+ keymap=$(whiptail --backtitle "$apptitle" --title "$txtsetkeymap" --menu "" 0 0 0 \
+ "${options[@]}" \
+ 3>&1 1>&2 2>&3)
+ if [ "$?" = "0" ]; then
+ clear
+ loadkeys $keymap
+ fi
+}
+
+help(){
+ msg=""
+ msg=$msg"Command arguments :\n"
+ msg=$msg" -h --help : Show this help message\n"
+ msg=$msg" -l --learning : Show learning messages for each operations.\n"
+ msg=$msg"\n"
+ whiptail --backtitle "$apptitle" --title "$txthelp" --msgbox "$msg" 0 0
+}
+
+showchangelog(){
+ clear
+ curl -L $baseurl/CHANGELOG > ~/archfi-CHANGELOG
+ less ~/archfi-CHANGELOG
+ rm ~/archfi-CHANGELOG
+}
+
+rebootpc(){
+ if (whiptail --backtitle "$apptitle" --title "$txtreboot" --yesno "$txtreboot ?" --defaultno 0 0) then
+ learn reboot
+ clear
+ reboot
+ fi
+}
+# --------------------------------------------------------
+
+
+
+# --------------------------------------------------------
+diskpartmenu(){
+ if [ "$1" = "" ]; then
+ learn diskpart
+ nextitem="."
+ else
+ nextitem=$1
+ fi
+ options=()
+ if [ "$eficomputer" == "0" ]; then
+ options+=("$txtautoparts (gpt)" "")
+ options+=("$txtautoparts (dos)" "")
+ options+=("$txtautoparts (gpt,efi)" "")
+ options+=("$txtautoparts (gpt,bios+efi,noswap)" "")
+ 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=$(whiptail --backtitle "$apptitle" --title "$txtdiskpartmenu" --menu "" --cancel-button "Back" --default-item "$nextitem" 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(){
+ learn diskpartautodos
+ items=$(lsblk -d -p -n -l -o NAME -e 7,11)
+ options=()
+ for item in $items; do
+ options+=("$item" "")
+ done
+ device=$(whiptail --backtitle "$apptitle" --title "$txtautoparts (dos)" --menu "" 0 0 0 \
+ "${options[@]}" \
+ 3>&1 1>&2 2>&3)
+ if [ "$?" = "0" ]; then
+ if (whiptail --backtitle "$apptitle" --title "$txtautoparts (dos)" --yesno "${txtautopartsconfirm//%1/$device}" --defaultno 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
+ bootdev=$device"1"
+ swapdev=$device"2"
+ rootdev=$device"3"
+ efimode="0"
+ fi
+ fi
+}
+
+diskpartautogpt(){
+ learn diskpartautogpt
+ items=$(lsblk -d -p -n -l -o NAME -e 7,11)
+ options=()
+ for item in $items; do
+ options+=("$item" "")
+ done
+ device=$(whiptail --backtitle "$apptitle" --title "$txtautoparts (gpt)" --menu "" 0 0 0 \
+ "${options[@]}" \
+ 3>&1 1>&2 2>&3)
+ if [ "$?" = "0" ]; then
+ if (whiptail --backtitle "$apptitle" --title "$txtautoparts (gpt)" --yesno "${txtautopartsconfirm//%1/$device}" --defaultno 0 0) then
+ clear
+ echo "$txtautopartclear"
+ parted $device mklabel gpt
+ echo "${txtautopartcreate//%1/BIOS boot}"
+ sgdisk $device -n=1:0:+31M -t=1:ef02
+ echo "${txtautopartcreate//%1/boot}"
+ sgdisk $device -n=2:0:+512M
+ 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
+ echo "${txtautopartcreate//%1/root}"
+ sgdisk $device -n=4:0:0
+ echo ""
+ pressanykey
+ bootdev=$device"2"
+ swapdev=$device"3"
+ rootdev=$device"4"
+ efimode="0"
+ fi
+ fi
+}
+
+diskpartautoefi(){
+ learn diskpartautoefi
+ items=$(lsblk -d -p -n -l -o NAME -e 7,11)
+ options=()
+ for item in $items; do
+ options+=("$item" "")
+ done
+ device=$(whiptail --backtitle "$apptitle" --title "$txtautoparts (gpt,efi)" --menu "" 0 0 0 \
+ "${options[@]}" \
+ 3>&1 1>&2 2>&3)
+ if [ "$?" = "0" ]; then
+ if (whiptail --backtitle "$apptitle" --title "$txtautoparts (gpt,efi)" --yesno "${txtautopartsconfirm//%1/$device}" --defaultno 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/swap}"
+ swapsize=$(cat /proc/meminfo | grep MemTotal | awk '{ print $2 }')
+ swapsize=$(($swapsize/1000))"M"
+ sgdisk $device -n=3:0:+$swapsize -t=3:8200
+ echo "${txtautopartcreate//%1/root}"
+ sgdisk $device -n=4:0:0
+ echo ""
+ pressanykey
+ bootdev=$device"1"
+ swapdev=$device"3"
+ rootdev=$device"4"
+ efimode="1"
+ fi
+ fi
+}
+
+diskpartautoefiusb(){
+ learn diskpartautoefiusb
+ items=$(lsblk -d -p -n -l -o NAME -e 7,11)
+ options=()
+ for item in $items; do
+ options+=("$item" "")
+ done
+ device=$(whiptail --backtitle "$apptitle" --title "$txtautoparts (gpt,efi)" --menu "" 0 0 0 \
+ "${options[@]}" \
+ 3>&1 1>&2 2>&3)
+ if [ "$?" = "0" ]; then
+ if (whiptail --backtitle "$apptitle" --title "$txtautoparts (gpt,efi)" --yesno "${txtautopartsconfirm//%1/$device}" --defaultno 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=3:0:+31M -t=3:ef02
+ echo "${txtautopartcreate//%1/root}"
+ sgdisk $device -n=4:0:0
+ echo "$txthybridpartcreate"
+ echo -e "r\nh\n3\nN\n\nY\nN\nw\nY\n" | gdisk $device
+ echo ""
+ pressanykey
+ bootdev=$device"1"
+ swapdev=
+ rootdev=$device"4"
+ efimode="2"
+ fi
+ fi
+}
+
+diskpartcfdisk(){
+ learn diskpartcfdisk
+ items=$(lsblk -d -p -n -l -o NAME -e 7,11)
+ options=()
+ for item in $items; do
+ options+=("$item" "")
+ done
+ device=$(whiptail --backtitle "$apptitle" --title "$txteditparts (cfdisk)" --menu "" 0 0 0 \
+ "${options[@]}" \
+ 3>&1 1>&2 2>&3)
+ if [ "$?" = "0" ]; then
+ clear
+ cfdisk $device
+ fi
+}
+
+diskpartcgdisk(){
+ learn diskpartcgdisk
+ items=$(lsblk -d -p -n -l -o NAME -e 7,11)
+ options=()
+ for item in $items; do
+ options+=("$item" "")
+ done
+ device=$(whiptail --backtitle "$apptitle" --title "$txteditparts (cfdisk)" --menu "" 0 0 0 \
+ "${options[@]}" \
+ 3>&1 1>&2 2>&3)
+ if [ "$?" = "0" ]; then
+ clear
+ cgdisk $device
+ fi
+}
+# --------------------------------------------------------
+
+
+
+# --------------------------------------------------------
+selectparts(){
+ learn selectparts
+
+ items=$(lsblk -p -n -l -o NAME -e 7,11)
+ options=()
+ for item in $items; do
+ options+=("$item" "")
+ done
+
+ bootdev=$(whiptail --backtitle "$apptitle" --title "$txtselectpartsmenu" --menu "${txtselectdevice//%1/boot}" --default-item "$bootdev" 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=$(whiptail --backtitle "$apptitle" --title "$txtselectpartsmenu" --menu "${txtselectdevice//%1/swap}" --default-item "$swapdev" 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=$(whiptail --backtitle "$apptitle" --title "$txtselectpartsmenu" --menu "${txtselectdevice//%1/root}" --default-item "$rootdev" 0 0 0 \
+ "${options[@]}" \
+ 3>&1 1>&2 2>&3)
+ if [ ! "$?" = "0" ]; then
+ return 1
+ fi
+
+ homedev=$(whiptail --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 (whiptail --backtitle "$apptitle" --title "$txtselectpartsmenu" --yesno "$msg" 0 0) then
+ mountmenu
+ fi
+}
+# --------------------------------------------------------
+
+
+
+# --------------------------------------------------------
+mountmenu(){
+ if [ "$1" = "" ]; then
+ nextitem="."
+ else
+ nextitem=$1
+ fi
+ options=()
+ options+=("$txtformatdevices" "")
+ options+=("$txtmount" "$txtmountdesc")
+ sel=$(whiptail --backtitle "$apptitle" --title "$txtformatmountmenu" --menu "" --cancel-button "Back" --default-item "$nextitem" 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 (whiptail --backtitle "$apptitle" --title "$txtformatdevices" --yesno "$txtformatdeviceconfirm" --defaultno 0 0) then
+ if [ ! "$bootdev" = "" ]; then
+ formatbootdevice boot $bootdev
+ fi
+ if [ ! "$swapdev" = "" ]; then
+ formatswapdevice
+ fi
+ formatdevice root $rootdev
+ if [ ! "$homedev" = "" ]; then
+ formatdevice home $homedev
+ fi
+ fi
+}
+formatbootdevice(){
+ learn 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=$(whiptail --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) mkfs.ext2 $2;;
+ ext3) mkfs.ext3 $2;;
+ ext4) mkfs.ext4 $2;;
+ fat32) mkfs.fat $2;;
+ esac
+ echo ""
+ pressanykey
+}
+formatswapdevice(){
+ learn formatswapdevice
+ clear
+ echo "${txtformatingpart//%1/$swapdev} swap"
+ echo "----------------------------------------------"
+ mkswap $swapdev
+ echo ""
+ pressanykey
+}
+formatdevice(){
+ learn formatdevice
+ options=()
+ options+=("btrfs" "")
+ options+=("reiserfs" "")
+ options+=("ext4" "")
+ options+=("ext3" "")
+ options+=("ext2" "")
+ options+=("xfs" "")
+ options+=("jfs" "")
+ sel=$(whiptail --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) mkfs.btrfs -f $2;;
+ reiserfs) mkfs.reiserfs -f $2;;
+ ext4) mkfs.ext4 $2;;
+ ext3) mkfs.ext3 $2;;
+ ext2) mkfs.ext2 $2;;
+ xfs) mkfs.xfs -f $2;;
+ jfs) mkfs.jfs -f $2;;
+ esac
+ echo ""
+ pressanykey
+}
+
+mountparts(){
+ learn mountparts
+ clear
+ echo "Mounting to /mnt ..."
+ echo "-----------------"
+ echo "mount $rootdev /mnt"
+ mount $rootdev /mnt
+ mkdir /mnt/{boot,home}
+ 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+=("$txteditmirrorlist" "($txtoptional)")
+ options+=("$txtinstallarchlinux" "pacstrap base")
+ options+=("$txtconfigarchlinux" "")
+ sel=$(whiptail --backtitle "$apptitle" --title "$txtinstallmenu" --menu "" --cancel-button "Unmount" --default-item "$nextitem" 0 0 0 \
+ "${options[@]}" \
+ 3>&1 1>&2 2>&3)
+ if [ "$?" = "0" ]; then
+ case $sel in
+ "$txteditmirrorlist")
+ nano /etc/pacman.d/mirrorlist
+ nextitem="$txtinstallarchlinux"
+ ;;
+ "$txtinstallarchlinux")
+ installbase
+ nextitem="$txtconfigarchlinux"
+ ;;
+ "$txtconfigarchlinux")
+ archmenu
+ nextitem="$txtconfigarchlinux"
+ ;;
+ esac
+ installmenu "$nextitem"
+ else
+ unmountdevices
+ fi
+}
+
+installbase(){
+ learn installbase
+ clear
+ pacstrap /mnt base
+}
+
+unmountdevices(){
+ learn 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+=("$txtsetlocale" "/etc/locale.conf, /etc/locale.gen")
+ options+=("$txtsettime" "/etc/localtime")
+ options+=("$txtsetrootpassword" "")
+ options+=("${txtgenerate//%1/fstab}" "")
+ options+=("${txtedit//%1/fstab}" "($txtoptional)")
+ options+=("${txtedit//%1/mkinitcpio.conf}" "($txtoptional)")
+ options+=("${txtedit//%1/mirrorlist}" "($txtoptional)")
+ options+=("${txtinstall//%1/grub}" "pacstrap grub (os-prober), grub-mkconfig")
+ options+=("${txtedit//%1/grub}" "($txtoptional)")
+ options+=("${txtinstall//%1/bootloader}" "grub-install")
+ options+=("${txtenable//%1/dhcpcd}" "systemctl enable dhcpd")
+ options+=("archdi" "$txtarchdidesc")
+ sel=$(whiptail --backtitle "$apptitle" --title "$txtarchinstallmenu" --menu "" --cancel-button "Back" --default-item "$nextitem" 0 0 0 \
+ "${options[@]}" \
+ 3>&1 1>&2 2>&3)
+ if [ "$?" = "0" ]; then
+ case $sel in
+ "$txtsethostname")
+ archsethostname
+ nextitem="$txtsetkeymap"
+ ;;
+ "$txtsetkeymap")
+ archsetkeymap
+ nextitem="$txtsetlocale"
+ ;;
+ "$txtsetlocale")
+ archsetlocale
+ nextitem="$txtsettime"
+ ;;
+ "$txtsettime")
+ archsettime
+ nextitem="$txtsetrootpassword"
+ ;;
+ "$txtsetrootpassword")
+ archsetrootpassword
+ nextitem="${txtgenerate//%1/fstab}"
+ ;;
+ "${txtgenerate//%1/fstab}")
+ archgenfstab
+ nextitem="${txtinstall//%1/grub}"
+ ;;
+ "${txtedit//%1/fstab}")
+ nano /mnt/etc/fstab
+ nextitem="${txtedit//%1/fstab}"
+ ;;
+ "${txtedit//%1/mkinitcpio.conf}")
+ archeditmkinitcpio
+ nextitem="${txtedit//%1/mkinitcpio.conf}"
+ ;;
+ "${txtedit//%1/mirrorlist}")
+ nano /mnt/etc/pacman.d/mirrorlist
+ nextitem="${txtedit//%1/mirrorlist}"
+ ;;
+ "${txtinstall//%1/grub}")
+ archinstallgrub
+ nextitem="${txtinstall//%1/bootloader}"
+ ;;
+ "${txtedit//%1/grub}")
+ nano /mnt/etc/default/grub
+ if (whiptail --backtitle "$apptitle" --title "${txtedit//%1/grub}" --yesno "$txtrungrubmakeconfig" 0 0) then
+ clear
+ archchroot installgrub
+ pressanykey
+ fi
+ nextitem="${txtinstall//%1/bootloader}"
+ ;;
+ "${txtinstall//%1/bootloader}")
+ archinstallbootloader
+ nextitem="${txtenable//%1/dhcpcd}"
+ ;;
+ "${txtenable//%1/dhcpcd}")
+ archenabledhcpcd
+ nextitem="archdi"
+ ;;
+ "archdi")
+ installarchdi
+ nextitem="archdi"
+ ;;
+ esac
+ archmenu "$nextitem"
+ fi
+}
+
+archchroot(){
+ cp $0 /mnt/root
+ chmod 755 /mnt/root/$(basename "$0")
+ if [ "$learning" = "1" ]; then
+ arch-chroot /mnt /root/$(basename "$0") --chroot $1 $2 --learning
+ else
+ arch-chroot /mnt /root/$(basename "$0") --chroot $1 $2
+ fi
+ rm /mnt/root/$(basename "$0")
+}
+
+
+archsethostname(){
+ learn archsethostname
+ hostname=$(whiptail --backtitle "$apptitle" --title "$txtsethostname" --inputbox "" 0 0 "localhost" 3>&1 1>&2 2>&3)
+ if [ "$?" = "0" ]; then
+ echo "$hostname" > /mnt/etc/hostname
+ fi
+}
+
+archsetkeymap(){
+ learn archsetkeymap
+ items=$(localectl list-keymaps)
+ options=()
+ for item in $items; do
+ options+=("$item" "")
+ done
+ keymap=$(whiptail --backtitle "$apptitle" --title "$txtsetkeymap" --menu "" 0 0 0 \
+ "${options[@]}" \
+ 3>&1 1>&2 2>&3)
+ if [ "$?" = "0" ]; then
+ echo "KEYMAP=$keymap" > /mnt/etc/vconsole.conf
+ #echo "FONT=lat9w-16" >> /mnt/etc/vconsole.conf
+ fi
+}
+
+archsetlocale(){
+ learn archsetlocale
+ items=$(ls /usr/share/i18n/locales)
+ options=()
+ for item in $items; do
+ options+=("$item" "")
+ done
+ locale=$(whiptail --backtitle "$apptitle" --title "$txtsetlocale" --menu "" 0 0 0 \
+ "${options[@]}" \
+ 3>&1 1>&2 2>&3)
+ if [ "$?" = "0" ]; then
+ clear
+ echo "LANG=$locale.UTF-8" > /mnt/etc/locale.conf
+ echo "LC_COLLATE=C" >> /mnt/etc/locale.conf
+ sed -i '/'$locale'.UTF-8/s/^#//g' /mnt/etc/locale.gen
+ archchroot setlocale
+ fi
+}
+archsetlocalechroot(){
+ locale-gen
+ exit
+}
+
+archsettime(){
+ learn archsettime
+ items=$(ls -l /mnt/usr/share/zoneinfo/ | grep '^d' | awk '{ print $9 }')
+ options=()
+ for item in $items; do
+ options+=("$item" "")
+ done
+
+ timezone=$(whiptail --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/$(whiptail --backtitle "$apptitle" --title "$txtsettime" --menu "" 0 0 0 \
+ "${options[@]}" \
+ 3>&1 1>&2 2>&3)
+ if [ ! "$?" = "0" ]; then
+ return 1
+ fi
+
+ ln -sf /usr/share/zoneinfo/$timezone /mnt/etc/localtime
+
+ if (whiptail --backtitle "$apptitle" --title "$txtsettime" --yesno "$txtuseutcclock" 0 0) then
+ clear
+ archchroot settimeutc
+ else
+ clear
+ archchroot settimelocal
+ fi
+
+}
+archsettimeutcchroot(){
+ hwclock --systohc --utc
+ exit
+}
+archsettimelocalchroot(){
+ hwclock --systohc --localtime
+ exit
+}
+
+archsetrootpassword(){
+ learn archsetrootpassword
+ clear
+ echo "$txtsetrootpassword :"
+ echo ""
+ archchroot setrootpassword
+ pressanykey
+}
+archsetrootpasswordchroot(){
+ passwd root
+ exit
+}
+
+archgenfstab(){
+ learn archgenfstab
+ clear
+ genfstab -U -p /mnt >> /mnt/etc/fstab
+}
+
+archeditmkinitcpio(){
+ nano /mnt/etc/mkinitcpio.conf
+ if (whiptail --backtitle "$apptitle" --title "${txtedit//%1/mkinitcpio.conf}" --yesno "${txtgenerate//%1/mkinitcpio} ?" 0 0) then
+ clear
+ archchroot genmkinitcpio
+ pressanykey
+ fi
+}
+archgenmkinitcpiochroot(){
+ mkinitcpio -p linux
+ exit
+}
+
+archinstallgrub(){
+ learn archinstallgrub
+ clear
+ pacstrap /mnt grub
+
+ if (whiptail --backtitle "$apptitle" --title "${txtinstall//%1/grub}" --yesno "$txtinstallosprober" --defaultno 0 0) then
+ clear
+ pacstrap /mnt os-prober
+ fi
+
+ if [ "$efimode" = "1" ]||[ "$efimode" = "2" ]; then
+ if (whiptail --backtitle "$apptitle" --title "${txtinstall//%1/efibootmgr}" --yesno "$txtefibootmgr" 0 0) then
+ clear
+ pacstrap /mnt efibootmgr
+ fi
+ else
+ if (whiptail --backtitle "$apptitle" --title "${txtinstall//%1/efibootmgr}" --yesno "$txtefibootmgr" --defaultno 0 0) then
+ clear
+ pacstrap /mnt efibootmgr
+ fi
+ fi
+
+ clear
+ archchroot installgrub
+}
+archinstallgrubchroot(){
+ grub-mkconfig -o /boot/grub/grub.cfg
+ exit
+}
+
+archinstallbootloader(){
+ learn archinstallbootloader
+
+ items=$(lsblk -d -p -n -l -o NAME -e 7,11)
+ options=()
+ for item in $items; do
+ options+=("$item" "")
+ done
+ device=$(whiptail --backtitle "$apptitle" --title "${txtinstall//%1/bootloader}" --menu "" 0 0 0 \
+ "${options[@]}" \
+ 3>&1 1>&2 2>&3)
+ if [ "$?" = "0" ]; 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=$(whiptail --backtitle "$apptitle" --title "${txtinstall//%1/bootloader}" --menu "" --cancel-button "Back" 0 0 0 \
+ "${options[@]}" \
+ 3>&1 1>&2 2>&3)
+ if [ "$?" = "0" ]; then
+ clear
+ case $sel in
+ "BIOS") archchroot installbootloader $device;;
+ "EFI") archchroot installbootloaderefi $device;;
+ "BIOS+EFI") archchroot installbootloaderefiusb $device;;
+ esac
+ pressanykey
+ fi
+ fi
+}
+archinstallbootloaderchroot(){
+ if [ ! "$1" = "none" ]; then
+ grub-install --target=i386-pc --recheck $1
+ fi
+ exit
+}
+archinstallbootloaderefichroot(){
+ if [ ! "$1" = "none" ]; then
+ grub-install --target=x86_64-efi --efi-directory=/boot --recheck $1
+ fi
+ exit
+}
+archinstallbootloaderefiusbchroot(){
+ if [ ! "$1" = "none" ]; then
+ grub-install --target=i386-pc --recheck $1
+ grub-install --target=x86_64-efi --efi-directory=/boot --removable --recheck $1
+ fi
+ exit
+}
+
+archenabledhcpcd(){
+ learn archenabledhcpcd
+ if (whiptail --backtitle "$apptitle" --title "${txtenable//%1/dhcpcd}" --yesno "${txtenable//%1/dhcpcd} ?" 0 0) then
+ clear
+ archchroot enabledhcpcd
+ fi
+}
+archenabledhcpcdchroot(){
+ systemctl enable dhcpcd
+ exit
+}
+
+installarchdi(){
+ if(whiptail --backtitle "$apptitle" --title "archdi" --yesno "$txtinstallarchdi" 0 0) then
+ clear
+ pacstrap /mnt wget libnewt
+ fi
+ if [ "$?" = "0" ]; then
+ options=()
+ options+=("$txtarchdiinstallandlaunch" "")
+ options+=("$txtarchdilaunch" "")
+ options+=("$txtarchdiinstall" "")
+ sel=$(whiptail --backtitle "$apptitle" --title "$txtarchdimenu" --menu "" --cancel-button "Back" 0 0 0 \
+ "${options[@]}" \
+ 3>&1 1>&2 2>&3)
+ if [ "$?" = "0" ]; then
+ case $sel in
+ "$txtarchdiinstallandlaunch") archchroot archdiinstallandlaunch;;
+ "$txtarchdilaunch") archchroot archdilaunch;;
+ "$txtarchdiinstall") archchroot archdiinstall;;
+ esac
+ fi
+ fi
+}
+archdiinstallandlaunchchroot(){
+ cd
+ curl -L archdi.sourceforge.net/archdi >archdi
+ sh archdi -i
+ archdi --chroot
+ exit
+}
+archdilaunchchroot(){
+ cd
+ curl -L archdi.sourceforge.net/archdi >archdi
+ sh archdi --chroot
+ rm archdi
+ exit
+}
+archdiinstallchroot(){
+ cd
+ curl -L archdi.sourceforge.net/archdi >archdi
+ sh archdi -i
+ exit
+}
+# --------------------------------------------------------
+
+
+
+# --------------------------------------------------------
+pressanykey(){
+ read -n1 -p "$txtpressanykey"
+}
+
+loadstrings(){
+ txtmainmenu="Main Menu"
+ txtlanguage="Language"
+ txtsetkeymap="Set Keyboard Layout"
+ 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"
+ 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"
+
+ txtinstallmenu="Install Menu"
+
+ txtarchinstallmenu="Arch Install Menu"
+ txtrungrubmakeconfig="Run grub-mkconfig ?"
+
+ txteditmirrorlist="Edit mirrorlist"
+ txtinstallarchlinux="Install Arch Linux"
+ txtconfigarchlinux="Config Arch Linux"
+
+ txtsethostname="Set Computer Name"
+ txtsetlocale="Set Locale"
+ txtsettime="Set Time"
+ txtsetrootpassword="Set root password"
+
+ txtuseutcclock="Use UTC hardware clock ?"
+
+ 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."
+
+ txtinstallosprober="os-prober is a good solution if you want to use mutli-boot.\nInstall os-prober ?"
+ txtefibootmgr="efibootmgr is required for efi computer."
+
+ 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.\n\nArch Linux Desktop Install as two dependencies : wget and libnewt.\n\npacstrap wget libnewt ?"
+ txtarchdiinstallandlaunch="Install and run archdi"
+ txtarchdiinstall="Install archdi"
+ txtarchdilaunch="Launch archdi"
+
+ if [ "$learning" = "1" ]; then
+ eval $(curl -L $baseurl/learn/English | sed '/^#/ d')
+ fi
+}
+
+learn(){
+ if [ "$learning" = "1" ]; then
+ clear
+ eval 'echo -e ""${learn'"$1}"""
+ echo ""
+ pressanykey
+ fi
+}
+# --------------------------------------------------------
+
+
+
+# --------------------------------------------------------
+while (( "$#" )); do
+ case $1 in
+ -h|--help) help
+ exit 0;;
+ -l|--learning) learning=1;;
+ --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;;
+ 'installgrub') archinstallgrubchroot;;
+ 'installbootloader') archinstallbootloaderchroot $args;;
+ 'installbootloaderefi') archinstallbootloaderefichroot $args;;
+ 'installbootloaderefiusb') archinstallbootloaderefiusbchroot $args;;
+ 'archdiinstallandlaunch') archdiinstallandlaunchchroot;;
+ 'archdiinstall') archdiinstallchroot;;
+ 'archdilaunch') archdilaunchchroot;;
+ esac
+else
+ pacman -S --needed arch-install-scripts wget libnewt
+ dmesg |grep efi: > /dev/null
+ if [ "$?" == "1" ]; then
+ eficomputer=0
+ else
+ eficomputer=1
+ efimode=1
+ fi
+ loadstrings
+ mainmenu
+fi
+
+exit 0
+# --------------------------------------------------------