| Summary: | Разработка ximperconf | ||
|---|---|---|---|
| Product: | Ximper Linux | Reporter: | Кирилл Уницаев <fiersik> |
| Component: | Общее | Assignee: | Кирилл Уницаев <fiersik> |
| Status: | RESOLVED FIXED | QA Contact: | Roman Alifanov <ximper> |
| Severity: | minor | ||
| Priority: | P4 | ||
| Version: | не указана | ||
| Target Milestone: | --- | ||
| Hardware: | PC | ||
| OS: | Linux | ||
| Whiteboard: | |||
| Заявки RT: | Связано с: | ||
| Дата напоминания: | |||
| Bug Depends on: | |||
| Bug Blocks: | 16760 | ||
|
Description
Кирилл Уницаев
2025-08-23 16:18:59 MSK
Переписал примерно половину функционала на 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}"
}
]
}
}
}
Обновил структуру профилей для команды 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 Планируя делить процесс разработки на подзадачи с ясной целью, данная задача не имеет конкретной цели, поэтому закрываю |