Add wm and login setup dialogs

This commit is contained in:
natemaia 2018-08-12 21:24:38 -07:00
parent 01c58d6dd4
commit dd36a8bb67
2 changed files with 203 additions and 128 deletions

View File

@ -1,4 +1,4 @@
#!/usr/bin/env bash #!/usr/bin/bash
# vim:ft=sh:fdm=marker:fmr={,} # vim:ft=sh:fdm=marker:fmr={,}
@ -15,9 +15,9 @@
# immutable variables { # immutable variables {
readonly DIST="Archlabs" # Linux distributor readonly DIST="Archlabs" # Linux distributor
readonly VER="1.6.19" # Installer version readonly VER="1.6.26" # Installer version
readonly LIVE="liveuser" # Live session user readonly LIVE="liveuser" # Live session user
readonly TRN="/installer" # Translation path readonly TRN="/usr/share/archlabs-installer" # Translation path
readonly MNT="/mnt/install" # Install mountpoint readonly MNT="/mnt/install" # Install mountpoint
readonly ERR="/tmp/errlog" # Built-in error log readonly ERR="/tmp/errlog" # Built-in error log
@ -75,10 +75,10 @@ declare -Agr BOOTLOADERS=(
) )
# static mkfs commands for each filesystem offered # static mkfs commands for each filesystem offered
declare -Agr FS_CMDS=( declare -Agr FS_CMDS=(
[btrfs]="mkfs.btrfs -f" [ext2]="mkfs.ext2 -q" [ext3]="mkfs.ext3 -q" [ext2]="mkfs.ext2 -q" [ext3]="mkfs.ext3 -q" [ext4]="mkfs.ext4 -q"
[ext4]="mkfs.ext4 -q" [f2fs]="mkfs.f2fs" [jfs]="mkfs.jfs -q" [f2fs]="mkfs.f2fs" [jfs]="mkfs.jfs -q" [xfs]="mkfs.xfs -f"
[xfs]="mkfs.xfs -f" [ntfs]="mkfs.ntfs -q" [reiserfs]="mkfs.reiserfs -q" [ntfs]="mkfs.ntfs -q" [reiserfs]="mkfs.reiserfs -q" [vfat]="mkfs.vfat -F32"
[vfat]="mkfs.vfat -F32" [nilfs2]="mkfs.nilfs2 -q" [nilfs2]="mkfs.nilfs2 -q"
) )
# static filesystem mount options # static filesystem mount options
declare -Agr FS_OPTS=( declare -Agr FS_OPTS=(
@ -88,10 +88,6 @@ declare -Agr FS_OPTS=(
[reiserfs]="acl - off nolog - off notail - off replayonly - off user_xattr - off" [reiserfs]="acl - off nolog - off notail - off replayonly - off user_xattr - off"
[xfs]="discard - off filestreams - off ikeep - off largeio - off noalign - off nobarrier - off norecovery - off noquota - off wsync - off" [xfs]="discard - off filestreams - off ikeep - off largeio - off noalign - off nobarrier - off norecovery - off noquota - off wsync - off"
[nilfs2]="discard - off nobarrier - off errors=continue - off errors=panic - off order=relaxed - off order=strict - off norecovery - off" [nilfs2]="discard - off nobarrier - off errors=continue - off errors=panic - off order=relaxed - off order=strict - off norecovery - off"
[btrfs]="autodefrag - off compress=zlib - off compress=lzo - off compress=no - off
compress-force=zlib - off compress-force=lzo - off discard - off noacl - off noatime - off
nodatasum - off nospace_cache - off recovery - off skip_balance - off space_cache - off
ssd - off ssd_spread - off"
[f2fs]="data_flush - off disable_roll_forward - off disable_ext_identify - off [f2fs]="data_flush - off disable_roll_forward - off disable_ext_identify - off
discard - off fastboot - off flush_merge - off inline_xattr - off inline_data - off discard - off fastboot - off flush_merge - off inline_xattr - off inline_data - off
inline_dentry - off no_heap - off noacl - off nobarrier - off noextent_cache - off inline_dentry - off no_heap - off noacl - off nobarrier - off noextent_cache - off
@ -130,12 +126,19 @@ initialize_variables() {
declare -g USER_PASS="" declare -g USER_PASS=""
declare -g ROOT_PASS="" declare -g ROOT_PASS=""
declare -g LOGIN_WM=""
declare -g LOGIN_TYPE=""
declare -g INSTALL_WMS=""
declare -g WM_PACKAGES=""
declare -g EXTRA_PACKAGES=""
declare -g CURRENT_MENU="main" declare -g CURRENT_MENU="main"
declare -g MENU_HIGHLIGHT=0 declare -g MENU_HIGHLIGHT=0
declare -g EDITOR_CHOICE="" declare -g EDITOR_CHOICE=""
declare -g MIRROR_CMD="reflector --score 100 -l 50 -f 10 --sort rate" declare -g MIRROR_CMD="reflector --score 100 -l 50 -f 10 --sort rate"
# boolean checks # boolean checks
declare -g AUTOLOGIN=false
declare -g FIRST_PREP=false declare -g FIRST_PREP=false
declare -g FIRST_CONFIG=false declare -g FIRST_CONFIG=false
declare -g UNPACKED_BASE=false declare -g UNPACKED_BASE=false
@ -157,15 +160,15 @@ initialize_variables() {
# files able to be reviewed when finishing install # files able to be reviewed when finishing install
# item index [8] can change depending on which bootloader is selected # item index [8] can change depending on which bootloader is selected
declare -Ag EDIT_FILES=( declare -Ag EDIT_FILES=(
[1]="/etc/X11/xorg.conf.d/00-keyboard.conf /etc/vconsole.conf /etc/default/keyboard" [2]="/etc/X11/xorg.conf.d/00-keyboard.conf /etc/vconsole.conf /etc/default/keyboard"
[2]="/etc/locale.conf /etc/default/locale" [3]="/etc/locale.conf /etc/default/locale"
[3]="/etc/hostname /etc/hosts" [4]="/etc/hostname /etc/hosts"
[4]="/etc/sudoers" [5]="/etc/sudoers"
[5]="/etc/mkinitcpio.conf" [6]="/etc/mkinitcpio.conf"
[6]="/etc/fstab" [7]="/etc/fstab"
[7]="/etc/crypttab" [8]="/etc/crypttab"
[8]="/etc/default/grub" [9]="/etc/default/grub"
[9]="/etc/pacman.conf" [10]="/etc/pacman.conf"
) )
} }
@ -194,7 +197,13 @@ set_debug() {
exec 3>| /tmp/debug-log exec 3>| /tmp/debug-log
BASH_XTRACEFD=3 BASH_XTRACEFD=3
[[ $DISPLAY ]] && { $TERM_CMD -e "tail -f /tmp/debug-log" & } if [[ $DISPLAY ]]; then
if [[ $TERM_CMD == 'st' ]]; then
$TERM_CMD -e tail -f /tmp/debug-log &
else
$TERM_CMD -e "tail -f /tmp/debug-log" &
fi
fi
} }
select_language() { select_language() {
@ -210,6 +219,7 @@ select_language() {
"9" "Magyar (hu_HU)" "10" "Chinese (zh_CN)") "9" "Magyar (hu_HU)" "10" "Chinese (zh_CN)")
source $TRN/english.trans 2>/dev/null source $TRN/english.trans 2>/dev/null
FONT="ter-i16n"
case $lang in case $lang in
1) LOC="en_US.UTF-8" ;; 1) LOC="en_US.UTF-8" ;;
@ -217,19 +227,20 @@ select_language() {
3) source $TRN/p_brasil.trans 2>/dev/null && LOC="pt_BR.UTF-8" ;; 3) source $TRN/p_brasil.trans 2>/dev/null && LOC="pt_BR.UTF-8" ;;
4) source $TRN/portuguese.trans 2>/dev/null && LOC="pt_PT.UTF-8" ;; 4) source $TRN/portuguese.trans 2>/dev/null && LOC="pt_PT.UTF-8" ;;
5) source $TRN/french.trans 2>/dev/null && LOC="fr_FR.UTF-8" ;; 5) source $TRN/french.trans 2>/dev/null && LOC="fr_FR.UTF-8" ;;
6) source $TRN/russian.trans 2>/dev/null && LOC="ru_RU.UTF-8" ;; 6) source $TRN/russian.trans 2>/dev/null && LOC="ru_RU.UTF-8" FONT="LatKaCyrHeb-14" ;;
7) source $TRN/italian.trans 2>/dev/null && LOC="it_IT.UTF-8" ;; 7) source $TRN/italian.trans 2>/dev/null && LOC="it_IT.UTF-8" ;;
8) source $TRN/dutch.trans 2>/dev/null && LOC="nl_NL.UTF-8" ;; 8) source $TRN/dutch.trans 2>/dev/null && LOC="nl_NL.UTF-8" ;;
9) source $TRN/hungarian.trans 2>/dev/null && LOC="hu_HU.UTF-8" ;; 9) source $TRN/hungarian.trans 2>/dev/null && LOC="hu_HU.UTF-8" FONT="lat2-16" ;;
10) source $TRN/chinese.trans 2>/dev/null && LOC="zh_CN.UTF-8" ;; 10) source $TRN/chinese.trans 2>/dev/null && LOC="zh_CN.UTF-8" ;;
*) clear; tput cnorm; exit 0 *) clear; tput cnorm
pgrep -f "$TERM_CMD -e tail" && pkill -f "$TERM_CMD -e tail"
exit 0
esac esac
sed -i "s/#en_US.UTF-8/en_US.UTF-8/" /etc/locale.gen sed -i "s/#en_US.UTF-8/en_US.UTF-8/" /etc/locale.gen
[[ $LOC != "en_US.UTF-8" ]] && sed -i "s/#${LOC}/${LOC}/" /etc/locale.gen [[ $LOC != "en_US.UTF-8" ]] && sed -i "s/#${LOC}/${LOC}/" /etc/locale.gen
locale-gen >/dev/null 2>&1 locale-gen >/dev/null 2>&1
setfont $FONT >/dev/null 2>&1
export LANG="$LOC" export LANG="$LOC"
} }
@ -254,24 +265,14 @@ identify_system() {
check_requirements() { check_requirements() {
declare -g HAS_NETWORK=false declare -g HAS_NETWORK=false
# I use some bashisms such as associative arrays, string manipulation, [[]], etc..
# these require a more up to date version of bash
[[ ${BASH_VERSION:0:1} -lt 4 ]] && { clear; echo "[ERROR]: Requires bash version >= 4.0"; tput cnorm; exit 1; }
# check for each command used in the script to ensure no problems
local miss=""
for cmd in awk sed grep uniq sort find ping rsync dialog arch-chroot reflector chpasswd parted mkfs lsblk; do
! hash $cmd >/dev/null 2>&1 && miss="${miss}$cmd "
done
[[ $miss != "" ]] && { clear; echo "[ERROR]: Missing dependencies: $miss"; tput cnorm; exit 1; }
if [[ $(whoami) != "root" ]]; then if [[ $(whoami) != "root" ]]; then
infobox "$_ErrTitle" "$_NotRoot\n$_Exit" ; clear; tput cnorm; exit 1 infobox "$_ErrTitle" "$_NotRoot\n$_Exit"; clear; tput cnorm
pgrep -f "$TERM_CMD -e tail" && pkill -f "$TERM_CMD -e tail"
exit 1
elif ! (ping -c 1 archlabslinux.com || ping -c 1 google.com || ping -c 1 bitbucket.org || ping -c 1 github.com || ping -c 1 sourceforge.net) >/dev/null 2>&1; then elif ! (ping -c 1 archlabslinux.com || ping -c 1 google.com || ping -c 1 bitbucket.org || ping -c 1 github.com || ping -c 1 sourceforge.net) >/dev/null 2>&1; then
if [[ $(systemctl is-active NetworkManager) == "active" ]] && hash nmtui >/dev/null 2>&1;then if [[ $(systemctl is-active NetworkManager) == "active" ]] && hash nmtui >/dev/null 2>&1;then
tput civis tput civis; nmtui
nmtui
fi fi
if (ping -c 1 archlabslinux.com || ping -c 1 google.com || ping -c 1 bitbucket.org || ping -c 1 github.com || ping -c 1 sourceforge.net) >/dev/null 2>&1; then if (ping -c 1 archlabslinux.com || ping -c 1 google.com || ping -c 1 bitbucket.org || ping -c 1 github.com || ping -c 1 sourceforge.net) >/dev/null 2>&1; then
@ -424,7 +425,8 @@ EOF
[[ $? != 0 || $map == "" ]] && return 1 [[ $? != 0 || $map == "" ]] && return 1
fi fi
echo "KEYMAP=$map" > /tmp/vconsole.conf setxkbmap $XKBMAP >/dev/null 2>&1
echo -e "KEYMAP=$map\nFONT=$FONT" >/tmp/vconsole.conf
return 0 return 0
} }
@ -566,7 +568,12 @@ user_input_values() {
} }
create_user() { create_user() {
if [[ $AUTOLOGIN == true && $LOGIN_TYPE == 'lightdm' ]]; then
local groups="rfkill,wheel,autologin,nopasswdlogin,network,lp,storage,power,video,audio,lp"
else
local groups="rfkill,wheel,autologin,network,lp,storage,power,video,audio,lp" local groups="rfkill,wheel,autologin,network,lp,storage,power,video,audio,lp"
fi
NEWUSER="" NEWUSER=""
user_input_values "$NEWUSER" || return 1 user_input_values "$NEWUSER" || return 1
@ -582,27 +589,27 @@ create_user() {
if [[ -e $MNT/home/$LIVE ]]; then if [[ -e $MNT/home/$LIVE ]]; then
# for first user created, swap the live user account # for first user created, swap the live user account
swap_livuser swap_livuser
chroot_cmd "mv -f /home/$LIVE /home/$NEWUSER" 2>$ERR chroot_cmd "mv -f /home/$LIVE /home/$NEWUSER" 2>$ERR
check_for_errors "mv -f /home/$LIVE /home/$NEWUSER" || return 1 check_for_errors "mv -f /home/$LIVE /home/$NEWUSER" || return 1
chroot_cmd "usermod -aG $groups $NEWUSER" 2>$ERR chroot_cmd "usermod -aG $groups $NEWUSER" 2>$ERR
check_for_errors "usermod -aG $groups $NEWUSER" || return 1 check_for_errors "usermod -aG $groups $NEWUSER" || return 1
else else
# create new user account # create new user account
chroot_cmd "useradd $NEWUSER -m -g users -G $groups -s /bin/zsh" 2>$ERR chroot_cmd "useradd $NEWUSER -m -g users -G $groups -s /bin/zsh" 2>$ERR
check_for_errors "useradd $NEWUSER -m -g users -G $groups -s /bin/zsh" || return 1 check_for_errors "useradd $NEWUSER -m -g users -G $groups -s /bin/zsh" || return 1
chroot_cmd "cp -rf /etc/skel/ /home/$NEWUSER" 2>$ERR chroot_cmd "cp -rf /etc/skel/ /home/$NEWUSER" 2>$ERR
check_for_errors "cp -rf /etc/skel/ /home/$NEWUSER" || return 1 check_for_errors "cp -rf /etc/skel/ /home/$NEWUSER" || return 1
fi fi
chroot_cmd "echo '$NEWUSER:$USER_PASS' | chpasswd" 2>$ERR chroot_cmd "echo '$NEWUSER:$USER_PASS' | chpasswd" 2>$ERR
check_for_errors "chpasswd $NEWUSER" || return 1 check_for_errors "chpasswd $NEWUSER" || return 1
chroot_cmd "chown -Rf $NEWUSER:users /home/$NEWUSER" 2>$ERR chroot_cmd "chown -Rf $NEWUSER:users /home/$NEWUSER" 2>$ERR
check_for_errors "chown -Rf $NEWUSER:users /home/$NEWUSER" || return 1 check_for_errors "chown -Rf $NEWUSER:users /home/$NEWUSER" || return 1
if [[ $AUTOLOGIN == true && $LOGIN_TYPE == 'lightdm' ]]; then
sed -i "/#autologin-user=/ c autologin-user=${NEWUSER}" $MNT/etc/lightdm/lightdm.conf
fi
fix_home_files fix_home_files
if [[ $UNPACKED_BASE == true && $TIMEZONE_SET == true ]]; then if [[ $UNPACKED_BASE == true && $TIMEZONE_SET == true ]]; then
@ -613,50 +620,86 @@ create_user() {
} }
swap_livuser() { swap_livuser() {
local openbx="$MNT/home/$LIVE/.config/openbox" # edit the required files in /etc/ to swap the liveuser account name
sed -i "s/${LIVE}/${NEWUSER}/g" $MNT/etc/{group,gshadow,passwd,shadow}
# due to changes in systemd and arch the recommended file override location has changed if [[ $AUTOLOGIN != true || $LOGIN_TYPE == 'lightdm' ]]; then
# check for each location used in recent versions rm -rf $MNT/etc/systemd/system/getty@tty1.service.d >/dev/null 2>&1
local tty_autologin elif [[ $AUTOLOGIN == true && $LOGIN_TYPE != 'lightdm' ]]; then
if [[ -e $MNT/etc/systemd/system/autologin@.service ]]; then sed -i "s/${LIVE}/${NEWUSER}/g" $MNT/etc/systemd/system/getty@tty1.service.d/autologin.conf
tty_autologin="systemd/system/autologin@.service"
elif [[ -e $MNT/etc/systemd/system/getty@tty1.service.d/override.conf ]]; then
tty_autologin="systemd/system/getty@tty1.service.d/override.conf"
elif [[ -e $MNT/etc/systemd/system/getty@tty1.service.d/autologin.conf ]]; then
tty_autologin="systemd/system/getty@tty1.service.d/autologin.conf"
fi fi
# edit all the required files in /etc/ and swap the liveuser return 0
sed -i "s/${LIVE}/${NEWUSER}/g" $MNT/etc/{group,gshadow,passwd,shadow,$tty_autologin}
# remove welcome script and installer/welcome menu entries
# also removes the setting to make the installer open maximized
rm -f $MNT/home/$LIVE/bin/welcome.sh
sed -i '/welcome.sh/d' $openbx/autostart
sed -i '/installer/ { N; N; d; }' $openbx/rc.xml
sed -i '/item label="Welcome Screen"/ i\ <separator label="A r c h L a b s"/>' $openbx/menu.xml
sed -i '/item label="Welcome Screen"/ { N; N; N; N; N; N; N; N; N; N; N; d; }' $openbx/menu.xml
} }
fix_home_files() { fix_home_files() {
local user_home="$MNT/home/$NEWUSER" local user_home="$MNT/home/$NEWUSER"
local files=(".config/polybar/config"
".config/polybar/sessions/i3-sessionfile" sed -i "s/${LIVE}/${NEWUSER}/g" $user_home/.config/{openbox/autostart,gtk-3.0/bookmarks} \
".config/polybar/sessions/bspwm-sessionfile" $user_home/.mozilla/firefox/{archlabs.default/prefs.js,archlabs.default/sessionstore.js}
".config/polybar/sessions/openbox-sessionfile"
".config/openbox/autostart" ".config/gtk-3.0/bookmarks" if [[ $AUTOLOGIN == true ]]; then
".mozilla/firefox/archlabs.default/prefs.js" if [[ $LOGIN_TYPE == 'lightdm' ]]; then
".mozilla/firefox/archlabs.default/sessionstore.js") rm -rf $user_home/.{zprofile,xinitrc}
for file in "${files[@]}"; do else
sed -i "s/${LIVE}/${NEWUSER}/g" $user_home/$file sed -i "s/:-openbox/:-${LOGIN_WM}/g" $user_home/.xinitrc
sed -i '/archlabs-installer/d' $user_home/.zprofile
echo '[[ -z $DISPLAY && $XDG_VTNR -eq 1 ]] && exec startx -- vt1 &>/dev/null' >> $user_home/.zprofile
fi
else
rm -rf $user_home/.zprofile
sed -i "s/:-openbox/:-${LOGIN_WM}/g" $user_home/.xinitrc
fi
return 0
}
choose_window_manager() {
LOGIN_WM=""
LOGIN_TYPE=""
WM_PACKAGES=""
INSTALL_WMS="$(dialog --cr-wrap --stdout --backtitle "$BT" --no-cancel \
--title " $_WMChoice " --checklist "$_WMChoiceBody\n" 0 0 0 \
"openbox" "A lightweight, powerful, and highly configurable stacking window manager" off \
"bspwm" "A tiling window manager that represents windows as the leaves of a binary tree" off \
"i3-gaps" "A fork of i3 window manager with more features including gaps" off \
"xfce4" "A lightweight and modular desktop environment based on GTK+ 2 and 3" off)"
INSTALL_WMS="${INSTALL_WMS:-openbox}"
WM_NUM=$(awk '{print NF}' <<< "$INSTALL_WMS")
for wm in $INSTALL_WMS; do
WM_LOGIN_CHOICES="${WM_LOGIN_CHOICES}$wm - "
case $wm in
openbox) WM_PACKAGES="$WM_PACKAGES $wm obconf archlabs-ob-autostart archlabs-obkey archlabs-kickshaw" ;;
bspwm) WM_PACKAGES="$WM_PACKAGES $wm sxhkd lxappearance" ;;
i3-gaps) WM_PACKAGES="$WM_PACKAGES $wm i3status perl-anyevent-i3 lxappearance" ;;
xfce4) WM_PACKAGES="$WM_PACKAGES $wm xfce4-goodies xfce4-pulseaudio-plugin" ;;
esac
done done
rm -f $user_home/.config/keypack if yesno "$_WMLogin" "$_LoginTypeBody\n" "xinit" "lightdm"; then
sed -i '/keypack/d' $user_home/.config/openbox/autostart LOGIN_TYPE="xinit"
else
if hash al-hello >/dev/null 2>&1; then LOGIN_TYPE="lightdm"
echo "sleep 10; $TERM_CMD -e al-hello &" >> $user_home/.config/openbox/autostart
fi fi
if yesno "$_WMLogin" "$_AutoLoginBody\n"; then
AUTOLOGIN=true
else
AUTOLOGIN=false
fi
if [[ $WM_NUM -eq 1 ]]; then
LOGIN_WM="$INSTALL_WMS"
else
LOGIN_WM="$(dialog --cr-wrap --stdout --no-cancel --backtitle "$BT" \
--title " $_WMLogin " --menu "$_WMLoginBody" 0 0 0 $WM_LOGIN_CHOICES)"
[[ $LOGIN_WM == "" ]] && LOGIN_WM="$(awk '{print $1}' <<< "$INSTALL_WMS")"
fi
return 0
} }
###################################################################### ######################################################################
@ -667,8 +710,7 @@ wipe_device() {
local device="$1" local device="$1"
if yesno "$_PartWipe" "$_PartBody1 $device $_PartWipeBody2"; then if yesno "$_PartWipe" "$_PartBody1 $device $_PartWipeBody2"; then
tput civis tput civis
wipe -Ifre "$device" | wipe -Ifre "$device" | dialog --cr-wrap --backtitle "$BT" --title " $_PartWipe " \
dialog --cr-wrap --backtitle "$BT" --title " $_PartWipe " \
--progressbox "\nSecure wiping $device\n" 18 70 --progressbox "\nSecure wiping $device\n" 18 70
else else
create_partitions "$device" create_partitions "$device"
@ -829,17 +871,19 @@ create_partitions() {
local device="$1" local device="$1"
local choice local choice
tput civis tput civis
if hash gparted >/dev/null 2>&1 && [[ $DISPLAY ]]; then
choice="$(dialog --cr-wrap --stdout --backtitle "$BT" --title " $_PartTitle " \ choice="$(dialog --cr-wrap --stdout --backtitle "$BT" --title " $_PartTitle " \
--menu "$_PartBody" 0 0 0 "$_PartAuto" "BIOS & UEFI" \ --menu "$_PartBody" 0 0 0 "$_PartAuto" "BIOS & UEFI" \
"gparted" "BIOS & UEFI" "cfdisk" "BIOS & UEFI" "parted" "BIOS & UEFI" "$_PartWipe" "BIOS & UEFI")" "gparted" "BIOS & UEFI" "cfdisk" "BIOS & UEFI" "parted" "BIOS & UEFI" "$_PartWipe" "BIOS & UEFI")"
else
choice="$(dialog --cr-wrap --stdout --backtitle "$BT" --title " $_PartTitle " \
--menu "$_PartBody" 0 0 0 "$_PartAuto" "BIOS & UEFI" \
"cfdisk" "BIOS & UEFI" "parted" "BIOS & UEFI" "$_PartWipe" "BIOS & UEFI")"
fi
[[ $? != 0 || $choice == "" ]] && return 1 || clear [[ $? != 0 || $choice == "" ]] && return 1 || clear
if [[ $choice != "$_PartWipe" && $choice != "$_PartAuto" ]]; then if [[ $choice != "$_PartWipe" && $choice != "$_PartAuto" ]]; then
if [[ $choice == "gparted" ]] && ! [[ $DISPLAY ]]; then
cfdisk $device
else
$choice $device $choice $device
fi
elif [[ $choice == "$_PartWipe" ]]; then elif [[ $choice == "$_PartWipe" ]]; then
wipe_device $device && create_partitions $device wipe_device $device && create_partitions $device
else else
@ -937,10 +981,9 @@ select_filesystem() {
--menu "\nPartition: ${part}$([[ $cur_fs != "" ]] && echo -n "\nCurrent: ${cur_fs}")\n$_FSBody" 0 0 0 $([[ $cur_fs != "" ]] && echo -n "$_Skip -") \ --menu "\nPartition: ${part}$([[ $cur_fs != "" ]] && echo -n "\nCurrent: ${cur_fs}")\n$_FSBody" 0 0 0 $([[ $cur_fs != "" ]] && echo -n "$_Skip -") \
"ext4" "${FS_CMDS[ext4]}" "ext3" "${FS_CMDS[ext3]}" \ "ext4" "${FS_CMDS[ext4]}" "ext3" "${FS_CMDS[ext3]}" \
"ext2" "${FS_CMDS[ext2]}" "vfat" "${FS_CMDS[vfat]}" \ "ext2" "${FS_CMDS[ext2]}" "vfat" "${FS_CMDS[vfat]}" \
"btrfs" "${FS_CMDS[btrfs]}" "ntfs" "${FS_CMDS[ntfs]}" \ "ntfs" "${FS_CMDS[ntfs]}" "f2fs" "${FS_CMDS[f2fs]}" \
"f2fs" "${FS_CMDS[f2fs]}" "jfs" "${FS_CMDS[jfs]}" \ "jfs" "${FS_CMDS[jfs]}" "nilfs2" "${FS_CMDS[nilfs2]}" \
"nilfs2" "${FS_CMDS[nilfs2]}" "reiserfs" "${FS_CMDS[reiserfs]}" \ "reiserfs" "${FS_CMDS[reiserfs]}" "xfs" "${FS_CMDS[xfs]}")"
"xfs" "${FS_CMDS[xfs]}")"
if [[ $choice == "$_Skip" ]]; then if [[ $choice == "$_Skip" ]]; then
return 0 return 0
elif [[ $choice == "" ]]; then elif [[ $choice == "" ]]; then
@ -1667,6 +1710,8 @@ install_main() {
# whether to use a custom mirror sorting command later # whether to use a custom mirror sorting command later
update_mirrorlist_cmd || MIRROR_CMD="reflector --score 100 -l 50 -f 10 --sort rate" update_mirrorlist_cmd || MIRROR_CMD="reflector --score 100 -l 50 -f 10 --sort rate"
choose_window_manager || return 1
# user can choose to bail at this point # user can choose to bail at this point
unpack_base_system || { initialize_variables; return 1; } unpack_base_system || { initialize_variables; return 1; }
UNPACKED_BASE=true UNPACKED_BASE=true
@ -1688,11 +1733,7 @@ install_main() {
update_system update_system
DONE_UPDATE=true DONE_UPDATE=true
else else
if pacman -Qsq archlabs-installer >/dev/null 2>&1; then
chroot_cmd "pacman -Rs archlabs-installer --noconfirm" >/dev/null 2>&1 chroot_cmd "pacman -Rs archlabs-installer --noconfirm" >/dev/null 2>&1
elif [[ -d $MNT/installer ]]; then
rm -rf $MNT/installer
fi
fi fi
# these also only should need to be run once, when done jump to the config edit menu # these also only should need to be run once, when done jump to the config edit menu
@ -1746,7 +1787,7 @@ EOF
find $MNT/usr/lib/initcpio -name 'archiso*' -type f -exec rm '{}' \; find $MNT/usr/lib/initcpio -name 'archiso*' -type f -exec rm '{}' \;
rm -rf $MNT/etc/{mkinitcpio-archiso.conf,sudoers.d/g_wheel,polkit-1/rules.d/49-nopasswd_global.rules} rm -rf $MNT/etc/{mkinitcpio-archiso.conf,sudoers.d/g_wheel,polkit-1/rules.d/49-nopasswd_global.rules}
rm -rf $MNT/usr/bin/{install-al,al-installer} # rm -rf $MNT/usr/bin/{install-al,al-installer}
sed -i 's/volatile/auto/g' $MNT/etc/systemd/journald.conf sed -i 's/volatile/auto/g' $MNT/etc/systemd/journald.conf
sed -i "s/# %wheel ALL=(ALL) ALL/%wheel ALL=(ALL) ALL/g" $MNT/etc/sudoers sed -i "s/# %wheel ALL=(ALL) ALL/%wheel ALL=(ALL) ALL/g" $MNT/etc/sudoers
cp -rf /etc/NetworkManager/system-connections $MNT/etc/NetworkManager/ cp -rf /etc/NetworkManager/system-connections $MNT/etc/NetworkManager/
@ -1761,26 +1802,52 @@ EOF
return 0 return 0
} }
install_packages() {
tput civis
local pkgs="$WM_PACKAGES"
[[ $LOGIN_TYPE == 'lightdm' ]] && pkgs="$pkgs lightdm lightdm-gtk-greeter lightdm-gtk-greeter-settings accountsservice"
chroot_cmd "pacman -S $pkgs --needed --noconfirm" 2>/dev/null | dialog --cr-wrap --backtitle "$BT" \
--title " Install Packages " --progressbox "\nInstalling packages chosen during install setup.\n\n$pkgs" 30 90
[[ $LOGIN_TYPE == 'lightdm' ]] && setup_lightdm
return 0
}
setup_lightdm() {
chroot_cmd 'systemctl enable lightdm.service && systemctl set-default graphical.target' >/dev/null 2>&1
local cfg="$MNT/etc/lightdm/lightdm-gtk-greeter.conf"
sed -i '/#background=/ c background=/usr/share/backgrounds/archlabs/archlabs.jpg' $cfg
sed -i '/#theme-name=/ c theme-name=ArchLabs-dARK' $cfg
sed -i '/#icon-theme-name=/ c icon-theme-name=ArchLabs-Light' $cfg
sed -i '/#position=/ c position=34%,end 66%,end' $cfg
sed -i '/#font-name=/ c font-name=DejaVu Sans Mono 11' $cfg
sed -i '/\[greeter]/ a default-user-image=/usr/share/icons/ArchLabs-Dark/64x64/places/distributor-logo-archlabs.png' $cfg
sed -i '/\[greeter]/ a active-monitor=0' $cfg
if [[ $AUTOLOGIN == true ]]; then
chroot_cmd 'groupadd -r nopasswdlogin' >/dev/null 2>&1
sed -i '/#%PAM-1.0/ a auth sufficient pam_succeed_if.so user ingroup nopasswdlogin' $MNT/etc/pam.d/lightdm
sed -i "/#autologin-session=/ c autologin-session=${LOGIN_WM}" $MNT/etc/lightdm/lightdm.conf
fi
}
update_system() { update_system() {
local pkgcmd local pkgcmd
local upd="pacman -Syyu --noconfirm" pkgcmd="pacman -Syyu --noconfirm; pacman -S iputils --noconfirm; pacman -S base-devel git --needed --noconfirm"
local net="pacman -S iputils --noconfirm" pkgcmd="pacman -Rs archlabs-installer --noconfirm; $pkgcmd"
local dev="pacman -S base-devel git --needed --noconfirm"
tput civis tput civis
if pacman -Qsq archlabs-installer >/dev/null 2>&1; then
pkgcmd="pacman -Rs archlabs-installer --noconfirm ; $upd ; $net ; $dev"
else
pkgcmd="$upd ; $net ; $dev"
fi
chroot_cmd "$pkgcmd" 2>/dev/null | dialog --cr-wrap --backtitle "$BT" \ chroot_cmd "$pkgcmd" 2>/dev/null | dialog --cr-wrap --backtitle "$BT" \
--title " $_UpdSysTitle " --progressbox "$_UpdSysBody\n" 30 90 --title " $_UpdSysTitle " --progressbox "$_UpdSysBody\n" 30 90
install_packages
return 0
} }
update_mirrorlist_cmd() { update_mirrorlist_cmd() {
if ! yesno "$_MirrorTitle" "$_MirrorSetup" "Automatic Sort" "Customize Sort"; then if ! yesno "$_MirrorTitle" "$_MirrorSetup" "Automatic Sort" "Customize Sort"; then
infobox "$_MirrorTitle" "\nGathering mirror countries..\n" infobox "$_MirrorTitle" "\nGathering mirror countries..\n"
local countries local countries
countries="$(reflector --list-countries | awk 'NF > 1 {print $1 " -"}')" countries="$(reflector --list-countries | awk 'NF > 1 {print $1 " -"}')"
@ -1788,9 +1855,8 @@ update_mirrorlist_cmd() {
if [[ $countries != "" ]]; then if [[ $countries != "" ]]; then
tput civis tput civis
local country local country
country="$(dialog --cr-wrap --stdout --backtitle "$BT" --title "$_MirrorTitle" \ country="$(dialog --cr-wrap --stdout --no-cancel --backtitle "$BT" \
--menu "$_MirrorCountry" 22 70 10 $countries)" --title "$_MirrorTitle" --menu "$_MirrorCountry" 22 70 10 $countries)"
[[ $? != 0 || $country == "" ]] && return 1
MIRROR_CMD="reflector --country $country --score 80 --latest 40 --fastest 10 --sort rate" MIRROR_CMD="reflector --country $country --score 80 --latest 40 --fastest 10 --sort rate"
fi fi
@ -1803,9 +1869,8 @@ update_mirrorlist_cmd() {
'delay': MirrorStatus delay." 'delay': MirrorStatus delay."
tput cnorm tput cnorm
MIRROR_CMD="$(dialog --cr-wrap --stdout --backtitle "$BT" --title " $_MirrorTitle " \ MIRROR_CMD="$(dialog --cr-wrap --no-cancel --stdout --backtitle "$BT" \
--inputbox "$_MirrorCmd\n\n$ref\n" 0 0 "$cmd")" --title " $_MirrorTitle " --inputbox "$_MirrorCmd\n\n$ref\n" 0 0 "$cmd")"
[[ $? != 0 || $MIRROR_CMD == "" ]] && return 1
fi fi
return 0 return 0
@ -2143,10 +2208,9 @@ edit_config_menu() {
tput civis tput civis
MENU_HIGHLIGHT=$(dialog --cr-wrap --stdout --backtitle "$BT" --title " $_EditTitle " \ MENU_HIGHLIGHT=$(dialog --cr-wrap --stdout --backtitle "$BT" --title " $_EditTitle " \
--default-item $MENU_HIGHLIGHT --menu "$msg" 0 0 0 \ --default-item $MENU_HIGHLIGHT --menu "$msg" 0 0 0 \
"1" "keymaps" "2" "locale" "3" "hostname" "4" "sudoers" "5" "mkinitcpio.conf" \ "1" "$_Done" "2" "keymaps" "3" "locale" "4" "hostname" "5" "sudoers" \
"6" "fstab" "7" "crypttab" "8" "$BOOTLOADER" "9" "pacman.conf" "10" "$_Done") "6" "mkinitcpio.conf" "7" "fstab" "8" "crypttab" "9" "$BOOTLOADER" "10" "pacman.conf")
if [[ $MENU_HIGHLIGHT == "" || $MENU_HIGHLIGHT == 1 ]]; then
if [[ $MENU_HIGHLIGHT == "" || $MENU_HIGHLIGHT == 10 ]]; then
if [[ $FULL_DONE == true && $CONFIRM_DONE != true ]]; then if [[ $FULL_DONE == true && $CONFIRM_DONE != true ]]; then
CONFIRM_DONE=true CONFIRM_DONE=true
wrap_up "$_InstFinBody" 'Exit & Reboot' 'Go Back' 'reboot' wrap_up "$_InstFinBody" 'Exit & Reboot' 'Go Back' 'reboot'
@ -2160,7 +2224,7 @@ edit_config_menu() {
done done
if [[ $existing_files != "" ]]; then if [[ $existing_files != "" ]]; then
if ! [[ $EDITOR_CHOICE ]] && [[ $DISPLAY ]] && hash geany >/dev/null 2>&1; then if [[ $EDITOR_CHOICE == "" && $DISPLAY ]] && hash geany >/dev/null 2>&1; then
if yesno "$_EditTitle" "\nOpen file(s) in Geany or Vim?\n" "Geany" "Vim"; then if yesno "$_EditTitle" "\nOpen file(s) in Geany or Vim?\n" "Geany" "Vim"; then
EDITOR_CHOICE="geany -i" EDITOR_CHOICE="geany -i"
geany -i $existing_files geany -i $existing_files
@ -2168,7 +2232,7 @@ edit_config_menu() {
EDITOR_CHOICE="vim -O" EDITOR_CHOICE="vim -O"
vim -O $existing_files vim -O $existing_files
fi fi
elif [[ $EDITOR_CHOICE != "" ]]; then elif [[ $EDITOR_CHOICE ]]; then
$EDITOR_CHOICE $existing_files $EDITOR_CHOICE $existing_files
else else
vim -O $existing_files vim -O $existing_files

View File

@ -105,6 +105,17 @@ _MirrorSort="\nSorting the mirrorlist.\n\nThis will take a minute.\n"
_MirrorCountry="\nSelect a country to use when sorting mirrors, the full command can be changed manually after\n\nNote: Your country may not have the fastest mirrors for your location.\n" _MirrorCountry="\nSelect a country to use when sorting mirrors, the full command can be changed manually after\n\nNote: Your country may not have the fastest mirrors for your location.\n"
_MirrorCmd="\nThe command below will be used to sort the mirrorlist, a short description of each option is provided, edit the command if needed.\n" _MirrorCmd="\nThe command below will be used to sort the mirrorlist, a short description of each option is provided, edit the command if needed.\n"
# window managers and packages
_WMChoice="Select Window Managers or Desktop Environments"
_WMChoiceBody="\nUse [Space] to select/deselect window manager(s) or desktop environment(s) to install.\n\nDepending on the choice additional packages may be installed to improve the experience."
_WMLogin="Select Login"
_LoginTypeBody="\nUse console login (xinit) or a display manager (lightdm)?"
_WMLoginBody="\nSelect which window manager or desktop to use for login."
_AutoLoginBody="\nDo you want to automatically log in when the computer starts?"
_PackageChoice="Additional Packages"
_PackageChoiceBody="\nUse [Space] to select/deselect additional packages to install."
## END NEW ## END NEW