Files
linux-scripts/arch-setup.sh
2025-03-15 22:03:50 +01:00

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