e
This commit is contained in:
@@ -1,164 +0,0 @@
|
|||||||
#install guide labwc configure by s13bby
|
|
||||||
|
|
||||||
|
|
||||||
#after install needed
|
|
||||||
|
|
||||||
#uncomment community repos
|
|
||||||
echo "http://dl-cdn.alpinelinux.org/alpine/v3.24/community" >> /etc/apk/repositories
|
|
||||||
|
|
||||||
#or
|
|
||||||
|
|
||||||
#sed -i 's/#\(.*community\)/\1/' /etc/apk/repositories
|
|
||||||
|
|
||||||
apk update
|
|
||||||
apk add sudo nano
|
|
||||||
adduser ivan wheel
|
|
||||||
nano /etc/sudoers
|
|
||||||
|
|
||||||
#and uncomment line %wheel ALL=(ALL) ALL
|
|
||||||
|
|
||||||
|
|
||||||
#first needed packages
|
|
||||||
|
|
||||||
sudo
|
|
||||||
nano
|
|
||||||
git
|
|
||||||
|
|
||||||
#after install this packages
|
|
||||||
|
|
||||||
#clone repo ; change directory to clone repo ; add executable flag to install.sh ; execute install.sh
|
|
||||||
git clone https://zenithcode.duckdns.org/s13bby/labwc-alpine ; cd labwc-alpine ; chmod +x install.sh ; ./install.sh
|
|
||||||
|
|
||||||
#install.sh include all stuff write bellow
|
|
||||||
|
|
||||||
|
|
||||||
#install this packages
|
|
||||||
gcc
|
|
||||||
g++
|
|
||||||
curl
|
|
||||||
libcurl
|
|
||||||
opencv
|
|
||||||
|
|
||||||
#prepare before install wayland stack
|
|
||||||
|
|
||||||
#install this packages
|
|
||||||
|
|
||||||
mesa
|
|
||||||
mesa-dri
|
|
||||||
libinput
|
|
||||||
seatd
|
|
||||||
dbus
|
|
||||||
polkit
|
|
||||||
|
|
||||||
#after install do
|
|
||||||
|
|
||||||
addgroup $USER video
|
|
||||||
addgroup $USER input
|
|
||||||
addgroup $USER seat
|
|
||||||
|
|
||||||
rc-update add seatd default
|
|
||||||
rc-service seatd start
|
|
||||||
|
|
||||||
#after install this packages
|
|
||||||
|
|
||||||
labwc
|
|
||||||
alacritty (or another terminal emulator what do u like)
|
|
||||||
waybar
|
|
||||||
mako
|
|
||||||
swaybg
|
|
||||||
wofi
|
|
||||||
font-noto
|
|
||||||
font-dejavu
|
|
||||||
wl-clipboard
|
|
||||||
xdg-desktop-portal
|
|
||||||
xdg-desktop-portal-gtk
|
|
||||||
pipewire
|
|
||||||
wireplumber
|
|
||||||
alsa-utils
|
|
||||||
networkmanager
|
|
||||||
nm-applet
|
|
||||||
pcmanfm-gtk3
|
|
||||||
firefox
|
|
||||||
swaylock
|
|
||||||
|
|
||||||
|
|
||||||
#enviroment config labwc
|
|
||||||
#
|
|
||||||
#XDG_CURRENT_DESKTOP=labwc
|
|
||||||
#XDG_SESSION_TYPE=wayland
|
|
||||||
#MOZ_ENABLE_WAYLAND=1
|
|
||||||
#QT_QPA_PLATFORM=wayland
|
|
||||||
#SDL_VIDEODRIVER=wayland
|
|
||||||
|
|
||||||
|
|
||||||
#autostart config labwc
|
|
||||||
#
|
|
||||||
#nm-applet &
|
|
||||||
#waybar &
|
|
||||||
#wireplumber &
|
|
||||||
#pipewire &
|
|
||||||
#wofi &
|
|
||||||
|
|
||||||
#clone repo ; change directory to clone repo ; add executable flag to build.sh ; execute build.sh
|
|
||||||
git clone https://zenithcode.duckdns.org/s13bby/zenith-cli.git ; cd zenith-cli/ ; chmod +x build.sh ; ./build.sh
|
|
||||||
|
|
||||||
mkdir -p ~/.local/bin ; cp zenith-cli ~/.local/bin/ ; chmod +x ~/.local/bin/zenith-cli
|
|
||||||
|
|
||||||
echo $PATH | grep -o ".local/bin"
|
|
||||||
|
|
||||||
#if output in none, do
|
|
||||||
|
|
||||||
#export PATH="$HOME/.local/bin:$PATH"
|
|
||||||
|
|
||||||
|
|
||||||
#add automatic start labwc
|
|
||||||
|
|
||||||
nano /etc/inittab
|
|
||||||
|
|
||||||
#find line
|
|
||||||
#tty1::respawn:/sbin/getty 38400 tty1
|
|
||||||
|
|
||||||
#change to, where "username" is ur username
|
|
||||||
#tty1::respawn:/bin/sh -c "while true; do /sbin/getty -a username 38400 tty1; done"
|
|
||||||
|
|
||||||
|
|
||||||
nano ~/.profile
|
|
||||||
|
|
||||||
#and write this
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
+470
-450
@@ -1,528 +1,548 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
# =============================================================================
|
||||||
|
# Labwc Installer for Alpine Linux (KVM/QEMU)
|
||||||
|
# =============================================================================
|
||||||
|
# Запускать от root: sh install_labwc.sh [username]
|
||||||
|
# Если username не указан — используется текущий не-root пользователь
|
||||||
|
# =============================================================================
|
||||||
|
|
||||||
# ============================================================
|
set -e
|
||||||
# Alpine Linux + labwc Desktop Installer
|
|
||||||
# Wayland / labwc / seatd / greetd / NetworkManager / PipeWire
|
|
||||||
# ============================================================
|
|
||||||
|
|
||||||
echo "=============================================="
|
# --- Цвета ---
|
||||||
echo " Alpine Linux -> labwc Desktop"
|
RED='\033[0;31m'
|
||||||
echo "=============================================="
|
GREEN='\033[0;32m'
|
||||||
echo
|
YELLOW='\033[1;33m'
|
||||||
|
BLUE='\033[0;34m'
|
||||||
|
NC='\033[0m' # No Color
|
||||||
|
|
||||||
# ------------------------------------------------------------
|
info() { printf "${BLUE}[INFO]${NC} %s\n" "$1"; }
|
||||||
# Check root
|
ok() { printf "${GREEN}[OK]${NC} %s\n" "$1"; }
|
||||||
# ------------------------------------------------------------
|
warn() { printf "${YELLOW}[WARN]${NC} %s\n" "$1"; }
|
||||||
|
error() { printf "${RED}[ERROR]${NC} %s\n" "$1"; }
|
||||||
|
|
||||||
if [ "$(id -u)" != "0" ]; then
|
# --- Проверка root ---
|
||||||
echo "ERROR: run this script as root."
|
if [ "$(id -u)" -ne 0 ]; then
|
||||||
|
error "Этот скрипт нужно запускать от root (su или sudo)"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# ------------------------------------------------------------
|
# --- Определение пользователя ---
|
||||||
# Check Alpine
|
if [ -n "$1" ]; then
|
||||||
# ------------------------------------------------------------
|
TARGET_USER="$1"
|
||||||
|
else
|
||||||
if [ ! -f /etc/alpine-release ]; then
|
# Ищем первого не-root пользователя с домашней директорией
|
||||||
echo "ERROR: this script is intended for Alpine Linux."
|
TARGET_USER=$(awk -F: '$3 >= 1000 && $3 < 65534 {print $1; exit}' /etc/passwd)
|
||||||
|
if [ -z "$TARGET_USER" ]; then
|
||||||
|
error "Не найден обычный пользователь. Создайте пользователя: adduser username"
|
||||||
|
error "Или запустите: sh $0 username"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
|
||||||
|
|
||||||
ALPINE_VERSION="$(cut -d'.' -f1,2 /etc/alpine-release)"
|
|
||||||
|
|
||||||
echo "Alpine version: $ALPINE_VERSION"
|
|
||||||
echo
|
|
||||||
|
|
||||||
# ------------------------------------------------------------
|
|
||||||
# Repositories
|
|
||||||
# ------------------------------------------------------------
|
|
||||||
|
|
||||||
echo "➜ Configure Alpine repositories"
|
|
||||||
|
|
||||||
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
|
|
||||||
# ------------------------------------------------------------
|
|
||||||
|
|
||||||
USER="user"
|
|
||||||
|
|
||||||
echo "➜ Create desktop user: $USER"
|
|
||||||
|
|
||||||
if ! id "$USER" >/dev/null 2>&1; then
|
|
||||||
adduser -D "$USER"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# sudo
|
|
||||||
apk add sudo
|
|
||||||
|
|
||||||
cat > "/etc/sudoers.d/$USER" << EOF
|
|
||||||
$USER ALL=(ALL) NOPASSWD: ALL
|
|
||||||
EOF
|
|
||||||
|
|
||||||
chmod 0440 "/etc/sudoers.d/$USER"
|
|
||||||
|
|
||||||
echo "✓ User $USER created"
|
|
||||||
echo
|
|
||||||
|
|
||||||
# ------------------------------------------------------------
|
|
||||||
# Basic desktop infrastructure
|
|
||||||
# ------------------------------------------------------------
|
|
||||||
|
|
||||||
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
|
||||||
fi
|
fi
|
||||||
|
|
||||||
rc-update add greetd default
|
if ! id "$TARGET_USER" >/dev/null 2>&1; then
|
||||||
|
error "Пользователь '$TARGET_USER' не существует"
|
||||||
# ------------------------------------------------------------
|
exit 1
|
||||||
# XDG user directories
|
|
||||||
# ------------------------------------------------------------
|
|
||||||
|
|
||||||
echo "➜ Create XDG user directories"
|
|
||||||
|
|
||||||
apk add xdg-user-dirs
|
|
||||||
|
|
||||||
su - "$USER" -c "xdg-user-dirs-update" 2>/dev/null || true
|
|
||||||
|
|
||||||
# ------------------------------------------------------------
|
|
||||||
# labwc configuration
|
|
||||||
# ------------------------------------------------------------
|
|
||||||
|
|
||||||
echo "➜ Create labwc configuration"
|
|
||||||
|
|
||||||
mkdir -p "/home/$USER/.config/labwc"
|
|
||||||
|
|
||||||
cat > "/home/$USER/.config/labwc/autostart" << 'EOF'
|
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# 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
|
fi
|
||||||
|
|
||||||
# Wallpaper
|
USER_UID=$(id -u "$TARGET_USER")
|
||||||
if command -v swaybg >/dev/null 2>&1; then
|
USER_GID=$(id -g "$TARGET_USER")
|
||||||
swaybg -c 202020 &
|
USER_HOME=$(getent passwd "$TARGET_USER" | cut -d: -f6)
|
||||||
|
|
||||||
|
info "Целевой пользователь: $TARGET_USER (uid=$USER_UID, home=$USER_HOME)"
|
||||||
|
|
||||||
|
# --- Добавление community репозитория ---
|
||||||
|
info "Настройка репозиториев..."
|
||||||
|
ALPINE_VERSION=$(cat /etc/alpine-release | cut -d'.' -f1,2)
|
||||||
|
COMMUNITY_URL="https://dl-cdn.alpinelinux.org/alpine/v${ALPINE_VERSION}/community"
|
||||||
|
|
||||||
|
if ! grep -q "$COMMUNITY_URL" /etc/apk/repositories 2>/dev/null; then
|
||||||
|
echo "$COMMUNITY_URL" >> /etc/apk/repositories
|
||||||
|
ok "Добавлен community репозиторий"
|
||||||
|
else
|
||||||
|
ok "Community репозиторий уже настроен"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Panel
|
apk update
|
||||||
if command -v waybar >/dev/null 2>&1; then
|
|
||||||
waybar &
|
|
||||||
fi
|
|
||||||
|
|
||||||
# NetworkManager tray
|
# --- Установка пакетов ---
|
||||||
if command -v nm-applet >/dev/null 2>&1; then
|
info "Установка labwc и зависимостей..."
|
||||||
nm-applet &
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Bluetooth tray
|
PACKAGES="
|
||||||
if command -v blueman-applet >/dev/null 2>&1; then
|
labwc
|
||||||
blueman-applet &
|
wlroots
|
||||||
|
seatd
|
||||||
|
seatd-launch
|
||||||
|
elogind
|
||||||
|
polkit-elogind
|
||||||
|
wayland-utils
|
||||||
|
wayland-protocols
|
||||||
|
mesa-dri-gallium
|
||||||
|
mesa-va-gallium
|
||||||
|
libseat
|
||||||
|
xf86-video-qxl
|
||||||
|
xf86-video-virtio
|
||||||
|
xwayland
|
||||||
|
foot
|
||||||
|
waybar
|
||||||
|
wofi
|
||||||
|
swaybg
|
||||||
|
swayidle
|
||||||
|
swaylock
|
||||||
|
mako
|
||||||
|
grim
|
||||||
|
slurp
|
||||||
|
wl-clipboard
|
||||||
|
xdg-utils
|
||||||
|
font-dejavu
|
||||||
|
font-noto
|
||||||
|
adwaita-icon-theme
|
||||||
|
papirus-icon-theme
|
||||||
|
pipewire
|
||||||
|
wireplumber
|
||||||
|
pipewire-pulse
|
||||||
|
pavucontrol
|
||||||
|
"
|
||||||
|
|
||||||
|
apk add $PACKAGES
|
||||||
|
ok "Пакеты установлены"
|
||||||
|
|
||||||
|
# --- Настройка служб ---
|
||||||
|
info "Настройка служб..."
|
||||||
|
|
||||||
|
rc-update add seatd default 2>/dev/null || true
|
||||||
|
rc-update add elogind default 2>/dev/null || true
|
||||||
|
rc-update add pipewire default 2>/dev/null || true
|
||||||
|
|
||||||
|
rc-service seatd start 2>/dev/null || true
|
||||||
|
rc-service elogind start 2>/dev/null || true
|
||||||
|
|
||||||
|
ok "Службы настроены"
|
||||||
|
|
||||||
|
# --- Права пользователя ---
|
||||||
|
info "Настройка прав пользователя..."
|
||||||
|
|
||||||
|
# Добавляем пользователя в необходимые группы
|
||||||
|
for group in seat video audio input; do
|
||||||
|
if getent group "$group" >/dev/null 2>&1; then
|
||||||
|
adduser "$TARGET_USER" "$group" 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
ok "Пользователь $TARGET_USER добавлен в группы"
|
||||||
|
|
||||||
|
# --- Создание XDG_RUNTIME_DIR ---
|
||||||
|
info "Настройка XDG_RUNTIME_DIR..."
|
||||||
|
|
||||||
|
RUNDIR="/run/user/$USER_UID"
|
||||||
|
mkdir -p "$RUNDIR"
|
||||||
|
chown "$TARGET_USER:$TARGET_USER" "$RUNDIR"
|
||||||
|
chmod 700 "$RUNDIR"
|
||||||
|
|
||||||
|
# Добавляем в /etc/profile.d для persistency
|
||||||
|
mkdir -p /etc/profile.d
|
||||||
|
cat > /etc/profile.d/xdg-runtime.sh << 'EOF'
|
||||||
|
if [ -z "$XDG_RUNTIME_DIR" ]; then
|
||||||
|
export XDG_RUNTIME_DIR=/run/user/$(id -u)
|
||||||
|
fi
|
||||||
|
if [ ! -d "$XDG_RUNTIME_DIR" ]; then
|
||||||
|
mkdir -p "$XDG_RUNTIME_DIR"
|
||||||
|
chmod 700 "$XDG_RUNTIME_DIR"
|
||||||
fi
|
fi
|
||||||
EOF
|
EOF
|
||||||
|
chmod 644 /etc/profile.d/xdg-runtime.sh
|
||||||
|
ok "XDG_RUNTIME_DIR настроен"
|
||||||
|
|
||||||
chmod +x "/home/$USER/.config/labwc/autostart"
|
# --- Конфигурация labwc ---
|
||||||
|
info "Создание конфигурации labwc..."
|
||||||
|
|
||||||
# ------------------------------------------------------------
|
LABWC_DIR="$USER_HOME/.config/labwc"
|
||||||
# Basic labwc menu
|
mkdir -p "$LABWC_DIR"
|
||||||
# ------------------------------------------------------------
|
|
||||||
|
|
||||||
cat > "/home/$USER/.config/labwc/menu.xml" << 'EOF'
|
# rc.xml — только если не существует
|
||||||
|
if [ ! -f "$LABWC_DIR/rc.xml" ]; then
|
||||||
|
cat > "$LABWC_DIR/rc.xml" << 'EOF'
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<labwc_config>
|
||||||
|
<core>
|
||||||
|
<gap>8</gap>
|
||||||
|
<adaptiveSync>no</adaptiveSync>
|
||||||
|
</core>
|
||||||
|
|
||||||
|
<theme>
|
||||||
|
<name>Clearlooks</name>
|
||||||
|
<cornerRadius>8</cornerRadius>
|
||||||
|
<font place="ActiveWindow">
|
||||||
|
<name>sans</name>
|
||||||
|
<size>10</size>
|
||||||
|
</font>
|
||||||
|
<font place="MenuItem">
|
||||||
|
<name>sans</name>
|
||||||
|
<size>10</size>
|
||||||
|
</font>
|
||||||
|
<font place="OnScreenDisplay">
|
||||||
|
<name>sans</name>
|
||||||
|
<size>10</size>
|
||||||
|
</font>
|
||||||
|
</theme>
|
||||||
|
|
||||||
|
<keyboard>
|
||||||
|
<default />
|
||||||
|
<keybind key="W-Return">
|
||||||
|
<action name="Execute" command="foot" />
|
||||||
|
</keybind>
|
||||||
|
<keybind key="W-d">
|
||||||
|
<action name="Execute" command="wofi --show drun" />
|
||||||
|
</keybind>
|
||||||
|
<keybind key="W-Shift-d">
|
||||||
|
<action name="Execute" command="wofi --show run" />
|
||||||
|
</keybind>
|
||||||
|
<keybind key="W-l">
|
||||||
|
<action name="Execute" command="swaylock -f -c 000000" />
|
||||||
|
</keybind>
|
||||||
|
<keybind key="W-q">
|
||||||
|
<action name="Close" />
|
||||||
|
</keybind>
|
||||||
|
<keybind key="W-Shift-e">
|
||||||
|
<action name="Exit" />
|
||||||
|
</keybind>
|
||||||
|
<keybind key="W-f">
|
||||||
|
<action name="ToggleMaximize" />
|
||||||
|
</keybind>
|
||||||
|
<keybind key="W-Left">
|
||||||
|
<action name="SnapToEdge" direction="left" />
|
||||||
|
</keybind>
|
||||||
|
<keybind key="W-Right">
|
||||||
|
<action name="SnapToEdge" direction="right" />
|
||||||
|
</keybind>
|
||||||
|
<keybind key="W-1">
|
||||||
|
<action name="GoToDesktop" to="1" />
|
||||||
|
</keybind>
|
||||||
|
<keybind key="W-2">
|
||||||
|
<action name="GoToDesktop" to="2" />
|
||||||
|
</keybind>
|
||||||
|
<keybind key="W-3">
|
||||||
|
<action name="GoToDesktop" to="3" />
|
||||||
|
</keybind>
|
||||||
|
<keybind key="W-4">
|
||||||
|
<action name="GoToDesktop" to="4" />
|
||||||
|
</keybind>
|
||||||
|
<keybind key="Print">
|
||||||
|
<action name="Execute" command="grim -g $(slurp) $HOME/Pictures/screenshot-$(date +%Y%m%d-%H%M%S).png" />
|
||||||
|
</keybind>
|
||||||
|
</keyboard>
|
||||||
|
|
||||||
|
<mouse>
|
||||||
|
<default />
|
||||||
|
<context name="Frame">
|
||||||
|
<mousebind button="W-Left" action="Press">
|
||||||
|
<action name="Focus" />
|
||||||
|
<action name="Raise" />
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="W-Left" action="Drag">
|
||||||
|
<action name="Move" />
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="W-Right" action="Drag">
|
||||||
|
<action name="Resize" />
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
</mouse>
|
||||||
|
</labwc_config>
|
||||||
|
EOF
|
||||||
|
ok "Создан $LABWC_DIR/rc.xml"
|
||||||
|
else
|
||||||
|
warn "$LABWC_DIR/rc.xml уже существует, пропускаю"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# autostart — только если не существует
|
||||||
|
if [ ! -f "$LABWC_DIR/autostart" ]; then
|
||||||
|
cat > "$LABWC_DIR/autostart" << 'EOF'
|
||||||
|
#!/bin/sh
|
||||||
|
# Автозапуск labwc
|
||||||
|
|
||||||
|
# Фон
|
||||||
|
swaybg -c '#2e3440' &
|
||||||
|
|
||||||
|
# Панель
|
||||||
|
waybar &
|
||||||
|
|
||||||
|
# Уведомления
|
||||||
|
mako &
|
||||||
|
|
||||||
|
# Буфер обмена
|
||||||
|
wl-paste --watch cliphist store &
|
||||||
|
|
||||||
|
# Экранный блокировщик при простое
|
||||||
|
swayidle -w \
|
||||||
|
timeout 300 'swaylock -f -c 000000' \
|
||||||
|
timeout 600 'wlopm --off \*' \
|
||||||
|
resume 'wlopm --on \*' \
|
||||||
|
before-sleep 'swaylock -f -c 000000' &
|
||||||
|
EOF
|
||||||
|
chmod +x "$LABWC_DIR/autostart"
|
||||||
|
ok "Создан $LABWC_DIR/autostart"
|
||||||
|
else
|
||||||
|
warn "$LABWC_DIR/autostart уже существует, пропускаю"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# menu.xml — контекстное меню
|
||||||
|
if [ ! -f "$LABWC_DIR/menu.xml" ]; then
|
||||||
|
cat > "$LABWC_DIR/menu.xml" << 'EOF'
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<openbox_menu>
|
<openbox_menu>
|
||||||
<menu id="root-menu" label="labwc">
|
<menu id="root-menu" label="Labwc">
|
||||||
<item label="Terminal">
|
<item label="Terminal">
|
||||||
<action name="Execute">
|
<action name="Execute" command="foot" />
|
||||||
<command>foot</command>
|
|
||||||
</action>
|
|
||||||
</item>
|
</item>
|
||||||
|
<item label="Browser">
|
||||||
<item label="Application launcher">
|
<action name="Execute" command="firefox" />
|
||||||
<action name="Execute">
|
|
||||||
<command>rofi -show drun</command>
|
|
||||||
</action>
|
|
||||||
</item>
|
</item>
|
||||||
|
|
||||||
<separator />
|
<separator />
|
||||||
|
<item label="Reconfigure">
|
||||||
<item label="Reload labwc">
|
<action name="Reconfigure" />
|
||||||
<action name="Reconfigure"/>
|
|
||||||
</item>
|
</item>
|
||||||
|
|
||||||
<item label="Exit">
|
<item label="Exit">
|
||||||
<action name="Exit"/>
|
<action name="Exit" />
|
||||||
</item>
|
</item>
|
||||||
</menu>
|
</menu>
|
||||||
</openbox_menu>
|
</openbox_menu>
|
||||||
EOF
|
EOF
|
||||||
|
ok "Создан $LABWC_DIR/menu.xml"
|
||||||
|
else
|
||||||
|
warn "$LABWC_DIR/menu.xml уже существует, пропускаю"
|
||||||
|
fi
|
||||||
|
|
||||||
# ------------------------------------------------------------
|
# --- Настройка waybar ---
|
||||||
# Basic keyboard shortcuts
|
info "Настройка waybar..."
|
||||||
# ------------------------------------------------------------
|
|
||||||
|
|
||||||
cat > "/home/$USER/.config/labwc/rc.xml" << 'EOF'
|
WAYBAR_DIR="$USER_HOME/.config/waybar"
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
mkdir -p "$WAYBAR_DIR"
|
||||||
|
|
||||||
<labwc_config>
|
if [ ! -f "$WAYBAR_DIR/config" ]; then
|
||||||
|
cat > "$WAYBAR_DIR/config" << 'EOF'
|
||||||
<keyboard>
|
{
|
||||||
<default />
|
|
||||||
|
|
||||||
<keybind key="W-Return">
|
|
||||||
<action name="Execute">
|
|
||||||
<command>foot</command>
|
|
||||||
</action>
|
|
||||||
</keybind>
|
|
||||||
|
|
||||||
<keybind key="W-d">
|
|
||||||
<action name="Execute">
|
|
||||||
<command>rofi -show drun</command>
|
|
||||||
</action>
|
|
||||||
</keybind>
|
|
||||||
|
|
||||||
<keybind key="W-l">
|
|
||||||
<action name="Execute">
|
|
||||||
<command>swaylock</command>
|
|
||||||
</action>
|
|
||||||
</keybind>
|
|
||||||
|
|
||||||
<keybind key="W-q">
|
|
||||||
<action name="Close"/>
|
|
||||||
</keybind>
|
|
||||||
|
|
||||||
</keyboard>
|
|
||||||
|
|
||||||
</labwc_config>
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# ------------------------------------------------------------
|
|
||||||
# Waybar configuration
|
|
||||||
# ------------------------------------------------------------
|
|
||||||
|
|
||||||
mkdir -p "/home/$USER/.config/waybar"
|
|
||||||
|
|
||||||
cat > "/home/$USER/.config/waybar/config" << 'EOF'
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"layer": "top",
|
"layer": "top",
|
||||||
"position": "top",
|
"position": "top",
|
||||||
"modules-left": [
|
"height": 30,
|
||||||
"wlr/workspaces"
|
"spacing": 4,
|
||||||
],
|
"modules-left": ["sway/workspaces", "sway/window"],
|
||||||
"modules-center": [
|
"modules-center": ["clock"],
|
||||||
"clock"
|
"modules-right": ["pulseaudio", "network", "cpu", "memory", "tray"],
|
||||||
],
|
|
||||||
"modules-right": [
|
|
||||||
"network",
|
|
||||||
"pulseaudio",
|
|
||||||
"battery"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
EOF
|
|
||||||
|
|
||||||
cat > "/home/$USER/.config/waybar/style.css" << 'EOF'
|
"clock": {
|
||||||
|
"format": "{:%Y-%m-%d %H:%M}",
|
||||||
|
"tooltip-format": "<big>{:%Y %B}</big>\n<tt>{calendar}</tt>",
|
||||||
|
"format-alt": "{:%H:%M:%S}"
|
||||||
|
},
|
||||||
|
|
||||||
|
"cpu": {
|
||||||
|
"format": "CPU {usage}%",
|
||||||
|
"tooltip": false
|
||||||
|
},
|
||||||
|
|
||||||
|
"memory": {
|
||||||
|
"format": "RAM {}%"
|
||||||
|
},
|
||||||
|
|
||||||
|
"network": {
|
||||||
|
"format-wifi": "WiFi {signalStrength}%",
|
||||||
|
"format-ethernet": "Eth {ipaddr}/{cidr}",
|
||||||
|
"tooltip-format": "{ifname} via {gwaddr}",
|
||||||
|
"format-linked": "{ifname} (No IP)",
|
||||||
|
"format-disconnected": "Disconnected",
|
||||||
|
"format-alt": "{ifname}: {ipaddr}/{cidr}"
|
||||||
|
},
|
||||||
|
|
||||||
|
"pulseaudio": {
|
||||||
|
"format": "Vol {volume}%",
|
||||||
|
"format-muted": "Muted",
|
||||||
|
"on-click": "pavucontrol"
|
||||||
|
},
|
||||||
|
|
||||||
|
"tray": {
|
||||||
|
"spacing": 10
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
ok "Создан $WAYBAR_DIR/config"
|
||||||
|
else
|
||||||
|
warn "$WAYBAR_DIR/config уже существует, пропускаю"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f "$WAYBAR_DIR/style.css" ]; then
|
||||||
|
cat > "$WAYBAR_DIR/style.css" << 'EOF'
|
||||||
* {
|
* {
|
||||||
border: none;
|
border: none;
|
||||||
border-radius: 0;
|
border-radius: 0;
|
||||||
font-family: sans-serif;
|
font-family: "DejaVu Sans", sans-serif;
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
|
min-height: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
window#waybar {
|
window#waybar {
|
||||||
background: rgba(30, 30, 30, 0.95);
|
background-color: #2e3440;
|
||||||
color: #ffffff;
|
color: #d8dee9;
|
||||||
|
transition-property: background-color;
|
||||||
|
transition-duration: .5s;
|
||||||
}
|
}
|
||||||
|
|
||||||
#workspaces button {
|
#workspaces button {
|
||||||
padding: 0 8px;
|
padding: 0 10px;
|
||||||
color: #aaaaaa;
|
color: #d8dee9;
|
||||||
}
|
}
|
||||||
|
|
||||||
#workspaces button.active {
|
#workspaces button.focused {
|
||||||
color: #ffffff;
|
background-color: #4c566a;
|
||||||
background: #444444;
|
color: #eceff4;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button.urgent {
|
||||||
|
background-color: #bf616a;
|
||||||
}
|
}
|
||||||
|
|
||||||
#clock,
|
#clock,
|
||||||
|
#cpu,
|
||||||
|
#memory,
|
||||||
#network,
|
#network,
|
||||||
#pulseaudio,
|
#pulseaudio,
|
||||||
#battery {
|
#tray {
|
||||||
padding: 0 10px;
|
padding: 0 10px;
|
||||||
|
margin: 0 4px;
|
||||||
|
color: #d8dee9;
|
||||||
|
}
|
||||||
|
|
||||||
|
#clock {
|
||||||
|
background-color: #434c5e;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tray {
|
||||||
|
background-color: #3b4252;
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
|
ok "Создан $WAYBAR_DIR/style.css"
|
||||||
|
else
|
||||||
|
warn "$WAYBAR_DIR/style.css уже существует, пропускаю"
|
||||||
|
fi
|
||||||
|
|
||||||
# ------------------------------------------------------------
|
# --- Настройка foot (терминал) ---
|
||||||
# Permissions
|
info "Настройка foot..."
|
||||||
# ------------------------------------------------------------
|
|
||||||
|
|
||||||
echo "➜ Fix user permissions"
|
FOOT_DIR="$USER_HOME/.config/foot"
|
||||||
|
mkdir -p "$FOOT_DIR"
|
||||||
|
|
||||||
chown -R "$USER:$USER" "/home/$USER/.config"
|
if [ ! -f "$FOOT_DIR/foot.ini" ]; then
|
||||||
|
cat > "$FOOT_DIR/foot.ini" << 'EOF'
|
||||||
|
[main]
|
||||||
|
font=monospace:size=10
|
||||||
|
pad=8x8
|
||||||
|
|
||||||
# ------------------------------------------------------------
|
[scrollback]
|
||||||
# Useful software
|
lines=10000
|
||||||
# ------------------------------------------------------------
|
|
||||||
|
|
||||||
echo "★ Install basic software"
|
[cursor]
|
||||||
|
style=block
|
||||||
|
blink=no
|
||||||
|
|
||||||
apk add \
|
[colors]
|
||||||
htop \
|
alpha=0.95
|
||||||
neofetch \
|
background=2e3440
|
||||||
curl \
|
foreground=d8dee9
|
||||||
wget \
|
regular0=3b4252
|
||||||
git \
|
regular1=bf616a
|
||||||
nano \
|
regular2=a3be8c
|
||||||
less \
|
regular3=ebcb8b
|
||||||
file \
|
regular4=81a1c1
|
||||||
unzip \
|
regular5=b48ead
|
||||||
zip
|
regular6=88c0d0
|
||||||
|
regular7=e5e9f0
|
||||||
|
EOF
|
||||||
|
ok "Создан $FOOT_DIR/foot.ini"
|
||||||
|
else
|
||||||
|
warn "$FOOT_DIR/foot.ini уже существует, пропускаю"
|
||||||
|
fi
|
||||||
|
|
||||||
# ------------------------------------------------------------
|
# --- Настройка mako (уведомления) ---
|
||||||
# Optional browser
|
info "Настройка mako..."
|
||||||
# ------------------------------------------------------------
|
|
||||||
|
|
||||||
# Uncomment if required:
|
MAKO_DIR="$USER_HOME/.config/mako"
|
||||||
#
|
mkdir -p "$MAKO_DIR"
|
||||||
# apk add firefox
|
|
||||||
#
|
|
||||||
# or:
|
|
||||||
#
|
|
||||||
# apk add chromium
|
|
||||||
|
|
||||||
# ------------------------------------------------------------
|
if [ ! -f "$MAKO_DIR/config" ]; then
|
||||||
# Enable services
|
cat > "$MAKO_DIR/config" << 'EOF'
|
||||||
# ------------------------------------------------------------
|
font=DejaVu Sans 10
|
||||||
|
background-color=#2e3440
|
||||||
|
text-color=#d8dee9
|
||||||
|
width=300
|
||||||
|
height=100
|
||||||
|
margin=10
|
||||||
|
padding=10
|
||||||
|
border-size=2
|
||||||
|
border-color=#4c566a
|
||||||
|
border-radius=8
|
||||||
|
progress-color=over #88c0d0
|
||||||
|
icons=1
|
||||||
|
max-icon-size=48
|
||||||
|
layer=overlay
|
||||||
|
anchor=top-right
|
||||||
|
default-timeout=5000
|
||||||
|
EOF
|
||||||
|
ok "Создан $MAKO_DIR/config"
|
||||||
|
else
|
||||||
|
warn "$MAKO_DIR/config уже существует, пропускаю"
|
||||||
|
fi
|
||||||
|
|
||||||
echo "➜ Enable desktop services"
|
# --- Настройка автозапуска labwc при входе ---
|
||||||
|
info "Настройка автозапуска labwc..."
|
||||||
|
|
||||||
rc-update add dbus default
|
BASH_PROFILE="$USER_HOME/.bash_profile"
|
||||||
rc-update add seatd default
|
AUTOSTART_MARKER="# === labwc autostart ==="
|
||||||
rc-update add networkmanager default
|
|
||||||
rc-update add bluetooth default
|
|
||||||
rc-update add greetd default
|
|
||||||
|
|
||||||
# ------------------------------------------------------------
|
if [ -f "$BASH_PROFILE" ] && grep -q "$AUTOSTART_MARKER" "$BASH_PROFILE" 2>/dev/null; then
|
||||||
# Start services when possible
|
warn "Автозапуск labwc уже настроен в .bash_profile"
|
||||||
# ------------------------------------------------------------
|
else
|
||||||
|
cat >> "$BASH_PROFILE" << EOF
|
||||||
|
|
||||||
echo "➜ Start services"
|
$AUTOSTART_MARKER
|
||||||
|
if [ -z "\$WAYLAND_DISPLAY" ] && [ "\$(tty)" = "/dev/tty1" ]; then
|
||||||
|
exec labwc
|
||||||
|
fi
|
||||||
|
# === end labwc autostart ===
|
||||||
|
EOF
|
||||||
|
ok "Автозапуск labwc добавлен в .bash_profile"
|
||||||
|
fi
|
||||||
|
|
||||||
rc-service dbus start 2>/dev/null || true
|
# --- Права на конфиги ---
|
||||||
rc-service seatd start 2>/dev/null || true
|
chown -R "$TARGET_USER:$TARGET_USER" "$USER_HOME/.config"
|
||||||
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.
|
mkdir -p "$USER_HOME/Pictures" "$USER_HOME/Downloads"
|
||||||
|
chown "$TARGET_USER:$TARGET_USER" "$USER_HOME/Pictures" "$USER_HOME/Downloads"
|
||||||
|
|
||||||
# ------------------------------------------------------------
|
# --- Финал ---
|
||||||
# Final information
|
echo ""
|
||||||
# ------------------------------------------------------------
|
echo "============================================================"
|
||||||
|
echo " Labwc установлен и настроен!"
|
||||||
echo
|
echo "============================================================"
|
||||||
echo "=============================================="
|
echo ""
|
||||||
echo " ★★★ Alpine + labwc installation complete ★★★"
|
echo "Пользователь: $TARGET_USER"
|
||||||
echo "=============================================="
|
echo ""
|
||||||
echo
|
echo "Горячие клавиши:"
|
||||||
echo "Desktop user: $USER"
|
echo " Win+Enter — Терминал (foot)"
|
||||||
echo
|
echo " Win+D — Меню приложений (wofi)"
|
||||||
echo "IMPORTANT:"
|
echo " Win+Shift+D — Запуск команды (wofi --show run)"
|
||||||
echo
|
echo " Win+L — Блокировка экрана"
|
||||||
echo "Set a password for the desktop user:"
|
echo " Win+Q — Закрыть окно"
|
||||||
echo
|
echo " Win+F — Развернуть окно"
|
||||||
echo " passwd $USER"
|
echo " Win+1..4 — Переключение рабочих столов"
|
||||||
echo
|
echo " Print — Скриншот области"
|
||||||
echo "Then reboot:"
|
echo " Win+Shift+E — Выход из labwc"
|
||||||
echo
|
echo ""
|
||||||
echo " reboot"
|
echo "Действия после установки:"
|
||||||
echo
|
echo " 1. Перезагрузитесь: reboot"
|
||||||
echo "After reboot:"
|
echo " 2. Войдите как $TARGET_USER на tty1"
|
||||||
echo
|
echo " 3. Labwc запустится автоматически"
|
||||||
echo " greetd -> labwc"
|
echo ""
|
||||||
echo
|
echo "Если labwc не запустился автоматически:"
|
||||||
echo "Wayland compositor : labwc"
|
echo " login: $TARGET_USER"
|
||||||
echo "Seat manager : seatd"
|
echo " $ labwc"
|
||||||
echo "Login manager : greetd"
|
echo ""
|
||||||
echo "Audio : PipeWire + WirePlumber"
|
ok "Установка завершена!"
|
||||||
echo "Network : NetworkManager"
|
|
||||||
echo
|
|
||||||
echo "=============================================="
|
|
||||||
Reference in New Issue
Block a user