Files
linux-scripts/fedora-setup.sh
2025-03-25 13:56:43 +01:00

342 lines
10 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 dnf install -y "$package"
done
}
# Function name: Install package
# Description: Install a package
# Arguments:
# $1: Package name
install_package() {
sudo dnf install -y "$1"
}
# Function name: Add repositories
# Description: Add repositories from an array
# Arguments:
# $1: Repository list (array)
add_repositories() {
options=(
"rpmfusion-free" "RPM Fusion Free repository" ON
"rpmfusion-nonfree" "RPM Fusion Non-Free repository" OFF
"brave" "Brave official repository" OFF
"chrome" "Google Chrome official repository" OFF
"edge" "Microsoft Edge official repository" OFF
"librewolf" "Librewolf official repository" OFF
"mullvad" "Mullvad official repository" OFF
"heroic-games" "Heroic Games Launcher official repository" OFF
"freeoffice" "FreeOffice official repository" OFF
)
selected_repositories=$(whiptail --title "Add Repositories" --checklist \
"Choose the repositories you want to add:" 20 78 9 \
"${options[@]}" 3>&1 1>&2 2>&3)
for repository in $selected_repositories; do
case $repository in
"rpmfusion-free")
sudo dnf install https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm -y
;;
"rpmfusion-nonfree")
sudo dnf install https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm -y
;;
"brave")
sudo dnf config-manager addrepo --from-repofile=https://brave-browser-rpm-release.s3.brave.com/brave-browser.repo
;;
"chrome")
sudo dnf install fedora-workstation-repositories -y
sudo dnf config-manager setopt google-chrome.enabled=1
;;
"edge")
sudo dnf config-manager addrepo --from-repofile=https://packages.microsoft.com/yumrepos/edge/config.repo
;;
"librewolf")
sudo dnf config-manager addrepo --from-repofile=https://rpm.librewolf.net/librewolf-repo.repo
;;
"mullvad")
sudo dnf config-manager addrepo --from-repofile=https://repository.mullvad.net/rpm/stable/mullvad.repo
;;
"heroic-games")
sudo dnf copr enable atim/heroic-games-launcher -y
;;
"freeoffice")
sudo dnf config-manager addrepo --from-repofile=https://shop.softmaker.com/repo/softmaker.repo
;;
esac
done
}
# Function name: Update system
# Description: Update the system
update_system() {
sudo dnf update -y
}
# Function name: Setup plymouth
# Description: Setup plymouth
setup_plymouth() {
install_package plymouth
sudo plymouth-set-default-theme -R spinner
}
# Packages group definitions
zsh_packages=(
zsh
zsh-autosuggestions
zsh-syntax-highlighting
)
games_packages=(
steam
heroic-games-launcher-bin
)
pipewire_packages=(
pipewire
pipewire-pulseaudio
pipewire-jack-audio-connection-kit
pipewire-alsa
wireplumber
)
cups_packages=(
cups
cups-filters
system-config-printer
)
networkmanager_packages=(
NetworkManager
NetworkManager-openvpn
NetworkManager-pptp
NetworkManager-vpnc
NetworkManager-strongswan
NetworkManager-l2tp
wpa_supplicant
)
bluetooth_packages=(
bluez
bluez-tools
blueman
)
virtualization_packages=(
qemu-kvm
libvirt
libvirt-client
virt-manager
virt-viewer
swtpm
)
containers_packages=(
podman
distrobox
waydroid
lxc
)
thunderbird_packages=(
thunderbird
thunderbird-l10n
)
# Function name: Setup browser
# Description: Setup browser
setup_browser() {
options=(
"Firefox" "Install Firefox" ON
"Chromium" "Install Chromium" OFF
"Brave" "Install Brave" OFF
"Google Chrome" "Install Google Chrome" OFF
"Tor Browser" "Install Tor Browser" OFF
"Mullvad Browser" "Install Mullvad Browser" OFF
"Edge Stable" "Install Edge Stable" OFF
"LibreWolf" "Install LibreWolf" OFF
"Links" "Install Links" OFF
)
selected_browsers=$(whiptail --title "Setup Browser" --checklist \
"Choose the browsers you want to install:" 20 78 9 \
"${options[@]}" 3>&1 1>&2 2>&3)
for browser in $selected_browsers; do
case $browser in
"\"Firefox\"")
install_package firefox
;;
"\"Chromium\"")
install_package chromium
;;
"\"Brave\"")
install_package brave-browser
;;
"\"Google Chrome\"")
install_package google-chrome-stable
;;
"\"Tor Browser\"")
install_package torbrowser-launcher
;;
"\"Mullvad Browser\"")
install_package mullvad-browser
;;
"\"Edge Stable\"")
install_package microsoft-edge-stable
;;
"\"LibreWolf\"")
install_package librewolf
;;
"\"Links\"")
install_package links
;;
esac
done
}
# Function name: Setup U2F
# Description: Setup U2F
setup_u2f() {
install_package pam-u2f
install_package pamu2fcfg
mkdir -p ~/.config/Yubico
pamu2fcfg > ~/.config/Yubico/u2f_keys
sudo authselect select sssd with-pam-u2f
}
# Function name: Setup OpenRGB
# Description: Setup OpenRGB
setup_openrgb() {
install_package openrgb
install_package i2c-tools
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
"Thunderbird" "Install Thunderbird" OFF
)
selected_groups=$(whiptail --title "Install Packages Group" --checklist \
"Choose the packages group you want to install:" 20 78 10 \
"${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
;;
"\"Thunderbird\"")
install_packages thunderbird_packages[@]
;;
esac
done
}
# Function name: Setup flatpak
# Description: Setup flatpak
setup_flatpak() {
if whiptail --title "Setup Flatpak" --yesno "Would you like to setup Flatpak?" 10 60; then
install_package flatpak
sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
fi
}
# function name : setup_kdeconnect
# Description: setup kdeconnect
setup_kdeconnect() {
if whiptail --title "Setup KDE Connect" --yesno "Would you like to setup KDE Connect?" 10 60; then
options=(
"kdeconnect" "Install KDE Connect" OFF
"gsconnect" "Install GSConnect" OFF
)
selected_option=$(whiptail --title "Setup KDE Connect" --radiolist "Choose the package you want to install:" 20 78 2 "${options[@]}" 3>&1 1>&2 2>&3)
case $selected_option in
"\"kdeconnect\"")
install_package kdeconnect
;;
"\"gsconnect\"")
install_package gnome-shell-extension-gsconnect
;;
esac
fi
}
# function name : setup_office_suite
# Description: setup office suite
setup_office_suite() {
options=(
"LibreOffice" "Install LibreOffice" OFF
"OnlyOffice" "Install OnlyOffice" OFF
"WPS Office" "Install WPS Office" OFF
"FreeOffice" "Install FreeOffice" OFF
)
selected_option=$(whiptail --title "Setup Office Suite" --radiolist "Choose the office suite you want to install:" 20 78 4 "${options[@]}" 3>&1 1>&2 2>&3)
case $selected_option in
"\"LibreOffice\"")
install_package libreoffice
;;
"\"OnlyOffice\"")
sudo flatpak install --system flathub org.onlyoffice.desktopeditors -y
;;
"\"WPS Office\"")
sudo flatpak install --system flathub com.wps.Office -y
;;
"\"FreeOffice\"")
install_package softmaker-freeoffice-2024
;;
esac
}
# Main script
update_system
setup_plymouth
setup_browser
install_packages_group
setup_flatpak
setup_kdeconnect
setup_office_suite