update
This commit is contained in:
285
.kiro/specs/transparent-installer/design.md
Normal file
285
.kiro/specs/transparent-installer/design.md
Normal file
@@ -0,0 +1,285 @@
|
|||||||
|
# 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 в итоговый отчет
|
||||||
|
- Сохранение информации о выбранной теме для будущих обновлений
|
||||||
57
.kiro/specs/transparent-installer/requirements.md
Normal file
57
.kiro/specs/transparent-installer/requirements.md
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
# 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 это должно быть зафиксировано в логах/отчете установки
|
||||||
0
.kiro/specs/transparent-installer/tasks.md
Normal file
0
.kiro/specs/transparent-installer/tasks.md
Normal file
Reference in New Issue
Block a user