Решил попробовать нашумевший дистрибутив Omarchy Linux и понять — за что же его все так хвалят.
И сразу столкнулся с тем, что поддержки русского языка в полной мере нет в интерфейсе. Да, локаль можно перевести и доустановить нужное, но сами меню, плагины — не имеют переключения интерфейса на русский язык.
Поэтому сначала я начал доустанавливать всё руками, а потом собрал всё в скрипты, которые делают следующее:
- ставят локаль
ru_RU.UTF-8, раскладкуus,ruс переключением по Alt, словари для проверки орфографии и русские man-страницы; - переводят меню Omarchy, меню горячих клавиш (Super+K) и панели бара: календарь, сеть, Bluetooth, звук, питание, уведомления, буфер обмена и ещё с десяток;
- настраивают мелочи, о которых вспоминаешь только когда они понадобились: часовой пояс, кириллический шрифт в TTY, символы
₽ № «» —через Compose, погоду в метрической системе с русскими названиями городов; - ставят Telegram, русский голосовой ввод (voxtype + Parakeet) и синтез речи;
- добавляют в виджет сети Яндекс DNS, DNS4EU и NextDNS вместо Cloudflare и Google;
- по желанию — PC/SC-стек для ЭЦП и сертификаты Минцифры с еженедельной проверкой срока.
Ниже — что внутри, как это ставить и где пришлось повозиться.
Почему нельзя просто поставить LANG=ru_RU
В Omarchy нет i18n как такового. Строки меню, панелей и подсказок горячих клавиш зашиты прямо в конфиги и QML-плагины. Смена локали переводит GTK- и Qt-приложения, но собственный интерфейс дистрибутива остаётся английским.
Вторая сложность — всё стоковое лежит в /usr/share/omarchy/. Править там можно, но первый же omarchy update всё вернёт. Поэтому я сразу поставил себе правило: системные файлы Omarchy не трогаю, работаю только через ~/.config/ и механизмы расширения, которые предусмотрел сам дистрибутив.
Из этого правила и выросли все решения ниже. Где-то это переопределения, где-то клоны плагинов, где-то сгенерированная копия стокового скрипта.
Как это устроено
Изначально это был один длинный bash-скрипт. Быстро стало понятно, что кому-то не нужен Telegram, кому-то голосовой ввод, а сертификаты Минцифры ставить молча вообще нельзя. Так появился install.sh — оркестратор, и папка modules/ с независимыми модулями.
Каждый модуль — это файл modules/NN-имя.sh с метаданными в шапке: название, группа, включён ли по умолчанию, нужен ли sudo, описание. Установщик читает эти шапки и собирает из них меню. Чтобы добавить свой модуль, достаточно положить файл в папку.
Что получилось в итоге:
| Группа | Модули |
|---|---|
| Базовая | locale, hypr-layout, spell |
| Простое | timezone, xcompose, vconsole-font, office |
| Приложения | telegram, weather, dns, voxtype |
| Интерфейс | panels, menu, keybindings, fastfetch, tts |
| Работа (не по умолчанию) | ecp, mincifry |
Несколько вещей, которые я сделал намеренно:
- sudo запрашивается один раз на всю установку, а не в каждом модуле;
- если упал один модуль, остальные продолжают работу, а в конце печатается сводка;
- шелл Omarchy перезапускается один раз в конце, и только если менялись панели;
- всё идемпотентно: повторный запуск ничего не ломает и не дублирует.
Дальше — про три самых интересных места.
Меню Omarchy
Omarchy позволяет переопределять пункты меню через ~/.config/omarchy/extensions/omarchy-menu.jsonc. translate-menu.py читает стоковое меню и пишет туда переведённые label и title.
Подвох нашёлся не сразу: если записать в расширение только label, Omarchy затирает у пункта action, icon и when. Поэтому пункты пишутся целиком, а переводятся только текстовые поля. Словари LABELS и TITLES лежат в начале скрипта.
Горячие клавиши (Super+K)
Описания привязок лежат в Lua-конфигах Hyprland внутри /usr/share/omarchy/, а omarchy-menu-keybindings показывает их как есть. Переопределить это штатно нельзя.
Пришлось сделать так: keybindings-ru.py собирает копию стокового скрипта в ~/.local/bin/omarchy-menu-keybindings-ru и добавляет в неё шаг перевода. В словаре 171 описание плюс правила для шаблонных строк вроде «рабочий стол N». Затем SUPER + K переназначается в ~/.config/hypr/bindings.lua — в блок между маркерами, чтобы его можно было найти и убрать.
Перевод применяется после сортировки, поэтому порядок строк остаётся стоковым. Если структура исходного скрипта после обновления изменится, генератор остановится с сообщением, а не соберёт что-то битое.
Панели бара
Это самая трудоёмкая часть. Панели — QML-плагины, и переопределений для них нет. Зато есть omarchy plugin clone: он делает копию плагина в ~/.config/omarchy/plugins/, а оригинал отключает.
translate-plugins.py для каждого плагина делает четыре шага:
- клонирует его, если клона ещё нет;
- заменяет строковые литералы по словарю
TRANSLATIONS, но не трогает литералы в сравнениях (===,indexOf() и внутренние ключи вроде DHCP/Custom — иначе ломается логика; - применяет точечные правки
PATCHESтам, где текст собирается кодом; - перезапускает шелл, иначе открытые панели держат старый код.
Хороший пример для третьего шага — календарь. Плагин принудительно форматирует дату английской локалью, поэтому перевод строк там ничего не даёт. Пришлось явно подставить Qt.locale("ru_RU"). С профилями питания похожая история: «Экономия», «Баланс», «Мощность» собираются из системных имён, а не лежат готовыми строками.
DNS
В виджете сети есть пилюли для быстрой смены DNS: Cloudflare и Google. Стоковый omarchy-dns другие провайдеры не принимает. dns-ru.py генерирует из него копию omarchy-dns-ru с Яндексом, DNS4EU и NextDNS и правит пилюли в клоне виджета. Идею и набор провайдеров я подсмотрел в WokoFlipper/omarchy-network-ru, реализацию сделал свою — без копии всего плагина.
Helper ставится с владельцем root:root и правами 0755. Он исполняется от root после подтверждения в polkit, и пользователь не должен иметь возможности его переписать. Тихого режима нет: каждая смена DNS спрашивает пароль.
Установка
Нужен установленный Omarchy, обычный пользователь (не root) и sudo. Релиз собирается GitHub Actions по тегу, рядом с архивом лежит контрольная сумма:
curl -fLO https://github.com/chastnik/omarchy-rus/releases/latest/download/omarchy-rus.tar.gz
curl -fLO https://github.com/chastnik/omarchy-rus/releases/latest/download/omarchy-rus.tar.gz.sha256
sha256sum -c omarchy-rus.tar.gz.sha256
tar xzf omarchy-rus.tar.gz && cd omarchy-rus
./install.sh
Установщик предложит три варианта: «Рекомендуемое», «Всё» или «Выбрать вручную». Меню рисуется через gum, он в Omarchy уже есть; без него будет обычное текстовое. После установки нужно перезайти в сессию, чтобы применился язык.
Если меню не нужно, есть ключи:
./install.sh --list # что есть и что делает
./install.sh -y # рекомендуемое без вопросов
./install.sh --only timezone,telegram # только указанное
./install.sh --skip voxtype,tts # рекомендуемое, кроме указанного
./install.sh --dry-run -y # показать план и выйти
--dry-run советую запустить первым: он покажет, какие модули и в каком порядке будут выполнены, ничего не меняя.
Откат сделан по модулям, а не одной кнопкой. Клон плагина удаляется через rm -r ~/.config/omarchy/plugins/$USER.<имя>, оригинал включается через omarchy plugin enable omarchy.<имя>. Правки в input.lua и bindings.lua делаются с бэкапом или между маркерами. Сертификаты Минцифры снимаются командой ./install-mincifry-ca.sh --remove.
Где пришлось повозиться
Voxtype и пустой текст. Модель parakeet-tdt-0.6b-v3-int8 весит около 650 МБ, а models.voxtype.io иногда отдаёт её очень медленно. Если загрузка не удалась, скрипт качает те же файлы с зеркала на Hugging Face с докачкой и проверкой sha256. Движок переключается на Parakeet только после успешной загрузки — иначе голосовой ввод просто перестал бы работать.
Вторая проблема была смешнее. Voxtype выдавал пустую строку или английский мусор, хотя модель стояла. Оказалось, что на ноутбуке Internal Mic Boost и Capture стояли на 100%, и звук клиппился в потолок (peak 32768). Скрипт теперь выставляет Boost=1 и Capture=60%. Если у вас то же самое, проверить можно так:
arecord -D default -f S16_LE -r 16000 -c 1 -d 5 t.wav && voxtype transcribe t.wav
Сертификаты Минцифры. Скрипт скачивает Russian Trusted Root/Sub CA с gu-st.ru, сверяет зашитые в него SHA-256 и при несовпадении прерывается. Ставит их в системное хранилище, в NSS-базу Chromium и включает enterprise roots в Firefox. Еженедельный systemd-таймер проверяет отпечаток и срок действия.
Автоматического обновления сертификатов нет, и это сознательное решение. Это доверие к корневому центру, и я не хочу, чтобы оно менялось без участия человека. При смене отпечатка или сроке меньше 90 дней приходит уведомление, дальше решаете вы. По этой же причине модуль mincifry не входит в рекомендуемый набор.
Клоны плагинов не обновляются. Это главный минус подхода. После omarchy update оригинальные плагины получат исправления, а клоны — нет. Если панель сломалась или хочется свежей версии, клон удаляется и translate-plugins.py создаёт его заново. Если в новой версии плагина не нашлось фрагмента для PATCHES, скрипт напишет об этом в stderr.
Чего нет и не будет
- Российских зеркал pacman. Omarchy использует своё зеркало, которое фиксирует версии пакетов, и замена
mirrorlistсломала бы эту модель. - Перевода экрана блокировки и окна polkit. Ошибка в клоне плагина аутентификации может оставить без входа в систему — риск того не стоит.
- КриптоПро, драйверов Рутокен и JaCarta, 1С. Они проприетарные и требуют регистрации. Модуль
ecpставит только открытую часть (PC/SC) и печатает ссылки.
Вместо заключения
На вопрос, за что хвалят Omarchy, я для себя ответил: за то, что его удобно расширять, не ломая. Вся русификация уложилась в ~/.config/, клоны плагинов и пару сгенерированных скриптов, а системные файлы остались нетронутыми.
Репозиторий: github.com/chastnik/omarchy-rus, лицензия MIT. Если после очередного omarchy update что-то отвалилось или вы нашли непереведённую строку — пишите в issues или присылайте PR. Словари лежат в начале каждого скрипта, и дописать туда пару строк проще, чем кажется.
Перемещено dataman из arch










