From e33cfb48f928f18d722b52c4653f6234d9fc5877 Mon Sep 17 00:00:00 2001 From: s13bby Date: Tue, 8 Sep 2026 09:49:25 +0600 Subject: [PATCH] c --- alphine | 32 ++ alpine_install.sh | 1289 ++++++++++++++++----------------------------- 2 files changed, 486 insertions(+), 835 deletions(-) diff --git a/alphine b/alphine index 3a27b7c..d9bf66b 100644 --- a/alphine +++ b/alphine @@ -130,3 +130,35 @@ if [ -z "$DISPLAY" ] && [ "$(tty)" = "/dev/tty1" ]; then exec labwc fi + + +apk update +apk upgrade + +setup-wayland-base + +apk add labwc labwc-doc \ + dbus dbus-x11 \ + foot \ + rofi \ + swaybg \ + swayidle \ + swaylock \ + font-dejavu + +adduser ivan + +dbus-launch labwc + + + + + + + + + + + + + diff --git a/alpine_install.sh b/alpine_install.sh index 86ce437..bf9701e 100644 --- a/alpine_install.sh +++ b/alpine_install.sh @@ -1,909 +1,528 @@ #!/bin/sh # ============================================================ -# LabWC Alpine Setup Script -# Version 11 -# -# Запуск: -# -# ./setup.sh -# ./setup.sh ivan -# -# Можно запускать от root ИЛИ обычного пользователя. -# -# Скрипт автоматически использует sudo. -# +# Alpine Linux + labwc Desktop Installer +# Wayland / labwc / seatd / greetd / NetworkManager / PipeWire # ============================================================ -set -eu +echo "==============================================" +echo " Alpine Linux -> labwc Desktop" +echo "==============================================" +echo -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" "$@" +# ------------------------------------------------------------ +# Check root +# ------------------------------------------------------------ +if [ "$(id -u)" != "0" ]; then + echo "ERROR: run this script as root." + exit 1 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 -# ============================================================ +# ------------------------------------------------------------ +# Check Alpine +# ------------------------------------------------------------ if [ ! -f /etc/alpine-release ]; then - - echo "[!] Это не Alpine Linux." + echo "ERROR: this script is intended for 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 -# ============================================================ +ALPINE_VERSION="$(cut -d'.' -f1,2 /etc/alpine-release)" +echo "Alpine version: $ALPINE_VERSION" echo -echo "==================================================" -echo "[*] Репозиторий community" -echo "==================================================" -if grep -qE '^[[:space:]]*[^#[:space:]].*/community/?[[:space:]]*$' \ - /etc/apk/repositories -then +# ------------------------------------------------------------ +# Repositories +# ------------------------------------------------------------ - echo "[+] community уже включён." +echo "➜ Configure Alpine repositories" -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..." +cat > /etc/apk/repositories << EOF +https://dl-cdn.alpinelinux.org/alpine/v${ALPINE_VERSION}/main +https://dl-cdn.alpinelinux.org/alpine/v${ALPINE_VERSION}/community +EOF apk update -# ============================================================ -# Пользователь -# ============================================================ +# ------------------------------------------------------------ +# Desktop user +# ------------------------------------------------------------ -echo -echo "==================================================" -echo "[*] Пользователь" -echo "==================================================" +USER="user" -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 +echo "➜ Create desktop user: $USER" +if ! id "$USER" >/dev/null 2>&1; then + adduser -D "$USER" fi -# ============================================================ -# Базовые пакеты -# ============================================================ +# sudo +apk add sudo -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 +cat > "/etc/sudoers.d/$USER" << EOF +$USER ALL=(ALL) NOPASSWD: ALL EOF - chmod 440 /etc/sudoers.d/wheel +chmod 0440 "/etc/sudoers.d/$USER" -else +echo "✓ User $USER created" +echo - if ! grep -qE '^%wheel[[:space:]]+ALL=\(ALL\)[[:space:]]+ALL' \ - /etc/sudoers - then +# ------------------------------------------------------------ +# Basic desktop infrastructure +# ------------------------------------------------------------ - echo '%wheel ALL=(ALL) ALL' >> /etc/sudoers +echo "➜ Install desktop infrastructure" +apk add \ + dbus \ + dbus-x11 \ + eudev \ + seatd \ + seatd-openrc \ + polkit \ + polkit-elogind \ + font-dejavu \ + font-noto \ + font-noto-cjk + +# ------------------------------------------------------------ +# User groups +# ------------------------------------------------------------ + +echo "➜ Configure user groups" + +addgroup "$USER" seat 2>/dev/null || true +addgroup "$USER" audio 2>/dev/null || true +addgroup "$USER" video 2>/dev/null || true +addgroup "$USER" input 2>/dev/null || true + +# ------------------------------------------------------------ +# Wayland / labwc +# ------------------------------------------------------------ + +echo "★ Install labwc" + +apk add \ + labwc \ + xwayland + +# ------------------------------------------------------------ +# Useful Wayland desktop applications +# ------------------------------------------------------------ + +echo "➜ Install Wayland utilities" + +apk add \ + foot \ + rofi \ + swaybg \ + swayidle \ + swaylock \ + waybar \ + wl-clipboard \ + grim \ + slurp + +# ------------------------------------------------------------ +# File manager / removable devices +# ------------------------------------------------------------ + +echo "➜ Install filesystem / removable device support" + +apk add \ + gvfs \ + gvfs-fuse \ + gvfs-smb \ + udisks2 \ + udisks2-openrc \ + fuse-openrc + +# ------------------------------------------------------------ +# NetworkManager +# ------------------------------------------------------------ + +echo "➜ Install NetworkManager" + +apk add \ + networkmanager \ + networkmanager-openrc \ + networkmanager-tui + +rc-update add networkmanager default + +# ------------------------------------------------------------ +# Seat management +# ------------------------------------------------------------ + +echo "➜ Configure seatd" + +rc-update add seatd default + +# ------------------------------------------------------------ +# D-Bus +# ------------------------------------------------------------ + +echo "➜ Configure D-Bus" + +rc-update add dbus default + +# ------------------------------------------------------------ +# PipeWire +# ------------------------------------------------------------ + +echo "★ Install PipeWire audio" + +apk add \ + pipewire \ + pipewire-pulse \ + pipewire-alsa \ + pipewire-tools \ + pipewire-spa-bluez \ + pipewire-pulse-openrc \ + wireplumber \ + wireplumber-openrc + +# ------------------------------------------------------------ +# ALSA +# ------------------------------------------------------------ + +echo "➜ Install ALSA utilities" + +apk add \ + alsa-utils \ + alsaconf \ + alsa-lib + +addgroup "$USER" audio 2>/dev/null || true + +# ------------------------------------------------------------ +# Bluetooth +# ------------------------------------------------------------ + +echo "➜ Install Bluetooth support" + +apk add \ + bluez \ + bluez-openrc \ + blueman + +rc-update add bluetooth default + +# ------------------------------------------------------------ +# Login manager +# ------------------------------------------------------------ + +echo "★ Install greetd" + +apk add \ + greetd \ + greetd-openrc \ + greetd-agreety + +# ------------------------------------------------------------ +# greetd configuration +# ------------------------------------------------------------ + +echo "➜ Configure greetd" + +mkdir -p /etc/greetd + +cat > /etc/greetd/config.toml << EOF +[terminal] +vt = 7 + +[default_session] +command = "agreety --cmd labwc" +user = "greetd" +EOF + +# greetd needs access to seatd +addgroup greetd seat 2>/dev/null || true + +# Make greetd wait for seatd +if [ -f /etc/conf.d/greetd ]; then + if ! grep -q '^rc_need=".*seatd' /etc/conf.d/greetd 2>/dev/null; then + echo 'rc_need="seatd"' >> /etc/conf.d/greetd fi - fi -# ============================================================ -# Группы -# ============================================================ - -echo -echo "==================================================" -echo "[*] Группы" -echo "==================================================" - -add_user_group wheel +rc-update add greetd default # ------------------------------------------------------------ -# seat -# -# ВАЖНО: -# seatd — имя программы/демона. -# seat — группа. -# -# НЕ добавляем пользователя в группу "seatd". +# XDG user directories # ------------------------------------------------------------ -if ! getent group seat >/dev/null 2>&1; then +echo "➜ Create XDG user directories" - echo "[*] Группа seat отсутствует." - echo "[*] Создание группы seat..." +apk add xdg-user-dirs - 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" +su - "$USER" -c "xdg-user-dirs-update" 2>/dev/null || true # ------------------------------------------------------------ -# environment +# labwc configuration # ------------------------------------------------------------ -cat > "$HOME_DIR/.config/labwc/environment" << 'EOF' -XDG_CURRENT_DESKTOP=labwc -XDG_SESSION_DESKTOP=labwc -XDG_SESSION_TYPE=wayland +echo "➜ Create labwc configuration" -MOZ_ENABLE_WAYLAND=1 -QT_QPA_PLATFORM=wayland -SDL_VIDEODRIVER=wayland +mkdir -p "/home/$USER/.config/labwc" -LIBSEAT_BACKEND=seatd -EOF - -# ------------------------------------------------------------ -# autostart -# ------------------------------------------------------------ - -cat > "$HOME_DIR/.config/labwc/autostart" << 'EOF' +cat > "/home/$USER/.config/labwc/autostart" << 'EOF' #!/bin/sh -# ============================================================ -# Runtime directory -# ============================================================ - -if [ -z "${XDG_RUNTIME_DIR:-}" ]; then - export XDG_RUNTIME_DIR="/tmp/user-$(id -u)" +# D-Bus user session +if command -v dbus-update-activation-environment >/dev/null 2>&1; then + dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP fi -if [ ! -d "$XDG_RUNTIME_DIR" ]; then - mkdir -p "$XDG_RUNTIME_DIR" - chmod 700 "$XDG_RUNTIME_DIR" +# Wallpaper +if command -v swaybg >/dev/null 2>&1; then + swaybg -c 202020 & fi -# ============================================================ -# NetworkManager applet -# -# Запускаем ТОЛЬКО если он реально установлен. -# ============================================================ - -if command -v nm-applet >/dev/null 2>&1; then - nm-applet & -fi - -# ============================================================ -# Waybar -# ============================================================ - +# Panel 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 -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:" +# NetworkManager tray if command -v nm-applet >/dev/null 2>&1; then - echo "OK" -else - echo "OPTIONAL / SKIPPED" + nm-applet & fi -printf '%-25s' "zenith-cli:" -if [ -x "$LOCAL_BIN/zenith-cli" ]; then - echo "OK" -else - echo "ERROR" +# Bluetooth tray +if command -v blueman-applet >/dev/null 2>&1; then + blueman-applet & fi +EOF + +chmod +x "/home/$USER/.config/labwc/autostart" + +# ------------------------------------------------------------ +# Basic labwc menu +# ------------------------------------------------------------ + +cat > "/home/$USER/.config/labwc/menu.xml" << 'EOF' + + + + + + + foot + + + + + + rofi -show drun + + + + + + + + + + + + + + +EOF + +# ------------------------------------------------------------ +# Basic keyboard shortcuts +# ------------------------------------------------------------ + +cat > "/home/$USER/.config/labwc/rc.xml" << 'EOF' + + + + + + + + + + foot + + + + + + rofi -show drun + + + + + + swaylock + + + + + + + + + + +EOF + +# ------------------------------------------------------------ +# Waybar configuration +# ------------------------------------------------------------ + +mkdir -p "/home/$USER/.config/waybar" + +cat > "/home/$USER/.config/waybar/config" << 'EOF' +[ + { + "layer": "top", + "position": "top", + "modules-left": [ + "wlr/workspaces" + ], + "modules-center": [ + "clock" + ], + "modules-right": [ + "network", + "pulseaudio", + "battery" + ] + } +] +EOF + +cat > "/home/$USER/.config/waybar/style.css" << 'EOF' +* { + border: none; + border-radius: 0; + font-family: sans-serif; + font-size: 13px; +} + +window#waybar { + background: rgba(30, 30, 30, 0.95); + color: #ffffff; +} + +#workspaces button { + padding: 0 8px; + color: #aaaaaa; +} + +#workspaces button.active { + color: #ffffff; + background: #444444; +} + +#clock, +#network, +#pulseaudio, +#battery { + padding: 0 10px; +} +EOF + +# ------------------------------------------------------------ +# Permissions +# ------------------------------------------------------------ + +echo "➜ Fix user permissions" + +chown -R "$USER:$USER" "/home/$USER/.config" + +# ------------------------------------------------------------ +# Useful software +# ------------------------------------------------------------ + +echo "★ Install basic software" + +apk add \ + htop \ + neofetch \ + curl \ + wget \ + git \ + nano \ + less \ + file \ + unzip \ + zip + +# ------------------------------------------------------------ +# Optional browser +# ------------------------------------------------------------ + +# Uncomment if required: +# +# apk add firefox +# +# or: +# +# apk add chromium + +# ------------------------------------------------------------ +# Enable services +# ------------------------------------------------------------ + +echo "➜ Enable desktop services" + +rc-update add dbus default +rc-update add seatd default +rc-update add networkmanager default +rc-update add bluetooth default +rc-update add greetd default + +# ------------------------------------------------------------ +# Start services when possible +# ------------------------------------------------------------ + +echo "➜ Start services" + +rc-service dbus start 2>/dev/null || true +rc-service seatd start 2>/dev/null || true +rc-service networkmanager start 2>/dev/null || true +rc-service bluetooth start 2>/dev/null || true + +# Do NOT start greetd here. +# It will start automatically after reboot. + +# ------------------------------------------------------------ +# Final information +# ------------------------------------------------------------ echo -echo "==================================================" -echo " УСТАНОВКА ЗАВЕРШЕНА" -echo "==================================================" +echo "==============================================" +echo " ★★★ Alpine + labwc installation complete ★★★" +echo "==============================================" echo -echo "[+] Пользователь: $USER_NAME" -echo "[+] LabWC установлен." -echo "[+] NetworkManager установлен." -echo "[+] seatd установлен." -echo "[+] PipeWire установлен." -echo "[+] SDDM установлен." -echo "[+] zenith-cli установлен." +echo "Desktop user: $USER" echo -echo "[!] network-manager-applet не является обязательным." -echo "[!] Если его нет — NetworkManager всё равно работает." +echo "IMPORTANT:" echo -echo "[!] Перезагрузка:" +echo "Set a password for the desktop user:" +echo +echo " passwd $USER" +echo +echo "Then reboot:" echo echo " reboot" echo -echo "После перезагрузки:" +echo "After reboot:" 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 " greetd -> labwc" echo -echo "zenith-cli:" +echo "Wayland compositor : labwc" +echo "Seat manager : seatd" +echo "Login manager : greetd" +echo "Audio : PipeWire + WirePlumber" +echo "Network : NetworkManager" echo -echo " zenith-cli" -echo -echo "==================================================" \ No newline at end of file +echo "==============================================" \ No newline at end of file