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