
Когда-то была статья «Такие разные GTK и Qt. Возможна ли гармония в среде пользователя?» В ней рассматривались аспекты оформления графического интерфейса с применением различных подходов: GTK, QT и вытекающими отсюда неудобствами для пользователя. Подбор готовых тем оформления - вариант так себе, хотя имеет право на жизнь. Пользователям современного GNOME можно остановиться на adwaita-style, который на выходе даст очень хороший вариант совместимости. Кто-то вообще предпочтет использовать исключительно GTK или QT в своей системе, чтобы уйти от сборной солянки в стилях приложений.
Создание единого GUI
В данной статье рассмотрим динамическую адаптацию графического интерфейса системы под цвета обоев рабочего стола. Стоит сразу отметить, что все делалось в моем Hyprland Void, поэтому динамическая настройка, помимо интерфейса приложений, требовалась как для самого оконного менеджера (hyprland), так и для панели (waybar) и для меню (fuzzel) и для менеджера уведомлений (dunst) и для менеджера питания (wlogout). Задача вовсе нетривиальная, поэтому делалось все поэтапно (с чувством, с толком, с расстановкой). Еще одна ремарка, прежде чем мы начнем, - я предпочитаю светлые темы, поэтому максимальный упор делался именно на них, а темные варианты создавались уже по остаточному принципу.
В качестве базового варианта темы GTK мной был выбран Graphite-style; для QT же использован 22-цветный qt6ct-конфиг. Таким образом, для GTK+ приложений мной созданы 2 варианта одной темы (светлый и темный), для QT приложений - аналогично. Общим для них является использование одних и тех же акцентных цветов из сгенерированных pywal, которые динамически меняются вместе со сменой обоев рабочего стола. Базовые цвета (фон, текст) у них абсолютно одинаковые, а дополнительные подобраны максимально приближенными друг к другу, насколько это возможно.
Hyprland, waybar, fuzzel, dunst, wlogout используют в своем оформлении более широкую палитру pywal (не только акцентные цвета), создавая вместе единый стиль всего рабочего окружения. Ниже демонстрация того, как все выглядит, в зависимости от выбранных обоев рабочего стола.


Шаблоны генератора палитры цветов
В качестве основного инструмента использован pywal-16, представляющий собой простой генератор палитры и умеющий, по заранее подготовленным шаблонам, создавать нужные файлы, которые легко интегрируются в файлы конфигураций (gtk.css, qt6ct.config, fuzzel.ini etc.). В качестве инициатора выступает графический менеджер обоев waypaper, в post-command которого включен запуск скрипта, вызывающий адаптацию конфигураций и перезагрузку различных элементов рабочего окружения, включая оконный менеджер Hyprland.
Шаблоны (pywal templates) создаются достаточно просто, нужно всего лишь знать используемый язык конфигурационных файлов тех приложений, для которых они генерируются. Некоторые особенности (нюансы) присутствуют, например в css стилях часто используют переменные, заключенные в фигурные скобки {}; для шаблона pywal придется дважды использовать {{}}, чтобы избежать ошибок при создании файла с палитрой. Ниже пример шаблона для Hyprland на lua.
active_border = "rgba({color1.strip}77)"
inactive_border = "rgba({color0.strip}33)"
background_color = "rgba({color0.strip}FF)"
border_color = "rgba({color2.strip}AA) rgba({color2.strip}77)"Почему не использован matugen, спросите вы, вроде бы представляющий собой современную интерпретацию pywal? В данном контексте я голосую за простой инструмент; мне не нравится, когда генератор заменяет конфигурационные файлы, сгенерированные из шаблонов. В случае смены скриптового языка, например как то было в Hyprland при переходе на lua, нужно помнить, что конфигурация цветов (а в некоторых случаях и целый файл конфигурации) генерируется по шаблону matugen, что создает дополнительную цепочку зависимостей и в целом усложняет контроль над системой.
Работа над стилем
Элементы графического окружения, не входящие в оформление окон приложений, меню, панели, также не остались без внимания. Всплывающие элементы GUI: различные подсказки, календарь, информация о погоде и т.п. проработаны в едином стиле, соответствуют цветовой гамме уведомлений рабочего стола и в целом гармонируют с общим интерфейсом системы.

Что сделано, уже работает и что планируется
Работает динамическая смена цветовой палитры всех элементов графического окружения в зависимости от выбранных обоев рабочего стола.
Для основных пользовательских приложений (браузер, эмулятор терминала, файловый менеджер, медиаплеер, звуковой микшер) создан скрипт, позволяющий задать переменные, которые определяют поведение тех или иных кнопок панели и меню. Таким образом, мои сегодняшние личные предпочтения, легко заменить своими, при этом сохранив полную работоспособность элементов окружения, без необходимости вносить правки в конфигурационные файлы (hyprland, waybar, fuzzel, etc). Скрипт выполнен в интерактивном стиле, делающем работу с ним интуитивно понятной.
Для панели (waybar) разработаны 2 темы: цветная (адаптивная) и монохромная; выбор расположения панели предполагает 2 варианта: верхнее или нижнее, под которые автоматически подстраиваются подсказки, уведомления, меню.
Пока не смог найти способ, чтобы приложения GTK+, QT "на лету" применяли изменения. В планах создание единого стиля QT/GTK (а-ля adwaita), а также доработка темного варианта оформления.

Комментарии
10:27
А что думаете насчёт того, чтобы вместо связки Waybar + Fuzzel и т. д. использовать какой-нибудь desktop shell, ту же Noctalia, например?
Там вроде есть свои встроенные инструменты, чтобы адаптировать цвета оболочки и даже сторонних приложений под цвета обоев.
14:55
19:22
10:42
15:22
19:24
16:28
"Tue 08 September" смотрится несколько вычурно на фоне русскоязычного оформления календаря.
19:32
"clock": {
"tooltip-format": "<span color='#dfff00'><big><b>{:%a %d %B}</b></big></span>\n\n<tt>{calendar}</tt>",
//"format-alt": "{:%d-%m-%Y}",
"calendar": {
"mode" : "year",
"mode-mon-col" : 3,
//"weeks-pos": "right",
"on-scroll" : 1,
"format": {
"months": "<span color='#ffead3'><b>{}</b></span>",
"days": "<span color='#ffeedd'>{}</span>",
//"weeks": "<span color='#ffffff'><b>{}</b></span>",
"weekdays": "<span color='#ffcc66'><b>{}</b></span>",
"today": "<span color='#bfff00'><b>{}</b></span>"
}
},
19:37
и код вот так
"clock": {
"format": "{:%H:%M}",
"tooltip-format": "<tt>{calendar}</tt>",
"calendar": {
"mode": "year",
"mode-mon-col": 3,
"on-scroll": 1,
"format": {
"months": "<b>{}</b>",
"days": "{}",
"weekdays": "<b>{}</b>",
"today": "<span color='#bfff00'><b>{}</b></span>"
}
}
}
21:42
22:04
Было:
"tooltip-format": "<span color='#dfff00'><big><b>{:%a %d %B}</b></big></span>nn<tt>{calendar}</tt>",
Стало:
"tooltip-format": "<span color='#dfff00'><big><b>{:L%a %d %B}</b></big></span>nn<tt>{calendar}</tt>",
https://allwebs.ru/images/2026/09/23/e920448bada41b7415e0ebc1eba1e370.jpg
22:11
Я бы в style.css поправил
css
/* делаем свободнее окно календаря */
#tooltip {
padding: 15px 20px;
}
/* раздвигаем блоки месяцев */
#tooltip label table {
margin: 10px 15px; /* первый параметр — отступ сверху..снизу, второй — слева..справа */
}
/* увеличиваем расстояние между днями недели и числами */
#tooltip label td, #tooltip label th {
padding: 3px 6px; /* внутренний отступ для каждой цифры и дня недели */
}
/* отступ для названий месяцев, чтобы они не прилипали к дням недели */
#tooltip label th {
padding-bottom: 8px;
}
22:15
22:20
так запускаешь?
22:46
waybar обычный запуск
то что в подмодуле часов было, добавили в troubleshooting, там как раз про принудительное указание использовать системную локаль, что я и применил (префикс 'L')
https://github.com/Alexays/Waybar/wiki/Module:-Clock
20:38
https://rutube.ru/video/109683f356850ce25bbb61944b8be326/
21:08
А я сегодня удалил Hyprland, вновь поставил Niri, только теперь в связке не с DMS, а с Noctalia. Вот когда так чуть ли не в лоб их столкнул, я теперь понимаю, что Niri — более человечный вариант :(. В HL открываю больше 2-3 окон и уже начинаются проблемы, и это не говоря о том, что браузер почти на весь экран, как и Shotcut, и Handbrake, и что-нибудь ещё … В общем, не уместятся они все вместе.
Зато я теперь понимаю, почему у меня в Niri проблема со звуком именно при записи — устройство не обнаружено, хотя звук есть. HL устанавливается с пачкой зависимостей, а Niri всего из 2-х пакетов, надо искать недостающие в репах.
21:15
Да я вроде как все сам и совсем другим путем порешал))
https://pingvinus.ru/note/unifying-gui-style#c126948
21:21
https://allwebs.ru/images/2026/09/23/e920448bada41b7415e0ebc1eba1e370.jpg
21:32
21:35
но там и настройки моника надо менять в конфиге HL, а потом уже смотреть, что да как будет
23:15
22:25
23:12
23:38
Почему обидели? Создание своей системы лейтмотивом тут витает. После дистрохопа так или иначе к этому приходишь. Я свой iso под себя постоянно собираю/обновляю, давно, и не только я.
13:51
А вот настройки системы и весь визуал под себя , такое работает. Обновляю систему с нуля, потом свои настройки и визуал скриптом накатываю, попутно устанавливая недостающее.
17:23
17:29
— Мендель, у тебя еще недостаточно опыта, чтобы жениться!
— А когда же, по—твоему, у меня будет достаточно опыта для этого?
— Когда ты начнешь понимать, что жениться не стоит.
18:38
— Нет, все билеты забронированы.
— Это что, бронепоезд?..
Верно Малка говорит — когда будешь готов, тогда сам придёшь к этому.
21:30
21:33
18:56
Вот Вам пример раскладки "человечного" Niri (бесконечная лента окон) в сравнении с другими вариантами, которые все присутствуют в HL, выбирай по своему вкусу любой, а у Niri кроме monocle и выбрать нечего))
https://rutube.ru/video/940e50222fca2150ecebb4512f10ccd0/?r=wd
19:04
19:07
16:33
18:50
( Для GTK хуком можно принудительно «передернуть» тему: сначала применить дефолтную, а через sleep 0.1 вернуть нужную — тогда GTK принудительно перечитает кэш. Для Qt может qt6ct + плагин стилей??? это раздумья )
19:26
23:20
18:08
02:14
Это единный стиль ? Голубые папки и цвета приложений и розово-коричневое меню ...убунтовода стиль!
Единый стиль , это хотябы гармоничные цвета во всех приложениях = окнах и выпадающих в том числе...когда не видишь разницы между приложениями GTK и QT.
Понятно , что то что имеем в репозиториях из того и лепим что-то приятное для глаз...но это , безвкусица и ничего не слепить в Voide красивого , эстетичного и даже не в DE, в WM не слепить .
Без обид! моё субъективное мнение !
07:40
08:28
21:17
Прикольно, че...
21:31