И правда, давно не писал как там дела у лучшего в мире DE дистра на PHP.
К сожалению, появился другой, более приоритетный проект, а именно самодельный гибридный инвертор с настоящей, некитайской функцией подмешивания, посему программированию могу уделять час-два в неделю.
Из новенького
Решил пойти по пути наименьшего сопротивления, и остановиться на дистре.
Теперь понимаю этих дистроклепателей. Главная проблема в том, что пых — интерпретируемый язык, вдобавок должен быть собран со своими (точнее, моими) особыми модулями, и автоматизировать этот процесс мне не удалось. Все равно в зависимости от дистра — где-то депрекейтед, где-то доставьте libwnck, где-то gtksourceview3, еще и дистростроители никак не могут между собой договориться, как называть один и тот же пакет — короче не вариант.
Что касается самого DE
Избавился от консольных утилит для работы с иксами. Архитектура иксовая конечно дикий ад. Но зато теперь код изящнее, а настройки более гибче.
Почти полностью разобрался с треем через d-bus. Теперь оно не тормозит, проц не жрет. Вдобавок средствами PHP научился принудительно обесцвечивать иконки в серой палитре, или с красивыми стильными тенями. Выглядит почти прикольно, и не зависит от программы.
Сделал темизацию панели в нескольких вариантах — темном, светлом, и градиентном. Градиент подхватывается с т.н. основных цветов системной темы, и выглядит опять таки прикольно. Плюс благодаря отвязке от консольных утилит, открутил шурупы с панели. Теперь она может быть и вверху, и внизу, а благодаря открытости кода, хоть по диагонали с верха слева, по низ справа.
Облегчил док. Заметил по своим знакомым, что никто не перетаскивает иконки — они остаются на усмотрение системы. Так что перетаскивание убрал. Ну и остановился на индикации приложений в виде серой точки — закрыто, голубой точки — запущено, красной точки — требует внимания, голубой полоски — активно. Решил не нагромождать меню по ПКМ, а сделал два вида - основное по ПКМ, добавочное по shift+ПКМ. Например при ПКМ в меню есть опция «Закрыть», а в меню вызываемом shift+ПКМ, вместо нее «Закрыть принудительно».
С меню к сожалению получилось не все что я хотел. Хотел добавить туда возможность запускать программы от рута. Но из-за специфики PHP, а точнее вызова программы после программы (pkexec) либо меню закрывается только после завершения самой программы, либо pkexec не запускается вовсе. Городить костыли навроде передачи команды на запуск крутящемуся в фоне демону — не хочу. Зато теперь можно с меню добавлять в док, не запуская. Может чё еще добавлю.
Настройки
С этим все нормально, потихонечку допиливаю сначала настройки влияющие на работу системы: темы, индикаторы, панель, рабочий стол, ну и так далее. Второстепенно — настройки которые нужны один раз, ну там экран, электропитание, локализация и тд.
Внутря
Запилил демон настроек, который преобразует конфигурационный файл ДЕ в субконфигурации той или иной подсистемы. Кстати про настройки. Остановился на самом оптимальном и читаемом на мой взгляд формате — подобно HTML-теговому: <keyboard_layouts>us ru</keyboard_layouts>
Поскольку это все же PHP, т.е. может быть ненадежно, сделал лимит перезапусков DE чтобы не было бесконечных циклов, если 5 раз не вышло - запускается xterm.
Все-таки пересобрал xembedsniproxy — шняга которая конвертит программы со старого формата иксового трея, в новомодно-костыльный dbus-ный.
Добавил собственно сам рабочий стол, т.е. вешчь которая отображает нулевое окно с фоном с нескучными обоями, и является враппером для запуска всего остального. Кстати абсолютно ненужная концепция, во взрослых DE, где каждый компонент является независимым бинарником - это лишь увеличивает время загрузки и жор памяти.
Ввел некоторые ключи производительности в само DE. Что-то типа «безопасного режима» что ли. С некоторыми ключами, эффекты отключаются, задержки между итерациями разных проверок увеличиваются, и в целом система адекватно насколько это возможно, работает на первом EeePC на одноядерном селероне 900 МГц и 2Гб ОЗУ.
На данный момент, будучи абсолютно работоспособной (хоть и не готовой в продакшен), система без учета иксов и прочих сопутствующих либ, занимает 3 мегабайта ОЗУ. Так-то. Исходный код, он же исполняемый код - занимает 700Кб. Абсолютно вся система, включая скомпиленный интерпретатор PHP и сырцы либ — 76 мегабайт на носителе.
В дистре это DE вместе со всеми необходимыми потрохами, я решил размещать в одной единственной директории в корне. Посему любые операции — удобны и делаются в обыкновенном ФМ без рисков положить систему.
Удалить: rm -rf /system
.
Апгрейднуть: mv /system /system_old;mv ~Downloads/new_version /system
.
Естественно дистр лайвовый — просто берется и запускается безо всякого геморроя.
Когда будет готово для скачивания?
В целом, осталось допилить немного. По сути лишь контрольную панель и ФМ. Уделяя по часу в день, за месяц бы справился. Поэтому думаю к середине-концу зимы уже смогу дать ссылочку на виртуалку.