diff --git a/README.md b/README.md
index ef557bd..6274cb2 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,215 @@
-# labwc-alpine
+# Labwc-Alpine
-адаптированный репозиторий s13bby/labwc для дистрибутива alpine linux
\ No newline at end of file
+Адаптированная конфигурация оконного менеджера **Labwc** для дистрибутива **Alpine Linux** от [s13bby](https://zenithcode.duckdns.org/s13bby/labwc-alpine).
+
+---
+
+## 🚀 Установка Alpine Linux
+
+### 1. Запуск установки
+
+```bash
+setup-alpine
+```
+
+Следуйте инструкциям установщика. После завершения перезагрузите систему:
+
+
+```bash
+reboot
+```
+
+### 2. Первоначальная настройка
+
+Войдите в систему как **root** и выполните:
+
+```bash
+apk update
+apk upgrade
+```
+
+### 3. Установка базовых пакетов
+
+```bash
+apk add nano sudo git
+```
+
+> **Примечание:** Вы можете использовать любой другой текстовый редактор вместо `nano`.
+
+### 4. Создание пользователя
+
+Если вы ещё не создали пользователя во время установки:
+
+```bash
+adduser <имя_пользователя>
+```
+
+Добавьте пользователя в группу `wheel` (для доступа к `sudo`):
+
+```bash
+addgroup <имя_пользователя> wheel
+```
+
+### 5. Настройка sudo
+
+Отредактируйте файл `/etc/sudoers`:
+
+```bash
+nano /etc/sudoers
+```
+
+Раскомментируйте строку:
+
+```
+%wheel ALL=(ALL) ALL
+```
+
+Сохраните и выйдите из редактора.
+
+---
+
+## 🖥️ Установка и настройка Labwc
+
+### 1. Вход в систему от имени пользователя
+
+```bash
+su - <имя_пользователя>
+```
+
+### 2. Установка рабочего окружения
+
+Запустите скрипт настройки рабочего стола:
+
+```bash
+sudo setup-desktop
+```
+
+Выберите **`xfce`** в качестве временного окружения.
+
+Дождитесь завершения установки и перезагрузитесь:
+
+```bash
+reboot
+```
+
+### 3. Установка Labwc и терминала
+
+Войдите в среду Xfce и установите Labwc:
+
+```bash
+apk add labwc alacritty
+```
+
+Выйдите из сессии Xfce и войдите в Labwc.
+
+> **Готово!** Теперь у вас есть базовый Labwc.
+
+---
+
+## ⚙️ Установка конфигурации
+
+Клонируйте репозиторий с готовой конфигурацией:
+
+```bash
+git clone https://zenithcode.duckdns.org/s13bby/labwc-alpine.git
+```
+
+Перейдите в директорию проекта:
+
+```bash
+cd labwc-alpine/
+```
+
+Сделайте установочный скрипт исполняемым:
+
+```bash
+chmod +x install.sh
+```
+
+Запустите установку:
+
+```bash
+sh ./install.sh
+```
+
+---
+
+## 📁 Структура проекта
+
+```
+labwc-alpine/
+├── backgrounds/ # Фоновые изображения
+│ ├── alpine_bg_dark_sign.jpg
+│ ├── alpine_bg_light_sign.jpg
+│ ├── fuji_dark.jpg
+│ └── fuji_light.jpg
+│
+├── configs/ # Конфигурационные файлы
+│ ├── hypr/ # Hyprland (если используется)
+│ │ ├── hypridle.conf
+│ │ ├── hyprland.lua
+│ │ └── hyprlock.conf
+│ │
+│ ├── labwc/ # Основная конфигурация Labwc
+│ │ ├── autostart
+│ │ ├── environment
+│ │ ├── menu.xml
+│ │ ├── rc.xml
+│ │ ├── shutdown
+│ │ ├── themerc-override
+│ │ └── update_theme.sh
+│ │
+│ ├── waybar/ # Панель Waybar
+│ │ ├── config.jsonc
+│ │ ├── style.css
+│ │ └── v2raya-toggle.sh
+│ │
+│ ├── wofi/ # Лаунчер Wofi
+│ │ ├── cliphist-img.sh
+│ │ └── style.css
+│ │
+│ ├── qt6ct/ # Настройки Qt6
+│ │ └── qt6ct.conf
+│ │
+│ └── alacritty/ # Терминал Alacritty
+│ └── alacritty.toml
+│
+├── palettes/ # Цветовые палитры
+│ ├── alpine/
+│ │ ├── alpine_palette_dark
+│ │ ├── alpine_palette_light
+│ │ ├── alpine_palette_pastel_dark
+│ │ └── alpine_palette_pastel_light
+│ │
+│ └── fuji/
+│ ├── fuji_palette_dark
+│ ├── fuji_palette_light
+│ ├── fuji_palette_pastel_dark
+│ └── fuji_palette_pastel_light
+│
+├── fonts/ # Шрифты
+│ └── Widock TRIAL Bold.otf
+│
+├── install.sh # Главный установочный скрипт
+├── LICENSE # Лицензия
+└── README.md # Этот файл
+```
+
+---
+
+## 🗑️ Удаление Xfce
+
+После успешной настройки Labwc вы можете удалить Xfce:
+
+```bash
+apk del xfce4 xfce4-scenarios xfce4-terminal orage thunar
+apk del .xfce4-rundeps 2>/dev/null || true
+```
+
+---
+
+## 📄 Лицензия
+
+Этот проект распространяется под лицензией **MIT**. Подробнее см. в файле [LICENSE](LICENSE).
+
+---
diff --git a/alpine_install.sh b/alpine_install.sh
deleted file mode 100644
index f81474b..0000000
--- a/alpine_install.sh
+++ /dev/null
@@ -1,548 +0,0 @@
-#!/bin/sh
-# =============================================================================
-# Labwc Installer for Alpine Linux (KVM/QEMU)
-# =============================================================================
-# Запускать от root: sh install_labwc.sh [username]
-# Если username не указан — используется текущий не-root пользователь
-# =============================================================================
-
-set -e
-
-# --- Цвета ---
-RED='\033[0;31m'
-GREEN='\033[0;32m'
-YELLOW='\033[1;33m'
-BLUE='\033[0;34m'
-NC='\033[0m' # No Color
-
-info() { printf "${BLUE}[INFO]${NC} %s\n" "$1"; }
-ok() { printf "${GREEN}[OK]${NC} %s\n" "$1"; }
-warn() { printf "${YELLOW}[WARN]${NC} %s\n" "$1"; }
-error() { printf "${RED}[ERROR]${NC} %s\n" "$1"; }
-
-# --- Проверка root ---
-if [ "$(id -u)" -ne 0 ]; then
- error "Этот скрипт нужно запускать от root (su или sudo)"
- exit 1
-fi
-
-# --- Определение пользователя ---
-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 ! id "$TARGET_USER" >/dev/null 2>&1; then
- error "Пользователь '$TARGET_USER' не существует"
- exit 1
-fi
-
-USER_UID=$(id -u "$TARGET_USER")
-USER_GID=$(id -g "$TARGET_USER")
-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
-
-apk update
-
-# --- Установка пакетов ---
-info "Установка labwc и зависимостей..."
-
-PACKAGES="
- labwc
- 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
-EOF
-chmod 644 /etc/profile.d/xdg-runtime.sh
-ok "XDG_RUNTIME_DIR настроен"
-
-# --- Конфигурация labwc ---
-info "Создание конфигурации labwc..."
-
-LABWC_DIR="$USER_HOME/.config/labwc"
-mkdir -p "$LABWC_DIR"
-
-# rc.xml — только если не существует
-if [ ! -f "$LABWC_DIR/rc.xml" ]; then
- cat > "$LABWC_DIR/rc.xml" << 'EOF'
-
-
-
- 8
- no
-
-
-
- Clearlooks
- 8
-
- sans
- 10
-
-
- sans
- 10
-
-
- sans
- 10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-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'
-
-
-
-
-EOF
- ok "Создан $LABWC_DIR/menu.xml"
-else
- warn "$LABWC_DIR/menu.xml уже существует, пропускаю"
-fi
-
-# --- Настройка waybar ---
-info "Настройка waybar..."
-
-WAYBAR_DIR="$USER_HOME/.config/waybar"
-mkdir -p "$WAYBAR_DIR"
-
-if [ ! -f "$WAYBAR_DIR/config" ]; then
- cat > "$WAYBAR_DIR/config" << 'EOF'
-{
- "layer": "top",
- "position": "top",
- "height": 30,
- "spacing": 4,
- "modules-left": ["sway/workspaces", "sway/window"],
- "modules-center": ["clock"],
- "modules-right": ["pulseaudio", "network", "cpu", "memory", "tray"],
-
- "clock": {
- "format": "{:%Y-%m-%d %H:%M}",
- "tooltip-format": "{:%Y %B}\n{calendar}",
- "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-radius: 0;
- font-family: "DejaVu Sans", sans-serif;
- font-size: 13px;
- min-height: 0;
-}
-
-window#waybar {
- background-color: #2e3440;
- color: #d8dee9;
- transition-property: background-color;
- transition-duration: .5s;
-}
-
-#workspaces button {
- padding: 0 10px;
- color: #d8dee9;
-}
-
-#workspaces button.focused {
- background-color: #4c566a;
- color: #eceff4;
-}
-
-#workspaces button.urgent {
- background-color: #bf616a;
-}
-
-#clock,
-#cpu,
-#memory,
-#network,
-#pulseaudio,
-#tray {
- padding: 0 10px;
- margin: 0 4px;
- color: #d8dee9;
-}
-
-#clock {
- background-color: #434c5e;
-}
-
-#tray {
- background-color: #3b4252;
-}
-EOF
- ok "Создан $WAYBAR_DIR/style.css"
-else
- warn "$WAYBAR_DIR/style.css уже существует, пропускаю"
-fi
-
-# --- Настройка foot (терминал) ---
-info "Настройка foot..."
-
-FOOT_DIR="$USER_HOME/.config/foot"
-mkdir -p "$FOOT_DIR"
-
-if [ ! -f "$FOOT_DIR/foot.ini" ]; then
- cat > "$FOOT_DIR/foot.ini" << 'EOF'
-[main]
-font=monospace:size=10
-pad=8x8
-
-[scrollback]
-lines=10000
-
-[cursor]
-style=block
-blink=no
-
-[colors]
-alpha=0.95
-background=2e3440
-foreground=d8dee9
-regular0=3b4252
-regular1=bf616a
-regular2=a3be8c
-regular3=ebcb8b
-regular4=81a1c1
-regular5=b48ead
-regular6=88c0d0
-regular7=e5e9f0
-EOF
- ok "Создан $FOOT_DIR/foot.ini"
-else
- warn "$FOOT_DIR/foot.ini уже существует, пропускаю"
-fi
-
-# --- Настройка mako (уведомления) ---
-info "Настройка mako..."
-
-MAKO_DIR="$USER_HOME/.config/mako"
-mkdir -p "$MAKO_DIR"
-
-if [ ! -f "$MAKO_DIR/config" ]; then
- 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
-
-# --- Настройка автозапуска labwc при входе ---
-info "Настройка автозапуска labwc..."
-
-BASH_PROFILE="$USER_HOME/.bash_profile"
-AUTOSTART_MARKER="# === labwc autostart ==="
-
-if [ -f "$BASH_PROFILE" ] && grep -q "$AUTOSTART_MARKER" "$BASH_PROFILE" 2>/dev/null; then
- warn "Автозапуск labwc уже настроен в .bash_profile"
-else
- cat >> "$BASH_PROFILE" << EOF
-
-$AUTOSTART_MARKER
-if [ -z "\$WAYLAND_DISPLAY" ] && [ "\$(tty)" = "/dev/tty1" ]; then
- exec labwc
-fi
-# === end labwc autostart ===
-EOF
- ok "Автозапуск labwc добавлен в .bash_profile"
-fi
-
-# --- Права на конфиги ---
-chown -R "$TARGET_USER:$TARGET_USER" "$USER_HOME/.config"
-
-# --- Создание директорий ---
-mkdir -p "$USER_HOME/Pictures" "$USER_HOME/Downloads"
-chown "$TARGET_USER:$TARGET_USER" "$USER_HOME/Pictures" "$USER_HOME/Downloads"
-
-# --- Финал ---
-echo ""
-echo "============================================================"
-echo " Labwc установлен и настроен!"
-echo "============================================================"
-echo ""
-echo "Пользователь: $TARGET_USER"
-echo ""
-echo "Горячие клавиши:"
-echo " Win+Enter — Терминал (foot)"
-echo " Win+D — Меню приложений (wofi)"
-echo " Win+Shift+D — Запуск команды (wofi --show run)"
-echo " Win+L — Блокировка экрана"
-echo " Win+Q — Закрыть окно"
-echo " Win+F — Развернуть окно"
-echo " Win+1..4 — Переключение рабочих столов"
-echo " Print — Скриншот области"
-echo " Win+Shift+E — Выход из labwc"
-echo ""
-echo "Действия после установки:"
-echo " 1. Перезагрузитесь: reboot"
-echo " 2. Войдите как $TARGET_USER на tty1"
-echo " 3. Labwc запустится автоматически"
-echo ""
-echo "Если labwc не запустился автоматически:"
-echo " login: $TARGET_USER"
-echo " $ labwc"
-echo ""
-ok "Установка завершена!"
\ No newline at end of file
diff --git a/backgrounds/voidlinux_bg_dark.png b/backgrounds/voidlinux_bg_dark.png
new file mode 100644
index 0000000..1e91a4e
Binary files /dev/null and b/backgrounds/voidlinux_bg_dark.png differ
diff --git a/backgrounds/voidlinux_bg_light.png b/backgrounds/voidlinux_bg_light.png
new file mode 100644
index 0000000..4c0ffd4
Binary files /dev/null and b/backgrounds/voidlinux_bg_light.png differ
diff --git a/configs/____/hypr/hypridle.conf b/configs/____/hypr/hypridle.conf
new file mode 100644
index 0000000..f3afb09
--- /dev/null
+++ b/configs/____/hypr/hypridle.conf
@@ -0,0 +1,17 @@
+general {
+ # Команда, которая выполняется при вызове блокировки через систему/dbus
+ lock_cmd = hyprlock
+}
+
+# ПРАВИЛО 1: Блокировка экрана через 5 минут бездействия
+listener {
+ timeout = 300 # 5 минут (300 секунд)
+ on-timeout = hyprlock # Только блокируем экран
+}
+
+# ПРАВИЛО 2: Выключение мониторов через 5.5 минут (через 30 секунд после блокировки)
+listener {
+ timeout = 330 # 5 минут 30 секунд
+ on-timeout = wlopm --off \* # Гасим все мониторы
+ on-resume = wlopm --on \* # Включаем при активности
+}
diff --git a/configs/____/hypr/hyprland.lua b/configs/____/hypr/hyprland.lua
new file mode 100644
index 0000000..bb98383
--- /dev/null
+++ b/configs/____/hypr/hyprland.lua
@@ -0,0 +1,364 @@
+
+-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+-- AUTOGENERATED HYPRLAND CONFIG. --
+-- EDIT THIS CONFIG ACCORDING TO THE WIKI INSTRUCTIONS. --
+-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+hl.config({ autogenerated = true }) -- remove this line to remove the warning
+
+-- This is an example Hyprland Lua config file.
+-- Refer to the wiki for more information.
+-- https://wiki.hypr.land/Configuring/Start/
+
+-- Please note not all available settings / options are set here.
+-- For a full list, see the wiki
+
+-- You can (and should!!) split this configuration into multiple files
+-- Create your files separately and then require them like this:
+-- require("myColors")
+
+
+------------------
+---- MONITORS ----
+------------------
+
+-- See https://wiki.hypr.land/Configuring/Basics/Monitors/
+hl.monitor({
+ output = "",
+ mode = "preferred",
+ position = "auto",
+ scale = "auto",
+})
+
+
+---------------------
+---- MY PROGRAMS ----
+---------------------
+
+-- Set programs that you use
+local terminal = "kitty"
+local fileManager = "dolphin"
+local menu = "hyprlauncher"
+
+
+-------------------
+---- AUTOSTART ----
+-------------------
+
+-- See https://wiki.hypr.land/Configuring/Basics/Autostart/
+
+-- Autostart necessary processes (like notifications daemons, status bars, etc.)
+-- Or execute your favorite apps at launch like this:
+--
+-- hl.on("hyprland.start", function ()
+-- hl.exec_cmd(terminal)
+-- hl.exec_cmd("nm-applet")
+-- hl.exec_cmd("waybar & hyprpaper & firefox")
+-- end)
+
+
+-------------------------------
+---- ENVIRONMENT VARIABLES ----
+-------------------------------
+
+-- See https://wiki.hypr.land/Configuring/Advanced-and-Cool/Environment-variables/
+
+hl.env("XCURSOR_SIZE", "24")
+hl.env("HYPRCURSOR_SIZE", "24")
+
+
+-----------------------
+----- PERMISSIONS -----
+-----------------------
+
+-- See https://wiki.hypr.land/Configuring/Advanced-and-Cool/Permissions/
+-- Please note permission changes here require a Hyprland restart and are not applied on-the-fly
+-- for security reasons
+
+-- hl.config({
+-- ecosystem = {
+-- enforce_permissions = true,
+-- },
+-- })
+
+-- hl.permission("/usr/(bin|local/bin)/grim", "screencopy", "allow")
+-- hl.permission("/usr/(lib|libexec|lib64)/xdg-desktop-portal-hyprland", "screencopy", "allow")
+-- hl.permission("/usr/(bin|local/bin)/hyprpm", "plugin", "allow")
+
+
+-----------------------
+---- LOOK AND FEEL ----
+-----------------------
+
+-- Refer to https://wiki.hypr.land/Configuring/Basics/Variables/
+hl.config({
+ general = {
+ gaps_in = 5,
+ gaps_out = 20,
+
+ border_size = 2,
+
+ col = {
+ active_border = { colors = {"rgba(33ccffee)", "rgba(00ff99ee)"}, angle = 45 },
+ inactive_border = "rgba(595959aa)",
+ },
+
+ -- Set to true to enable resizing windows by clicking and dragging on borders and gaps
+ resize_on_border = false,
+
+ -- Please see https://wiki.hypr.land/Configuring/Advanced-and-Cool/Tearing/ before you turn this on
+ allow_tearing = false,
+
+ layout = "dwindle",
+ },
+
+ decoration = {
+ rounding = 10,
+ rounding_power = 2,
+
+ -- Change transparency of focused and unfocused windows
+ active_opacity = 1.0,
+ inactive_opacity = 1.0,
+
+ shadow = {
+ enabled = true,
+ range = 4,
+ render_power = 3,
+ color = 0xee1a1a1a,
+ },
+
+ blur = {
+ enabled = true,
+ size = 3,
+ passes = 1,
+ vibrancy = 0.1696,
+ },
+ },
+
+ animations = {
+ enabled = true,
+ },
+})
+
+-- Default curves and animations, see https://wiki.hypr.land/Configuring/Advanced-and-Cool/Animations/
+hl.curve("easeOutQuint", { type = "bezier", points = { {0.23, 1}, {0.32, 1} } })
+hl.curve("easeInOutCubic", { type = "bezier", points = { {0.65, 0.05}, {0.36, 1} } })
+hl.curve("linear", { type = "bezier", points = { {0, 0}, {1, 1} } })
+hl.curve("almostLinear", { type = "bezier", points = { {0.5, 0.5}, {0.75, 1} } })
+hl.curve("quick", { type = "bezier", points = { {0.15, 0}, {0.1, 1} } })
+
+-- Default springs
+hl.curve("easy", { type = "spring", mass = 1, stiffness = 238.1191, dampening = 24.21279333 })
+
+hl.animation({ leaf = "global", enabled = true, speed = 10, bezier = "default" })
+hl.animation({ leaf = "border", enabled = true, speed = 5.39, bezier = "easeOutQuint" })
+hl.animation({ leaf = "windows", enabled = true, speed = 4.79, spring = "easy" })
+hl.animation({ leaf = "windowsIn", enabled = true, speed = 4.1, spring = "easy", style = "popin 87%" })
+hl.animation({ leaf = "windowsOut", enabled = true, speed = 1.49, bezier = "linear", style = "popin 87%" })
+hl.animation({ leaf = "fadeIn", enabled = true, speed = 1.73, bezier = "almostLinear" })
+hl.animation({ leaf = "fadeOut", enabled = true, speed = 1.46, bezier = "almostLinear" })
+hl.animation({ leaf = "fade", enabled = true, speed = 3.03, bezier = "quick" })
+hl.animation({ leaf = "layers", enabled = true, speed = 3.81, bezier = "easeOutQuint" })
+hl.animation({ leaf = "layersIn", enabled = true, speed = 4, bezier = "easeOutQuint", style = "fade" })
+hl.animation({ leaf = "layersOut", enabled = true, speed = 1.5, bezier = "linear", style = "fade" })
+hl.animation({ leaf = "fadeLayersIn", enabled = true, speed = 1.79, bezier = "almostLinear" })
+hl.animation({ leaf = "fadeLayersOut", enabled = true, speed = 1.39, bezier = "almostLinear" })
+hl.animation({ leaf = "workspaces", enabled = true, speed = 1.94, bezier = "almostLinear", style = "fade" })
+hl.animation({ leaf = "workspacesIn", enabled = true, speed = 1.21, bezier = "almostLinear", style = "fade" })
+hl.animation({ leaf = "workspacesOut", enabled = true, speed = 1.94, bezier = "almostLinear", style = "fade" })
+hl.animation({ leaf = "zoomFactor", enabled = true, speed = 7, bezier = "quick" })
+
+-- Ref https://wiki.hypr.land/Configuring/Basics/Workspace-Rules/
+-- "Smart gaps" / "No gaps when only"
+-- uncomment all if you wish to use that.
+-- hl.workspace_rule({ workspace = "w[tv1]", gaps_out = 0, gaps_in = 0 })
+-- hl.workspace_rule({ workspace = "f[1]", gaps_out = 0, gaps_in = 0 })
+-- hl.window_rule({
+-- name = "no-gaps-wtv1",
+-- match = { float = false, workspace = "w[tv1]" },
+-- border_size = 0,
+-- rounding = 0,
+-- })
+-- hl.window_rule({
+-- name = "no-gaps-f1",
+-- match = { float = false, workspace = "f[1]" },
+-- border_size = 0,
+-- rounding = 0,
+-- })
+
+-- See https://wiki.hypr.land/Configuring/Layouts/Dwindle-Layout/ for more
+hl.config({
+ dwindle = {
+ preserve_split = true, -- You probably want this
+ },
+})
+
+-- See https://wiki.hypr.land/Configuring/Layouts/Master-Layout/ for more
+hl.config({
+ master = {
+ new_status = "master",
+ },
+})
+
+-- See https://wiki.hypr.land/Configuring/Layouts/Scrolling-Layout/ for more
+hl.config({
+ scrolling = {
+ fullscreen_on_one_column = true,
+ },
+})
+
+----------------
+---- MISC ----
+----------------
+
+hl.config({
+ misc = {
+ force_default_wallpaper = -1, -- Set to 0 or 1 to disable the anime mascot wallpapers
+ disable_hyprland_logo = false, -- If true disables the random hyprland logo / anime girl background. :(
+ },
+})
+
+
+---------------
+---- INPUT ----
+---------------
+
+hl.config({
+ input = {
+ kb_layout = "us",
+ kb_variant = "",
+ kb_model = "",
+ kb_options = "",
+ kb_rules = "",
+
+ follow_mouse = 1,
+
+ sensitivity = 0, -- -1.0 - 1.0, 0 means no modification.
+
+ touchpad = {
+ natural_scroll = false,
+ },
+ },
+})
+
+hl.gesture({
+ fingers = 3,
+ direction = "horizontal",
+ action = "workspace"
+})
+
+-- Example per-device config
+-- See https://wiki.hypr.land/Configuring/Advanced-and-Cool/Devices/ for more
+hl.device({
+ name = "epic-mouse-v1",
+ sensitivity = -0.5,
+})
+
+
+---------------------
+---- KEYBINDINGS ----
+---------------------
+
+local mainMod = "SUPER" -- Sets "Windows" key as main modifier
+
+-- Example binds, see https://wiki.hypr.land/Configuring/Basics/Binds/ for more
+hl.bind(mainMod .. " + Q", hl.dsp.exec_cmd(terminal))
+local closeWindowBind = hl.bind(mainMod .. " + C", hl.dsp.window.close())
+-- closeWindowBind:set_enabled(false)
+hl.bind(mainMod .. " + M", hl.dsp.exec_cmd("command -v hyprshutdown >/dev/null 2>&1 && hyprshutdown || hyprctl dispatch 'hl.dsp.exit()'"))
+hl.bind(mainMod .. " + E", hl.dsp.exec_cmd(fileManager))
+hl.bind(mainMod .. " + V", hl.dsp.window.float({ action = "toggle" }))
+hl.bind(mainMod .. " + R", hl.dsp.exec_cmd(menu))
+hl.bind(mainMod .. " + P", hl.dsp.window.pseudo())
+hl.bind(mainMod .. " + J", hl.dsp.layout("togglesplit")) -- dwindle only
+
+-- Move focus with mainMod + arrow keys
+hl.bind(mainMod .. " + left", hl.dsp.focus({ direction = "left" }))
+hl.bind(mainMod .. " + right", hl.dsp.focus({ direction = "right" }))
+hl.bind(mainMod .. " + up", hl.dsp.focus({ direction = "up" }))
+hl.bind(mainMod .. " + down", hl.dsp.focus({ direction = "down" }))
+
+-- Switch workspaces with mainMod + [0-9]
+-- Move active window to a workspace with mainMod + SHIFT + [0-9]
+for i = 1, 10 do
+ local key = i % 10 -- 10 maps to key 0
+ hl.bind(mainMod .. " + " .. key, hl.dsp.focus({ workspace = i}))
+ hl.bind(mainMod .. " + SHIFT + " .. key, hl.dsp.window.move({ workspace = i }))
+end
+
+-- Example special workspace (scratchpad)
+hl.bind(mainMod .. " + S", hl.dsp.workspace.toggle_special("magic"))
+hl.bind(mainMod .. " + SHIFT + S", hl.dsp.window.move({ workspace = "special:magic" }))
+
+-- Scroll through existing workspaces with mainMod + scroll
+hl.bind(mainMod .. " + mouse_down", hl.dsp.focus({ workspace = "e+1" }))
+hl.bind(mainMod .. " + mouse_up", hl.dsp.focus({ workspace = "e-1" }))
+
+-- Move/resize windows with mainMod + LMB/RMB and dragging
+hl.bind(mainMod .. " + mouse:272", hl.dsp.window.drag(), { mouse = true })
+hl.bind(mainMod .. " + mouse:273", hl.dsp.window.resize(), { mouse = true })
+
+-- Laptop multimedia keys for volume and LCD brightness
+hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd("wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+"), { locked = true, repeating = true })
+hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd("wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"), { locked = true, repeating = true })
+hl.bind("XF86AudioMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"), { locked = true, repeating = true })
+hl.bind("XF86AudioMicMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"), { locked = true, repeating = true })
+hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd("brightnessctl -e4 -n2 set 5%+"), { locked = true, repeating = true })
+hl.bind("XF86MonBrightnessDown",hl.dsp.exec_cmd("brightnessctl -e4 -n2 set 5%-"), { locked = true, repeating = true })
+
+-- Requires playerctl
+hl.bind("XF86AudioNext", hl.dsp.exec_cmd("playerctl next"), { locked = true })
+hl.bind("XF86AudioPause", hl.dsp.exec_cmd("playerctl play-pause"), { locked = true })
+hl.bind("XF86AudioPlay", hl.dsp.exec_cmd("playerctl play-pause"), { locked = true })
+hl.bind("XF86AudioPrev", hl.dsp.exec_cmd("playerctl previous"), { locked = true })
+
+
+--------------------------------
+---- WINDOWS AND WORKSPACES ----
+--------------------------------
+
+-- See https://wiki.hypr.land/Configuring/Basics/Window-Rules/
+-- and https://wiki.hypr.land/Configuring/Basics/Workspace-Rules/
+
+-- Example window rules that are useful
+
+local suppressMaximizeRule = hl.window_rule({
+ -- Ignore maximize requests from all apps. You'll probably like this.
+ name = "suppress-maximize-events",
+ match = { class = ".*" },
+
+ suppress_event = "maximize",
+})
+-- suppressMaximizeRule:set_enabled(false)
+
+hl.window_rule({
+ -- Fix some dragging issues with XWayland
+ name = "fix-xwayland-drags",
+ match = {
+ class = "^$",
+ title = "^$",
+ xwayland = true,
+ float = true,
+ fullscreen = false,
+ pin = false,
+ },
+
+ no_focus = true,
+})
+
+-- Layer rules also return a handle.
+-- local overlayLayerRule = hl.layer_rule({
+-- name = "no-anim-overlay",
+-- match = { namespace = "^my-overlay$" },
+-- no_anim = true,
+-- })
+-- overlayLayerRule:set_enabled(false)
+
+-- Hyprland-run windowrule
+hl.window_rule({
+ name = "move-hyprland-run",
+ match = { class = "hyprland-run" },
+
+ move = "20 monitor_h-120",
+ float = true,
+})
diff --git a/configs/____/hypr/hyprlock.conf b/configs/____/hypr/hyprlock.conf
new file mode 100644
index 0000000..dd3aba7
--- /dev/null
+++ b/configs/____/hypr/hyprlock.conf
@@ -0,0 +1,91 @@
+source = /home/ivan/.config/aether/theme/hyprlock.conf
+$font_time = Widock TRIAL
+$font = JetBrainsMono Nerd Font
+
+general {
+ hide_cursor = false
+}
+
+background {
+ monitor =
+ path = screenshot # Сделает скриншот текущего экрана
+ blur_passes = 3 # Эффект размытия (оптимально 2-3)
+ blur_size = 7
+
+ # ЗАТЕМНЕНИЕ: Снижаем яркость картинки (0.0 — полностью черный, 1.0 — исходная яркость)
+ # Значение 0.5 уменьшит яркость скриншота ровно наполовину
+ brightness = 0.5
+ noise = 0.05
+}
+
+input-field {
+ monitor =
+ rounding = 0
+ size = 150, 50
+ outline_thickness = 2
+ font_family = $font
+ dots_size = 0.25
+ dots_spacing = 0.15
+ dots_center = true
+ fade_on_empty = false
+ placeholder_text = you shall not pass
+ hide_input = false
+ position = 0, -100
+ halign = center
+ valign = center
+
+ # Используем точные переменные из файла Aether
+ font_color = $font_color
+ inner_color = $inner_color
+ outer_color = $outer_color
+ check_color = $check_color
+}
+
+# ЧАСЫ
+label {
+ monitor =
+ text = cmd[update:1000] echo -e "$(date +"%H")"
+ color = $font_color
+ font_size = 150
+ font_family = $font_time
+ position = 0, -250
+ halign = center
+ valign = top
+ shadow_passes = 0
+}
+
+label {
+ monitor =
+ text = cmd[update:1000] echo -e "$(date +"%M")"
+ color = $font_color
+ font_size = 150
+ font_family = $font_time
+ position = 0, -400
+ halign = center
+ valign = top
+ shadow_passes = 0
+}
+
+# ДАТА
+label {
+ monitor =
+ text = cmd[update:1000] echo "$(date +'%A')"
+ color = $font_color
+ font_size = 18
+ font_family = $font_time
+ position = 0, -20
+ halign = center
+ valign = center
+ shadow_passes = 0
+}
+label {
+ monitor =
+ text = cmd[update:1000] echo "$(date +'%d %B')"
+ color = $font_color
+ font_size = 18
+ font_family = $font_time
+ position = 0, -40
+ halign = center
+ valign = center
+ shadow_passes = 0
+}
\ No newline at end of file
diff --git a/configs/____/ironbar/config.json b/configs/____/ironbar/config.json
new file mode 100644
index 0000000..7b4d481
--- /dev/null
+++ b/configs/____/ironbar/config.json
@@ -0,0 +1,25 @@
+{
+ "name": "spotify-popup",
+ "position": "top",
+ "height": 0,
+ "layer": "background",
+ "exclusive_zone": false,
+ "popup_gap": 0,
+ "popup_autohide": true,
+ "css_path": "style.css",
+
+ "margin": {
+ "right": 400
+ },
+
+ "end": [
+ {
+ "type": "music",
+ "name": "spotify-music",
+ "player_type": "mpris",
+ "format": "",
+ "show_status_icon": false,
+ "cover_image_size": 120
+ }
+ ]
+}
\ No newline at end of file
diff --git a/configs/____/ironbar/style.css b/configs/____/ironbar/style.css
new file mode 100644
index 0000000..708d4a4
--- /dev/null
+++ b/configs/____/ironbar/style.css
@@ -0,0 +1,37 @@
+@define-color background #0e0e06;
+@define-color foreground #c9c7e1;
+
+* {
+ font-family: "JetBrainsMono Nerd Font", "Font Awesome 7 Free", "Font Awesome 7 Free Solid", "Font Awesome 7 Brands", sans-serif;
+ /*font-size: 12px;*/
+ /*border: none;*/
+ border-radius: 0;
+}
+window#ironbar {
+ background: #0e0e06;
+}
+#spotify-popup {
+ background: rgba(14, 14, 6, 0.75);
+ color: #c9c7e1;
+ min-height: 28px;
+ padding: 0;
+ margin: 0;
+}
+
+#spotify-music {
+ padding: 0 10px;
+ color: #c9c7e1;
+}
+
+#spotify-music .icon {
+ display: none;
+}
+
+#spotify-music .cover {
+ display: none;
+}
+
+
+#spotify-music {
+ background: red !important;
+}
\ No newline at end of file
diff --git a/configs/____/labwc/autostart b/configs/____/labwc/autostart
new file mode 100644
index 0000000..b4dc0cf
--- /dev/null
+++ b/configs/____/labwc/autostart
@@ -0,0 +1,23 @@
+# синхронизация окружения
+dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=labwc &
+systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP &
+
+# базовые сервисы
+waybar &
+mako &
+hypridle &
+hyprpolkitagent &
+ironbar &
+
+# буфер обмена
+wl-paste --type text --watch cliphist store &
+wl-paste --type image --watch cliphist store &
+
+# тема и обои
+~/.config/labwc/update_theme.sh &
+
+# аудиоэффекты
+(sleep 2 && easyeffects --gapplication-service) &
+
+# polkit agent
+systemctl --user start hyprpolkitagent.service &
\ No newline at end of file
diff --git a/configs/____/labwc/environment b/configs/____/labwc/environment
new file mode 100644
index 0000000..c14c1db
--- /dev/null
+++ b/configs/____/labwc/environment
@@ -0,0 +1,8 @@
+# раскладка и ее порядок
+XKB_DEFAULT_LAYOUT=us,ru
+
+# смена раскладки на сочетание клавиш
+XKB_DEFAULT_OPTIONS=grp:ctrl_space_toggle
+
+# тема для Qt-приложений
+QT_QPA_PLATFORMTHEME=qt6ct
\ No newline at end of file
diff --git a/configs/____/labwc/menu.xml b/configs/____/labwc/menu.xml
new file mode 100644
index 0000000..3cbdc6a
--- /dev/null
+++ b/configs/____/labwc/menu.xml
@@ -0,0 +1,21 @@
+
+
+
+
\ No newline at end of file
diff --git a/configs/____/labwc/rc.xml b/configs/____/labwc/rc.xml
new file mode 100644
index 0000000..c658aa9
--- /dev/null
+++ b/configs/____/labwc/rc.xml
@@ -0,0 +1,194 @@
+
+
+
+
+
+ 1
+ 2
+ 3
+ 4
+
+
+
+
+
+ yes
+ no
+
+
+
+
+ DynamicAether
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+ 2
+
+
+
+
+
+
+ 3
+
+
+
+
+
+
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ sh -c 'grim -g "$(slurp)" - | wl-copy'
+
+
+
+
+
+
+ ~/.config/wofi/cliphist-img.sh
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/configs/____/labwc/shutdown b/configs/____/labwc/shutdown
new file mode 100644
index 0000000..4fa5332
--- /dev/null
+++ b/configs/____/labwc/shutdown
@@ -0,0 +1,2 @@
+# очистка clipboard
+cliphist wipe &
\ No newline at end of file
diff --git a/configs/____/labwc/themerc-override b/configs/____/labwc/themerc-override
new file mode 100644
index 0000000..979971b
--- /dev/null
+++ b/configs/____/labwc/themerc-override
@@ -0,0 +1,17 @@
+# цвет рамки active и inactive
+window.active.border.color: #F9EDE4
+window.inactive.border.color: #141414
+
+# цвет фона заголовка active и inactive
+window.active.title.bg.color: #141414
+window.inactive.title.bg.color: #141414
+
+# цвет текста заголовка окна
+window.active.label.text.color: #F9EDE4
+window.inactive.label.text.color: #F9EDE4
+
+# цвет иконок кнопок для АКТИВНОГО окна
+window.active.button.unpressed.image.color: #F9EDE4
+
+# цвет иконок кнопок для НЕАКТИВНОГО окна (ОБЯЗАТЕЛЬНЫЙ КЛЮЧ LABWC)
+window.inactive.button.image.color: #F9EDE4
diff --git a/configs/____/labwc/themes/DynamicAether/themerc b/configs/____/labwc/themes/DynamicAether/themerc
new file mode 100644
index 0000000..dbc39fd
--- /dev/null
+++ b/configs/____/labwc/themes/DynamicAether/themerc
@@ -0,0 +1,8 @@
+window.active.title.bg: #040608
+window.active.title.text: #D4CFCB
+window.active.border.color: #040608
+window.inactive.title.bg: #040608
+window.inactive.title.text: #D4CFCB
+window.inactive.border.color: #040608
+window.active.border.width: 2
+window.inactive.border.width: 1
diff --git a/configs/____/labwc/update_theme.sh b/configs/____/labwc/update_theme.sh
new file mode 100755
index 0000000..bd3925a
--- /dev/null
+++ b/configs/____/labwc/update_theme.sh
@@ -0,0 +1,41 @@
+#!/bin/bash
+TARGET_FILE="$HOME/.config/aether/theme/waybar.css"
+THEME_FILE="$HOME/.config/labwc/themerc-override"
+
+BG_FOLDER="$HOME/.config/aether/theme/backgrounds"
+WALLPAPER=$(find "$BG_FOLDER" -type f | head -n 1)
+
+if [ -f "$TARGET_FILE" ]; then
+ BG_COLOR=$(grep "background" "$TARGET_FILE" | awk '{print $3}' | tr -d ';')
+ FG_COLOR=$(grep "foreground" "$TARGET_FILE" | awk '{print $3}' | tr -d ';')
+
+ if [ ! -z "$BG_COLOR" ] && [ ! -z "$FG_COLOR" ]; then
+ cat << EOF > "$THEME_FILE"
+# цвет рамки active и inactive
+window.active.border.color: $FG_COLOR
+window.inactive.border.color: $BG_COLOR
+
+# цвет фона заголовка active и inactive
+window.active.title.bg.color: $BG_COLOR
+window.inactive.title.bg.color: $BG_COLOR
+
+# цвет текста заголовка окна
+window.active.label.text.color: $FG_COLOR
+window.inactive.label.text.color: $FG_COLOR
+
+# цвет иконок кнопок для АКТИВНОГО окна
+window.active.button.unpressed.image.color: $FG_COLOR
+
+# цвет иконок кнопок для НЕАКТИВНОГО окна (ОБЯЗАТЕЛЬНЫЙ КЛЮЧ LABWC)
+window.inactive.button.image.color: $FG_COLOR
+EOF
+ fi
+fi
+
+killall swaybg 2>/dev/null
+
+if [ ! -z "$WALLPAPER" ] && [ -f "$WALLPAPER" ]; then
+ swaybg -m fill -i "$WALLPAPER" &
+else
+ swaybg -c "$BG_COLOR" &
+fi
diff --git a/configs/____/labwc/void_labwc b/configs/____/labwc/void_labwc
new file mode 100644
index 0000000..f37d8a8
--- /dev/null
+++ b/configs/____/labwc/void_labwc
@@ -0,0 +1,81 @@
+стек:
+labwc
+waybar
+swaylock(замена hyprlock)
+swayidle(замена hypridle)
+polkit-gnome(замена hyprpolkit)
+dolphin
+kate
+google-chrome
+pipewire
+kitty(alacritty)
+v2ray
+v2rayA
+telegram
+htop
+gparted
+pavucontrol
+qdirstat
+easyeffects
+lsp-plugins-lv2
+obsidian
+ristretto
+mpv
+wofi
+cliphist
+sddm
+pango
+xorg-server-xwayland
+mesa-dri
+nvidia-open-dkms
+wl-clipboard
+gtk-layer-shell
+grim
+slurp
+swaybg
+mako
+seatd
+dbus
+polkit
+fontconfig
+noto-fonts-ttf
+ttf-dejavu
+alsa-pipewire
+wireplumber
+xdg-desktop-portal-wlr
+xdg-desktop-portal-gtk
+qt6-wayland
+qt5-wayland
+base-system
+void-repo-nonfree
+fuse
+fuse-common
+ca-certificates
+curl
+xdg-utils
+dhcpcd
+sudo
+acpid
+breeze-icons
+ffmpeg
+libnotify
+ttf-jetbrains-mono
+adwaita-icon-theme
+xdg-desktop-portal-gtk
+unzip
+zip
+p7zip
+qt5ct
+qt6ct
+linux-firmware
+ttf-font-awesome
+
+
+aether(буду писать замену)
+
+установка чистого void linux
+
+обновление системы
+sudo xbps-install -Syu
+sudo xbps-install -u xbps
+
diff --git a/configs/____/qt6ct/qt6ct.conf b/configs/____/qt6ct/qt6ct.conf
new file mode 100644
index 0000000..ee695d1
--- /dev/null
+++ b/configs/____/qt6ct/qt6ct.conf
@@ -0,0 +1,32 @@
+[Appearance]
+color_scheme_path=/usr/share/qt6ct/colors/darker.conf
+custom_palette=true
+icon_theme=breeze-dark
+standard_dialogs=default
+style=Fusion
+
+[Fonts]
+fixed="JetBrainsMono Nerd Font,10,-1,5,400,0,0,0,0,0,0,0,0,0,0,1,Regular,0,0"
+general="JetBrainsMonoNL Nerd Font,10,-1,5,400,0,0,0,0,0,0,0,0,0,0,1,Regular,0,0"
+
+[Interface]
+activate_item_on_single_click=1
+buttonbox_layout=2
+cursor_flash_time=1000
+dialog_buttons_have_icons=1
+double_click_interval=400
+gui_effects=@Invalid()
+keyboard_scheme=2
+menus_have_icons=true
+show_shortcuts_in_context_menus=true
+stylesheets=@Invalid()
+toolbutton_style=4
+underline_shortcut=1
+wheel_scroll_lines=3
+
+[SettingsWindow]
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x2\xde\0\0\x2m\0\0\0\0\0\0\0\0\0\0\x2\xde\0\0\x2m\0\0\0\0\0\0\0\0\a\x80\0\0\0\0\0\0\0\0\0\0\x2\xde\0\0\x2m)
+
+[Troubleshooting]
+force_raster_widgets=1
+ignored_applications=@Invalid()
diff --git a/configs/____/waybar/config.jsonc b/configs/____/waybar/config.jsonc
new file mode 100644
index 0000000..bef995a
--- /dev/null
+++ b/configs/____/waybar/config.jsonc
@@ -0,0 +1,65 @@
+{
+ "layer": "top",
+ "position": "top",
+ "height": 25,
+ "spacing": 0,
+ "modules-left": ["wlr/taskbar"],
+ "modules-center": ["clock"],
+ "modules-right": ["network", "custom/spotify", "custom/v2raya", "custom/language", "pulseaudio", "cpu", "memory", "tray"],
+
+ "wlr/taskbar": {
+ "format": "{icon}",
+ "icon-size": 15,
+ "tooltip-format": "{title}",
+ "on-click": "activate"
+ },
+ "custom/language": {
+ "exec": "xkblayout-state print %s | tr 'a-z' 'A-Z'",
+ "interval": 1,
+ "format": " {} "
+ },
+ "custom/spotify": {
+ "format": "[{}] ",
+ "exec": "playerctl metadata --format '{{artist}} - {{title}}' spotify 2>/dev/null || echo ''",
+ "on-click": "ironbar bar spotify-popup toggle-popup spotify-music",
+ "interval": 3,
+ "max-length": 50
+ },
+ "custom/v2raya": {
+ "format": "PROXY{}",
+ "return-type": "json",
+ "interval": 2,
+ "exec": "/home/ivan/.config/waybar/v2raya-toggle.sh",
+ "on-click": "/home/ivan/.config/waybar/v2raya-toggle.sh toggle",
+ "signal": 10
+ },
+ "clock": {
+ "format": "{:%H:%M}",
+ "format-alt": "{:%d-%m-%Y}"
+ },
+ "cpu": {
+ "format": " {usage}%",
+ "tooltip": false,
+ "on-click": "alacritty -e htop"
+ },
+ "memory": {
+ "format": " {}%"
+ },
+ "network": {
+ "min-length": 10,
+ "format-wifi": " {bandwidthDownBytes}",
+ "format-ethernet": " {bandwidthDownBytes}",
+ "format-disconnected": "⚠ DONT",
+ "interval": 1
+ },
+ "pulseaudio": {
+ "format": " {volume}%",
+ "format-muted": " Muted",
+ "on-click": "pavucontrol"
+ },
+ "tray": {
+ "icon-size": 10,
+ "spacing": 15
+ }
+}
+
diff --git a/configs/____/waybar/style.css b/configs/____/waybar/style.css
new file mode 100644
index 0000000..fdc7db5
--- /dev/null
+++ b/configs/____/waybar/style.css
@@ -0,0 +1,45 @@
+* {
+ font-family: "JetBrainsMono Nerd Font", "Font Awesome 7 Free", "Font Awesome 7 Free Solid", "Font Awesome 7 Brands", sans-serif;
+ font-size: 12px;
+ border: none;
+ border-radius: 0;
+}
+
+@import "/home/ivan/.config/aether/theme/waybar.css";
+
+window#waybar {
+ background: alpha(@background, 0.75);
+ color: @foreground;
+ min-height: 28px;
+}
+
+#clock,
+#cpu,
+#memory,
+#network,
+#pulseaudio,
+#taskbar,
+#custom-spotify,
+#tray {
+ padding: 0 10px;
+ color: @foreground;
+}
+
+#taskbar button {
+ color: alpha(@foreground, 0.6);
+ padding: 0 8px;
+}
+
+#taskbar button.active {
+ background-color: alpha(@foreground, 0.2);
+ box-shadow: inset 0 -2px 0 0 @foreground;
+ color: @foreground;
+}
+
+#custom-v2raya.enabled {
+ color: @foreground;
+}
+
+#custom-v2raya.disabled {
+ color: @background;
+}
\ No newline at end of file
diff --git a/configs/____/waybar/v2raya-toggle.sh b/configs/____/waybar/v2raya-toggle.sh
new file mode 100755
index 0000000..7cdb25e
--- /dev/null
+++ b/configs/____/waybar/v2raya-toggle.sh
@@ -0,0 +1,19 @@
+#!/bin/bash
+
+# Проверяем, запущен ли процесс v2rayA
+if pgrep -x "v2raya" > /dev/null; then
+ if [ "$1" = "toggle" ]; then
+ sudo systemctl stop v2raya.service 2>/dev/null || sudo killall v2raya
+ echo "{\"text\": \" \", \"class\": \"disabled\", \"tooltip\": \"v2rayA выключен\"}"
+ else
+ echo "{\"text\": \" \", \"class\": \"enabled\", \"tooltip\": \"v2rayA включен\"}"
+ fi
+else
+ if [ "$1" = "toggle" ]; then
+ sudo systemctl start v2raya.service 2>/dev/null || sudo v2raya --daemon &
+ echo "{\"text\": \" \", \"class\": \"enabled\", \"tooltip\": \"v2rayA включен\"}"
+ else
+ echo "{\"text\": \" \", \"class\": \"disabled\", \"tooltip\": \"v2rayA выключен\"}"
+ fi
+fi
+
diff --git a/configs/____/wofi/cliphist-img.sh b/configs/____/wofi/cliphist-img.sh
new file mode 100755
index 0000000..16d8082
--- /dev/null
+++ b/configs/____/wofi/cliphist-img.sh
@@ -0,0 +1,61 @@
+#!/usr/bin/env bash
+export WAYLAND_DISPLAY=wayland-0
+export XDG_RUNTIME_DIR=/run/user/$(id -u)
+
+thumb_dir="${XDG_CACHE_HOME:-$HOME/.cache}/cliphist/thumbs"
+mkdir -p "$thumb_dir"
+
+make_thumb() { # $1 - исходник, $2 - результат
+ if command -v gdk-pixbuf-thumbnailer >/dev/null 2>&1; then
+ gdk-pixbuf-thumbnailer -s 256 "$1" "$2" 2>/dev/null
+ elif command -v magick >/dev/null 2>&1; then
+ magick "$1" -resize '256x256>' "$2" 2>/dev/null
+ elif command -v convert >/dev/null 2>&1; then
+ convert "$1" -resize '256x256>' "$2" 2>/dev/null
+ fi
+ # если тулза нет/ошибка — отдаём оригинал, wofi сам смасштабирует
+ [ -s "$2" ] || cp -f "$1" "$2"
+}
+
+wofi_input=""
+
+while read -r line; do
+ [[ "$line" == *" "$tmp" 2>/dev/null
+ [ -s "$tmp" ] && make_thumb "$tmp" "$thumb_path"
+ rm -f "$tmp"
+ fi
+
+ if [ -s "$thumb_path" ]; then
+ wofi_input+="img:${thumb_path}\n"
+ else
+ wofi_input+="${line}\n"
+ fi
+ else
+ wofi_input+="${line}\n"
+ fi
+done <<< "$(cliphist list)"
+
+choice="$(printf '%b' "$wofi_input" | wofi -I --dmenu --cache-file=/dev/null \
+ -Dimage_size=100 -Dynamic_lines=true --prompt "Буфер обмена")"
+
+[ -z "$choice" ] && exit 0
+
+if [[ "$choice" == img:* ]]; then
+ f="${choice#img:}"
+ id="$(basename "$f" .png)"
+ printf '%s\t' "$id" | cliphist decode | wl-copy
+else
+ printf '%s\n' "$choice" | cliphist decode | wl-copy
+fi
\ No newline at end of file
diff --git a/configs/____/wofi/style.css b/configs/____/wofi/style.css
new file mode 100644
index 0000000..e37b019
--- /dev/null
+++ b/configs/____/wofi/style.css
@@ -0,0 +1,53 @@
+@import "/home/ivan/.config/aether/theme/wofi.css";
+
+#img {
+ padding: 5px;
+ width: 120px;
+ height: 120px;
+}
+
+#entry {
+ padding: 10px;
+}
+
+
+window {
+ background-color: @bg;
+ border: 2px solid @gray3;
+}
+
+input {
+ background-color: @bg;
+ color: @fg;
+ border: 1px solid @gray2;
+}
+
+input:selected {
+ background-color: @gray1;
+ color: @fg_bright;
+}
+
+#entry {
+ color: @fg;
+ background-color: @bg;
+ padding: 5px;
+ margin: 2px;
+}
+
+#entry:selected {
+ background-color: @gray1;
+ color: @fg_bright;
+}
+
+scrollbar {
+ background-color: @bg;
+}
+
+scrollbar slider {
+ background-color: @gray2;
+ border-radius: 5px;
+}
+
+scrollbar slider:hover {
+ background-color: @gray3;
+}
diff --git a/configs/hypr/hypridle.conf b/configs/hypr/hypridle.conf
new file mode 100644
index 0000000..f3afb09
--- /dev/null
+++ b/configs/hypr/hypridle.conf
@@ -0,0 +1,17 @@
+general {
+ # Команда, которая выполняется при вызове блокировки через систему/dbus
+ lock_cmd = hyprlock
+}
+
+# ПРАВИЛО 1: Блокировка экрана через 5 минут бездействия
+listener {
+ timeout = 300 # 5 минут (300 секунд)
+ on-timeout = hyprlock # Только блокируем экран
+}
+
+# ПРАВИЛО 2: Выключение мониторов через 5.5 минут (через 30 секунд после блокировки)
+listener {
+ timeout = 330 # 5 минут 30 секунд
+ on-timeout = wlopm --off \* # Гасим все мониторы
+ on-resume = wlopm --on \* # Включаем при активности
+}
diff --git a/configs/hypr/hyprland.lua b/configs/hypr/hyprland.lua
new file mode 100644
index 0000000..bb98383
--- /dev/null
+++ b/configs/hypr/hyprland.lua
@@ -0,0 +1,364 @@
+
+-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+-- AUTOGENERATED HYPRLAND CONFIG. --
+-- EDIT THIS CONFIG ACCORDING TO THE WIKI INSTRUCTIONS. --
+-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+hl.config({ autogenerated = true }) -- remove this line to remove the warning
+
+-- This is an example Hyprland Lua config file.
+-- Refer to the wiki for more information.
+-- https://wiki.hypr.land/Configuring/Start/
+
+-- Please note not all available settings / options are set here.
+-- For a full list, see the wiki
+
+-- You can (and should!!) split this configuration into multiple files
+-- Create your files separately and then require them like this:
+-- require("myColors")
+
+
+------------------
+---- MONITORS ----
+------------------
+
+-- See https://wiki.hypr.land/Configuring/Basics/Monitors/
+hl.monitor({
+ output = "",
+ mode = "preferred",
+ position = "auto",
+ scale = "auto",
+})
+
+
+---------------------
+---- MY PROGRAMS ----
+---------------------
+
+-- Set programs that you use
+local terminal = "kitty"
+local fileManager = "dolphin"
+local menu = "hyprlauncher"
+
+
+-------------------
+---- AUTOSTART ----
+-------------------
+
+-- See https://wiki.hypr.land/Configuring/Basics/Autostart/
+
+-- Autostart necessary processes (like notifications daemons, status bars, etc.)
+-- Or execute your favorite apps at launch like this:
+--
+-- hl.on("hyprland.start", function ()
+-- hl.exec_cmd(terminal)
+-- hl.exec_cmd("nm-applet")
+-- hl.exec_cmd("waybar & hyprpaper & firefox")
+-- end)
+
+
+-------------------------------
+---- ENVIRONMENT VARIABLES ----
+-------------------------------
+
+-- See https://wiki.hypr.land/Configuring/Advanced-and-Cool/Environment-variables/
+
+hl.env("XCURSOR_SIZE", "24")
+hl.env("HYPRCURSOR_SIZE", "24")
+
+
+-----------------------
+----- PERMISSIONS -----
+-----------------------
+
+-- See https://wiki.hypr.land/Configuring/Advanced-and-Cool/Permissions/
+-- Please note permission changes here require a Hyprland restart and are not applied on-the-fly
+-- for security reasons
+
+-- hl.config({
+-- ecosystem = {
+-- enforce_permissions = true,
+-- },
+-- })
+
+-- hl.permission("/usr/(bin|local/bin)/grim", "screencopy", "allow")
+-- hl.permission("/usr/(lib|libexec|lib64)/xdg-desktop-portal-hyprland", "screencopy", "allow")
+-- hl.permission("/usr/(bin|local/bin)/hyprpm", "plugin", "allow")
+
+
+-----------------------
+---- LOOK AND FEEL ----
+-----------------------
+
+-- Refer to https://wiki.hypr.land/Configuring/Basics/Variables/
+hl.config({
+ general = {
+ gaps_in = 5,
+ gaps_out = 20,
+
+ border_size = 2,
+
+ col = {
+ active_border = { colors = {"rgba(33ccffee)", "rgba(00ff99ee)"}, angle = 45 },
+ inactive_border = "rgba(595959aa)",
+ },
+
+ -- Set to true to enable resizing windows by clicking and dragging on borders and gaps
+ resize_on_border = false,
+
+ -- Please see https://wiki.hypr.land/Configuring/Advanced-and-Cool/Tearing/ before you turn this on
+ allow_tearing = false,
+
+ layout = "dwindle",
+ },
+
+ decoration = {
+ rounding = 10,
+ rounding_power = 2,
+
+ -- Change transparency of focused and unfocused windows
+ active_opacity = 1.0,
+ inactive_opacity = 1.0,
+
+ shadow = {
+ enabled = true,
+ range = 4,
+ render_power = 3,
+ color = 0xee1a1a1a,
+ },
+
+ blur = {
+ enabled = true,
+ size = 3,
+ passes = 1,
+ vibrancy = 0.1696,
+ },
+ },
+
+ animations = {
+ enabled = true,
+ },
+})
+
+-- Default curves and animations, see https://wiki.hypr.land/Configuring/Advanced-and-Cool/Animations/
+hl.curve("easeOutQuint", { type = "bezier", points = { {0.23, 1}, {0.32, 1} } })
+hl.curve("easeInOutCubic", { type = "bezier", points = { {0.65, 0.05}, {0.36, 1} } })
+hl.curve("linear", { type = "bezier", points = { {0, 0}, {1, 1} } })
+hl.curve("almostLinear", { type = "bezier", points = { {0.5, 0.5}, {0.75, 1} } })
+hl.curve("quick", { type = "bezier", points = { {0.15, 0}, {0.1, 1} } })
+
+-- Default springs
+hl.curve("easy", { type = "spring", mass = 1, stiffness = 238.1191, dampening = 24.21279333 })
+
+hl.animation({ leaf = "global", enabled = true, speed = 10, bezier = "default" })
+hl.animation({ leaf = "border", enabled = true, speed = 5.39, bezier = "easeOutQuint" })
+hl.animation({ leaf = "windows", enabled = true, speed = 4.79, spring = "easy" })
+hl.animation({ leaf = "windowsIn", enabled = true, speed = 4.1, spring = "easy", style = "popin 87%" })
+hl.animation({ leaf = "windowsOut", enabled = true, speed = 1.49, bezier = "linear", style = "popin 87%" })
+hl.animation({ leaf = "fadeIn", enabled = true, speed = 1.73, bezier = "almostLinear" })
+hl.animation({ leaf = "fadeOut", enabled = true, speed = 1.46, bezier = "almostLinear" })
+hl.animation({ leaf = "fade", enabled = true, speed = 3.03, bezier = "quick" })
+hl.animation({ leaf = "layers", enabled = true, speed = 3.81, bezier = "easeOutQuint" })
+hl.animation({ leaf = "layersIn", enabled = true, speed = 4, bezier = "easeOutQuint", style = "fade" })
+hl.animation({ leaf = "layersOut", enabled = true, speed = 1.5, bezier = "linear", style = "fade" })
+hl.animation({ leaf = "fadeLayersIn", enabled = true, speed = 1.79, bezier = "almostLinear" })
+hl.animation({ leaf = "fadeLayersOut", enabled = true, speed = 1.39, bezier = "almostLinear" })
+hl.animation({ leaf = "workspaces", enabled = true, speed = 1.94, bezier = "almostLinear", style = "fade" })
+hl.animation({ leaf = "workspacesIn", enabled = true, speed = 1.21, bezier = "almostLinear", style = "fade" })
+hl.animation({ leaf = "workspacesOut", enabled = true, speed = 1.94, bezier = "almostLinear", style = "fade" })
+hl.animation({ leaf = "zoomFactor", enabled = true, speed = 7, bezier = "quick" })
+
+-- Ref https://wiki.hypr.land/Configuring/Basics/Workspace-Rules/
+-- "Smart gaps" / "No gaps when only"
+-- uncomment all if you wish to use that.
+-- hl.workspace_rule({ workspace = "w[tv1]", gaps_out = 0, gaps_in = 0 })
+-- hl.workspace_rule({ workspace = "f[1]", gaps_out = 0, gaps_in = 0 })
+-- hl.window_rule({
+-- name = "no-gaps-wtv1",
+-- match = { float = false, workspace = "w[tv1]" },
+-- border_size = 0,
+-- rounding = 0,
+-- })
+-- hl.window_rule({
+-- name = "no-gaps-f1",
+-- match = { float = false, workspace = "f[1]" },
+-- border_size = 0,
+-- rounding = 0,
+-- })
+
+-- See https://wiki.hypr.land/Configuring/Layouts/Dwindle-Layout/ for more
+hl.config({
+ dwindle = {
+ preserve_split = true, -- You probably want this
+ },
+})
+
+-- See https://wiki.hypr.land/Configuring/Layouts/Master-Layout/ for more
+hl.config({
+ master = {
+ new_status = "master",
+ },
+})
+
+-- See https://wiki.hypr.land/Configuring/Layouts/Scrolling-Layout/ for more
+hl.config({
+ scrolling = {
+ fullscreen_on_one_column = true,
+ },
+})
+
+----------------
+---- MISC ----
+----------------
+
+hl.config({
+ misc = {
+ force_default_wallpaper = -1, -- Set to 0 or 1 to disable the anime mascot wallpapers
+ disable_hyprland_logo = false, -- If true disables the random hyprland logo / anime girl background. :(
+ },
+})
+
+
+---------------
+---- INPUT ----
+---------------
+
+hl.config({
+ input = {
+ kb_layout = "us",
+ kb_variant = "",
+ kb_model = "",
+ kb_options = "",
+ kb_rules = "",
+
+ follow_mouse = 1,
+
+ sensitivity = 0, -- -1.0 - 1.0, 0 means no modification.
+
+ touchpad = {
+ natural_scroll = false,
+ },
+ },
+})
+
+hl.gesture({
+ fingers = 3,
+ direction = "horizontal",
+ action = "workspace"
+})
+
+-- Example per-device config
+-- See https://wiki.hypr.land/Configuring/Advanced-and-Cool/Devices/ for more
+hl.device({
+ name = "epic-mouse-v1",
+ sensitivity = -0.5,
+})
+
+
+---------------------
+---- KEYBINDINGS ----
+---------------------
+
+local mainMod = "SUPER" -- Sets "Windows" key as main modifier
+
+-- Example binds, see https://wiki.hypr.land/Configuring/Basics/Binds/ for more
+hl.bind(mainMod .. " + Q", hl.dsp.exec_cmd(terminal))
+local closeWindowBind = hl.bind(mainMod .. " + C", hl.dsp.window.close())
+-- closeWindowBind:set_enabled(false)
+hl.bind(mainMod .. " + M", hl.dsp.exec_cmd("command -v hyprshutdown >/dev/null 2>&1 && hyprshutdown || hyprctl dispatch 'hl.dsp.exit()'"))
+hl.bind(mainMod .. " + E", hl.dsp.exec_cmd(fileManager))
+hl.bind(mainMod .. " + V", hl.dsp.window.float({ action = "toggle" }))
+hl.bind(mainMod .. " + R", hl.dsp.exec_cmd(menu))
+hl.bind(mainMod .. " + P", hl.dsp.window.pseudo())
+hl.bind(mainMod .. " + J", hl.dsp.layout("togglesplit")) -- dwindle only
+
+-- Move focus with mainMod + arrow keys
+hl.bind(mainMod .. " + left", hl.dsp.focus({ direction = "left" }))
+hl.bind(mainMod .. " + right", hl.dsp.focus({ direction = "right" }))
+hl.bind(mainMod .. " + up", hl.dsp.focus({ direction = "up" }))
+hl.bind(mainMod .. " + down", hl.dsp.focus({ direction = "down" }))
+
+-- Switch workspaces with mainMod + [0-9]
+-- Move active window to a workspace with mainMod + SHIFT + [0-9]
+for i = 1, 10 do
+ local key = i % 10 -- 10 maps to key 0
+ hl.bind(mainMod .. " + " .. key, hl.dsp.focus({ workspace = i}))
+ hl.bind(mainMod .. " + SHIFT + " .. key, hl.dsp.window.move({ workspace = i }))
+end
+
+-- Example special workspace (scratchpad)
+hl.bind(mainMod .. " + S", hl.dsp.workspace.toggle_special("magic"))
+hl.bind(mainMod .. " + SHIFT + S", hl.dsp.window.move({ workspace = "special:magic" }))
+
+-- Scroll through existing workspaces with mainMod + scroll
+hl.bind(mainMod .. " + mouse_down", hl.dsp.focus({ workspace = "e+1" }))
+hl.bind(mainMod .. " + mouse_up", hl.dsp.focus({ workspace = "e-1" }))
+
+-- Move/resize windows with mainMod + LMB/RMB and dragging
+hl.bind(mainMod .. " + mouse:272", hl.dsp.window.drag(), { mouse = true })
+hl.bind(mainMod .. " + mouse:273", hl.dsp.window.resize(), { mouse = true })
+
+-- Laptop multimedia keys for volume and LCD brightness
+hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd("wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+"), { locked = true, repeating = true })
+hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd("wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"), { locked = true, repeating = true })
+hl.bind("XF86AudioMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"), { locked = true, repeating = true })
+hl.bind("XF86AudioMicMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"), { locked = true, repeating = true })
+hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd("brightnessctl -e4 -n2 set 5%+"), { locked = true, repeating = true })
+hl.bind("XF86MonBrightnessDown",hl.dsp.exec_cmd("brightnessctl -e4 -n2 set 5%-"), { locked = true, repeating = true })
+
+-- Requires playerctl
+hl.bind("XF86AudioNext", hl.dsp.exec_cmd("playerctl next"), { locked = true })
+hl.bind("XF86AudioPause", hl.dsp.exec_cmd("playerctl play-pause"), { locked = true })
+hl.bind("XF86AudioPlay", hl.dsp.exec_cmd("playerctl play-pause"), { locked = true })
+hl.bind("XF86AudioPrev", hl.dsp.exec_cmd("playerctl previous"), { locked = true })
+
+
+--------------------------------
+---- WINDOWS AND WORKSPACES ----
+--------------------------------
+
+-- See https://wiki.hypr.land/Configuring/Basics/Window-Rules/
+-- and https://wiki.hypr.land/Configuring/Basics/Workspace-Rules/
+
+-- Example window rules that are useful
+
+local suppressMaximizeRule = hl.window_rule({
+ -- Ignore maximize requests from all apps. You'll probably like this.
+ name = "suppress-maximize-events",
+ match = { class = ".*" },
+
+ suppress_event = "maximize",
+})
+-- suppressMaximizeRule:set_enabled(false)
+
+hl.window_rule({
+ -- Fix some dragging issues with XWayland
+ name = "fix-xwayland-drags",
+ match = {
+ class = "^$",
+ title = "^$",
+ xwayland = true,
+ float = true,
+ fullscreen = false,
+ pin = false,
+ },
+
+ no_focus = true,
+})
+
+-- Layer rules also return a handle.
+-- local overlayLayerRule = hl.layer_rule({
+-- name = "no-anim-overlay",
+-- match = { namespace = "^my-overlay$" },
+-- no_anim = true,
+-- })
+-- overlayLayerRule:set_enabled(false)
+
+-- Hyprland-run windowrule
+hl.window_rule({
+ name = "move-hyprland-run",
+ match = { class = "hyprland-run" },
+
+ move = "20 monitor_h-120",
+ float = true,
+})
diff --git a/configs/hypr/hyprlock.conf b/configs/hypr/hyprlock.conf
new file mode 100644
index 0000000..dd3aba7
--- /dev/null
+++ b/configs/hypr/hyprlock.conf
@@ -0,0 +1,91 @@
+source = /home/ivan/.config/aether/theme/hyprlock.conf
+$font_time = Widock TRIAL
+$font = JetBrainsMono Nerd Font
+
+general {
+ hide_cursor = false
+}
+
+background {
+ monitor =
+ path = screenshot # Сделает скриншот текущего экрана
+ blur_passes = 3 # Эффект размытия (оптимально 2-3)
+ blur_size = 7
+
+ # ЗАТЕМНЕНИЕ: Снижаем яркость картинки (0.0 — полностью черный, 1.0 — исходная яркость)
+ # Значение 0.5 уменьшит яркость скриншота ровно наполовину
+ brightness = 0.5
+ noise = 0.05
+}
+
+input-field {
+ monitor =
+ rounding = 0
+ size = 150, 50
+ outline_thickness = 2
+ font_family = $font
+ dots_size = 0.25
+ dots_spacing = 0.15
+ dots_center = true
+ fade_on_empty = false
+ placeholder_text = you shall not pass
+ hide_input = false
+ position = 0, -100
+ halign = center
+ valign = center
+
+ # Используем точные переменные из файла Aether
+ font_color = $font_color
+ inner_color = $inner_color
+ outer_color = $outer_color
+ check_color = $check_color
+}
+
+# ЧАСЫ
+label {
+ monitor =
+ text = cmd[update:1000] echo -e "$(date +"%H")"
+ color = $font_color
+ font_size = 150
+ font_family = $font_time
+ position = 0, -250
+ halign = center
+ valign = top
+ shadow_passes = 0
+}
+
+label {
+ monitor =
+ text = cmd[update:1000] echo -e "$(date +"%M")"
+ color = $font_color
+ font_size = 150
+ font_family = $font_time
+ position = 0, -400
+ halign = center
+ valign = top
+ shadow_passes = 0
+}
+
+# ДАТА
+label {
+ monitor =
+ text = cmd[update:1000] echo "$(date +'%A')"
+ color = $font_color
+ font_size = 18
+ font_family = $font_time
+ position = 0, -20
+ halign = center
+ valign = center
+ shadow_passes = 0
+}
+label {
+ monitor =
+ text = cmd[update:1000] echo "$(date +'%d %B')"
+ color = $font_color
+ font_size = 18
+ font_family = $font_time
+ position = 0, -40
+ halign = center
+ valign = center
+ shadow_passes = 0
+}
\ No newline at end of file
diff --git a/configs/labwc/autostart b/configs/labwc/autostart
new file mode 100644
index 0000000..3d49028
--- /dev/null
+++ b/configs/labwc/autostart
@@ -0,0 +1,15 @@
+# базовые сервисы
+waybar &
+mako &
+
+# буфер обмена
+wl-paste --type text --watch cliphist store &
+wl-paste --type image --watch cliphist store &
+
+# обои
+# потом заменить на ~/.config/labwc/update_theme.sh &
+~/.config/labwc/scripts/base_theme_dark.sh &
+
+
+# polkit agent
+systemctl --user start hyprpolkitagent.service &
\ No newline at end of file
diff --git a/configs/labwc/labwc/autostart b/configs/labwc/labwc/autostart
new file mode 100644
index 0000000..b4dc0cf
--- /dev/null
+++ b/configs/labwc/labwc/autostart
@@ -0,0 +1,23 @@
+# синхронизация окружения
+dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=labwc &
+systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP &
+
+# базовые сервисы
+waybar &
+mako &
+hypridle &
+hyprpolkitagent &
+ironbar &
+
+# буфер обмена
+wl-paste --type text --watch cliphist store &
+wl-paste --type image --watch cliphist store &
+
+# тема и обои
+~/.config/labwc/update_theme.sh &
+
+# аудиоэффекты
+(sleep 2 && easyeffects --gapplication-service) &
+
+# polkit agent
+systemctl --user start hyprpolkitagent.service &
\ No newline at end of file
diff --git a/configs/labwc/labwc/environment b/configs/labwc/labwc/environment
new file mode 100644
index 0000000..c14c1db
--- /dev/null
+++ b/configs/labwc/labwc/environment
@@ -0,0 +1,8 @@
+# раскладка и ее порядок
+XKB_DEFAULT_LAYOUT=us,ru
+
+# смена раскладки на сочетание клавиш
+XKB_DEFAULT_OPTIONS=grp:ctrl_space_toggle
+
+# тема для Qt-приложений
+QT_QPA_PLATFORMTHEME=qt6ct
\ No newline at end of file
diff --git a/configs/labwc/labwc/menu.xml b/configs/labwc/labwc/menu.xml
new file mode 100644
index 0000000..3cbdc6a
--- /dev/null
+++ b/configs/labwc/labwc/menu.xml
@@ -0,0 +1,21 @@
+
+
+
+
\ No newline at end of file
diff --git a/configs/labwc/labwc/rc.xml b/configs/labwc/labwc/rc.xml
new file mode 100644
index 0000000..c658aa9
--- /dev/null
+++ b/configs/labwc/labwc/rc.xml
@@ -0,0 +1,194 @@
+
+
+
+
+
+ 1
+ 2
+ 3
+ 4
+
+
+
+
+
+ yes
+ no
+
+
+
+
+ DynamicAether
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+ 2
+
+
+
+
+
+
+ 3
+
+
+
+
+
+
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ sh -c 'grim -g "$(slurp)" - | wl-copy'
+
+
+
+
+
+
+ ~/.config/wofi/cliphist-img.sh
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/configs/labwc/labwc/shutdown b/configs/labwc/labwc/shutdown
new file mode 100644
index 0000000..4fa5332
--- /dev/null
+++ b/configs/labwc/labwc/shutdown
@@ -0,0 +1,2 @@
+# очистка clipboard
+cliphist wipe &
\ No newline at end of file
diff --git a/configs/labwc/labwc/themerc-override b/configs/labwc/labwc/themerc-override
new file mode 100644
index 0000000..979971b
--- /dev/null
+++ b/configs/labwc/labwc/themerc-override
@@ -0,0 +1,17 @@
+# цвет рамки active и inactive
+window.active.border.color: #F9EDE4
+window.inactive.border.color: #141414
+
+# цвет фона заголовка active и inactive
+window.active.title.bg.color: #141414
+window.inactive.title.bg.color: #141414
+
+# цвет текста заголовка окна
+window.active.label.text.color: #F9EDE4
+window.inactive.label.text.color: #F9EDE4
+
+# цвет иконок кнопок для АКТИВНОГО окна
+window.active.button.unpressed.image.color: #F9EDE4
+
+# цвет иконок кнопок для НЕАКТИВНОГО окна (ОБЯЗАТЕЛЬНЫЙ КЛЮЧ LABWC)
+window.inactive.button.image.color: #F9EDE4
diff --git a/configs/labwc/labwc/themes/DynamicAether/themerc b/configs/labwc/labwc/themes/DynamicAether/themerc
new file mode 100644
index 0000000..dbc39fd
--- /dev/null
+++ b/configs/labwc/labwc/themes/DynamicAether/themerc
@@ -0,0 +1,8 @@
+window.active.title.bg: #040608
+window.active.title.text: #D4CFCB
+window.active.border.color: #040608
+window.inactive.title.bg: #040608
+window.inactive.title.text: #D4CFCB
+window.inactive.border.color: #040608
+window.active.border.width: 2
+window.inactive.border.width: 1
diff --git a/configs/labwc/labwc/update_theme.sh b/configs/labwc/labwc/update_theme.sh
new file mode 100755
index 0000000..bd3925a
--- /dev/null
+++ b/configs/labwc/labwc/update_theme.sh
@@ -0,0 +1,41 @@
+#!/bin/bash
+TARGET_FILE="$HOME/.config/aether/theme/waybar.css"
+THEME_FILE="$HOME/.config/labwc/themerc-override"
+
+BG_FOLDER="$HOME/.config/aether/theme/backgrounds"
+WALLPAPER=$(find "$BG_FOLDER" -type f | head -n 1)
+
+if [ -f "$TARGET_FILE" ]; then
+ BG_COLOR=$(grep "background" "$TARGET_FILE" | awk '{print $3}' | tr -d ';')
+ FG_COLOR=$(grep "foreground" "$TARGET_FILE" | awk '{print $3}' | tr -d ';')
+
+ if [ ! -z "$BG_COLOR" ] && [ ! -z "$FG_COLOR" ]; then
+ cat << EOF > "$THEME_FILE"
+# цвет рамки active и inactive
+window.active.border.color: $FG_COLOR
+window.inactive.border.color: $BG_COLOR
+
+# цвет фона заголовка active и inactive
+window.active.title.bg.color: $BG_COLOR
+window.inactive.title.bg.color: $BG_COLOR
+
+# цвет текста заголовка окна
+window.active.label.text.color: $FG_COLOR
+window.inactive.label.text.color: $FG_COLOR
+
+# цвет иконок кнопок для АКТИВНОГО окна
+window.active.button.unpressed.image.color: $FG_COLOR
+
+# цвет иконок кнопок для НЕАКТИВНОГО окна (ОБЯЗАТЕЛЬНЫЙ КЛЮЧ LABWC)
+window.inactive.button.image.color: $FG_COLOR
+EOF
+ fi
+fi
+
+killall swaybg 2>/dev/null
+
+if [ ! -z "$WALLPAPER" ] && [ -f "$WALLPAPER" ]; then
+ swaybg -m fill -i "$WALLPAPER" &
+else
+ swaybg -c "$BG_COLOR" &
+fi
diff --git a/configs/labwc/labwc/void_labwc b/configs/labwc/labwc/void_labwc
new file mode 100644
index 0000000..f37d8a8
--- /dev/null
+++ b/configs/labwc/labwc/void_labwc
@@ -0,0 +1,81 @@
+стек:
+labwc
+waybar
+swaylock(замена hyprlock)
+swayidle(замена hypridle)
+polkit-gnome(замена hyprpolkit)
+dolphin
+kate
+google-chrome
+pipewire
+kitty(alacritty)
+v2ray
+v2rayA
+telegram
+htop
+gparted
+pavucontrol
+qdirstat
+easyeffects
+lsp-plugins-lv2
+obsidian
+ristretto
+mpv
+wofi
+cliphist
+sddm
+pango
+xorg-server-xwayland
+mesa-dri
+nvidia-open-dkms
+wl-clipboard
+gtk-layer-shell
+grim
+slurp
+swaybg
+mako
+seatd
+dbus
+polkit
+fontconfig
+noto-fonts-ttf
+ttf-dejavu
+alsa-pipewire
+wireplumber
+xdg-desktop-portal-wlr
+xdg-desktop-portal-gtk
+qt6-wayland
+qt5-wayland
+base-system
+void-repo-nonfree
+fuse
+fuse-common
+ca-certificates
+curl
+xdg-utils
+dhcpcd
+sudo
+acpid
+breeze-icons
+ffmpeg
+libnotify
+ttf-jetbrains-mono
+adwaita-icon-theme
+xdg-desktop-portal-gtk
+unzip
+zip
+p7zip
+qt5ct
+qt6ct
+linux-firmware
+ttf-font-awesome
+
+
+aether(буду писать замену)
+
+установка чистого void linux
+
+обновление системы
+sudo xbps-install -Syu
+sudo xbps-install -u xbps
+
diff --git a/configs/labwc/scripts/base_theme_dark.sh b/configs/labwc/scripts/base_theme_dark.sh
new file mode 100644
index 0000000..9fa81bd
--- /dev/null
+++ b/configs/labwc/scripts/base_theme_dark.sh
@@ -0,0 +1,39 @@
+#!/bin/bash
+
+PALETTE="$HOME/.config/labwc/palettes/palette-dark.json"
+
+FG_COLOR=$(jq -r '.FG_COLOR' "$PALETTE")
+SUB_FG_COLOR=$(jq -r '.SUB_FG_COLOR' "$PALETTE")
+
+BG_COLOR=$(jq -r '.BG_COLOR' "$PALETTE")
+SUB_BG_COLOR=$(jq -r '.SUB_BG_COLOR' "$PALETTE")
+
+ACCENT_COLOR=$(jq -r '.ACCENT_COLOR' "$PALETTE")
+SUB_ACCENT_COLOR=$(jq -r '.SUB_ACCENT_COLOR' "$PALETTE")
+
+
+cat << EOF > "$HOME/.config/labwc/themerc-override"
+# цвет рамки active и inactive
+window.active.border.color: $FG_COLOR
+window.inactive.border.color: $BG_COLOR
+
+# цвет фона заголовка active и inactive
+window.active.title.bg.color: $FG_COLOR
+window.inactive.title.bg.color: $FG_COLOR
+
+# цвет текста заголовка окна
+window.active.label.text.color: $BG_COLOR
+window.inactive.label.text.color: $BG_COLOR
+
+# цвет иконок кнопок для АКТИВНОГО окна
+window.active.button.unpressed.image.color: $BG_COLOR
+
+# цвет иконок кнопок для НЕАКТИВНОГО окна
+window.inactive.button.image.color: $BG_COLOR
+EOF
+
+killall swaybg 2>/dev/null
+
+swaybg \
+ -m fill \
+ -i "$HOME/.config/labwc/backgrounds/voidlinux_bg_dark.png" &
diff --git a/configs/labwc/scripts/base_theme_light.sh b/configs/labwc/scripts/base_theme_light.sh
new file mode 100644
index 0000000..4b27676
--- /dev/null
+++ b/configs/labwc/scripts/base_theme_light.sh
@@ -0,0 +1,25 @@
+#!/bin/bash
+
+cat << EOF > "$HOME/.config/labwc/themerc-override"
+# цвет рамки active и inactive
+window.active.border.color: #ECE7DD
+window.inactive.border.color: #141414
+
+# цвет фона заголовка active и inactive
+window.active.title.bg.color: #ECE7DD
+window.inactive.title.bg.color: #ECE7DD
+
+# цвет текста заголовка окна
+window.active.label.text.color: #141414
+window.inactive.label.text.color: #141414
+
+# цвет иконок кнопок для АКТИВНОГО окна
+window.active.button.unpressed.image.color: #141414
+
+# цвет иконок кнопок для НЕАКТИВНОГО окна (ОБЯЗАТЕЛЬНЫЙ КЛЮЧ LABWC)
+window.inactive.button.image.color: #141414
+EOF
+
+killall swaybg 2>/dev/null
+
+swaybg -m fill -i "$HOME/.config/labwc/backgrounds/voidlinux_bg_light.png" &
diff --git a/configs/qt6ct/qt6ct.conf b/configs/qt6ct/qt6ct.conf
new file mode 100644
index 0000000..ee695d1
--- /dev/null
+++ b/configs/qt6ct/qt6ct.conf
@@ -0,0 +1,32 @@
+[Appearance]
+color_scheme_path=/usr/share/qt6ct/colors/darker.conf
+custom_palette=true
+icon_theme=breeze-dark
+standard_dialogs=default
+style=Fusion
+
+[Fonts]
+fixed="JetBrainsMono Nerd Font,10,-1,5,400,0,0,0,0,0,0,0,0,0,0,1,Regular,0,0"
+general="JetBrainsMonoNL Nerd Font,10,-1,5,400,0,0,0,0,0,0,0,0,0,0,1,Regular,0,0"
+
+[Interface]
+activate_item_on_single_click=1
+buttonbox_layout=2
+cursor_flash_time=1000
+dialog_buttons_have_icons=1
+double_click_interval=400
+gui_effects=@Invalid()
+keyboard_scheme=2
+menus_have_icons=true
+show_shortcuts_in_context_menus=true
+stylesheets=@Invalid()
+toolbutton_style=4
+underline_shortcut=1
+wheel_scroll_lines=3
+
+[SettingsWindow]
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x2\xde\0\0\x2m\0\0\0\0\0\0\0\0\0\0\x2\xde\0\0\x2m\0\0\0\0\0\0\0\0\a\x80\0\0\0\0\0\0\0\0\0\0\x2\xde\0\0\x2m)
+
+[Troubleshooting]
+force_raster_widgets=1
+ignored_applications=@Invalid()
diff --git a/configs/waybar/config.jsonc b/configs/waybar/config.jsonc
new file mode 100644
index 0000000..bef995a
--- /dev/null
+++ b/configs/waybar/config.jsonc
@@ -0,0 +1,65 @@
+{
+ "layer": "top",
+ "position": "top",
+ "height": 25,
+ "spacing": 0,
+ "modules-left": ["wlr/taskbar"],
+ "modules-center": ["clock"],
+ "modules-right": ["network", "custom/spotify", "custom/v2raya", "custom/language", "pulseaudio", "cpu", "memory", "tray"],
+
+ "wlr/taskbar": {
+ "format": "{icon}",
+ "icon-size": 15,
+ "tooltip-format": "{title}",
+ "on-click": "activate"
+ },
+ "custom/language": {
+ "exec": "xkblayout-state print %s | tr 'a-z' 'A-Z'",
+ "interval": 1,
+ "format": " {} "
+ },
+ "custom/spotify": {
+ "format": "[{}] ",
+ "exec": "playerctl metadata --format '{{artist}} - {{title}}' spotify 2>/dev/null || echo ''",
+ "on-click": "ironbar bar spotify-popup toggle-popup spotify-music",
+ "interval": 3,
+ "max-length": 50
+ },
+ "custom/v2raya": {
+ "format": "PROXY{}",
+ "return-type": "json",
+ "interval": 2,
+ "exec": "/home/ivan/.config/waybar/v2raya-toggle.sh",
+ "on-click": "/home/ivan/.config/waybar/v2raya-toggle.sh toggle",
+ "signal": 10
+ },
+ "clock": {
+ "format": "{:%H:%M}",
+ "format-alt": "{:%d-%m-%Y}"
+ },
+ "cpu": {
+ "format": " {usage}%",
+ "tooltip": false,
+ "on-click": "alacritty -e htop"
+ },
+ "memory": {
+ "format": " {}%"
+ },
+ "network": {
+ "min-length": 10,
+ "format-wifi": " {bandwidthDownBytes}",
+ "format-ethernet": " {bandwidthDownBytes}",
+ "format-disconnected": "⚠ DONT",
+ "interval": 1
+ },
+ "pulseaudio": {
+ "format": " {volume}%",
+ "format-muted": " Muted",
+ "on-click": "pavucontrol"
+ },
+ "tray": {
+ "icon-size": 10,
+ "spacing": 15
+ }
+}
+
diff --git a/configs/waybar/style.css b/configs/waybar/style.css
new file mode 100644
index 0000000..fdc7db5
--- /dev/null
+++ b/configs/waybar/style.css
@@ -0,0 +1,45 @@
+* {
+ font-family: "JetBrainsMono Nerd Font", "Font Awesome 7 Free", "Font Awesome 7 Free Solid", "Font Awesome 7 Brands", sans-serif;
+ font-size: 12px;
+ border: none;
+ border-radius: 0;
+}
+
+@import "/home/ivan/.config/aether/theme/waybar.css";
+
+window#waybar {
+ background: alpha(@background, 0.75);
+ color: @foreground;
+ min-height: 28px;
+}
+
+#clock,
+#cpu,
+#memory,
+#network,
+#pulseaudio,
+#taskbar,
+#custom-spotify,
+#tray {
+ padding: 0 10px;
+ color: @foreground;
+}
+
+#taskbar button {
+ color: alpha(@foreground, 0.6);
+ padding: 0 8px;
+}
+
+#taskbar button.active {
+ background-color: alpha(@foreground, 0.2);
+ box-shadow: inset 0 -2px 0 0 @foreground;
+ color: @foreground;
+}
+
+#custom-v2raya.enabled {
+ color: @foreground;
+}
+
+#custom-v2raya.disabled {
+ color: @background;
+}
\ No newline at end of file
diff --git a/configs/waybar/v2raya-toggle.sh b/configs/waybar/v2raya-toggle.sh
new file mode 100755
index 0000000..7cdb25e
--- /dev/null
+++ b/configs/waybar/v2raya-toggle.sh
@@ -0,0 +1,19 @@
+#!/bin/bash
+
+# Проверяем, запущен ли процесс v2rayA
+if pgrep -x "v2raya" > /dev/null; then
+ if [ "$1" = "toggle" ]; then
+ sudo systemctl stop v2raya.service 2>/dev/null || sudo killall v2raya
+ echo "{\"text\": \" \", \"class\": \"disabled\", \"tooltip\": \"v2rayA выключен\"}"
+ else
+ echo "{\"text\": \" \", \"class\": \"enabled\", \"tooltip\": \"v2rayA включен\"}"
+ fi
+else
+ if [ "$1" = "toggle" ]; then
+ sudo systemctl start v2raya.service 2>/dev/null || sudo v2raya --daemon &
+ echo "{\"text\": \" \", \"class\": \"enabled\", \"tooltip\": \"v2rayA включен\"}"
+ else
+ echo "{\"text\": \" \", \"class\": \"disabled\", \"tooltip\": \"v2rayA выключен\"}"
+ fi
+fi
+
diff --git a/configs/wofi/cliphist-img.sh b/configs/wofi/cliphist-img.sh
new file mode 100755
index 0000000..16d8082
--- /dev/null
+++ b/configs/wofi/cliphist-img.sh
@@ -0,0 +1,61 @@
+#!/usr/bin/env bash
+export WAYLAND_DISPLAY=wayland-0
+export XDG_RUNTIME_DIR=/run/user/$(id -u)
+
+thumb_dir="${XDG_CACHE_HOME:-$HOME/.cache}/cliphist/thumbs"
+mkdir -p "$thumb_dir"
+
+make_thumb() { # $1 - исходник, $2 - результат
+ if command -v gdk-pixbuf-thumbnailer >/dev/null 2>&1; then
+ gdk-pixbuf-thumbnailer -s 256 "$1" "$2" 2>/dev/null
+ elif command -v magick >/dev/null 2>&1; then
+ magick "$1" -resize '256x256>' "$2" 2>/dev/null
+ elif command -v convert >/dev/null 2>&1; then
+ convert "$1" -resize '256x256>' "$2" 2>/dev/null
+ fi
+ # если тулза нет/ошибка — отдаём оригинал, wofi сам смасштабирует
+ [ -s "$2" ] || cp -f "$1" "$2"
+}
+
+wofi_input=""
+
+while read -r line; do
+ [[ "$line" == *" "$tmp" 2>/dev/null
+ [ -s "$tmp" ] && make_thumb "$tmp" "$thumb_path"
+ rm -f "$tmp"
+ fi
+
+ if [ -s "$thumb_path" ]; then
+ wofi_input+="img:${thumb_path}\n"
+ else
+ wofi_input+="${line}\n"
+ fi
+ else
+ wofi_input+="${line}\n"
+ fi
+done <<< "$(cliphist list)"
+
+choice="$(printf '%b' "$wofi_input" | wofi -I --dmenu --cache-file=/dev/null \
+ -Dimage_size=100 -Dynamic_lines=true --prompt "Буфер обмена")"
+
+[ -z "$choice" ] && exit 0
+
+if [[ "$choice" == img:* ]]; then
+ f="${choice#img:}"
+ id="$(basename "$f" .png)"
+ printf '%s\t' "$id" | cliphist decode | wl-copy
+else
+ printf '%s\n' "$choice" | cliphist decode | wl-copy
+fi
\ No newline at end of file
diff --git a/configs/wofi/style.css b/configs/wofi/style.css
new file mode 100644
index 0000000..e37b019
--- /dev/null
+++ b/configs/wofi/style.css
@@ -0,0 +1,53 @@
+@import "/home/ivan/.config/aether/theme/wofi.css";
+
+#img {
+ padding: 5px;
+ width: 120px;
+ height: 120px;
+}
+
+#entry {
+ padding: 10px;
+}
+
+
+window {
+ background-color: @bg;
+ border: 2px solid @gray3;
+}
+
+input {
+ background-color: @bg;
+ color: @fg;
+ border: 1px solid @gray2;
+}
+
+input:selected {
+ background-color: @gray1;
+ color: @fg_bright;
+}
+
+#entry {
+ color: @fg;
+ background-color: @bg;
+ padding: 5px;
+ margin: 2px;
+}
+
+#entry:selected {
+ background-color: @gray1;
+ color: @fg_bright;
+}
+
+scrollbar {
+ background-color: @bg;
+}
+
+scrollbar slider {
+ background-color: @gray2;
+ border-radius: 5px;
+}
+
+scrollbar slider:hover {
+ background-color: @gray3;
+}
diff --git a/fix.sh b/fix.sh
deleted file mode 100644
index cb4f2a7..0000000
--- a/fix.sh
+++ /dev/null
@@ -1,252 +0,0 @@
-#!/bin/sh
-#
-# setup-sddm-labwc.sh
-# Alpine Linux / OpenRC: SDDM + elogind + LabWC.
-#
-# Запуск от root:
-# chmod +x setup-sddm-labwc.sh
-# ./setup-sddm-labwc.sh ivan
-#
-
-set -eu
-
-USER_NAME="${1:-ivan}"
-HOME_DIR="/home/$USER_NAME"
-PROFILE="$HOME_DIR/.profile"
-
-if [ "$(id -u)" -ne 0 ]; then
- echo "[!] Запусти скрипт от root."
- exit 1
-fi
-
-if [ ! -f /etc/alpine-release ]; then
- echo "[!] Этот скрипт только для Alpine Linux."
- exit 1
-fi
-
-if ! id "$USER_NAME" >/dev/null 2>&1; then
- echo "[!] Пользователь не найден: $USER_NAME"
- exit 1
-fi
-
-echo
-echo "=================================================="
-echo " Alpine: SDDM + elogind + LabWC"
-echo "=================================================="
-echo
-echo "[*] Пользователь: $USER_NAME"
-echo "[*] Alpine: $(cat /etc/alpine-release)"
-echo
-
-# ------------------------------------------------------------
-# Пакеты
-# ------------------------------------------------------------
-
-echo "[*] Обновление индекса APK..."
-apk update
-
-echo "[*] Установка зависимостей display manager..."
-apk add \
- dbus \
- seatd \
- elogind \
- elogind-openrc \
- sddm \
- sddm-openrc \
- xorg-server \
- mesa \
- mesa-dri-gallium \
- xf86-input-libinput
-
-# ------------------------------------------------------------
-# Удаление старых/неверных конфигов SDDM
-# ------------------------------------------------------------
-
-echo "[*] Очистка старой конфигурации SDDM..."
-
-mkdir -p /etc/sddm.conf.d
-
-rm -f /etc/sddm.conf.d/wayland.conf
-rm -f /etc/sddm.conf.d/labwc.conf
-rm -f /etc/sddm.conf.d/00-general.conf
-
-cat > /etc/sddm.conf.d/00-general.conf << 'EOF'
-[General]
-DisplayServer=x11
-
-[Autologin]
-Relogin=false
-EOF
-
-chmod 644 /etc/sddm.conf.d/00-general.conf
-
-# ------------------------------------------------------------
-# Удаление старого getty-autologin wrapper
-# ------------------------------------------------------------
-
-echo "[*] Удаление старого getty-autologin wrapper..."
-rm -f /usr/local/sbin/autologin-login
-
-# /etc/inittab намеренно не меняем.
-# kill -HUP 1 намеренно не вызываем.
-
-# ------------------------------------------------------------
-# Группы пользователя
-# ------------------------------------------------------------
-
-echo "[*] Настройка групп пользователя..."
-
-for GROUP_NAME in wheel seat video input; do
- if ! getent group "$GROUP_NAME" >/dev/null 2>&1; then
- echo "[*] Создание группы: $GROUP_NAME"
- addgroup "$GROUP_NAME"
- fi
-
- if id -nG "$USER_NAME" | tr ' ' '\n' | grep -qx "$GROUP_NAME"; then
- echo "[+] $USER_NAME уже в группе $GROUP_NAME."
- else
- echo "[*] Добавление $USER_NAME в группу $GROUP_NAME..."
- addgroup "$USER_NAME" "$GROUP_NAME"
- fi
-done
-
-# ------------------------------------------------------------
-# Сессия LabWC в меню SDDM
-# ------------------------------------------------------------
-
-echo "[*] Создание записи LabWC для SDDM..."
-
-mkdir -p /usr/share/wayland-sessions
-
-cat > /usr/share/wayland-sessions/labwc.desktop << 'EOF'
-[Desktop Entry]
-Name=LabWC
-Comment=LabWC Wayland compositor
-Exec=labwc
-TryExec=labwc
-Type=Application
-DesktopNames=labwc
-EOF
-
-chmod 644 /usr/share/wayland-sessions/labwc.desktop
-
-# ------------------------------------------------------------
-# Конфигурация LabWC пользователя
-# ------------------------------------------------------------
-
-echo "[*] Настройка LabWC..."
-
-mkdir -p "$HOME_DIR/.config/labwc"
-
-cat > "$HOME_DIR/.config/labwc/environment" << 'EOF'
-XDG_CURRENT_DESKTOP=labwc
-XDG_SESSION_DESKTOP=labwc
-XDG_SESSION_TYPE=wayland
-
-MOZ_ENABLE_WAYLAND=1
-QT_QPA_PLATFORM=wayland
-SDL_VIDEODRIVER=wayland
-
-LIBSEAT_BACKEND=seatd
-EOF
-
-cat > "$HOME_DIR/.config/labwc/autostart" << 'EOF'
-#!/bin/sh
-
-if command -v nm-applet >/dev/null 2>&1; then
- nm-applet &
-fi
-
-if command -v waybar >/dev/null 2>&1; then
- waybar &
-fi
-
-if command -v mako >/dev/null 2>&1; then
- mako &
-fi
-
-if command -v pipewire >/dev/null 2>&1 &&
- ! pgrep -x pipewire >/dev/null 2>&1
-then
- pipewire &
-fi
-
-if command -v wireplumber >/dev/null 2>&1 &&
- ! pgrep -x wireplumber >/dev/null 2>&1
-then
- wireplumber &
-fi
-EOF
-
-chmod 755 "$HOME_DIR/.config/labwc/autostart"
-chown -R "$USER_NAME:$USER_NAME" "$HOME_DIR/.config"
-
-# ------------------------------------------------------------
-# Удаление старого запуска LabWC из login shell
-# ------------------------------------------------------------
-
-echo "[*] Отключение старого запуска LabWC из .profile..."
-
-if [ -f "$PROFILE" ] && grep -qF '# LABWC-AUTOSTART' "$PROFILE"; then
- cp "$PROFILE" "$PROFILE.before-sddm.bak"
- sed -i '/^# LABWC-AUTOSTART$/,$d' "$PROFILE"
- chown "$USER_NAME:$USER_NAME" "$PROFILE"
- echo "[+] LABWC-AUTOSTART удалён из .profile."
-else
- echo "[+] Блока LABWC-AUTOSTART в .profile нет."
-fi
-
-# ------------------------------------------------------------
-# OpenRC
-# ------------------------------------------------------------
-
-echo "[*] Включение служб OpenRC..."
-
-rc-update add dbus default 2>/dev/null || true
-rc-update add seatd default 2>/dev/null || true
-rc-update add elogind default 2>/dev/null || true
-rc-update add sddm default 2>/dev/null || true
-
-echo
-echo "=================================================="
-echo " Проверка"
-echo "=================================================="
-
-echo
-echo "[*] Установленные пакеты:"
-apk info -e dbus seatd elogind elogind-openrc sddm sddm-openrc \
- xorg-server mesa mesa-dri-gallium xf86-input-libinput || true
-
-echo
-echo "[*] Группы пользователя:"
-id "$USER_NAME"
-
-echo
-echo "[*] Запись LabWC:"
-cat /usr/share/wayland-sessions/labwc.desktop
-
-echo
-echo "[*] DRM:"
-ls -la /dev/dri 2>&1 || true
-
-echo
-echo "=================================================="
-echo " Готово"
-echo "=================================================="
-echo
-echo "[!] В этом скрипте SDDM специально НЕ запускается."
-echo "[!] Это нужно, чтобы не повторять проблему stale-процесса."
-echo
-echo "Теперь выполни:"
-echo
-echo " reboot"
-echo
-echo "После перезагрузки порядок будет такой:"
-echo " 1. dbus"
-echo " 2. seatd"
-echo " 3. elogind"
-echo " 4. sddm"
-echo
-echo "В SDDM войди пользователем $USER_NAME"
-echo "и в меню сессий выбери LabWC."
-echo
\ No newline at end of file
diff --git a/fonts/Widock TRIAL Bold.otf b/fonts/Widock TRIAL Bold.otf
new file mode 100644
index 0000000..6712eea
Binary files /dev/null and b/fonts/Widock TRIAL Bold.otf differ
diff --git a/install.sh b/install.sh
new file mode 100755
index 0000000..2545dca
--- /dev/null
+++ b/install.sh
@@ -0,0 +1,256 @@
+#!/bin/sh
+set -e
+
+# colors for output
+GREEN='\033[0;32m'
+BLUE='\033[0;34m'
+RED='\033[0;31m'
+NC='\033[0m'
+
+# helpers
+info() {
+ printf '%b\n' "${BLUE}>>$1${NC}"
+}
+
+success() {
+ printf '%b\n' "${GREEN}>>$1${NC}"
+}
+
+error() {
+ printf '%b\n' "${RED}>>ERROR: $1${NC}" >&2
+}
+
+
+# 0. Check environment
+
+if [ "$(id -u)" -eq 0 ]; then
+ error "do not run this installer as root"
+ exit 1
+fi
+
+if [ ! -f /etc/alpine-release ]; then
+ error "Alpine Linux is required"
+ exit 1
+fi
+
+if [ ! -d "$HOME/labwc-alpine" ]; then
+ error "labwc-alpine directory not found in $HOME"
+ printf '%b\n' "${RED}>>Please clone the repository first:${NC}"
+ printf '%b\n' "${RED}>>git clone https://zenithcode.duckdns.org/s13bby/labwc-alpine.git${NC}"
+ exit 1
+fi
+
+if [ ! -d "$HOME/labwc-alpine/.git" ]; then
+ error "$HOME/labwc-alpine is not a git repository"
+ exit 1
+fi
+
+if ! command -v sudo >/dev/null 2>&1; then
+ error "sudo is required"
+ exit 1
+fi
+
+
+# 1. Begin
+
+echo "┌──────────────────────────────────────┐"
+echo "│ zenithcode.duckdns.org │"
+echo "│ welcome to installer labwc-alpine │"
+echo "│ by s13bby │"
+echo "└──────────────────────────────────────┘"
+
+
+# 2. Update and upgrade system
+
+info "updating distro repositories..."
+sudo apk update
+
+info "upgrading system packages..."
+sudo apk upgrade
+
+success "distro repositories and system are up-to-date"
+
+
+# 3. Install needed packages
+
+info "installing needed packages..."
+
+sudo apk add \
+ gcc \
+ g++ \
+ git \
+ curl \
+ cmake \
+ libcurl \
+ libcurl-dev \
+ opencv \
+ opencv-dev \
+ 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 \
+ playerctl \
+ font-jetbrains-mono
+
+success "all packages installed"
+
+
+# 4. Configure NetworkManager
+
+info "configuring NetworkManager..."
+
+if rc-update show default 2>/dev/null | grep -q "networkmanager"; then
+ success "networkmanager already configured"
+else
+ sudo rc-update add networkmanager default
+ success "networkmanager added to default runlevel"
+fi
+
+if rc-service networkmanager status >/dev/null 2>&1; then
+ success "networkmanager is already running"
+else
+ sudo rc-service networkmanager start
+fi
+
+
+# 5. Build zenith-cli
+
+if [ -d "$HOME/zenith-cli/.git" ]; then
+ info "zenith-cli already exists, updating..."
+
+ cd "$HOME/zenith-cli"
+ git pull
+else
+ if [ -e "$HOME/zenith-cli" ]; then
+ error "$HOME/zenith-cli exists but is not a git repository"
+ exit 1
+ fi
+
+ info "cloning zenith-cli repository..."
+
+ git clone \
+ https://zenithcode.duckdns.org/s13bby/zenith-cli.git \
+ "$HOME/zenith-cli"
+fi
+
+if [ ! -f "$HOME/zenith-cli/build.sh" ]; then
+ error "zenith-cli/build.sh not found"
+ exit 1
+fi
+
+info "making build script executable..."
+chmod +x "$HOME/zenith-cli/build.sh"
+
+info "building zenith-cli..."
+sh "$HOME/zenith-cli/build.sh"
+
+if [ ! -f "$HOME/zenith-cli/zenith-cli" ]; then
+ error "zenith-cli binary was not created"
+ exit 1
+fi
+
+info "installing zenith-cli to ~/.local/bin..."
+
+mkdir -p "$HOME/.local/bin"
+
+cp "$HOME/zenith-cli/zenith-cli" "$HOME/.local/bin/zenith-cli"
+chmod +x "$HOME/.local/bin/zenith-cli"
+
+if ! grep -Fq 'export PATH="$HOME/.local/bin:$PATH"' "$HOME/.profile" 2>/dev/null; then
+ echo 'export PATH="$HOME/.local/bin:$PATH"' >> "$HOME/.profile"
+ success "added ~/.local/bin to PATH in .profile"
+fi
+
+# Make zenith-cli available in the current shell
+export PATH="$HOME/.local/bin:$PATH"
+
+success "zenith-cli ready to work"
+
+
+# 6. Copy configs
+
+info "creating config directory..."
+
+mkdir -p "$HOME/.config"
+
+info "copying dotfiles..."
+
+for config in hypr labwc waybar wofi qt6ct alacritty; do
+ if [ -d "$HOME/labwc-alpine/configs/$config" ]; then
+ cp -r "$HOME/labwc-alpine/configs/$config" "$HOME/.config/"
+ else
+ error "config directory not found: $config"
+ exit 1
+ fi
+done
+
+if [ -d "$HOME/labwc-alpine/palettes" ]; then
+ cp -r "$HOME/labwc-alpine/palettes" "$HOME/.config/"
+else
+ error "palettes directory not found"
+ exit 1
+fi
+
+success "dotfiles copied"
+
+
+# 7. Copy fonts
+
+info "creating fonts directory..."
+
+mkdir -p "$HOME/.local/share/fonts"
+
+if [ -d "$HOME/labwc-alpine/fonts" ]; then
+ cp -r "$HOME/labwc-alpine/fonts/"* "$HOME/.local/share/fonts/"
+else
+ error "fonts directory not found"
+ exit 1
+fi
+
+info "updating font cache..."
+fc-cache -fv >/dev/null
+
+success "fonts copied"
+
+
+# 8. Copy backgrounds
+
+info "creating backgrounds directory..."
+
+mkdir -p "$HOME/backgrounds/"
+
+if [ -d "$HOME/labwc-alpine/backgrounds" ]; then
+ cp -r "$HOME/labwc-alpine/backgrounds/"* "$HOME/backgrounds/"
+else
+ error "backgrounds directory not found"
+ exit 1
+fi
+
+success "backgrounds copied"
+
+
+# 9. Done
+
+echo
+echo "┌──────────────────────────────────────┐"
+echo "│ zenithcode.duckdns.org │"
+echo "│ thanks for use my dotfiles │"
+echo "│ mail: qaws3623@gmail.com by s13bby │"
+echo "└──────────────────────────────────────┘"
+
+printf '%b\n' "${GREEN}"
+printf '%b\n' ">>please reboot system<<"
+printf '%b\n' "${NC}"
diff --git a/palettes/palette_dark b/palettes/palette_dark
new file mode 100644
index 0000000..c416387
--- /dev/null
+++ b/palettes/palette_dark
@@ -0,0 +1,5 @@
+#0c0c0c
+#121212
+#7e49b2
+#1c1c1c
+#c8c8c8
diff --git a/palettes/palette_light b/palettes/palette_light
new file mode 100644
index 0000000..3e9fdc8
--- /dev/null
+++ b/palettes/palette_light
@@ -0,0 +1,5 @@
+#c8c8c8
+#1c1c1c
+#7e49b2
+#121212
+#0c0c0c
diff --git a/palettes/palette_pastel_dark b/palettes/palette_pastel_dark
new file mode 100644
index 0000000..a5813f8
--- /dev/null
+++ b/palettes/palette_pastel_dark
@@ -0,0 +1,5 @@
+#cbb0e6
+#e6c2c2
+#e6c2c2
+#e6c2c2
+#e6c2c2
diff --git a/palettes/palette_pastel_light b/palettes/palette_pastel_light
new file mode 100644
index 0000000..bdd0f1f
--- /dev/null
+++ b/palettes/palette_pastel_light
@@ -0,0 +1,5 @@
+#e6c2c2
+#e6c2c2
+#e6c2c2
+#e6c2c2
+#cbb0e6