feat: automation setup completed

This commit is contained in:
hesam-init 2024-11-25 22:37:12 +03:30
parent ea20edb9a6
commit 3fb559dda8

223
setup.sh
View file

@ -10,45 +10,40 @@ GREEN='\033[0;32m'
BLUE='\033[0;34m' BLUE='\033[0;34m'
NC='\033[0m' NC='\033[0m'
declare -a ORDER=("VOID_REPOS" "CONTAINER_PACKAGES" "BASE_PACKAGES" "DEVEL_PACKAGES" "AMD_DRIVERS" "HYPRLAND_PACKAGES" "SYSTEM_APPS") declare -a ORDERS_LIST=("CONTAINER_PACKAGES" "BASE_PACKAGES" "DEVEL_PACKAGES" "AMD_DRIVERS" "HYPRLAND_PACKAGES" "SYSTEM_APPS")
declare -A PACKAGES=( declare -A PACKAGES_LIST=(
["VOID_REPOS"]="void-repo-multilib void-repo-nonfree"
["CONTAINER_PACKAGES"]="podman podman-compose catatonit" ["CONTAINER_PACKAGES"]="podman podman-compose catatonit"
["BASE_PACKAGES"]="inetutils v4l2loopback bind-utils zellij bat dust aria2 fzf neofetch bat zsh fish-shell brightnessctl bluez cronie git stow eza dbus seatd elogind polkit NetworkManager gnome-keyring polkit-gnome pipewire wireplumber libspa-bluetooth inotify-tools xorg gnome-keyring polkit-gnome mtpfs ffmpeg libnotify" ["BASE_PACKAGES"]="inetutils v4l2loopback bind-utils zellij bat dust aria2 fzf neofetch bat zsh fish-shell brightnessctl bluez cronie git stow eza dbus seatd elogind polkit NetworkManager gnome-keyring polkit-gnome pipewire wireplumber libspa-bluetooth inotify-tools xorg gnome-keyring polkit-gnome mtpfs ffmpeg libnotify"
["DEVEL_PACKAGES"]="glib pango-devel gdk-pixbuf-devel libdbusmenu-gtk3-devel glib-devel gtk+3-devel gtk-layer-shell-devel base-devel startup-notification-devel cairo-devel xcb-util-devel xcb-util-cursor-devel xcb-util-xrm-devel xcb-util-wm-devel" ["DEVEL_PACKAGES"]="glib pango-devel gdk-pixbuf-devel libdbusmenu-gtk3-devel glib-devel gtk+3-devel gtk-layer-shell-devel base-devel startup-notification-devel cairo-devel xcb-util-devel xcb-util-cursor-devel xcb-util-xrm-devel xcb-util-wm-devel"
["AMD_DRIVERS"]="opencv Vulkan-Headers Vulkan-Tools Vulkan-ValidationLayers-32bit mesa-vulkan-radeon mesa-vulkan-radeon-32bit vulkan-loader vulkan-loader-32bit libspa-vulkan libspa-vulkan-32bit amdvlk mesa-dri mesa-vaapi" ["AMD_DRIVERS"]="opencv Vulkan-Headers Vulkan-Tools Vulkan-ValidationLayers-32bit mesa-vulkan-radeon mesa-vulkan-radeon-32bit vulkan-loader vulkan-loader-32bit libspa-vulkan libspa-vulkan-32bit amdvlk mesa-dri mesa-vaapi"
["HYPRLAND_PACKAGES"]="noto-fonts-emoji ddcutil socat eww nerd-fonts-symbols-ttf Waybar avizo dunst swaybg mpvpaper grim jq slurp cliphist wl-clipboard swayidle pavucontrol nemo eog pavucontrol evince xorg-server-xwayland xdg-desktop-portal-gtk xdg-desktop-portal-wlr xdg-utils xdg-user-dirs xdg-user-dirs-gtk qt5-x11extras qt5-wayland qt6-wayland" ["HYPRLAND_PACKAGES"]="noto-fonts-emoji socat eww nerd-fonts-symbols-ttf Waybar avizo dunst swaybg mpvpaper grim jq slurp cliphist wl-clipboard swayidle pavucontrol nemo eog pavucontrol evince xorg-server-xwayland xdg-desktop-portal-gtk xdg-desktop-portal-wlr xdg-utils xdg-user-dirs xdg-user-dirs-gtk qt5-x11extras qt5-wayland qt6-wayland"
["SYSTEM_APPS"]="alacritty octoxbps blueman wifish wpa_gui glow" ["SYSTEM_APPS"]="alacritty octoxbps blueman wifish wpa_gui glow"
) )
declare -a SERVICES=( declare -a SERVICES_LIST=(
"dbus" "dbus"
"crond"
"seatd" "seatd"
"elogind" "elogind"
"NetworkManager"
"polkitd" "polkitd"
"bluetoothd" "bluetoothd"
"crond" "NetworkManager"
) )
trap cleanup SIGINT SIGTERM declare -a GROUPS_LIST=(
"_seatd"
"bluetooth"
)
cleanup() { trap exit_trap SIGINT SIGTERM
exit_trap() {
echo -e "\n\n${RED}[!]${NC} Installation interrupted. Cleaning up..." echo -e "\n\n${RED}[!]${NC} Installation interrupted. Cleaning up..."
exit 0
}
log() { # pkill -P $$ 2>/dev/null
echo -e "${GREEN}[+]${NC} $1"
}
error() { exit 1
echo -e "${RED}[!]${NC} $1"
}
new_line() {
echo -e "\n"
} }
try() { try() {
@ -57,11 +52,22 @@ try() {
if ! eval "$@" &>"$log_file"; then if ! eval "$@" &>"$log_file"; then
echo -e "${RED}[!]${NC} Failed: $*" echo -e "${RED}[!]${NC} Failed: $*"
cat "$log_file" cat "$log_file"
rm -f "$log_file"
exit 1
fi fi
rm -f "$log_file" rm -f "$log_file"
} }
log() {
echo -e "\n${GREEN}[+]${NC} $1"
}
error() {
echo -e "${RED}[!]${NC} $1"
}
params_required() { params_required() {
local param_name="$1" local param_name="$1"
local param_value="$2" local param_value="$2"
@ -112,8 +118,7 @@ update_xbps() {
log "Update xbps package manager ..." log "Update xbps package manager ..."
if ! ask_prompt "Do you want to update the package manager (xbps)?"; then if ! ask_prompt "Do you want to update the package manager (xbps)?"; then
error "Update cancelled..." error "Action cancelled..."
new_line
return 0 return 0
fi fi
@ -125,8 +130,7 @@ update_packages() {
log "Update all packages ..." log "Update all packages ..."
if ! ask_prompt "Do you want to perform a full system update?"; then if ! ask_prompt "Do you want to perform a full system update?"; then
error "System update cancelled..." error "Action cancelled..."
new_line
return 0 return 0
fi fi
@ -134,114 +138,145 @@ update_packages() {
sudo xbps-install -Syu sudo xbps-install -Syu
} }
install_packages() { setup_packages() {
local packages_list="" local packages_list=""
for key in "${ORDER[@]}"; do for order in "${ORDERS_LIST[@]}"; do
packages_list+="${PACKAGES["$key"]}" packages_list+="${PACKAGES_LIST["$order"]} "
done done
log "Following package groups will be installed:" log "Following package groups will be installed:"
echo "$packages_list" echo -e "$packages_list \n"
if ! ask_prompt "Do you want to continue with installation?"; then if ! ask_prompt "Do you want to continue with installation?"; then
echo "Installation cancelled." error "Action cancelled..."
return 0 return 0
fi fi
for key in "${ORDER[@]}"; do log "Installing packages..."
new_line
log "Installing $key packages..."
if ! sudo xbps-install -Sy ${PACKAGES["$key"]}; then if ! sudo xbps-install -Sy void-repo-multilib void-repo-nonfree; then
echo "Failed to install $key packages. Exiting..." exit_trap
fi fi
done
}
assign_groups() { if ! sudo xbps-install -Sy ${packages_list}; then
log "Add user to needed groups" exit_trap
sudo usermod -a $USER -G _seatd
sudo usermod -a $USER -G bluetooth
check "$?" "Add user to needed groups"
log "User added to needed groups"
}
enable_services() {
log "Enable services"
for service in "${SERVICES[@]}"; do
local target_service="/etc/sv/$service"
if [ -d "/var/service/$service" ]; then
echo "Service "$target_service" already exists, skipping"
elif [ ! -d "$target_service" ]; then
echo "Service "$target_service" is not installed"
else
sudo ln -s "$target_service" /var/service
echo "Service $service enabled"
fi
done
log "Services enabled"
}
disable_grub_menu() {
if [ $DISABLE_GRUB_MENU = true ]; then
log "Disable grub menu"
echo 'GRUB_TIMEOUT=0' | sudo tee -a /etc/default/grub
echo 'GRUB_TIMEOUT_STYLE=hidden' | sudo tee -a /etc/default/grub
echo 'GRUB_CMDLINE_LINUX_DEFAULT="loglevel=1 quiet splash"' | sudo tee -a /etc/default/grub
sudo update-grub
check "$?" "Disable grub menu"
log "Grub menu disabled"
else
log "Skipping grub menu disable"
fi fi
} }
install_ttf_fonts() { setup_groups() {
sudo cp $TTF_FONTS_DIR/* /usr/share/fonts/TTF log "Add user to needed groups"
sudo fc-cache -f -v
log "Fonts installed successfully!" if ! ask_prompt "Do you want to add user to groups"; then
error "Action cancelled..."
return 0
fi
for group in "${GROUPS_LIST[@]}"; do
sudo usermod -a "$USER" -G "$group"
echo "$group"
done
} }
setup_services() {
log "Enable services"
if ! ask_prompt "Do you want to enable required services?"; then
error "Action cancelled..."
return 0
fi
for service in "${SERVICES_LIST[@]}"; do
local target_service="/etc/sv/$service"
if [ -d "/var/service/$service" ]; then
echo "Service $service is already enabled, skipping..."
elif [ ! -d "$target_service" ]; then
error "Service $service is not installed, skipping..."
else
try "sudo ln -s $target_service /var/service"
echo "Service $service enabled"
fi
done
}
setup_fonts() {
log "Install TTF fonts"
if ! ask_prompt "Do you want to install TTF fonts?"; then
error "Action cancelled..."
return 0
fi
if [ -d "$TTF_FONTS_DIR" ]; then
sudo cp "$TTF_FONTS_DIR"/* /usr/share/fonts/TTF
sudo fc-cache -f -v
else
error "Font directory $TTF_FONTS_DIR is either empty or does not exist."
return 0
fi
}
# setup_grub() {
# if [ $DISABLE_GRUB_MENU = true ]; then
# log "Disable grub menu"
# echo 'GRUB_TIMEOUT=0' | sudo tee -a /etc/default/grub
# echo 'GRUB_TIMEOUT_STYLE=hidden' | sudo tee -a /etc/default/grub
# echo 'GRUB_CMDLINE_LINUX_DEFAULT="loglevel=1 quiet splash"' | sudo tee -a /etc/default/grub
# sudo update-grub
# check "$?" "Disable grub menu"
# log "Grub menu disabled"
# else
# log "Skipping grub menu disable"
# fi
# }
while getopts "sfh" opt; do while getopts "sfh" opt; do
case $opt in case $opt in
s) s)
if [ "$(id -u)" != 0 ]; then if [ "$(id -u)" != 0 ]; then
echo "Please run the script with sudo." echo "Please run the script with sudo."
exit 1 exit 1
fi fi
clear
update_xbps update_xbps
update_packages update_packages
install_packages setup_packages
setup_groups
echo "continue" setup_services
setup_fonts
# clear_pkgs_cache
# add_user_to_groups
# enable_services
# enable_pipewire
# disable_grub_menu
log "Setup is done, reboot your system" log "Setup is done, reboot your system"
;; ;;
f) f)
check_sudo if [ "$(id -u)" != 0 ]; then
echo "Please run the script with sudo."
install_ttf_fonts exit 1
fi
clear
setup_fonts
log "Fonts installed"
;; ;;
h) h)
display_help display_help
exit 0
exit 1
;; ;;
esac esac
done done
# if [[ $# -eq 0 ]]; then if [[ $# -eq 0 ]]; then
# display_help display_help
# fi fi