From a99918bb395c1f91abd157b0df08db6f3ffc1b20 Mon Sep 17 00:00:00 2001 From: dawood Date: Mon, 25 Aug 2025 22:44:59 +0530 Subject: [PATCH] Update: updates setup.sh to download gum and simplified flow of scripit. --- setup.sh | 292 ++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 191 insertions(+), 101 deletions(-) diff --git a/setup.sh b/setup.sh index 01c06cb..3dd3173 100755 --- a/setup.sh +++ b/setup.sh @@ -1,123 +1,213 @@ #!/bin/bash -## Keyitdev https://github.com/Keyitdev/sddm-astronaut-theme +## SDDM Astronaut Theme Installer +## Based on original by Keyitdev https://github.com/Keyitdev/sddm-astronaut-theme ## Copyright (C) 2022-2025 Keyitdev -## Distributed under the GPLv3+ License https://www.gnu.org/licenses/gpl-3.0.html -red='\033[0;31m' -green='\033[0;32m' -no_color='\033[0m' -date=$(date +%s) +# Script works in Arch, Fedora, Ubuntu. Didn't tried in Void and openSUSE +# +set -euo pipefail -path_to_git_clone="$HOME" +readonly THEME_REPO="https://github.com/Keyitdev/sddm-astronaut-theme.git" +readonly THEME_NAME="sddm-astronaut-theme" +readonly THEMES_DIR="/usr/share/sddm/themes" -install_dependencies(){ - if [ -x "$(command -v pacman)" ]; - then - echo -e "${green}[*] Installing packages using pacman.${no_color}" - sudo pacman --noconfirm --needed -S sddm qt6-svg qt6-virtualkeyboard qt6-multimedia-ffmpeg - elif [ -x "$(command -v xbps-install)" ]; - then - echo -e "${green}[*] Installing packages using xbps-install.${no_color}" - sudo xbps-install sddm qt6-svg qt6-virtualkeyboard qt6-multimedia - elif [ -x "$(command -v dnf)" ]; - then - echo -e "${green}[*] Installing packages using dnf.${no_color}" - sudo dnf install sddm qt6-qtsvg qt6-qtvirtualkeyboard qt6-qtmultimedia - elif [ -x "$(command -v zypper)" ]; - then - echo -e "${green}[*] Installing packages using zypper.${no_color}" - sudo zypper install sddm-qt6 libQt6Svg6 qt6-virtualkeyboard qt6-virtualkeyboard-imports qt6-multimedia qt6-multimedia-imports +readonly -a THEMES=( + "astronaut" "black_hole" "cyberpunk" "hyprland_kath" "jake_the_dog" + "japanese_aesthetic" "pixel_sakura" "pixel_sakura_static" + "post-apocalyptic_hacker" "purple_leaves" +) + +# Logging with gum fallback +info() { + if command -v gum &>/dev/null; then + gum style --foreground="#00ff00" "✓ $*" else - echo -e "${red}[*] FAILED TO INSTALL PACKAGE: Package manager not found. You must manually install dependencies.">&2; + echo -e "\e[32m✓ $*\e[0m" fi } -git_clone(){ - umask 022 - echo -e "${green}[*] Cloning theme to $path_to_git_clone.${no_color}" - [ -d "$path_to_git_clone"/sddm-astronaut-theme ] && sudo mv "$path_to_git_clone"/sddm-astronaut-theme "$path_to_git_clone"/sddm-astronaut-theme_$date && echo -e "${green}[*] Old configs detected in $path_to_git_clone, backing up.${no_color}" - git clone -b master --depth 1 https://github.com/keyitdev/sddm-astronaut-theme.git "$path_to_git_clone"/sddm-astronaut-theme +warn() { + if command -v gum &>/dev/null; then + gum style --foreground="#ffaa00" "⚠ $*" + else + echo -e "\e[33m⚠ $*\e[0m" + fi } -copy_files(){ - umask 022 - echo -e "${green}[*] Coping theme from $path_to_git_clone to /usr/share/sddm/themes/.${no_color}" - [ -d /usr/share/sddm/themes/sddm-astronaut-theme ] && sudo mv /usr/share/sddm/themes/sddm-astronaut-theme /usr/share/sddm/themes/sddm-astronaut-theme_$date && echo -e "${green}[*] Old configs detected in /usr/share/sddm/themes/sddm-astronaut-theme, backing up.${no_color}" - sudo mkdir -p /usr/share/sddm/themes/sddm-astronaut-theme - sudo cp -r "$path_to_git_clone"/sddm-astronaut-theme/* /usr/share/sddm/themes/sddm-astronaut-theme - sudo cp -r /usr/share/sddm/themes/sddm-astronaut-theme/Fonts/* /usr/share/fonts/ - echo -e "${green}[*] Setting up theme.${no_color}" +error() { + if command -v gum &>/dev/null; then + gum style --foreground="#ff0000" "✗ $*" >&2 + else + echo -e "\e[31m✗ $*\e[0m" >&2 + fi +} + +# UI functions +confirm() { + if command -v gum &>/dev/null; then + gum confirm "$1" + else + echo -n "$1 (y/N): "; read -r r; [[ "$r" =~ ^[Yy]$ ]] + fi +} + +choose() { + if command -v gum &>/dev/null; then + gum choose "$@" + else + select opt in "$@"; do [[ -n "$opt" ]] && { echo "$opt"; break; }; done + fi +} + +spin() { + local title="$1"; shift + if command -v gum &>/dev/null; then + gum spin --spinner="dot" --title="$title" -- "$@" + else + echo "$title"; "$@" + fi +} + +# Install gum if missing +install_gum() { + local mgr=$(for m in pacman xbps dnf zypper apt; do command -v $m &>/dev/null && { echo ${m%%-*}; break; }; done) + + case $mgr in + pacman) sudo pacman -S gum ;; + dnf) sudo dnf install -y gum ;; + zypper) sudo zypper install -y gum ;; + xbps) sudo xbps-install -y gum ;; + # refrence https://github.com/basecamp/omakub/issues/222 + apt) + sudo mkdir -p /etc/apt/keyrings + curl -fsSL https://repo.charm.sh/apt/gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/charm.gpg + echo "deb [signed-by=/etc/apt/keyrings/charm.gpg] https://repo.charm.sh/apt/ * *" | sudo tee /etc/apt/sources.list.d/charm.list + sudo apt update && sudo apt install -y gum ;; + *) error "Cannot install gum automatically"; return 1 ;; + esac +} + +# Check and install gum +check_gum() { + if ! command -v gum &>/dev/null; then + warn "gum not found - provides better UI experience" + if confirm "Install gum?"; then + install_gum && { info "Restarting with gum..."; exec "$0" "$@"; } || warn "Using fallback UI" + fi + fi +} + +# Install dependencies +install_deps() { + local mgr=$(for m in pacman xbps dnf zypper apt; do command -v $m &>/dev/null && { echo ${m%%-*}; break; }; done) + info "Package manager: $mgr" + + case $mgr in + pacman) sudo pacman --needed -S sddm qt6-svg qt6-virtualkeyboard qt6-multimedia-ffmpeg ;; + xbps) sudo xbps-install -y sddm qt6-svg qt6-virtualkeyboard qt6-multimedia ;; + dnf) sudo dnf install -y sddm qt6-qtsvg qt6-qtvirtualkeyboard qt6-qtmultimedia ;; + zypper) sudo zypper install -y sddm libQt6Svg6 qt6-virtualkeyboard qt6-multimedia ;; + apt) sudo apt update && sudo apt install -y sddm qt6-svg-dev qml6-module-qtquick-virtualkeyboard qt6-multimedia-dev ;; + *) error "Unsupported package manager"; return 1 ;; + esac + info "Dependencies installed" +} + +# Clone repository +clone_repo() { + local path="$HOME/$THEME_NAME" + [[ -d "$path" ]] && rm -rf "$path" + spin "Cloning repository..." git clone -b master --depth 1 "$THEME_REPO" "$path" + info "Repository cloned" +} + +# Install theme +install_theme() { + local src="$HOME/$THEME_NAME" + local dst="$THEMES_DIR/$THEME_NAME" + + [[ ! -d "$src" ]] && { error "Clone repository first"; return 1; } + + # Backup and copy + [[ -d "$dst" ]] && sudo mv "$dst" "${dst}_$(date +%s)" + sudo mkdir -p "$dst" + spin "Installing theme files..." sudo cp -r "$src"/* "$dst"/ + + # Install fonts + [[ -d "$dst/Fonts" ]] && spin "Installing fonts..." sudo cp -r "$dst/Fonts"/* /usr/share/fonts/ + + # Configure SDDM echo "[Theme] - Current=sddm-astronaut-theme" | sudo tee /etc/sddm.conf + Current=$THEME_NAME" | sudo tee /etc/sddm.conf >/dev/null + sudo mkdir -p /etc/sddm.conf.d echo "[General] - InputMethod=qtvirtualkeyboard" | sudo tee /etc/sddm.conf.d/virtualkbd.conf + InputMethod=qtvirtualkeyboard" | sudo tee /etc/sddm.conf.d/virtualkbd.conf >/dev/null + + info "Theme installed and configured" } -select_theme(){ - path_to_metadata="/usr/share/sddm/themes/sddm-astronaut-theme/metadata.desktop" - text="ConfigFile=Themes/" +# Select theme variant +select_theme() { + local metadata="$THEMES_DIR/$THEME_NAME/metadata.desktop" + [[ ! -f "$metadata" ]] && { error "Install theme first"; return 1; } - line=$(grep $text "$path_to_metadata") - - themes="astronaut black_hole cyberpunk hyprland_kath jake_the_dog japanese_aesthetic pixel_sakura pixel_sakura_static post-apocalyptic_hacker purple_leaves" - - echo -e "${green}[*] Select theme (enter number e.g. astronaut - 1).${no_color}" - echo -e "${green}[*] 0. Other (choose if you created your own theme)." - echo -e "${green}[*] 1. Astronaut 2. Black hole${no_color}" - echo -e "${green}[*] 3. Cyberpunk 4. Hyprland Kath (animated)${no_color}" - echo -e "${green}[*] 5. Jake the dog (animated) 6. Japanese aesthetic${no_color}" - echo -e "${green}[*] 7. Pixel sakura (animated) 8. Pixel sakura (static)${no_color}" - echo -e "${green}[*] 9. Post-apocalyptic hacker 10. Purple leaves${no_color}" - read -p "[*] Your choice: " new_number - - if [ "$new_number" -eq 0 ] 2>/dev/null;then - echo -e "${green}[*] Enter name of the config file (without .conf).${no_color}" - read -p "[*] Theme name: " answer - selected_theme="$answer" - elif [ "$new_number" -ge 1 ] 2>/dev/null && [ "$new_number" -le 10 ] 2>/dev/null; then - set -- $themes - selected_theme=$(echo "$@" | cut -d ' ' -f $(("new_number"))) - echo -e "${green}[*] You selected: $selected_theme ${no_color}" - else - echo -e "${red}[*] Error: invalid number or input.${no_color}" - exit - fi - - modified_line="$text$selected_theme.conf" - - sudo sed -i "s|^$text.*|$modified_line|" $path_to_metadata - echo -e "${green}[*] Changed: $line -> $modified_line${no_color}" + local theme=$(choose "${THEMES[@]}") + sudo sed -i "s|^ConfigFile=.*|ConfigFile=Themes/${theme}.conf|" "$metadata" + info "Selected: $theme" } -enable_sddm(){ - systemctl disable display-manager.service - systemctl enable sddm.service +# Enable SDDM +enable_sddm() { + command -v systemctl &>/dev/null || { error "systemctl not found"; return 1; } + + sudo systemctl disable display-manager.service 2>/dev/null || true + sudo systemctl enable sddm.service + info "SDDM enabled - reboot required" } -while true; do - clear - echo -e "${green}sddm-astronaut-theme made by Keyitdev${no_color}" - echo -e "${green}[*] Choose option.${no_color}" - echo -e "1. All of the below." - echo -e "2. Install dependencies with package manager." - echo -e "3. Clone theme from github.com to $path_to_git_clone." - echo -e "4. Copy theme from $path_to_git_clone to /usr/share/sddm/themes/." - echo -e "5. Select theme (/usr/share/sddm/themes/)." - echo -e "6. Preview the set theme (/usr/share/sddm/themes/)." - echo -e "7. Disable other display managers and enable SDDM (systemd)." - echo -e "8. Exit." - read -p "[*] Your choice: " x - case $x in - [1]* ) install_dependencies; git_clone; copy_files; select_theme; enable_sddm; exit;; - [2]* ) install_dependencies; exit;; - [3]* ) git_clone; exit;; - [4]* ) copy_files; exit;; - [5]* ) select_theme; exit;; - [6]* ) sddm-greeter-qt6 --test-mode --theme /usr/share/sddm/themes/sddm-astronaut-theme/; exit;; - [7]* ) enable_sddm; exit;; - [8]* ) exit;; - * ) echo -e "${red}[*] Error: invalid number or input.${no_color}";; - esac -done +# Main menu +main() { + [[ $EUID -eq 0 ]] && { error "Don't run as root"; exit 1; } + command -v git &>/dev/null || { error "git required"; exit 1; } + + check_gum + + while true; do + echo + if command -v gum &>/dev/null; then + gum style --foreground="#00ffff" "🚀 SDDM Astronaut Theme Installer" + else + echo -e "\e[36m🚀 SDDM Astronaut Theme Installer\e[0m" + fi + + local choice=$(choose \ + "🚀 Complete Installation" \ + "📦 Install Dependencies" \ + "📥 Clone Repository" \ + "📂 Install Theme" \ + "🎨 Select Theme Variant" \ + "⚙️ Enable SDDM Service" \ + "❌ Exit") + + case "$choice" in + "🚀 Complete Installation") install_deps && clone_repo && install_theme && select_theme && enable_sddm ;; + "📦 Install Dependencies") install_deps ;; + "📥 Clone Repository") clone_repo ;; + "📂 Install Theme") install_theme ;; + "🎨 Select Theme Variant") select_theme ;; + "⚙️ Enable SDDM Service") enable_sddm ;; + "❌ Exit") info "Goodbye!"; exit 0 ;; + esac + + echo; if command -v gum &>/dev/null; then + gum input --placeholder="Press Enter to continue..." + else + echo -n "Press Enter..."; read -r + fi + done +} + +trap 'echo; info "Cancelled"; exit 130' INT TERM +main "$@"