ximperconf выходит за рамки прототипа, дальнейшую разработку планирую вести на Go
Переписал примерно половину функционала на go работа с переменными и модулями hyprland и проверка конфигурации
Добавил получение информации о репозиториях улучших форматирование вывода
Добавил динамическое автодополнение для команд модулей и пеерменных hyprland
Добавил команду ximperconf hyprland sync-xkb-layouts Синхронизирует раскладку с XKB если она ещё не установлена Для принудительной замены можно использовать --force
Исправил автодополнение модулей добавил подкоманду create принимает название профиля и создаёт нужные для него конфиги Профили настраиваются в файле /etc/ximperdistro/ximperconf/profiles.json Выглядит примерно так: { "profiles": { "base": { "links": [ { "sys": "/etc/ximperdistro/environment.d/ximper-qt.conf", "user": "{home}/.config/environment.d/ximper-qt.conf" } ] }, "hyprland": { "binary": "Hyprland", "links": [ { "apps": ["hyprlock", "hypridle", "hyprpaper"], "sys": "/etc/ximperdistro/hyprland/hypr/{name}.conf", "user": "{home}/.config/hypr/{name}.conf" }, { "apps": ["swappy", "wlogout", "wofi"], "sys": "/etc/ximperdistro/hyprland/{name}", "user": "{home}/.config/{name}" } ] } } }
Для Vano https://gitlab.eterfund.ru/ximperlinux/ximperconf
Обновил структуру профилей для команды create Добавил поля: copy - копирует файлы hyprvars - создаёт переменные для Hyprland sync-system-layouts - синхронизирует раскладку hyprland с xcb Профиль выглядит примерно так: { "profiles": { "hyprland": { "binary": "Hyprland", "sync-system-layouts": true, "copy": [ { "src": "/etc/skel/.config/hypr/hyprland.conf", "dest": "{home}/.config/hypr/hyprland.conf" }, { "src": "/etc/skel/.config/kitty/", "dest": "{home}/.config/kitty" }, { "src": "/etc/skel/.config/Kvantum", "dest": "{home}/.config/Kvantum" }, { "src": "/etc/skel/.config/waybar", "dest": "{home}/.config/waybar" } ], "links": [ { "apps": ["hyprlock", "hypridle", "hyprpaper"], "sys": "/etc/ximperdistro/hyprland/hypr/{name}.conf", "user": "{home}/.config/hypr/{name}.conf" }, { "apps": ["swappy", "wlogout", "wofi"], "sys": "/etc/ximperdistro/hyprland/{name}", "user": "{home}/.config/{name}" } ], "hyprvars": [ { "name": "terminal", "value": "kitty" } ] } } }
Добавил elease-replace в профили для create "release-replace": [ { "src": "/etc/skel/.config/waybar/style-dark.css", "dest": "{home}/.config/waybar/style-dark.css" } при обновлении os-release dest будет заменён на src Добавил новые шаблоны путей для конфига "~" -> home "{home}" -> home "{user}" -> user "{name}" -> app name "{hostname}" -> hostname "{config}" -> {home}.config "{ximperconf}" -> /etc/ximperdistro
Добавил hyprmodules "hyprmodules": [ { "module": "МОДУЛЬ", "if-exec": "КОМАНДА" } ] Включает модуль Hyprland если вывод команды не пуст. Если убрать "if-exec", будет включать без проверки. === Добавил дополнительные переменные "hyprmodules": [ { "module": "МОДУЛЬ", "user": ПОЛЬЗОВАТЕЛЬСКИЙ_МОДУЛЬ, "new-only": ТОЛЬКО_НОВЫЙ, "if-exec": "КОМАНДА" } ] === ximperconf hyprland module .. Немного оптимизировал код управления модулями, убрал лишние повторения и разделил на функции. ximperconf hyprland module info Добавил ещё 1 статус - unused, означает что файл модуля найден, но он не используется в конфигурации. Оптимизировал флаг --filter === Перевёл конфиг на yaml === Начал добавлять управление плагинами hyprland на данный момент есть команды list и status
hyprland plugin: Доделал команды load, unload, toggle Улучшил структуру конфига и добавил переменную IsRoot для системных команд Добавил блок команд system Первой такой командой стала fix-grub-resolution, команда меняет переменную GRUB_GFXMODE и обновляет граб
Разделил конфигурацию профилей на разные файлы 1 файл = 1 профиль улучшил структуру профилей, отделил зависимые от оболочки компоненты добавил вывод списка модулей и их описаний добавил флаги для автоматического выбора одного модуля и запуска всех доступных
Отчёт за 6 дней Сделал полный рефакторинг модуля ximperconf preset (бывший create) - Разделил на логичные подфункции, убрал лишний код - Вынес функции работы с файлами в отдельный files.go - Вынес логику работы с деревом вывода в модуль ui (подробнее ниже) - добавил подкоманды info, apply, apply-all (подробнее ниже) ------ Добавил модуль ui: RenderTree cтроит классическое дерево с настраиваемым цветным выводом: Заголовок: ├── {иконка} {значение} — {описание (опционально)} └── {иконка} {значение} — {описание (опционально)} RenderTreeLines — обёртка для быстрого создания деревьев строк без цветного вывода: Заголовок: ├── {строка} └── {строка} ------ подкоманды info, apply, apply-all: - info выводит список профилей и их доступность - apply применяет профиль, если он доступен - apply-all применяет все доступные модули ------ Добавлены новые значения для профилей: root: bool — указывает, требуется ли рут доступ для данного модуля system: — категория системных настроек grub: — категория настроек граба fix-resolution: true — установить рекомендуемое разрешение update: true — обновить граб после изменения настроек hyprland: — категория настроек hyprland options: sync-system-layouts: true — синхронизировать раскладку с xkb vars: — Переменные hyprland - var: "terminal" value: "kitty" force: true — Заменить, если есть modules: — Модули hyprland - module: "monitors" init: true — Создать пустой файл модуля, если его нет user: true new-only: true if-binary: "nwg-displays" — Подключить только если есть бинарник Все изменённые переменные подписаны
добавил команду ximperconf hyprland module edit <module> Запускает редактор с открытым файлом модуля. Добавил проверку всех модулей и отображение количества ошибок в списке ximperconf hyprland module info также добавил ximperconf hyprland module check <module> Команда проверяет модуль на ошибки и выводит их Улучшил вывод ximperconf hyprland check
Hyprland/disable: добавил флаг --remove для полного удаления строки модуля из конфига Preset: добавил поле action в структуру hyprland/module
Отчет за несколько дней! Начал оптимизировать код работы с конфигурацией Hyprland, для начала убрал лишнее чтение конфига, но lav@ подсказал совершенно другую идею, далее реализовывал её. Написал единую структуру HyprlandManager, которая 1 раз читает конфиг при инициализации и сохраняет в себя. Внутри структуры хранятся все спаршенные данные: путь к конфигу, модели модулей, переменных и плагинов. Постепенно переводил все функции на методы этой структуры, теперь все они лишь читают строки из поля Lines, а не читают и записывают конфиг сами. Далее занялся реализацией общей системы статусов для всех команд и форматов. Структура ItemStatus хранит иконку, цвет и лейбл статуса. Перевел весь код на использование этой структуры. Сделал новую функцию module show <module> для вывода полной информации о каком-то одном модуле. Добавил флаг format=json для большинства команд с выводом. Написал новый вариант функции show (с поддержкой json)
Случайно указал время в часах :/
С момента релиза Ximper 0.9.3 на Hyprland, самой простой, но часто встречаемой проблемой у пользователей была сложная настройка обоев, даже для такой простой операции требуется редактировать конфиги и перезапускать сервисы! Было принято решение сделать поддержку управления обоями прямо в ximperconf. В месте с этом решил расширить функционал и добавить возможность ставить разные обои для разных цветовых тем. Также есть интеграция данной функции в TuneIt Коммит: https://gitlab.eterfund.ru/ximperlinux/ximperconf/commit/1dec1397b9d53e94c99e477e3f7ea599418523b8 Код ещё не очень оптимизирован, однако основной функционал работает. ximperconf hyprland wallpaper set - установить обои -m | --monitor [Монитор|defauil|all] - выбрать монитор -dark [путь] - обои для тёмной темы -light [путь] - обои для светлой темы ximperconf hyprland wallpaper get - получить путь к обоям --light - для светлой темы --dark - для тёмной темы --pair - вернуть пару [light, dark] -m | --monitor - выбрать монитор -o | --format [text|json] - формат ximperconf hyprland wallpaper info - информация о настроенных обоях -o | --format [text|json] - формат ximperconf hyprland wallpaper apply [light|dark] - применить тему Данные хранятся в конфиге ~/.config/ximper/wallpaper.yaml (путь возможно изменится) Для установки обоев при запуске системы в автозапуск прописывается следующее: ximperconf hyprland wallpaper apply
Планируя делить процесс разработки на подзадачи с ясной целью, данная задача не имеет конкретной цели, поэтому закрываю