#!/bin/bash

readonly DEV_RELEASE=1 # 1 for development builds - 0 for production builds
readonly REPOS='libre core extra community pcr'
readonly SYSTEMD_SERVICES_ALL="multi-user.target     \
                               pacman-init.service   \
                               choose-mirror.service "
readonly SYSTEMD_SERVICES_GUI="NetworkManager.service"
readonly DEFAULT_SHELL=/bin/bash
readonly NETINSTALL_MSG="To install Parabola, the system must be connected to the internet."
readonly COMPLETE_MSG="This ISO is capable of installing a complete Parabola system\n\
>>>>without a connection to the internet. If you would like to fetch\n\
>>>>the latest packages from the internet, run the following command\n\
>>>>before beginning the install:\n\
        # cp /etc/pacman-online.conf /etc/pacman.conf"
[ "${enable_offline_install}" == 'false' ] && readonly NETWORK_MOTD_MSG=${NETINSTALL_MSG} || \
                                              readonly NETWORK_MOTD_MSG=${COMPLETE_MSG}
readonly ROOT_SKEL_FILES="/etc/skel/.bash_logout  \
                          /etc/skel/.bash_profile "
readonly LIVE_USER=parabola
readonly LIVE_USER_GROUPS="adm,audio,floppy,log,network,rfkill,scanner,storage,optical,power,wheel"
[ "${enable_offline_install}" == 'true' ] && readonly INSTALL_TYPE="Complete"   || \
                                             readonly INSTALL_TYPE="NetInstall"
readonly WELCOME_TITLE="Parabola ${iso_init}/${iso_wm} Edition - (${INSTALL_TYPE})"


set -e -u

# configure locales
ln -sf /usr/share/zoneinfo/UTC /etc/localtime
sed -i 's/#\(en_US\.UTF-8\)/\1/' /etc/locale.gen
sed -i 's/#\(es_ES\.UTF-8\)/\1/' /etc/locale.gen
sed -i 's/#\(gl_ES\.UTF-8\)/\1/' /etc/locale.gen
sed -i 's/#\(pt_BR\.UTF-8\)/\1/' /etc/locale.gen
locale-gen

# configure sudo
chmod 750 /etc/sudoers.d
chmod 440 /etc/sudoers.d/g_wheel

# configure pacman
sed -i "s|#Server|Server|g" /etc/pacman.d/mirrorlist
if   [[ "${enable_offline_install}" == 'true' ]]
then cat /etc/pacman-offline.conf                                  > /etc/pacman-online.conf
     for repo in ${REPOS}
     do echo -e "\n[${repo}]\nInclude = /etc/pacman.d/mirrorlist" >> /etc/pacman-online.conf
     done
     cp /etc/pacman-offline.conf                                     /etc/pacman.conf
else cp /usr/share/pacman/defaults/pacman.conf.${arch}               /etc/pacman.conf
     rm /etc/pacman-*.conf
fi

# configure services
if   [[ "${iso_init}" == 'systemd' ]]
then systemctl enable ${SYSTEMD_SERVICES_ALL}
     [[ "${iso_wm}" != 'cli' ]] && systemctl enable ${SYSTEMD_SERVICES_GUI}
fi

# configure root user
usermod -s ${DEFAULT_SHELL} root 2> /dev/null

# configure CLI login session
sed -i "s|_EDITION_TITLE_|${iso_title}|"                                    /etc/motd
sed -i "s|_NETWORK_MOTD_MSG_|${NETWORK_MOTD_MSG}| ; s|^>>>>\(.*\)|    \1|g" /etc/motd
if   [[ "${iso_wm}" == 'cli' ]]
then cp ${ROOT_SKEL_FILES} /root/
     sed -i "s|_DESKTOP_SESSION_||" /root/.bash_profile

else # configure GUI login session and live user
     [ -n "$(id ${LIVE_USER} 2> /dev/null)" ] && userdel -r ${LIVE_USER} 2> /dev/null
     useradd -m -p "" -g users -G "$LIVE_USER_GROUPS" -s ${DEFAULT_SHELL} ${LIVE_USER}
     if   [[ "${iso_init}" == 'systemd' ]]
     then sed -i "s|--autologin root|--autologin ${LIVE_USER}|" /etc/systemd/system/getty@tty1.service.d/autologin.conf
     fi

     # configure desktop environment
     sed -i "s|_EDITION_TITLE_|${WELCOME_TITLE}|" /home/${LIVE_USER}/.config/autostart/autostart.sh
     if   [[ "${iso_wm}" == 'lxde' ]]
     then rm -f /etc/xdg/autostart/octopi-notifier.desktop 2> /dev/null
          sed -i "s|_DESKTOP_SESSION_|LXDE|" /home/${LIVE_USER}/.bash_profile
          sed -i "s|_DESKTOP_SESSION_|LXDE|" /home/${LIVE_USER}/.dmrc
     elif [[ "${iso_wm}" == 'mate' ]]
     then sed -i "s|_DESKTOP_SESSION_|mate|" /home/${LIVE_USER}/.bash_profile
          sed -i "s|_DESKTOP_SESSION_|mate|" /home/${LIVE_USER}/.dmrc
     else echo "invalid \$iso_wm for _DESKTOP_SESSION_ '${iso_wm}'"
          exit 1
     fi

     # development builds - set DEV_RELEASE=0 for production builds
     (($DEV_RELEASE)) && source /root/customize_root_image-dev.sh 2> /dev/null
fi
# development builds - set DEV_RELEASE=0 for production builds
(($DEV_RELEASE))      && rm     /root/customize_root_image-dev.sh 2> /dev/null
