Installing ZMK
Unlike other keyboard firmwares, ZMK Firmware has been built from the ground up to allow users to manage their own keyboard configurations, including keymaps, specific hardware details, etc. all outside of the core ZMK Firmware source repository.
In addition to this, most users will not need to install any complicated toolchains or tools to build ZMK. GitHub Actions is used instead to automatically build the user's configured firmware for them.
ZMK currently has an experimental command line program set to replace the below steps. It is designed to automate a number of steps for you and be easier to use. Give it a try by following the instructions found here. Feedback and bug reports are very much welcome.
Summary
The following steps can be taken to obtain an installable firmware image for your device, without the need to install any compiler or specialized toolchain. This is possible by leveraging GitHub Actions to build your firmware for you in the cloud, which you can then download and flash to your device.
Following the steps in this guide, you will:
- Create a new repository in GitHub that will contain your user config.
- Download and run a small shell script that will automate most of the setup. The script will:
- Prompt you for which board (e.g. nice!nano) and shield (e.g. Lily58 or Kyria) you want to create a configuration for.
- Prompt you for your GitHub username and repo where the config should be pushed.
- Use
git
to clone a template repository that will be the basis for your user's config repository. - Use the given board and shield to update the included GitHub Action to build for the correct hardware.
- Commit the initial version.
- (If info was provided) Push the local repo to your GitHub repository.
- Add your own keymap overlay (
keymap.overlay
) file to the repository, and change your keymap. - Update the configuration flags for your user config, to enable/disable any ZMK features you would like to include.
- Commit and push the updates to trigger a new GitHub Action run.
Prerequisites
The remainder of this guide assumes the following prerequisites:
- You have an active, working GitHub account.
- You have installed and configured the
git
version control tool. - You have locally configured git to access your github account. If using personal access tokens, please be sure it was created with the "workflow" scope option selected.
If you need to, a quick read of Learn The Basics Of Git In Under 10 Minutes will help you get started.
GitHub Repo
Before running the setup script, you will first need to create a new GitHub repository to host the config.
- Navigate to https://github.com/new
- When prompted for the repo name, enter
zmk-config
. - The repository can be public or private
- Do not check any of the options to initialize the repository with a README or other files.
- Click "Create repository"
User Config Setup Script
To start the setup process, run the following from your command line prompt:
- Using curl
- Using wget
- Using PowerShell
bash -c "$(curl -fsSL https://zmk.dev/setup.sh)"
bash -c "$(wget https://zmk.dev/setup.sh -O -)" '' --wget
powershell -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://zmk.dev/setup.ps1'))"
Keyboard Selection
When prompted, enter the number for the corresponding keyboard you would like to target:
Keyboard Selection:
1) 2% Milk 19) Ferris 0.2 37) Nibble
2) A. Dux 20) Fourier Rev. 1 38) nice!60
3) BAT43 21) Helix 39) Osprette
4) BDN9 Rev2 22) Hummingbird 40) Pancake
5) BFO-9000 23) Iris 41) Planck Rev6
6) Boardsource 3x4 Macropad 24) etc...
Pick an keyboard:
If you are building firmware for a new keyboard that is not included in the built-in list of keyboards, you can choose any keyboard from the list that is similar to yours (e.g. in terms of unibody/split and onboard controller / composite) to generate the repository, and edit / add necessary files. You can follow the new shield guide if you are adding support for a composite keyboard.
MCU Board Selection
If the keyboard selected uses an onboard controller you will skip this step. When prompted, enter the number for the corresponding MCU board you would like to target:
MCU Board Selection:
1) BlueMicro840 v1 5) nRF52840 M.2 Module 9) QMK Proton-C
2) Mikoto 5.20 6) nRFMicro 1.1 (flipped) 10) Seeed Studio XIAO SAMD21
3) nice!nano v1 7) nRFMicro 1.1/1.2 11) Seeed Studio XIAO nRF52840
4) nice!nano v2 8) nRFMicro 1.3/1.4 12) Quit
Pick an MCU board:
Keymap Customization
At the next prompt, you have an opportunity to decide if you want the stock keymap file copied in for further customization:
Copy in the stock keymap for customization? [Yn]:
Hit Enter
or type yes
/y
to accept this. If you want to keep the stock keymap, or write a keymap
from scratch, type in no
/n
.
GitHub Details
In order to have your new configuration automatically pushed, and then built using GitHub Actions, enter some information about your particular GitHub info:
GitHub Username (leave empty to skip GitHub repo creation): petejohanson
GitHub Repo Name: zmk-config
GitHub Repo: https://github.com/petejohanson/zmk-config.git
Only the GitHub username is required; if you are happy with the defaults offered in the square brackets, you can simply hit Enter
.
If you are using SSH keys for git push, change GitHub Repo field to the SSH scheme, e.g. git@github.com:petejohanson/zmk-config.git
.
Confirming Selections
The setup script will confirm all of your selections one last time, before performing the setup:
Preparing a user config for:
* MCU Board: nice_nano
* Shield: kyria
* GitHub Repo To Push (please create this in GH first!): https://github.com/petejohanson/zmk-config.git
Continue? [Yn]:
After hitting Enter
or typing y
, the script will create an initial config in a directory named after the repo name,
update the GitHub Action YAML file, commit the initial version, and then push to your repo.
If you used the default GitHub repo URL using the https://
scheme, you may be prompted for your username + password in order to
push the initial commit.