LINUX.ORG.RU

Русификация Omarchy Linux одним скриптом

 ,

Русификация Omarchy Linux одним скриптом

2

3

Решил попробовать нашумевший дистрибутив 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 для каждого плагина делает четыре шага:

  1. клонирует его, если клона ещё нет;
  2. заменяет строковые литералы по словарю TRANSLATIONS, но не трогает литералы в сравнениях (===, indexOf() и внутренние ключи вроде DHCP/Custom — иначе ломается логика;
  3. применяет точечные правки PATCHES там, где текст собирается кодом;
  4. перезапускает шелл, иначе открытые панели держат старый код.

Хороший пример для третьего шага — календарь. Плагин принудительно форматирует дату английской локалью, поэтому перевод строк там ничего не даёт. Пришлось явно подставить 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



Проверено: dataman ()
Последнее исправление: chastnik (всего исправлений: 3)
Ответ на: комментарий от bbc69

Странное отношение это когда в разговорной речи используют не русские слова типа Лук, Оверсайз, хайп, фейк итд. Странное отношение это когда названия магазинов используют английские названия в России. А Linux на английском это вполне нормально и даже обязательно. Вы еще предложите русифицировать ядро линукс для «удобства»

satanas
()
Ответ на: комментарий от satanas

Странное отношение у Вас. Витрина - «интерфейс» магазина. И типа там англицизмы - это не норм, а на компе - норм. Автор русифицировал интерфейс, чтобы было удобнее и приятнее работать. В чём проблемы-то?

А ядро - совсем мимо.

bbc69
()

Хорошее дело. Надо не забыть проверить что у меня где настроено. Хоть и не пользуюсь омарчей, но консольное пригодится, наверное.

Такой вопрос - у них вообще с локализацией проблемы, или там только русский не предусмотрен? Почему так сложно всё? Неужели при установке омарчи нельзя выбрать русский язык и хотябы консольная часть разрешится?

Ну и да, хотелось бы иметь российский клон Арча, с шахматами и поэтэссами.

PcheloBiaka ★
()
Ответ на: комментарий от s-warus

госуслуги

О, ещё один, не умеющий читать.

Для госуслуг не нужен макс. Так, по секрету скажу. Человечество изобрело ТОТР.

PPP328 ★★★★★
()
Ответ на: комментарий от s-warus

сдаётся мне, что не мог он этого не делать...

Chord ★★★★★
()
Ответ на: комментарий от Xintrea

Так может быть стоило заняться нормальной i18n? А не вот этим вот скриптописанием?

Не, стоило изначально не связываться с этим мотком скриптов под видом дистрибутива.

Сам-то автор «дистрибутива» неплохо бабок настриг, ну да и фиг с ним.

wandrien ★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.