# !/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
}