This commit is contained in:
2026-09-08 10:21:12 +06:00
parent e33cfb48f9
commit 456ec37991
2 changed files with 478 additions and 622 deletions
-164
View File
@@ -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
+455 -435
View File
@@ -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
# Ищем первого не-root пользователя с домашней директорией
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
fi
fi
if [ ! -f /etc/alpine-release ]; then if ! id "$TARGET_USER" >/dev/null 2>&1; then
echo "ERROR: this script is intended for Alpine Linux." error "Пользователь '$TARGET_USER' не существует"
exit 1 exit 1
fi fi
ALPINE_VERSION="$(cut -d'.' -f1,2 /etc/alpine-release)" USER_UID=$(id -u "$TARGET_USER")
USER_GID=$(id -g "$TARGET_USER")
USER_HOME=$(getent passwd "$TARGET_USER" | cut -d: -f6)
echo "Alpine version: $ALPINE_VERSION" info "Целевой пользователь: $TARGET_USER (uid=$USER_UID, home=$USER_HOME)"
echo
# ------------------------------------------------------------ # --- Добавление community репозитория ---
# Repositories info "Настройка репозиториев..."
# ------------------------------------------------------------ ALPINE_VERSION=$(cat /etc/alpine-release | cut -d'.' -f1,2)
COMMUNITY_URL="https://dl-cdn.alpinelinux.org/alpine/v${ALPINE_VERSION}/community"
echo "➜ Configure Alpine repositories" if ! grep -q "$COMMUNITY_URL" /etc/apk/repositories 2>/dev/null; then
echo "$COMMUNITY_URL" >> /etc/apk/repositories
cat > /etc/apk/repositories << EOF ok "Добавлен community репозиторий"
https://dl-cdn.alpinelinux.org/alpine/v${ALPINE_VERSION}/main else
https://dl-cdn.alpinelinux.org/alpine/v${ALPINE_VERSION}/community ok "Community репозиторий уже настроен"
EOF fi
apk update apk update
# ------------------------------------------------------------ # --- Установка пакетов ---
# Desktop user info "Установка labwc и зависимостей..."
# ------------------------------------------------------------
USER="user" PACKAGES="
labwc
echo "➜ Create desktop user: $USER" wlroots
seatd
if ! id "$USER" >/dev/null 2>&1; then seatd-launch
adduser -D "$USER" elogind
fi polkit-elogind
wayland-utils
# sudo wayland-protocols
apk add sudo mesa-dri-gallium
mesa-va-gallium
cat > "/etc/sudoers.d/$USER" << EOF libseat
$USER ALL=(ALL) NOPASSWD: ALL xf86-video-qxl
EOF xf86-video-virtio
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 xwayland
foot
# ------------------------------------------------------------ waybar
# Useful Wayland desktop applications wofi
# ------------------------------------------------------------ swaybg
swayidle
echo "➜ Install Wayland utilities" swaylock
mako
apk add \ grim
foot \
rofi \
swaybg \
swayidle \
swaylock \
waybar \
wl-clipboard \
grim \
slurp slurp
wl-clipboard
xdg-utils
font-dejavu
font-noto
adwaita-icon-theme
papirus-icon-theme
pipewire
wireplumber
pipewire-pulse
pavucontrol
"
# ------------------------------------------------------------ apk add $PACKAGES
# File manager / removable devices ok "Пакеты установлены"
# ------------------------------------------------------------
echo "➜ Install filesystem / removable device support" # --- Настройка служб ---
info "Настройка служб..."
apk add \ rc-update add seatd default 2>/dev/null || true
gvfs \ rc-update add elogind default 2>/dev/null || true
gvfs-fuse \ rc-update add pipewire default 2>/dev/null || true
gvfs-smb \
udisks2 \
udisks2-openrc \
fuse-openrc
# ------------------------------------------------------------ rc-service seatd start 2>/dev/null || true
# NetworkManager rc-service elogind start 2>/dev/null || true
# ------------------------------------------------------------
echo "➜ Install NetworkManager" ok "Службы настроены"
apk add \ # --- Права пользователя ---
networkmanager \ info "Настройка прав пользователя..."
networkmanager-openrc \
networkmanager-tui
rc-update add networkmanager default # Добавляем пользователя в необходимые группы
for group in seat video audio input; do
# ------------------------------------------------------------ if getent group "$group" >/dev/null 2>&1; then
# Seat management adduser "$TARGET_USER" "$group" 2>/dev/null || true
# ------------------------------------------------------------
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
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 fi
if [ ! -d "$XDG_RUNTIME_DIR" ]; then
rc-update add greetd default mkdir -p "$XDG_RUNTIME_DIR"
chmod 700 "$XDG_RUNTIME_DIR"
# ------------------------------------------------------------
# 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
# Wallpaper
if command -v swaybg >/dev/null 2>&1; then
swaybg -c 202020 &
fi
# Panel
if command -v waybar >/dev/null 2>&1; then
waybar &
fi
# NetworkManager tray
if command -v nm-applet >/dev/null 2>&1; then
nm-applet &
fi
# Bluetooth tray
if command -v blueman-applet >/dev/null 2>&1; then
blueman-applet &
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 "=============================================="