15-08-2026-22:25
This commit is contained in:
@@ -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 ""
|
||||
Reference in New Issue
Block a user