zmk-config/config/boards/shields/leko_pona/leko_pona.keymap

271 lines
9.7 KiB
Text
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <behaviors.dtsi>
#include <dt-bindings/zmk/keys.h>
#include <dt-bindings/zmk/bt.h>
#define HOST_OS 1
#include "../../../../zmk-nodefree-config/helper.h"
ZMK_UNICODE_PAIR(L_ae, N0, N0, E, N4, N0, N0, C, N4) // åÅ
ZMK_UNICODE_PAIR(L_ao, N0, N0, E, N5, N0, N0, C, N5) // äÄ
ZMK_UNICODE_PAIR(L_oe, N0, N0, F, N6, N0, N0, D, N6) // öÖ
ZMK_UNICODE_PAIR(L_euro, N2, N0, A, C, N0, N0, B, N0) // euro sign and degree symbol €, °
ZMK_UNICODE_PAIR(L_multi_o, A, N6, N6, E, F, F, F, D ) // multiocular o, unicode error ꙮ, <20>
ZMK_UNICODE_PAIR(L_micro, N0, N0, B, N5, N0, N0, B, N7 ) // µ, ·
// box parts
ZMK_UNICODE_SINGLE(L_box_rd, N2, N5, N0, F ) // ┏
ZMK_UNICODE_SINGLE(L_box_rdl, N2, N5, N3, N3) // ┳
ZMK_UNICODE_SINGLE(L_box_dl, N2, N5, N1, N3) // ┓
ZMK_UNICODE_SINGLE(L_box_urd, N2, N5, N2, N3) // ┣
ZMK_UNICODE_SINGLE(L_box_urdl, N2, N5, N4, B ) // ╋
ZMK_UNICODE_SINGLE(L_box_udl, N2, N5, N2, B ) // ┫
ZMK_UNICODE_SINGLE(L_box_ur, N2, N5, N1, N7) // ┗
ZMK_UNICODE_SINGLE(L_box_url, N2, N5, N3, B ) // ┻
ZMK_UNICODE_SINGLE(L_box_ul, N2, N5, N1, B ) // ┛
ZMK_UNICODE_SINGLE(L_box_h, N2, N5, N0, N1) // ━
ZMK_UNICODE_SINGLE(L_box_v, N2, N5, N0, N3) // ┃
ZMK_UNICODE_SINGLE(L_box_spc, N3, N0, N0, N0) // ' '
// blocks
ZMK_UNICODE_SINGLE(L_block_u, N2, N5, N8, N0) // ▀
ZMK_UNICODE_SINGLE(L_block_d, N2, N5, N8, N4) // ▄
ZMK_UNICODE_SINGLE(L_block , N2, N5, N8, N8) // █
// arrows
ZMK_UNICODE_SINGLE(L_arr_l, N2, N1, N9, N0) // ←
ZMK_UNICODE_SINGLE(L_arr_u, N2, N1, N9, N1) // ↑
ZMK_UNICODE_SINGLE(L_arr_r, N2, N1, N9, N2) // →
ZMK_UNICODE_SINGLE(L_arr_d, N2, N1, N9, N3) // ↓
// switch to Windows-mode (using WinCompose)
#undef OS_UNICODE_LEAD
#undef OS_UNICODE_TRAIL
#define OS_UNICODE_LEAD &macro_tap &kp RALT &kp U // WinCompose sequence
#define OS_UNICODE_TRAIL &macro_tap &kp RET
ZMK_UNICODE_PAIR(W_ae, N0, N0, E, N4, N0, N0, C, N4)
ZMK_UNICODE_PAIR(W_ao, N0, N0, E, N5, N0, N0, C, N5)
ZMK_UNICODE_PAIR(W_oe, N0, N0, F, N6, N0, N0, D, N6)
ZMK_UNICODE_PAIR(W_euro, N2, N0, A, C, N0, N0, B, N0) // euro sign and degree symbol
ZMK_UNICODE_PAIR(W_multi_o, A, N6, N6, E, F, F, F, D ) // multiocular o
ZMK_UNICODE_PAIR(W_micro, N0, N0, B, N5, N0, N0, B, N7 ) // µ, ·
// box parts
ZMK_UNICODE_SINGLE(W_box_rd, N2, N5, N0, F ) // ┏
ZMK_UNICODE_SINGLE(W_box_rdl, N2, N5, N3, N3) // ┳
ZMK_UNICODE_SINGLE(W_box_dl, N2, N5, N1, N3) // ┓
ZMK_UNICODE_SINGLE(W_box_urd, N2, N5, N2, N3) // ┣
ZMK_UNICODE_SINGLE(W_box_urdl, N2, N5, N4, B ) // ╋
ZMK_UNICODE_SINGLE(W_box_udl, N2, N5, N2, B ) // ┫
ZMK_UNICODE_SINGLE(W_box_ur, N2, N5, N1, N7) // ┗
ZMK_UNICODE_SINGLE(W_box_url, N2, N5, N3, B ) // ┻
ZMK_UNICODE_SINGLE(W_box_ul, N2, N5, N1, B ) // ┛
ZMK_UNICODE_SINGLE(W_box_h, N2, N5, N0, N1) // ━
ZMK_UNICODE_SINGLE(W_box_v, N2, N5, N0, N3) // ┃
ZMK_UNICODE_SINGLE(W_box_spc, N3, N0, N0, N0) // ' '
// blocks
ZMK_UNICODE_SINGLE(W_block_u, N2, N5, N8, N0) // ▀
ZMK_UNICODE_SINGLE(W_block_d, N2, N5, N8, N4) // ▄
ZMK_UNICODE_SINGLE(W_block , N2, N5, N8, N8) // █
// arrows
ZMK_UNICODE_SINGLE(W_arr_l, N2, N1, N9, N0) // ←
ZMK_UNICODE_SINGLE(W_arr_u, N2, N1, N9, N1) // ↑
ZMK_UNICODE_SINGLE(W_arr_r, N2, N1, N9, N2) // →
ZMK_UNICODE_SINGLE(W_arr_d, N2, N1, N9, N3) // ↓
#define BASE 0
#define SYM 1
#define NAV 2
#define META 3
#define TOKI 4
#define GAME 5
#define WINDOWS 6
#define W_UNI 7
#define LEFT_COMPACT 8
#define LEFT_COMPACT_KEYS 9
#define LEFT_COMPACT_NUM 10
#define EXTRA_UNICODE 11
#define EXTRA_UNICODE_WINDOWS 12
/ {
conditional_layers {
compatible = "zmk,conditional-layers";
windows_unicode {
if-layers = <SYM WINDOWS>;
then-layer = <W_UNI>;
};
windows_password {
if-layers = <EXTRA_UNICODE WINDOWS>;
then-layer = <EXTRA_UNICODE_WINDOWS>;
};
meta_layer {
if-layers = <SYM NAV>;
then-layer = <META>;
};
};
};
/ {
combos {
compatible = "zmk,combos";
toggle_left_compact {
timeout-ms = <50>;
key-positions = <2 3>;
bindings = <&tog LEFT_COMPACT>;
};
};
};
/ {
behaviors {
esctab: shift_esc_tab {
compatible = "zmk,behavior-mod-morph";
label = "esc_tab";
#binding-cells = <0>;
bindings = <&kp ESC>, <&kp TAB>;
mods = <(MOD_LSFT)>;
};
escape: fancy_esc_key {
// activate esc-tab macro if not holding ctrl, this allows ctrl-shift-esc but turns shift-esc into tab
compatible = "zmk,behavior-mod-morph";
label = "esc";
#binding-cells = <0>;
bindings = <&esctab>, <&kp ESC>;
mods = <(MOD_LCTL)>;
keep-mods = <(MOD_LCTL)>;
};
layerleft: layer_left {
compatible = "zmk,behavior-mod-morph";
label = "shift_extra";
#binding-cells = <0>;
bindings = <&mo LEFT_COMPACT_KEYS>, <&mo LEFT_COMPACT_NUM>;
mods = <(MOD_LSFT)>;
};
gqt: global-quick-tap {
compatible = "zmk,behavior-hold-tap";
label = "GLOBAL_QUICK_TAP";
#binding-cells = <2>;
flavor = "tap-preferred";
tapping-term-ms = <200>;
quick-tap-ms = <125>;
global-quick-tap;
bindings = <&kp>, <&kp>;
};
};
};
/ {
keymap {
compatible = "zmk,keymap";
l_base {
bindings = <
&escape &kp W &kp F &kp P &kp B &kp J &kp L &kp U &kp Y &kp BACKSPACE
&kp A &kp R &kp S &kp T &kp G &kp M &kp N &kp E &kp I &kp O
&kp LCTRL &kp X &kp C &kp D &kp V &kp K &kp H &kp Z &kp Q &kp LALT
&kp SPACE &kp LSHIFT &kp LWIN &mo NAV &mo SYM &kp RET
>;
};
// numbers + symbols + non english letters
l_sym {
bindings = <
&kp TAB &kp GRAVE &kp LBKT &kp RBKT &L_euro &L_multi_o &L_ao &L_ae &L_oe &kp DEL
&kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0
&trans &kp SQT &kp SLASH &kp BSLH &kp EQUAL &kp MINUS &kp SEMI &kp COMMA &kp DOT &trans
&trans &trans &trans &trans &trans &trans
>;
};
// F keys + navigation
l_nav {
bindings = <
&kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp PG_UP &kp HOME &kp UP &kp END &kp PSCRN
&kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp PG_DN &kp LEFT &kp DOWN &kp RIGHT &kp K_CMENU
&trans &kp F11 &kp F12 &kp F13 &kp F14 &kp F15 &kp F16 &kp F17 &kp F18 &trans
&kp SPACE &trans &trans &trans &trans &trans
>;
};
// media + bluetooth + layer toggles + numpad
l_meta {
bindings = <
&kp C_VOL_DN &kp C_VOL_UP &tog WINDOWS &tog GAME &tog TOKI &kp KP_MULTIPLY &kp KP_N7 &kp KP_N8 &kp KP_N9 &kp KP_PLUS
&kp C_PREV &kp C_NEXT &tog LEFT_COMPACT &kp C_PLAY &tog EXTRA_UNICODE &kp KP_DIVIDE &kp KP_N4 &kp KP_N5 &kp KP_N6 &kp KP_N0
&trans &none &bt BT_SEL 0 &bt BT_NXT &bt BT_CLR &kp KP_DOT &kp KP_N1 &kp KP_N2 &kp KP_N3 &kp KP_MINUS
&trans &trans &trans &trans &trans &kp KP_ENTER
>;
};
// toki pona
l_toki {
bindings = <
&trans &kp P &kp W &kp U &none &tog TOKI &kp E &kp S &kp J &trans
&kp N &kp L &kp I &kp A &none &none &kp O &kp T &kp M &kp K
&trans &none &kp QMARK &kp EXCL &none &none &kp DOT &kp COMMA &none &none
&trans &none &trans &none &trans &trans
>;
};
// game compatibility / half qwerty
l_game {
bindings = <
&kp ESC &kp Q &kp W &kp E &kp R &none &none &kp UP &none &kp BSPC
&kp LSHFT &kp A &kp S &kp D &kp F &none &kp LEFT &kp DOWN &kp RIGHT &none
&kp LCTRL &kp Z &kp X &kp C &kp V &none &none &none &none &none
&kp LALT &kp SPACE &tog GAME &tog GAME &none &kp RET
>;
};
// dummy layer for enabling windows unicode macros
l_windows {
bindings = <
&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans
&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans
&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans
&trans &trans &trans &trans &trans &trans
>;
};
l_W_unicode {
bindings = <
&trans &trans &trans &trans &W_euro &W_multi_o &W_ao &W_ae &W_oe &trans
&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans
&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans
&trans &trans &trans &trans &trans &trans
>;
};
l_left_compact {
bindings = <
&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans
&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans
&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans
&trans &trans &layerleft &trans &trans &trans
>;
};
l_left_compact_keys {
bindings = <
&kp BSPC &kp Y &kp U &kp L &kp J &trans &trans &trans &trans &trans
&kp O &kp I &kp E &kp N &kp M &trans &trans &trans &trans &trans
&kp LALT &kp Q &kp Z &kp H &kp K &trans &trans &trans &trans &trans
&kp SPACE &mo LEFT_COMPACT_NUM &trans &trans &trans &trans
>;
};
l_left_compact_num {
bindings = <
&kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &trans &trans &trans &trans &trans
&kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &trans &trans &trans &trans &trans
&trans &kp F1 &kp F2 &kp F3 &kp F4 &trans &trans &trans &trans &trans
&trans &trans &trans &trans &trans &trans
>;
};
l_extra_unicode {
bindings = <
&trans &none &L_arr_u &L_micro &L_block_u &L_box_spc &L_box_rd &L_box_rdl &L_box_dl &trans
&none &L_arr_l &L_arr_d &L_arr_r &L_block &L_box_v &L_box_urd &L_box_urdl &L_box_udl &none
&trans &none &none &none &L_block_d &L_box_h &L_box_ur &L_box_url &L_box_ul &trans
&kp SPACE &trans &tog EXTRA_UNICODE &none &none &trans
>;
};
l_extra_unicode_windows {
bindings = <
&trans &none &W_arr_u &W_micro &W_block_u &W_box_spc &W_box_rd &W_box_rdl &W_box_dl &trans
&none &W_arr_l &W_arr_d &W_arr_r &W_block &W_box_v &W_box_urd &W_box_urdl &W_box_udl &none
&trans &none &none &none &W_block_d &W_box_h &W_box_ur &W_box_url &W_box_ul &trans
&kp SPACE &trans &tog EXTRA_UNICODE &none &none &trans
>;
};
};
};