931 lines
22 KiB
Bash
931 lines
22 KiB
Bash
#!/bin/sh
|
|
|
|
# ============================================================
|
|
# LabWC Alpine Setup Script
|
|
# Version 11
|
|
#
|
|
# Запуск:
|
|
#
|
|
# ./setup.sh
|
|
# ./setup.sh ivan
|
|
#
|
|
# Можно запускать от root ИЛИ обычного пользователя.
|
|
#
|
|
# Скрипт автоматически использует sudo.
|
|
#
|
|
# ============================================================
|
|
|
|
set -eu
|
|
|
|
USER_NAME="${1:-ivan}"
|
|
|
|
HOME_DIR="/home/$USER_NAME"
|
|
PROFILE="$HOME_DIR/.profile"
|
|
|
|
ZENITH_REPO="https://zenithcode.duckdns.org/s13bby/zenith-cli.git"
|
|
ZENITH_DIR="$HOME_DIR/zenith-cli"
|
|
LOCAL_BIN="$HOME_DIR/.local/bin"
|
|
|
|
# ============================================================
|
|
# Абсолютный путь к скрипту
|
|
# ============================================================
|
|
|
|
case "$0" in
|
|
/*)
|
|
SCRIPT_PATH="$0"
|
|
;;
|
|
*)
|
|
SCRIPT_PATH="$(pwd)/$0"
|
|
;;
|
|
esac
|
|
|
|
# ============================================================
|
|
# Проверка имени
|
|
# ============================================================
|
|
|
|
case "$USER_NAME" in
|
|
""|*[!a-zA-Z0-9_-]*)
|
|
echo "[!] Некорректное имя пользователя: $USER_NAME"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
# ============================================================
|
|
# Автоматический sudo
|
|
# ============================================================
|
|
|
|
if [ "$(id -u)" -ne 0 ]; then
|
|
|
|
echo
|
|
echo "=================================================="
|
|
echo "[*] Запущено от пользователя: $(id -un)"
|
|
echo "[*] Нужны root-права."
|
|
echo "=================================================="
|
|
echo
|
|
|
|
if ! command -v sudo >/dev/null 2>&1; then
|
|
|
|
echo "[!] sudo не установлен."
|
|
echo
|
|
echo "[!] Выполните один раз от root:"
|
|
echo
|
|
echo " apk add sudo"
|
|
echo
|
|
exit 1
|
|
|
|
fi
|
|
|
|
exec sudo sh "$SCRIPT_PATH" "$@"
|
|
|
|
fi
|
|
|
|
# ============================================================
|
|
# Информация
|
|
# ============================================================
|
|
|
|
echo
|
|
echo "=================================================="
|
|
echo " LabWC Alpine Setup Script v11"
|
|
echo "=================================================="
|
|
echo
|
|
echo "[*] User: $USER_NAME"
|
|
echo "[*] Home: $HOME_DIR"
|
|
echo "[*] Alpine: $(cat /etc/alpine-release 2>/dev/null || echo unknown)"
|
|
echo
|
|
|
|
# ============================================================
|
|
# Проверка Alpine
|
|
# ============================================================
|
|
|
|
if [ ! -f /etc/alpine-release ]; then
|
|
|
|
echo "[!] Это не Alpine Linux."
|
|
exit 1
|
|
|
|
fi
|
|
|
|
# ============================================================
|
|
# Проверка repositories
|
|
# ============================================================
|
|
|
|
if [ ! -f /etc/apk/repositories ]; then
|
|
|
|
echo "[!] /etc/apk/repositories отсутствует."
|
|
exit 1
|
|
|
|
fi
|
|
|
|
# ============================================================
|
|
# Функции
|
|
# ============================================================
|
|
|
|
package_exists() {
|
|
PACKAGE="$1"
|
|
|
|
apk search -x "$PACKAGE" 2>/dev/null |
|
|
grep -Eq "^${PACKAGE}(-[0-9].*)?$"
|
|
}
|
|
|
|
|
|
install_required() {
|
|
PACKAGE="$1"
|
|
|
|
echo
|
|
echo "[*] Проверка обязательного пакета: $PACKAGE"
|
|
|
|
if apk info -e "$PACKAGE" >/dev/null 2>&1; then
|
|
|
|
echo "[+] $PACKAGE уже установлен."
|
|
return 0
|
|
|
|
fi
|
|
|
|
if ! package_exists "$PACKAGE"; then
|
|
|
|
echo
|
|
echo "=================================================="
|
|
echo "[!!!] ОШИБКА"
|
|
echo "=================================================="
|
|
echo
|
|
echo "[!] Обязательный пакет отсутствует:"
|
|
echo
|
|
echo " $PACKAGE"
|
|
echo
|
|
echo "[!] Alpine:"
|
|
cat /etc/alpine-release
|
|
echo
|
|
echo "[!] Репозитории:"
|
|
cat /etc/apk/repositories
|
|
echo
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
apk add "$PACKAGE"
|
|
}
|
|
|
|
|
|
install_optional() {
|
|
PACKAGE="$1"
|
|
|
|
echo
|
|
echo "[*] Необязательный пакет: $PACKAGE"
|
|
|
|
if apk info -e "$PACKAGE" >/dev/null 2>&1; then
|
|
|
|
echo "[+] Уже установлен."
|
|
return 0
|
|
|
|
fi
|
|
|
|
if package_exists "$PACKAGE"; then
|
|
|
|
apk add "$PACKAGE"
|
|
|
|
echo "[+] Установлен."
|
|
|
|
else
|
|
|
|
echo "[!] Пакет отсутствует."
|
|
echo "[!] Пропускаем."
|
|
|
|
fi
|
|
}
|
|
|
|
|
|
add_user_group() {
|
|
GROUP_NAME="$1"
|
|
|
|
# Создаём группу, если её нет
|
|
if ! getent group "$GROUP_NAME" >/dev/null 2>&1; then
|
|
|
|
echo "[*] Создание группы $GROUP_NAME..."
|
|
addgroup "$GROUP_NAME"
|
|
|
|
fi
|
|
|
|
if id -nG "$USER_NAME" 2>/dev/null |
|
|
tr ' ' '\n' |
|
|
grep -qx "$GROUP_NAME"
|
|
then
|
|
|
|
echo "[+] $USER_NAME уже в группе $GROUP_NAME."
|
|
|
|
else
|
|
|
|
echo "[*] Добавление $USER_NAME в группу $GROUP_NAME..."
|
|
|
|
addgroup "$USER_NAME" "$GROUP_NAME"
|
|
|
|
fi
|
|
}
|
|
|
|
|
|
enable_service() {
|
|
SERVICE="$1"
|
|
|
|
echo
|
|
echo "[*] Служба: $SERVICE"
|
|
|
|
if ! command -v rc-service >/dev/null 2>&1; then
|
|
|
|
echo "[!] OpenRC недоступен."
|
|
return 0
|
|
|
|
fi
|
|
|
|
if rc-service "$SERVICE" status >/dev/null 2>&1; then
|
|
|
|
echo "[+] $SERVICE уже запущен."
|
|
|
|
else
|
|
|
|
echo "[*] Запуск $SERVICE..."
|
|
|
|
rc-service "$SERVICE" start 2>/dev/null || true
|
|
|
|
fi
|
|
|
|
rc-update add "$SERVICE" default 2>/dev/null || true
|
|
}
|
|
|
|
|
|
check_command() {
|
|
NAME="$1"
|
|
COMMAND="$2"
|
|
|
|
printf '%-25s' "$NAME:"
|
|
|
|
if command -v "$COMMAND" >/dev/null 2>&1; then
|
|
echo "OK"
|
|
else
|
|
echo "ERROR"
|
|
fi
|
|
}
|
|
|
|
# ============================================================
|
|
# Community
|
|
# ============================================================
|
|
|
|
echo
|
|
echo "=================================================="
|
|
echo "[*] Репозиторий community"
|
|
echo "=================================================="
|
|
|
|
if grep -qE '^[[:space:]]*[^#[:space:]].*/community/?[[:space:]]*$' \
|
|
/etc/apk/repositories
|
|
then
|
|
|
|
echo "[+] community уже включён."
|
|
|
|
elif grep -qE '^[[:space:]]*#.*\/community/?[[:space:]]*$' \
|
|
/etc/apk/repositories
|
|
then
|
|
|
|
echo "[*] Раскомментирование community..."
|
|
|
|
sed -i \
|
|
's|^[[:space:]]*#\(.*\/community/?[[:space:]]*\)$|\1|' \
|
|
/etc/apk/repositories
|
|
|
|
else
|
|
|
|
echo "[!] community не найден."
|
|
echo
|
|
cat /etc/apk/repositories
|
|
echo
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
# ============================================================
|
|
# APK update
|
|
# ============================================================
|
|
|
|
echo
|
|
echo "[*] apk update..."
|
|
|
|
apk update
|
|
|
|
# ============================================================
|
|
# Пользователь
|
|
# ============================================================
|
|
|
|
echo
|
|
echo "=================================================="
|
|
echo "[*] Пользователь"
|
|
echo "=================================================="
|
|
|
|
if id "$USER_NAME" >/dev/null 2>&1; then
|
|
|
|
echo "[+] $USER_NAME уже существует."
|
|
|
|
else
|
|
|
|
echo "[*] Создание $USER_NAME..."
|
|
|
|
adduser -D "$USER_NAME"
|
|
|
|
echo
|
|
echo "[!] Задайте пароль для $USER_NAME вручную:"
|
|
echo " passwd $USER_NAME"
|
|
echo
|
|
|
|
fi
|
|
|
|
# ============================================================
|
|
# Базовые пакеты
|
|
# ============================================================
|
|
|
|
echo
|
|
echo "=================================================="
|
|
echo "[*] Базовые пакеты"
|
|
echo "=================================================="
|
|
|
|
install_required sudo
|
|
install_required nano
|
|
install_required git
|
|
install_required bash
|
|
install_required build-base
|
|
|
|
# ============================================================
|
|
# Sudo
|
|
# ============================================================
|
|
|
|
echo
|
|
echo "=================================================="
|
|
echo "[*] Настройка sudo"
|
|
echo "=================================================="
|
|
|
|
if [ -d /etc/sudoers.d ]; then
|
|
|
|
cat > /etc/sudoers.d/wheel << 'EOF'
|
|
%wheel ALL=(ALL) ALL
|
|
EOF
|
|
|
|
chmod 440 /etc/sudoers.d/wheel
|
|
|
|
else
|
|
|
|
if ! grep -qE '^%wheel[[:space:]]+ALL=\(ALL\)[[:space:]]+ALL' \
|
|
/etc/sudoers
|
|
then
|
|
|
|
echo '%wheel ALL=(ALL) ALL' >> /etc/sudoers
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
# ============================================================
|
|
# Группы
|
|
# ============================================================
|
|
|
|
echo
|
|
echo "=================================================="
|
|
echo "[*] Группы"
|
|
echo "=================================================="
|
|
|
|
add_user_group wheel
|
|
|
|
# ------------------------------------------------------------
|
|
# seat
|
|
#
|
|
# ВАЖНО:
|
|
# seatd — имя программы/демона.
|
|
# seat — группа.
|
|
#
|
|
# НЕ добавляем пользователя в группу "seatd".
|
|
# ------------------------------------------------------------
|
|
|
|
if ! getent group seat >/dev/null 2>&1; then
|
|
|
|
echo "[*] Группа seat отсутствует."
|
|
echo "[*] Создание группы seat..."
|
|
|
|
addgroup seat
|
|
|
|
fi
|
|
|
|
add_user_group seat
|
|
|
|
# ============================================================
|
|
# Wayland / graphics
|
|
# ============================================================
|
|
|
|
echo
|
|
echo "=================================================="
|
|
echo "[*] Wayland / graphics"
|
|
echo "=================================================="
|
|
|
|
# НЕ используем mesa-dri.
|
|
install_required mesa
|
|
install_required libinput
|
|
install_required seatd
|
|
install_required dbus
|
|
install_required polkit
|
|
|
|
# ============================================================
|
|
# zenith-cli dependencies
|
|
# ============================================================
|
|
|
|
echo
|
|
echo "=================================================="
|
|
echo "[*] zenith-cli dependencies"
|
|
echo "=================================================="
|
|
|
|
install_required cmake
|
|
install_required curl-dev
|
|
install_required opencv-dev
|
|
|
|
# ============================================================
|
|
# Desktop
|
|
# ============================================================
|
|
|
|
echo
|
|
echo "=================================================="
|
|
echo "[*] Desktop"
|
|
echo "=================================================="
|
|
|
|
install_required labwc
|
|
install_required alacritty
|
|
install_required waybar
|
|
install_required mako
|
|
install_required swaybg
|
|
install_required wofi
|
|
install_required font-noto
|
|
install_required font-dejavu
|
|
install_required wl-clipboard
|
|
install_required xdg-desktop-portal
|
|
install_required pipewire
|
|
install_required wireplumber
|
|
install_required alsa-utils
|
|
install_required networkmanager
|
|
install_required pcmanfm
|
|
install_required firefox
|
|
install_required swaylock
|
|
|
|
# ============================================================
|
|
# SDDM (Display Manager)
|
|
# ============================================================
|
|
|
|
echo
|
|
echo "=================================================="
|
|
echo "[*] SDDM"
|
|
echo "=================================================="
|
|
|
|
install_required sddm
|
|
|
|
# ============================================================
|
|
# Необязательные пакеты
|
|
# ============================================================
|
|
|
|
echo
|
|
echo "=================================================="
|
|
echo "[*] Необязательные пакеты"
|
|
echo "=================================================="
|
|
|
|
# GTK portal может отсутствовать в некоторых конфигурациях.
|
|
install_optional xdg-desktop-portal-gtk
|
|
|
|
# network-manager-applet может отсутствовать в текущей ветке.
|
|
#
|
|
# Он НЕ нужен для работы NetworkManager.
|
|
# Поэтому не ломаем установку из-за него.
|
|
install_optional network-manager-applet
|
|
|
|
# ============================================================
|
|
# OpenRC
|
|
# ============================================================
|
|
|
|
echo
|
|
echo "=================================================="
|
|
echo "[*] OpenRC"
|
|
echo "=================================================="
|
|
|
|
enable_service seatd
|
|
enable_service dbus
|
|
enable_service networkmanager
|
|
enable_service sddm
|
|
|
|
# ============================================================
|
|
# LabWC configuration
|
|
# ============================================================
|
|
|
|
echo
|
|
echo "=================================================="
|
|
echo "[*] Конфигурация LabWC"
|
|
echo "=================================================="
|
|
|
|
mkdir -p "$HOME_DIR/.config/labwc"
|
|
|
|
# ------------------------------------------------------------
|
|
# environment
|
|
# ------------------------------------------------------------
|
|
|
|
cat > "$HOME_DIR/.config/labwc/environment" << 'EOF'
|
|
XDG_CURRENT_DESKTOP=labwc
|
|
XDG_SESSION_DESKTOP=labwc
|
|
XDG_SESSION_TYPE=wayland
|
|
|
|
MOZ_ENABLE_WAYLAND=1
|
|
QT_QPA_PLATFORM=wayland
|
|
SDL_VIDEODRIVER=wayland
|
|
|
|
LIBSEAT_BACKEND=seatd
|
|
EOF
|
|
|
|
# ------------------------------------------------------------
|
|
# autostart
|
|
# ------------------------------------------------------------
|
|
|
|
cat > "$HOME_DIR/.config/labwc/autostart" << 'EOF'
|
|
#!/bin/sh
|
|
|
|
# ============================================================
|
|
# Runtime directory
|
|
# ============================================================
|
|
|
|
if [ -z "${XDG_RUNTIME_DIR:-}" ]; then
|
|
export XDG_RUNTIME_DIR="/tmp/user-$(id -u)"
|
|
fi
|
|
|
|
if [ ! -d "$XDG_RUNTIME_DIR" ]; then
|
|
mkdir -p "$XDG_RUNTIME_DIR"
|
|
chmod 700 "$XDG_RUNTIME_DIR"
|
|
fi
|
|
|
|
# ============================================================
|
|
# NetworkManager applet
|
|
#
|
|
# Запускаем ТОЛЬКО если он реально установлен.
|
|
# ============================================================
|
|
|
|
if command -v nm-applet >/dev/null 2>&1; then
|
|
nm-applet &
|
|
fi
|
|
|
|
# ============================================================
|
|
# Waybar
|
|
# ============================================================
|
|
|
|
if command -v waybar >/dev/null 2>&1; then
|
|
waybar &
|
|
fi
|
|
|
|
# ============================================================
|
|
# Mako
|
|
# ============================================================
|
|
|
|
if command -v mako >/dev/null 2>&1; then
|
|
mako &
|
|
fi
|
|
|
|
# ============================================================
|
|
# PipeWire
|
|
# ============================================================
|
|
|
|
if command -v pipewire >/dev/null 2>&1; then
|
|
|
|
if ! pgrep -x pipewire >/dev/null 2>&1; then
|
|
pipewire &
|
|
fi
|
|
|
|
fi
|
|
|
|
# ============================================================
|
|
# WirePlumber
|
|
# ============================================================
|
|
|
|
if command -v wireplumber >/dev/null 2>&1; then
|
|
|
|
if ! pgrep -x wireplumber >/dev/null 2>&1; then
|
|
wireplumber &
|
|
fi
|
|
|
|
fi
|
|
|
|
# ============================================================
|
|
# Wallpaper
|
|
# ============================================================
|
|
|
|
WALLPAPER=""
|
|
|
|
if [ -f /usr/share/backgrounds/alpine/alpine-wallpaper.png ]; then
|
|
WALLPAPER="/usr/share/backgrounds/alpine/alpine-wallpaper.png"
|
|
elif [ -f /usr/share/pixmaps/alpine-wallpaper.png ]; then
|
|
WALLPAPER="/usr/share/pixmaps/alpine-wallpaper.png"
|
|
elif [ -f /usr/share/wallpapers/alpine.png ]; then
|
|
WALLPAPER="/usr/share/wallpapers/alpine.png"
|
|
fi
|
|
|
|
if command -v swaybg >/dev/null 2>&1 && [ -n "$WALLPAPER" ]; then
|
|
|
|
swaybg \
|
|
-i "$WALLPAPER" \
|
|
-m fill &
|
|
|
|
fi
|
|
EOF
|
|
|
|
chmod +x "$HOME_DIR/.config/labwc/autostart"
|
|
|
|
# ============================================================
|
|
# zenith-cli
|
|
# ============================================================
|
|
|
|
echo
|
|
echo "=================================================="
|
|
echo "[*] zenith-cli"
|
|
echo "=================================================="
|
|
|
|
if [ -d "$ZENITH_DIR/.git" ]; then
|
|
|
|
echo "[+] Репозиторий уже существует."
|
|
|
|
su - "$USER_NAME" -c "
|
|
set -eu
|
|
cd '$ZENITH_DIR'
|
|
git pull
|
|
"
|
|
|
|
else
|
|
|
|
echo "[*] Клонирование..."
|
|
|
|
su - "$USER_NAME" -c "
|
|
set -eu
|
|
git clone '$ZENITH_REPO' '$ZENITH_DIR'
|
|
"
|
|
|
|
fi
|
|
|
|
# ============================================================
|
|
# Проверка исходников
|
|
# ============================================================
|
|
|
|
if [ ! -f "$ZENITH_DIR/build.sh" ]; then
|
|
|
|
echo
|
|
echo "[!] build.sh не найден:"
|
|
echo " $ZENITH_DIR/build.sh"
|
|
exit 1
|
|
|
|
fi
|
|
|
|
if [ ! -f "$ZENITH_DIR/CMakeLists.txt" ]; then
|
|
|
|
echo
|
|
echo "[!] CMakeLists.txt не найден:"
|
|
echo " $ZENITH_DIR/CMakeLists.txt"
|
|
exit 1
|
|
|
|
fi
|
|
|
|
# ============================================================
|
|
# Сборка
|
|
# ============================================================
|
|
|
|
echo
|
|
echo "=================================================="
|
|
echo "[*] Сборка zenith-cli"
|
|
echo "=================================================="
|
|
|
|
su - "$USER_NAME" -c "
|
|
set -eu
|
|
|
|
cd '$ZENITH_DIR'
|
|
|
|
chmod +x build.sh
|
|
|
|
./build.sh
|
|
|
|
if [ ! -f ./zenith-cli ]; then
|
|
|
|
echo '[!] zenith-cli не найден после сборки.'
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
chmod +x ./zenith-cli
|
|
|
|
mkdir -p '$LOCAL_BIN'
|
|
|
|
cp ./zenith-cli '$LOCAL_BIN/zenith-cli'
|
|
|
|
chmod +x '$LOCAL_BIN/zenith-cli'
|
|
|
|
echo '[+] zenith-cli установлен.'
|
|
"
|
|
|
|
# ============================================================
|
|
# PATH
|
|
# ============================================================
|
|
|
|
echo
|
|
echo "=================================================="
|
|
echo "[*] PATH"
|
|
echo "=================================================="
|
|
|
|
touch "$PROFILE"
|
|
|
|
if ! grep -qF 'export PATH="$HOME/.local/bin:$PATH"' "$PROFILE"; then
|
|
|
|
cat >> "$PROFILE" << 'EOF'
|
|
|
|
# User local binaries
|
|
export PATH="$HOME/.local/bin:$PATH"
|
|
EOF
|
|
|
|
fi
|
|
|
|
# ============================================================
|
|
# XDG_RUNTIME_DIR
|
|
# ============================================================
|
|
|
|
if ! grep -qF '# XDG-RUNTIME-DIR' "$PROFILE"; then
|
|
|
|
cat >> "$PROFILE" << 'EOF'
|
|
|
|
# XDG-RUNTIME-DIR
|
|
|
|
if [ -z "${XDG_RUNTIME_DIR:-}" ]; then
|
|
export XDG_RUNTIME_DIR="/tmp/user-$(id -u)"
|
|
fi
|
|
|
|
if [ ! -d "$XDG_RUNTIME_DIR" ]; then
|
|
mkdir -p "$XDG_RUNTIME_DIR"
|
|
chmod 700 "$XDG_RUNTIME_DIR"
|
|
fi
|
|
EOF
|
|
|
|
fi
|
|
|
|
# ============================================================
|
|
# SDDM configuration
|
|
# ============================================================
|
|
|
|
echo
|
|
echo "=================================================="
|
|
echo "[*] Настройка SDDM"
|
|
echo "=================================================="
|
|
|
|
mkdir -p /etc/sddm.conf.d
|
|
|
|
cat > /etc/sddm.conf.d/wayland.conf << 'EOF'
|
|
[Wayland]
|
|
Compositor=labwc
|
|
|
|
[General]
|
|
GreeterEnvironment=MOZ_ENABLE_WAYLAND=1,QT_QPA_PLATFORM=wayland,SDL_VIDEODRIVER=wayland
|
|
EOF
|
|
|
|
echo "[+] SDDM настроен для использования LabWC."
|
|
|
|
# ============================================================
|
|
# Права
|
|
# ============================================================
|
|
|
|
echo
|
|
echo "=================================================="
|
|
echo "[*] Права"
|
|
echo "=================================================="
|
|
|
|
if [ -d "$HOME_DIR/.config" ]; then
|
|
|
|
chown -R "$USER_NAME:$USER_NAME" \
|
|
"$HOME_DIR/.config"
|
|
|
|
fi
|
|
|
|
if [ -f "$PROFILE" ]; then
|
|
|
|
chown "$USER_NAME:$USER_NAME" \
|
|
"$PROFILE"
|
|
|
|
fi
|
|
|
|
if [ -d "$HOME_DIR/.local" ]; then
|
|
|
|
chown -R "$USER_NAME:$USER_NAME" \
|
|
"$HOME_DIR/.local"
|
|
|
|
fi
|
|
|
|
if [ -d "$ZENITH_DIR" ]; then
|
|
|
|
chown -R "$USER_NAME:$USER_NAME" \
|
|
"$ZENITH_DIR"
|
|
|
|
fi
|
|
|
|
# ============================================================
|
|
# Финальная проверка
|
|
# ============================================================
|
|
|
|
echo
|
|
echo "=================================================="
|
|
echo " ФИНАЛЬНАЯ ПРОВЕРКА"
|
|
echo "=================================================="
|
|
echo
|
|
|
|
echo "[*] Пользователь:"
|
|
id "$USER_NAME"
|
|
|
|
echo
|
|
|
|
printf '%-25s' "wheel:"
|
|
if id -nG "$USER_NAME" |
|
|
tr ' ' '\n' |
|
|
grep -qx wheel
|
|
then
|
|
echo "OK"
|
|
else
|
|
echo "ERROR"
|
|
fi
|
|
|
|
printf '%-25s' "seat:"
|
|
if id -nG "$USER_NAME" |
|
|
tr ' ' '\n' |
|
|
grep -qx seat
|
|
then
|
|
echo "OK"
|
|
else
|
|
echo "ERROR"
|
|
fi
|
|
|
|
echo
|
|
|
|
check_command "seatd" "seatd"
|
|
check_command "LabWC" "labwc"
|
|
check_command "Waybar" "waybar"
|
|
check_command "PipeWire" "pipewire"
|
|
check_command "WirePlumber" "wireplumber"
|
|
check_command "NetworkManager" "nmcli"
|
|
check_command "D-Bus" "dbus-run-session"
|
|
check_command "Bash" "bash"
|
|
check_command "CMake" "cmake"
|
|
check_command "SDDM" "sddm"
|
|
|
|
echo
|
|
|
|
printf '%-25s' "OpenCV:"
|
|
if apk info -e opencv-dev >/dev/null 2>&1; then
|
|
echo "OK"
|
|
else
|
|
echo "ERROR"
|
|
fi
|
|
|
|
printf '%-25s' "nm-applet:"
|
|
if command -v nm-applet >/dev/null 2>&1; then
|
|
echo "OK"
|
|
else
|
|
echo "OPTIONAL / SKIPPED"
|
|
fi
|
|
|
|
printf '%-25s' "zenith-cli:"
|
|
if [ -x "$LOCAL_BIN/zenith-cli" ]; then
|
|
echo "OK"
|
|
else
|
|
echo "ERROR"
|
|
fi
|
|
|
|
echo
|
|
echo "=================================================="
|
|
echo " УСТАНОВКА ЗАВЕРШЕНА"
|
|
echo "=================================================="
|
|
echo
|
|
echo "[+] Пользователь: $USER_NAME"
|
|
echo "[+] LabWC установлен."
|
|
echo "[+] NetworkManager установлен."
|
|
echo "[+] seatd установлен."
|
|
echo "[+] PipeWire установлен."
|
|
echo "[+] SDDM установлен."
|
|
echo "[+] zenith-cli установлен."
|
|
echo
|
|
echo "[!] network-manager-applet не является обязательным."
|
|
echo "[!] Если его нет — NetworkManager всё равно работает."
|
|
echo
|
|
echo "[!] Перезагрузка:"
|
|
echo
|
|
echo " reboot"
|
|
echo
|
|
echo "После перезагрузки:"
|
|
echo
|
|
echo " 1. SDDM запустится автоматически"
|
|
echo " 2. Выберите пользователя: $USER_NAME"
|
|
echo " 3. Введите пароль"
|
|
echo " 4. Сессия LabWC (Wayland) запустится"
|
|
echo " 5. Waybar"
|
|
echo " 6. Mako"
|
|
echo " 7. PipeWire / WirePlumber"
|
|
echo " 8. NetworkManager"
|
|
echo
|
|
echo "zenith-cli:"
|
|
echo
|
|
echo " zenith-cli"
|
|
echo
|
|
echo "==================================================" |