Keymap - inpudiy/zmk-guide GitHub Wiki

Это файл по созданию базовой раскладки со слоями, без различных макросов, мод-тапов и прочего. Подобные вещи, возможно, будут описаны в отдельном файле.

.keymap

В директории config создаём файл имяплаты.keymap и вставляем в начало файла следующие строки:

#include <behaviors.dtsi>
#include <dt-bindings/zmk/keys.h>
#include <dt-bindings/zmk/bt.h>

Первый слой

Для того чтобы создать слой, нужно использовать следующую конструкцию:

/ {
        keymap {
                compatible = "zmk,keymap";

                default_layer {
                        bindings = <
                        >;
                };
        };
};

Далее необходимо указать действие для каждой клавиши в каждом ряду. Поскольку сейчас мы описываем самый базовый функционал, нам нужны только простое нажатие и временная активация слоя. За это отвечают две конструкции: &kp — это key press, а &momomentary layer. В момент, когда клавиша с &mo зажата, активируется назначенный на неё слой; как только клавиша отпущена, возвращается основной слой. Если клавиша есть в матрице, но для неё не задано действие, используется &none.

Для удобства возьмём из .dtsi-файла комментарий с размерами матрицы и заполним наш keymap. (Всё, что идёт после // в строке, является комментарием и не учитывается при сборке прошивки.)

#include <behaviors.dtsi>
#include <dt-bindings/zmk/keys.h>
#include <dt-bindings/zmk/bt.h>

/ {
        keymap {
                compatible = "zmk,keymap";

                default_layer {
                        bindings = <
         // | SW1  | SW2  | SW3  | SW4  | SW5  | SW6  |   | SW6  | SW5  | SW4  | SW3  | SW2  | SW1  |
         // | SW7  | SW8  | SW9  | SW10 | SW11 | SW12 |   | SW12 | SW11 | SW10 | SW9  | SW8  | SW7  |
         // | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 |   | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 |
         //                      | SW21 | SW20 | SW19 |   | SW19 | SW20 | SW21 |

           &kp TAB   &kp Q &kp W &kp E &kp R &kp T   &kp Y &kp U  &kp I     &kp O   &kp P    &kp BSPC
           &kp LCTRL &kp A &kp S &kp D &kp F &kp G   &kp H &kp J  &kp K     &kp L   &kp SEMI &kp SQT
           &kp LSHFT &kp Z &kp X &kp C &kp V &kp B   &kp N &kp M  &kp COMMA &kp DOT &kp FSLH &kp ESC
                          &kp LGUI &mo 1 &kp SPACE   &kp RET &mo 2 &kp RALT
                        >;
                };
        };
};

Дополнительные слои

Добавление других слоёв ничем не отличается от основного, поэтому просто добавим raise и lower слои и посмотрим на финальный вид .keymap-файла:

/*
 * Copyright (c) 2020 The ZMK Contributors
 *
 * SPDX-License-Identifier: MIT
 */

#include <behaviors.dtsi>
#include <dt-bindings/zmk/keys.h>
#include <dt-bindings/zmk/bt.h>

/ {
        keymap {
                compatible = "zmk,keymap";

                default_layer {
// -----------------------------------------------------------------------------------------
// |  TAB |  Q  |  W  |  E  |  R  |  T  |   |  Y  |  U   |  I  |  O  |  P  | BSPC |
// | CTRL |  A  |  S  |  D  |  F  |  G  |   |  H  |  J   |  K  |  L  |  ;  |  '   |
// | SHFT |  Z  |  X  |  C  |  V  |  B  |   |  N  |  M   |  ,  |  .  |  /  | ESC  |
//                    | GUI | LWR | SPC |   | ENT | RSE  | ALT |
                        bindings = <
   &kp TAB   &kp Q &kp W &kp E &kp R &kp T   &kp Y &kp U  &kp I     &kp O   &kp P    &kp BSPC
   &kp LCTRL &kp A &kp S &kp D &kp F &kp G   &kp H &kp J  &kp K     &kp L   &kp SEMI &kp SQT
   &kp LSHFT &kp Z &kp X &kp C &kp V &kp B   &kp N &kp M  &kp COMMA &kp DOT &kp FSLH &kp ESC
                  &kp LGUI &mo 1 &kp SPACE   &kp RET &mo 2 &kp RALT
                        >;
                };
                lower_layer {
// -----------------------------------------------------------------------------------------
// |  TAB |  1  |  2  |  3  |  4  |  5  |   |  6  |  7  |  8  |  9  |  0  | BSPC |
// | BTCLR| BT1 | BT2 | BT3 | BT4 | BT5 |   | LFT | DWN |  UP | RGT |     |      |
// | SHFT |     |     |     |     |     |   |     |     |     |     |     |      |
//                    | GUI |     | SPC |   | ENT |     | ALT |
                        bindings = <
   &kp TAB    &kp N1       &kp N2       &kp N3       &kp N4       &kp N5         &kp N6   &kp N7   &kp N8 &kp N9    &kp N0 &kp BSPC
   &bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4   &kp LEFT &kp DOWN &kp UP &kp RIGHT &trans &trans
   &kp LSHFT  &trans       &trans       &trans       &trans       &trans         &trans   &trans   &trans &trans    &trans &trans
                                    &kp LGUI     &trans       &kp SPACE      &kp RET  &trans   &kp RALT
                        >;
                };

                raise_layer {
// -----------------------------------------------------------------------------------------
// |  TAB |  !  |  @  |  #  |  $  |  %  |   |  ^  |  &  |  *  |  (  |  )  | BSPC |
// | CTRL |     |     |     |     |     |   |  -  |  =  |  [  |  ]  |  \  |  `   |
// | SHFT |     |     |     |     |     |   |  _  |  +  |  {  |  }  | "|" |  ~   |
//                    | GUI |     | SPC |   | ENT |     | ALT |
                        bindings = <
   &kp  TAB  &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT   &kp CARET &kp AMPS  &kp ASTRK &kp LPAR &kp RPAR &kp BSPC
   &kp LCTRL &trans   &trans &trans   &trans   &trans      &kp MINUS &kp EQUAL &kp LBKT  &kp RBKT &kp BSLH &kp GRAVE
   &kp LSHFT &trans   &trans &trans   &trans   &trans      &kp UNDER &kp PLUS  &kp LBRC  &kp RBRC &kp PIPE &kp TILDE
                             &kp LGUI &trans   &kp SPACE   &kp RET   &trans    &kp RALT
                        >;
                };
        };
};