diff --git a/archlabs-installer b/archlabs-installer index 73eeab6..e717518 100755 --- a/archlabs-installer +++ b/archlabs-installer @@ -5,7 +5,7 @@ # Some ideas and code reworked from other resources # AIF, Cnichi, Calamares, Arch Wiki.. Credit where credit is due -VER="2.0.41" # installer version +VER="2.0.42" # installer version DIST="ArchLabs" # linux distributor MNT="/mnt" # install mountpoint ANS="/tmp/ans" # dialog answer file @@ -52,6 +52,7 @@ HOOKS="shutdown" # list of additional HOOKS to add in /etc/mkinitcpio.conf LOGINRC='' # login shell rc file, eg. .zprofile, .bash_profile, .profile LOGIN_WM='' # default login session to be placed in ~/.xinitrc +LOGIN_TYPE='' # login manager can be: lightdm, xinit INSTALL_WMS='' # space separated list of chosen wm/de UCODE='' # cpu microcode (if any), eg. amd-ucode, intel-ucode @@ -368,6 +369,7 @@ select_show() local pkgs="${USER_PKGS// / } ${PACKAGES// / }" [[ $BOOT_PART ]] && mnt="/$BOOTDIR" [[ $INSTALL_WMS == *dwm* ]] && pkgs="dwm st dmenu $pkgs" + pkgs="${pkgs// / }" msg "Show Configuration" " ---------- PARTITION CONFIGURATION ------------ @@ -419,16 +421,29 @@ select_show() select_login() { - if (( WM_NUM == 1 )); then - LOGIN_WM="${WM_SESSIONS[$INSTALL_WMS]}" - else - dlg LOGIN_WM menu "Login Session" "$_login" $LOGIN_CHOICES || return 1 - LOGIN_WM="${WM_SESSIONS[$LOGIN_WM]}" + if [[ -z $LOGIN_TYPE ]]; then + dlg LOGIN_TYPE menu "Login Management" "\nSelect what kind of login management to use." \ + "xinit" "Console login without a display manager" \ + "lightdm" "Lightweight display manager with a gtk greeter" || return 1 fi - local txt="\nDo you want autologin enabled for $NEWUSER?\n\nThe following two files will be created (disable autologin by remove them):\n\n - /home/$NEWUSER/$LOGINRC (this runs startx when logging in on tty1)\n - /etc/systemd/system/getty@tty1.service.d/autologin.conf (this logs in $NEWUSER without a password)\n" - yesno "Autologin" "$txt" && AUTOLOGIN=true || AUTOLOGIN='' - EDIT_FILES[login]="/home/$NEWUSER/.xinitrc /home/$NEWUSER/.xprofile" + if [[ $LOGIN_TYPE == 'lightdm' ]]; then + LOGIN_PKGS="lightdm lightdm-gtk-greeter lightdm-gtk-greeter-settings accountsservice" + EDIT_FILES[login]="/etc/lightdm/lightdm.conf /etc/lightdm/lightdm-gtk-greeter.conf" + AUTOLOGIN='' + else + if (( WM_NUM == 1 )); then + LOGIN_WM="${WM_SESSIONS[$INSTALL_WMS]}" + else + dlg LOGIN_WM menu "Login Management" "$_login" $LOGIN_CHOICES || return 1 + LOGIN_WM="${WM_SESSIONS[$LOGIN_WM]}" + fi + + local txt="\nDo you want autologin enabled for $NEWUSER?\n\nIf so the following two files will be created (disable autologin by removing them):\n\n - /home/$NEWUSER/$LOGINRC (this runs startx when logging in on tty1)\n - /etc/systemd/system/getty@tty1.service.d/autologin.conf (this logs in $NEWUSER without a password)\n" + yesno "Autologin" "$txt" && AUTOLOGIN=true || AUTOLOGIN='' + LOGIN_PKGS="xorg-xinit" + EDIT_FILES[login]="/home/$NEWUSER/.xinitrc /home/$NEWUSER/.xprofile" + fi } select_config() @@ -597,6 +612,7 @@ select_sessions() done select_login || return 1 + [[ $WM_PKGS != *"$LOGIN_PKGS"* ]] && WM_PKGS+=" $LOGIN_PKGS" while IFS=' ' read -r pkg; do [[ $PACKAGES != *"$pkg"* ]] && PACKAGES+=" $pkg" @@ -928,12 +944,15 @@ part_shrink() # minimum in KiB (2^10) case "$fs" in - ext[2-4]) min=$(dumpe2fs -h "$part" |& awk '/Block count/{count=$NF} /Block size/{size=$NF} END{print int((count * size) / 1024)}') ;; - ntfs) min=$(ntfsresize -f -m "$part" | awk 'NR == 2 {print int(($NF * 1000 * 1000) / 1024)}') ;; + ext[2-4]) + mount "$part" $MNT >/dev/null 2>&1; sleep 0.5 + min=$(df --output=used --block-size=KiB "$part" | awk 'NR == 2 {print int($1)}') + umount $MNT >/dev/null 2>&1 + ntfs) min=$(ntfsresize -f -m "$part" | awk 'NR == 2 {print int(($NF * 1000 * 1000) / 1024)}') >/dev/null 2>&1 ;; esac # KiB -> MiB - mbmin=$((min / 1024)) + mbmin=$(((min / 1024) + 200)) mbend=$((end / 1024)) # get new size from user @@ -1295,7 +1314,7 @@ install_main() install_boot chrun "hwclock --systohc --utc" || chrun "hwclock --systohc --utc --directisa" install_user - install_xinit + install_login chrun "chown -Rf $NEWUSER:users /home/$NEWUSER" sleep 1 @@ -1490,9 +1509,6 @@ install_user() install_xinit() { - SERVICE="$MNT/etc/systemd/system/getty@tty1.service.d" - sed -i '/printf/d' $MNT/root/.zshrc - if [[ -e $MNT/home/$NEWUSER/.xinitrc ]] && grep -q 'exec' $MNT/home/$NEWUSER/.xinitrc; then sed -i "/exec/ c exec ${LOGIN_WM}" $MNT/home/$NEWUSER/.xinitrc else @@ -1516,6 +1532,32 @@ EOF fi } +install_login() +{ + SERVICE="$MNT/etc/systemd/system/getty@tty1.service.d" + sed -i '/printf/d' $MNT/root/.zshrc + install_${LOGIN_TYPE:-xinit} +} + +install_lightdm() +{ + rm -rf $SERVICE + rm -rf $MNT/home/$NEWUSER/.{xinitrc,profile,zprofile,bash_profile} + chrun 'systemctl set-default graphical.target && systemctl enable lightdm.service' 2>$ERR + errshow 1 "systemctl set-default graphical.target && systemctl enable lightdm.service" + cat > $MNT/etc/lightdm/lightdm-gtk-greeter.conf << EOF +# LightDM GTK+ Configuration + +[greeter] +default-user-image=/usr/share/icons/ArchLabs-Dark/64x64/places/distributor-logo-archlabs.png +background=/usr/share/backgrounds/archlabs/archlabs.jpg +theme-name=Adwaita-dark +icon-theme-name=Adwaita +font-name=DejaVu Sans Mono 11 +position=30%,end 50%,end +EOF +} + install_packages() { local rmpkg=""