From 36797509b3859f0c054fe1ac52d105b7125bcbd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B0=D1=88=D0=B5=20=D0=98=D0=BC=D1=8F?= Date: Sun, 20 Jul 2025 13:48:13 +0300 Subject: [PATCH] update --- install.sh | 798 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 798 insertions(+) create mode 100755 install.sh diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..4f1c99f --- /dev/null +++ b/install.sh @@ -0,0 +1,798 @@ +#!/bin/bash + +# 🎨 SDDM Theme Collection "sm1tee" - Установщик +# Made with ❤️ by Sm1tee + +# Цвета для красивого вывода +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +PURPLE='\033[0;35m' +CYAN='\033[0;36m' +WHITE='\033[1;37m' +NC='\033[0m' # No Color + +# Эмодзи +CHECK="✅" +CROSS="❌" +INFO="ℹ️" +WARNING="⚠️" +QUESTION="❓" + +# Глобальные переменные для отчета +ACTIONS_PERFORMED=() +ACTIONS_SKIPPED=() +BACKUP_FILES=() +INSTALLED_PACKAGES=() +CHECK_ONLY=false + +# Функция для красивого заголовка +print_header() { + clear + echo -e "${PURPLE}╔══════════════════════════════════════════════════════════════╗${NC}" + echo -e "${PURPLE}║${WHITE} 🎨 SDDM Theme sm1tee ${PURPLE}║${NC}" + echo -e "${PURPLE}║${WHITE} Установщик ${PURPLE}║${NC}" + echo -e "${PURPLE}╚══════════════════════════════════════════════════════════════╝${NC}" + echo "" +} + +# Функция для заголовка шага +print_step_header() { + local step_title="$1" + echo "" + echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" + echo -e "${WHITE}🔹 $step_title${NC}" + echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" + echo "" +} + +# Функция для запроса подтверждения +ask_confirmation() { + local action="$1" + local details="$2" + local default="${3:-n}" + + echo -e "${CYAN}${QUESTION} ${action}${NC}" + if [ -n "$details" ]; then + echo -e "${WHITE}$details${NC}" + fi + echo "" + + local prompt="Выполнить это действие? [y/N]: " + if [ "$default" = "y" ]; then + prompt="Выполнить это действие? [Y/n]: " + fi + + while true; do + read -p "$prompt" choice + case $choice in + [Yy]* ) return 0 ;; + [Nn]* ) return 1 ;; + "" ) + if [ "$default" = "y" ]; then + return 0 + else + return 1 + fi + ;; + * ) echo "Пожалуйста, ответьте y (да) или n (нет)." ;; + esac + done +} + +# Функция для добавления в отчет +add_to_report() { + local action="$1" + local status="$2" + + case $status in + "performed") + ACTIONS_PERFORMED+=("$action") + ;; + "skipped") + ACTIONS_SKIPPED+=("$action") + ;; + esac +} + +# Функция для определения дистрибутива +detect_distro() { + print_step_header "ШАГ 1: Определение системы " + + echo -e "${BLUE}Определяю ваш дистрибутив Linux для выбора правильных команд установки...${NC}" + echo "" + + if [ -f /etc/os-release ]; then + . /etc/os-release + DISTRO=$ID + echo -e "${GREEN}${CHECK} Обнаружен дистрибутив: $DISTRO${NC}" + return 0 + else + echo -e "${RED}${CROSS} Не удалось определить дистрибутив Linux${NC}" + return 1 + fi +} + +# Функция для проверки зависимостей +check_system_dependencies() { + echo -e "${BLUE}Проверяю наличие необходимых системных утилит...${NC}" + echo "" + + local missing_deps=() + command -v git >/dev/null 2>&1 || missing_deps+=("git") + command -v sudo >/dev/null 2>&1 || missing_deps+=("sudo") + + if [ ${#missing_deps[@]} -ne 0 ]; then + echo -e "${RED}${CROSS} Отсутствуют необходимые зависимости: ${missing_deps[*]}${NC}" + echo -e "${YELLOW}${WARNING} Установите их и запустите скрипт снова${NC}" + return 1 + fi + + echo -e "${GREEN}${CHECK} Все системные зависимости найдены${NC}" + return 0 +} + +# Функция для установки зависимостей +install_dependencies() { + print_step_header "ШАГ 2: Установка зависимостей SDDM " + + local packages="" + local install_cmd="" + local explanation="" + + case $DISTRO in + "arch"|"manjaro"|"endeavouros") + packages="sddm qt6-svg qt6-virtualkeyboard qt6-multimedia-ffmpeg" + install_cmd="sudo pacman -S --needed $packages" + explanation="Эти пакеты нужны для работы SDDM с темами Qt6: +• sddm - менеджер дисплея (экран входа) +• qt6-svg - поддержка SVG иконок в интерфейсе +• qt6-virtualkeyboard - виртуальная клавиатура на экране +• qt6-multimedia-ffmpeg - воспроизведение видео фонов" + ;; + "fedora") + packages="sddm qt6-qtsvg qt6-qtvirtualkeyboard qt6-qtmultimedia" + install_cmd="sudo dnf install $packages" + explanation="Эти пакеты нужны для работы SDDM с темами Qt6: +• sddm - менеджер дисплея (экран входа) +• qt6-qtsvg - поддержка SVG иконок в интерфейсе +• qt6-qtvirtualkeyboard - виртуальная клавиатура на экране +• qt6-qtmultimedia - воспроизведение видео фонов" + ;; + "opensuse"|"opensuse-leap"|"opensuse-tumbleweed") + packages="sddm-qt6 libQt6Svg6 qt6-virtualkeyboard qt6-virtualkeyboard-imports qt6-multimedia qt6-multimedia-imports" + install_cmd="sudo zypper install $packages" + explanation="Эти пакеты нужны для работы SDDM с темами Qt6: +• sddm-qt6 - менеджер дисплея с поддержкой Qt6 +• libQt6Svg6 - библиотека для SVG иконок +• qt6-virtualkeyboard - виртуальная клавиатура +• qt6-multimedia - воспроизведение видео фонов" + ;; + "ubuntu"|"debian"|"pop"|"elementary"|"linuxmint") + packages="sddm qt6-svg-dev qt6-virtualkeyboard-dev qt6-multimedia-dev" + install_cmd="sudo apt update && sudo apt install $packages" + explanation="Эти пакеты нужны для работы SDDM с темами Qt6: +• sddm - менеджер дисплея (экран входа) +• qt6-svg-dev - поддержка SVG иконок в интерфейсе +• qt6-virtualkeyboard-dev - виртуальная клавиатура на экране +• qt6-multimedia-dev - воспроизведение видео фонов" + ;; + "void") + packages="sddm qt6-svg qt6-virtualkeyboard qt6-multimedia" + install_cmd="sudo xbps-install $packages" + explanation="Эти пакеты нужны для работы SDDM с темами Qt6: +• sddm - менеджер дисплея (экран входа) +• qt6-svg - поддержка SVG иконок в интерфейсе +• qt6-virtualkeyboard - виртуальная клавиатура на экране +• qt6-multimedia - воспроизведение видео фонов" + ;; + *) + echo -e "${YELLOW}${WARNING} Неизвестный дистрибутив: $DISTRO${NC}" + echo -e "${BLUE}Необходимо установить следующие пакеты вручную:${NC}" + echo "• sddm - менеджер дисплея" + echo "• qt6-svg - поддержка SVG иконок" + echo "• qt6-virtualkeyboard - виртуальная клавиатура" + echo "• qt6-multimedia - воспроизведение видео" + echo "" + + if ask_confirmation "Продолжить установку?" "Предполагается, что зависимости уже установлены"; then + add_to_report "Установка зависимостей (пропущена - неизвестный дистрибутив)" "skipped" + return 0 + else + add_to_report "Установка зависимостей" "skipped" + return 1 + fi + ;; + esac + + echo -e "${explanation}" + echo "" + echo -e "${YELLOW}Команда для установки:${NC} $install_cmd" + echo "" + + if ask_confirmation "Установить эти пакеты?" "Без них тема не будет работать корректно"; then + echo -e "${BLUE}${INFO} Выполняется установка...${NC}" + if eval "$install_cmd"; then + echo -e "${GREEN}${CHECK} Зависимости успешно установлены${NC}" + INSTALLED_PACKAGES+=($packages) + add_to_report "Установка зависимостей: $packages" "performed" + return 0 + else + echo -e "${RED}${CROSS} Ошибка при установке зависимостей${NC}" + return 1 + fi + else + echo -e "${YELLOW}${WARNING} Установка зависимостей отклонена${NC}" + echo -e "${YELLOW}${WARNING} Тема может не работать без необходимых пакетов${NC}" + add_to_report "Установка зависимостей" "skipped" + return 1 + fi +} + +# Функция для выбора типа установки +choose_installation_type() { + print_step_header "ШАГ 3: Выбор типа установки " + + echo -e "${BLUE}Выберите как вы хотите установить темы:${NC}" + echo "" + echo -e "${CYAN}1)${NC} ${GREEN}Полная установка${NC} - все 25+ тем сразу" + echo -e " Плюсы: все темы доступны, можно легко переключаться" + echo -e " Минусы: размер загрузки будет определен при скачивании" + echo "" + echo -e "${CYAN}2)${NC} ${YELLOW}Установка одной темы${NC} - только выбранная тема" + echo -e " Плюсы: быстрая загрузка, экономия места и трафика" + echo -e " Минусы: только одна тема, для смены нужна переустановка" + echo "" + + while true; do + read -p "Ваш выбор (1-2): " install_choice + case $install_choice in + 1) + INSTALL_TYPE="full" + echo -e "${GREEN}${CHECK} Выбрана полная установка${NC}" + break + ;; + 2) + INSTALL_TYPE="single" + echo -e "${GREEN}${CHECK} Выбрана установка одной темы${NC}" + break + ;; + *) + echo -e "${RED}${CROSS} Неверный выбор! Введите 1 или 2${NC}" + ;; + esac + done +} + +# Функция для показа доступных тем +show_available_themes() { + echo -e "${WHITE}Доступные темы:${NC}" + echo "" + echo "apocalypse, bones, demon, explosion, gate, gate2, wizard," + echo "samurai, samurai2, samurai3, samurai4, solder, warrior," + echo "house, house2, house3, house4, house5, tree, window, window2, calmness," + echo "space, space2, witcher, harry" + echo "" +} + +# Функция для загрузки репозитория +download_repository() { + print_step_header "ШАГ 4: Загрузка всех тем с GitHub " + + local repo_url="https://github.com/Sm1tee/sddm-theme.git" + local target_dir="sddm-theme" + + echo -e "${BLUE}Буду загружать все темы из репозитория GitHub.${NC}" + echo -e "Репозиторий: $repo_url" + echo -e "Папка для загрузки: $target_dir" + echo "" + echo -e "${YELLOW}Команда для загрузки:${NC} git clone $repo_url $target_dir" + echo "" + + if [ -d "$target_dir" ]; then + echo -e "${YELLOW}${WARNING} Папка $target_dir уже существует${NC}" + echo -e "${YELLOW}Команда для удаления:${NC} rm -rf $target_dir" + if ask_confirmation "Удалить существующую папку?" "Все содержимое будет потеряно"; then + rm -rf "$target_dir" + add_to_report "Удаление существующей папки $target_dir" "performed" + else + echo -e "${RED}${CROSS} Невозможно продолжить с существующей папкой${NC}" + return 1 + fi + fi + + if ask_confirmation "Загрузить все темы?" "Будет выполнено клонирование репозитория"; then + echo -e "${BLUE}${INFO} Загрузка репозитория...${NC}" + if git clone "$repo_url" "$target_dir"; then + echo -e "${GREEN}${CHECK} Репозиторий успешно загружен${NC}" + add_to_report "Загрузка репозитория" "performed" + return 0 + else + echo -e "${RED}${CROSS} Ошибка при загрузке репозитория${NC}" + return 1 + fi + else + add_to_report "Загрузка репозитория" "skipped" + return 1 + fi +} + +# Функция для загрузки одной темы +download_single_theme() { + local theme_name="$1" + print_step_header "ШАГ 4: Загрузка темы '$theme_name' с GitHub " + + local repo_url="https://github.com/Sm1tee/sddm-theme.git" + local target_dir="sddm-theme" + + echo -e "${BLUE}Буду загружать только файлы для темы '$theme_name'.${NC}" + echo -e "Это сэкономит время и трафик, загрузив только нужные файлы." + echo "" + echo -e "${YELLOW}Команды которые будут выполнены:${NC}" + echo -e "git clone --filter=blob:none --sparse $repo_url $target_dir" + echo -e "git sparse-checkout set --no-cone [файлы темы $theme_name]" + echo "" + + if [ -d "$target_dir" ]; then + echo -e "${YELLOW}${WARNING} Папка $target_dir уже существует${NC}" + echo -e "${YELLOW}Команда для удаления:${NC} rm -rf $target_dir" + if ask_confirmation "Удалить существующую папку?" "Все содержимое будет потеряно"; then + rm -rf "$target_dir" + add_to_report "Удаление существующей папки $target_dir" "performed" + else + echo -e "${RED}${CROSS} Невозможно продолжить с существующей папкой${NC}" + return 1 + fi + fi + + if ask_confirmation "Загрузить тему '$theme_name'?" "Будет выполнено частичное клонирование"; then + echo -e "${BLUE}${INFO} Создание структуры репозитория...${NC}" + if git clone --filter=blob:none --sparse "$repo_url" "$target_dir"; then + cd "$target_dir" + + echo -e "${BLUE}${INFO} Настройка загрузки файлов темы...${NC}" + git sparse-checkout set --no-cone \ + "/README.md" \ + "themes/sm1tee/components/" \ + "themes/sm1tee/fonts/" \ + "themes/sm1tee/icons/" \ + "/themes/sm1tee/Main.qml" \ + "/themes/sm1tee/metadata.desktop" \ + "/themes/sm1tee/qmldir" \ + "/themes/sm1tee/configs/${theme_name}.conf" \ + "/themes/sm1tee/backgrounds/${theme_name}.mp4" \ + "/themes/sm1tee/backgrounds/${theme_name}.png" + + # Проверяем существование файлов темы + if [ ! -f "themes/sm1tee/configs/${theme_name}.conf" ]; then + echo -e "${RED}${CROSS} Тема '$theme_name' не найдена в репозитории!${NC}" + cd .. + return 1 + fi + + echo -e "${GREEN}${CHECK} Тема '$theme_name' успешно загружена${NC}" + add_to_report "Загрузка темы $theme_name" "performed" + cd .. + return 0 + else + echo -e "${RED}${CROSS} Ошибка при загрузке темы${NC}" + return 1 + fi + else + add_to_report "Загрузка темы $theme_name" "skipped" + return 1 + fi +} + +# Функция для копирования файлов темы +install_theme_files() { + print_step_header "ШАГ 5: Установка файлов темы в систему " + + local source_dir="sddm-theme/themes/sm1tee" + local target_dir="/usr/share/sddm/themes/sm1tee" + + echo -e "${BLUE}Буду копировать файлы темы в системную папку SDDM.${NC}" + echo -e "Откуда: $source_dir" + echo -e "Куда: $target_dir" + echo "" + echo -e "${YELLOW}Команда для копирования:${NC} sudo cp -r $source_dir $target_dir" + echo "" + + if [ ! -d "$source_dir" ]; then + echo -e "${RED}${CROSS} Исходная папка темы не найдена: $source_dir${NC}" + return 1 + fi + + local warning_text="Требуются права администратора" + if [ -d "$target_dir" ]; then + warning_text="ВНИМАНИЕ: Папка $target_dir уже существует и будет перезаписана. Требуются права администратора" + fi + + if ask_confirmation "Скопировать файлы темы?" "$warning_text"; then + if [ -d "$target_dir" ]; then + if sudo rm -rf "$target_dir"; then + add_to_report "Удаление старой темы" "performed" + else + echo -e "${RED}${CROSS} Ошибка при удалении старой темы${NC}" + return 1 + fi + fi + echo -e "${BLUE}${INFO} Копирование файлов темы...${NC}" + if sudo cp -r "$source_dir" "$target_dir"; then + echo -e "${GREEN}${CHECK} Файлы темы успешно установлены${NC}" + add_to_report "Установка файлов темы в $target_dir" "performed" + return 0 + else + echo -e "${RED}${CROSS} Ошибка при копировании файлов темы${NC}" + return 1 + fi + else + add_to_report "Установка файлов темы" "skipped" + return 1 + fi +} + +# Функция для установки шрифтов +install_fonts() { + print_step_header "ШАГ 6: Установка шрифтов темы " + + local source_dir="sddm-theme/themes/sm1tee/fonts" + local target_dir="/usr/share/fonts" + + if [ ! -d "$source_dir" ]; then + echo -e "${YELLOW}${WARNING} Папка шрифтов не найдена: $source_dir${NC}" + add_to_report "Установка шрифтов (папка не найдена)" "skipped" + return 0 + fi + + local font_count=$(find "$source_dir" -name "*.ttf" -o -name "*.otf" | wc -l) + echo -e "${BLUE}Буду устанавливать кастомные шрифты для красивого отображения тем.${NC}" + echo -e "Найдено шрифтов: $font_count" + echo -e "Откуда: $source_dir" + echo -e "Куда: $target_dir" + echo "" + echo -e "${YELLOW}Команды которые будут выполнены:${NC}" + echo -e "sudo cp -r $source_dir/* $target_dir/" + echo -e "sudo fc-cache -fv" + echo "" + + if ask_confirmation "Установить шрифты?" "Шрифты нужны для корректного отображения тем"; then + echo -e "${BLUE}${INFO} Копирование шрифтов...${NC}" + if sudo cp -r "$source_dir"/* "$target_dir"/; then + echo -e "${BLUE}${INFO} Обновление кэша шрифтов...${NC}" + if sudo fc-cache -fv > /dev/null 2>&1; then + echo -e "${GREEN}${CHECK} Шрифты успешно установлены и кэш обновлен${NC}" + add_to_report "Установка шрифтов ($font_count файлов)" "performed" + return 0 + else + echo -e "${YELLOW}${WARNING} Шрифты скопированы, но ошибка при обновлении кэша${NC}" + add_to_report "Установка шрифтов (с предупреждением)" "performed" + return 0 + fi + else + echo -e "${RED}${CROSS} Ошибка при копировании шрифтов${NC}" + return 1 + fi + else + add_to_report "Установка шрифтов" "skipped" + return 0 + fi +} + +# Функция для настройки темы +configure_theme() { + local theme_name="$1" + print_step_header "ШАГ 7: Настройка активной темы " + + local metadata_file="/usr/share/sddm/themes/sm1tee/metadata.desktop" + + echo -e "${BLUE}Буду настраивать тему '$theme_name' как активную.${NC}" + echo -e "Файл конфигурации: $metadata_file" + echo -e "Будет изменена строка: ConfigFile=configs/${theme_name}.conf" + echo "" + echo -e "${YELLOW}Команда для настройки:${NC} sudo sed -i \"s|^ConfigFile=.*|ConfigFile=configs/${theme_name}.conf|\" $metadata_file" + echo "" + + if [ ! -f "$metadata_file" ]; then + echo -e "${RED}${CROSS} Файл метаданных не найден: $metadata_file${NC}" + return 1 + fi + + if ask_confirmation "Настроить тему '$theme_name'?" "Это сделает её активной по умолчанию"; then + if sudo sed -i "s|^ConfigFile=.*|ConfigFile=configs/${theme_name}.conf|" "$metadata_file"; then + echo -e "${GREEN}${CHECK} Тема '$theme_name' успешно настроена${NC}" + add_to_report "Настройка темы $theme_name" "performed" + return 0 + else + echo -e "${RED}${CROSS} Ошибка при настройке темы${NC}" + return 1 + fi + else + add_to_report "Настройка темы $theme_name" "skipped" + return 1 + fi +} + +# Функция для настройки SDDM +configure_sddm() { + print_step_header "ШАГ 8: Настройка конфигурации SDDM " + + local config_file="/etc/sddm.conf" + + echo -e "${BLUE}Буду настраивать SDDM для использования установленной темы.${NC}" + echo -e "Файл конфигурации: $config_file" + echo "" + echo -e "${YELLOW}Содержимое новой конфигурации:${NC}" + echo -e "${CYAN}[Theme]${NC}" + echo -e "${CYAN}Current=sm1tee${NC}" + echo -e "${CYAN}CursorTheme=Vimix-white-cursors${NC}" + echo -e "${CYAN}CursorSize=30${NC}" + echo "" + echo -e "${CYAN}[General]${NC}" + echo -e "${CYAN}DisplayServer=wayland${NC}" + echo -e "${CYAN}GreeterEnvironment=wayland,QML2_IMPORT_PATH=/usr/share/sddm/themes/silent/components/,QT_IM_MODULE=qtvirtualkeyboard,XKB_DEFAULT_LAYOUT=us,ru${NC}" + echo -e "${CYAN}Numlock=on${NC}" + echo -e "${CYAN}InputMethod=qtvirtualkeyboard${NC}" + echo "" + + + + if ask_confirmation "Создать конфигурацию SDDM?" "Файл $config_file будет создан/перезаписан"; then + if sudo tee "$config_file" > /dev/null << 'EOF' +[Theme] +Current=sm1tee +CursorTheme=Vimix-white-cursors +CursorSize=30 + +[General] +DisplayServer=wayland +GreeterEnvironment=wayland,QML2_IMPORT_PATH=/usr/share/sddm/themes/silent/components/,QT_IM_MODULE=qtvirtualkeyboard,XKB_DEFAULT_LAYOUT=us,ru +Numlock=on +InputMethod=qtvirtualkeyboard +EOF + then + echo -e "${GREEN}${CHECK} Конфигурация SDDM успешно создана${NC}" + add_to_report "Настройка конфигурации SDDM" "performed" + return 0 + else + echo -e "${RED}${CROSS} Ошибка при создании конфигурации SDDM${NC}" + return 1 + fi + else + add_to_report "Настройка конфигурации SDDM" "skipped" + return 1 + fi +} + +# Функция для установки аватара +setup_avatar() { + print_step_header "ШАГ 9: Установка пользовательского аватара (опционально) " + + echo -e "${BLUE}Можно установить свой аватар, который будет отображаться на экране входа.${NC}" + echo -e "Поддерживаются форматы: PNG, JPG" + echo "" + + if ask_confirmation "Установить свой аватар?" "Вам нужно будет указать путь к файлу изображения"; then + while true; do + echo "" + read -p "Введите полный путь к файлу аватара (PNG/JPG): " avatar_path + + if [ -z "$avatar_path" ]; then + echo -e "${YELLOW}${WARNING} Путь не может быть пустым${NC}" + continue + fi + + if [ ! -f "$avatar_path" ]; then + echo -e "${RED}${CROSS} Файл не найден: $avatar_path${NC}" + if ask_confirmation "Попробовать другой файл?" ""; then + continue + else + add_to_report "Установка аватара" "skipped" + return 0 + fi + fi + + local username=$(whoami) + local target_path="/var/lib/AccountsService/icons/$username" + + echo "" + echo -e "${BLUE}Буду копировать аватар:${NC}" + echo -e "Откуда: $avatar_path" + echo -e "Куда: $target_path" + echo -e "Пользователь: $username" + echo "" + echo -e "${YELLOW}Команды которые будут выполнены:${NC}" + echo -e "sudo mkdir -p /var/lib/AccountsService/icons/" + echo -e "sudo cp $avatar_path $target_path" + echo "" + + if ask_confirmation "Скопировать аватар?" "Требуются права администратора"; then + if sudo mkdir -p "/var/lib/AccountsService/icons/" && sudo cp "$avatar_path" "$target_path"; then + echo -e "${GREEN}${CHECK} Аватар успешно установлен для пользователя $username${NC}" + add_to_report "Установка аватара для $username" "performed" + return 0 + else + echo -e "${RED}${CROSS} Ошибка при установке аватара${NC}" + return 1 + fi + else + add_to_report "Установка аватара" "skipped" + return 0 + fi + done + else + add_to_report "Установка аватара" "skipped" + return 0 + fi +} + +# Функция для предварительного просмотра +preview_theme() { + print_step_header "ШАГ 10: Предварительный просмотр темы (опционально) " + + echo -e "${BLUE}Можно запустить предварительный просмотр темы без перезагрузки системы.${NC}" + echo -e "Откроется окно с темой SDDM в тестовом режиме." + echo "" + echo -e "${YELLOW}Команда для запуска:${NC} QT_QPA_PLATFORM=xcb sddm-greeter-qt6 --test-mode --theme /usr/share/sddm/themes/sm1tee" + echo "" + + if ! command -v sddm-greeter-qt6 &> /dev/null; then + echo -e "${YELLOW}${WARNING} sddm-greeter-qt6 не найден${NC}" + echo -e "${BLUE}${INFO} Предварительный просмотр недоступен${NC}" + add_to_report "Предварительный просмотр (недоступен)" "skipped" + return 0 + fi + + if ask_confirmation "Запустить предварительный просмотр?" "Для выхода закройте окно предварительного просмотра"; then + echo -e "${BLUE}${INFO} Запуск предварительного просмотра...${NC}" + if QT_QPA_PLATFORM=xcb sddm-greeter-qt6 --test-mode --theme /usr/share/sddm/themes/sm1tee 2>/dev/null; then + echo -e "${GREEN}${CHECK} Предварительный просмотр завершен${NC}" + add_to_report "Предварительный просмотр темы" "performed" + else + echo -e "${YELLOW}${WARNING} Предварительный просмотр завершился с предупреждениями${NC}" + add_to_report "Предварительный просмотр (с предупреждениями)" "performed" + fi + else + add_to_report "Предварительный просмотр" "skipped" + fi +} + + + +# Функция для показа итогового отчета +show_final_report() { + print_step_header "ИТОГОВЫЙ ОТЧЕТ УСТАНОВКИ " + + if [ ${#ACTIONS_PERFORMED[@]} -gt 0 ]; then + echo -e "${GREEN}${CHECK} Выполненные действия:${NC}" + for action in "${ACTIONS_PERFORMED[@]}"; do + echo -e " ${GREEN}•${NC} $action" + done + echo "" + fi + + if [ ${#ACTIONS_SKIPPED[@]} -gt 0 ]; then + echo -e "${YELLOW}${WARNING} Пропущенные действия:${NC}" + for action in "${ACTIONS_SKIPPED[@]}"; do + echo -e " ${YELLOW}•${NC} $action" + done + echo "" + fi + + if [ ${#INSTALLED_PACKAGES[@]} -gt 0 ]; then + echo -e "${BLUE}${INFO} Установленные пакеты:${NC}" + for package in "${INSTALLED_PACKAGES[@]}"; do + echo -e " ${BLUE}•${NC} $package" + done + echo "" + fi + + if [ ${#BACKUP_FILES[@]} -gt 0 ]; then + echo -e "${CYAN}${INFO} Созданные резервные копии:${NC}" + for backup in "${BACKUP_FILES[@]}"; do + echo -e " ${CYAN}•${NC} $backup" + done + echo "" + fi + + echo -e "${BLUE}${INFO} Что дальше:${NC}" + echo -e " ${CYAN}•${NC} Перезагрузите систему: ${YELLOW}sudo reboot${NC}" + echo -e " ${CYAN}•${NC} Или перезапустите SDDM: ${YELLOW}sudo systemctl restart sddm${NC}" + echo "" + + echo -e "${BLUE}${INFO} Полезные команды:${NC}" + echo -e " ${CYAN}•${NC} Предварительный просмотр: ${YELLOW}QT_QPA_PLATFORM=xcb sddm-greeter-qt6 --test-mode --theme /usr/share/sddm/themes/sm1tee${NC}" + echo -e " ${CYAN}•${NC} Смена темы: ${YELLOW}sudo nano /usr/share/sddm/themes/sm1tee/metadata.desktop${NC}" + echo "" + + echo -e "${PURPLE}Made with ❤️ by Sm1tee${NC}" + echo -e "${BLUE}GitHub: https://github.com/Sm1tee/sddm-theme${NC}" +} + +# Основная функция +main() { + # Проверка аргументов командной строки + if [[ "$1" == "--check" ]]; then + CHECK_ONLY=true + fi + + print_header + + # Проверка системных зависимостей + if ! check_system_dependencies; then + exit 1 + fi + + # Определение дистрибутива + if ! detect_distro; then + exit 1 + fi + + # Если только проверка + if [ "$CHECK_ONLY" = true ]; then + echo -e "${GREEN}${CHECK} Проверка системы завершена успешно${NC}" + echo -e "${BLUE}${INFO} Система готова для установки SDDM темы${NC}" + exit 0 + fi + + # Установка зависимостей + install_dependencies + + # Выбор типа установки + choose_installation_type + + # Загрузка файлов + case $INSTALL_TYPE in + "full") + if download_repository; then + cd sddm-theme + show_available_themes + echo "" + read -p "Введите название темы для активации (например: witcher): " selected_theme + cd .. + else + echo -e "${RED}${CROSS} Не удалось загрузить репозиторий${NC}" + exit 1 + fi + ;; + "single") + show_available_themes + echo "" + read -p "Введите название темы для установки (например: witcher): " selected_theme + if ! download_single_theme "$selected_theme"; then + echo -e "${RED}${CROSS} Не удалось загрузить тему${NC}" + exit 1 + fi + ;; + esac + + # Установка файлов + install_theme_files + install_fonts + + # Очистка временных файлов + if [ -d "sddm-theme" ]; then + echo -e "${BLUE}${INFO} Удаление временной папки sddm-theme...${NC}" + rm -rf "sddm-theme" + echo -e "${GREEN}${CHECK} Временная папка удалена${NC}" + add_to_report "Очистка временных файлов" "performed" + fi + + # Настройка + configure_theme "$selected_theme" + configure_sddm + + # Дополнительные опции + setup_avatar + preview_theme + + # Итоговый отчет + show_final_report +} + +# Обработка сигналов +trap 'echo -e "\n${RED}${CROSS} Установка прервана пользователем${NC}"; exit 1' INT TERM + +# Запуск +main "$@" \ No newline at end of file