diff --git a/installer b/installer index 8e69a3e..9f507a9 100755 --- a/installer +++ b/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 @@ -468,16 +354,15 @@ main() WARN=true fi 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 ;; + 1) dev_menu || (( SEL-- )) ;; + 2) mount_menu || SEL=0 ;; + 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%% *}]}" + EDIT_FILES[login]="/home/$NEWUSER/.xinitrc /home/$NEWUSER/.xprofile" + [[ -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,55 +1680,53 @@ 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" - Identifier "touchpad" - Driver "libinput" - MatchIsTouchpad "on" - Option "Tapping" "on" - Option "TappingDrag" "on" - Option "AccelSpeed" "0.5" - Option "AccelProfile" "adaptive" - Option "ScrollMethod" "twofinger" - Option "MiddleEmulation" "on" - Option "DisableWhileTyping" "on" - Option "TappingButtonMap" "lrm" - EndSection - - Section "InputClass" - Identifier "touchpad-ignore-duplicates" - MatchIsTouchpad "on" - MatchOS "Linux" - MatchDevicePath "/dev/input/mouse*" - Option "Ignore" "on" - EndSection - - Section "InputClass" - Identifier "clickpad-buttons" - MatchDriver "libinput" - Option "SoftButtonAreas" "50% 0 82% 0 0 0 0 0" - Option "SecondarySoftButtonAreas" "58% 0 0 15% 42% 58% 0 15%" - EndSection - - Section "InputClass" - Identifier "Disable-clickpad-buttons-on-Apple-touchpads" - MatchProduct "Apple|bcm5974" - MatchDriver "libinput" - Option "SoftButtonAreas" "0 0 0 0 0 0 0 0" - EndSection - EOF - - cat > "$MNT/etc/X11/xorg.conf.d/00-keyboard.conf" <<- EOF - # Use localectl(1) to instruct systemd-localed to update it. - Section "InputClass" - Identifier "system-keyboard" - MatchIsKeyboard "on" - Option "XkbLayout" "$KEYMAP" - EndSection - EOF - fi + mkdir -pv "$MNT/etc/X11/xorg.conf.d/" + cat > "$MNT/etc/X11/xorg.conf.d/40-touchpad.conf" <<- EOF + Section "InputClass" + Identifier "touchpad" + Driver "libinput" + MatchIsTouchpad "on" + Option "Tapping" "on" + Option "TappingDrag" "on" + Option "AccelSpeed" "0.5" + Option "AccelProfile" "adaptive" + Option "ScrollMethod" "twofinger" + Option "MiddleEmulation" "on" + Option "DisableWhileTyping" "on" + Option "TappingButtonMap" "lrm" + EndSection + + Section "InputClass" + Identifier "touchpad-ignore-duplicates" + MatchIsTouchpad "on" + MatchOS "Linux" + MatchDevicePath "/dev/input/mouse*" + Option "Ignore" "on" + EndSection + + Section "InputClass" + Identifier "clickpad-buttons" + MatchDriver "libinput" + Option "SoftButtonAreas" "50% 0 82% 0 0 0 0 0" + Option "SecondarySoftButtonAreas" "58% 0 0 15% 42% 58% 0 15%" + EndSection + + Section "InputClass" + Identifier "Disable-clickpad-buttons-on-Apple-touchpads" + MatchProduct "Apple|bcm5974" + MatchDriver "libinput" + Option "SoftButtonAreas" "0 0 0 0 0 0 0 0" + EndSection + EOF + + cat > "$MNT/etc/X11/xorg.conf.d/00-keyboard.conf" <<- EOF + # Use localectl(1) to instruct systemd-localed to update it. + Section "InputClass" + Identifier "system-keyboard" + MatchIsKeyboard "on" + Option "XkbLayout" "$KEYMAP" + EndSection + EOF 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,34 +2128,10 @@ 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 + if [[ $AUTO_MIRROR ]]; then + reflector "${args[@]}" -l 250 -a 24 --score 100 --sort rate -f 5 --save /etc/pacman.d/mirrorlist 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 + reflector "${args[@]}" -c "$MIRROR_COUNTRY" -l 150 -a 24 --score 75 --sort rate -f 5 --save /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 + sed -i "/exec/ c exec ${LOGIN_WM}" "$MNT/home/$NEWUSER/.xinitrc" # 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 @@ -3335,41 +2996,41 @@ zshrc() if [[ \$- != *i* ]]; then return fi - + # completion cache path setup typeset -g comppath="\$HOME/.cache" typeset -g compfile="\$comppath/.zcompdump" - + if [[ -d "\$comppath" ]]; then [[ -w "\$compfile" ]] || rm -rf "\$compfile" >/dev/null 2>&1 else mkdir -p "\$comppath" fi - + # zsh internal stuff SHELL=\$(which zsh || echo '/bin/zsh') KEYTIMEOUT=1 SAVEHIST=10000 HISTSIZE=10000 HISTFILE="\$HOME/.cache/.zsh_history" - + alias la='ls -Ah' alias ll='ls -lAh' alias grep='grep --color=auto' alias grub-update='sudo grub-mkconfig -o /boot/grub/grub.cfg' alias mirror-update='sudo reflector --verbose --connection-timeout 2 --threads 10 --latest 200 --age 24 --score 75 --sort rate --fastest 6 --save /etc/pacman.d/mirrorlist' - - + + ls() # ls with preferred arguments { command ls --color=auto -F1 "\$@" } - + cd() # cd and ls after { builtin cd "\$@" && command ls --color=auto -F } - + src() # recompile completion and reload zsh { autoload -U zrecompile @@ -3378,7 +3039,7 @@ zshrc() zrecompile -p "\$compfile" exec zsh } - + # less/manpager colours export MANWIDTH=80 export LESS='-R' @@ -3391,7 +3052,7 @@ zshrc() export LESS_TERMCAP_md=$'\\e[31m' export LESS_TERMCAP_so=$'\\e[47;30m' export LESSPROMPT='?f%f .?ltLine %lt:?pt%pt\%:?btByte %bt:-...' - + # completion setopt CORRECT setopt NO_NOMATCH @@ -3400,48 +3061,48 @@ zshrc() setopt GLOB_COMPLETE setopt COMPLETE_ALIASES setopt COMPLETE_IN_WORD - + # builtin command behaviour setopt AUTO_CD - + # job control setopt AUTO_CONTINUE setopt LONG_LIST_JOBS - + # history control setopt HIST_VERIFY setopt SHARE_HISTORY setopt HIST_IGNORE_SPACE setopt HIST_SAVE_NO_DUPS setopt HIST_IGNORE_ALL_DUPS - + # misc setopt EXTENDED_GLOB setopt TRANSIENT_RPROMPT setopt INTERACTIVE_COMMENTS - - + + autoload -U compinit # completion autoload -U terminfo # terminfo keys zmodload -i zsh/complist # menu completion autoload -U promptinit # prompt - + # better history navigation, matching currently typed text autoload -U up-line-or-beginning-search; zle -N up-line-or-beginning-search autoload -U down-line-or-beginning-search; zle -N down-line-or-beginning-search - + # set the terminal mode when entering or exiting zle, otherwise terminfo keys are not loaded if (( \${+terminfo[smkx]} && \${+terminfo[rmkx]} )); then zle-line-init() { echoti smkx; }; zle -N zle-line-init zle-line-finish() { echoti rmkx; }; zle -N zle-line-finish fi - + exp_alias() # expand aliases to the left (if any) before inserting the key pressed { zle _expand_alias zle self-insert }; zle -N exp_alias - + # bind keys not in terminfo bindkey -- ' ' exp_alias bindkey -- '^P' up-history @@ -3450,7 +3111,7 @@ zshrc() bindkey -- '^A' beginning-of-line bindkey -- '^[^M' self-insert-unmeta # alt-enter to insert a newline/carriage return bindkey -- '^[05M' accept-line # fix for enter key on some systems - + # default shell behaviour using terminfo keys [[ -n \${terminfo[kdch1]} ]] && bindkey -- "\${terminfo[kdch1]}" delete-char # delete [[ -n \${terminfo[kend]} ]] && bindkey -- "\${terminfo[kend]}" end-of-line # end @@ -3462,12 +3123,12 @@ zshrc() [[ -n \${terminfo[kcbt]} ]] && bindkey -- "\${terminfo[kcbt]}" reverse-menu-complete # shift-tab [[ -n \${terminfo[kcuu1]} ]] && bindkey -- "\${terminfo[kcuu1]}" up-line-or-beginning-search # up arrow [[ -n \${terminfo[kcud1]} ]] && bindkey -- "\${terminfo[kcud1]}" down-line-or-beginning-search # down arrow - + # correction zstyle ':completion:*:correct:*' original true zstyle ':completion:*:correct:*' insert-unambiguous true zstyle ':completion:*:approximate:*' max-errors 'reply=(\$(( (\$#PREFIX + \$#SUFFIX) / 3 )) numeric)' - + # completion zstyle ':completion:*' use-cache on zstyle ':completion:*' cache-path "\$comppath" @@ -3485,7 +3146,7 @@ zshrc() zstyle ':completion:*' completer _complete _match _approximate _ignored zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*' zstyle ':completion:*:cd:*' tag-order local-directories directory-stack path-directories - + # labels and categories zstyle ':completion:*' group-name '' zstyle ':completion:*:matches' group 'yes' @@ -3497,19 +3158,19 @@ zshrc() zstyle ':completion:*:descriptions' format ' %F{green}->%F{yellow} %d%f' zstyle ':completion:*:warnings' format ' %F{green}->%F{red} no matches%f' zstyle ':completion:*:corrections' format ' %F{green}->%F{green} %d: %e%f' - + # menu colours eval "\$(dircolors)" zstyle ':completion:*' list-colors \${(s.:.)LS_COLORS} zstyle ':completion:*:*:kill:*:processes' list-colors '=(#b) #([0-9]#) ([0-9a-z-]#)*=36=0=01' - + # command parameters zstyle ':completion:*:functions' ignored-patterns '(prompt*|_*|*precmd*|*preexec*)' zstyle ':completion::*:(-command-|export):*' fake-parameters \${\${\${_comps[(I)-value-*]#*,}%%,*}:#-*-} zstyle ':completion:*:*:*:*:processes' command "ps -u \$USER -o pid,user,comm -w -w" zstyle ':completion:*:processes-names' command 'ps c -u \${USER} -o command | uniq' zstyle ':completion:*:(vim|nvim|vi|nano):*' ignored-patterns '*.(wav|mp3|flac|ogg|mp4|avi|mkv|iso|so|o|7z|zip|tar|gz|bz2|rar|deb|pkg|gzip|pdf|png|jpeg|jpg|gif)' - + # hostnames and addresses zstyle ':completion:*:ssh:*' tag-order 'hosts:-host:host hosts:-domain:domain hosts:-ipaddr:ip\ address *' zstyle ':completion:*:ssh:*' group-order users hosts-domain hosts-host users hosts-ipaddr @@ -3520,10 +3181,10 @@ zshrc() zstyle ':completion:*:(ssh|scp|rsync):*:hosts-ipaddr' ignored-patterns '^(<->.<->.<->.<->|(|::)([[:xdigit:].]##:(#c,2))##(|%*))' '127.0.0.<->' '255.255.255.255' '::1' 'fe80::*' zstyle -e ':completion:*:hosts' hosts 'reply=( \${=\${=\${=\${\${(f)"\$(cat {/etc/ssh_,~/.ssh/known_}hosts(|2)(N) 2>/dev/null)"}%%[#| ]*}//\]:[0-9]*/ }//,/ }//\[/ } \${=\${(f)"\$(cat /etc/hosts(|)(N) <<(ypcat hosts 2>/dev/null))"}%%\#*} \${=\${\${\${\${(@M)\${(f)"\$(cat ~/.ssh/config 2>/dev/null)"}:#Host *}#Host }:#*\**}:#*\?*}})' ttyctl -f - + # initialize completion compinit -u -d "\$compfile" - + # initialize prompt with a decent built-in theme promptinit prompt adam1 @@ -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 + ( reflector --list-countries 2>/dev/null | sed '1,2d' | awk 'NF{NF--}; {print}' > /tmp/mcountry ) & + mirrorpid=$! 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