You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
743 lines
26 KiB
Bash
743 lines
26 KiB
Bash
# !/bin/bash
|
|
#
|
|
# Architect Installation Framework (2016-2017)
|
|
#
|
|
# Written by Carl Duff and @mandog for Archlinux
|
|
# Heavily modified and re-written by @Chrysostomus to install Manjaro instead
|
|
# Contributors: @papajoker, @oberon and the Manjaro-Community.
|
|
#
|
|
# This program is free software, provided under the GNU General Public License
|
|
# as published by the Free Software Foundation. So feel free to copy, distribute,
|
|
# or modify it as you wish.
|
|
|
|
advanced_menu() {
|
|
declare -i loopmenu=1
|
|
while ((loopmenu)); do
|
|
submenu 7
|
|
DIALOG " $_InstAdvBase " --default-item ${HIGHLIGHT_SUB} \
|
|
--menu "\n " 0 0 7 \
|
|
"1" "$_InstDEGit" \
|
|
"2" "$_InstDE|>" \
|
|
"3" "$_InstDrvTitle|>" \
|
|
"4" "$_SecMenuTitle|>" \
|
|
"5" "Chroot into installation" \
|
|
"6" "$_InstMulCust" \
|
|
"7" "$_Back" 2>${ANSWER} || return 0
|
|
HIGHLIGHT_SUB=$(cat ${ANSWER})
|
|
|
|
case $(cat ${ANSWER}) in
|
|
"1") check_base && install_manjaro_de_wm_git
|
|
;;
|
|
"2") check_base && install_vanilla_de_wm
|
|
;;
|
|
"3") check_base && install_drivers_menu
|
|
;;
|
|
"4") check_base && security_menu
|
|
;;
|
|
"5") check_base && chroot_interactive
|
|
;;
|
|
"6") install_cust_pkgs
|
|
;;
|
|
*) loopmenu=0
|
|
return 0
|
|
;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
install_cust_pkgs() {
|
|
echo "" > ${PACKAGES}
|
|
pacman -Ssq | fzf -m -e --header="$_AddPkgs" --prompt="$_AddPkgsPrmpt > " --reverse >${PACKAGES} || return 0
|
|
|
|
clear
|
|
# If at least one package, install.
|
|
if [[ $(cat ${PACKAGES}) != "" ]]; then
|
|
if $hostcache; then
|
|
basestrap ${MOUNTPOINT} $(cat ${PACKAGES}) 2>$ERR
|
|
else
|
|
basestrap -c ${MOUNTPOINT} $(cat ${PACKAGES}) 2>$ERR
|
|
fi
|
|
check_for_error "$FUNCNAME $(cat ${PACKAGES})" "$?"
|
|
fi
|
|
}
|
|
|
|
rm_pgs(){
|
|
manjaro-chroot /mnt "pacman -Qq" | fzf -m -e --header="$_RmPkgsMsg" --prompt="$_RmPkgsPrmpt > " --reverse > /tmp/.to_be_removed || return 0
|
|
|
|
if [[ $(cat /tmp/.to_be_removed) != "" ]]; then
|
|
arch_chroot "pacman -Rsn $(cat /tmp/.to_be_removed)" 2>$ERR
|
|
check_for_error "$FUNCNAME $(cat /tmp/.to_be_removed)" "$?"
|
|
fi
|
|
}
|
|
|
|
chroot_interactive() {
|
|
|
|
DIALOG " $_EnterChroot " --infobox "$_ChrootReturn" 0 0
|
|
echo ""
|
|
echo ""
|
|
arch_chroot bash
|
|
}
|
|
|
|
install_manjaro_de_wm_git() {
|
|
if check_desktop; then
|
|
PROFILES="$DATADIR/profiles"
|
|
# Only show this information box once
|
|
if [[ $SHOW_ONCE -eq 0 ]]; then
|
|
DIALOG " $_InstDETitle " --msgbox "\n$_InstPBody\n " 0 0
|
|
SHOW_ONCE=1
|
|
fi
|
|
clear
|
|
# install git if not already installed
|
|
inst_needed git
|
|
# download manjaro-tools.-isoprofiles git repo
|
|
if [[ -e $PROFILES ]]; then
|
|
git -C $PROFILES pull 2>$ERR
|
|
check_for_error "pull profiles repo" $?
|
|
else
|
|
git clone -b manjaro-architect --depth 1 https://gitlab.manjaro.org/profiles-and-settings/iso-profiles.git $PROFILES 2>$ERR
|
|
check_for_error "clone profiles repo" $?
|
|
fi
|
|
|
|
install_manjaro_de_wm
|
|
fi
|
|
}
|
|
|
|
install_vanilla_de_wm() {
|
|
local PARENT="$FUNCNAME"
|
|
declare -i loopmenu=1
|
|
while ((loopmenu)); do
|
|
ssubmenu 7
|
|
DIALOG " $_InstGrMenuTitle " --default-item ${HIGHLIGHT_SSUB} \
|
|
--menu "\n$_InstGrMenuBody\n " 0 0 6 \
|
|
"1" "$_InstGrMenuDS" \
|
|
"2" "$_InstGrDE" \
|
|
"3" "$_InstGrMenuDM" \
|
|
"4" "$_InstNMMenuTitle|>" \
|
|
"5" "$_InstMultMenuTitle|>" \
|
|
"6" "$_Back" 2>${ANSWER}
|
|
HIGHLIGHT_SSUB=$(cat ${ANSWER})
|
|
|
|
case $(cat ${ANSWER}) in
|
|
"1") install_xorg_input
|
|
;;
|
|
"2") install_de_wm
|
|
;;
|
|
"3") install_dm
|
|
;;
|
|
"4") install_network_menu
|
|
;;
|
|
"5") install_multimedia_menu
|
|
;;
|
|
*) loopmenu=0
|
|
return 0
|
|
;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
# Install xorg and input drivers. Also copy the xkbmap configuration file created earlier to the installed system
|
|
install_xorg_input() {
|
|
echo "" > ${PACKAGES}
|
|
|
|
DIALOG " $_InstGrMenuDS " --checklist "\n$_InstGrMenuDSBody\n\n$_UseSpaceBar\n " 0 0 11 \
|
|
"wayland" "-" off \
|
|
"xorg-server" "-" on \
|
|
"xorg-server-common" "-" off \
|
|
"xorg-xinit" "-" on \
|
|
"xorg-server-xwayland" "-" off \
|
|
"xf86-input-evdev" "-" off \
|
|
"xf86-input-libinput" "-" on \
|
|
"xf86-input-synaptics" "-" off 2>${PACKAGES}
|
|
|
|
clear
|
|
# If at least one package, install.
|
|
if [[ $(cat ${PACKAGES}) != "" ]]; then
|
|
basestrap ${MOUNTPOINT} $(cat ${PACKAGES}) 2>$ERR
|
|
check_for_error "$FUNCNAME" $?
|
|
fi
|
|
|
|
# now copy across .xinitrc for all user accounts
|
|
user_list=$(ls ${MOUNTPOINT}/home/ | sed "s/lost+found//")
|
|
for i in ${user_list}; do
|
|
[[ -e ${MOUNTPOINT}/home/$i/.xinitrc ]] || cp -f ${MOUNTPOINT}/etc/X11/xinit/xinitrc ${MOUNTPOINT}/home/$i/.xinitrc
|
|
arch_chroot "chown -R ${i}:${i} /home/${i}"
|
|
done
|
|
|
|
HIGHLIGHT_SUB=1
|
|
}
|
|
|
|
install_de_wm() {
|
|
# Only show this information box once
|
|
if [[ $SHOW_ONCE -eq 0 ]]; then
|
|
DIALOG " $_InstDETitle " --msgbox "\n$_DEInfoBody\n " 0 0
|
|
SHOW_ONCE=1
|
|
fi
|
|
|
|
# DE/WM Menu
|
|
DIALOG " $_InstDETitle " --checklist "\n$_InstDEBody\n\n$_UseSpaceBar\n " 0 0 13 \
|
|
"awesome + vicious" "-" off \
|
|
"budgie-desktop" "-" off \
|
|
"cinnamon" "-" off \
|
|
"deepin" "-" off \
|
|
"deepin-extra" "-" off \
|
|
"enlightenment + terminology" "-" off \
|
|
"fluxbox + fbnews" "-" off \
|
|
"gnome" "-" off \
|
|
"gnome-extra" "-" off \
|
|
"gnome-shell" "-" off \
|
|
"i3-wm + i3lock + i3status" "-" off \
|
|
"icewm + icewm-themes" "-" off \
|
|
"jwm" "-" off \
|
|
"kde-applications" "-" off \
|
|
"lxde" "-" off \
|
|
"lxqt + oxygen-icons" "-" off \
|
|
"mate" "-" off \
|
|
"mate-extra" "-" off \
|
|
"mate-extra-gtk3" "-" off \
|
|
"mate-gtk3" "-" off \
|
|
"openbox + openbox-themes" "-" off \
|
|
"pekwm + pekwm-themes" "-" off \
|
|
"plasma" "-" off \
|
|
"plasma-desktop" "-" off \
|
|
"windowmaker" "-" off \
|
|
"xfce4" "-" off \
|
|
"xfce4-goodies" "-" off 2>${PACKAGES}
|
|
|
|
# If something has been selected, install
|
|
if [[ $(cat ${PACKAGES}) != "" ]]; then
|
|
clear
|
|
sed -i 's/+\|\"//g' ${PACKAGES}
|
|
if $hostcache; then
|
|
basestrap ${MOUNTPOINT} $(cat ${PACKAGES}) 2>$ERR
|
|
else
|
|
basestrap -c ${MOUNTPOINT} $(cat ${PACKAGES}) 2>$ERR
|
|
fi
|
|
check_for_error "${FUNCNAME}: ${PACKAGES}" "$?"
|
|
|
|
# Clear the packages file for installation of "common" packages
|
|
echo "" > ${PACKAGES}
|
|
|
|
# Offer to install various "common" packages.
|
|
DIALOG " $_InstComTitle " --checklist "\n$_InstComBody\n\n$_UseSpaceBar\n " 0 50 14 \
|
|
"bash-completion" "-" on \
|
|
"gnome-icon-theme" "-" on \
|
|
"gnome-keyring" "-" on \
|
|
"gvfs" "-" on \
|
|
"gvfs-afc" "-" on \
|
|
"gvfs-smb" "-" on \
|
|
"polkit" "-" on \
|
|
"ntfs-3g" "-" on \
|
|
"ttf-dejavu" "-" on \
|
|
"xdg-user-dirs" "-" on \
|
|
"xdg-utils" "-" on \
|
|
"xterm" "-" on 2>${PACKAGES}
|
|
|
|
# If at least one package, install.
|
|
if [[ $(cat ${PACKAGES}) != "" ]]; then
|
|
clear
|
|
|
|
if $hostcache; then
|
|
basestrap ${MOUNTPOINT} $(cat ${PACKAGES}) 2>$ERR
|
|
else
|
|
basestrap -c ${MOUNTPOINT} $(cat ${PACKAGES}) 2>$ERR
|
|
fi
|
|
check_for_error "basestrap ${MOUNTPOINT} $(cat ${PACKAGES})" "$?"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# Display Manager
|
|
install_dm() {
|
|
if [[ $DM_ENABLED -eq 0 ]]; then
|
|
# Prep variables
|
|
echo "" > ${PACKAGES}
|
|
dm_list="gdm lxdm lightdm sddm"
|
|
DM_LIST=""
|
|
DM_INST=""
|
|
|
|
# Generate list of DMs installed with DEs, and a list for selection menu
|
|
for i in ${dm_list}; do
|
|
[[ -e ${MOUNTPOINT}/usr/bin/${i} ]] && DM_INST="${DM_INST} ${i}" && check_for_error "${i} already installed."
|
|
DM_LIST="${DM_LIST} ${i} -"
|
|
done
|
|
|
|
DIALOG " $_DmChTitle " --menu "\n$_AlreadyInst$DM_INST\n\n$_DmChBody\n " 0 0 4 \
|
|
${DM_LIST} 2>${PACKAGES}
|
|
clear
|
|
# If a selection has been made, act
|
|
if [[ $(cat ${PACKAGES}) != "" ]]; then
|
|
# check if selected dm already installed. If so, enable and break loop.
|
|
for i in ${DM_INST}; do
|
|
if [[ $(cat ${PACKAGES}) == ${i} ]]; then
|
|
enable_dm
|
|
break;
|
|
fi
|
|
done
|
|
|
|
# If no match found, install and enable DM
|
|
if [[ $DM_ENABLED -eq 0 ]]; then
|
|
# Where lightdm selected, add gtk greeter package
|
|
sed -i 's/lightdm/lightdm lightdm-gtk-greeter/' ${PACKAGES}
|
|
if [[ -e /mnt/.openrc ]]; then
|
|
echo "$(cat ${PACKAGES}) displaymanager-openrc" >${PACKAGES}
|
|
fi
|
|
basestrap ${MOUNTPOINT} $(cat ${PACKAGES}) 2>$ERR
|
|
check_for_error "install ${PACKAGES}" $?
|
|
|
|
# Where lightdm selected, now remove the greeter package
|
|
sed -i 's/lightdm-gtk-greeter//' ${PACKAGES}
|
|
enable_dm
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
# Show after successfully installing or where attempting to repeat when already completed.
|
|
[[ $DM_ENABLED -eq 1 ]] && DIALOG " $_DmChTitle " --msgbox "\n$_DmDoneBody\n " 0 0
|
|
}
|
|
|
|
enable_dm() {
|
|
if [[ -e /mnt/.openrc ]]; then
|
|
sed -i "s/$(grep "DISPLAYMANAGER=" /mnt/etc/conf.d/xdm)/DISPLAYMANAGER=\"$(cat ${PACKAGES})\"/g" /mnt/etc/conf.d/xdm
|
|
arch_chroot "rc-update add xdm default" 2>$ERR
|
|
check_for_error "add default xdm" "$?"
|
|
DM=$(cat ${PACKAGES})
|
|
DM_ENABLED=1
|
|
else
|
|
# enable display manager for systemd
|
|
arch_chroot "systemctl enable $(cat ${PACKAGES})" 2>$ERR
|
|
check_for_error "enable $(cat ${PACKAGES})" "$?"
|
|
DM=$(cat ${PACKAGES})
|
|
DM_ENABLED=1
|
|
fi
|
|
}
|
|
|
|
install_network_menu() {
|
|
declare -i loopmenu=1
|
|
while ((loopmenu)); do
|
|
local PARENT="$FUNCNAME"
|
|
|
|
submenu 5
|
|
DIALOG " $_InstNMMenuTitle " --default-item ${HIGHLIGHT_SUB} --menu "\n$_InstNMMenuBody\n " 0 0 5 \
|
|
"1" "$_SeeWirelessDev" \
|
|
"2" "$_InstNMMenuPkg" \
|
|
"3" "$_InstNMMenuNM" \
|
|
"4" "$_InstNMMenuCups" \
|
|
"5" "$_Back" 2>${ANSWER}
|
|
|
|
case $(cat ${ANSWER}) in
|
|
"1") # Identify the Wireless Device
|
|
lspci -k | grep -i -A 2 "network controller" > /tmp/.wireless
|
|
if [[ $(cat /tmp/.wireless) != "" ]]; then
|
|
DIALOG " $_WirelessShowTitle " --textbox /tmp/.wireless 0 0
|
|
else
|
|
DIALOG " $_WirelessShowTitle " --msgbox "\n$_WirelessErrBody\n " 7 30
|
|
fi
|
|
;;
|
|
"2") install_wireless_packages
|
|
;;
|
|
"3") install_nm
|
|
;;
|
|
"4") install_cups
|
|
;;
|
|
*) loopmenu=0
|
|
return 0
|
|
;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
# ntp not exactly wireless, but this menu is the best fit.
|
|
install_wireless_packages() {
|
|
WIRELESS_PACKAGES=""
|
|
wireless_pkgs="dialog iw rp-pppoe wireless_tools wpa_actiond"
|
|
|
|
for i in ${wireless_pkgs}; do
|
|
WIRELESS_PACKAGES="${WIRELESS_PACKAGES} ${i} - on"
|
|
done
|
|
|
|
# If no wireless, uncheck wireless pkgs
|
|
[[ $(lspci | grep -i "Network Controller") == "" ]] && WIRELESS_PACKAGES=$(echo $WIRELESS_PACKAGES | sed "s/ on/ off/g")
|
|
|
|
DIALOG " $_InstNMMenuPkg " --checklist "\n$_InstNMMenuPkgBody\n\n$_UseSpaceBar\n " 0 0 13 \
|
|
$WIRELESS_PACKAGES \
|
|
"ufw" "-" off \
|
|
"gufw" "-" off \
|
|
"ntp" "-" off \
|
|
"b43-fwcutter" "Broadcom 802.11b/g/n" off \
|
|
"bluez-firmware" "Broadcom BCM203x / STLC2300 Bluetooth" off \
|
|
"ipw2100-fw" "Intel PRO/Wireless 2100" off \
|
|
"ipw2200-fw" "Intel PRO/Wireless 2200" off \
|
|
"zd1211-firmware" "ZyDAS ZD1211(b) 802.11a/b/g USB WLAN" off 2>${PACKAGES}
|
|
|
|
if [[ $(cat ${PACKAGES}) != "" ]]; then
|
|
clear
|
|
basestrap ${MOUNTPOINT} $(cat ${PACKAGES}) 2>$ERR
|
|
check_for_error "$FUNCNAME" $?
|
|
fi
|
|
}
|
|
|
|
# Network Manager
|
|
install_nm() {
|
|
if [[ $NM_ENABLED -eq 0 ]]; then
|
|
# Prep variables
|
|
echo "" > ${PACKAGES}
|
|
nm_list="connman CLI dhcpcd CLI netctl CLI NetworkManager GUI wicd GUI"
|
|
NM_LIST=""
|
|
NM_INST=""
|
|
|
|
# Generate list of DMs installed with DEs, and a list for selection menu
|
|
for i in ${nm_list}; do
|
|
[[ -e ${MOUNTPOINT}/usr/bin/${i} ]] && NM_INST="${NM_INST} ${i}" && check_for_error "${i} already installed."
|
|
NM_LIST="${NM_LIST} ${i}"
|
|
done
|
|
|
|
# Remove netctl from selectable list as it is a PITA to configure via arch_chroot
|
|
NM_LIST=$(echo $NM_LIST | sed "s/netctl CLI//")
|
|
|
|
DIALOG " $_InstNMTitle " --menu "\n$_AlreadyInst $NM_INST\n$_InstNMBody\n " 0 0 4 \
|
|
${NM_LIST} 2> ${PACKAGES}
|
|
clear
|
|
|
|
# If a selection has been made, act
|
|
if [[ $(cat ${PACKAGES}) != "" ]]; then
|
|
# check if selected nm already installed. If so, enable and break loop.
|
|
for i in ${NM_INST}; do
|
|
[[ $(cat ${PACKAGES}) == ${i} ]] && enable_nm && break
|
|
done
|
|
|
|
# If no match found, install and enable NM
|
|
if [[ $NM_ENABLED -eq 0 ]]; then
|
|
# Where networkmanager selected, add network-manager-applet
|
|
sed -i 's/NetworkManager/networkmanager network-manager-applet/g' ${PACKAGES}
|
|
basestrap ${MOUNTPOINT} $(cat ${PACKAGES}) 2>$ERR
|
|
check_for_error "$FUNCNAME" "$?"
|
|
|
|
# Where networkmanager selected, now remove network-manager-applet
|
|
sed -i 's/networkmanager network-manager-applet/NetworkManager/g' ${PACKAGES}
|
|
enable_nm
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
# Show after successfully installing or where attempting to repeat when already completed.
|
|
[[ $NM_ENABLED -eq 1 ]] && DIALOG " $_InstNMTitle " --msgbox "\n$_InstNMErrBody\n " 0 0
|
|
}
|
|
|
|
enable_nm() {
|
|
# Add openrc support. If openrcbase was installed, the file /mnt/.openrc should exist.
|
|
if [[ $(cat ${PACKAGES}) == "NetworkManager" ]]; then
|
|
if [[ -e /mnt/.openrc ]]; then
|
|
arch_chroot "rc-update add NetworkManager default" 2>$ERR
|
|
check_for_error "add default NetworkManager." $?
|
|
else
|
|
arch_chroot "systemctl enable NetworkManager NetworkManager-dispatcher" >/tmp/.symlink 2>$ERR
|
|
check_for_error "enable NetworkManager." $?
|
|
fi
|
|
else
|
|
if [[ -e /mnt/.openrc ]]; then
|
|
arch_chroot "rc-update add $(cat ${PACKAGES}) default" 2>$ERR
|
|
check_for_error "add default $(cat ${PACKAGES})." $?
|
|
else
|
|
arch_chroot "systemctl enable $(cat ${PACKAGES})" 2>$ERR
|
|
check_for_error "enable $(cat ${PACKAGES})." $?
|
|
fi
|
|
fi
|
|
NM_ENABLED=1
|
|
}
|
|
|
|
install_cups() {
|
|
DIALOG " $_InstNMMenuCups " --checklist "\n$_InstCupsBody\n\n$_UseSpaceBar\n " 0 0 5 \
|
|
"cups" "-" on \
|
|
"cups-pdf" "-" off \
|
|
"ghostscript" "-" on \
|
|
"gsfonts" "-" on \
|
|
"samba" "-" off 2>${PACKAGES}
|
|
|
|
if [[ $(cat ${PACKAGES}) != "" ]]; then
|
|
clear
|
|
basestrap ${MOUNTPOINT} $(cat ${PACKAGES}) 2>$ERR
|
|
check_for_error "$FUNCNAME" $?
|
|
|
|
if [[ $(cat ${PACKAGES} | grep "cups") != "" ]]; then
|
|
DIALOG " $_InstNMMenuCups " --yesno "\n$_InstCupsQ\n " 0 0
|
|
if [[ $? -eq 0 ]]; then
|
|
# Add openrc support. If openrcbase was installed, the file /mnt/.openrc should exist.
|
|
if [[ -e /mnt/.openrc ]]; then
|
|
arch_chroot "rc-update add cupsd default" 2>$ERR
|
|
else
|
|
arch_chroot "systemctl enable org.cups.cupsd.service" 2>$ERR
|
|
fi
|
|
check_for_error "enable cups" $?
|
|
DIALOG " $_InstNMMenuCups " --infobox "\n$_Done!\n " 0 0
|
|
sleep 2
|
|
fi
|
|
fi
|
|
fi
|
|
}
|
|
|
|
install_multimedia_menu() {
|
|
declare -i loopmenu=1
|
|
while ((loopmenu)); do
|
|
local PARENT="$FUNCNAME"
|
|
|
|
submenu 4
|
|
DIALOG " $_InstMultMenuTitle " --default-item ${HIGHLIGHT_SUB} --menu "\n$_InstMultMenuBody\n " 0 0 4 \
|
|
"1" "$_InstMulSnd" \
|
|
"2" "$_InstMulCodec" \
|
|
"3" "$_InstMulAcc" \
|
|
"4" "$_Back" 2>${ANSWER}
|
|
|
|
HIGHLIGHT_SUB=$(cat ${ANSWER})
|
|
case $(cat ${ANSWER}) in
|
|
"1") install_alsa_pulse
|
|
;;
|
|
"2") install_codecs
|
|
;;
|
|
"3") install_acc_menu
|
|
;;
|
|
*) loopmenu=0
|
|
;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
install_alsa_pulse() {
|
|
# Prep Variables
|
|
echo "" > ${PACKAGES}
|
|
ALSA=""
|
|
PULSE_EXTRA=""
|
|
alsa=$(pacman -Ss alsa | awk '{print $1}' | grep "/alsa-" | sed "s/extra\///g" | sort -u)
|
|
pulse_extra=$(pacman -Ss pulseaudio- | awk '{print $1}' | sed "s/extra\///g" | grep "pulseaudio-" | sort -u)
|
|
|
|
for i in ${alsa}; do
|
|
ALSA="${ALSA} ${i} - off"
|
|
done
|
|
|
|
ALSA=$(echo $ALSA | sed "s/alsa-utils - off/alsa-utils - on/g" | sed "s/alsa-plugins - off/alsa-plugins - on/g")
|
|
|
|
for i in ${pulse_extra}; do
|
|
PULSE_EXTRA="${PULSE_EXTRA} ${i} - off"
|
|
done
|
|
|
|
DIALOG " $_InstMulSnd " --checklist "\n$_InstMulSndBody\n\n$_UseSpaceBar\n " 0 0 6 \
|
|
$ALSA "pulseaudio" "-" off $PULSE_EXTRA \
|
|
"paprefs" "pulseaudio GUI" off \
|
|
"pavucontrol" "pulseaudio GUI" off \
|
|
"ponymix" "pulseaudio CLI" off \
|
|
"volumeicon" "ALSA GUI" off \
|
|
"volwheel" "ASLA GUI" off 2>${PACKAGES}
|
|
|
|
clear
|
|
# If at least one package, install.
|
|
if [[ $(cat ${PACKAGES}) != "" ]]; then
|
|
basestrap ${MOUNTPOINT} $(cat ${PACKAGES}) 2>$ERR
|
|
check_for_error "$FUNCNAME" "$?"
|
|
fi
|
|
}
|
|
|
|
install_codecs() {
|
|
# Prep Variables
|
|
echo "" > ${PACKAGES}
|
|
GSTREAMER=""
|
|
gstreamer=$(pacman -Ss gstreamer | awk '{print $1}' | grep "/gstreamer" | sed "s/extra\///g" | sed "s/community\///g" | sort -u)
|
|
echo $gstreamer
|
|
for i in ${gstreamer}; do
|
|
GSTREAMER="${GSTREAMER} ${i} - off"
|
|
done
|
|
|
|
DIALOG " $_InstMulCodec " --checklist "\n$_InstMulCodBody\n\n$_UseSpaceBar\n " 0 0 14 \
|
|
$GSTREAMER "xine-lib" "-" off 2>${PACKAGES}
|
|
|
|
clear
|
|
# If at least one package, install.
|
|
if [[ $(cat ${PACKAGES}) != "" ]]; then
|
|
basestrap ${MOUNTPOINT} $(cat ${PACKAGES}) 2>$ERR
|
|
check_for_error "$FUNCNAME" "$?"
|
|
fi
|
|
}
|
|
|
|
# Install Accessibility Applications
|
|
install_acc_menu() {
|
|
echo "" > ${PACKAGES}
|
|
|
|
DIALOG " $_InstMulAcc " --checklist "\n$_InstMulAccBody\n " 0 0 15 \
|
|
"accerciser" "-" off \
|
|
"at-spi2-atk" "-" off \
|
|
"at-spi2-core" "-" off \
|
|
"brltty" "-" off \
|
|
"caribou" "-" off \
|
|
"dasher" "-" off \
|
|
"espeak" "-" off \
|
|
"espeakup" "-" off \
|
|
"festival" "-" off \
|
|
"java-access-bridge" "-" off \
|
|
"java-atk-wrapper" "-" off \
|
|
"julius" "-" off \
|
|
"orca" "-" off \
|
|
"qt-at-spi" "-" off \
|
|
"speech-dispatcher" "-" off 2>${PACKAGES}
|
|
|
|
clear
|
|
# If something has been selected, install
|
|
if [[ $(cat ${PACKAGES}) != "" ]]; then
|
|
basestrap ${MOUNTPOINT} ${PACKAGES} 2>$ERR
|
|
check_for_error "$FUNCNAME" $? || return $?
|
|
fi
|
|
}
|
|
|
|
security_menu() {
|
|
declare -i loopmenu=1
|
|
while ((loopmenu)); do
|
|
local PARENT="$FUNCNAME"
|
|
ssubmenu 4
|
|
DIALOG " $_SecMenuTitle " --default-item ${HIGHLIGHT_SSUB} --menu "\n$_SecMenuBody\n " 0 0 4 \
|
|
"1" "$_SecJournTitle" \
|
|
"2" "$_SecCoreTitle" \
|
|
"3" "$_SecKernTitle " \
|
|
"4" "$_Back" 2>${ANSWER}
|
|
HIGHLIGHT_SSUB=$(cat ${ANSWER})
|
|
|
|
case $(cat ${ANSWER}) in
|
|
# systemd-journald
|
|
"1") DIALOG " $_SecJournTitle " --menu "\n$_SecJournBody\n " 0 0 7 \
|
|
"$_Edit" "/etc/systemd/journald.conf" \
|
|
"10M" "SystemMaxUse=10M" \
|
|
"20M" "SystemMaxUse=20M" \
|
|
"50M" "SystemMaxUse=50M" \
|
|
"100M" "SystemMaxUse=100M" \
|
|
"200M" "SystemMaxUse=200M" \
|
|
"$_Disable" "Storage=none" 2>${ANSWER}
|
|
|
|
if [[ $(cat ${ANSWER}) != "" ]]; then
|
|
if [[ $(cat ${ANSWER}) == "$_Disable" ]]; then
|
|
sed -i "s/#Storage.*\|Storage.*/Storage=none/g" ${MOUNTPOINT}/etc/systemd/journald.conf
|
|
sed -i "s/SystemMaxUse.*/#&/g" ${MOUNTPOINT}/etc/systemd/journald.conf
|
|
DIALOG " $_SecJournTitle " --infobox "\n$_Done!\n " 0 0
|
|
sleep 2
|
|
elif [[ $(cat ${ANSWER}) == "$_Edit" ]]; then
|
|
nano ${MOUNTPOINT}/etc/systemd/journald.conf
|
|
else
|
|
sed -i "s/#SystemMaxUse.*\|SystemMaxUse.*/SystemMaxUse=$(cat ${ANSWER})/g" ${MOUNTPOINT}/etc/systemd/journald.conf
|
|
sed -i "s/Storage.*/#&/g" ${MOUNTPOINT}/etc/systemd/journald.conf
|
|
DIALOG " $_SecJournTitle " --infobox "\n$_Done!\n " 0 0
|
|
sleep 2
|
|
fi
|
|
fi
|
|
;;
|
|
# core dump
|
|
"2") DIALOG " $_SecCoreTitle " --menu "\n$_SecCoreBody\n " 0 0 2 \
|
|
"$_Disable" "Storage=none" \
|
|
"$_Edit" "/etc/systemd/coredump.conf" 2>${ANSWER}
|
|
|
|
if [[ $(cat ${ANSWER}) == "$_Disable" ]]; then
|
|
sed -i "s/#Storage.*\|Storage.*/Storage=none/g" ${MOUNTPOINT}/etc/systemd/coredump.conf
|
|
DIALOG " $_SecCoreTitle " --infobox "\n$_Done!\n " 0 0
|
|
sleep 2
|
|
elif [[ $(cat ${ANSWER}) == "$_Edit" ]]; then
|
|
nano ${MOUNTPOINT}/etc/systemd/coredump.conf
|
|
fi
|
|
;;
|
|
# Kernel log access
|
|
"3") DIALOG " $_SecKernTitle " --menu "\n$_SecKernBody\n " 0 0 2 \
|
|
"$_Disable" "kernel.dmesg_restrict = 1" \
|
|
"$_Edit" "/etc/systemd/coredump.conf.d/custom.conf" 2>${ANSWER}
|
|
|
|
case $(cat ${ANSWER}) in
|
|
"$_Disable") echo "kernel.dmesg_restrict = 1" > ${MOUNTPOINT}/etc/sysctl.d/50-dmesg-restrict.conf
|
|
DIALOG " $_SecKernTitle " --infobox "\n$_Done!\n " 0 0
|
|
sleep 2 ;;
|
|
"$_Edit") [[ -e ${MOUNTPOINT}/etc/sysctl.d/50-dmesg-restrict.conf ]] && nano ${MOUNTPOINT}/etc/sysctl.d/50-dmesg-restrict.conf || \
|
|
DIALOG " $_SeeConfErrTitle " --msgbox "\n$_SeeConfErrBody1\n " 0 0 ;;
|
|
esac
|
|
;;
|
|
*) loopmenu=0
|
|
return 0
|
|
;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
enable_console_logging() {
|
|
echo "ForwardToConsole=yes
|
|
TTYPath=/dev/tty12" >> /mnt/etc/systemd/jounald.conf
|
|
sed -i '/MaxLevelConsole/ s/#//' /mnt/etc/systemd/journald.conf
|
|
}
|
|
|
|
enable_hibernation() {
|
|
if DIALOG " Hibernation setup " --yesno "\nAre you sure you want to enable hibernation automatically? \n " 0 0; then
|
|
if ! [[ -e /mnt/etc/fstab ]]; then
|
|
generate_fstab
|
|
fi
|
|
basestrap ${MOUNTPOINT} hibernator
|
|
arch_chroot "hibernator" 2>$ERR
|
|
check_for_error "Running hibernator" $?
|
|
[[ $? == 0 ]] && DIALOG " Hibernation setup " --infobox "\nHibernator was successfully run \n " 0 0
|
|
else
|
|
return 0
|
|
fi
|
|
}
|
|
|
|
enable_autologin() {
|
|
dm=$(file /mnt/etc/systemd/system/display-manager.service 2>/dev/null | awk -F'/' '{print $NF}' | cut -d. -f1)
|
|
[[ -z $dm ]] && dm=xlogin
|
|
if DIALOG " Autologin setup " --yesno "\nThis option enables autologin using $dm.\n\nProceed? \n " 0 0; then
|
|
#detect displaymanager
|
|
if [[ $(echo /mnt/home/* | xargs -n1 | wc -l) == 1 ]]; then
|
|
autologin_user=$(echo /mnt/home/* | cut -d/ -f4)
|
|
else
|
|
autologin_user=$(echo /mnt/home/* | cut -d/ -f4 | fzf --reverse --prompt="user> " --header="Choose the user to automatically log in")
|
|
fi
|
|
#enable autologin
|
|
case "$(echo $dm)" in
|
|
gdm) sed -i "s/^AutomaticLogin=*/AutomaticLogin=$autologin_user/g" /mnt/etc/gdm/custom.conf
|
|
sed -i 's/^AutomaticLoginEnable=*/AutomaticLoginEnable=true/g' /mnt/etc/gdm/custom.conf
|
|
sed -i 's/^TimedLoginEnable=*/TimedLoginEnable=true/g' /mnt/etc/gdm/custom.conf
|
|
sed -i 's/^TimedLogin=*/TimedLoginEnable=$autologin_user/g' /mnt/etc/gdm/custom.conf
|
|
sed -i 's/^TimedLoginDelay=*/TimedLoginDelay=0/g' /mnt/etc/gdm/custom.conf
|
|
;;
|
|
lightdm) sed -i "s/^#autologin-user=/autologin-user=$autologin_user/" /mnt/etc/lightdm/lightdm.conf
|
|
sed -i 's/^#autologin-user-timeout=0/autologin-user-timeout=0/' /mnt/etc/lightdm/lightdm.conf
|
|
arch_chroot "groupadd -r autologin"
|
|
arch_chroot "gpasswd -a $autologin_user autologin"
|
|
;;
|
|
sddm) xsession=$(echo /mnt/usr/share/xsessions/* | xargs -n1 | head -n1 | rev | cut -d'/' -f 1 | rev)
|
|
[[ -e /mnt/etc/sddm.conf ]] || arch_chroot "sddm --example-config > /etc/sddm.conf"
|
|
sed -i "s/^User=/User=$autologin_user/g" /mnt/etc/sddm.conf
|
|
sed -i "s~^Session=~Session=$xsession~g" /mnt/etc/sddm.conf
|
|
;;
|
|
lxdm) sed -i "s/^# autologin=dgod/autologin=$autologin_user/g" /mnt/etc/lxdm/lxdm.conf
|
|
;;
|
|
*) basestrap ${MOUNTPOINT} "xlogin"
|
|
arch_chroot "systemctl enable xlogin@${autologin_user}"
|
|
;;
|
|
esac
|
|
fi
|
|
}
|
|
|
|
set_schedulers() {
|
|
[[ -e /mnt/etc/udev/rules.d/60-ioscheduler.rules ]] || \
|
|
echo '# set scheduler for NVMe
|
|
ACTION=="add|change", KERNEL=="nvme[0-9]n[0-9]", ATTR{queue/scheduler}="none"
|
|
# set scheduler for SSD and eMMC
|
|
ACTION=="add|change", KERNEL=="sd[a-z]|mmcblk[0-9]*", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="mq-deadline"
|
|
# set scheduler for rotating disks
|
|
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="bfq"' > /mnt/etc/udev/rules.d/60-ioscheduler.rules
|
|
nano /mnt/etc/udev/rules.d/60-ioscheduler.rules
|
|
}
|
|
|
|
set_swappiness() {
|
|
[[ -e /mnt/etc/sysctl.d/99-sysctl.conf ]] || \
|
|
echo 'vm.swappiness = 10
|
|
vm.vfs_cache_pressure = 50
|
|
#vm.dirty_ratio = 3' > /mnt/etc/sysctl.d/99-sysctl.conf
|
|
nano /mnt/etc/sysctl.d/99-sysctl.conf
|
|
}
|
|
|
|
preloader() {
|
|
if DIALOG " Preload setup " --yesno "\n Enabling preload loads often used applications to ram in advance in order to start them up more quickly. \n\nProceed? \n " 0 0; then
|
|
basestrap ${MOUNTPOINT} "preload"
|
|
arch_chroot "systemctl enable preload"
|
|
fi
|
|
|
|
}
|