Речь в сегодняшней статье пойдет о динамическом тайловом менеджере на wayland — Hyprland. Разберем встроенные возможности и особенности их применения в конфигурации рабочего окружения. Ни коим образом не претендую на переписывание базы знаний Hyprland Wiki, просто постараюсь подробней остановиться на некоторых моментах. Все примеры сделаны на базе моей рабочей системы, с моими настройками. Итак, поехали.
Hyprland, помимо управления окнами, является также композитором на wayland и для него разработчиками создана CLI-утилита, с помощью которой пользователь может контролировать отдельные элементы и управлять ими. Hyprctl — достаточно мощный инструмент, возможности которого постоянно дополняются и расширяются. Список доступных команд можно получить, набрав в терминале:
$ hyprctl help
Разделение конфигурационного файла hyprland.conf на части
По-умолчанию файл пользовательской конфигурации оконного менеджера находится по адресу: < ~/.config/hypr/hyprland.conf >. Крайне неудобно все настройки вносить в один единственный файл, который со временем становится очень большим и тяжелым для редактирования. К счастью, в hyprland реализована возможность разбивки конфигурации на части с указанием ссылок на них в основном файле настроек. На моей машине все конфиг-файлы находятся в папке: < ~/dotfiles >, на которые созданы символьные ссылки в < ~/.config >, таким образом реализована возможность быстрого сохранения моей конфигурации, а также ее воспроизведения на любой другой компьютер. Основной файл конфигурации hyprland.conf выглядит так:
# Monitor
# .......
source = ~/dotfiles/hypr/conf/monitor.conf
# Autostart
# .........
source = ~/dotfiles/hypr/conf/autostart.conf
# Environment
# ...........
source = ~/dotfiles/hypr/conf/environment.conf
# Keyboard
# ........
source = ~/dotfiles/hypr/conf/keyboard.conf
# Load Pywal colors
# .................
source = ~/.cache/wal/colors-hyprland.conf
# Load configuration files
# ........................
source = ~/dotfiles/hypr/conf/window.conf
source = ~/dotfiles/hypr/conf/decoration.conf
source = ~/dotfiles/hypr/conf/layouts.conf
source = ~/dotfiles/hypr/conf/misc.conf
source = ~/dotfiles/hypr/conf/keybindings.conf
source = ~/dotfiles/hypr/conf/windowrules.conf
# Animation
# .........
source = ~/dotfiles/hypr/conf/animation.conf
Настройка переключателя раскладок клавиатуры
Для использования сочетаний клавиш (в примере win+space), нужно добавить в файл конфигурации клавиатуры блок следующего содержания:
~/dotfiles/hypr/conf/keyboard.conf
-------------------------------------
input {
kb_layout = us,ru
kb_options = grp:win_space_toggle
}
-------------------------------------
Можно добавить переключатель на статусную панель (в примере waybar), по клику на который будет осуществляться смена раскладки. Для начала воспользуемся hyprctl и определим тип нашей клавиатуры:
$ hyprctl devices
Используя полученную информацию, добавим модуль переключателя в файл < ~/dotfiles/waybar/modules.json >, как показано на скриншоте ниже, не забывая настроить конфигурационные файлы для темы waybar:
В нашем примере, в конфиг добавить
~/dotfiles/waybar/themes/config
-------------------------------------------------
{
// Load Modules
"include": ["~/dotfiles/waybar/modules.json"],
// Modules Right
"modules-right": [
"hyprland/language",
],
}
-------------------------------------------------
Стиль отображения содержит строки
~/dotfiles/waybar/themes/style.css
-------------------------------------------------
#language {
background-color: transparent;
font-size: 16px;
color: #000000; /* черный, можно указать любой на ваш выбор */
border-radius: 15px;
padding: 2px 10px 0px 10px;
margin: 5px 15px 5px 0px;
opacity:0.8;
border:3px solid #FFFFFF; /* белый, можно указать любой на ваш выбор */
}
------------------------------------------------
Настройка поведения окон рабочего стола
По-умолчанию в Hyprland окна автоматически группируются в режиме тайлинга. Воспользуемся возможностями утилиты hyprctl для изменения этого режима.
$ hyprctl dispatch workspaceopt allfloat
Создадим bash-скрипт, содержащий эту команду (например toggleallfloat.sh)
для удобства вызова функции переключения режимов группировки окон
-----------------------------------------
#!/bin/sh
hyprctl dispatch workspaceopt allfloat
-----------------------------------------
Сделаем его исполняемым:
$ chmod +x ~/dotfiles/scripts/toggleallfloat.sh
Вызов скрипта toggleallfloat.sh закрепляем за своей комбинацией клавиш, при нажатии которой окна приложений можно будет двигать по экрану в "ручном" режиме, как показано на скриншоте:
Для отдельных окон приложений можно задать пользовательские настройки поведения. Все что касается поведения окон сконфигурировано в отдельный файл < ~/dotfiles/hypr/conf/windowrules.conf >. Например, в моей конфигурации, эмулятор терминала kitty запускается в режиме "плавающего" окна поверх остальных.
# Window rules
# ............
windowrulev2 = float,class:^pavucontrol
windowrulev2 = float,class:^blueman-manager
windowrulev2 = float,class:^kitty
windowrulev2 = idleinhibit fullscreen,class:^smplayer
windowrulev2 = idleinhibit fullscreen,class:^mpv
windowrulev2 = idleinhibit fullscreen,class:^floorp
windowrulev2 = opacity 0.85 0.95,class:^thunar
windowrulev2 = opacity 0.95 0.85,class:^mousepad
Для запуска эмулятора в режиме тайлинга (или терминального приложения, например ranger), опцию [tile] нужно указать принудительно в файле конфигурации сочетаний клавиш. При стандартном вызове из меню приложений или по команде без указания этой опции, оно будет запущено по правилам определенным в конфигурации поведения окон:
Глобально в hyprland можно настроить прозрачность активных и пассивных окон, у меня это реализовано в файле < ~/dotfiles/decoration.conf >:
# Window decorations
# ..................
decoration {
rounding = 10
blur {
enabled = true
size = 6
passes = 2
new_optimizations = on
ignore_opacity = true
xray = true
# blurls = waybar
}
active_opacity = 1.0
inactive_opacity = 0.8
fullscreen_opacity = 1.0
drop_shadow = true
shadow_range = 30
shadow_render_power = 3
col.shadow = 0x66000000
}
У некоторых приложений (alacritty, kitty... etc) имеется встроенная возможность применять свою прозрачность активного окна. При этом окна будут выглядеть "по-разному":
В таком случае, по желанию, можно воспользоваться возможностями hyprland и задать индивидуальные параметры для окон приложений, не поддерживающих собственную конфигурацию такого поведения. В моем случае это реализовано в уже знакомом нам файле < ~/dotfiles/hypr/conf/windowrules.conf >, где первая цифра устанавливает прозрачность активного окна, вторая - неактивного в % соотношении к заданной прозрачности активного (то есть цифры перемножаются)
# Window rules
# ............
windowrulev2 = float,class:^pavucontrol
windowrulev2 = float,class:^blueman-manager
windowrulev2 = float,class:^kitty
windowrulev2 = idleinhibit fullscreen,class:^smplayer
windowrulev2 = idleinhibit fullscreen,class:^mpv
windowrulev2 = idleinhibit fullscreen,class:^floorp
windowrulev2 = opacity 0.85 0.95,class:^thunar
windowrulev2 = opacity 0.95 0.85,class:^mousepad
Дополнительно для gtk-приложений можно задать свой собственный стиль. На примере thunar покажу файл gtk.css (не забудьте поместить файл в папку настроек gtk-3.0). Это для тех, кто захочет использовать данный опционал (сам не использую):
/* sidebar */
.thunar .sidebar .view {
background-color: #f53c3c;
}
/* main view */
.thunar .standard-view .view {
background-color: #22272e;
}
/* status bar */
.thunar grid paned grid {
background-color: yellow;
}
/* toolbar */
.thunar toolbar, .thunar toolbar entry {
background-color: green;
}
Автоматизация блокировки экрана
В экосистеме Hyprland, которая активно развивается, стали доступны утилиты для автоматизации блокировки экрана (hyprlock, hypridle). Используя предложенные конфигурации по-умолчанию, можно адаптировать приложения под свои нужды.
Ниже представлен доработанный вариант конфига. Как видим, спустя 5 минут приглушается яркость экрана до 20% (для этого потребуется пакет brightnessctl) , спустя еще 5 минут включается блокировка, еще спустя 3 минуты экран отключается, а по прошествии 20 минут бездействия компьютер переходит в режим ожидания.
hypridle.conf
-------------------------------------------------------
# HyprIdle
# ........
# General_settings
general {
# lock_cmd = notify-send "lock!" # dbus/sysd lock command (loginctl lock-session)
# unlock_cmd = notify-send "unlock!" # same as above, but unlock
# before_sleep_cmd = hyprlock # command before sleep
# after_sleep_cmd = notify-send "Awake!" # command after sleep
ignore_dbus_inhibit = false # (used by e.g. firefox or steam)
}
# Screen_brightness
listener {
timeout = 300
on-timeout = brightnessctl s 20%
on-resume = brightnessctl s 100%
}
# Screen_lock
listener {
timeout = 600
on-timeout = hyprlock
on-resume = notify-send "Welcome back to Hyprland!"
}
# Screen_off
listener {
timeout = 780
on-timeout = hyprctl dispatch dpms off
on-resume = hyprctl dispatch dpms on
}
# Suspend
listener {
timeout = 1200
on-timeout = systemctl suspend
# on-resume = notify-send "Welcome back to Hyprland!"
}
-------------------------------------------------------
hyprlock.conf
------------------------------------------------------
# HyprLock
# ........
background {
monitor =
path = $HOME/dotfiles/hypr/lockscreen.png # only *.png supported for now
color = rgba(25, 20, 20, 1.0)
blur_passes = 4 # 0 disables blurring
blur_size = 2
noise = 0.0117
contrast = 0.8916
brightness = 0.8172
vibrancy = 0.1696
vibrancy_darkness = 0.0
}
input-field {
monitor =
size = 200, 50
outline_thickness = 1
dots_size = 0.2 # Scale of input-field height, 0.2 - 0.8
dots_spacing = 0.15 # Scale of dots' absolute size, 0.0 - 1.0
dots_center = true
outer_color = rgb(000000)
inner_color = rgb(200, 200, 200)
font_color = rgb(10, 10, 10)
fade_on_empty = false
placeholder_text = <i>Input Password...</i> # Text rendered in the input box when it's empty.
hide_input = false
position = 0, -50
halign = center
valign = center
}
label {
monitor =
text = cmd[update:1000] echo "<span foreground='##fff333'>$(date +"%X")</span>"
color = rgba(200, 200, 200, 1.0)
font_size = 60
font_family = Noto Sans
position = 0, 150
halign = center
valign = center
}
label {
monitor =
text = cmd[update:1000] echo "<span foreground='##fff333'>$(date +"%A %d %B %Y")</span>"
color = rgba(200, 200, 200, 1.0)
font_size = 18
font_family = Noto Sans
position = 0, 100
halign = center
valign = center
}
-----------------------------------------------------
В моей системе пока используется пакет swaylock-effects-git, содержащий в себе swayidle, а также пакет brightnessctl для управления мощностью подсветки экрана. Автоматизация реализована с помощью bash-скрипта следующего содержания, который включается при старте hyprland (аналогичным способом, как hypridle):
#/bin/sh
if [ -f "/usr/bin/swayidle" ]; then
swayidle -w timeout 300 'brightnessctl s 20%' \
resume 'brightnessctl s 100%' \
timeout 600 'swaylock -f' \
timeout 780 'hyprctl dispatch dpms off' \
resume 'hyprctl dispatch dpms on' \
timeout 1200 'systemctl suspend' \
before-sleep 'swaylock -f' &
else
echo -e '3[1;5;31m'
echo "SWAYIDLE not installed"
echo -e '3[0m'
sleep 10
fi;
Для отключения/включения экрана используется вызов утилиты hyprctl. Чтобы "не потерять" экран после отключения (актуально только для swaylock, не использовать с hypridle/hyprlock), настроена его активация на поведение мыши в файле < ~/dotfiles/misc.conf >, ссылка на который добавлена в головной файл конфигурации hyprland.conf
# Misc settings
# .............
misc {
disable_hyprland_logo = true
disable_splash_rendering = true
mouse_move_enables_dpms = true # ТОЛЬКО ДЛЯ SWAYLOCK !!!
# key_press_enables_dpms = true # ТОЛЬКО ДЛЯ SWAYLOCK !!!
}
Утилиты экосистемы hyprpaper и hyprpicker
hyprpaper может использоваться в качестве инструмента для управления обоями рабочего стола. Файл конфигурации достаточно прост:
hyprpaper.conf
--------------------------------------------------
splash = true
preload = /home/as/Downloads/halloween.png
wallpaper = eDP-1,/home/as/Downloads/halloween.png
ipc = true # данный параметр включает возможность автоматизации вызова через hyprctl
--------------------------------------------------
hyprpicker вообще не требует никаких настроек, просто вызовите утилиту, используя командную строку; на экране появится лупа для выбора объекта, для которого желаете определить код цвета.
Плагины Hyprland
Hyprland поддерживает плагины. Для управления ими потребуется установить пакет hyprpm. Официальные плагины устанавливаются/удаляются следующими командами:
Добавление репозитория плагинов:
$ hyprpm add https://github.com/hyprwm/hyprland-plugins
Удаление репозитория плагинов:
$ hyprpm remove https://github.com/hyprwm/hyprland-plugins
Управление плагинами:
Просмотр списка установленных плагинов:
$ hyprpm list
Активация установленного плагина:
$ hyprpm enable name # name = имя плагина
Деактивация установленного плагина:
$ hyprpm disable name
На данный момент в официальном репозитории доступно всего несколько плагинов, среди которых двойная окантовка окна, настраиваемая строка заголовка, эффект шлейфа при перемещении окон. Практического применения для себя лично пока не нашел, потому не использую. Но продолжаю следить за развитием темы.
Вместо заключения
Hyprland крайне удобная, легко кастомизируемая среда, возможности которой постоянно расширяются. К тому же настройки этого менеджера достаточно просты и понятны, что делает его очень востребованным среди пользователей. А с наступлением эры wayland популярность Hyprland будет только расти.
Комментарии
09:53
По-мне - один конфиг удобней десятка. У Hyprland он не такой большой и не составлен на каком-нить проклятом yaml или xml (как у некоторых других WM) где без синтаксис-чека можно сжечь кресло.
Тем более, когда правишь его из консоли.
Про поведение окон. В дополнение к master и dwindle режимам, есть еще подрежим group, запихивающий окна в "стопку" с вкладками. Так иногда удобно группировать консольные сеансы. Или при работе с документами "наскирдовать" заготовки/черновики/допы в одной группе, а результирующие - в другой. И переносить/править без привычных ругательств для "обычных" DE, когда у тебя открыто 5+ документов одного типа.
11:22
>> Значит не до конца поняли идею или просто не пользуетесь данным опционалом. Например, у меня несколько вариантов конфигураций анимаций, декораций, поведения окон, а также глобальных параметров окружения в зависимости от применения. Для каждого есть свой файл конфига и нужный просто включается в основной файл конфигурации ссылкой на него. Просто и удобно. Разные конфиги для разных применений, переключение между которыми легко автоматизируется простейшим скриптом. Экспериментальные настройки также удобно тестировать, не меняя ничего в глобальном смысле.
'group' - про это имелось в виду?
bind = $mainMod, G, togglegroup
11:31
А возможно написать подобные (подробные) статьи про i3wm, qtile ?
Да, помню, что про qtile было недавно: https://pingvinus.ru/note/nios-qtile-setup
11:46
В данный момент установлен у меня для отдельного пользователя в кальке. Но, есть и ложка дегтя, менеджер всем хорош, но в базе сильно ограничен. Тут либо его ставить в виртуал-окружение и туда же добавлять qtile-extras и пользоваться ими, либо самому писать виджеты и дополнения на python под него. Если речь про Арч, Никс - то там проще, все системно устанавливается. Это все под Х11. Для wayland лично мой выбор - hyprland.
13:15
Hyprland не пользую, но изложено интересно и, наверняка, будет полезно пытливым умам, решившим попробовать на вкус тайлинг!
19:17
Хорошо описано,всё разложено по полочкам
На данный момент также использую Hyprland-Void
https://ibb.co/fqhj7MR
08:55
11:56
21:06
22:57
тоже не... и кстати часто тут вижу публикуют, как борятся имея старое железо за скорость, дык вот в дистроватче очень рекомендуют дебиан с LXDE - прям ништяк особливо для лаптопов.
Сам попробую стаб версию 12,5.
21:53
01:35
12:28
Не знаю, в чём тут неудобство... У меня ВСЕГДА! (хоть ты тресни) браузер на первом workspace, терминал и файл-менеджер на третьем, и т.д. И так на любом дистро и на любом DE или WM. Наоборот, считаю, верх практичности и удобства.
15:32
windowrulev2 = suppressevent maximise, class:.* # You'll probabbly lake this.
windowrule = float, ^(org.kde.dolphin)$
windowrule = float, ^(org.kde.kcalc)$
windowrule = float, ^(pavucontrol-qt)$
windowrule = float, ^(org.kde.polkit-kde-authentication-agent-1)$
windowrule = float, ^(org.clementine_player.Clementine)$
#windowrulev2 = float,class:^(Yad_new)$,title:^(yad_new)$
#windowrulev2 = float,class:^(Yad_v12_3)$
windowrulev2 = float,class:^(Yad)
windowrulev2 = center 1,class:^(MEGAsync)$,title:^(MEGAsync)$
windowrulev2 = float,class:^(mediainfo-gui)$,title:^(MediaInfo)$
windowrulev2 = float,class:^(org.kde.konsole)$,title:^(calcurse - Konsole)$
windowrulev2 = float,class:^(kitty)$,title:^(calcurse)$
windowrulev2 = workspace 5,class:^(org.kde.haruna)$
windowrulev2 = workspace 2,class:^(konsole)$
windowrulev2 = workspace 4,class:^(org.kde.kate)$
windowrulev2 = workspace 5,class:^(mpv)$
windowrulev2 = workspace 5,class:^(org.clementine_player.Clementine)$
windowrulev2 = workspace 6,class:^(avidemux3_qt5)$
windowrulev2 = workspace 7,class:^(gimagereader-qt5)$
windowrulev2 = workspace 8,class:^(simple-scan)$
windowrulev2 = workspace 9,class:^(org.kde.plasma-systemmonitor)$
windowrulev2 = workspace 10,class:^(kdesystemsettings)$
# See https://wiki.hyprland.org/Configuring/Keywords/ for more
$mainMod = SUPER
$PSF = ~/Скриншоты/
#$PSF_file = ps_$(date +"%Y%m%d%H%M%S").png
# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
bind = $mainMod, K, exec, [workspace 2 silent] konsole
bind = $mainMod, C, killactive,
bind = $mainMod, M, exit,
bind = $mainMod, F1, exec, [workspace 1 silent] /opt/google/chrome/google-chrome
bind = $mainMod, F2, exec, [workspace 1 silent] firefox-bin
bind = $mainMod, F3, exec, [workspace 3 silent] dolphin
bind = $mainMod, F5, exec, [workspace 1 silent] opera --enable-features=UseOzonePlatform --ozone-platform=wayland
bind = $mainMod, F6, exec, [workspace 6 silent] ~/bin/avidemux.appImage
bind = $mainMod, F9, exec, kcalc
bind = $mainMod, V, togglefloating,
bind = $mainMod, D, exec, rofi -show drun -theme simple-tokyonight.rasi
bind = $mainMod, P, pseudo, # dwindle
bind = $mainMod, J, togglesplit, # dwindle
04:11
11:02
11:55
12:00
13:00
18:31
И запомнить проще, и столов можно наплодить больше.
18:38
12:58
переключиться на другой Раб.стол - Ctrl+1, 2, 3
послать окно программы на другой Раб.стол - Alt+1, 2, 3
13:03
12:34
13:07
13:50
Не видно на рабочем столе, но практичнее "Обзорный режим"
https://docs.xfce.org/apps/xfdashboard/start
14:25
14:49
Этот огрооомный плагин смещал положение всего остального и нарушал некий баланс по нагруженности информационной.
14:53
14:37
14:40
18:33
В любом Nerd шрифте полдюжины глифов с цифирами в разной окантовке
18:39
15:35
04:20
13:02
14:09
15:17
16:07
если раскладка русская, то каждый вводимый символ будет отображаться дважды; переключение раскладок работает как задано в настройках hyprland. Визуально не отображается, ну и фиг с ним, думаю дополнят в будущем.
17:21
19:53
23:11
https://pingvinus.ru/gallery/5014
Далее этот вариант был доработан "под себя". Позже появилась данная статья, с модифицированным вариантом стартового конфига:
https://pingvinus.ru/note/archlinux-hyprland
Ну а сегодня, за основу данной статьи, был взят уже мой рабочий вариант, со своим набором софта и настройками.
Stephan Raabe давно ушел сильно дальше, у него полноценное ДЕ, которое к тому же выполнено очень качественно. Там от пользователя требуется просто выбрать готовый вариант настройки и наслаждаться окружением, к тому же реализована возможность обновления.
Но за стартовый вариант я ему сильно благодарен, ведь во многом поэтому я и "окунулся с головой" в тему оконных менеджеров: hyprland и qtile
23:55
16:57
Не могу настроить скриншоты и перетаскивание окон на другой рабочий стол.
В целом hyprland очень удобен, нужно изучать