#!/bin/bash # Function name: Install packages # Description: Install packages from an array # Arguments: # $1: Package list (array) install_packages() { local packages=("${!1}") for package in "${packages[@]}"; do sudo pacman -S --needed --noconfirm "$package" done } # Function name: Check whiptail # Description: Check if whiptail is installed else install it check_whiptail() { if ! command -v whiptail &>/dev/null; then sudo pacman -S --needed --noconfirm libnewt fi } # Function name: Add repositories # Description: Ask the user if they want to add specific repositories add_repositories() { options=( "BlackArch" "Add BlackArch repository" OFF "Chaotic.cx" "Add Chaotic.cx repository" OFF "CachyOS" "Add CachyOS repository" OFF "Chromatic" "Add Chromatic repository" OFF ) selected_repos=$(whiptail --title "Add Repositories" --checklist \ "Choose the repositories you want to add:" 20 78 4 \ "${options[@]}" 3>&1 1>&2 2>&3) for repo in $selected_repos; do case $repo in "\"BlackArch\"") if ! grep -q "\[blackarch\]" /etc/pacman.conf; then curl -O https://blackarch.org/strap.sh chmod +x strap.sh sudo sed -i 's/msg '\''installing blackarch-officials meta-package...'\''/#msg '\''installing blackarch-officials meta-package...'\''/' strap.sh sudo sed -i 's/pacman -S --noconfirm --needed blackarch-officials/#pacman -S --noconfirm --needed blackarch-officials/' strap.sh sudo ./strap.sh else echo "BlackArch repository is already installed." fi ;; "\"Chaotic.cx\"") if ! grep -q "\[chaotic-aur\]" /etc/pacman.conf; then sudo pacman-key --recv-key 3056513887B78AEB --keyserver keyserver.ubuntu.com sudo pacman-key --lsign-key 3056513887B78AEB sudo pacman -U --noconfirm 'https://cdn-mirror.chaotic.cx/chaotic-aur/chaotic-keyring.pkg.tar.zst' sudo pacman -U --noconfirm 'https://cdn-mirror.chaotic.cx/chaotic-aur/chaotic-mirrorlist.pkg.tar.zst' echo '[chaotic-aur]' | sudo tee -a /etc/pacman.conf echo 'Include = /etc/pacman.d/chaotic-mirrorlist' | sudo tee -a /etc/pacman.conf else echo "Chaotic.cx repository is already installed." fi ;; "\"CachyOS\"") if ! grep -q "\[cachyos\]" /etc/pacman.conf; then curl https://mirror.cachyos.org/cachyos-repo.tar.xz -o /tmp/cachyos-repo.tar.xz tar xvf /tmp/cachyos-repo.tar.xz -C /tmp cd /tmp/cachyos-repo || exit sudo ./cachyos-repo.sh else echo "CachyOS repository is already installed." fi ;; "\"Chromatic\"") if ! grep -q "\[chromatic\]" /etc/pacman.conf; then sudo pacman-key --recv-key 6EFB412EBDDD1853DF71F4B625AE803AA8C39062 --keyserver keys.openpgp.org sudo pacman-key --lsign-key 6EFB412EBDDD1853DF71F4B625AE803AA8C39062 sudo pacman -U --noconfirm 'https://mirror.trap.moe/chromatic/x86_64/chromatic-keyring-1.0-1-any.pkg.tar.zst' sudo pacman -U --noconfirm 'https://mirror.trap.moe/chromatic/x86_64/chromatic-mirrorlist-20250315-1-any.pkg.tar.zst' echo '[chromatic]' | sudo tee -a /etc/pacman.conf echo 'Include = /etc/pacman.d/chromatic-mirrorlist' | sudo tee -a /etc/pacman.conf sudo pacman -Sy --noconfirm chromatic-keyring else echo "Chromatic repository is already installed." fi ;; esac done } # Function name: Update system # Description: Update the system update_system() { sudo pacman -Syu --noconfirm } # Function name: Setup Pacman configuration # Description: Setup Pacman configuration setup_pacman() { sudo sed -i 's/#Color/Color/' /etc/pacman.conf sudo sed -i 's/#ILoveCandy/ILoveCandy/' /etc/pacman.conf sudo sed -i 's/#VerbosePkgLists/VerbosePkgLists/' /etc/pacman.conf sudo sed -i 's/#CheckSpace/CheckSpace/' /etc/pacman.conf sudo sed -i 's/#PrettyProgressBar/PrettyProgressBar/' /etc/pacman.conf sudo sed -i 's/#ParallelDownloads = 5/ParallelDownloads = 10/' /etc/pacman.conf sudo sed -i 's/#DisableDownloadTimeout/DisableDownloadTimeout/' /etc/pacman.conf } # Function name: Setup plymouth # Description: Setup plymouth setup_plymouth() { echo "quiet splash" | sudo tee -a /etc/kernel/cmdline sudo pacman -S --needed --noconfirm plymouth plymouth-kcm sudo plymouth-set-default-theme -R catppuccin-mocha } # Packages group definitions # Package groups zsh_packages=( grml-zsh-config oh-my-zsh-git zsh zsh-autosuggestions zsh-completions zsh-history-substring-search zsh-lovers zsh-syntax-highlighting ) theme_packages=( catppuccin-cursors-mocha catppuccin-gtk-theme-mocha papirus-folders-catppuccin-git plymouth-theme-catppuccin-mocha-git #refind-theme-catppuccin-git sddm-theme-catppuccin-git ) games_packages=( steam-native-runtime heroic-games-launcher-bin an-anime-game-launcher-bin honkers-launcher-bin sleepy-launcher-bin the-honkers-railway-launcher-bin umu-launcher goverlay gamemode gamescope mangohud ) pipewire_packages=( pipewire pipewire-pulse pipewire-jack pipewire-alsa wireplumber ) cups_packages=( cups cups-pdf cups-filters system-config-printer ) networkmanager_packages=( networkmanager networkmanager-openvpn networkmanager-pptp networkmanager-vpnc networkmanager-strongswan networkmanager-l2tp wpa_supplicant ) bluetooth_packages=( bluez bluez-utils bluez-hid2hci bluedevil ) virtualization_packages=( qemu-full virt-manager virt-viewer swtpm ) containers_packages=( podman distrobox waydroid lxc ) # function name : setup browser # Description: setup browser setup_browser() { options=( "Firefox" "Install Firefox" ON "Chromium" "Install Chromium" OFF "Brave" "Install Brave" OFF "Vivaldi" "Install Vivaldi" OFF "Google Chrome" "Install Google Chrome" OFF "Zen Browser" "Install Zen Browser" OFF "Tor Browser" "Install Tor Browser" OFF "Mullvad Browser" "Install Mullvad Browser" OFF "Edge Stable" "Install Edge Stable" OFF "LibreWolf" "Install LibreWolf" OFF "Floorp" "Install Floorp" OFF "Chromium Widevine" "Install Chromium Widevine" OFF "Links" "Install Links" OFF ) selected_browsers=$(whiptail --title "Setup Browser" --checklist \ "Choose the browsers you want to install:" 20 78 13 \ "${options[@]}" 3>&1 1>&2 2>&3) for browser in $selected_browsers; do case $browser in "\"Firefox\"") sudo pacman -S --needed --noconfirm firefox ;; "\"Chromium\"") sudo pacman -S --needed --noconfirm chromium ;; "\"Brave\"") sudo pacman -S --needed --noconfirm brave-bin ;; "\"Vivaldi\"") sudo pacman -S --needed --noconfirm vivaldi ;; "\"Google Chrome\"") yay -S --needed --noconfirm google-chrome ;; "\"Zen Browser\"") yay -S --needed --noconfirm zen-browser-bin ;; "\"Tor Browser\"") sudo pacman -S --needed --noconfirm tor-browser-bin ;; "\"Mullvad Browser\"") yay -S --needed --noconfirm mullvad-browser-bin ;; "\"Edge Stable\"") yay -S --needed --noconfirm microsoft-edge-stable-bin ;; "\"LibreWolf\"") yay -S --needed --noconfirm librewolf ;; "\"Floorp\"") yay -S --needed --noconfirm floorp-bin ;; "\"Chromium Widevine\"") sudo pacman -S --needed --noconfirm chromium-widevine ;; "\"Links\"") sudo pacman -S --needed --noconfirm links ;; esac done } # function name : setup u2f # Description: setup u2f setup_u2f() { sudo pacman -S --needed --noconfirm pam-u2f mkdir ~/.config/Yubico pamu2fcfg -o "pam://$HOST" -i "pam://$HOST" > ~/.config/Yubico/u2f_keys sudo touch /etc/pam.d/u2f-required sudo touch /etc/pam.d/u2f-sufficient echo "auth required pam_u2f.so cue origin=pam://$HOST appid=pam://$HOST" | sudo tee -a /etc/pam.d/u2f-required echo "auth sufficient pam_u2f.so cue origin=pam://$HOST appid=pam://$HOST" | sudo tee -a /etc/pam.d/u2f-sufficient sudo sed -i '/^password\s*include\s*system-auth/i auth include u2f-sufficient' /etc/pam.d/su sudo sed -i '/^auth\s*include\s*system-auth/i auth include u2f-sufficient' /etc/pam.d/sudo sudo sed -i '/^auth\s*include\s*system-auth/i auth include u2f-sufficient' /etc/pam.d/passwd sudo sed -i '/^auth\s*include\s*system-auth/i auth include u2f-sufficient' /etc/pam.d/system-login sudo cp /usr/lib/pam.d/polkit-1 /etc/pam.d/polkit-1 sudo sed -i '/^auth\s*include\s*system-auth/i auth include u2f-sufficient' /etc/pam.d/polkit-1 } # function name : setup OpenRGB # Description: setup OpenRGB setup_openrgb() { sudo pacman -S --needed --noconfirm openrgb sudo gpasswd -a "$USER" plugdev sudo systemctl enable --now openrgb } # function name : Install packages group # Description: Install packages group by asking with a selection menu which group would you like to install install_packages_group() { options=( "Zsh" "Install Zsh packages" OFF "Theme" "Install Theme packages" OFF "Games" "Install Games packages" OFF "Pipewire" "Install Pipewire packages" OFF "Cups" "Install Cups packages" OFF "NetworkManager" "Install NetworkManager packages" OFF "Bluetooth" "Install Bluetooth packages" OFF "Virtualization" "Install Virtualization packages" OFF "Containers" "Install Containers packages" OFF "U2F" "Setup U2F" OFF "OpenRGB" "Setup OpenRGB" OFF ) selected_groups=$(whiptail --title "Install Packages Group" --checklist \ "Choose the packages group you want to install:" 20 78 11 \ "${options[@]}" 3>&1 1>&2 2>&3) for group in $selected_groups; do case $group in "\"Zsh\"") install_packages zsh_packages[@] ;; "\"Theme\"") install_packages theme_packages[@] ;; "\"Games\"") install_packages games_packages[@] ;; "\"Pipewire\"") install_packages pipewire_packages[@] ;; "\"Cups\"") install_packages cups_packages[@] ;; "\"NetworkManager\"") install_packages networkmanager_packages[@] ;; "\"Bluetooth\"") install_packages bluetooth_packages[@] ;; "\"Virtualization\"") install_packages virtualization_packages[@] ;; "\"Containers\"") install_packages containers_packages[@] ;; "\"U2F\"") setup_u2f ;; "\"OpenRGB\"") setup_openrgb ;; esac done } # Main script check_whiptail add_repositories update_system setup_pacman setup_browser install_packages_group setup_plymouth