/
sapertlt
/
layout_switcher
Обзор
Документация
Войти
/
sapertlt
/
layout_switcher
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop
Makefile
190 строк
8 KB
Andrey
feat: поддержка параметра KEY в make setup-gnome-shortcut
06 авг 2026, 12:13
06 авг 2026, 12:13
a68caab
Код
Авторство
О чём код?
# ============================================================================ # PROD_DIR — путь к production-установке приложения. # Задаётся один раз при установке (make install создаёт .prod_install_dir) # и используется всеми командами обновления/деплоя. # # Чтобы задать вручную: # echo "/opt/dev_tools/layout_switcher" > .prod_install_dir # ============================================================================ -include .prod_install_dir.mk PROD_DIR ?= $(HOME)/layout_switcher .PHONY: install install-dev install-system install-service check-env test run lint clean bump bump-minor bump-major update release deploy commit push-prod quick-deploy restart show-prod-dir trigger setup-gnome-shortcut # Отправить триггер коррекции запущенному демону trigger: @.venv/bin/layout-switcher --trigger KEY ?= Pause # Настроить комбинацию клавиш в GNOME (например: make setup-gnome-shortcut KEY="<Shift>Pause") setup-gnome-shortcut: @bash scripts/setup-gnome-shortcut.sh "$(KEY)" # Диагностика среды — запустить ПЕРЕД make install check-env: @bash scripts/check-env.sh # Полная установка приложения: # 1. check-env — диагностика среды (что работает) # 2. check-deps — системные пакеты (спрашивает при необходимости) # 3. venv + pip — python-окружение # 4. симлинк — layout-switcher в ~/.local/bin # 5. PROD_DIR — сохранение пути установки # 6. install-service — systemd-сервис install: check-env @echo "" @echo "━━━ Проверка системных зависимостей ━━━" @bash scripts/check-deps.sh @echo "" @echo "━━━ Установка Python-окружения ━━━" @if [ ! -x ".venv/bin/pip" ]; then \ echo "Создание виртуального окружения .venv..."; \ python3 -m venv .venv --system-site-packages; \ fi .venv/bin/pip install -e . @mkdir -p $$HOME/.local/bin @ln -sf $$(pwd)/.venv/bin/layout-switcher $$HOME/.local/bin/layout-switcher 2>/dev/null || true @# Сохраняем текущий каталог как production-путь установки @echo "PROD_DIR = $$(pwd)" > .prod_install_dir.mk @echo "" @echo "━━━ Установка systemd-сервиса ━━━" @$(MAKE) install-service @echo "" @echo "━━━ Настройка комбинации клавиш GNOME ━━━" @$(MAKE) setup-gnome-shortcut @echo "" @echo "✓ Установка завершена!" @echo " Production-путь: $$(pwd)" @echo " Статус сервиса: $$(systemctl --user is-active layout-switcher 2>/dev/null || echo 'неизвестно')" @echo " Тест триггера: make trigger (или клавиша Pause)" @echo " Логи: journalctl --user -u layout-switcher -f" # Установка с зависимостями для разработки install-dev: @if [ ! -x ".venv/bin/pip" ]; then \ echo "Создание виртуального окружения .venv..."; \ python3 -m venv .venv --system-site-packages; \ fi .venv/bin/pip install -e ".[dev,gui]" # Установка системных зависимостей (Ubuntu/Debian) install-system: sudo apt install -y linux-headers-$$(uname -r) xkb-switch xdotool xclip wl-clipboard ydotool \ gir1.2-ayatanaappindicator3-0.1 python3-gi python3-gi-cairo \ gir1.2-gtk-3.0 acl sudo usermod -a -G input $(USER) @echo 'KERNEL=="event*", SUBSYSTEM=="input", MODE="0660", GROUP="input"' | sudo tee /etc/udev/rules.d/99-input-permissions.rules > /dev/null @sudo udevadm control --reload-rules && sudo udevadm trigger 2>&1 || true @sudo setfacl -m u:$(USER):rw /dev/input/event* 2>/dev/null || true @echo "✓ Системные зависимости и правила udev/input успешно настроены" # Запуск тестов test: .venv/bin/python -m pytest tests/ -v # Запуск приложения (foreground) run: .venv/bin/python -m layout_switcher # Запуск в режиме демона run-daemon: .venv/bin/python -m layout_switcher --daemon # Запуск без GUI (для TTY) run-nogui: .venv/bin/python -m layout_switcher --no-gui # Установка systemd-сервиса пользователя. # При повторном вызове (переустановка) — останавливает старый экземпляр. install-service: @mkdir -p ~/.config/systemd/user/ @# Останавливаем сервис, если уже запущен (переустановка) @systemctl --user stop layout-switcher 2>/dev/null || true @cp systemd/layout-switcher.service ~/.config/systemd/user/ @systemctl --user daemon-reload @systemctl --user enable layout-switcher @systemctl --user start layout-switcher @echo " layout-switcher: $$(systemctl --user is-active layout-switcher)" # Очистка clean: rm -rf build/ dist/ *.egg-info src/*.egg-info find . -type d -name __pycache__ -exec rm -rf {} + 2>/dev/null || true find . -type f -name "*.pyc" -delete 2>/dev/null || true # Инкремент версии (patch: 0.1.0 → 0.1.1) bump: bash scripts/bump-version.sh patch # Инкремент minor (0.1.0 → 0.2.0) bump-minor: bash scripts/bump-version.sh minor # Инкремент major (0.1.0 → 1.0.0) bump-major: bash scripts/bump-version.sh major # Обновление каталога установки из production update: bash scripts/update.sh # Релиз: bump + commit + merge в production + push обеих веток # Использование: # make release — patch + авто-сообщение # make release m="описание изменений" — patch + своё сообщение # make release v=minor m="new feature" — minor + своё сообщение release: @bash scripts/release.sh "$(v)" "$(m)" # Полный деплой: release + обновление каталога установки deploy: release update # ============================================================================ # Быстрые команды для разработки (без bump версии) # ============================================================================ # Коммит + push в текущую ветку (без bump версии) # Использование: # make commit m="описание изменений" commit: @if [ -z "$(m)" ]; then \ echo "Ошибка: укажите сообщение коммита: make commit m=\"описание\""; \ exit 1; \ fi git add -A git commit -m "$(m)" git push # Перелив в production: merge develop → production + push + pull + restart push-prod: @echo "=== Merge develop → production ===" git checkout production git config pull.rebase false git pull origin production || true git merge develop -m "merge develop → production" git push git checkout develop @echo "=== Обновление production ($(PROD_DIR)) ===" cd $(PROD_DIR) && git checkout -- . && git clean -fd && git pull cd $(PROD_DIR) && .venv/bin/pip install -e . --quiet --no-deps 2>/dev/null || true systemctl --user restart layout-switcher @sleep 1 @systemctl --user is-active layout-switcher && echo "✓ Сервис запущен" || echo "✗ Сервис не запустился" # Быстрый деплой: commit + push в production (без bump версии) # Самая частая команда при разработке # Использование: # make quick-deploy m="описание изменений" quick-deploy: commit push-prod # Перезапуск сервиса (без обновления кода) restart: systemctl --user restart layout-switcher @sleep 1 @systemctl --user is-active layout-switcher && echo "✓ Сервис запущен" || echo "✗ Сервис не запустился" # Показать текущий production-путь show-prod-dir: @echo "Production-путь установки: $(PROD_DIR)" @echo "(задаётся в .prod_install_dir.mk, или через: echo \"PROD_DIR = /path\" > .prod_install_dir.mk)"