diff --git a/.kiro/specs/transparent-installer/design.md b/.kiro/specs/transparent-installer/design.md deleted file mode 100644 index b3e2259..0000000 --- a/.kiro/specs/transparent-installer/design.md +++ /dev/null @@ -1,285 +0,0 @@ -# Design Document - -## Overview - -Интеграция установки SDDM тем в основной скрипт install-hyprland.sh путем замены функции install_sddm_config() на встроенную логику установки тем. Основная проблема - конфликт stdin при запуске скрипта внутри скрипта решается путем встраивания логики установки тем непосредственно в основной скрипт. - -## Architecture - -### Current Architecture -``` -install-hyprland.sh -├── install_sddm_config() -│ └── Вызывает внешний install.sh (ПРОБЛЕМА: конфликт stdin) -└── Остальные функции установки -``` - -### New Architecture -``` -install-hyprland.sh -├── install_sddm_config() -│ ├── sddm_choose_installation_type() -│ ├── sddm_download_themes() -│ ├── sddm_install_dependencies() -│ ├── sddm_install_theme_files() -│ ├── sddm_configure_theme() -│ └── sddm_configure_sddm() -└── Остальные функции установки -``` - -## Components and Interfaces - -### 1. Main Integration Function -```bash -install_sddm_config() { - print_step_info "13" "НАСТРОЙКА МЕНЕДЖЕРА ДИСПЛЕЯ SDDM" \ - "Установка красивых тем для экрана входа" - - if ask_user "Установить SDDM темы?"; then - sddm_install_process - else - print_info "Установка SDDM тем пропущена" - fi -} -``` - -### 2. SDDM Installation Process -```bash -sddm_install_process() { - local install_type - local selected_theme - - # Выбор типа установки - sddm_choose_installation_type install_type selected_theme - - # Установка зависимостей - sddm_install_dependencies - - # Загрузка и установка тем - sddm_download_and_install_themes "$install_type" "$selected_theme" - - # Настройка SDDM - sddm_configure_system "$selected_theme" -} -``` - -### 3. Theme Selection Interface -```bash -sddm_choose_installation_type() { - local -n type_ref=$1 - local -n theme_ref=$2 - - echo "Выберите тип установки SDDM тем:" - echo "1) Полная установка (все темы)" - echo "2) Установка одной темы" - - read -p "Ваш выбор (1-2): " choice - - case $choice in - 1) type_ref="full" ;; - 2) - type_ref="single" - sddm_select_single_theme theme_ref - ;; - *) - print_error "Неверный выбор, используется полная установка" - type_ref="full" - ;; - esac -} -``` - -## Data Models - -### Installation Configuration -```bash -# Глобальные переменные для конфигурации SDDM -SDDM_REPO_URL="https://github.com/Sm1tee/sddm-theme.git" -SDDM_INSTALL_DIR="/usr/share/sddm/themes/sm1tee" -SDDM_CONFIG_FILE="/etc/sddm.conf" -SDDM_TEMP_DIR="sddm-theme-temp" - -# Доступные темы -SDDM_AVAILABLE_THEMES=( - "apocalypse" "bones" "demon" "explosion" "gate" "gate2" "wizard" - "samurai" "samurai2" "samurai3" "samurai4" "solder" "warrior" - "house" "house2" "house3" "house4" "house5" "tree" "window" "window2" - "calmness" "space" "space2" "witcher" "harry" -) -``` - -### Theme Configuration Structure -```bash -# Структура конфигурации темы -sddm_theme_config() { - local theme_name=$1 - - echo "[Theme]" - echo "Current=sm1tee" - echo "CursorTheme=Vimix-white-cursors" - echo "CursorSize=30" - echo "" - echo "[General]" - echo "DisplayServer=wayland" - echo "GreeterEnvironment=wayland,QML2_IMPORT_PATH=/usr/share/sddm/themes/silent/components/,QT_IM_MODULE=qtvirtualkeyboard,XKB_DEFAULT_LAYOUT=us,ru" - echo "Numlock=on" - echo "InputMethod=qtvirtualkeyboard" -} -``` - -## Error Handling - -### 1. Dependency Installation Errors -```bash -sddm_install_dependencies() { - local packages - local install_cmd - - case $DISTRO in - "arch"|"manjaro"|"endeavouros") - packages="sddm qt6-svg qt6-virtualkeyboard qt6-multimedia-ffmpeg" - install_cmd="sudo pacman -S --needed $packages" - ;; - # ... другие дистрибутивы - esac - - if ! eval "$install_cmd"; then - print_error "Ошибка установки зависимостей SDDM" - return 1 - fi -} -``` - -### 2. Download and Installation Errors -```bash -sddm_download_themes() { - local install_type=$1 - local theme_name=$2 - - # Очистка предыдущих загрузок - [[ -d "$SDDM_TEMP_DIR" ]] && rm -rf "$SDDM_TEMP_DIR" - - if ! git clone "$SDDM_REPO_URL" "$SDDM_TEMP_DIR"; then - print_error "Ошибка загрузки репозитория SDDM тем" - return 1 - fi - - # Проверка существования темы для single установки - if [[ "$install_type" == "single" ]] && [[ ! -f "$SDDM_TEMP_DIR/themes/sm1tee/configs/${theme_name}.conf" ]]; then - print_error "Тема '$theme_name' не найдена" - return 1 - fi -} -``` - -### 3. Permission and System Errors -```bash -sddm_install_theme_files() { - local source_dir="$SDDM_TEMP_DIR/themes/sm1tee" - - if [[ ! -d "$source_dir" ]]; then - print_error "Исходная папка темы не найдена" - return 1 - fi - - # Создание резервной копии существующей темы - if [[ -d "$SDDM_INSTALL_DIR" ]]; then - sudo mv "$SDDM_INSTALL_DIR" "${SDDM_INSTALL_DIR}.backup.$(date +%Y%m%d_%H%M%S)" - fi - - if ! sudo cp -r "$source_dir" "$SDDM_INSTALL_DIR"; then - print_error "Ошибка копирования файлов темы" - # Восстановление резервной копии если есть - return 1 - fi -} -``` - -## Testing Strategy - -### 1. Unit Testing Functions -```bash -# Тестирование выбора темы -test_sddm_theme_selection() { - local test_input="2\nwitcher\n" - local install_type theme_name - - echo -e "$test_input" | sddm_choose_installation_type install_type theme_name - - [[ "$install_type" == "single" ]] || return 1 - [[ "$theme_name" == "witcher" ]] || return 1 -} - -# Тестирование конфигурации -test_sddm_config_generation() { - local config_output - config_output=$(sddm_theme_config "witcher") - - echo "$config_output" | grep -q "Current=sm1tee" || return 1 - echo "$config_output" | grep -q "DisplayServer=wayland" || return 1 -} -``` - -### 2. Integration Testing -```bash -# Тестирование полного процесса установки в тестовой среде -test_sddm_full_installation() { - # Создание временной тестовой среды - local test_dir="/tmp/sddm_test_$$" - mkdir -p "$test_dir" - - # Переопределение путей для тестирования - SDDM_INSTALL_DIR="$test_dir/themes" - SDDM_CONFIG_FILE="$test_dir/sddm.conf" - - # Запуск установки - sddm_install_process - - # Проверка результатов - [[ -d "$SDDM_INSTALL_DIR" ]] || return 1 - [[ -f "$SDDM_CONFIG_FILE" ]] || return 1 - - # Очистка - rm -rf "$test_dir" -} -``` - -### 3. Error Handling Testing -```bash -# Тестирование обработки ошибок -test_sddm_error_handling() { - # Тест с недоступным репозиторием - SDDM_REPO_URL="https://invalid-url.com/repo.git" - - if sddm_download_themes "full" ""; then - return 1 # Должна быть ошибка - fi - - # Тест с недоступной темой - if sddm_download_themes "single" "nonexistent_theme"; then - return 1 # Должна быть ошибка - fi -} -``` - -## Implementation Notes - -### 1. Стилистическая Интеграция -- Использовать существующие функции print_step_info, print_error, print_success из основного скрипта -- Сохранить цветовую схему и форматирование основного скрипта -- Использовать существующие функции ask_user для пользовательского ввода - -### 2. Совместимость с Дистрибутивами -- Определение дистрибутива должно использовать существующую логику из основного скрипта -- Команды установки пакетов должны соответствовать стилю основного скрипта -- Обработка ошибок должна быть консистентной - -### 3. Cleanup и Безопасность -- Автоматическая очистка временных файлов -- Создание резервных копий перед перезаписью -- Проверка прав доступа перед выполнением sudo команд - -### 4. Логирование и Отчетность -- Интеграция с системой логирования основного скрипта -- Добавление информации об установке SDDM в итоговый отчет -- Сохранение информации о выбранной теме для будущих обновлений \ No newline at end of file diff --git a/.kiro/specs/transparent-installer/requirements.md b/.kiro/specs/transparent-installer/requirements.md deleted file mode 100644 index 2624ded..0000000 --- a/.kiro/specs/transparent-installer/requirements.md +++ /dev/null @@ -1,57 +0,0 @@ -# Requirements Document - -## Introduction - -Необходимо интегрировать установку SDDM тем в основной скрипт установки dotfiles (install-hyprland.sh), заменив текущую функцию install_sddm_config() на вызов отдельного скрипта установки тем. Проблема заключается в том, что при запуске скрипта внутри скрипта возникает конфликт с пользовательским вводом. - -## Requirements - -### Requirement 1 - -**User Story:** Как пользователь, я хочу, чтобы установка SDDM тем была интегрирована в основной скрипт установки dotfiles, чтобы не запускать отдельные скрипты вручную. - -#### Acceptance Criteria - -1. WHEN пользователь запускает install-hyprland.sh THEN скрипт должен автоматически предложить установку SDDM тем на шаге 13 -2. WHEN пользователь соглашается на установку SDDM тем THEN система должна корректно обработать пользовательский ввод без зацикливания -3. WHEN установка SDDM тем завершается THEN основной скрипт должен продолжить выполнение со следующего шага - -### Requirement 2 - -**User Story:** Как пользователь, я хочу иметь возможность выбрать тип установки SDDM тем (полная или одна тема), чтобы контролировать объем загружаемых данных. - -#### Acceptance Criteria - -1. WHEN система предлагает установку SDDM тем THEN пользователь должен видеть опции: полная установка или установка одной темы -2. WHEN пользователь выбирает установку одной темы THEN система должна показать список доступных тем -3. WHEN пользователь делает выбор THEN система должна запомнить выбор и передать его в процесс установки - -### Requirement 3 - -**User Story:** Как пользователь, я хочу, чтобы установка SDDM тем была неинтерактивной или с минимальным взаимодействием, чтобы не прерывать автоматизированный процесс установки dotfiles. - -#### Acceptance Criteria - -1. WHEN запускается установка SDDM тем THEN система должна использовать предустановленные параметры или минимальное количество вопросов -2. WHEN возникает необходимость пользовательского ввода THEN система должна корректно обрабатывать stdin без конфликтов -3. WHEN установка завершается THEN система должна вернуть контроль основному скрипту - -### Requirement 4 - -**User Story:** Как пользователь, я хочу видеть прогресс установки SDDM тем в едином стиле с основным скриптом, чтобы интерфейс был консистентным. - -#### Acceptance Criteria - -1. WHEN выполняется установка SDDM тем THEN сообщения должны соответствовать стилю основного скрипта -2. WHEN происходят ошибки THEN они должны обрабатываться в стиле основного скрипта -3. WHEN установка завершается успешно THEN должно отображаться соответствующее сообщение в стиле основного скрипта - -### Requirement 5 - -**User Story:** Как пользователь, я хочу иметь возможность пропустить установку SDDM тем, чтобы продолжить установку остальных компонентов dotfiles. - -#### Acceptance Criteria - -1. WHEN система предлагает установку SDDM тем THEN пользователь должен иметь возможность отказаться -2. WHEN пользователь отказывается от установки SDDM тем THEN основной скрипт должен продолжить выполнение -3. WHEN пользователь отказывается THEN это должно быть зафиксировано в логах/отчете установки \ No newline at end of file diff --git a/.kiro/specs/transparent-installer/tasks.md b/.kiro/specs/transparent-installer/tasks.md deleted file mode 100644 index e69de29..0000000