diff --git a/VOID/xbps_install.sh b/VOID/xbps_install.sh new file mode 100644 index 0000000..c14f5ae --- /dev/null +++ b/VOID/xbps_install.sh @@ -0,0 +1,183 @@ +#!/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 "" \ No newline at end of file