Large update
This commit is contained in:
parent
ba89e69277
commit
b92cdd34ef
590
installer
590
installer
@ -16,7 +16,6 @@ MNT=/mnt # installation root mountpoint if not set
|
||||
SYS=Unknown # boot type, to be determined: UEFI/BIOS
|
||||
FONT=ter-i16n # font used for the linux console
|
||||
HOOKS=shutdown # additional mkinitcpio HOOKS
|
||||
WAYLAND=0 # is wayland used, 1 = wayland only, 2 = X + wayland
|
||||
SEL=0 # currently selected main menu item
|
||||
BTRFS=0 # is btrfs used, 1 = btrfs alone, 2 = btrfs + subvolume(s)
|
||||
EXMNTS='' # extra partitions that were mounted, used to verify mountpoint and show user
|
||||
@ -37,10 +36,6 @@ CMAPS="$(find /usr/share/kbd/keymaps -name '*.map.gz' | awk '{gsub(/\.map\.gz|.*
|
||||
|
||||
export DIALOGOPTS="--cr-wrap"
|
||||
|
||||
# regex to match wayland and X sessions for menu changes
|
||||
WAYLAND_SESSIONS='sway'
|
||||
X_SESSIONS='(awesome|bspwm|cinnamon|deepin|dwm|fluxbox|gnome|i3-gaps|jwm|dk|lxqt|openbox|plasma|xfce4)'
|
||||
|
||||
# package arrays built later from user selections
|
||||
typeset -a SES_PKGS USER_PKGS
|
||||
|
||||
@ -81,18 +76,18 @@ typeset -a BASE_PKGS=(
|
||||
"xorg"
|
||||
"xorg-xwayland"
|
||||
"xorg-drivers" # TODO: should we only install specific drivers?
|
||||
|
||||
# all the sessions we offer use these
|
||||
"archlabs-i3lock-color"
|
||||
"archlabs-i3lock-fancy"
|
||||
"rofi"
|
||||
) # }
|
||||
|
||||
# general packages for most window managers to provide some basic functionality {
|
||||
# general packages for window managers to provide some basic functionality {
|
||||
typeset -a WM_PKGS=(
|
||||
"brightnessctl"
|
||||
"gnome-keyring"
|
||||
"gsimplecal"
|
||||
"polkit-gnome"
|
||||
) # }
|
||||
|
||||
# Xorg specific packages for most window managers to provide some basic functionality {
|
||||
typeset -a X_WM_PKGS=(
|
||||
"arandr"
|
||||
"dunst"
|
||||
"exo"
|
||||
@ -101,11 +96,10 @@ typeset -a X_WM_PKGS=(
|
||||
"picom"
|
||||
"scrot"
|
||||
"volumeicon"
|
||||
"lxappearance"
|
||||
"wmctrl"
|
||||
"xclip"
|
||||
"xdotool"
|
||||
"xfce4-power-manager"
|
||||
"xfce4-settings"
|
||||
"xterm"
|
||||
) # }
|
||||
|
||||
@ -131,6 +125,7 @@ typeset -a ISO_PKGS=(
|
||||
"ipw2200-fw"
|
||||
"lftp"
|
||||
"linux-firmware"
|
||||
"linux-firmware-marvell"
|
||||
"lm_sensors"
|
||||
"lsb-release"
|
||||
"lsscsi"
|
||||
@ -155,6 +150,7 @@ typeset -a ISO_PKGS=(
|
||||
"rp-pppoe"
|
||||
"sdparm"
|
||||
"sg3_utils"
|
||||
"sof-firmware"
|
||||
"tcpdump"
|
||||
"terminus-font"
|
||||
"testdisk"
|
||||
@ -170,28 +166,25 @@ typeset -a ISO_PKGS=(
|
||||
|
||||
# packages installed for each wm/de {
|
||||
declare -A WM_EXT=(
|
||||
[awesome]='archlabs-skel-awesome archlabs-i3lock-color archlabs-i3lock-fancy rofi exo archlabs-ksuperkey inotify-tools'
|
||||
[bspwm]='archlabs-skel-bspwm archlabs-i3lock-color archlabs-i3lock-fancy jgmenu tint2 sxhkd rofi archlabs-ksuperkey'
|
||||
[cinnamon]='gnome-terminal'
|
||||
[deepin]='deepin-extra'
|
||||
[dk]='archlabs-skel-dk archlabs-i3lock-color archlabs-i3lock-fancy sxhkd rofi archlabs-ksuperkey archlabs-lemonbar'
|
||||
[dwm]='nitrogen polkit-gnome gnome-keyring dunst lxappearance'
|
||||
[fluxbox]='archlabs-skel-fluxbox archlabs-i3lock-color archlabs-i3lock-fancy jgmenu rofi lxmenu-data archlabs-ksuperkey'
|
||||
[gnome]='gnome-tweaks'
|
||||
[i3-gaps]='archlabs-skel-i3-gaps archlabs-i3lock-color archlabs-i3lock-fancy i3status perl-anyevent-i3 rofi archlabs-ksuperkey'
|
||||
[jwm]=''
|
||||
[lxqt]='breeze breeze-icons picom libpulse network-manager-applet'
|
||||
[openbox]='archlabs-skel-openbox archlabs-obkey archlabs-kickshaw archlabs-paranoid archlabs-skel-xfce4 archlabs-i3lock-color archlabs-i3lock-fancy archlabs-pipemenus archlabs-ksuperkey obconf jgmenu tint2 conky rofi lxmenu-data'
|
||||
[plasma]='kde-applications-meta powerdevil'
|
||||
[sway]='archlabs-skel-sway foot grim slurp swayidle swaylock swappy jq archlabs-nwg-shell archlabs-wlsunset archlabs-azote archlabs-autotiling'
|
||||
[xfce4]='archlabs-skel-xfce4 xfce4-goodies xfce4-pulseaudio-plugin network-manager-applet volumeicon rofi archlabs-ksuperkey'
|
||||
[dk]='archlabs-skel-dk sxhkd archlabs-lemonbar'
|
||||
[bspwm]='archlabs-skel-bspwm jgmenu tint2 sxhkd'
|
||||
[fluxbox]='archlabs-skel-fluxbox jgmenu lxmenu-data'
|
||||
[i3-gaps]='archlabs-skel-i3-gaps i3status perl-anyevent-i3'
|
||||
[openbox]='archlabs-skel-openbox archlabs-obkey archlabs-kickshaw archlabs-pipemenus obconf jgmenu tint2 conky lxmenu-data'
|
||||
) # }
|
||||
|
||||
# executable name for each wm/de used in ~/.xinitrc {
|
||||
declare -A SESSIONS=(
|
||||
[dk]='dk'
|
||||
[i3-gaps]='i3'
|
||||
[bspwm]='bspwm'
|
||||
[fluxbox]='startfluxbox'
|
||||
[openbox]='openbox-session'
|
||||
) # }
|
||||
|
||||
# packages installed for each login option {
|
||||
declare -A LOGIN_PKGS=(
|
||||
[ly]='ly'
|
||||
[gdm]='gdm'
|
||||
[sddm]='sddm'
|
||||
[console]='xorg-xinit'
|
||||
[lightdm]='lightdm lightdm-gtk-greeter lightdm-gtk-greeter-settings accountsservice'
|
||||
) # }
|
||||
@ -219,30 +212,10 @@ declare -A PKG_EXT=(
|
||||
declare -A BCMDS=(
|
||||
[efistub]='efibootmgr -v -d /dev/sda -p 1 -c -l'
|
||||
[grub]='grub-install --recheck --force'
|
||||
[refind-efi]='refind-install'
|
||||
[syslinux]='syslinux-install_update -i -a -m'
|
||||
[systemd-boot]='bootctl --path=/boot install'
|
||||
) # }
|
||||
|
||||
# executable name for each wm/de used in ~/.xinitrc {
|
||||
declare -A WM_SESSIONS=(
|
||||
[awesome]='awesome'
|
||||
[bspwm]='bspwm'
|
||||
[cinnamon]='cinnamon-session'
|
||||
[deepin]='startdde'
|
||||
[dwm]='dwm'
|
||||
[fluxbox]='startfluxbox'
|
||||
[gnome]='gnome-session'
|
||||
[i3-gaps]='i3'
|
||||
[jwm]='jwm'
|
||||
[dk]='dk'
|
||||
[sway]='sway'
|
||||
[lxqt]='startlxqt'
|
||||
[openbox]='openbox-session'
|
||||
[plasma]='startplasma-x11'
|
||||
[xfce4]='startxfce4'
|
||||
) # }
|
||||
|
||||
# files offered for editing after install is complete {
|
||||
declare -A EDIT_FILES=(
|
||||
[login]='' # login is populated once we know the username and shell
|
||||
@ -260,25 +233,13 @@ declare -A EDIT_FILES=(
|
||||
|
||||
# mkfs command flags for filesystem formatting {
|
||||
declare -A FS_CMD_FLAGS=(
|
||||
[btrfs]='-fq'
|
||||
[ext2]='-q'
|
||||
[ext3]='-q'
|
||||
[ext4]='-q'
|
||||
[f2fs]='-f'
|
||||
[jfs]='-q'
|
||||
[nilfs2]='-q'
|
||||
[ntfs]='-q'
|
||||
[reiserfs]='-q'
|
||||
[vfat]='-F32'
|
||||
[xfs]='-fq'
|
||||
[btrfs]='-fq' [ext2]='-q' [ext3]='-q' [ext4]='-q' [f2fs]='-f' [jfs]='-q'
|
||||
[nilfs2]='-q' [ntfs]='-q' [reiserfs]='-q' [vfat]='-F32' [xfs]='-fq'
|
||||
) # }
|
||||
|
||||
# mount options for each filesystem {
|
||||
declare -A FS_OPTS=(
|
||||
[vfat]=''
|
||||
[ntfs]=''
|
||||
[ext2]=''
|
||||
[ext3]=''
|
||||
[vfat]='' [ntfs]='' [ext2]='' [ext3]=''
|
||||
[jfs]='discard errors=continue errors=panic nointegrity'
|
||||
[reiserfs]='acl nolog notail replayonly user_xattr off'
|
||||
[ext4]='discard dealloc nofail noacl relatime noatime nobarrier nodelalloc'
|
||||
@ -288,78 +249,6 @@ declare -A FS_OPTS=(
|
||||
[btrfs]='autodefrag compress=zlib compress=lzo compress=no compress-force=zlib compress-force=lzo discard noacl noatime nodatasum nospace_cache recovery skip_balance space_cache ssd ssd_spread'
|
||||
) # }
|
||||
|
||||
# fallback mirrorlist country codes to names table {
|
||||
FBREF_COUNTRIES="Australia AU
|
||||
Austria AT
|
||||
Bangladesh BD
|
||||
Belarus BY
|
||||
Belgium BE
|
||||
Bosnia and Herzegovina BA
|
||||
Brazil BR
|
||||
Bulgaria BG
|
||||
Cambodia KH
|
||||
Canada CA
|
||||
Chile CL
|
||||
China CN
|
||||
Colombia CO
|
||||
Croatia HR
|
||||
Czechia CZ
|
||||
Denmark DK
|
||||
Ecuador EC
|
||||
Estonia EE
|
||||
Finland FI
|
||||
France FR
|
||||
Georgia GE
|
||||
Germany DE
|
||||
Greece GR
|
||||
Hong Kong HK
|
||||
Hungary HU
|
||||
Iceland IS
|
||||
India IN
|
||||
Indonesia ID
|
||||
Iran IR
|
||||
Ireland IE
|
||||
Israel IL
|
||||
Italy IT
|
||||
Japan JP
|
||||
Kazakhstan KZ
|
||||
Kenya KE
|
||||
Latvia LV
|
||||
Lithuania LT
|
||||
Luxembourg LU
|
||||
Mexico MX
|
||||
Moldova MD
|
||||
Monaco MC
|
||||
Netherlands NL
|
||||
New Caledonia NC
|
||||
New Zealand NZ
|
||||
North Macedonia MK
|
||||
Norway NO
|
||||
Pakistan PK
|
||||
Paraguay PY
|
||||
Poland PL
|
||||
Portugal PT
|
||||
Romania RO
|
||||
Russia RU
|
||||
Réunion RE
|
||||
Serbia RS
|
||||
Singapore SG
|
||||
Slovakia SK
|
||||
Slovenia SI
|
||||
South Africa ZA
|
||||
South Korea KR
|
||||
Spain ES
|
||||
Sweden SE
|
||||
Switzerland CH
|
||||
Taiwan TW
|
||||
Thailand TH
|
||||
Turkey TR
|
||||
Ukraine UA
|
||||
United Kingdom GB
|
||||
United States US
|
||||
Vietnam VN"
|
||||
# }
|
||||
|
||||
# dialog text variables {
|
||||
# Basics (somewhat in order)
|
||||
_keymap="\nSelect which keymap to use from the list below.\n\nThis will determine the installed system keymap once entering a graphical environment.\n\ndefault: us"
|
||||
@ -425,25 +314,23 @@ main()
|
||||
tput civis
|
||||
dialog --backtitle "$DIST - $SYS - v$VER" --title " Prepare " \
|
||||
--default-item $SEL --cancel-label 'Exit' --menu "$_prep" 0 0 0 \
|
||||
1 "* Select bootloader" \
|
||||
2 "* Username and password" \
|
||||
3 "* System configuration" \
|
||||
4 "Select WM(s) and/or DE(s)" \
|
||||
5 "Select additional packages" \
|
||||
6 "Enter a post-install command to run" \
|
||||
7 "View installation configuration" \
|
||||
8 "* Confirm choices and complete install" 2> "$ANS"
|
||||
1 "* User and password" \
|
||||
2 "* System configuration" \
|
||||
3 "Select session(s)" \
|
||||
4 "Select packages" \
|
||||
5 "Run command" \
|
||||
6 "View configuration" \
|
||||
7 "* Complete install" 2> "$ANS"
|
||||
|
||||
read -r SEL < "$ANS"
|
||||
case $SEL in
|
||||
1) prechecks 0 && { select_bootldr || (( SEL-- )); } ;;
|
||||
2) prechecks 1 && { select_mkuser || (( SEL-- )); } ;;
|
||||
3) prechecks 2 && { select_config || (( SEL-- )); } ;;
|
||||
4) prechecks 3 && { select_sessions || (( SEL-- )); } ;;
|
||||
5) prechecks 3 && { select_packages || (( SEL-- )); } ;;
|
||||
6) prechecks 3 && select_usercmd ;;
|
||||
7) prechecks 3 && select_show ;;
|
||||
8) prechecks 3 && install_main ;;
|
||||
1) prechecks 1 && { select_mkuser || (( SEL-- )); } ;;
|
||||
2) prechecks 2 && { select_config || (( SEL-- )); } ;;
|
||||
3) prechecks 3 && { select_sessions || (( SEL-- )); } ;;
|
||||
4) prechecks 3 && { select_packages || (( SEL-- )); } ;;
|
||||
5) prechecks 3 && select_usercmd ;;
|
||||
6) prechecks 3 && select_show ;;
|
||||
7) prechecks 3 && install_main ;;
|
||||
*) yesno "Exit" "\nUnmount partitions (if any) and exit the installer?\n" && die 0
|
||||
esac
|
||||
else
|
||||
@ -453,14 +340,13 @@ main()
|
||||
--default-item $SEL --cancel-label 'Exit' --menu "$_prep" 0 0 0 \
|
||||
1 "Storage management" \
|
||||
2 "* Mount partitions" \
|
||||
3 "* Select bootloader" \
|
||||
4 "* Username and password" \
|
||||
5 "* System configuration" \
|
||||
6 "Select WM(s) and/or DE(s)" \
|
||||
7 "Select additional packages" \
|
||||
8 "Enter a post-install command to run" \
|
||||
9 "View installation configuration" \
|
||||
10 "* Confirm choices and complete install" 2> "$ANS"
|
||||
3 "* User and password" \
|
||||
4 "* System configuration" \
|
||||
5 "Select session(s)" \
|
||||
6 "Select packages" \
|
||||
7 "Run command" \
|
||||
8 "View configuration" \
|
||||
9 "* Complete install" 2> "$ANS"
|
||||
|
||||
read -r SEL < "$ANS"
|
||||
if [[ -z $WARN && $SEL == 2 ]]; then
|
||||
@ -470,14 +356,13 @@ main()
|
||||
case $SEL in
|
||||
1) dev_menu || (( SEL-- )) ;;
|
||||
2) mount_menu || SEL=0 ;;
|
||||
3) prechecks 0 && { select_bootldr || (( SEL-- )); } ;;
|
||||
4) prechecks 1 && { select_mkuser || (( SEL-- )); } ;;
|
||||
5) prechecks 2 && { select_config || (( SEL-- )); } ;;
|
||||
6) prechecks 3 && { select_sessions || (( SEL-- )); } ;;
|
||||
7) prechecks 3 && { select_packages || (( SEL-- )); } ;;
|
||||
8) prechecks 3 && select_usercmd ;;
|
||||
9) prechecks 3 && select_show ;;
|
||||
10) prechecks 3 && install_main ;;
|
||||
3) prechecks 1 && { select_mkuser || (( SEL-- )); } ;;
|
||||
4) prechecks 2 && { select_config || (( SEL-- )); } ;;
|
||||
5) prechecks 3 && { select_sessions || (( SEL-- )); } ;;
|
||||
6) prechecks 3 && { select_packages || (( SEL-- )); } ;;
|
||||
7) prechecks 3 && select_usercmd ;;
|
||||
8) prechecks 3 && select_show ;;
|
||||
9) prechecks 3 && install_main ;;
|
||||
*) yesno "Exit" "\nUnmount partitions (if any) and exit the installer?\n" && die 0
|
||||
esac
|
||||
fi
|
||||
@ -486,7 +371,6 @@ main()
|
||||
select_show()
|
||||
{
|
||||
local pkgs="${USER_PKGS[*]} ${SES_PKGS[*]}" fmtpkgs='' pkg=''
|
||||
[[ $INSTALL_WMS == *dwm* ]] && pkgs="dwm st dmenu $pkgs"
|
||||
pkgs="${pkgs// / }"
|
||||
pkgs="${pkgs# }"
|
||||
|
||||
@ -546,29 +430,15 @@ select_login()
|
||||
{
|
||||
AUTOLOGIN=''
|
||||
|
||||
arr=("console" "Console login with no graphical display manager"
|
||||
"ly" "TUI display manager with an ncurses like interface"
|
||||
"gdm" "Gnome display manager (gnome default)"
|
||||
"sddm" "Simple desktop display manager (plasma and lxqt default)"
|
||||
)
|
||||
(( WAYLAND == 0 )) && arr+=("lightdm" "Lightweight display manager (deepin and xfce default)")
|
||||
|
||||
dlg LOGIN_TYPE menu "Login" "\nSelect what kind of login management to use." "${arr[@]}" || return 1
|
||||
dlg LOGIN_TYPE menu "Login" "\nSelect what kind of login management to use." \
|
||||
"console" "Console login with no graphical display manager" \
|
||||
"ly" "TUI display manager with an ncurses like interface" \
|
||||
"lightdm" "Lightweight display manager" || return 1
|
||||
|
||||
case $LOGIN_TYPE in
|
||||
ly)
|
||||
EDIT_FILES[login]="/etc/ly/config.ini"
|
||||
;;
|
||||
gdm)
|
||||
EDIT_FILES[login]="none"
|
||||
;;
|
||||
sddm)
|
||||
if [[ $INSTALL_WMS =~ (plasma|lxqt) ]]; then
|
||||
EDIT_FILES[login]="/etc/sddm.conf.d/theme.conf"
|
||||
else
|
||||
EDIT_FILES[login]="none"
|
||||
fi
|
||||
;;
|
||||
lightdm)
|
||||
LIGHTDM_GREETER='gtk-greeter'
|
||||
EDIT_FILES[login]="/etc/lightdm/lightdm.conf /etc/lightdm/lightdm-gtk-greeter.conf"
|
||||
@ -578,15 +448,10 @@ select_login()
|
||||
console)
|
||||
if (( $(wc -w <<< "$INSTALL_WMS") > 1 )); then
|
||||
dlg LOGIN_WM menu "Session" "$_login" $LOGIN_CHOICES || return 1
|
||||
LOGIN_WM="${WM_SESSIONS[$LOGIN_WM]}"
|
||||
LOGIN_WM="${SESSIONS[$LOGIN_WM]}"
|
||||
fi
|
||||
if [[ $LOGIN_WM =~ $WAYLAND_SESSIONS ]]; then # wayland console login
|
||||
EDIT_FILES[login]="/home/$NEWUSER/$LOGINRC"
|
||||
else
|
||||
EDIT_FILES[login]="/home/$NEWUSER/.xinitrc /home/$NEWUSER/.xprofile"
|
||||
fi
|
||||
[[ $WAYLAND -eq 1 ]] && LOGIN_PKGS[console]=''
|
||||
[[ -z $LOGIN_WM ]] && LOGIN_WM="${WM_SESSIONS[${INSTALL_WMS%% *}]}"
|
||||
[[ -z $LOGIN_WM ]] && LOGIN_WM="${SESSIONS[${INSTALL_WMS%% *}]}"
|
||||
yesno "Autologin" "$(sed "s|USER|$NEWUSER|g; s|RC|$LOGINRC|g" <<< "$_autologin")" && AUTOLOGIN=true
|
||||
;;
|
||||
esac
|
||||
@ -641,7 +506,20 @@ select_config()
|
||||
linux-lts 'Long-term support (LTS) linux kernel and modules' \
|
||||
linux-zen 'A effort of kernel hackers to provide the best kernel for everyday systems' \
|
||||
linux-hardened 'A security-focused linux kernel with hardening patches to mitigate exploits' || { i=3; continue; }
|
||||
|
||||
;;
|
||||
5)
|
||||
if [[ $SYS == 'BIOS' ]]; then
|
||||
dlg BOOTLDR menu "BIOS Bootloader" "\nSelect which bootloader to use." \
|
||||
"grub" "The Grand Unified Bootloader, standard among many Linux distributions" \
|
||||
"syslinux" "A collection of boot loaders for booting drives, CDs, or over the network" || { i=4; continue; }
|
||||
else
|
||||
dlg BOOTLDR menu "UEFI Bootloader" "\nSelect which bootloader to use." \
|
||||
"systemd-boot" "A simple UEFI boot manager which executes configured EFI images" \
|
||||
"grub" "The Grand Unified Bootloader, standard among many Linux distributions" \
|
||||
"efistub" "Boot the kernel image directly (no chainloading support)" \
|
||||
"syslinux" "A collection of boot loaders for booting drives, CDs, or over the network (no chainloading support)" || { i=4; continue; }
|
||||
fi
|
||||
setup_${BOOTLDR}
|
||||
CONFIG_DONE=true
|
||||
;;
|
||||
esac
|
||||
@ -763,7 +641,18 @@ select_mirrors()
|
||||
|
||||
[[ $mirrorpid && ! -f /tmp/mcountry ]] && wait $mirrorpid
|
||||
REF_COUNTRIES="$(< /tmp/mcountry)"
|
||||
[[ $REF_COUNTRIES ]] || REF_COUNTRIES="$FBREF_COUNTRIES"
|
||||
[[ $REF_COUNTRIES ]] || REF_COUNTRIES="Australia AU
|
||||
Austria AT Bangladesh BD Belarus BY Belgium BE Bosnia and Herzegovina BA
|
||||
Brazil BR Bulgaria BG Cambodia KH Canada CA Chile CL China CN Colombia CO
|
||||
Croatia HR Czechia CZ Denmark DK Ecuador EC Estonia EE Finland FI France FR
|
||||
Georgia GE Germany DE Greece GR Hong Kong HK Hungary HU Iceland IS India IN
|
||||
Indonesia ID Iran IR Ireland IE Israel IL Italy IT Japan JP Kazakhstan KZ
|
||||
Kenya KE Latvia LV Lithuania LT Luxembourg LU Mexico MX Moldova MD Monaco MC
|
||||
Netherlands NL New Caledonia NC New Zealand NZ North Macedonia MK Norway NO
|
||||
Pakistan PK Paraguay PY Poland PL Portugal PT Romania RO Russia RU Réunion RE
|
||||
Serbia RS Singapore SG Slovakia SK Slovenia SI South Africa ZA South Korea KR
|
||||
Spain ES Sweden SE Switzerland CH Taiwan TW Thailand TH Turkey TR Ukraine UA
|
||||
United Kingdom GB United States US Vietnam VN"
|
||||
|
||||
# build an associative array of country codes mapped to full names
|
||||
eval "typeset -A COUNTRIES=( $(awk '{
|
||||
@ -813,58 +702,24 @@ select_mirrors()
|
||||
return 0
|
||||
}
|
||||
|
||||
select_bootldr()
|
||||
{
|
||||
if [[ $SYS == 'BIOS' ]]; then
|
||||
dlg BOOTLDR menu "BIOS Bootloader" "\nSelect which bootloader to use." \
|
||||
"grub" "The Grand Unified Bootloader, standard among many Linux distributions" \
|
||||
"syslinux" "A collection of boot loaders for booting drives, CDs, or over the network" || return 1
|
||||
else
|
||||
dlg BOOTLDR menu "UEFI Bootloader" "\nSelect which bootloader to use." \
|
||||
"systemd-boot" "A simple UEFI boot manager which executes configured EFI images" \
|
||||
"grub" "The Grand Unified Bootloader, standard among many Linux distributions" \
|
||||
"refind" "A UEFI boot manager that aims to be platform neutral and simplify multi-boot" \
|
||||
"efistub" "Boot the kernel image directly (no chainloading support)" \
|
||||
"syslinux" "A collection of boot loaders for booting drives, CDs, or over the network (no chainloading support)" || return 1
|
||||
fi
|
||||
setup_${BOOTLDR}
|
||||
return 0
|
||||
}
|
||||
|
||||
select_sessions()
|
||||
{
|
||||
typeset -a pkgs
|
||||
WAYLAND=0
|
||||
LOGIN_CHOICES=''
|
||||
|
||||
dlg INSTALL_WMS check "Sessions" "$_sessions\n" \
|
||||
i3-gaps "A fork of i3wm with more features including gaps" "$(ofn i3-gaps "$INSTALL_WMS")" \
|
||||
openbox "A lightweight, powerful, and highly configurable stacking wm" "$(ofn openbox "$INSTALL_WMS")" \
|
||||
sway "A tiling Wayland compositor and replacement for the i3 window manager" "$(ofn sway "$INSTALL_WMS")" \
|
||||
dk "A dynamic tiling window manager in the vein of dwm, bspwm, and xmonad" "$(ofn dk "$INSTALL_WMS")" \
|
||||
dwm "A dynamic WM for X that manages windows in tiled, floating, or monocle layouts" "$(ofn dwm "$INSTALL_WMS")" \
|
||||
bspwm "A tiling wm that represents windows as the leaves of a binary tree" "$(ofn bspwm "$INSTALL_WMS")" \
|
||||
lxqt "A port of the lightweight desktop environment (LXDE) to Qt" "$(ofn lxqt "$INSTALL_WMS")" \
|
||||
jwm "A lightweight window manager for Xorg written in C" "$(ofn jwm "$INSTALL_WMS")" \
|
||||
xfce4 "A lightweight and modular desktop environment based on gtk+2/3" "$(ofn xfce4 "$INSTALL_WMS")" \
|
||||
awesome "A customized Awesome WM session created by @elanapan" "$(ofn awesome "$INSTALL_WMS")" \
|
||||
fluxbox "A lightweight and highly-configurable window manager" "$(ofn fluxbox "$INSTALL_WMS")" \
|
||||
plasma "A KDE software project currently comprising a full desktop environment" "$(ofn plasma "$INSTALL_WMS")" \
|
||||
deepin "The desktop environment of the Chinese Deepin Linux distribution." "$(ofn deepin "$INSTALL_WMS")" \
|
||||
gnome "A desktop environment that aims to be simple and easy to use" "$(ofn gnome "$INSTALL_WMS")" \
|
||||
cinnamon "A desktop environment combining traditional desktop with modern effects" "$(ofn cinnamon "$INSTALL_WMS")"
|
||||
fluxbox "A lightweight and highly-configurable window manager" "$(ofn fluxbox "$INSTALL_WMS")"
|
||||
|
||||
[[ $INSTALL_WMS ]] || return 0
|
||||
|
||||
for i in ${INSTALL_WMS/dwm/}; do
|
||||
for i in $INSTALL_WMS; do
|
||||
pkgs+=("$i")
|
||||
done
|
||||
|
||||
if [[ $INSTALL_WMS =~ $WAYLAND_SESSIONS ]]; then
|
||||
WAYLAND=1
|
||||
[[ $INSTALL_WMS =~ $X_SESSIONS ]] && WAYLAND=2
|
||||
fi
|
||||
|
||||
for i in $INSTALL_WMS; do
|
||||
LOGIN_CHOICES+="$i - "
|
||||
if [[ $i =~ (plasma|deepin) ]]; then
|
||||
@ -954,13 +809,11 @@ select_packages()
|
||||
plank "An elegant, simple, and clean dock" "$(ofn plank "${USER_PKGS[*]}")" \
|
||||
playerctl "Media player controller for spotify, vlc, audacious, bmp, xmms2, and others." "$(ofn playerctl "${USER_PKGS[*]}")" \
|
||||
qbittorrent "An advanced bittorrent client" "$(ofn qbittorrent "${USER_PKGS[*]}")" \
|
||||
qpdfview "A tabbed PDF viewer" "$(ofn qpdfview "${USER_PKGS[*]}")" \
|
||||
qt5ct "GUI for managing Qt based application themes, icons, and fonts" "$(ofn qt5ct "${USER_PKGS[*]}")" \
|
||||
qutebrowser "A keyboard-focused vim-like web browser based on Python and PyQt5" "$(ofn qutebrowser "${USER_PKGS[*]}")" \
|
||||
ranger "A simple vim-like file manager" "$(ofn ranger "${USER_PKGS[*]}")" \
|
||||
rhythmbox "A Music playback and management application" "$(ofn rhythmbox "${USER_PKGS[*]}")" \
|
||||
rxvt-unicode "A unicode enabled rxvt-clone terminal emulator" "$(ofn rxvt-unicode "${USER_PKGS[*]}")" \
|
||||
sakura "A terminal emulator based on GTK and VTE" "$(ofn sakura "${USER_PKGS[*]}")" \
|
||||
simple-scan "Simple scanning utility" "$(ofn simple-scan "${USER_PKGS[*]}")" \
|
||||
simplescreenrecorder "A feature-rich screen recorder" "$(ofn simplescreenrecorder "${USER_PKGS[*]}")" \
|
||||
steam "A popular game distribution platform by Valve" "$(ofn steam "${USER_PKGS[*]}")" \
|
||||
@ -1827,7 +1680,6 @@ install_base()
|
||||
chrun "ln -svf /usr/share/zoneinfo/$ZONE/$SUBZ /etc/localtime"
|
||||
|
||||
# touchpad config
|
||||
if (( WAYLAND != 1 )); then
|
||||
mkdir -pv "$MNT/etc/X11/xorg.conf.d/"
|
||||
cat > "$MNT/etc/X11/xorg.conf.d/40-touchpad.conf" <<- EOF
|
||||
Section "InputClass"
|
||||
@ -1875,7 +1727,6 @@ install_base()
|
||||
Option "XkbLayout" "$KEYMAP"
|
||||
EndSection
|
||||
EOF
|
||||
fi
|
||||
|
||||
cat > "$MNT/etc/default/keyboard" <<- EOF
|
||||
# KEYBOARD CONFIGURATION FILE
|
||||
@ -1902,9 +1753,6 @@ install_user()
|
||||
{
|
||||
local i=0
|
||||
local groups='video,log,rfkill,wheel'
|
||||
[[ -e $MNT/etc/X11/xorg.conf.d/20-nvidia.conf && -e $MNT/usr/bin/optirun ]] && groups+=',bumblebee'
|
||||
|
||||
# rm -f "$MNT/root/.zlogin" # remove welcome message
|
||||
|
||||
echo "Setting root user password and shell"
|
||||
chrun "chpasswd <<< 'root:$ROOT_PASS'" 2> "$ERR" 2>&1
|
||||
@ -1918,7 +1766,7 @@ install_user()
|
||||
|
||||
echo "Creating user $NEWUSER and setting password"
|
||||
|
||||
# check if there's an existing user home for new user (separate /home)
|
||||
# check if there's an existing user home for new user (separate /home partition)
|
||||
[[ -d "$MNT/home/$NEWUSER" ]] && i=1
|
||||
|
||||
chrun "useradd -m -g users -G $groups -s /bin/$NEWSHELL $NEWUSER" 2> "$ERR" 2>&1
|
||||
@ -1926,8 +1774,6 @@ install_user()
|
||||
chrun "chpasswd <<< '$NEWUSER:$USER_PASS'" 2> "$ERR" 2>&1
|
||||
errshow 1 "chrun 'chpasswd <<< \"$NEWUSER:$USER_PASS\"'"
|
||||
|
||||
[[ $INSTALL_WMS == *dwm* ]] && install_suckless "/home/$NEWUSER" chroot
|
||||
|
||||
# upgrade existing home with new skeleton configs, making backups when needed
|
||||
(( i )) && cp -rfaT -b --suffix='.bak' "$MNT/etc/skel/" "$MNT/home/$NEWUSER"
|
||||
|
||||
@ -1946,7 +1792,6 @@ install_login()
|
||||
echo "Setting up $LOGIN_TYPE"
|
||||
|
||||
if [[ $LOGIN_TYPE != 'console' ]]; then
|
||||
[[ $INSTALL_WMS == *dwm* ]] && dwm_xsession
|
||||
rm -rf "$AUTOLOGIN_SERV" "$MNT/home/$NEWUSER/.xinitrc"
|
||||
chrun "systemctl enable $LOGIN_TYPE.service" 2> "$ERR"
|
||||
errshow 1 "chrun 'systemctl enable $LOGIN_TYPE.service'"
|
||||
@ -1972,41 +1817,18 @@ install_cleanup()
|
||||
[[ $NEWSHELL != 'bash' ]] && rm -rf "$MNT/home/$user/.bash"*
|
||||
[[ $NEWSHELL != 'zsh' ]] && rm -rf "$MNT/home/$user/.z"*
|
||||
|
||||
# cleanup default jwmrc
|
||||
if [[ $INSTALL_WMS == *jwm* ]]; then
|
||||
sed '7,14d; s/xlock -mode blank/i3-lock-fancy -p/g; s/root:1/rofi_run/g' "$MNT/etc/system.jwmrc" > "$MNT/home/$user/.jwmrc"
|
||||
fi
|
||||
|
||||
# no picom (compton) or ksuperkey in dwm login
|
||||
[[ $LOGIN_WM == 'dwm' ]] && sed -i '/super/d; /picom/d' "$MNT/home/$user/.xprofile" "$MNT/root/.xprofile"
|
||||
|
||||
# remove some commands from ~/.xprofile when using self contained sessions
|
||||
if [[ $LOGIN_WM =~ (startplasma-x11|gnome-session|startdde|cinnamon-session) || ($LOGIN_TYPE != 'console' && $INSTALL_WMS =~ (plasma|gnome|cinnamon|deepin)) ]]; then
|
||||
sed -i '/super/d; /nitrogen/d; /picom/d' "$MNT/home/$user/.xprofile" "$MNT/root/.xprofile"
|
||||
fi
|
||||
|
||||
cat >> "$MNT/etc/profile" <<- EOF
|
||||
$([[ $VIRT != 'none' && $INSTALL_WMS =~ sway ]] && echo -e "# disable hardware cursor for sway in VM\nexport WLR_NO_HARDWARE_CURSORS=1")
|
||||
# add ~/.local/bin to the PATH
|
||||
echo \$PATH | grep -q "/home/$user/.local/bin:" || export PATH="/home/$user/.local/bin:\$PATH"
|
||||
EOF
|
||||
|
||||
|
||||
# set the keyboard layout for sway session
|
||||
[[ $INSTALL_WMS =~ sway ]] && sed -i "s/\(set.*\$lang.*\)us/\1$CMAP/" "$MNT/home/$user/.config/sway/variables"
|
||||
|
||||
# when using wayland alone strip out unused configs
|
||||
if (( WAYLAND == 1 )); then
|
||||
rm -f "$MNT/root/.xinitrc" "$MNT/home/$user/.xprofile" "$MNT/home/$user/.xinitrc" "$MNT/home/$user/.Xresources"
|
||||
rm -f "$MNT/home/$user/.config/picom.conf" "$MNT/home/$user/.local/bin/rofi_run"
|
||||
rm -rf "$MNT/home/$user/.config/jgmenu" "$MNT/home/$user/.config/nitrogen" "$MNT/home/$user/.config/dunst" "$MNT/home/$user/.config/xfce4" "$MNT/home/$user/.config/rofi"
|
||||
fi
|
||||
|
||||
# failed to install some AL packages so put a list in a script for the user to install later
|
||||
if [[ "${FAIL_PKG[*]}" ]]; then
|
||||
echo "#!/bin/bash" > "$MNT/home/$user/packages"
|
||||
echo "sudo pacman -Syyu ${FAIL_PKG[*]} --needed --noconfirm || exit" >> "$MNT/home/$user/packages"
|
||||
echo "rm -f /home/%s/packages" "$user" >> "$MNT/home/$user/packages"
|
||||
cat > "$MNT/home/$user/packages" <<- EOF
|
||||
#!/bin/bash
|
||||
sudo pacman -Syyu ${FAIL_PKG[*]} --needed --noconfirm || exit
|
||||
rm -f /home/$user/packages"
|
||||
EOF
|
||||
fi
|
||||
|
||||
return 0
|
||||
@ -2022,7 +1844,7 @@ install_bootldr()
|
||||
if [[ $ROOT == /dev/mapper* ]]; then
|
||||
ROOT_ID="$ROOT"
|
||||
else
|
||||
[[ $BOOTLDR =~ (systemd-boot|refind|efistub) ]] && uuid_type="PARTUUID"
|
||||
[[ $BOOTLDR =~ (systemd-boot|efistub) ]] && uuid_type="PARTUUID"
|
||||
ROOT_ID="$uuid_type=$(blkid -s $uuid_type -o value $ROOT)"
|
||||
fi
|
||||
|
||||
@ -2076,11 +1898,6 @@ install_bootldr()
|
||||
cp -rf "$MNT/boot/EFI/syslinux/"* "$MNT/boot/EFI/BOOT/"
|
||||
cp -f "$MNT/boot/EFI/syslinux/syslinux.efi" "$MNT/boot/EFI/BOOT/BOOTX64.EFI"
|
||||
;;
|
||||
refind)
|
||||
k="linux-hardened,linux-zen,linux-lts,linux"
|
||||
sed -i "/#extra_kernel_version_strings/ c extra_kernel_version_strings $k" "$MNT/boot/EFI/refind/refind.conf"
|
||||
cp -fv "$MNT/boot/EFI/refind/refind_x64.efi" "$MNT/boot/EFI/BOOT/BOOTX64.EFI"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
@ -2095,10 +1912,8 @@ install_packages()
|
||||
inpkg=("${SES_PKGS[@]}" "${USER_PKGS[@]}" "$NEWSHELL")
|
||||
|
||||
if [[ $INSTALL_WMS ]]; then
|
||||
inpkg+=("${BASE_PKGS[@]}")
|
||||
[[ $INSTALL_WMS =~ (openbox|bspwm|i3-gaps|fluxbox|jwm|awesome|sway|dk) ]] && inpkg+=("${WM_PKGS[@]}")
|
||||
inpkg+=("${BASE_PKGS[@]}" "${WM_PKGS[@]}")
|
||||
[[ -d /etc/NetworkManager/system-connections ]] && inpkg+=("network-manager-applet")
|
||||
(( WAYLAND == 1 )) || inpkg+=("${X_WM_PKGS[@]}")
|
||||
fi
|
||||
|
||||
for i in ${LOGIN_PKGS[$LOGIN_TYPE]}; do
|
||||
@ -2115,7 +1930,6 @@ install_packages()
|
||||
[[ $BTRFS_MNT || $blk =~ btrfs ]] && inpkg+=('btrfs-progs')
|
||||
[[ $NEWSHELL == 'zsh' ]] && inpkg+=('zsh-completions')
|
||||
[[ $NEWSHELL =~ (bash|zsh) ]] && inpkg+=('bash-completion')
|
||||
[[ $INSTALL_WMS =~ dwm ]] && inpkg+=('git' 'make' 'gcc' 'pkgconf')
|
||||
|
||||
|
||||
# remove the packages we don't want on the installed system
|
||||
@ -2184,9 +1998,6 @@ install_packages()
|
||||
if [[ $BOOTLDR == 'grub' ]]; then
|
||||
chrun "pacman -S os-prober grub --needed --noconfirm" 2> "$ERR" 2>&1
|
||||
errshow 1 "chrun 'pacman -S os-prober grub --needed --noconfirm'"
|
||||
elif [[ $BOOTLDR == 'refind' ]]; then
|
||||
chrun "pacman -S refind --needed --noconfirm" 2> "$ERR" 2>&1
|
||||
errshow 1 "chrun 'pacman -S refind --needed --noconfirm'"
|
||||
elif [[ $BOOTLDR == 'syslinux' ]]; then
|
||||
chrun "pacman -S syslinux --needed --noconfirm" 2> "$ERR" 2>&1
|
||||
errshow 1 "chrun 'pacman -S syslinux --needed --noconfirm'"
|
||||
@ -2215,10 +2026,6 @@ install_check_bg()
|
||||
|
||||
[[ $LUKS ]] && luks='cryptsetup'
|
||||
|
||||
# select_mirrors || AUTO_MIRROR=true
|
||||
# install_mirrorlist > /tmp/bgout 2>&1
|
||||
# al_repo "/etc/pacman.conf"
|
||||
|
||||
{
|
||||
pacman -Syy
|
||||
pacman -S archlinux-keyring --noconfirm
|
||||
@ -2252,37 +2059,11 @@ install_check_bg()
|
||||
fi
|
||||
}
|
||||
|
||||
install_suckless()
|
||||
{
|
||||
local dir="$1/suckless"
|
||||
shift
|
||||
|
||||
if [[ $1 == 'chroot' ]]; then
|
||||
chrun "mkdir -pv '$dir'"
|
||||
for i in dwm dmenu st; do
|
||||
if chrun "git clone 'https://git.suckless.org/$i' '$dir/$i'"; then
|
||||
chrun "cd '$dir/$i' && make PREFIX=/usr install"
|
||||
else
|
||||
printf "failed to clone %s repo\n" "$i"
|
||||
fi
|
||||
done
|
||||
else
|
||||
mkdir -pv "$dir"
|
||||
for i in dwm dmenu st; do
|
||||
if git clone "https://git.suckless.org/$i" "$dir/$i"; then
|
||||
cd "$dir/$i" && make PREFIX=/usr install
|
||||
else
|
||||
printf "failed to clone %s repo\n" "$i"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
install_tearfree()
|
||||
{
|
||||
if [[ $VIRT != 'none' ]]; then
|
||||
[[ -e "$MNT/etc/X11/xorg.conf.d/40-touchpad.conf" ]] && rm -fv "$MNT/etc/X11/xorg.conf.d/40-touchpad.conf"
|
||||
elif [[ $TEARFREE ]]; then
|
||||
else
|
||||
if lspci | grep ' VGA ' | grep -q 'Intel'; then
|
||||
echo "Creating Intel Tear Free config /etc/X11/xorg.conf.d/20-intel.conf"
|
||||
cat > "$MNT/etc/X11/xorg.conf.d/20-intel.conf" <<- EOF
|
||||
@ -2292,6 +2073,7 @@ install_tearfree()
|
||||
Option "TearFree" "true"
|
||||
EndSection
|
||||
EOF
|
||||
sed -i 's/xrender/glx/g' "$MNT/etc/skel/.config/picom.conf"
|
||||
cat "$MNT/etc/X11/xorg.conf.d/20-intel.conf"
|
||||
elif lspci | grep ' VGA ' | grep -q 'AMD/ATI.*RX\|AMD/ATI.*R[579]'; then # newer RX, R5, R7, and R9 cards can use the amdgpu driver
|
||||
echo "Creating AMD Tear Free config /etc/X11/xorg.conf.d/20-amdgpu.conf"
|
||||
@ -2302,6 +2084,7 @@ install_tearfree()
|
||||
Option "TearFree" "true"
|
||||
EndSection
|
||||
EOF
|
||||
sed -i 's/xrender/glx/g' "$MNT/etc/skel/.config/picom.conf"
|
||||
cat "$MNT/etc/X11/xorg.conf.d/20-amdgpu.conf"
|
||||
elif lspci | grep ' VGA ' | grep -q 'AMD/ATI.*HD [2-6][0-9]*'; then # older HD 2xxx-6xxx cards must use the radeon driver
|
||||
echo "Creating Radeon Tear Free config /etc/X11/xorg.conf.d/20-radeon.conf"
|
||||
@ -2312,33 +2095,13 @@ install_tearfree()
|
||||
Option "TearFree" "on"
|
||||
EndSection
|
||||
EOF
|
||||
sed -i 's/xrender/glx/g' "$MNT/etc/skel/.config/picom.conf"
|
||||
cat "$MNT/etc/X11/xorg.conf.d/20-radeon.conf"
|
||||
elif hash nvidia-installer > /dev/null 2>&1 && lspci | grep ' VGA ' | grep -q 'NVIDIA'; then # nvidia cards require a bit of checking for notebook gpus
|
||||
echo "Trying nvidia driver install"
|
||||
if lspci | grep ' VGA ' | grep -q 'Intel\|AMD' && lspci | grep ' VGA ' | grep -q 'NVIDIA.*[6-9][1-8][05]M[X]\?\|NVIDIA.*Quadro.*[KMP][1-6][0-2][0]*M'; then
|
||||
chrun "nvidia-installer --bumblebee"
|
||||
else
|
||||
chrun "nvidia-installer" # unsure which card so try auto detection
|
||||
fi
|
||||
if [[ -e $MNT/etc/X11/xorg.conf.d/20-nvidia.conf ]]; then
|
||||
cat "$MNT/etc/X11/xorg.conf.d/20-nvidia.conf"
|
||||
echo
|
||||
echo "NVIDIA driver installed"
|
||||
echo "To enable driver vsync:"
|
||||
echo -e "\trun nvidia-settings (as root) on first boot\n\tenable 'ForceFullCompositionPipeline' under the advanced settings"
|
||||
echo -e "\tlastly save the change to your nvidia xorg config /etc/X11/xorg.conf.d/20-nvidia.conf"
|
||||
echo -e "\tand remove everything but the Device and Screen sections from the file"
|
||||
else
|
||||
echo "Unable to install nvidia driver"
|
||||
fi
|
||||
elif lspci | grep ' VGA ' | grep -q 'NVIDIA'; then
|
||||
echo "NVIDIA cards are currently unsupported for auto config"
|
||||
else
|
||||
echo "Unknown video card - aborting driver setup"
|
||||
fi
|
||||
|
||||
if lspci | grep ' VGA ' | grep -q 'Intel\|AMD/ATI' && [[ $MNT/etc/X11/xorg.conf.d == *"$MNT"* && -f "$MNT/etc/skel/.config/picom.conf" ]]; then
|
||||
# the glx backend is better on intel/amd gpus
|
||||
sed -i 's/xrender/glx/g' "$MNT/etc/skel/.config/picom.conf"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
@ -2356,8 +2119,7 @@ install_mkinitcpio()
|
||||
|
||||
install_mirrorlist()
|
||||
{
|
||||
local url='' country='' ip=''
|
||||
local key="access_key=5f29642060ab983b31fdf4c2935d8c56"
|
||||
local url=''
|
||||
typeset -a args=("--verbose" "--connection-timeout" "2" "--threads" "10")
|
||||
|
||||
# avoid SSL errors when the time is wrong
|
||||
@ -2366,35 +2128,11 @@ install_mirrorlist()
|
||||
# make a mirrorlist backup in case of issues
|
||||
[[ -f /etc/pacman.d/mirrorlist.bak ]] || cp -f /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bak
|
||||
|
||||
if hash reflector > /dev/null 2>&1; then
|
||||
if [[ $AUTO_MIRROR ]]; then
|
||||
reflector "${args[@]}" -l 250 -a 24 --score 100 --sort rate -f 5 --save /etc/pacman.d/mirrorlist
|
||||
else
|
||||
reflector "${args[@]}" -c "$MIRROR_COUNTRY" -l 150 -a 24 --score 75 --sort rate -f 5 --save /etc/pacman.d/mirrorlist
|
||||
fi
|
||||
else
|
||||
echo "Ranking mirrorlist, This may take a while..."
|
||||
if [[ $AUTO_MIRROR ]]; then
|
||||
ip="$(curl -s "api.infoip.io/ip")"
|
||||
country="$(curl -fsSL "http://api.ipstack.com/$ip?$key&fields=country_code" |
|
||||
python -c "import sys, json; print(json.load(sys.stdin)['country_code'])")"
|
||||
|
||||
if [[ $country && "${!COUNTRIES[*]}" =~ $country ]]; then
|
||||
if [[ $country =~ (CA|US) ]]; then
|
||||
url="https://www.archlinux.org/mirrorlist/?country=US&country=CA&use_mirror_status=on"
|
||||
elif [[ $country =~ (AU|NZ) ]]; then
|
||||
url="https://www.archlinux.org/mirrorlist/?country=AU&country=NZ&use_mirror_status=on"
|
||||
else
|
||||
url="https://www.archlinux.org/mirrorlist/?country=${country}&use_mirror_status=on"
|
||||
fi
|
||||
else # no country code so just grab all mirrors, will be a very slow sort but we don't have other options
|
||||
url="https://www.archlinux.org/mirrorlist/?country=all&use_mirror_status=on"
|
||||
fi
|
||||
else
|
||||
url="$MIRROR_URL"
|
||||
fi
|
||||
curl -fsSL "$url" | sed -e 's/^#Server/Server/' -e '/^#/d' | rankmirrors -n 5 - > /etc/pacman.d/mirrorlist
|
||||
fi
|
||||
|
||||
chmod +r /etc/pacman.d/mirrorlist
|
||||
}
|
||||
@ -2460,34 +2198,8 @@ config_ly()
|
||||
EOF
|
||||
}
|
||||
|
||||
config_gdm()
|
||||
{
|
||||
cat >> "$MNT/home/$NEWUSER/$LOGINRC" <<- EOF
|
||||
# add ~/.local/bin to the PATH
|
||||
echo \$PATH | grep -q "\$HOME/.local/bin:" || export PATH="\$HOME/.local/bin:\$PATH"
|
||||
EOF
|
||||
}
|
||||
|
||||
config_sddm()
|
||||
{
|
||||
if [[ $INSTALL_WMS =~ (plasma|lxqt) ]]; then
|
||||
mkdir -p "$MNT/etc/sddm.conf.d"
|
||||
cat > "$MNT/etc/sddm.conf.d/theme.conf" <<- EOF
|
||||
[Theme]
|
||||
Current=breeze
|
||||
EOF
|
||||
fi
|
||||
cat >> "$MNT/home/$NEWUSER/$LOGINRC" <<- EOF
|
||||
# add ~/.local/bin to the PATH
|
||||
echo \$PATH | grep -q "\$HOME/.local/bin:" || export PATH="\$HOME/.local/bin:\$PATH"
|
||||
EOF
|
||||
}
|
||||
|
||||
config_console()
|
||||
{
|
||||
typeset ses='startx' back='x11'
|
||||
[[ $LOGIN_WM =~ $WAYLAND_SESSIONS ]] && ses="$LOGIN_WM" back='wayland'
|
||||
|
||||
if [[ $AUTOLOGIN ]]; then
|
||||
mkdir -p "$AUTOLOGIN_SERV"
|
||||
cat > "$AUTOLOGIN_SERV/autologin.conf" <<- EOF
|
||||
@ -2495,40 +2207,21 @@ config_console()
|
||||
ExecStart=
|
||||
ExecStart=-/sbin/agetty -o '-p -f -- \\\u' --noclear --autologin $NEWUSER - \$TERM
|
||||
EOF
|
||||
# [Service]
|
||||
# ExecStart=
|
||||
# ExecStart=-/sbin/agetty --autologin $NEWUSER --noclear %I 38400 linux
|
||||
else
|
||||
rm -rf "$AUTOLOGIN_SERV"
|
||||
fi
|
||||
|
||||
if [[ $INSTALL_WMS ]]; then
|
||||
rm "$MNT/home/$NEWUSER/$LOGINRC"
|
||||
if (( WAYLAND != 1 )); then
|
||||
sed -i "/exec/ c exec ${LOGIN_WM}" "$MNT/home/$NEWUSER/.xinitrc"
|
||||
if [[ $LOGIN_WM == 'gnome-session' ]]; then
|
||||
# see https://wiki.archlinux.org/index.php/GNOME#Manually
|
||||
sed -i '/exec/ i export XDG_SESSION_TYPE=x11' "$MNT/home/$NEWUSER/.xinitrc"
|
||||
sed -i '/exec/ i export GDK_BACKEND=x11' "$MNT/home/$NEWUSER/.xinitrc"
|
||||
fi
|
||||
else
|
||||
cat >> "$MNT/home/$NEWUSER/$LOGINRC" <<- EOF
|
||||
# wayland specific setup
|
||||
export XDG_SESSION_TYPE=wayland
|
||||
export MOZ_ENABLE_WAYLAND=1
|
||||
export QT_QPA_PLATFORM=wayland
|
||||
|
||||
EOF
|
||||
rm -rf "$MNT/home/$NEWUSER/.xinitrc" "$MNT/root/.xinitrc"
|
||||
fi
|
||||
|
||||
# run the session after logging in regardless of autologin
|
||||
cat >> "$MNT/home/$NEWUSER/$LOGINRC" <<- EOF
|
||||
# add ~/.local/bin to the PATH
|
||||
echo \$PATH | grep -q "\$HOME/.local/bin:" || export PATH="\$HOME/.local/bin:\$PATH"
|
||||
|
||||
# automatically run $ses when logging in on tty1
|
||||
[ -z "\$DISPLAY" ] && [ \$XDG_VTNR -eq 1 ] && sleep 2 && $ses
|
||||
# automatically run startx when logging in on tty1
|
||||
[ -z "\$DISPLAY" ] && [ \$XDG_VTNR -eq 1 ] && sleep 2 && startx
|
||||
EOF
|
||||
else
|
||||
rm -rf "$MNT/home/$NEWUSER/.xinitrc" "$MNT/root/.xinitrc"
|
||||
@ -2684,36 +2377,6 @@ prerun_syslinux()
|
||||
return 0
|
||||
}
|
||||
|
||||
setup_refind()
|
||||
{
|
||||
EDIT_FILES[bootloader]="/boot/refind_linux.conf"
|
||||
BCMDS[refind-efi]="mount -t efivarfs efivarfs /sys/firmware/efi/efivars > /dev/null 2>&1; refind-install"
|
||||
}
|
||||
|
||||
prerun_refind()
|
||||
{
|
||||
cat > "$MNT/boot/refind_linux.conf" <<- EOF
|
||||
"$DIST Linux" "root=$ROOT_ID ${LUKS_DEV}${RESUME}rw ([[ $BTRFS_MNT ]] && printf ' %s' "$BTRFS_MNT") add_efi_memmap $([[ $UCODE ]] &&
|
||||
printf "initrd=%s " "/$UCODE.img")initrd=/initramfs-%v.img"
|
||||
"$DIST Linux Fallback" "root=$ROOT_ID ${LUKS_DEV}${RESUME}rw ([[ $BTRFS_MNT ]] && printf ' %s' "$BTRFS_MNT") add_efi_memmap $([[ $UCODE ]] &&
|
||||
printf "initrd=%s " "/$UCODE.img")initrd=/initramfs-%v-fallback.img"
|
||||
EOF
|
||||
|
||||
mkdir -p "$MNT/etc/pacman.d/hooks"
|
||||
|
||||
cat > "$MNT/etc/pacman.d/hooks/refind.hook" <<- EOF
|
||||
[Trigger]
|
||||
Operation = Upgrade
|
||||
Type = Package
|
||||
Target = refind
|
||||
|
||||
[Action]
|
||||
Description = Updating rEFInd on ESP
|
||||
When = PostTransaction
|
||||
Exec = /usr/bin/refind-install
|
||||
EOF
|
||||
}
|
||||
|
||||
setup_systemd-boot()
|
||||
{
|
||||
EDIT_FILES[bootloader]="/boot/loader/entries/${DIST,,}.conf"
|
||||
@ -3287,7 +2950,7 @@ msg()
|
||||
usage()
|
||||
{
|
||||
cat <<- EOF
|
||||
usage: $1 [-cfhDnt] [-r ROOT] [-b BOOT] [-d DISTRO] [-m MOUNTPOINT]
|
||||
usage: $1 [-cfhDn] [-r ROOT] [-b BOOT] [-d DISTRO] [-m MOUNTPOINT]
|
||||
|
||||
options:
|
||||
-h print this message and exit
|
||||
@ -3299,8 +2962,6 @@ usage()
|
||||
-n no partitioning, mounting, or formatting (self mount)
|
||||
-r root partition to use for install, required when using -n
|
||||
-b boot partition to use for install, required on UEFI systems when using -n
|
||||
-t install and setup drivers for nvidia or tearfree xorg configs for other vendors
|
||||
if you experience boot issues with this option, remove /etc/X11/xorg.conf.d/20-*.conf
|
||||
|
||||
EOF
|
||||
exit 0
|
||||
@ -3636,7 +3297,7 @@ prechecks()
|
||||
# the selected entry number ($SEL) back to the step required to progress
|
||||
local i=1
|
||||
|
||||
if (( $1 >= 0 )) && ! grep -q " $MNT " /proc/mounts; then
|
||||
if (( $1 >= 1 )) && ! grep -q " $MNT " /proc/mounts; then
|
||||
msg "Not Mounted" "\nPartition(s) must be mounted first.\n" 2
|
||||
if [[ $NOMOUNT ]]; then
|
||||
die 1
|
||||
@ -3644,30 +3305,22 @@ prechecks()
|
||||
SEL=1
|
||||
fi
|
||||
i=0
|
||||
elif [[ $1 -ge 1 && -z $BOOTLDR ]]; then
|
||||
msg "No Bootloader" "\nBootloader must be selected first.\n" 2
|
||||
elif [[ $1 -ge 2 && (-z $NEWUSER || -z $USER_PASS) ]]; then
|
||||
msg "No User" "\nA user must be created first.\n" 2
|
||||
if [[ $NOMOUNT ]]; then
|
||||
SEL=0
|
||||
else
|
||||
SEL=2
|
||||
fi
|
||||
i=0
|
||||
elif [[ $1 -ge 2 && (-z $NEWUSER || -z $USER_PASS) ]]; then
|
||||
msg "No User" "\nA user must be created first.\n" 2
|
||||
elif [[ $1 -ge 3 && -z $CONFIG_DONE ]]; then
|
||||
msg "No Config" "\nSystem configuration must be done first.\n" 2
|
||||
if [[ $NOMOUNT ]]; then
|
||||
SEL=1
|
||||
else
|
||||
SEL=3
|
||||
fi
|
||||
i=0
|
||||
elif [[ $1 -ge 3 && -z $CONFIG_DONE ]]; then
|
||||
msg "No Config" "\nSystem configuration must be done first.\n" 2
|
||||
if [[ $NOMOUNT ]]; then
|
||||
SEL=2
|
||||
else
|
||||
SEL=4
|
||||
fi
|
||||
i=0
|
||||
fi
|
||||
(( i )) # return code
|
||||
}
|
||||
@ -3814,20 +3467,6 @@ net_connect()
|
||||
chk_connect
|
||||
}
|
||||
|
||||
dwm_xsession()
|
||||
{
|
||||
mkdir -p "$MNT/usr/share/xsessions"
|
||||
cat > "$MNT/usr/share/xsessions/dwm.desktop" <<- EOF
|
||||
[Desktop Entry]
|
||||
Encoding=UTF-8
|
||||
Name=Dwm
|
||||
Comment=Dynamic Window Manager
|
||||
Exec=dwm
|
||||
TryExec=dwm
|
||||
Type=Application
|
||||
EOF
|
||||
}
|
||||
|
||||
is_bg_install()
|
||||
{
|
||||
[[ $BG_PID ]] || return 0
|
||||
@ -3897,12 +3536,11 @@ fi
|
||||
|
||||
trap 'printf "\n^C\n" && die 1' INT
|
||||
|
||||
while getopts ":htcnrfDb:m:d:" OPT; do
|
||||
while getopts ":hcnrfDb:m:d:" OPT; do
|
||||
case "$OPT" in
|
||||
D) debug ;;
|
||||
h) usage "${0##*/}" ;;
|
||||
n) NOMOUNT=true ;;
|
||||
t) TEARFREE=true ;;
|
||||
m) MNT="$OPTARG" ;;
|
||||
d) DIST="$OPTARG" ;;
|
||||
c) NONET=true ;;
|
||||
@ -3989,12 +3627,8 @@ mirrorpid=''
|
||||
|
||||
if [[ ! -f /tmp/new ]]; then
|
||||
msg "Update" "\nChecking for installer updates.\n" 0
|
||||
if hash reflector > /dev/null 2>&1; then
|
||||
( reflector --list-countries 2>/dev/null | sed '1,2d' | awk 'NF{NF--}; {print}' > /tmp/mcountry ) &
|
||||
mirrorpid=$!
|
||||
else
|
||||
echo "$FBREF_COUNTRIES" > /tmp/mcountry
|
||||
fi
|
||||
if curl -fsSL 'https://bitbucket.org/archlabslinux/installer/raw/master/installer' -o /tmp/new; then
|
||||
if (( $(vercmp "$(awk -F= '/^VER=/ {print $2}' /tmp/new)" "$VER") > 0 )); then
|
||||
cp /tmp/new /usr/local/bin/installer
|
||||
|
Reference in New Issue
Block a user