350 lines
11 KiB
Bash
Executable File
350 lines
11 KiB
Bash
Executable File
#!/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 |