Como configurar meu teclado com ZMK

Existem três caminhos: o Keymap Editor, que eu recomendo para quem está começando, edita o keymap no navegador e gera o firmware pelo GitHub; o ZMK Studio muda as teclas na hora, sem gravar firmware novo; e a edição manual do arquivo .keymap dá controle total. Para gravar, basta copiar um arquivo .uf2 para cada metade.

Qual caminho escolher?

O ZMK é o firmware dos teclados sem fio. Você pode configurá-lo de três jeitos, e dá para começar por um e mudar depois.

  • Keymap Editor (recomendado): editor visual sem limitações. Você configura camadas, combos, macros, tap dance e behaviors, aprende enquanto configura, e ele salva tudo no seu GitHub.
  • ZMK Studio: muda as teclas na hora, sem compilar nem gravar firmware a cada alteração. Ainda está em desenvolvimento e não configura combos, macros nem tap dance.
  • Edição manual: você altera o arquivo .keymap direto no GitHub. Não tem nenhuma limitação de interface, só a do seu próprio código, mas pede que você já conheça a documentação do ZMK.

Antes de começar: o repositório zmk-config

A configuração do seu teclado fica num repositório do GitHub, o zmk-config. Toda vez que ele muda, o GitHub compila o firmware para você, de graça, sem instalar nada no computador.

  1. Crie uma conta no GitHub, se ainda não tiver.
  2. Faça um fork do repositório do seu teclado. Os teclados da Tupinikeebs têm um repositório pronto (por exemplo, o do Sofle com OLED); se não souber qual é o seu, pergunte pelo contato.
  3. Se o seu teclado não tiver um repositório pronto, crie um com o script de configuração do ZMK: ele pergunta o teclado, a placa (na maioria das vezes, nice!nano v2) e já copia o keymap padrão.
  4. No seu fork, abra a aba Actions e clique para ativar os workflows. O GitHub deixa os workflows desligados em forks até você ativar.

Caminho 1: Keymap Editor (recomendado)

O Keymap Editor mostra o seu teclado na tela: você clica numa tecla e escolhe o que ela faz. Quando você salva, ele grava a mudança no seu repositório, e isso dispara a compilação do firmware automaticamente.

Keymap Editor com o repositório klotz-zmk aberto: camadas numeradas à esquerda, as teclas das duas metades no centro e os encoders em Sensor bindings
Keymap Editor: camadas à esquerda, teclas no centro e as abas de combos, macros e behaviors no topo.

Quer testar antes? Abra o editor e use o repositório de demonstração do Corne, sem precisar de conta.

  1. Abra o Keymap Editor e escolha GitHub como fonte (Source).
  2. Entre com a sua conta do GitHub e autorize o app no seu repositório zmk-config.
  3. Selecione o repositório (Repository) e o branch.
  4. Clique numa tecla para trocar a função. Use as abas Layers, Conditional Layers, Combos, Macros e Behaviors para o resto.
  5. Clique em Save, no canto superior esquerdo. A mudança vai para o GitHub e a compilação começa sozinha.
  6. Baixe e grave o firmware, como explicado nas próximas seções.

Como baixar o firmware?

A compilação leva uns 3 a 5 minutos. Quando terminar, o firmware fica disponível na aba Actions do seu repositório.

Página do GitHub Actions com o build concluído com sucesso em 3 minutos e 42 segundos e o artefato firmware disponível para download
Build concluído: o arquivo firmware aparece em Artifacts.
  1. No seu repositório, abra a aba Actions.
  2. Clique no build mais recente. Ele precisa estar com o ícone verde (sucesso).
  3. Em Artifacts, no fim da página, baixe o arquivo firmware.
  4. Descompacte o arquivo. Dentro dele há um arquivo .uf2 para a metade esquerda (left) e outro para a direita (right).

Como colocar o teclado em modo de gravação?

Grave uma metade de cada vez. Conecte o cabo USB na metade e aperte o botão de reset duas vezes, em menos de 1 segundo.

Metade de um teclado split conectada por USB ao notebook, com o pequeno botão de reset ao lado do controlador destacado por um círculo
O botão de reset fica perto do controlador. Dois cliques rápidos ativam o modo de gravação.

Como gravar o firmware?

No modo de gravação, o teclado aparece no computador como um pendrive chamado NICENANO (o nome muda conforme o controlador).

Janela do Finder com o drive NICENANO aberto, mostrando os arquivos CURRENT.UF2, INDEX.HTM e INFO_UF2.TXT
O controlador aparece como um pendrive. É só arrastar o arquivo .uf2 para dentro.
  1. Copie o arquivo left para a metade esquerda.
  2. O drive se desconecta sozinho quando a cópia termina. É comum o computador mostrar um erro de “disco removido”: não é bug, é o jeito do ZMK.
  3. Repita com a metade direita e o arquivo right.
  4. Não precisa apagar nenhum arquivo do drive. Em toda atualização, basta copiar o arquivo novo.
  5. Se as metades pararem de se conectar depois de uma atualização, grave o arquivo settings_reset nas duas (se ele vier no seu build) e depois o firmware normal de novo.

Caminho 2: ZMK Studio

O ZMK Studio é a interface mais nova do ZMK. A grande vantagem é que você quase nunca precisa mexer em código, compilar, baixar e gravar firmware novo a cada alteração: a mudança vale na hora.

Mas ele ainda está em desenvolvimento e tem limitações. Não configura combos, macros, tap dance nem camadas condicionais, e não salva as mudanças no seu GitHub. Por isso eu não recomendo começar por ele, pelo menos enquanto você ainda está aprendendo o ZMK.

ZMK Studio com o layout de um Lily58: lista de camadas à esquerda e as teclas das duas metades no centro
ZMK Studio: as mudanças valem na hora, sem gravar firmware.

Atenção: depois que você passa a usar o ZMK Studio, mudanças feitas no arquivo .keymap deixam de valer, a menos que você use a opção Restore Stock Settings no próprio Studio.

  1. O firmware precisa ter suporte ao Studio. No arquivo build.yaml do seu repositório, só na metade esquerda (a central), adicione as linhas snippet: studio-rpc-usb-uart e cmake-args: -DCONFIG_ZMK_STUDIO=y. Veja o exemplo na documentação do ZMK Studio.
  2. Coloque uma tecla de desbloqueio no keymap, com o behavior &studio_unlock (dá para fazer pelo Keymap Editor).
  3. Baixe e grave o firmware novo, como explicado acima.
  4. Conecte a metade esquerda por USB e abra o zmk.studio no Chrome ou no Edge, ou baixe o app para Windows, macOS ou Linux.
  5. Selecione o teclado e aperte a tecla de desbloqueio.
  6. Clique numa tecla para trocar a função e salve. A mudança fica gravada no teclado.

Caminho 3: editar o .keymap à mão

No seu repositório, o keymap fica em config/[teclado].keymap. Dá para editar direto pelo site do GitHub: cada commit dispara a compilação, e depois é só baixar e gravar o firmware.

Considere esse caminho quando você já leu a documentação de keymaps do ZMK e sabe exatamente o que está fazendo. Aqui não existe limitação de interface, só a do seu próprio código.

Teclas especiais: &mo, &tog, &lt, &mt e tap dance

No ZMK, cada tecla usa um behavior. Além do &kp (tecla normal), alguns mudam de camada ou fazem duas coisas na mesma tecla, e são eles que deixam um teclado pequeno tão completo. Se camadas ainda são novidade, veja antes como funcionam layouts e camadas.

  • &mo (momentânea): &mo 1 liga a camada 1 só enquanto você segura a tecla. Soltou, volta para a camada base.
  • &tog (alternar): &tog 1 liga a camada 1 com um toque e desliga com outro. Bom para uma camada de números ou de jogos.
  • &lt (layer-tap): &lt 1 SPACE dá espaço quando você toca e liga a camada 1 enquanto você segura. Assim uma tecla do polegar faz duas funções.
  • &mt (mod-tap): &mt LSHIFT A dá A quando você toca e vira Shift enquanto você segura. É a base dos home row mods: Ctrl, Alt, Shift e GUI nas teclas do meio do teclado.
  • Tap dance: a mesma tecla faz coisas diferentes conforme o número de toques. Por exemplo: um toque dá ponto e vírgula e dois toques dão dois-pontos. No ZMK, ele é criado como um behavior novo no arquivo .keymap (zmk,behavior-tap-dance) e depois usado na tecla, como &td0.
  • &sk (sticky key): &sk LSHIFT deixa o Shift ligado só para a próxima tecla, sem precisar segurar.

Como o teclado sabe se foi toque ou segurar?

Pelo tapping-term-ms: se você soltar a tecla antes desse tempo (200 ms por padrão no &mt e no &lt), vale o toque; se segurar por mais tempo, vale a função de segurar. Se o &mt ou o &lt estiver disparando sem querer, aumente um pouco o tempo no arquivo .keymap; se estiver lento, diminua.

No Keymap Editor, clique na tecla e escolha o behavior na lista (&mo, &tog, &lt, &mt, &sk) e depois a camada ou a tecla. No ZMK Studio também: os behaviors que o firmware tem aparecem na lista ao editar a tecla. Um tap dance precisa estar definido no firmware antes de aparecer.

E se eu queimar a controladora? O teclado queima?

NUNCA! A controladora é uma peça separada, socketada na placa: ela encaixa em soquetes (sockets) e sai com as mãos, sem solda. Se ela queimar, é só tirar e encaixar outra, e o resto do teclado continua igual: placa, switches, keycaps e case.

Ilustração de uma metade de Lily58 com a controladora destacada e, em detalhe, a controladora nice!nano levantada acima do socket: o socket fica soldado na placa do teclado e a controladora encaixa e sai com as mãos, sem solda.
Socket: o soquete fica soldado na placa, e a nice!nano encaixa e sai com as mãos.

Por que as controladoras são socketadas e não soldadas?

Para que, se um dia você quiser trocar o seu teclado de sem fio para com fio, basta trocar a controladora: por exemplo, tirar a nice!nano e encaixar uma RP2040, sem solda e sem trocar a placa. O mesmo vale para qualquer eventualidade, como uma controladora queimada ou com defeito.

Mas o mais importante: de forma alguma o teclado vai queimar e você simplesmente perder a placa.

E se eu derrubar água ou café?

O mesmo vale se você derrubar água ou café no teclado. Desligue na hora a chave liga/desliga de cada metade e tire o cabo USB, se estiver conectado. Depois vire o teclado para o líquido escorrer e deixe secar bem, por um ou dois dias, antes de ligar de novo.

Na maioria das vezes ele volta a funcionar; se alguma peça estragar, ela é trocada, sem precisar de um teclado novo. Fale com a gente pelo contato.

Ilustração de uma xícara de café virando sobre a metade direita de um Lily58, com o café espirrando nas teclas, e um quadro com o que fazer na hora: desligar a chave e tirar o USB, virar o teclado e deixar secar antes de ligar.
Derrubou café? Desligue, vire e deixe secar. Se algo estragar, as peças são trocadas.

Onde aprender mais?

Estes são os guias e documentações que eu mais uso.