LINUX.ORG.RU

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

 ,

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

0

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)

добавляют в виджет сети Яндекс DNS, DNS4EU и NextDNS вместо Cloudflare и Google; по желанию — PC/SC-стек для ЭЦП и сертификаты Минцифры с еженедельной проверкой срока.

Что за кринж. При этом ставит телеграм.

Или трусы надень или крестик сними

PPP328 ★★★★★
()

Может кому-то и нужно. У меня:

$ grep -v "^#" /etc/locale.gen
en_US.UTF-8 UTF-8
dmitry237 ★★★★★
()
Ответ на: комментарий от PPP328

Телеграмм - как некий «стандарт» уже общения в России. 90+ процентов будут его и так ставить. сертификаты нужны для открытия гос сайтов и сайтов банков.

chastnik
() автор топика
Ответ на: комментарий от PPP328

И всё можно установить по отдельности. Для этого есть режим «выбора» помодульно.

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

сертификаты нужны для открытия гос сайтов и сайтов банков.

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

Ставить их нужно в конкретный профиль браузера и ходить в этом профиле только на те сайты, которые без него не открываются.

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

Так никто не заставляет ставить сертификаты. Вы можете вручную выбрать всё что угодно из модулей. То, как вы их устанавливаете - это только ваш выбор. У меня стоят корневые сертификаты и я не испытываю никаких мук от этого. Зато не имею проблем при открытии сайтов. Можно в принципе не ставить ничего и всё настраивать руками. Скрипты делались для тех, кому не хочется заморачиваться и хочется всё поставить без мороки и гугления.

Если у вас есть предложения по улучшению скрипта - всегда велкам. Допустим, можно сделать принудительный выбор пользователем того, как установить ему сертификаты. Можете ещё накидывать. Всегда рад критике.

chastnik
() автор топика
Ответ на: комментарий от PPP328

можешь внятно объяснить, чем тебя смущают левые корневые сертификаты? до хера ж тебя спрашивали, когда всю вебню принудительно перетащили на шифрование даже там, где оно нафиг не упало. Вот зачем оно тому же лору, например?

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

Ставить их нужно в конкретный профиль браузера и ходить в этом профиле только на те сайты, которые без него не открываются.

И в чем сакральный смысл сего действа? Вообще все, кто такое утверждает вызывают стойкое ощущение, что они в принципе не понимают, как работает SSL и больше на ведьм охотятся.

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

Вообще все, кто такое утверждает вызывают стойкое ощущение, что они в принципе не понимают, как работает SSL и больше на ведьм охотятся.

У таких просто запредельно эльфийское мышление и они думают, что Минцифры обязательно выпустят сертификат для MITM (хотя ни разу такого не было зафиксировано и обязательно быстро зафиксируется через CT), а все остальные поставщики корневых сертификатов никогда такого не делали (хотя было зафиксировано уже несколько выпусков сертификатов от корневых поставщиков) и не будут.

P.S. Пошла переписка в реакциях.

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

Любой разговор про информационную безопасность без модели угроз не стоит ничего, как эти твои домыслы.

В российском контексте я могу предложить широчайший спектр моделей, где сертификаты минцифры могут представлять угрозу для физической безопасности.

Если ты их до сих пор не представляешь, то эльф тут как раз ты.

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

В российском контексте я могу предложить широчайший спектр моделей, где сертификаты минцифры могут представлять угрозу для физической безопасности.

Предложи

P.S. Всё понятно по реакции. Можешь не предлагать.

Dimez ★★★★★
()
Последнее исправление: Dimez (всего исправлений: 1)

Главный рубитель сошел с рельс и занялся изготовлением дистрибутивов? Чот как-то не впечатляет. Искусственного интеллекта не хватает. Явно.

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

Там прям при установке диска можно указать какими популярными моделями пользуешься. Они ставятся и в панели ставятся под них плагин (допустим, показывают остатки токенов). В целом - это просто Арх собранный с популярным софтом и красиво упакованный. Хотя все дистрибутивы такие :)))

chastnik
() автор топика

Фигасе, автоматизированный пиар этого говна докатился аж до нашего загончика.

thesis ★★★★★
()

Объяснюсь, пожалуй. Чтобы не было недопонимания.

1) У меня сертификаты минцифры установлены только там, где необходимо и без них никак (сейчас это вообще пара консольных виртуалок, с linux, разумеется)

2) Когда будет надо, я, вероятно, поставлю либо в отдельный профиль браузера, либо воспользуюсь отличной статьёй от @no-dashi-v2 https://habr.com/ru/articles/1071256/

3) Позицию «ты что, дурак? трусы/крестик» считаю идиотской. Каждому доступна информация и матчасть, каждый считает и делает так, как ему хочется/удобнее, тем более, что варианты использования есть разные, что хорошо.

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

А чож тогда скрипты для русификации руками-то писать? ИИ не справляется?

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

В российском контексте я могу предложить широчайший спектр моделей, где сертификаты минцифры могут представлять угрозу для физической безопасности.

Если ведешь накробизенс, то, наверное, стоит побеспокоится о сертификатах. Хотя и в этом случае риск споткнуться именно на сертификатах минимальный и время лучше потратить на что-то другое.

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

зафиксируется через CT

Ну конкретно данное заявление какое-то наивное. CT защищает только от случая, когда злоумышленник генерирует сертификат с помощью инфраструктуры добросовестного CA.

firkax ★★★★★
()

Строки меню, панелей и подсказок горячих клавиш зашиты прямо в конфиги и QML-плагины. Смена локали переводит GTK- и Qt-приложения, но собственный интерфейс дистрибутива остаётся английским.

не проще зарепортить это в апстрим?

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

В российском контексте я могу предложить широчайший спектр моделей, где сертификаты минцифры могут представлять угрозу для физической безопасности.

Предложи

P.S. Всё понятно по реакции. Можешь не предлагать.

Любое моё обстоятельное сообщение по теме со ссылками ты сам же и удалишь, потому что события реального мира здесь принято игнорировать, прятать за словом «танцпол» и отворачиваться.

Но стоит обратить внимание, сколько живых людей получили сроки и судимости при взаимодействии с российскими сервисами — например, от интегрированного с государством холдинга VK — за последние годы. Практика включает ретроактивное применение «законов», когда новые нормы применяются к прошлым действиям пользователя, и те объявляются «длящимся преступлением».

Любой, кто в таких условиях распространяет или навязывает российские цифровые сервисы без оговорок и предупреждения о рисках, — в лучшем случае наивный дурак.

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

Любое моё обстоятельное сообщение по теме со ссылками ты сам же и удалиш

Будто регистранты не могут посмотреть в удаленные и закономерно задать вопрос «а какого хрена». Но ты же из этих… По отмазам пошёл.

сколько живых людей получили сроки и судимости при взаимодействии с российскими сервисами

После того, как ты пояснишь, какое отношение оно имеет к сертификатам минцифры - можно разговаривать. А так - ни у одного из них сертификатов минцифры не стояло и как-то их это не спасло. Странно, не находишь?

Любой, кто в таких условиях

Кричит о том, что российские сервисы это «нибизапасна патаму чта я так сказал» - идиот.

lonelywoolf
()

нет нескучных обоев, незачёт! иди учись у Болгеноса!

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

Ясно. ЧиТД, запредельный эльфизм + сваливание всего в кучу, ничего нового, впрочем.

Это очень примитивная попытка обесценивания и перехода на личности с моим комментарием конкретную тему. От анонима с котом на аватарке.

Люди не сидят? Их посадка не связана российскими цифровми сервисами? У тебя уже есть представление о правоприменении и нормах в будущем, при увеличении поверхности сертификатов Минцифры? Ты готов жить с последствиями от российского государства? Кто тут эльф?

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

тут(на лоре) не множко иной уровень в логику чем в целом медиана у публикуса - так что даже если твои дополнительные аргументы верны из этого не следует автомагически верность твоего изначального утверждения

пжлст приведи обоснование исходного возможно истенного утвержения( иначе для некоторых это беспочвеная гипотеза - хотя ты утверждаешь что из беспорной(для тебя) истиности остальных твоих утверждений следует истинность твоего исходного) - что как бы не так очевидно для местных чем тех кто обычно видимо является твоей референтной группой

qulinxao3 ★☆
()
Ответ на: комментарий от Dimez

У таких просто запредельно эльфийское мышление и они думают, что Минцифры обязательно выпустят сертификат для MITM

Одним своим присутствием на компе эти сертификаты наводят порчу. Лучше не рисковать.

bread ☆
()
Ответ на: комментарий от Dimez

У меня сертификаты минцифры установлены только там, где необходимо

Ага, излучают таки! Так я и думал.

bread ☆
()
Ответ на: комментарий от emmawatsondtypants

После того, как ты зачем-то совершенно тупо поставил в юзерагент самое тупое на свете иноагентское агенство, вопросов к тебе больше нет. Также понятен и уровень истерии и уровень аргументации.

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