diff --git a/README.md b/README.md index bd6edbb..209bec4 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,72 @@ -# dotfiles-hypr +# Hyprland Dotfiles +Кастомное окружение рабочего стола для **Hyprland**, сфокусированное на производительности и глубокой интеграции с системными событиями через **Eww**. Обновление интерфейса происходит мгновенно по сигналу от системы, а не по тяжелым таймерам. + +## Стек + +| Компонент | Технология | Описание | +| :--- | :--- | :--- | +| **Window Manager** | Hyprland | Wayland-композитор с динамическими воркспейсами. | +| **Widget system** | Eww | Отрисовка баров и виджетов на базе GTK. | +| **State Management** | Python / Socat | Скрипты-демоны для обработки IPC-событий. | +| **Notification** | Dunst | Легковесный демон уведомлений. | +| **Application Launcher** | Rofi | Переписанный под Wayland лаунчер с кастомной темой. | + +--- + +## Архитектурные особенности + +### 1. unified workspace management (ipc) +В отличие от стандартных модулей, здесь используется `UnifiedWorkspaceManager` на Python. +* **Механизм:** Скрипт подключается к Unix-сокету Hyprland (`.socket2.sock`) и слушает поток событий (`openwindow`, `closewindow`, `activewindow`). +* **Оптимизация:** Обновление json-состояния происходит только при изменении структуры окон, что сводит нагрузку на cpu к минимуму. +* **Визуализация:** Поддержка динамических иконок приложений и индикация состояния `urgent` (через css-анимацию `pulse-lavender`). + + + +### 2. Системный мониторинг и управление +Комплекс виджетов в правой части панели разделен на независимые модули: + +* **Audio Subsytem:** Использует `pactl subscribe`. Виджет мгновенно отражает изменения громкости, сделанные горячими клавишами, без опроса системы в цикле. +* **Hardware Stats:** Мониторинг cpu (avg), ram и nvidia gpu temp. Реализована логика визуального предупреждения: при достижении критических температур (75°C+) или нагрузки (90%+), виджет переходит в состояние `.alert`, меняя визуальный стиль. +* **Keyboard LED Monitor:** Реализован через прямую прослушку `/dev/input/` с использованием библиотеки `evdev`. Позволяет отображать состояние Caps/Num Lock даже если они переключаются внешними скриптами. + + + +## Dunst & Rofi Integration + +Уведомления и лаунчер полностью синхронизированы по цветам и радиусам скругления с основным баром, создавая единое визуальное пространство. + +
+Превью Dunst и Rofi + +#### Dunst (Notifications) + + +#### Rofi (App Launcher) + + +
+ +## Зависимости + +Установите необходимые пакеты через ваш менеджер пакетов: + +```Bash +# core & ipc +eww socat + +# audio & input +pactl python-evdev + +# telemetry (nvidia) +nvidia-smi +``` + +## Инициализация + +Для корректной инициализации слоев используйте open-many в конфиге Hyprland: + +```Conf +exec-once = eww daemon && eww open-many bar_0 bar_1 wallpaper_0 wallpaper_1 +``` \ No newline at end of file diff --git a/assets/dunst.mkv b/assets/dunst.mkv new file mode 100644 index 0000000..55551a3 Binary files /dev/null and b/assets/dunst.mkv differ diff --git a/assets/eww_center.mkv b/assets/eww_center.mkv new file mode 100644 index 0000000..41e0865 Binary files /dev/null and b/assets/eww_center.mkv differ diff --git a/assets/eww_left.mkv b/assets/eww_left.mkv new file mode 100644 index 0000000..a602c2e Binary files /dev/null and b/assets/eww_left.mkv differ diff --git a/assets/eww_right.mkv b/assets/eww_right.mkv new file mode 100644 index 0000000..b2e734c Binary files /dev/null and b/assets/eww_right.mkv differ diff --git a/assets/rofi.mkv b/assets/rofi.mkv new file mode 100644 index 0000000..e631265 Binary files /dev/null and b/assets/rofi.mkv differ diff --git a/dunst/dunstrc b/dunst/dunstrc index aaff4a1..80ff9c6 100644 --- a/dunst/dunstrc +++ b/dunst/dunstrc @@ -1,14 +1,14 @@ [global] font = Inter, FiraCode Nerd Font 11 - format = "%s\n%b" // заголовок жирным, переход на строку, тело + format = "%s\n%b" alignment = left vertical_alignment = center - word_wrap = yes // перенос длинных строк + word_wrap = yes width = (0, 350) height = (0, 110) offset = (35, 65) origin = top-right - follow = keyboard // на мониторе, где фокус клавиатуры + follow = keyboard corner_radius = 10 padding = 15 horizontal_padding = 15 @@ -24,8 +24,8 @@ progress_bar_max_width = 320 icon_position = mouse_left_click max_icon_size = 64 - mouse_left_click = do_action, close_current // лкм: действие и закрыть - mouse_right_click = close_all // пкм: закрыть все + mouse_left_click = do_action, close_current + mouse_right_click = close_all [urgency_low] background = "#363a4fe6" diff --git a/eww/eww.scss b/eww/eww.scss index 54b6fef..69a7735 100644 --- a/eww/eww.scss +++ b/eww/eww.scss @@ -166,7 +166,7 @@ separator { .stats-pill { padding: 0 6px; - .slide-wrapper { transition: all $t-fase ease-in-out; } + .slide-wrapper { transition: all $t-fast ease-in-out; } &.alert { border-color: $red; @@ -188,7 +188,7 @@ separator { @extend .capsule; .icon { margin-right: 14px; } - .slide-wrapper { transition: all $t-fase ease-in-out; } + .slide-wrapper { transition: all $t-fast ease-in-out; } &.muted { border-color: #444;