# check for syntax errors
# set -n
-VER=2.0.92
+VER=2.0.99
# default values {
: ${DIST=ArchLabs} # distro name if not set
MNT=/mnt # installation root mountpoint
ANS=/tmp/ans # dialog answer output file
-BOOTDIR=boot # location to mount boot partition
FONT=ter-i16n # font used for the linux console
HOOKS=shutdown # additional mkinitcpio HOOKS
SEL=0 # currently selected menu item
8 "* System configuration" \
9 "Select window manager or desktop" \
10 "Select additional packages" \
- 11 "View configuration selections" \
- 12 "Run a command on the installed system" \
+ 11 "Run a command on the installed system" \
+ 12 "View configuration and command selections" \
13 "* Confirm choices and start the installation" 2> "$ANS"
read -r SEL < "$ANS"
8) prechecks 2 && { select_config || (( SEL-- )); } ;;
9) prechecks 3 && { select_sessions || (( SEL-- )); } ;;
10) prechecks 3 && { select_packages || (( SEL-- )); } ;;
- 11) prechecks 3 && select_show ;;
- 12) prechecks 3 && select_usercmd ;;
+ 11) prechecks 3 && select_usercmd ;;
+ 12) prechecks 3 && select_show ;;
13) prechecks 3 && install_main ;;
*) yesno "Exit" "\nUnmount partitions (if any) and exit the installer?\n" && die 0
esac
Hostname: ${MYHOST:-none}
Timezone: ${ZONE:-none}/${SUBZ:-none}
+ Chroot cmd: ${USER_CMD:-none}
+
------------ USER CONFIGURATION ---------------
Username: ${NEWUSER:-none}
"sddm" "Simple desktop display manager" || return 1
case $LOGIN_TYPE in
- ly) EDIT_FILES[login]="/etc/ly/config.ini" ;;
gdm|sddm) EDIT_FILES[login]="" ;;
+ ly) EDIT_FILES[login]="/etc/ly/config.ini" ;;
lightdm) EDIT_FILES[login]="/etc/lightdm/lightdm.conf /etc/lightdm/lightdm-gtk-greeter.conf" ;;
xinit) EDIT_FILES[login]="/home/$NEWUSER/.xinitrc /home/$NEWUSER/.xprofile"
if (( $(wc -w <<< "$INSTALL_WMS") > 1 )); then
choice=""
dlg choice menu "Edit Partitions" "$_part\n\n$(lsblk -no NAME,MODEL,SIZE,TYPE,FSTYPE $device)" \
"auto" "Whole device automatic partitioning" \
- "shrink" "Shrink an existing ext or ntfs partition" \
"cfdisk" "Curses based variant of fdisk" \
"parted" "GNU partition editor" \
"fdisk" "Dialog-driven creation and manipulation of partitions" \
"done" "Return to the main menu"
+ # "shrink" "Shrink an existing ext or ntfs partition" \
if [[ -z $choice || $choice == 'done' ]]; then
return 0
msg "Auto Partition" "\nRemoving partitions on $device and setting table to $table\n" 1
- dev_info="$(parted -s "$device" print)"
+ dev_info="$(parted -s "$device" print 2> /dev/null)"
swapoff -a
while read -r PART; do
- parted -s "$device" rm "$PART" > /dev/null 2>&1
+ parted -s "$device" rm "$PART" > /dev/null 2> "$ERR"
+ errshow 0 "parted -s $device rm $PART" || return 1
done <<< "$(awk '/^ [1-9][0-9]?/ {print $1}' <<< "$dev_info" | sort -r)"
- [[ $(awk '/Table:/ {print $3}' <<< "$dev_info") != "$table" ]] && parted -s "$device" mklabel "$table" > /dev/null 2>&1
+ [[ $(awk '/Table:/ {print $3}' <<< "$dev_info") != "$table" ]] && parted -s "$device" mklabel "$table" > /dev/null 2> "$ERR"
msg "Auto Partition" "\nCreating a 512M $boot_fs boot partition.\n" 1
if [[ $SYS == "BIOS" ]]; then
- parted -s "$device" mkpart primary "$boot_fs" 1MiB 513MiB > /dev/null 2>&1
+ parted -s "$device" mkpart primary "$boot_fs" 1MiB 513MiB > /dev/null 2> "$ERR"
+ errshow 0 "parted -s $device mkpart primary $boot_fs 1MiB 513MiB" || return 1
else
- parted -s "$device" mkpart ESP "$boot_fs" 1MiB 513MiB > /dev/null 2>&1
+ parted -s "$device" mkpart ESP "$boot_fs" 1MiB 513MiB > /dev/null 2> "$ERR"
+ errshow 0 "parted -s $device mkpart ESP $boot_fs 1MiB 513MiB" || return 1
fi
sleep 0.5
AUTO_BOOT_PART=$(lsblk -lno NAME,TYPE "$device" | awk 'NR==2 {print "/dev/" $1}')
if [[ $SYS == "BIOS" ]]; then
- mkfs.ext4 -q "$AUTO_BOOT_PART" > /dev/null 2>&1
+ mkfs.ext4 -q "$AUTO_BOOT_PART" > /dev/null 2> "$ERR"
+ errshow 0 "mkfs.ext4 -q $AUTO_BOOT_PART" || return 1
else
- mkfs.vfat -F32 "$AUTO_BOOT_PART" > /dev/null 2>&1
+ mkfs.vfat -F32 "$AUTO_BOOT_PART" > /dev/null 2> "$ERR"
+ errshow 0 "mkfs.vfat -F32 $AUTO_BOOT_PART" || return 1
fi
msg "Auto Partition" "\nCreating a $size ext4 root partition.\n" 0
- parted -s "$device" mkpart primary ext4 513MiB 100% > /dev/null 2>&1
+ parted -s "$device" mkpart primary ext4 513MiB 100% > /dev/null 2> "$ERR"
+ errshow 0 "parted -s $device mkpart primary ext4 513MiB 100%" || return 1
sleep 0.5
AUTO_ROOT_PART="$(lsblk -lno NAME,TYPE "$device" | awk 'NR==3 {print "/dev/" $1}')"
- mkfs.ext4 -q "$AUTO_ROOT_PART" > /dev/null 2>&1
+ mkfs.ext4 -q "$AUTO_ROOT_PART" > /dev/null 2> "$ERR"
+ errshow 0 "mkfs.ext4 -q $AUTO_ROOT_PART" || return 1
sleep 0.5
msg "Auto Partition" "\nProcess complete.\n\n$(lsblk -o NAME,MODEL,SIZE,TYPE,FSTYPE "$device")\n"
}
case "$fs" in
ntfs)
if ntfsresize -fc "$part"; then
- ntfsresize -ff --size $(( (size * 1024) / 1000 ))k "$part" 2> $ERR # k=10^3 bytes
+ ntfsresize -ff --size $(( (size * 1024) / 1000 ))k "$part" 2> "$ERR" # k=10^3 bytes
errshow "ntfsresize -f -s $(( (size * 1024) / 1000 ))k $part" || return 1
else
msg "Resize" "\nThe ntfs partition $part cannot be resized because it is scheduled for a consistency check.\n\nTo do a consistency check in windows open command prompt as admin and run:\n\n\tchkdsk /f /r /x\n"
;;
*)
e2fsck -f "$part"; sleep 0.5
- resize2fs -f "$part" ${size}K 2> $ERR # K=2^10 bytes
+ resize2fs -f "$part" ${size}K 2> "$ERR" # K=2^10 bytes
errshow "resize2fs -f $part ${size}K" || return 1
;;
esac
(( size++ ))
sleep 0.5
if [[ $devsize == "$end" ]]; then
- parted -s "$device" mkpart primary ext4 ${size}KiB 100% 2> $ERR
+ parted -s "$device" mkpart primary ext4 ${size}KiB 100% 2> "$ERR"
errshow "parted -s $device mkpart primary ext4 ${size}KiB 100%" || return 1
else
- parted -s "$device" mkpart primary ext4 ${size}KiB ${end}KiB 2> $ERR
+ parted -s "$device" mkpart primary ext4 ${size}KiB ${end}KiB 2> "$ERR"
errshow "parted -s $device mkpart primary ext4 ${size}KiB ${end}KiB" || return 1
fi
msg "Resize Complete" "\n$part has been successfully resized to $((size / 1024))M.\n" 1
part_find()
{
local regexp="$1" err=''
+ local pts dev size isize ptcount=0
# string of partitions as /TYPE/PART SIZE.. eg. /dev/sda1 256G
if [[ $IGNORE_DEV ]]; then
# ensure we have enough partitions for the system and action were trying to do
COUNT=$(wc -l <<< "$PARTS")
+
+ while read -r dev size; do # walk partition list and skip ones that are too small
+ [[ $dev && $size ]] || continue
+ size_t="${size: -1:1}"
+ isize=${size:0:-1}
+ isize=${isize%.*}
+ [[ $size_t == 'K' || ($size_t == 'M' && $isize -lt 100) ]] || { pts+="$dev $size "; (( ptcount++ )); }
+ done <<< "$PARTS"
+
case "$regexp" in
- 'part|lvm|crypt') [[ $COUNT -lt 1 || ($SYS == 'UEFI' && $COUNT -lt 2) ]] && err="$_errpart" ;;
- 'part|crypt') (( COUNT < 1 )) && err="$_lvmerr" ;;
- 'part|lvm') (( COUNT < 2 )) && err="$_lukserr" ;;
+ 'part|lvm|crypt') [[ $ptcount -lt 1 || ($SYS == 'UEFI' && $COUNT -lt 2) ]] && err="$_errpart" ;;
+ 'part|crypt') (( ptcount < 1 )) && err="$_lvmerr" ;;
+ 'part|lvm') (( ptcount < 2 )) && err="$_lukserr" ;;
esac
if [[ $err ]]; then
part_swap()
{
if [[ $1 == "$MNT/swapfile" && $SWAP_SIZE ]]; then
- fallocate -l $SWAP_SIZE "$1" 2> $ERR
+ fallocate -l $SWAP_SIZE "$1" 2> "$ERR"
errshow "fallocate -l $SWAP_SIZE $1"
- chmod 600 "$1" 2> $ERR
+ chmod 600 "$1" 2> "$ERR"
errshow "chmod 600 $1"
fi
- mkswap "$1" > /dev/null 2> $ERR
+ mkswap "$1" > /dev/null 2> "$ERR"
errshow "mkswap $1"
- swapon "$1" > /dev/null 2> $ERR
+ swapon "$1" > /dev/null 2> "$ERR"
errshow "swapon $1"
return 0
}
local part="$1" fs="$2" delay="$3"
msg "Format" "\nFormatting $part as $fs\n" 0
- mkfs.$fs ${FS_CMD_FLAGS[$fs]} "$part" > /dev/null 2> $ERR
+ mkfs.$fs ${FS_CMD_FLAGS[$fs]} "$part" > /dev/null 2> "$ERR"
errshow "mkfs.$fs ${FS_CMD_FLAGS[$fs]} "$part"" || return 1
FORMATTED+="$part "
sleep $delay
mount_menu()
{
+ msg "Mount Menu" "\nGathering device and partition information.\n" 1
no_bg_install || return 0
lvm_detect
umount_dir "$MNT"
select_root_partition || { ROOT_PART=''; return 1; }
select_boot_partition || { BOOT_PART=''; return 1; }
if [[ $BOOT_PART ]]; then
- part_mount "$BOOT_PART" "/$BOOTDIR" && SEP_BOOT=true || return 1
+ part_mount "$BOOT_PART" "/boot" && SEP_BOOT=true || return 1
part_bootdev
fi
select_swap || return 1
{
local pts dev size isize
- while read -r dev size; do # walk partition list and skip ones that are too small/big for swap
- size_t="${size: -1:1}"
- isize=${size:0:-1}
- isize=${isize%.*}
- [[ $size_t =~ [KT] || ($size_t == 'G' && $isize -gt 16) || ($size_t == 'M' && $isize -lt 100) ]] || pts+="$dev $size "
- done <<< "$PARTS"
+ if (( COUNT )) ; then
+ while read -r dev size; do # walk partition list and skip ones that are too small/big for swap
+ size_t="${size: -1:1}"
+ isize=${size:0:-1}
+ isize=${isize%.*}
+ [[ $size_t =~ [KT] || ($size_t == 'G' && $isize -gt 16) || ($size_t == 'M' && $isize -lt 100) ]] || pts+="$dev $size "
+ done <<< "$PARTS"
+ fi
dlg SWAP_PART menu "Swap Setup" "\nSelect whether to use a swapfile, swap partition, or none." \
"none" "Don't allocate any swap space" \
BOOT_PART="$AUTO_BOOT_PART"
return 0
else
- while read -r dev size; do # walk partition list and skip ones that are too small/big for boot
- size_t="${size: -1:1}"
- isize=${size:0:-1}
- isize=${isize%.*}
- [[ $size_t =~ [KT] || ($size_t == 'G' && $isize -gt 2) || ($size_t == 'M' && $isize -lt 100) ]] || { pts+="$dev $size "; (( ptcount++ )); }
- done <<< "$PARTS"
+ if (( COUNT )); then
+ while read -r dev size; do # walk partition list and skip ones that are too small/big for boot
+ size_t="${size: -1:1}"
+ isize=${size:0:-1}
+ isize=${isize%.*}
+ [[ $size_t =~ [KT] || ($size_t == 'G' && $isize -gt 2) || ($size_t == 'M' && $isize -lt 100) ]] || { pts+="$dev $size "; (( ptcount++ )); }
+ done <<< "$PARTS"
+ fi
case "$SYS" in
UEFI)
[[ $BOOT_PART ]] || return 1
;;
BIOS)
- (( ptcount == 0 )) && return 0
if [[ $LUKS && ! $LVM ]]; then
- dlg BOOT_PART menu "Boot Partition" "$_biosluks" $pts
+ case "$ptcount" in
+ 0) msg "Boot Partition" "\nLUKS without LVM requires a separate boot partition.\nNo partitions available that meet size requirements!!\n\nReturning to the main menu.\n" 2; return 1 ;;
+ 1) msg "Boot Partition" "\nOnly one partition available that meets size requirements.\n" 1; BOOT_PART="$(awk 'NF > 0 {print $1}' <<< "$pts")" ;;
+ *) dlg BOOT_PART menu "Boot Partition" "$_biosluks" $pts ;;
+ esac
[[ $BOOT_PART ]] || return 1
else
+ (( ptcount == 0 )) && return 0
dlg BOOT_PART menu "Boot Partition" "$_bios" "skip" "no separate boot" $pts
[[ -z $BOOT_PART || $BOOT_PART == "skip" ]] && { BOOT_PART=''; return 0; }
fi
local part dev size
# walk partition list and skip ones that are too small to be usable
- while read -r dev size; do
- [[ ${size: -1:1} =~ [KM] ]] && part_countdec "$dev"
- done <<< "$PARTS"
+ if (( COUNT )); then
+ while read -r dev size; do
+ [[ ${size: -1:1} =~ [KM] ]] && part_countdec "$dev"
+ done <<< "$PARTS"
+ fi
- while (( COUNT > 0 )); do
+ while (( COUNT )); do
part=''
dlg part menu 'Mount Extra' "$_expart" 'done' 'finish mounting step' $PARTS || break
if [[ $part == 'done' ]]; then
install_main()
{
install_base
- genfstab -U "$MNT" > "$MNT/etc/fstab" 2> "$ERR" 2>&1
+ genfstab -U "$MNT" > "$MNT/etc/fstab" 2> "$ERR"
errshow 1 "genfstab -U $MNT > $MNT/etc/fstab"
[[ -f $MNT/swapfile ]] && sed -i "s~${MNT}~~" "$MNT/etc/fstab"
install_packages
- # video driver tearfree configs, MUST be done after package install to support nvidia
- install_tearfree_conf "$MNT/etc/X11/xorg.conf.d"
+ # tear free configs, MUST be done after package install for nvidia
+ [[ $TEARFREE ]] && install_tearfree_conf "$MNT/etc/X11/xorg.conf.d"
install_mkinitcpio
install_boot
chrun "hwclock --systohc --utc" || chrun "hwclock --systohc --utc --directisa"
[[ $DIST != "ArchLabs" ]] || sed -i "s/ArchLabs/$DIST/g" "$MNT/etc/"{lsb-release,os-release}
# vmlinuz, if this isn't copied the standard kernel may fail mkinitcpio
- cp -vf "$RUN/x86_64/vmlinuz" "$MNT/boot/vmlinuz-linux" 2> $ERR 2>&1
+ cp -vf "$RUN/x86_64/vmlinuz" "$MNT/boot/vmlinuz-linux" 2> "$ERR" 2>&1
errshow 1 "cp -vf $RUN/x86_64/vmlinuz $MNT/boot/vmlinuz-linux"
# copy network settings
if [[ $SYS == 'UEFI' ]]; then
# remove our old install and generic BOOT/ dir
echo "Removing conflicting boot directories"
- find "$MNT/$BOOTDIR/EFI/" -maxdepth 1 -mindepth 1 -iname "$DIST" -type d -delete -printf "remove %p\n"
- find "$MNT/$BOOTDIR/EFI/" -maxdepth 1 -mindepth 1 -iname 'BOOT' -type d -delete -printf "remove %p\n"
+ find "$MNT/boot/EFI/" -maxdepth 1 -mindepth 1 -iname "$DIST" -type d -delete -printf "remove %p\n"
+ find "$MNT/boot/EFI/" -maxdepth 1 -mindepth 1 -iname 'BOOT' -type d -delete -printf "remove %p\n"
fi
prerun_$BOOTLDR
- chrun "${BCMDS[$BOOTLDR]}" 2> $ERR 2>&1
+ chrun "${BCMDS[$BOOTLDR]}" 2> "$ERR" 2>&1
errshow 1 "${BCMDS[$BOOTLDR]}"
if [[ -d $MNT/hostrun ]]; then
if [[ $SYS == 'UEFI' ]]; then
# some UEFI firmware requires a generic esp/BOOT/BOOTX64.EFI
- mkdir -pv "$MNT/$BOOTDIR/EFI/BOOT"
+ mkdir -pv "$MNT/boot/EFI/BOOT"
case "$BOOTLDR" in
- grub) cp -fv "$MNT/$BOOTDIR/EFI/$DIST/grubx64.efi" "$MNT/$BOOTDIR/EFI/BOOT/BOOTX64.EFI" ;;
- syslinux) cp -rf "$MNT/$BOOTDIR/EFI/syslinux/"* "$MNT/$BOOTDIR/EFI/BOOT/" && cp -f "$MNT/$BOOTDIR/EFI/syslinux/syslinux.efi" "$MNT/$BOOTDIR/EFI/BOOT/BOOTX64.EFI" ;;
- refind-efi) sed -i '/#extra_kernel_version_strings/ c extra_kernel_version_strings linux-hardened,linux-zen,linux-lts,linux' "$MNT/$BOOTDIR/EFI/refind/refind.conf"
- cp -fv "$MNT/$BOOTDIR/EFI/refind/refind_x64.efi" "$MNT/$BOOTDIR/EFI/BOOT/BOOTX64.EFI" ;;
+ grub) cp -fv "$MNT/boot/EFI/$DIST/grubx64.efi" "$MNT/boot/EFI/BOOT/BOOTX64.EFI" ;;
+ syslinux) cp -rf "$MNT/boot/EFI/syslinux/"* "$MNT/boot/EFI/BOOT/" && cp -f "$MNT/boot/EFI/syslinux/syslinux.efi" "$MNT/boot/EFI/BOOT/BOOTX64.EFI" ;;
+ refind-efi) sed -i '/#extra_kernel_version_strings/ c extra_kernel_version_strings linux-hardened,linux-zen,linux-lts,linux' "$MNT/boot/EFI/refind/refind.conf"
+ cp -fv "$MNT/boot/EFI/refind/refind_x64.efi" "$MNT/boot/EFI/BOOT/BOOTX64.EFI" ;;
esac
fi
chrun "chpasswd <<< '$NEWUSER:$USER_PASS'" 2> "$ERR" 2>&1
errshow 1 "set $NEWUSER password"
- if [[ $INSTALL_WMS == *dwm* ]];then
+ if [[ $INSTALL_WMS == *dwm* ]]; then
install_suckless "/home/$NEWUSER" chroot
[[ $INSTALL_WMS == 'dwm' ]] && rm -rf "$MNT/home/$NEWUSER/.config/xfce4"
fi
- [[ $INSTALL_WMS == *jwm* ]] && cp -rf "$MNT/etc/system.jwmrc" "$MNT/home/$NEWUSER/.jwmrc"
- [[ $INSTALL_WMS != *bspwm* && $INSTALL_WMS != *openbox* ]] && rm -rf "$MNT/home/$NEWUSER/.config/"{jgmenu,tint2}
+ [[ $INSTALL_WMS == *jwm* ]] && sed '7,14d; s/xlock -mode blank/i3-lock-fancy -p/g; s/root:1/rofi_run/g' "$MNT/etc/system.jwmrc" > "$MNT/home/$NEWUSER/.jwmrc"
+ [[ $INSTALL_WMS =~ (bspwm|openbox) ]] || rm -rf "$MNT/home/$NEWUSER/.config/"{jgmenu,tint2}
[[ $USER_PKGS != *geany* ]] && rm -rf "$MNT/home/$NEWUSER/.config/geany"
[[ $MYSHELL != 'bash' ]] && rm -rf "$MNT/home/$NEWUSER/.bash"*
[[ $MYSHELL != 'zsh' ]] && rm -rf "$MNT/home/$NEWUSER/.z"*
EOF
fi
rm -rf "$serv" "$MNT/home/$NEWUSER/.xinitrc"
- chrun "systemctl enable $LOGIN_TYPE.service" 2> $ERR 2>&1
+ chrun "systemctl enable $LOGIN_TYPE.service" 2> "$ERR" 2>&1
errshow 1 "systemctl enable $LOGIN_TYPE.service"
${LOGIN_TYPE}_config
;;
rmpkg+="zsh "
fi
- if [[ $INSTALL_WMS =~ (openbox|bspwm|i3-gaps|fluxbox) ]]; then
+ if [[ $INSTALL_WMS =~ (openbox|bspwm|i3-gaps|fluxbox|jwm|awesome) ]]; then
inpkg+="$WM_BASE_PKGS "
elif [[ $INSTALL_WMS == 'dwm' ]]; then # dwm only needs a very limited package set
inpkg+="nitrogen polkit-gnome gnome-keyring dunst "
fi
# update and install crucial packages first to avoid issues
- chrun "pacman -Syyu $KERNEL $BASE_PKGS base-devel ${LOGIN_PKGS[$LOGIN_TYPE]} $MYSHELL --noconfirm --needed" 2> $ERR 2>&1
+ chrun "pacman -Syyu $KERNEL $BASE_PKGS base-devel ${LOGIN_PKGS[$LOGIN_TYPE]} $MYSHELL --noconfirm --needed" 2> "$ERR" 2>&1
errshow 1 "pacman -Syyu $KERNEL $BASE_PKGS base-devel ${LOGIN_PKGS[$LOGIN_TYPE]} $MYSHELL --noconfirm --needed"
# remove the packages we don't want on the installed system
chrun "pacman -S iputils $UCODE --noconfirm"
# install the packages chosen throughout the install
- chrun "pacman -S $inpkg --needed --noconfirm" 2> $ERR 2>&1
+ chrun "pacman -S $inpkg --needed --noconfirm" 2> "$ERR" 2>&1
errshow 1 "pacman -S $inpkg --needed --noconfirm"
# bootloader packages
if [[ $BOOTLDR == 'grub' ]]; then
[[ $SYS == 'UEFI' ]] && local efib="efibootmgr"
- chrun "pacman -S os-prober grub $efib --needed --noconfirm" 2> $ERR 2>&1
+ chrun "pacman -S os-prober grub $efib --needed --noconfirm" 2> "$ERR" 2>&1
errshow 1 "pacman -S os-prober grub $efib --needed --noconfirm"
elif [[ $BOOTLDR == 'refind-efi' ]]; then
- chrun "pacman -S refind-efi efibootmgr --needed --noconfirm" 2> $ERR 2>&1
+ chrun "pacman -S refind-efi efibootmgr --needed --noconfirm" 2> "$ERR" 2>&1
errshow 1 "pacman -S refind-efi efibootmgr --needed --noconfirm"
elif [[ $SYS == 'UEFI' ]]; then
- chrun "pacman -S efibootmgr --needed --noconfirm" 2> $ERR 2>&1
+ chrun "pacman -S efibootmgr --needed --noconfirm" 2> "$ERR" 2>&1
errshow 1 "pacman -S efibootmgr --needed --noconfirm"
fi
{
local dir="$1/suckless"
shift
- if [[ $2 == 'chroot' ]]; then
+
+ if [[ $1 == 'chroot' ]]; then
chrun "mkdir -pv '$dir'"
for i in dwm dmenu st; do
if chrun "git clone 'https://git.suckless.org/$i' '$dir/$i'"; then
[[ $LUKS ]] && add="encrypt"
[[ $LVM ]] && { [[ $add ]] && add+=" lvm2" || add+="lvm2"; }
sed -i "s/block filesystems/block ${add} filesystems ${HOOKS}/g" "$MNT/etc/mkinitcpio.conf"
- chrun "mkinitcpio -p $KERNEL" 2> $ERR 2>&1
+ chrun "mkinitcpio -p $KERNEL" 2> "$ERR" 2>&1
errshow 1 "mkinitcpio -p $KERNEL"
}
Option "TearFree" "true"
EndSection
EOF
+ cat "$xpath/20-intel.conf"
elif lspci | grep ' VGA ' | grep -q 'AMD/ATI.*RX\|AMD/ATI.*R[579]'; then # newer RX, R5, R7, and R9 cards can use the amdgpu driver
echo "Creating AMD Tear Free config /etc/X11/xorg.conf.d/20-amdgpu.conf"
cat > "$xpath/20-amdgpu.conf" <<- EOF
Option "TearFree" "true"
EndSection
EOF
+ cat "$xpath/20-amdgpu.conf"
elif lspci | grep ' VGA ' | grep -q 'AMD/ATI.*HD [2-6][0-9]*'; then # older HD 2xxx-6xxx cards must use the radeon driver
echo "Creating Radeon Tear Free config /etc/X11/xorg.conf.d/20-radeon.conf"
cat > "$xpath/20-radeon.conf" <<- EOF
Option "TearFree" "on"
EndSection
EOF
+ cat "$xpath/20-radeon.conf"
elif lspci | grep ' VGA ' | grep -q 'NVIDIA'; then # nvidia cards require a bit of checking for notebook gpus
echo "Trying nvidia driver install"
if lspci | grep ' VGA ' | grep -q 'Intel\|AMD' && lspci | grep ' VGA ' | grep -q 'NVIDIA.*[6-9][1-8][05]M[X]\?\|NVIDIA.*Quadro.*[KMP][1-6][0-2][0]*M'; then # optimus
fi
fi
if [[ -e $xpath/20-nvidia.conf ]]; then
+ cat "$xpath/20-radeon.conf"
+ echo
echo "NVIDIA driver installed"
if [[ $xpath == *"$MNT"* ]]; then
echo "Trying to load the driver for live session"
BCMDS[grub]="grub-install --recheck --force --target=i386-pc $BOOT_DEV"
else
BCMDS[grub]="mount -t efivarfs efivarfs /sys/firmware/efi/efivars > /dev/null 2>&1
- grub-install --recheck --force --target=x86_64-efi --efi-directory=/$BOOTDIR --bootloader-id=$DIST"
+ grub-install --recheck --force --target=x86_64-efi --efi-directory=/boot --bootloader-id=$DIST"
grep -q /sys/firmware/efi/efivars /proc/mounts || mount -t efivarfs efivarfs /sys/firmware/efi/efivars > /dev/null 2>&1
fi
sed -i "s/GRUB_DISTRIBUTOR=.*/GRUB_DISTRIBUTOR=\"${DIST}\"/g; s/GRUB_CMDLINE_LINUX_DEFAULT=.*/GRUB_CMDLINE_LINUX_DEFAULT=\"\"/g" "$MNT/etc/default/grub"
if [[ $LUKS_DEV ]]; then
- sed -i "s~#GRUB_ENABLE_CRYPTODISK~GRUB_ENABLE_CRYPTODISK~g; s~GRUB_CMDLINE_LINUX=.*~GRUB_CMDLINE_LINUX=\"${LUKS_DEV}\"~g" "$MNT/etc/default/grub" 2> $ERR 2>&1
+ sed -i "s~#GRUB_ENABLE_CRYPTODISK~GRUB_ENABLE_CRYPTODISK~g; s~GRUB_CMDLINE_LINUX=.*~GRUB_CMDLINE_LINUX=\"${LUKS_DEV}\"~g" "$MNT/etc/default/grub" 2> "$ERR" 2>&1
errshow 1 "sed -i 's~#GRUB_ENABLE_CRYPTODISK~GRUB_ENABLE_CRYPTODISK~g; s~GRUB_CMDLINE_LINUX=.*~GRUB_CMDLINE_LINUX=\"${LUKS_DEV}\"~g' $MNT/etc/default/grub"
fi
if [[ $SYS == 'BIOS' && $LVM && -z $SEP_BOOT ]]; then
- sed -i "s/GRUB_PRELOAD_MODULES=.*/GRUB_PRELOAD_MODULES=\"lvm\"/g" "$MNT/etc/default/grub" 2> $ERR 2>&1
+ sed -i "s/GRUB_PRELOAD_MODULES=.*/GRUB_PRELOAD_MODULES=\"lvm\"/g" "$MNT/etc/default/grub" 2> "$ERR" 2>&1
errshow 1 "sed -i 's/GRUB_PRELOAD_MODULES=.*/GRUB_PRELOAD_MODULES=\"lvm\"/g' $MNT/etc/default/grub"
fi
s="/usr/lib/syslinux/efi64"
d='';
fi
- mkdir -pv "$c" 2> $ERR 2>&1
+ mkdir -pv "$c" 2> "$ERR" 2>&1
errshow 1 "mkdir -pv $c"
- cp -rfv "$s/"* "$c/" 2> $ERR 2>&1
+ cp -rfv "$s/"* "$c/" 2> "$ERR" 2>&1
errshow 1 "cp -rfv $s/* $c/"
- cp -fv "$RUN/syslinux/splash.png" "$c/" 2> $ERR 2>&1
+ cp -fv "$RUN/syslinux/splash.png" "$c/" 2> "$ERR" 2>&1
errshow 0 "cp -fv $RUN/syslinux/splash.png $c/"
cat > "$c/syslinux.cfg" <<- EOF
UI vesamenu.c32
lvm_detect()
{
- local v pv
- pv="$(pvs -o pv_name --noheading 2> /dev/null)"
- v="$(lvs -o vg_name,lv_name --noheading --separator - 2> /dev/null)"
- VGROUP="$(vgs -o vg_name --noheading 2> /dev/null)"
-
- if [[ $VGROUP && $v && $pv ]]; then
- msg "LVM Setup" "\nActivating existing logical volume management.\n" 0
- modprobe dm-mod > /dev/null 2> $ERR
- errshow 'modprobe dm-mod'
- vgscan > /dev/null 2>&1
- vgchange -ay > /dev/null 2>&1
+ if [[ $(vgs -o vg_name --noheading 2> /dev/null) ]]; then
+ if [[ $(lvs -o vg_name,lv_name --noheading --separator - 2> /dev/null) && $(pvs -o pv_name --noheading 2> /dev/null) ]]; then
+ msg "LVM Setup" "\nActivating existing logical volume management.\n" 0
+ modprobe dm-mod > /dev/null 2> "$ERR"
+ errshow 'modprobe dm-mod'
+ vgscan > /dev/null 2>&1
+ vgchange -ay > /dev/null 2>&1
+ fi
fi
}
lvm_extra_lvs || return 1
lvm_volume_name "$_lvmlvname\nNOTE: This LV will use up all remaining space in the volume group (${VGROUP_MB}MB)" || return 1
msg "$_lvmnew (LV:$VOL_COUNT)" "\nCreating volume $VNAME from remaining space in $VGROUP\n" 0
- lvcreate -l +100%FREE "$VGROUP" -n "$VNAME" > /dev/null 2> $ERR
+ lvcreate -l +100%FREE "$VGROUP" -n "$VNAME" > /dev/null 2> "$ERR"
errshow "lvcreate -l +100%FREE $VGROUP -n $VNAME" || return 1
LVM='logical volume'; sleep 0.5
txt="\nDone, volume: $VGROUP-$VNAME (${VOLUME_SIZE:-${VGROUP_MB}MB}) has been created.\n"
done
msg "$_lvmnew" "\nCreating volume group: $VGROUP\n" 0
- vgcreate -f "$VGROUP" $LVM_PARTS > /dev/null 2> $ERR
+ vgcreate -f "$VGROUP" $LVM_PARTS > /dev/null 2> "$ERR"
errshow "vgcreate -f $VGROUP $LVM_PARTS" || return 1
SIZE=$(vgdisplay "$VGROUP" | awk '/VG Size/ { gsub(/[^0-9.]/, ""); print int($0) }')
while (( VOL_COUNT > 1 )); do
lvm_volume_name "$_lvmlvname" && lvm_lv_size || return 1
msg "$_lvmnew (LV:$VOL_COUNT)" "\nCreating a $VOLUME_SIZE volume $VNAME in $VGROUP\n" 0
- lvcreate -L "$VOLUME_SIZE" "$VGROUP" -n "$VNAME" > /dev/null 2> $ERR
+ lvcreate -L "$VOLUME_SIZE" "$VGROUP" -n "$VNAME" > /dev/null 2> "$ERR"
errshow "lvcreate -L $VOLUME_SIZE $VGROUP -n $VNAME" || return 1
msg "$_lvmnew (LV:$VOL_COUNT)" "\nDone, logical volume (LV) $VNAME ($VOLUME_SIZE) has been created.\n"
(( VOL_COUNT-- ))
luks_pass "$_luksopen" || return 1
msg "$_luksopen" "\nOpening encrypted partition: $LUKS_NAME\n\nUsing device/volume: $LUKS_PART\n" 0
- cryptsetup open --type luks "$LUKS_PART" "$LUKS_NAME" <<< "$LUKS_PASS" 2> $ERR
+ cryptsetup open --type luks "$LUKS_PART" "$LUKS_NAME" <<< "$LUKS_PASS" 2> "$ERR"
errshow "cryptsetup open --type luks $LUKS_PART $LUKS_NAME" || return 1
LUKS='encrypted'; luks_show
return 0
{
luks_setup || return 1
msg "$_luksnew" "\nCreating encrypted partition: $LUKS_NAME\n\nDevice or volume used: $LUKS_PART\n" 0
- cryptsetup -q luksFormat "$LUKS_PART" <<< "$LUKS_PASS" 2> $ERR
+ cryptsetup -q luksFormat "$LUKS_PART" <<< "$LUKS_PASS" 2> "$ERR"
errshow "cryptsetup -q luksFormat $LUKS_PART" || return 1
- cryptsetup open "$LUKS_PART" "$LUKS_NAME" <<< "$LUKS_PASS" 2> $ERR
+ cryptsetup open "$LUKS_PART" "$LUKS_NAME" <<< "$LUKS_PASS" 2> "$ERR"
errshow "cryptsetup open $LUKS_PART $LUKS_NAME" || return 1
LUKS='encrypted'; luks_show
return 0
dlg cipher input "LUKS Encryption" "$_lukskey" "-s 512 -c aes-xts-plain64"
[[ $cipher ]] || return 1
msg "$_luksadv" "\nCreating encrypted partition: $LUKS_NAME\n\nDevice or volume used: $LUKS_PART\n" 0
- cryptsetup -q $cipher luksFormat "$LUKS_PART" <<< "$LUKS_PASS" 2> $ERR
+ cryptsetup -q $cipher luksFormat "$LUKS_PART" <<< "$LUKS_PASS" 2> "$ERR"
errshow "cryptsetup -q $cipher luksFormat $LUKS_PART" || return 1
- cryptsetup open "$LUKS_PART" "$LUKS_NAME" <<< "$LUKS_PASS" 2> $ERR
+ cryptsetup open "$LUKS_PART" "$LUKS_NAME" <<< "$LUKS_PASS" 2> "$ERR"
errshow "cryptsetup open $LUKS_PART $LUKS_NAME" || return 1
luks_show
return 0
pacman -Scc --noconfirm
rm -rf /var/cache/pacman/pkg/*
cp -rfT /etc/skel /root
- install_tearfree_conf "/etc/X11/xorg.conf.d"
+ [[ $TEARFREE ]] && install_tearfree_conf "/etc/X11/xorg.conf.d"
case "$ses" in
plasma|gnome|cinnamon) sed -i '/super/d; /nitrogen/d; /compton/d' /root/.xprofile ;;
dwm) sed -i '/super/d; /compton/d' /root/.xprofile ;;
usage: $1 [-hdl] [session]
options:
- -h, --help print this message and exit
- -l, --live install and setup a live session
- -d, --debug enable xtrace and log output to $DBG
+ -h, --help print this message and exit
+ -l, --live install and setup a live session
+ -d, --debug enable xtrace and log output to $DBG
+ -t, --tearfree install and setup drivers for nvidia or tearfree xorg configs for other vendors
+ if you experience boot issues with this option you can remove
+ /etc/X11/xorg.conf.d/20-*.conf
sessions:
i3-gaps - A fork of i3wm with more features including gaps
# trap ^C to perform cleanup
trap 'printf "\n^C\n" && die 1' INT
-while getopts ":hl:d" OPT; do
+while getopts ":htl:d" OPT; do
case "$OPT" in
d) debug ;;
h) usage "$0" ;;
+ t) TEARFREE=true ;;
l)
if [[ "${!WM_SESSIONS[@]}" =~ $OPTARG ]]; then
live "$OPTARG"