#!/bin/sh # ============================================================================= # Void Linux Labwc Stack Installer # Запуск: sudo sh void-labwc-install.sh # ============================================================================= set -e # Остановка при ошибке RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' log() { printf "${GREEN}[✓]${NC} %s\n" "$1"; } warn() { printf "${YELLOW}[!]${NC} %s\n" "$1"; } error() { printf "${RED}[✗]${NC} %s\n" "$1"; exit 1; } # Проверка root if [ "$(id -u)" -ne 0 ]; then error "Скрипт нужно запускать от root: sudo sh $0" fi # Определение текущего пользователя (не root) REAL_USER="${SUDO_USER:-$USER}" if [ "$REAL_USER" = "root" ]; then error "Нельзя запускать от root напрямую. Используйте: sudo -u ваш_пользователь sh $0\nИли запустите от обычного пользователя через sudo." fi echo "" echo "=========================================" echo " Void Linux Labwc Stack Installer" echo " Пользователь: $REAL_USER" echo "=========================================" echo "" # =========================================================================== # ЭТАП 1: Репозитории и базовое обновление # =========================================================================== log "Этап 1/4: Обновление репозиториев..." xbps-install -Sy void-repo-nonfree || error "Не удалось добавить nonfree репозиторий" xbps-install -Syu base-system || error "Не удалось обновить base-system" # =========================================================================== # ЭТАП 2: Установка пакетов # =========================================================================== log "Этап 2/4: Установка пакетов..." PACKAGES=" curl wget tar unar nodejs npm labwc waybar swaylock swayidle polkit-gnome dolphin kate firefox pipewire kitty v2ray v2rayA telegram htop gparted pavucontrol qdirstat easyeffects lsp-plugins-lv2 obsidian ristretto mpv wofi cliphist sddm pango xorg-server-xwayland mesa-dri nvidia-open-dkms wl-clipboard gtk-layer-shell grim slurp swaybg mako seatd dbus polkit fontconfig noto-fonts-ttf ttf-dejavu ttf-jetbrains-mono ttf-font-awesome alsa-pipewire wireplumber xdg-desktop-portal-wlr xdg-desktop-portal-gtk qt6-wayland qt5-wayland qt5ct qt6ct fuse fuse-common ca-certificates xdg-utils dhcpcd sudo acpid breeze-icons adwaita-icon-theme ffmpeg libnotify unzip zip p7zip linux-firmware " # Убираем пустые строки и устанавливаем echo "$PACKAGES" | tr '\n' ' ' | xargs xbps-install -Sy || { warn "Некоторые пакеты не найдены. Попытка установки по одному..." for pkg in $PACKAGES; do if ! xbps-install -Sy "$pkg" 2>/dev/null; then warn "Пропущен пакет: $pkg (не найден в репозитории)" fi done } log "Все доступные пакеты установлены." # =========================================================================== # ЭТАП 3: Настройка сервисов runit # =========================================================================== log "Этап 3/4: Настройка сервисов runit..." enable_service() { svc="$1" if [ -d "/etc/sv/$svc" ]; then if [ ! -L "/var/service/$svc" ]; then ln -s "/etc/sv/$svc" "/var/service/$svc" log "Сервис включён: $svc" else log "Сервис уже включён: $svc" fi else warn "Сервис не найден: /etc/sv/$svc (пропустим)" fi } enable_service dbus enable_service seatd enable_service sddm enable_service pipewire enable_service wireplumber enable_service dhcpcd enable_service acpid # Добавление пользователя в необходимые группы log "Настройка групп пользователя $REAL_USER..." usermod -aG _seatd,audio,video,wheel "$REAL_USER" log "Пользователь добавлен в группы: _seatd, audio, video, wheel" # =========================================================================== # ЭТАП 4: Пост-установочная настройка # =========================================================================== log "Этап 4/4: Пост-установочная настройка..." # ALSA → PipeWire конфиг mkdir -p /etc/alsa/conf.d ln -sf /usr/share/alsa/alsa.conf.d/50-pipewire.conf /etc/alsa/conf.d/ ln -sf /usr/share/alsa/alsa.conf.d/99-pipewire-default.conf /etc/alsa/conf.d/ log "ALSA настроен на использование PipeWire" # SDDM Wayland сессия для Labwc SESSION_FILE="/usr/share/wayland-sessions/labwc.desktop" if [ ! -f "$SESSION_FILE" ]; then mkdir -p /usr/share/wayland-sessions cat > "$SESSION_FILE" << 'EOF' [Desktop Entry] Name=Labwc Comment=A wlroots-based windowing compositor Exec=labwc Type=Application DesktopNames=wlroots EOF log "Создана сессия Labwc для SDDM" else log "Сессия Labwc для SDDM уже существует" fi # NVIDIA DRM modeset (необходимо для Wayland + NVIDIA) GRUB_CMDLINE="nvidia_drm.modeset=1" if grep -q "$GRUB_CMDLINE" /etc/default/grub 2>/dev/null; then log "nvidia_drm.modeset=1 уже прописан в GRUB" else sed -i "s/GRUB_CMDLINE_LINUX=\"/&$GRUB_CMDLINE /" /etc/default/grub update-grub 2>/dev/null || grub-mkconfig -o /boot/grub/grub.cfg 2>/dev/null || \ warn "Не удалось обновить GRUB автоматически. Добавьте '$GRUB_CMDLINE' в GRUB_CMDLINE_LINUX вручную!" log "Добавлен nvidia_drm.modeset=1 в GRUB" fi # Переменные окружения для NVIDIA + Wayland ENV_FILE="/etc/environment" NVIDIA_VARS='WLR_NO_HARDWARE_CURSORS=1 __GLX_VENDOR_LIBRARY_NAME=nvidia GBM_BACKEND=nvidia-drm' if ! grep -q "WLR_NO_HARDWARE_CURSORS" "$ENV_FILE" 2>/dev/null; then echo "$NVIDIA_VARS" >> "$ENV_FILE" log "Переменные NVIDIA добавлены в $ENV_FILE" else log "Переменные NVIDIA уже настроены" fi # =========================================================================== # ГОТОВО # =========================================================================== echo "" echo "=========================================" printf "${GREEN}✓ Установка завершена!${NC}\n" echo "=========================================" echo "" echo "⚡ СЛЕДУЮЩИЕ ШАГИ:" echo " 1. Перезагрузите систему: reboot" echo " 2. В SDDM выберите сессию 'Labwc'" echo " 3. Скопируйте dotfiles в ~/.config/labwc/" echo " 4. Для v2rayA: запустите 'v2rayA' от пользователя" echo "" echo "📁 Конфиги Labwc: ~/.config/labwc/" echo "📁 Конфиги Waybar: ~/.config/waybar/" echo "📁 Конфиги Wofi: ~/.config/wofi/" echo "" echo "⚠️ Если нет звука после перезагрузки:" echo " systemctl --user enable pipewire wireplumber" echo " (или добавьте в ~/.xinitrc / autostart)" echo ""