183 lines
7.4 KiB
Bash
183 lines
7.4 KiB
Bash
#!/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 "" |