aboutsummaryrefslogtreecommitdiffstats
path: root/lib/python/qmk/cli/__init__.py
diff options
context:
space:
mode:
authorNick Brassel2025-11-27 14:36:49 +0100
committerGitHub2025-11-27 14:36:49 +0100
commit9c2ca00074784dbee27b459d71cfc8e75f47b976 (patch)
treea59576289fd024bf35b0573db70eb8862ed44568 /lib/python/qmk/cli/__init__.py
parent594558ec7b9ac1963870447778426682065e0d20 (diff)
QMK CLI Environment bootstrapper (#25038)
Co-authored-by: Joel Challis <git@zvecr.com> Co-authored-by: Pascal Getreuer <getreuer@google.com>
Diffstat (limited to 'lib/python/qmk/cli/__init__.py')
-rw-r--r--lib/python/qmk/cli/__init__.py24
1 files changed, 24 insertions, 0 deletions
diff --git a/lib/python/qmk/cli/__init__.py b/lib/python/qmk/cli/__init__.py
index 26905ec134..dc2e4726a5 100644
--- a/lib/python/qmk/cli/__init__.py
+++ b/lib/python/qmk/cli/__init__.py
@@ -3,6 +3,8 @@
We list each subcommand here explicitly because all the reliable ways of searching for modules are slow and delay startup.
"""
import os
+import platform
+import platformdirs
import shlex
import sys
from importlib.util import find_spec
@@ -12,6 +14,28 @@ from subprocess import run
from milc import cli, __VERSION__
from milc.questions import yesno
+
+def _get_default_distrib_path():
+ if 'windows' in platform.platform().lower():
+ try:
+ result = cli.run(['cygpath', '-w', '/opt/qmk'])
+ if result.returncode == 0:
+ return result.stdout.strip()
+ except Exception:
+ pass
+
+ return platformdirs.user_data_dir('qmk')
+
+
+# Ensure the QMK distribution is on the `$PATH` if present. This must be kept in sync with qmk/qmk_cli.
+QMK_DISTRIB_DIR = Path(os.environ.get('QMK_DISTRIB_DIR', _get_default_distrib_path()))
+if QMK_DISTRIB_DIR.exists():
+ os.environ['PATH'] = str(QMK_DISTRIB_DIR / 'bin') + os.pathsep + os.environ['PATH']
+
+# Prepend any user-defined path prefix
+if 'QMK_PATH_PREFIX' in os.environ:
+ os.environ['PATH'] = os.environ['QMK_PATH_PREFIX'] + os.pathsep + os.environ['PATH']
+
import_names = {
# A mapping of package name to importable name
'pep8-naming': 'pep8ext_naming',