Drop bs4 dependency, update docs, minor improvements
[jackhill/qmk/firmware.git] / docs / cli.md
CommitLineData
a25dd58b 1# QMK CLI
2
3This page describes how to setup and use the QMK CLI.
4
5# Overview
6
d569f087 7The QMK CLI makes building and working with QMK keyboards easier. We have provided a number of commands to simplify and streamline tasks such as obtaining and compiling the QMK firmware, creating keymaps, and more.
a25dd58b 8
d569f087 9* [Global CLI](#global-cli)
10* [Local CLI](#local-cli)
11* [CLI Commands](#cli-commands)
a25dd58b 12
d569f087 13# Requirements
a25dd58b 14
d569f087 15The CLI requires Python 3.5 or greater. We try to keep the number of requirements small but you will also need to install the packages listed in [`requirements.txt`](https://github.com/qmk/qmk_firmware/blob/master/requirements.txt).
16
17# Global CLI
18
19QMK provides an installable CLI that can be used to setup your QMK build environment, work with QMK, and which makes working with multiple copies of `qmk_firmware` easier. We recommend installing and updating this periodically.
20
21## Install Using Homebrew (macOS, some Linux)
22
23If you have installed [Homebrew](https://brew.sh) you can tap and install QMK:
24
25```
26brew tap qmk/qmk
27brew install qmk
28export QMK_HOME='~/qmk_firmware' # Optional, set the location for `qmk_firmware`
29qmk setup # This will clone `qmk/qmk_firmware` and optionally set up your build environment
30```
31
32## Install Using easy_install or pip
33
34If your system is not listed above you can install QMK manually. First ensure that you have python 3.5 (or later) installed and have installed pip. Then install QMK with this command:
35
36```
37pip3 install qmk
38export QMK_HOME='~/qmk_firmware' # Optional, set the location for `qmk_firmware`
39qmk setup # This will clone `qmk/qmk_firmware` and optionally set up your build environment
40```
41
42## Packaging For Other Operating Systems
43
44We are looking for people to create and maintain a `qmk` package for more operating systems. If you would like to create a package for your OS please follow these guidelines:
45
46* Follow best practices for your OS when they conflict with these guidelines
de386e59 47 * Document why in a comment when you do deviate
d569f087 48* Install using a virtualenv
49* Instruct the user to set the environment variable `QMK_HOME` to have the firmware source checked out somewhere other than `~/qmk_firmware`.
50
51# Local CLI
52
53If you do not want to use the global CLI there is a local CLI bundled with `qmk_firmware`. You can find it in `qmk_firmware/bin/qmk`. You can run the `qmk` command from any directory and it will always operate on that copy of `qmk_firmware`.
54
55**Example**:
a25dd58b 56
57```
d569f087 58$ ~/qmk_firmware/bin/qmk hello
59Ψ Hello, World!
a25dd58b 60```
61
d569f087 62## Local CLI Limitations
a25dd58b 63
d569f087 64There are some limitations to the local CLI compared to the global CLI:
65
66* The local CLI does not support `qmk setup` or `qmk clone`
67* The local CLI always operates on the same `qmk_firmware` tree, even if you have multiple repositories cloned.
68* The local CLI does not run in a virtualenv, so it's possible that dependencies will conflict
69
70# CLI Commands
a25dd58b 71
e0e26957
SJJ
72## `qmk cformat`
73
74This command formats C code using clang-format. Run it with no arguments to format all core code, or pass filenames on the command line to run it on specific files.
75
76**Usage**:
77
78```
79qmk cformat [file1] [file2] [...] [fileN]
80```
81
f22c5c17 82## `qmk compile`
a25dd58b 83
e7718845 84This command allows you to compile firmware from any directory. You can compile JSON exports from <https://config.qmk.fm>, compile keymaps in the repo, or compile the keyboard in the current working directory.
a25dd58b 85
f22c5c17 86**Usage for Configurator Exports**:
a25dd58b 87
88```
f22c5c17 89qmk compile <configuratorExport.json>
90```
91
92**Usage for Keymaps**:
93
94```
95qmk compile -kb <keyboard_name> -km <keymap_name>
a25dd58b 96```
95477749 97
e7718845
CB
98**Usage in Keyboard Directory**:
99
100Must be in keyboard directory with a default keymap, or in keymap directory for keyboard, or supply one with `--keymap <keymap_name>`
101```
102qmk compile
103```
104
105**Example**:
106```
107$ qmk config compile.keymap=default
108$ cd ~/qmk_firmware/keyboards/planck/rev6
109$ qmk compile
110Ψ Compiling keymap with make planck/rev6:default
111...
112```
113or with optional keymap argument
114
115```
116$ cd ~/qmk_firmware/keyboards/clueboard/66/rev4
117$ qmk compile -km 66_iso
118Ψ Compiling keymap with make clueboard/66/rev4:66_iso
119...
120```
121or in keymap directory
122
123```
124$ cd ~/qmk_firmware/keyboards/gh60/satan/keymaps/colemak
125$ qmk compile
126Ψ Compiling keymap with make make gh60/satan:colemak
127...
128```
129
130**Usage in Layout Directory**:
131
132Must be under `qmk_firmware/layouts/`, and in a keymap folder.
133```
134qmk compile -kb <keyboard_name>
135```
136
137**Example**:
138```
139$ cd ~/qmk_firmware/layouts/community/60_ansi/mechmerlin-ansi
140$ qmk compile -kb dz60
141Ψ Compiling keymap with make dz60:mechmerlin-ansi
142...
143```
144
897888db 145## `qmk flash`
146
147This command is similar to `qmk compile`, but can also target a bootloader. The bootloader is optional, and is set to `:flash` by default.
148To specify a different bootloader, use `-bl <bootloader>`. Visit <https://docs.qmk.fm/#/flashing>
149for more details of the available bootloaders.
150
151**Usage for Configurator Exports**:
152
153```
154qmk flash <configuratorExport.json> -bl <bootloader>
155```
156
157**Usage for Keymaps**:
158
159```
160qmk flash -kb <keyboard_name> -km <keymap_name> -bl <bootloader>
161```
162
163**Listing the Bootloaders**
164
165```
166qmk flash -b
167```
168
d569f087 169## `qmk config`
170
171This command lets you configure the behavior of QMK. For the full `qmk config` documentation see [CLI Configuration](cli_configuration.md).
172
173**Usage**:
174
175```
176qmk config [-ro] [config_token1] [config_token2] [...] [config_tokenN]
177```
178
2707652c 179## `qmk docs`
180
181This command starts a local HTTP server which you can use for browsing or improving the docs. Default port is 8936.
182
183**Usage**:
184
185```
186qmk docs [-p PORT]
187```
188
d569f087 189## `qmk doctor`
190
5e65af3a 191This command examines your environment and alerts you to potential build or flash problems. It can fix many of them if you want it to.
d569f087 192
193**Usage**:
194
195```
5e65af3a 196qmk doctor [-y] [-n]
d569f087 197```
198
5e65af3a 199**Examples**:
200
201Check your environment for problems and prompt to fix them:
202
203 qmk doctor
204
205Check your environment and automatically fix any problems found:
206
207 qmk doctor -y
208
209Check your environment and report problems only:
210
211 qmk doctor -n
212
e0e26957
SJJ
213## `qmk json-keymap`
214
215Creates a keymap.c from a QMK Configurator export.
216
217**Usage**:
218
219```
220qmk json-keymap [-o OUTPUT] filename
221```
222
7329c2d0
CB
223## `qmk kle2json`
224
225This command allows you to convert from raw KLE data to QMK Configurator JSON. It accepts either an absolute file path, or a file name in the current directory. By default it will not overwrite `info.json` if it is already present. Use the `-f` or `--force` flag to overwrite.
226
227**Usage**:
228
229```
230qmk kle2json [-f] <filename>
231```
232
233**Examples**:
234
235```
236$ qmk kle2json kle.txt
237☒ File info.json already exists, use -f or --force to overwrite.
238```
239
240```
241$ qmk kle2json -f kle.txt -f
242Ψ Wrote out to info.json
243```
244
a5a31a5f 245## `qmk list-keyboards`
f04e58da
DM
246
247This command lists all the keyboards currently defined in `qmk_firmware`
248
249**Usage**:
250
251```
a5a31a5f 252qmk list-keyboards
f04e58da
DM
253```
254
3ed12236 255## `qmk list-keymaps`
26f53d38
E
256
257This command lists all the keymaps for a specified keyboard (and revision).
258
259**Usage**:
260
261```
3ed12236 262qmk list-keymaps -kb planck/ez
26f53d38
E
263```
264
d569f087 265## `qmk new-keymap`
266
267This command creates a new keymap based on a keyboard's existing default keymap.
268
269**Usage**:
270
271```
272qmk new-keymap [-kb KEYBOARD] [-km KEYMAP]
273```
274
275## `qmk pyformat`
276
277This command formats python code in `qmk_firmware`.
278
279**Usage**:
280
281```
282qmk pyformat
283```
284
285## `qmk pytest`
286
287This command runs the python test suite. If you make changes to python code you should ensure this runs successfully.
288
289**Usage**:
290
291```
292qmk pytest
293```