Среди графических оболочек для Linux Hyprland выделяется с первой минуты: это тайловый композитор для Wayland, в котором каждое движение окна сопровождается анимацией, а внешний вид подгоняется вплоть до формы кривой, по которой окно вылетает на экран. Проект появился в 2022 году, написан на C++ и развивается скорострельно: 0.56.0 вышла в июле 2026 года, 0.57.0 в конце октября, 0.57.1 в начале ноября. Готового рабочего стола с панелью и меню здесь нет, зато есть власть над каждым пикселем: зазоры между окнами, толщина рамки, сила размытия, глубина тени и длительность анимаций с точностью до десятых долей секунды. По порядку: установка, анимации, размытие и тени, прозрачность терминала и горячие клавиши для прыжков между столами.

Чем тайловый композитор отличается от привычного рабочего стола

Hyprland не тянет за собой ни панели задач, ни файлового менеджера, ни центра управления. Это именно композитор: программа, которая принимает окна от приложений, раскладывает их по площади монитора и рисует всю графику средствами OpenGL. Окна не перекрываются, а делят экран, как ячейки в таблице, поэтому мышь нужна куда реже, чем в привычных средах. Схема раскладки выбирается из трёх: dwindle делит пространство пополам рекурсивно, master держит главное окно крупным и строит остальных в колонку, scrolling разворачивает окна в горизонтальную ленту.

Панель, обои, экран блокировки и прочие мелочи собираются из соседних утилит: строку состояния рисует waybar, обои накатывает hyprpaper, экран блокирует hyprlock, а меню приложений открывает hyprlauncher. Встроенный Xwayland позволяет запускать и старые программы из мира X11.

Характер проекта виден в мелочах. В 0.56.0 летом 2026 года добавили размытие в движении для перетаскиваемых окон и градиентные тени, а в 0.57.0 осенью появилось колыхание окон: при перетаскивании окно слегка прогибается и успокаивается за долю секунды. За это отвечает категория decoration.wobble с параметрами жёсткости и демпфирования, по умолчанию эффект выключен.

Установка из пакетов и первый запуск

Ставится всё одной командой. В Arch Linux и производных в обычном терминале выполняется:

sudo pacman -S hyprland

Репозитории несут проверенные выпуски, свежие сборки живут в AUR пакетом hyprland-git, но для первого знакомства стабильной версии достаточно. В Ubuntu 26.10 пакет лежит в universe и соответствует версии 0.56.2, Debian 13 берёт его из backports, а в NixOS достаточно строки programs.hyprland.enable = true.

После установки нужно выйти из сеанса и в меню дисплей-менеджера выбрать Hyprland. С SDDM обычно проблем нет, а вот с GDM разработчики честно предупреждают о возможных капризах. Первый запуск встречает стандартными обоями и подсказкой: SUPER+Q открывает терминал kitty, SUPER+C закрывает окно, SUPER+M завершает сеанс.

Состояние композитора проверяется командой hyprctl version в любом терминале:

hyprctl version

Она печатает номер версии и флаги сборки. Затем начинается самое интересное: конфигурация. В актуальных выпусках это Lua-сценарий в файле ~/.config/hypr/hyprland.lua, и он уже прилично заполнен: мониторы, автозапуск, цвета рамок, готовый набор анимаций. В старых руководствах встречается файл hyprland.conf с другим синтаксисом, поэтому чужие сниппеты из интернета приходится переводить на новый лад. После правок конфиг применяется командой hyprctl reload без выхода из сеанса.

Анимации окон на кривых Безье и пружинах

Анимации в Hyprland устроены как дерево: в корне лежит глобальная настройка, от которой наследуются ветки появления и исчезновения окон, их перемещения, слоёв интерфейса, затухания, рамки и переключения рабочих столов. Ветку можно не задавать вовсе, тогда она берёт значения родителя. Скорость измеряется в десятых долях секунды: speed = 8 означает 800 миллисекунд.

Траектории описываются кривыми. Классика жанра, кривая Безье, определяется четырьмя точками, из которых настраиваются две промежуточные. Любители физики могут вместо неё описать пружину с массой, жёсткостью и демпфированием. В файле ~/.config/hypr/hyprland.lua это выглядит так:

hl.curve("overshoot", { type = "bezier", points = { {0.5, 0.9}, {0.1, 1.1} } })
hl.curve("rubber",    { type = "spring", mass = 1, stiffness = 70, damping = 10 })

Кривая получает имя, которое потом подставляется в нужную ветку анимации:

hl.animation({ leaf = "workspaces",    enabled = true, speed = 8, bezier = "overshoot" })
hl.animation({ leaf = "windowsIn",     enabled = true, speed = 4, spring = "rubber", style = "popin 87%" })
hl.animation({ leaf = "workspacesOut", enabled = true, speed = 3, bezier = "default", style = "slide 20%" })

Стили уточняют характер движения: окна умеют slide, popin и gnomed, рабочие столы добавляют slidevert, fade и slidefade. Число после стиля задаёт степень: popin 87% вырастает из 87 процентов размера, slide 20% сдвигает стол на пятую часть ширины экрана.

Стандартный набор из примера конфигурации уже прилично откалиброван: окна вылетают пружиной easy с жёсткостью 238.1191 и демпфированием 24.21279333, а столы сменяются затуханием за 194 миллисекунды. При желании всё это перекрывается парой собственных строк.

Физика здесь не для галочки: отношение демпфирования к его критическому значению решает, отскочит ли пружина, остановится ли окно без колебаний или уйдёт в вялое движение. Документация советует держать коэффициент в районе 0.6-0.8, чтобы движение ощущалось упругим, но не цирковым.

Отдельная осторожность касается анимации угла градиента рамки: стиль loop заставляет композитор непрерывно рисовать кадры с частотой обновления экрана, 60 раз в секунду для 60-герцового монитора, причём даже при выключенных анимациях. На ноутбуке это ощутимо бьёт по заряду, так что цветная анимированная рамка оправдана только на настольной машине с запасом мощности.

Размытие фона и одиннадцать его вариантов

Размытие фона под окнами включено в Hyprland с завода, но по умолчанию выглядит скромно: размер 8 пикселей, один проход, лёгкий шум 0.0117, контраст 0.8916, насыщенность vibrancy 0.1696. Вся прелесть раскрывается после ручной подстройки в файле ~/.config/hypr/hyprland.lua:

hl.config({
    decoration = {
        blur = {
            enabled  = true,
            size     = 6,
            passes   = 2,
            noise    = 0.02,
            vibrancy = 0.3,
            variant  = "acrylic",
        },
    },
})

Параметры size и passes работают в паре: размер наращивает радиус, число проходов сглаживает результат. Оба обязаны быть не меньше единицы, иначе эффект не применяется вовсе. Диапазон у passes до 10, но каждый проход бьёт по видеокарте, поэтому на слабом железе дальше двух идти не стоит.

Выпуск 0.57.0 привнёс одиннадцать вариантов узора размытия: kawase по умолчанию, акриловое стекло acrylic, северное сияние aurora, дождь на стекле drops, двумерная жидкость fluid_jar, трещины инея frost, дымка haze, тепловой шов heat_shimmer, призма prism, круги от касания ripple и вода water. У каждого свои параметры: у акрила это аберрация aberration, ширина изогнутой кромки bulb (по умолчанию 48.0) и преломление refraction.

Есть и спасатели производительности: new_optimizations по умолчанию включён и заметно снижает нагрузку, xray запрещает плавающим окнам учитывать под собой тайловые, а размытие для всплывающих меню и служебных столов выключено из коробки как дорогое. Экспериментировать удобно на лету:

hyprctl eval 'hl.config({ decoration = { blur = { size = 12, passes = 3 } } })'

Команда выполняется в терминале работающей сессии и меняет эффект немедленно, но после перезагрузки конфига всё вернётся к записанному, так что приглянувшиеся значения переносятся в файл.

Тени, подсветка и прозрачность терминала

Тени включены по умолчанию и по умолчанию же почти незаметны: радиус range всего 4 пикселя, цвет 0xee1a1a1a с полупрозрачным альфа-каналом, мощность спада render_power равна трём. Поднятие радиуса до 15-20 и снижение мощности до двойки даёт мягкую глубокую тень:

hl.config({
    decoration = {
        shadow = {
            enabled      = true,
            range        = 18,
            render_power = 2,
            offset       = { 0, 6 },
        },
        glow = {
            enabled = true,
            range   = 14,
        },
        active_opacity   = 1.0,
        inactive_opacity = 0.94,
    },
})

Подсветка glow рисует ореол внутри рамки активного окна, по умолчанию она выключена, а диапазон ограничен сотней пикселей. Смещение offset имитирует свет сверху и делает силуэт окна объёмнее.

Прозрачность задаётся по правилам: active_opacity относится к активному окну, inactive_opacity к остальным, fullscreen_opacity к развёрнутым на весь экран. Значения перемножаются, и правило для отдельного приложения с 0.5 плюс активная прозрачность 0.5 дадут в сумме 0.25, поэтому перемножение держится в уме.

Для терминала есть два пути: глобальный через правило окна или собственная настройка самого приложения. Правило выглядит так:

hl.window_rule({
    match = { class = "kitty" },
    opacity = "0.9 override 0.78 override 1.0 override",
})

Три числа задают прозрачность активного окна, неактивного и полноэкранного, а слово override запрещает перемножение с глобальными значениями. Часть терминалов умеет управлять прозрачностью сама: в kitty за это отвечает строка background_opacity 0.85 в файле ~/.config/kitty/kitty.conf, в foot параметр alpha=0.9 в секции [colors] файла ~/.config/foot/foot.ini:

# ~/.config/kitty/kitty.conf
background_opacity 0.85
dynamic_background_opacity yes
# ~/.config/foot/foot.ini
[colors]
alpha=0.9

Размытие видно только там, где окно полупрозрачно, поэтому эффекты работают в связке: терминал с прозрачностью 0.85 поверх размытия acrylic выглядит как стеклянная плитка на столе. Параметр ignore_opacity в группе blur (по умолчанию true) определяет, зависит ли сила эффекта от прозрачности окна.

Горячие клавиши для мгновенных прыжков между столами

Тайловый композитор живёт на клавиатуре, и комбинации здесь описываются одной строкой на каждую: сначала клавиши в кавычках, затем dispatcher, а модификаторы перечисляются через плюс. Рабочие столы в примере конфигурации привязываются коротким циклом:

local mainMod = "SUPER"

for i = 1, 10 do
    local key = i % 10
    hl.bind(mainMod .. " + " .. key,         hl.dsp.focus({ workspace = i }))
    hl.bind(mainMod .. " + SHIFT + " .. key, hl.dsp.window.move({ workspace = i }))
end

Клавиша Super здесь та самая, с эмблемой Windows. Цифры с Super переносят фокус между десятью столами, а те же цифры с SHIFT отправляют активное окно на нужный стол вместе с фокусом. Число 10 хитро превращается в 0, чтобы столы соответствовали цифровому ряду.

Соседние столы листаются и относительными адресами:

hl.bind(mainMod .. " + mouse_down", hl.dsp.focus({ workspace = "e+1" }))
hl.bind(mainMod .. " + mouse_up",   hl.dsp.focus({ workspace = "e-1" }))

Адрес e+1 означает следующий существующий стол, e-1 предыдущий, поэтому колесо мыши с зажатым Super листает столы подряд без разрывов. Отдельная радость, служебный стол special workspace, выдвижная полка поверх любого экрана:

hl.bind(mainMod .. " + S",         hl.dsp.workspace.toggle_special("magic"))
hl.bind(mainMod .. " + SHIFT + S", hl.dsp.window.move({ workspace = "special:magic" }))

Проще всего начать с минимального набора, который закрывает большинство повседневных задач:

  1. SUPER и цифры от 1 до 9 и 0 для мгновенного прыжка на соответствующий стол;
  2. те же цифры с SHIFT для переноса активного окна на выбранный стол;
  3. SUPER и колесо мыши для листания столов по кругу;
  4. SUPER и S для выдвижной служебной области под терминал с текущими задачами.

Названия нестандартных клавиш подскажет утилита wev: её достаточно запустить, нажать кнопку и прочитать keysym. Для привязки по физическому коду есть префикс code:28, он привяжет клавишу T независимо от раскладки. Предостережение серьёзное: обработчик комбинации не должен блокироваться, потому что Lua-функции исполняются в главном цикле композитора, и зависший вызов замораживает ввод и весь рабочий стол. Долгие команды лучше отдавать через hl.dsp.exec_cmd.

Практические мелочи, которые сэкономят время

Эксперименты с эффектами удобно вести на лету через hyprctl eval, а закреплённые значения переносить в файл: после hyprctl reload всё временное откатывается. Такой ритм превращает настройку в игру: изменил, посмотрел, оставил или отбросил.

На встроенной графике обычно хватает одного-двух проходов размытия и тени с радиусом в десяток пикселей, на игровой видеокарте можно позволить себе acrylic с преломлением. Приятный штрих для концентрации, dim_inactive с dim_strength 0.5: неактивные окна приглушаются, и взгляд сразу находит нужное. Зазоры gaps_in 5 и gaps_out 20 пикселей настраиваются в группе general рядом с толщиной рамки border_size.

Гибкость здесь покупается не галочкой в настройках, а строкой в конфиге, и именно за это Hyprland ценят: система растёт вместе с потребностями, а весь рабочий стол помещается в один текстовый файл, который переносится на новую машину вместе с папкой hypr. Пара вечеров с hyprctl eval под рукой, и на экране оказывается среда, которую не стыдно показать и не жалко перестроить.