Привет, Хабр!
В прошлой статье я подробно рассказал про свою макрос-клавиатуру: про железо, характеристики и немного затронул ваши комментарии 🙂 ссылка на статью
И теперь пришло время рассказать про софт.
Почему лично для меня софт — это очень важная часть клавиатуры.
Я считаю что , как бы хорошо была собрана макрос-клавиатура, без нормального и удобного софта она остаётся просто набором кнопок. Да, удобным, но всё равно ограниченным. Ведь именно в софте ты видишь фирменный стиль, графику и подход к деталям, шрифты и фирменные цвета. Это первое, с чем пользователь взаимодействует осознанно.
Даже в магазине, выбирая пакет молока, мы в первую очередь смотрим на дизайн упаковки — часто вообще подсознательно. И если дизайн «так себе», появляется ощущение, что и само молоко будет таким же.
Если на упаковке сделали всё спустя рукава, то и на производстве, скорее всего, не заморачивались. Не факт конечно! но ощущение возникает именно такое.
С софтом всё работает точно так же. Он либо вызывает доверие и желание работать дальше, либо сразу оставляет чувство «ну такое».

Почему QMK / VIA шляпа!
Я с уважением отношусь к людям, которые делают QMK и VIA. Для кастомных клавиатур они закрывают огромное количество задач. Когда я начинал свой проект в 2020 году, у QMK и VIA не было нормальной поддержки крутилок. А для меня энкодеры — это важно!
Также с инженером мы изначально планировали уходить от Arduino и подобных микроконтроллеров в сторону собственного чипа. Вложить столько сил в железо и при этом не сделать свой софт? Это как-то не солидно.
Плюс есть ещё момент с санкциями и всей этой историей. Если бы я заточил клавиатуру под QMK или VIA, а потом из-за внешних ограничений что-то пошло не так, вполне мог бы возникнуть сценарий, при котором устройства у людей просто превратились бы в «тыкву» — без возможности обновления и поддержки. Вероятность небольшая, но прецеденты есть. Достаточно вспомнить, как некоторые проекты на Linux в определённый момент ограничили доступ для пользователей из России.
С чего я начал
Так как я дизайнер и в своей карьере я делал сайты для сервисов доставки, проектировал приложения с анимацией для Татнефти и Лукойла. Поэтому сделать приложение для себя было несложно и, что важнее, действительно интересно.

Так как я не программист, я выбрал Python — он прост для входа и хорошо подходит для быстрого прототипирования. Ключевым фактором стала кроссплатформенность: хотелось писать один код и сразу получать результат и на Windows, и на macOS.
В качестве первой библиотеки я выбрал Tkinter. Она простая, но на старте полностью закрывала мою задачу. PyQt5 тогда казалась сложной. Сейчас, поработав с PyQt6, я понимаю, что этот путь был возможен, но учить язык и одновременно осваивать сложную библиотеку на старте было бы тяжелее. На данный момент софт пишется на CustomTkinter, это хорошая библиотека.
Связь между клавиатурой и программой

Приложение и клавиатура общаются через простой текстовый синтаксис команд. Отправляемый из приложения через serialport на клавиатур Например, команда @key1_shift+r говорит устройству: «назначь на первую клавишу макрос Shift + R». Клавиатура сама разбирает команду, сохраняет её и выполняет без участия компьютера.
Почему это хороший подход
Жёсткое разделение ответственности
софт — UI, логика, удобство;
клавиатура — исполнение, скорость, стабильность.
Независимость от платформы
сегодня Python + Tkinter,
завтра хоть C++, Swift или веб-интерфейс.
Протокол не меняется.
Прошивка не зависит от UI
софт можно переписать,
клавиатура продолжит работать без него.
Какое приложение сейчас

Приложение сейчас выглядит так.
Для начала в среднем левом блоке выбирается набор макросов, который будет использоваться. Доступно два набора — первый и второй. На самой клавиатуре они идентифицируются цветами: зелёным и фиолетовым. Это сделано специально, чтобы во время работы сразу было понятно, какой набор активен, без необходимости смотреть в софт.
После выбора набора в правом большом блоке открывается сетка клавиш, стилизованная под физическую клавиатуру. Вокруг неё дублируется цвет активного набора — ещё один визуальный маркер, который помогает не ошибиться при редактировании. Если требуется настроить крутилки, достаточно нажать на элементы в виде энкодеров — интерфейс автоматически переключается в режим редактирования крутилок.

Нижний правый блок — это редактор макросов.
Разберём его слева направо.
Сначала идут чекбоксы модификаторов — системных и функциональных клавиш, таких как Ctrl, Shift, Alt и других. Они позволяют быстро собрать комбинации без ручного ввода.
Далее расположен выбор типа нажатия.
Режим «Одно нажатие» делает клавишу обычной — она срабатывает как стандартная кнопка.
Режимы «Удержание» и «Два нажатия» работают в паре и задают альтернативную логику. Клавиша с таким режимом больше не ведёт себя как простая: на ней одновременно существуют два макроса — один для короткого удержания и второй для двойного нажатия.
Ниже находится поле ввода текста. Оно используется как для простых комбинаций вроде Ctrl + C, так и для ввода полноценного текста или паролей.
В финале можно либо полностью очистить клавишу, либо сохранить готовый макрос, назначив его на выбранную кнопку.

Итак, что готовится к релизу и что бы я хотел поправить.
В первую очередь сейчас делается библиотека макросов. Базовое приложение уже готово, и из-за этого приходится проходиться почти по всему софту заново, аккуратно приводя всё к единой логике. Это не самая быстрая часть работы, но без неё релиз просто не имеет смысла — макросы должны быть переиспользуемыми, а не существовать каждый сам по себе.
Отдельная история — работа с подсветкой. С функциональной точки зрения в клавиатуре уже есть всё необходимое, но с дизайном интерфейса для этого блока я долго не мог определиться. В итоге подсветка так и осталась в статусе «не доведено», хотя технически она полностью работает. Это тот случай, когда код готов, а визуальная часть всё ещё ждёт своего решения.
Из явных вещей, которые хочется добавить, — drag & drop. Идея простая: брать готовый макрос и просто закидывать его на нужную клавишу, без лишних кликов и сохранений. Это сильно ускорит работу, особенно когда макросов становится много.
Ещё один важный момент — запись макросов. В идеале хочется, чтобы программа просто «слушала» клавиатуру, пока пользователь вводит комбинацию в поле ввода, и сама превращала это в макрос. Но тут уже появляются ограничения: такие механики часто триггерят антивирусы, и есть риск, что приложение начнут блокировать или помечать как подозрительное.
Я довольно громко прошёлся в заголовке и в начале статьи по QMK и VIA, но на самом деле мне на них пох**. Я делаю свою макрос-клавиатуру, в которую уже вложено много сил и времени. И если уж силы нашлись на железо, то на софт они точно найдутся.
Для меня собственное приложение — это не «альтернатива» существующим решениям, а логичное продолжение устройства. Оно живёт вместе с клавиатурой и развивается под реальные рабочие сценарии, а не под универсальный набор фич «для всех».
Отсюда и мысль про расширяемость. Функциональность софта можно и нужно развивать: добавить трекер рабочего времени, простой таск-менеджер или другие инструменты, которые реально помогают в работе. Всё-таки клавиатуру покупает человек, который проводит за ней часы, и лёгкий софт в комплекте может стать полезным дополнением, а не просто утилитой для настройки кнопок.
Ну и, конечно, ИИ-помощники. Сейчас без них уже никуда. И я вполне допускаю, что со временем в софте появится какая-нибудь киллер-фича, встроенная не ради галочки, а органично — как часть рабочего процесса.
Спасибо, что дочитали! обнял приподнял, ушел делать клавиатуру дальше :-)
