manjaro-architect/lib/util-desktop.sh
2017-03-27 19:17:45 +02:00

236 lines
8.8 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.
setup_graphics_card() {
DIALOG " $_GCDetBody " --radiolist "\n$_UseSpaceBar\n " 0 0 12 \
$(mhwd -l | awk '/video-/{print $1}' |awk '$0=$0" - off"') 2> /tmp/.driver || return 0
if [[ $(cat /tmp/.driver) != "" ]]; then
clear
arch_chroot "mhwd -f -i pci $(cat /tmp/.driver)" 2>$ERR
check_for_error "install $(cat /tmp/.driver)" $?
touch /mnt/.video_installed
GRAPHIC_CARD=$(lspci | grep -i "vga" | sed 's/.*://' | sed 's/(.*//' | sed 's/^[ \t]*//')
# All non-NVIDIA cards / virtualisation
if [[ $(echo $GRAPHIC_CARD | grep -i 'intel\|lenovo') != "" ]]; then
install_intel
elif [[ $(echo $GRAPHIC_CARD | grep -i 'ati') != "" ]]; then
install_ati
elif [[ $(cat /tmp/.driver) == "video-nouveau" ]]; then
sed -i 's/MODULES=""/MODULES="nouveau"/' ${MOUNTPOINT}/etc/mkinitcpio.conf
fi
else
DIALOG " $_ErrTitle " --msgbox "\n$_WarnInstGr\n " 0 0
check_for_error "No video-driver selected."
fi
}
setup_network_drivers() {
DIALOG " $_InstNWDrv " --menu "\n " 0 0 3 \
"1" "$_InstFree" \
"2" "$_InstProp" \
"3" "$_SelNWDrv" 2>${ANSWER} || return 0
case $(cat ${ANSWER}) in
"1") clear
arch_chroot "mhwd -a pci free 0200" 2>$ERR
check_for_error "$FUNCNAME free" $?
;;
"2") clear
arch_chroot "mhwd -a pci nonfree 0200" 2>$ERR
check_for_error "$FUNCNAME nonfree" $?
;;
"3") if [[ $(mhwd -l | awk '/network-/' | wc -l) -eq 0 ]]; then
DIALOG " $_InstNWDrv " --msgbox "\n$_InfoNWKernel\n " 0 0
else
DIALOG " $_InstGrDrv " --checklist "\n$_UseSpaceBar\n " 0 0 12 \
$(mhwd -l | awk '/network-/{print $1}' |awk '$0=$0" - off"') 2> /tmp/.network_driver || return 0
if [[ $(cat /tmp/.driver) != "" ]]; then
clear
arch_chroot "mhwd -f -i pci $(cat /tmp/.network_driver)" 2>$ERR
check_for_error "install $(cat /tmp/.network_driver)" $? || return 1
else
DIALOG " $_ErrTitle " --msgbox "\nNo network driver selected\n " 0 0
check_for_error "No network-driver selected."
fi
fi
;;
esac
}
install_network_drivers() {
if [[ $(mhwd -l | awk '/network-/' | wc -l) -gt 0 ]]; then
for driver in $(mhwd -l | awk '/network-/{print $1}'); do
arch_chroot "mhwd -f -i pci ${driver}" 2>$ERR
check_for_error "install ${driver}" $?
done
else
echo "No special network drivers installed because no need detected."
fi
}
install_intel() {
sed -i 's/MODULES=""/MODULES="i915"/' ${MOUNTPOINT}/etc/mkinitcpio.conf
# Intel microcode (Grub, Syslinux and systemd-boot).
# Done as seperate if statements in case of multiple bootloaders.
if [[ -e ${MOUNTPOINT}/boot/grub/grub.cfg ]]; then
DIALOG " grub-mkconfig " --infobox "\n$_PlsWaitBody\n " 0 0
sleep 1
grub_mkconfig
fi
# Syslinux
[[ -e ${MOUNTPOINT}/boot/syslinux/syslinux.cfg ]] && sed -i "s/INITRD /&..\/intel-ucode.img,/g" ${MOUNTPOINT}/boot/syslinux/syslinux.cfg
# Systemd-boot
if [[ -e ${MOUNTPOINT}${UEFI_MOUNT}/loader/loader.conf ]]; then
update=$(ls ${MOUNTPOINT}${UEFI_MOUNT}/loader/entries/*.conf)
for i in ${upgate}; do
sed -i '/linux \//a initrd \/intel-ucode.img' ${i}
done
fi
}
install_ati() {
sed -i 's/MODULES=""/MODULES="radeon"/' ${MOUNTPOINT}/etc/mkinitcpio.conf
}
# Set keymap for X11
set_xkbmap() {
XKBMAP_LIST=""
keymaps_xkb=("af al am at az ba bd be bg br bt bw by ca cd ch cm cn cz de dk ee es et eu fi fo fr\
gb ge gh gn gr hr hu ie il in iq ir is it jp ke kg kh kr kz la lk lt lv ma md me mk ml mm mn mt mv\
ng nl no np pc ph pk pl pt ro rs ru se si sk sn sy tg th tj tm tr tw tz ua us uz vn za")
for i in ${keymaps_xkb}; do
XKBMAP_LIST="${XKBMAP_LIST} ${i} -"
done
DIALOG " $_PrepKBLayout " --menu "\n$_XkbmapBody\n " 0 0 16 ${XKBMAP_LIST} 2>${ANSWER} || return 0
XKBMAP=$(cat ${ANSWER} |sed 's/_.*//')
echo -e "Section "\"InputClass"\"\nIdentifier "\"system-keyboard"\"\nMatchIsKeyboard "\"on"\"\nOption "\"XkbLayout"\" "\"${XKBMAP}"\"\nEndSection" \
> ${MOUNTPOINT}/etc/X11/xorg.conf.d/00-keyboard.conf 2>$ERR
check_for_error "$FUNCNAME ${XKBMAP}" "$?"
}
install_manjaro_de_wm_pkg() {
if check_desktop; then
PROFILES="/usr/share/manjaro-tools/iso-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
pacman -Sy --noconfirm $p manjaro-iso-profiles-{base,official,community} 2>$ERR
check_for_error "update profiles pkgs" $?
install_manjaro_de_wm
fi
}
install_manjaro_de_wm() {
# Clear packages after installing base
echo "" > /tmp/.desktop
# DE/WM Menu
DIALOG " $_InstDETitle " --radiolist "\n$_InstManDEBody\n$(evaluate_profiles)\n\n$_UseSpaceBar\n " 0 0 12 \
$(echo $PROFILES/{manjaro,community}/* | xargs -n1 | cut -f7 -d'/' | grep -vE "netinstall|architect" | awk '$0=$0" - off"') 2> /tmp/.desktop
# If something has been selected, install
if [[ $(cat /tmp/.desktop) != "" ]]; then
[[ -e /mnt/.openrc ]] && evaluate_openrc
check_for_error "selected: [Manjaro-$(cat /tmp/.desktop)]"
clear
# Source the iso-profile
profile=$(echo $PROFILES/*/$(cat /tmp/.desktop)/profile.conf)
. $profile
overlay=$(echo $PROFILES/*/$(cat /tmp/.desktop)/desktop-overlay/)
echo $displaymanager > /tmp/.display-manager
# Parse package list based on user input and remove parts that don't belong to pacman
pkgs_src=$(echo $PROFILES/*/$(cat /tmp/.desktop)/Packages-Desktop)
pkgs_target=/mnt/.desktop
echo "" > $pkgs_target
filter_packages
# remove already installed base pkgs and
# basestrap the parsed package list to the new root
check_for_error "packages to install: $(grep -vf /mnt/.base /mnt/.desktop | sort | tr '\n' ' ')"
clear
basestrap ${MOUNTPOINT} $(grep -vf /mnt/.base /mnt/.desktop) 2>$ERR
check_for_error "install desktop-pkgs" "$?" || return 1
# copy the profile overlay to the new root
echo "Copying overlay files to the new root"
cp -r "$overlay"* ${MOUNTPOINT} 2>$ERR
check_for_error "copy overlay" "$?"
# Copy settings to root account
cp -ar $MOUNTPOINT/etc/skel/. $MOUNTPOINT/root/ 2>$ERR
check_for_error "copy root config" "$?"
# copy settings to already created users
if [[ -e "$(echo /mnt/home/*)" ]]; then
for home in $(echo $MOUNTPOINT/home/*); do
cp -ar $MOUNTPOINT/etc/skel/. $home/
user=$(echo $home | cut -d/ -f4)
arch_chroot "chown -R ${user}:${user} /home/${user}"
done
fi
# Enable services in the chosen profile
enable_services
install_graphics_menu
touch /mnt/.desktop_installed
# Stop for a moment so user can see if there were errors
echo ""
echo ""
echo ""
echo "press Enter to continue"
read
# Clear the packages file for installation of "common" packages
echo "" > ${PACKAGES}
# Offer to install various "common" packages.
install_extra
fi
}
set_lightdm_greeter() {
local greeters=$(ls /mnt/usr/share/xgreeters/*greeter.desktop) name
for g in ${greeters[@]}; do
name=${g##*/}
name=${name%%.*}
case ${name} in
lightdm-gtk-greeter)
break
;;
lightdm-*-greeter)
sed -i -e "s/^.*greeter-session=.*/greeter-session=${name}/" /mnt/etc/lightdm/lightdm.conf
;;
esac
done
}
set_sddm_ck() {
local halt='/usr/bin/shutdown -h -P now' \
reboot='/usr/bin/shutdown -r now'
sed -e "s|^.*HaltCommand=.*|HaltCommand=${halt}|" \
-e "s|^.*RebootCommand=.*|RebootCommand=${reboot}|" \
-e "s|^.*MinimumVT=.*|MinimumVT=7|" \
-i "/mnt/etc/sddm.conf"
arch_chroot "gpasswd -a sddm video" 2>$ERR
check_for_error "$FUNCNAME" $?
}