From 5dc7b65be098a0583a876356855ab123b9b9ec47 Mon Sep 17 00:00:00 2001 From: Alexey Date: Sat, 25 Oct 2025 23:12:57 +0300 Subject: [PATCH 01/12] Add dongle Use https://github.com/DarrenVictoriano/zmk-config as reference --- .github/workflows/keymap-drawer.yml | 0 boards/shields/corne/Kconfig.defconfig | 57 +++++++++++++++++++++++ boards/shields/corne/Kconfig.shield | 0 boards/shields/corne/corne_dongle.conf | 0 boards/shields/corne/corne_dongle.overlay | 0 images/config.keymap-drawer.yaml | 0 6 files changed, 57 insertions(+) create mode 100644 .github/workflows/keymap-drawer.yml create mode 100644 boards/shields/corne/Kconfig.defconfig create mode 100644 boards/shields/corne/Kconfig.shield create mode 100644 boards/shields/corne/corne_dongle.conf create mode 100644 boards/shields/corne/corne_dongle.overlay create mode 100644 images/config.keymap-drawer.yaml diff --git a/.github/workflows/keymap-drawer.yml b/.github/workflows/keymap-drawer.yml new file mode 100644 index 0000000..e69de29 diff --git a/boards/shields/corne/Kconfig.defconfig b/boards/shields/corne/Kconfig.defconfig new file mode 100644 index 0000000..46afb8f --- /dev/null +++ b/boards/shields/corne/Kconfig.defconfig @@ -0,0 +1,57 @@ +if SHIELD_CORNE_DONGLE + +config ZMK_KEYBOARD_NAME + default "Corne" + +config ZMK_SPLIT_ROLE_CENTRAL + default y + +config ZMK_USB + default y + +config ZMK_SPLIT_BLE_CENTRAL_PERIPHERALS + default 2 + +# Set this to ZMK_SPLIT_BLE_CENTRAL_PERIPHERALS + your desired number of BT profiles (default is 5) +config BT_MAX_CONN + default 5 + +# Set this to the same number as BT_MAX_CONN +config BT_MAX_PAIRED + default 5 + +endif + +if SHIELD_CORNE_LEFT || SHIELD_CORNE_RIGHT || SHIELD_CORNE_DONGLE + +config ZMK_SPLIT + default y + +if ZMK_DISPLAY + +config I2C + default y + +config SSD1306 + default y + +endif # ZMK_DISPLAY + +if LVGL + +config LV_Z_VDB_SIZE + default 64 + +config LV_DPI_DEF + default 148 + +config LV_Z_BITS_PER_PIXEL + default 1 + +choice LV_COLOR_DEPTH + default LV_COLOR_DEPTH_1 +endchoice + +endif # LVGL + +endif \ No newline at end of file diff --git a/boards/shields/corne/Kconfig.shield b/boards/shields/corne/Kconfig.shield new file mode 100644 index 0000000..e69de29 diff --git a/boards/shields/corne/corne_dongle.conf b/boards/shields/corne/corne_dongle.conf new file mode 100644 index 0000000..e69de29 diff --git a/boards/shields/corne/corne_dongle.overlay b/boards/shields/corne/corne_dongle.overlay new file mode 100644 index 0000000..e69de29 diff --git a/images/config.keymap-drawer.yaml b/images/config.keymap-drawer.yaml new file mode 100644 index 0000000..e69de29 From 810e599e3bc58d76b9df0b8e0fe5a7966e62bbe8 Mon Sep 17 00:00:00 2001 From: Alexey Date: Sat, 25 Oct 2025 23:20:48 +0300 Subject: [PATCH 02/12] Add dongle support --- .github/workflows/build.yml | 1 + .github/workflows/keymap-drawer.yml | 15 + boards/shields/corne/Kconfig.shield | 11 + boards/shields/corne/corne_dongle.conf | 5 + boards/shields/corne/corne_dongle.overlay | 65 +++ build.yaml | 9 + images/config.keymap-drawer.yaml | 587 ++++++++++++++++++++++ 7 files changed, 693 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8b05605..6b6b163 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,3 +1,4 @@ +name: Build ZMK firmware on: [pull_request, workflow_dispatch] #[push, pull_request, workflow_dispatch] jobs: diff --git a/.github/workflows/keymap-drawer.yml b/.github/workflows/keymap-drawer.yml index e69de29..b08397d 100644 --- a/.github/workflows/keymap-drawer.yml +++ b/.github/workflows/keymap-drawer.yml @@ -0,0 +1,15 @@ +name: Draw ZMK keymaps +on: [workflow_dispatch] + +jobs: + draw: + uses: caksoylar/keymap-drawer/.github/workflows/draw-zmk.yml@main + permissions: + contents: write # allow workflow to commit to the repo + with: + amend_commit: true + keymap_patterns: "config/*.keymap" # path to the keymaps to parse + config_path: "images/config_keymap-drawer.yaml" # config file, ignored if not exists + output_folder: "images" # path to save produced SVG and keymap YAML files + parse_args: "" # map of extra args to pass to `keymap parse`, e.g. "corne:'-l Def Lwr Rse' cradio:''" + draw_args: "" # map of extra args to pass to `keymap draw`, e.g. "corne:'-k corne_rotated' cradio:'-k paroxysm'" \ No newline at end of file diff --git a/boards/shields/corne/Kconfig.shield b/boards/shields/corne/Kconfig.shield index e69de29..b7d218d 100644 --- a/boards/shields/corne/Kconfig.shield +++ b/boards/shields/corne/Kconfig.shield @@ -0,0 +1,11 @@ +# Copyright (c) 2020 Pete Johanson +# SPDX-License-Identifier: MIT + +config SHIELD_CORNE_LEFT + def_bool $(shields_list_contains,corne_left) + +config SHIELD_CORNE_RIGHT + def_bool $(shields_list_contains,corne_right) + +config SHIELD_CORNE_DONGLE + def_bool $(shields_list_contains,corne_dongle) diff --git a/boards/shields/corne/corne_dongle.conf b/boards/shields/corne/corne_dongle.conf index e69de29..84af90f 100644 --- a/boards/shields/corne/corne_dongle.conf +++ b/boards/shields/corne/corne_dongle.conf @@ -0,0 +1,5 @@ +CONFIG_BT_CTLR_TX_PWR_PLUS_8=y +CONFIG_ZMK_SLEEP=n + +### DONGLE MODE +CONFIG_ZMK_SPLIT_BLE_CENTRAL_PERIPHERALS=2 diff --git a/boards/shields/corne/corne_dongle.overlay b/boards/shields/corne/corne_dongle.overlay index e69de29..cfb94be 100644 --- a/boards/shields/corne/corne_dongle.overlay +++ b/boards/shields/corne/corne_dongle.overlay @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2020 Pete Johanson + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include + +&foostan_corne_6col_layout { + transform = <&default_transform>; +}; + +&foostan_corne_5col_layout { + transform = <&five_column_transform>; +}; + +/ { + chosen { + zmk,kscan = &mock_kscan; + zmk,physical-layout = &foostan_corne_6col_layout; + }; + + mock_kscan:mock_kscan_0 { + compatible = "zmk,kscan-mock"; + columns = <0>; + rows = <0>; + events = <0>; + + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <12>; + rows = <4>; +// | 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 | +// | SW19 | SW20 | SW21 | | SW21 | SW20 | SW19 | + map = < +RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) +RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) + RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) + >; + }; + + five_column_transform: keymap_transform_1 { + compatible = "zmk,matrix-transform"; + columns = <10>; + rows = <4>; +// | SW2 | SW3 | SW4 | SW5 | SW6 | | SW6 | SW5 | SW4 | SW3 | SW2 | +// | SW8 | SW9 | SW10 | SW11 | SW12 | | SW12 | SW11 | SW10 | SW9 | SW8 | +// | SW14 | SW15 | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | SW15 | SW14 | +// | SW19 | SW20 | SW21 | | SW21 | SW20 | SW19 | + map = < +RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) +RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) +RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) + RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) + >; + }; + +}; \ No newline at end of file diff --git a/build.yaml b/build.yaml index 6f09954..30dd0dd 100644 --- a/build.yaml +++ b/build.yaml @@ -13,10 +13,19 @@ # --- include: + - board: nice_nano_v2 + shield: corne_dongle + snippet: studio-rpc-usb-uart + cmake-args: -DCONFIG_ZMK_SPLIT_ROLE_CENTRAL=y -DCONFIG_ZMK_STUDIO=y -DCONFIG_ZMK_STUDIO_LOCKING=n + - board: nice_nano_v2 shield: corne_left nice_view_adapter nice_view + cmake-args: -DCONFIG_ZMK_SPLIT_ROLE_CENTRAL=n snippet: studio-rpc-usb-uart + - board: nice_nano_v2 shield: corne_right nice_view_adapter nice_view + cmake-args: -DCONFIG_ZMK_SPLIT_ROLE_CENTRAL=n + - board: nice_nano_v2 shield: settings_reset diff --git a/images/config.keymap-drawer.yaml b/images/config.keymap-drawer.yaml index e69de29..31d9804 100644 --- a/images/config.keymap-drawer.yaml +++ b/images/config.keymap-drawer.yaml @@ -0,0 +1,587 @@ +# config from: https://github.com/mctechnology17/zmk-config/blob/main/config/config_keymap-drawer.yaml + +draw_config: + key_w: 60 + key_h: 56 + split_gap: 30.0 + combo_w: 28 + combo_h: 26 + key_rx: 6.0 + key_ry: 6.0 + dark_mode: true + n_columns: 1 + separate_combo_diagrams: false + combo_diagrams_scale: 2 + inner_pad_w: 2.0 + inner_pad_h: 2.0 + outer_pad_w: 40.0 + outer_pad_h: 56.0 + line_spacing: 1.2 + arc_radius: 6.0 + append_colon_to_layer_header: true + small_pad: 2.0 + legend_rel_x: 0.0 + legend_rel_y: 0.0 + draw_key_sides: false + key_side_pars: + rel_x: 0.0 + rel_y: 4.0 + rel_w: 12.0 + rel_h: 12.0 + rx: 4.0 + ry: 4.0 + svg_extra_style: | + /* For default sytles, see https://github.com/caksoylar/keymap-drawer/blob/main/keymap_drawer/config.py#L85 */ + + svg.keymap { + font-family: Ubuntu Mono, Inconsolata, Consolas, Liberation Mono, Menlo, monospace; + font-size: 16px; + font-weight: bold; + text-rendering: optimizeLegibility; + } + + /* Color accent for held keys + red = #f00 + green = #0f0 + blue = #00f + yellow = #ff0 + cyan = #0ff + magenta = #f0f + white = #fff + black = #000 + grey = #888 + light grey = #ccc + #ffc + */ + rect.held, rect.combo.held { + fill: #f00; + } + + /* Technique borrowed and extended from https://github.com/englmaxi/zmk-config/blob/master/keymap-drawer/config.yaml */ + .sym_sub_text.tap { + translate: -5px 2px; + font-size: 20px; + } + .sym_sub_text.shifted { + translate: 10px 13px; + font-size: 10px; + opacity: 1.0; + } + .combo.sym_sub_text.tap { + translate: -1px 1px; + } + .combo.sym_sub_text.shifted { + translate: 7px 5px; + font-size: 10px; + opacity: 1.0; + } + + /* Toggle */ + .toggle.shifted { + translate: -10px 12px; + } + + .toggle.hold { + translate: 13px -23px; + } + + /* Variant for tap-dances */ + .tap_dance.tap { + translate: -7px 0px; + font-size: 12px; + } + .tap_dance.shifted { + translate: 7px 17px; + font-size: 12px; + opacity: 1.0; + } + + /* Variant for symbol next to symbol */ + .sym_by_sym.tap { + translate: -6px 0px; + } + .sym_by_sym.shifted { + translate: 10px 12px; + opacity: 1.0; + } + + .combo.sym_by_sym.tap { + translate: -35px 0px; + } + .combo.sym_by_sym.shifted { + translate: 35px 20px; + opacity: 1.0; + } + + .combo.sym_by_sym.hold { + visibility: hidden; + } + + /* hide hold box for combo sym_by_sym */ + .combo.sym_by_sym.hold > path[stroke="none"][fill="none"] { + visibility: hidden; + } + footer_text: 'Keymap View: keymap-drawer' + shrink_wide_legends: 6 + style_layer_activators: true + glyph_tap_size: 18 + glyph_hold_size: 15 + glyph_shifted_size: 15 + glyphs: {} +parse_config: + preprocess: true + skip_binding_parsing: false + raw_binding_map: + "&sys_reset": Reset + "&bootloader": Boot + "&swapper": Win Next + "&caps_word": Caps Word + "&inv_qm": ¿ + "&kp LC(LG(LEFT))": Desk Left + "&kp LC(LG(RIGHT))": Desk Right + "&kp LC(TAB)": Tab Right + "&kp LC(LS(TAB))": Tab Left + "&kp LA(F4)": Win Close + "&kp LC(F4)": Tab Close + "&kp LS(TAB)": Win Prev + "&kp LS(INS)": Paste + "&kp LG(L)": Lock + "&out OUT_USB": Out USB + "&out OUT_BLE": Out BLE + "&bt BT_SEL 0": BT 1 + "&bt BT_SEL 1": BT 2 + "&bt BT_SEL 2": BT 3 + "&bt BT_SEL 3": BT 4 + "&bt BT_SEL 4": BT 5 + DISPLAY_UP: + t: $$mdi:television-classic$$ + h: $$mdi:arrow-up$$ + type: tap_dance + DISPLAY_DOWN: + t: $$mdi:television-classic$$ + h: $$mdi:arrow-down$$ + type: tap_dance + DISPLAY_LEFT: + t: $$mdi:television-classic$$ + h: $$mdi:arrow-left$$ + type: tap_dance + DISPLAY_RIGHT: + t: $$mdi:television-classic$$ + h: $$mdi:arrow-right$$ + type: tap_dance + DISPLAY_SPACE: + t: $$mdi:television-classic$$ + h: $$mdi:keyboard-space$$ + type: tap_dance + "&rgb_ug RGB_TOG": + t: $$mdi:led-on$$ + h: $$mdi:toggle-switch$$ + s: $$mdi:led-outline$$ + type: toggle + "&rgb_ug RGB_VAI": + t: $$mdi:led-on$$ + s: $$tabler:brightness-up$$ + type: sym_by_sym + "&rgb_ug RGB_VAD": + t: $$mdi:led-outline$$ + s: $$tabler:brightness-down$$ + type: sym_by_sym + "&rgb_ug RGB_BRD": + t: $$mdi:led-on$$ + s: $$tabler:brightness-up$$ + type: sym_by_sym + "&rgb_ug RGB_BRI": + t: $$mdi:led-outline$$ + s: $$tabler:brightness-down$$ + type: sym_by_sym + "&rgb_ug RGB_SAI": + t: $$mdi:led-outline$$ + s: $$mdi:eyedropper$$ + type: sym_by_sym + "&rgb_ug RGB_SAD": + t: $$mdi:led-on$$ + s: $$mdi:eyedropper$$ + type: sym_by_sym + "&rgb_ug RGB_HUI": + t: $$mdi:led-on$$ + s: $$mdi:palette$$ + type: sym_by_sym + "&rgb_ug RGB_HUD": + t: $$mdi:led-outline$$ + s: $$mdi:palette$$ + type: sym_by_sym + "&rgb_ug RGB_RMOD": + t: $$mdi:led-on$$ + h: $$mdi:page-previous-outline$$ + type: tap_dance + "&rgb_ug RGB_MOD": + t: $$mdi:led-on$$ + h: $$mdi:page-next-outline$$ + type: tap_dance + "&rgb_ug RGB_EFF": + t: $$mdi:led-on$$ + h: $$mdi:page-previous-outline$$ + type: tap_dance + "&rgb_ug RGB_EFR": + t: $$mdi:led-on$$ + h: $$mdi:page-next-outline$$ + type: tap_dance + "&rgb_ug RGB_SPI": + t: $$mdi:led-on$$ + h: $$mdi:speedometer$$ + type: sym_by_sym + "&rgb_ug RGB_SPD": + t: $$mdi:led-on$$ + h: $$mdi:speedometer-slow$$ + type: sym_by_sym + "&rgb_ug RGB_UP": + t: $$mdi:led-on$$ + h: $$mdi:arrow-up$$ + type: tap_dance + "&rgb_ug RGB_DOWN": + t: $$mdi:led-on$$ + h: $$mdi:arrow-down$$ + type: tap_dance + "&rgb_ug RGB_LEFT": + t: $$mdi:led-on$$ + h: $$mdi:arrow-left$$ + type: tap_dance + "&rgb_ug RGB_RIGHT": + t: $$mdi:led-on$$ + h: $$mdi:arrow-right$$ + type: tap_dance + "&rgb_ug RGB_SPACE": + t: $$mdi:led-on$$ + h: $$mdi:keyboard-space$$ + type: tap_dance + "&rgb_ug RGB_COLOR_HSB(0,0,100)": + t: $$mdi:led-on$$ + h: $$mdi:palette$$ + type: tap_dance + "&rgb_ug RGB_COLOR_HSB(224,100,100)": + t: $$mdi:led-on$$ + h: $$mdi:palette$$ + type: tap_dance + U_WH_L: + t: $$mdi:mouse-outline$$ + h: $$mdi:arrow-left$$ + type: tap_dance + U_WH_R: + t: $$mdi:mouse-outline$$ + h: $$mdi:arrow-right$$ + type: tap_dance + U_WH_U: + t: $$mdi:mouse-outline$$ + h: $$mdi:arrow-up$$ + type: tap_dance + U_WH_D: + t: $$mdi:mouse-outline$$ + h: $$mdi:arrow-down$$ + type: tap_dance + U_MS_L: + t: $$mdi:mouse$$ + h: $$mdi:arrow-left$$ + type: tap_dance + U_MS_D: + t: $$mdi:mouse$$ + h: $$mdi:arrow-down$$ + type: tap_dance + U_MS_R: + t: $$mdi:mouse$$ + h: $$mdi:arrow-right$$ + type: tap_dance + U_MS_U: + t: $$mdi:mouse$$ + h: $$mdi:arrow-up$$ + type: tap_dance + CLICK_LEFT: $$mdi:cursor-default-click$$ + CLICK_RIGHT: $$mdi:cursor-default-click-outline$$ + CLICK_MIDDLE: $$mdi:cursor-default-click-outline$$ + MEDIA_ESC: + t: $$mdi:keyboard-esc$$ + h: $$mdi:music-note$$ + MOUSE_TAB: + t: $$mdi:keyboard-tab$$ + h: $$mdi:mouse$$ + NUMBER_SPACE: + t: $$mdi:keyboard-space$$ + h: $$mdi:numeric$$ + "&mo _FUNCTION": $$mdi:function-variant$$ + "&mo _CONFIG": $$mdi:cog$$ + "&mo _LOCK": $$mdi:lock$$ + "&mo _SYMBOL": $$mdi:symbol$$ + "&mo _DISPLAY": $$mdi:television-classic$$ + "&mo _OLED": $$mdi:television-classic$$ + "&mo _LINUX": $$mdi:linux$$ + "&mo _RGB": $$mdi:led-on$$ + DE_CAPS: $$mdi:keyboard-caps$$ + TAB: $$mdi:keyboard-tab$$ + "&mt LSHFT COMMA": + t: $$mdi:google-downasaur$$ + h: $$mdi:apple-keyboard-shift$$ + type: tap_dance + "&kp LSHFT": $$mdi:apple-keyboard-shift$$ + "&kp LCTRL": $$mdi:apple-keyboard-control$$ + "&kp RCTRL": $$mdi:apple-keyboard-control$$ + "&kp LGUI": $$mdi:apple-keyboard-command$$ + "&kp RGUI": $$mdi:apple-keyboard-command$$ + "&kp LALT": $$mdi:apple-keyboard-option$$ + "&kp RALT": $$mdi:apple-keyboard-option$$ + "&kp RSHFT": $$mdi:apple-keyboard-shift$$ + "&kp BSPC": $$mdi:backspace-outline$$ + sticky_label: sticky + toggle_label: toggle + tap_toggle_label: tap-toggle + trans_legend: + t: ▽ + type: trans + layer_legend_map: {} + mark_alternate_layer_activators: false + modifier_fn_map: + left_ctrl: Ctl + right_ctrl: Ctl + left_shift: Sft + right_shift: Sft + left_alt: Alt + right_alt: AltGr + left_gui: Gui + right_gui: Gui + keycode_combiner: "{mods}+{key}" + mod_combiner: "{mod_1}+{mod_2}" + special_combinations: + left_ctrl+left_alt+left_gui+left_shift: Hyper + left_ctrl+left_alt+left_shift: Meh + qmk_remove_keycode_prefix: + - KC_ + qmk_keycode_map: + XXXXXXX: "" + "NO": "" + MINUS: "-" + MINS: "-" + EQUAL: "=" + EQL: "=" + LEFT_BRACKET: "[" + LBRC: "[" + RIGHT_BRACKET: "]" + RBRC: "]" + BACKSLASH: \ + BSLS: \ + NONUS_HASH: "#" + NUHS: "#" + SEMICOLON: ; + SCLN: ; + QUOTE: "'" + QUOT: "'" + GRAVE: "`" + GRV: "`" + COMMA: "," + COMM: "," + DOT: . + SLASH: / + SLSH: / + TILDE: "~" + TILD: "~" + EXCLAIM: "!" + EXLM: "!" + AT: "@" + HASH: "#" + DOLLAR: $ + DLR: $ + PERCENT: "%" + PERC: "%" + CIRCUMFLEX: ^ + CIRC: ^ + AMPERSAND: "&" + AMPR: "&" + ASTERISK: "*" + ASTR: "*" + LEFT_PAREN: ( + LPRN: ( + RIGHT_PAREN: ) + RPRN: ) + UNDERSCORE: _ + UNDS: _ + PLUS: + + LEFT_CURLY_BRACE: "{" + LCBR: "{" + RIGHT_CURLY_BRACE: "}" + RCBR: "}" + PIPE: "|" + COLON: ":" + COLN: ":" + DOUBLE_QUOTE: '"' + DQUO: '"' + DQT: '"' + LEFT_ANGLE_BRACKET: < + LABK: < + LT: < + RIGHT_ANGLE_BRACKET: ">" + RABK: ">" + GT: ">" + QUESTION: "?" + QUES: "?" + zmk_remove_keycode_prefix: [] + zmk_keycode_map: + # Modifiers + LCTRL: $$mdi:apple-keyboard-control$$ + LALT: $$mdi:apple-keyboard-option$$ + LSHIFT: $$mdi:apple-keyboard-shift$$ + LSHFT: $$mdi:apple-keyboard-shift$$ + LCMD: $$mdi:apple-keyboard-command$$ + LGUI: $$mdi:apple-keyboard-command$$ + RCTRL: $$mdi:apple-keyboard-control$$ + RALT: $$mdi:apple-keyboard-option$$ + RSHIFT: $$mdi:apple-keyboard-shift$$ + RSHFT: $$mdi:apple-keyboard-shift$$ + RCMD: $$mdi:apple-keyboard-command$$ + RGUI: $$mdi:apple-keyboard-command$$ + + # combo + LS(LC(LALT)): $$mdi:triangle$$ # Meh + LC(SPACE): "⌃⎵" + RC(RS(TAB)): "⌃⇧⇥" + RC(TAB): "⌃⇥" + LG(LS(J)): "⌘⇧J" + LG(LSHFT): "⌘⇧" + LG(LA(SPACE)): "⌘⌥⎵" + LOWER: "⤓" + RAISE: "⤒" + + # Arrows + UP: $$mdi:arrow-up-bold$$ + DOWN: $$mdi:arrow-down-bold$$ + LEFT: $$mdi:arrow-left-bold$$ + RIGHT: $$mdi:arrow-right-bold$$ + PG_UP: $$mdi:transfer-up$$ + PG_DN: $$mdi:transfer-down$$ + + ESC: $$mdi:keyboard-esc$$ + TAB: $$mdi:keyboard-tab$$ + SPACE: $$mdi:keyboard-space$$ + BSPC: $$mdi:backspace$$ + RET: $$mdi:keyboard-return$$ + DEL: $$mdi:backspace-reverse-outline$$ + DELETE: $$mdi:backspace-reverse-outline$$ + INS: Insert + HOME: Home + END: End + CAPS: Caps Lock + PSCRN: Print Scrn + PAUSE_BREAK: Pause Break + + # Media + C_NEXT: $$mdi:skip-next$$ + C_PREV: $$mdi:skip-previous$$ + C_PP: $$mdi:play-pause$$ + + # Sound + C_MUTE: $$mdi:volume-off$$ + C_VOL_UP: $$mdi:volume-high$$ + C_VOL_DN: $$mdi:volume-low$$ + + # Bluetooth + BT_CLR: $$mdi:bluetooth-off$$ + BT_SEL: $$mdi:bluetooth-connect$$ + + # Symbols + AMPS: "&" + AMPERSAND: "&" + APOS: "'" + APOSTROPHE: "'" + ASTERISK: "*" + ASTRK: "*" + AT: "@" + AT_SIGN: "@" + BACKSLASH: \ + BSLH: \ + CARET: ^ + COLON: ":" + COMMA: "," + DLLR: $ + DOLLAR: $ + DOT: . + DOUBLE_QUOTES: '"' + DQT: '"' + EQUAL: "=" + EXCL: "!" + EXCLAMATION: "!" + FSLH: / + GRAVE: "`" + GREATER_THAN: ">" + GT: ">" + HASH: "#" + LBKT: "[" + LBRC: "{" + LEFT_BRACE: "{" + LEFT_BRACKET: "[" + LEFT_PARENTHESIS: ( + LESS_THAN: < + LPAR: ( + LT: < + MINUS: "-" + NON_US_BACKSLASH: \ + NON_US_BSLH: "|" + NON_US_HASH: "#" + NUHS: "#" + PERCENT: "%" + PERIOD: . + PIPE: "|" + PIPE2: "|" + PLUS: + + POUND: "#" + PRCNT: "%" + QMARK: "?" + QUESTION: "?" + RBKT: "]" + RBRC: "}" + RIGHT_BRACE: "}" + RIGHT_BRACKET: "]" + RIGHT_PARENTHESIS: ) + RPAR: ) + SEMI: ; + SEMICOLON: ; + SINGLE_QUOTE: "'" + SLASH: / + SQT: "'" + STAR: "*" + TILDE: "~" + TILDE2: "~" + UNDER: _ + UNDERSCORE: _ + zmk_combos: + combo_tab: + draw_separate: true + combo_del: + draw_separate: true + combo_f12: + align: bottom + combo_btclr: + align: bottom + combo_play: + align: right + combo_capswd: + draw_separate: true + combo_semi: + draw_separate: true + combo_grave: + draw_separate: true + combo_lpar: + draw_separate: true + combo_rpar: + draw_separate: true + combo_lbkt: + draw_separate: true + combo_rbkt: + draw_separate: true + combo_esc: + draw_separate: true + combo_ret: + draw_separate: true + combo_lock: + draw_separate: true + combo_bslh: + draw_separate: true + combo_slsh: + draw_separate: true + zmk_preamble: "#define KEYMAP_DRAWER" + zmk_additional_includes: [] \ No newline at end of file From 623d846f9510210de59415b040efe1690d6fae70 Mon Sep 17 00:00:00 2001 From: Alexey Date: Sat, 25 Oct 2025 23:37:07 +0300 Subject: [PATCH 03/12] Create .gitkeep --- boards/shields/.gitkeep | 1 + 1 file changed, 1 insertion(+) create mode 100644 boards/shields/.gitkeep diff --git a/boards/shields/.gitkeep b/boards/shields/.gitkeep new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/boards/shields/.gitkeep @@ -0,0 +1 @@ + From 75ec8d1530edd7af34b7b34be6f64da96788a33c Mon Sep 17 00:00:00 2001 From: Padrecc <8349310+Padrecc@users.noreply.github.com> Date: Sat, 25 Oct 2025 23:41:46 +0300 Subject: [PATCH 04/12] Create module.yml --- images/corne.svg | 1196 +++++++++++++++++++++++++++++++++++++++++++++ images/corne.yaml | 264 ++++++++++ zephyr/module.yml | 3 + 3 files changed, 1463 insertions(+) create mode 100644 images/corne.svg create mode 100644 images/corne.yaml create mode 100644 zephyr/module.yml diff --git a/images/corne.svg b/images/corne.svg new file mode 100644 index 0000000..dc1c8cc --- /dev/null +++ b/images/corne.svg @@ -0,0 +1,1196 @@ + + + +Base: + + + +TAB + + + +Q + + + +W + + + +E + + + +R + + + +T + + + +Y + + + +U + + + +I + + + +O + + + +P + + + +BSPC + + + + +Nav + + + +A +LEFT WIN + + + +S +LEFT ALT + + + +D +LCTRL + + + +F +LEFT SHIFT + + + +G + + + +H + + + +J +RIGHT SHIFT + + + +K +RCTRL + + + +L +RIGHT ALT + + + +; +RWIN + + + +' + + + +LCTRL + + + +Z + + + +X + + + +C + + + +V + + + +B + + + +N + + + +M + + + +, + + + +. + + + +/ + + + + +Gui+SPACE + + + + +ESCAPE + +Fn + + + +SPACE + +Num + + + +ENTER + + + +SPACE +LEFT SHIFT + + + +SPACE + +Num + + + +ESCAPE + +Fn + + + + + +? + + + + +Num: + + + +` + + + +1 + + + +2 + + + +3 + + + +4 + + + +5 + + + +6 + + + +7 + + + +8 + + + +9 + + + +0 + + + +BSPC + + + + + + + +LWIN + + + + +LEFTALT + + + + +LCTRL + + + +LSHFT + + + + + + + + + + + +RSHFT + + + +RCTRL + + + + +RIGHTALT + + + + +RWIN + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Nav: + + + + + + + + + + + + + + + + + + + + + + + +PGUP + + + + +BACKSPACE + + + +UP + + + +[ + + + +] + + + +\ + + + + + + + +LEFTWIN + + + + +LALT + + + +LCTRL + + + +LSHFT + + + + + + + +PAGEDOWN + + + + +LEFT + + + +DOWN + + + +RIGHT + + + +- + + + += + + + + + + + + + + + + + + + + + + + + + + +HOME + + + +END + + + +INSERT + + + +DELETE + + + +? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Fn: + + + +TAB + + + +F1 + + + +F2 + + + +F3 + + + +F4 + + + +F5 + + + +F6 + + + +F7 + + + +F8 + + + +F9 + + + +F10 + + + +F11 + + + + + + + +LWIN + + + + +LEFTALT + + + + +LCTRL + + + +LSHFT + + + + +OUTTOG + + + + + +VOLUP + + + + +RSHFT + + + +RCTRL + + + + +RIGHTALT + + + + +RWIN + + + +F12 + + + + + + + +BT +0 + + + +BT +1 + + + +BT +2 + + + +BT +3 + + + +&bt_clr_3_… + + + + +VOLDN + + + + +MUTE + + + + + + + + + + + + +CAPS + + + + + + + + + + + + + + + + + + + + + + + + + + + +Sys: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Extra: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/corne.yaml b/images/corne.yaml new file mode 100644 index 0000000..5c92bac --- /dev/null +++ b/images/corne.yaml @@ -0,0 +1,264 @@ +layout: {zmk_keyboard: corne} +layers: + Base: + - TAB + - Q + - W + - E + - R + - T + - Y + - U + - I + - O + - P + - BSPC + - Nav + - {t: A, h: LEFT WIN} + - {t: S, h: LEFT ALT} + - {t: D, h: LCTRL} + - {t: F, h: LEFT SHIFT} + - G + - H + - {t: J, h: RIGHT SHIFT} + - {t: K, h: RCTRL} + - {t: L, h: RIGHT ALT} + - {t: ;, h: RWIN} + - '''' + - LCTRL + - Z + - X + - C + - V + - B + - N + - M + - ',' + - . + - / + - Gui+SPACE + - {t: ESCAPE, h: Fn} + - {t: SPACE, h: Num} + - ENTER + - {t: SPACE, h: LEFT SHIFT} + - {t: SPACE, h: Num} + - {t: ESCAPE, h: Fn} + Num: + - '`' + - '1' + - '2' + - '3' + - '4' + - '5' + - '6' + - '7' + - '8' + - '9' + - '0' + - BSPC + - {t: ▽, type: trans} + - LWIN + - LEFT ALT + - LCTRL + - LSHFT + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - RSHFT + - RCTRL + - RIGHT ALT + - RWIN + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {type: held} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + Nav: + - {t: ▽, type: trans} + - '' + - '' + - '' + - '' + - '' + - PG UP + - BACKSPACE + - UP + - '[' + - ']' + - \ + - {type: held} + - LEFT WIN + - LALT + - LCTRL + - LSHFT + - '' + - PAGE DOWN + - LEFT + - DOWN + - RIGHT + - '-' + - '=' + - {t: ▽, type: trans} + - '' + - '' + - '' + - '' + - '' + - HOME + - END + - INSERT + - DELETE + - '?' + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + Fn: + - TAB + - F1 + - F2 + - F3 + - F4 + - F5 + - F6 + - F7 + - F8 + - F9 + - F10 + - F11 + - {t: ▽, type: trans} + - LWIN + - LEFT ALT + - LCTRL + - LSHFT + - OUT TOG + - VOL UP + - RSHFT + - RCTRL + - RIGHT ALT + - RWIN + - F12 + - {t: ▽, type: trans} + - {t: BT, h: '0'} + - {t: BT, h: '1'} + - {t: BT, h: '2'} + - {t: BT, h: '3'} + - '&bt_clr_3_tap' + - VOL DN + - MUTE + - '' + - '' + - '' + - CAPS + - {type: held} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + Sys: + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {type: held} + - {type: held} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + Extra: + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} +combos: +- p: [16, 34] + k: '?' + l: [Base] diff --git a/zephyr/module.yml b/zephyr/module.yml new file mode 100644 index 0000000..1cc2b35 --- /dev/null +++ b/zephyr/module.yml @@ -0,0 +1,3 @@ +build: + settings: + board_root: . From 8b05c14a3c9cda273444801f476bee6916d87ba8 Mon Sep 17 00:00:00 2001 From: Alexey Date: Mon, 27 Oct 2025 18:00:04 +0300 Subject: [PATCH 05/12] Update build.yaml --- build.yaml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/build.yaml b/build.yaml index 30dd0dd..645f7cb 100644 --- a/build.yaml +++ b/build.yaml @@ -17,15 +17,25 @@ include: shield: corne_dongle snippet: studio-rpc-usb-uart cmake-args: -DCONFIG_ZMK_SPLIT_ROLE_CENTRAL=y -DCONFIG_ZMK_STUDIO=y -DCONFIG_ZMK_STUDIO_LOCKING=n + artifact-name: typeractive_nn_dongle - board: nice_nano_v2 shield: corne_left nice_view_adapter nice_view cmake-args: -DCONFIG_ZMK_SPLIT_ROLE_CENTRAL=n snippet: studio-rpc-usb-uart + artifact-name: typeractive_slave_left + + - board: nice_nano_v2 + shield: corne_left nice_view_adapter nice_view + cmake-args: -DCONFIG_ZMK_SPLIT_ROLE_CENTRAL=y + snippet: studio-rpc-usb-uart + artifact-name: typeractive_master_left - board: nice_nano_v2 shield: corne_right nice_view_adapter nice_view cmake-args: -DCONFIG_ZMK_SPLIT_ROLE_CENTRAL=n + artifact-name: typeractive_slave_right - board: nice_nano_v2 shield: settings_reset + artifact-name: typeractive_nn_settings_reset From 895e0d60574ed1799335c50879963a9047d754ee Mon Sep 17 00:00:00 2001 From: Alexey Date: Mon, 27 Oct 2025 18:03:14 +0300 Subject: [PATCH 06/12] Create README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..59107ea --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +## Keymaps + +![keymaps](https://github.com/Padrecc/typeractive/blob/dongle/images/corne.svg) From 504f8aca6c39627ebd475a6b2a1138f7fdd5dcf2 Mon Sep 17 00:00:00 2001 From: Alexey Date: Mon, 27 Oct 2025 18:29:28 +0300 Subject: [PATCH 07/12] Update config.keymap-drawer.yaml --- images/config.keymap-drawer.yaml | 611 ++++++------------------------- 1 file changed, 113 insertions(+), 498 deletions(-) diff --git a/images/config.keymap-drawer.yaml b/images/config.keymap-drawer.yaml index 31d9804..991d176 100644 --- a/images/config.keymap-drawer.yaml +++ b/images/config.keymap-drawer.yaml @@ -1,5 +1,3 @@ -# config from: https://github.com/mctechnology17/zmk-config/blob/main/config/config_keymap-drawer.yaml - draw_config: key_w: 60 key_h: 56 @@ -14,7 +12,7 @@ draw_config: combo_diagrams_scale: 2 inner_pad_w: 2.0 inner_pad_h: 2.0 - outer_pad_w: 40.0 + outer_pad_w: 30.0 outer_pad_h: 56.0 line_spacing: 1.2 arc_radius: 6.0 @@ -30,305 +28,18 @@ draw_config: rel_h: 12.0 rx: 4.0 ry: 4.0 - svg_extra_style: | - /* For default sytles, see https://github.com/caksoylar/keymap-drawer/blob/main/keymap_drawer/config.py#L85 */ - - svg.keymap { - font-family: Ubuntu Mono, Inconsolata, Consolas, Liberation Mono, Menlo, monospace; - font-size: 16px; - font-weight: bold; - text-rendering: optimizeLegibility; - } - - /* Color accent for held keys - red = #f00 - green = #0f0 - blue = #00f - yellow = #ff0 - cyan = #0ff - magenta = #f0f - white = #fff - black = #000 - grey = #888 - light grey = #ccc - #ffc - */ - rect.held, rect.combo.held { - fill: #f00; - } - - /* Technique borrowed and extended from https://github.com/englmaxi/zmk-config/blob/master/keymap-drawer/config.yaml */ - .sym_sub_text.tap { - translate: -5px 2px; - font-size: 20px; - } - .sym_sub_text.shifted { - translate: 10px 13px; - font-size: 10px; - opacity: 1.0; - } - .combo.sym_sub_text.tap { - translate: -1px 1px; - } - .combo.sym_sub_text.shifted { - translate: 7px 5px; - font-size: 10px; - opacity: 1.0; - } - - /* Toggle */ - .toggle.shifted { - translate: -10px 12px; - } - - .toggle.hold { - translate: 13px -23px; - } - - /* Variant for tap-dances */ - .tap_dance.tap { - translate: -7px 0px; - font-size: 12px; - } - .tap_dance.shifted { - translate: 7px 17px; - font-size: 12px; - opacity: 1.0; - } - - /* Variant for symbol next to symbol */ - .sym_by_sym.tap { - translate: -6px 0px; - } - .sym_by_sym.shifted { - translate: 10px 12px; - opacity: 1.0; - } - - .combo.sym_by_sym.tap { - translate: -35px 0px; - } - .combo.sym_by_sym.shifted { - translate: 35px 20px; - opacity: 1.0; - } - - .combo.sym_by_sym.hold { - visibility: hidden; - } - - /* hide hold box for combo sym_by_sym */ - .combo.sym_by_sym.hold > path[stroke="none"][fill="none"] { - visibility: hidden; - } - footer_text: 'Keymap View: keymap-drawer' - shrink_wide_legends: 6 + svg_extra_style: '' + footer_text: Created with keymap-drawer + shrink_wide_legends: 7 style_layer_activators: true - glyph_tap_size: 18 - glyph_hold_size: 15 - glyph_shifted_size: 15 + glyph_tap_size: 14 + glyph_hold_size: 12 + glyph_shifted_size: 10 glyphs: {} parse_config: preprocess: true skip_binding_parsing: false - raw_binding_map: - "&sys_reset": Reset - "&bootloader": Boot - "&swapper": Win Next - "&caps_word": Caps Word - "&inv_qm": ¿ - "&kp LC(LG(LEFT))": Desk Left - "&kp LC(LG(RIGHT))": Desk Right - "&kp LC(TAB)": Tab Right - "&kp LC(LS(TAB))": Tab Left - "&kp LA(F4)": Win Close - "&kp LC(F4)": Tab Close - "&kp LS(TAB)": Win Prev - "&kp LS(INS)": Paste - "&kp LG(L)": Lock - "&out OUT_USB": Out USB - "&out OUT_BLE": Out BLE - "&bt BT_SEL 0": BT 1 - "&bt BT_SEL 1": BT 2 - "&bt BT_SEL 2": BT 3 - "&bt BT_SEL 3": BT 4 - "&bt BT_SEL 4": BT 5 - DISPLAY_UP: - t: $$mdi:television-classic$$ - h: $$mdi:arrow-up$$ - type: tap_dance - DISPLAY_DOWN: - t: $$mdi:television-classic$$ - h: $$mdi:arrow-down$$ - type: tap_dance - DISPLAY_LEFT: - t: $$mdi:television-classic$$ - h: $$mdi:arrow-left$$ - type: tap_dance - DISPLAY_RIGHT: - t: $$mdi:television-classic$$ - h: $$mdi:arrow-right$$ - type: tap_dance - DISPLAY_SPACE: - t: $$mdi:television-classic$$ - h: $$mdi:keyboard-space$$ - type: tap_dance - "&rgb_ug RGB_TOG": - t: $$mdi:led-on$$ - h: $$mdi:toggle-switch$$ - s: $$mdi:led-outline$$ - type: toggle - "&rgb_ug RGB_VAI": - t: $$mdi:led-on$$ - s: $$tabler:brightness-up$$ - type: sym_by_sym - "&rgb_ug RGB_VAD": - t: $$mdi:led-outline$$ - s: $$tabler:brightness-down$$ - type: sym_by_sym - "&rgb_ug RGB_BRD": - t: $$mdi:led-on$$ - s: $$tabler:brightness-up$$ - type: sym_by_sym - "&rgb_ug RGB_BRI": - t: $$mdi:led-outline$$ - s: $$tabler:brightness-down$$ - type: sym_by_sym - "&rgb_ug RGB_SAI": - t: $$mdi:led-outline$$ - s: $$mdi:eyedropper$$ - type: sym_by_sym - "&rgb_ug RGB_SAD": - t: $$mdi:led-on$$ - s: $$mdi:eyedropper$$ - type: sym_by_sym - "&rgb_ug RGB_HUI": - t: $$mdi:led-on$$ - s: $$mdi:palette$$ - type: sym_by_sym - "&rgb_ug RGB_HUD": - t: $$mdi:led-outline$$ - s: $$mdi:palette$$ - type: sym_by_sym - "&rgb_ug RGB_RMOD": - t: $$mdi:led-on$$ - h: $$mdi:page-previous-outline$$ - type: tap_dance - "&rgb_ug RGB_MOD": - t: $$mdi:led-on$$ - h: $$mdi:page-next-outline$$ - type: tap_dance - "&rgb_ug RGB_EFF": - t: $$mdi:led-on$$ - h: $$mdi:page-previous-outline$$ - type: tap_dance - "&rgb_ug RGB_EFR": - t: $$mdi:led-on$$ - h: $$mdi:page-next-outline$$ - type: tap_dance - "&rgb_ug RGB_SPI": - t: $$mdi:led-on$$ - h: $$mdi:speedometer$$ - type: sym_by_sym - "&rgb_ug RGB_SPD": - t: $$mdi:led-on$$ - h: $$mdi:speedometer-slow$$ - type: sym_by_sym - "&rgb_ug RGB_UP": - t: $$mdi:led-on$$ - h: $$mdi:arrow-up$$ - type: tap_dance - "&rgb_ug RGB_DOWN": - t: $$mdi:led-on$$ - h: $$mdi:arrow-down$$ - type: tap_dance - "&rgb_ug RGB_LEFT": - t: $$mdi:led-on$$ - h: $$mdi:arrow-left$$ - type: tap_dance - "&rgb_ug RGB_RIGHT": - t: $$mdi:led-on$$ - h: $$mdi:arrow-right$$ - type: tap_dance - "&rgb_ug RGB_SPACE": - t: $$mdi:led-on$$ - h: $$mdi:keyboard-space$$ - type: tap_dance - "&rgb_ug RGB_COLOR_HSB(0,0,100)": - t: $$mdi:led-on$$ - h: $$mdi:palette$$ - type: tap_dance - "&rgb_ug RGB_COLOR_HSB(224,100,100)": - t: $$mdi:led-on$$ - h: $$mdi:palette$$ - type: tap_dance - U_WH_L: - t: $$mdi:mouse-outline$$ - h: $$mdi:arrow-left$$ - type: tap_dance - U_WH_R: - t: $$mdi:mouse-outline$$ - h: $$mdi:arrow-right$$ - type: tap_dance - U_WH_U: - t: $$mdi:mouse-outline$$ - h: $$mdi:arrow-up$$ - type: tap_dance - U_WH_D: - t: $$mdi:mouse-outline$$ - h: $$mdi:arrow-down$$ - type: tap_dance - U_MS_L: - t: $$mdi:mouse$$ - h: $$mdi:arrow-left$$ - type: tap_dance - U_MS_D: - t: $$mdi:mouse$$ - h: $$mdi:arrow-down$$ - type: tap_dance - U_MS_R: - t: $$mdi:mouse$$ - h: $$mdi:arrow-right$$ - type: tap_dance - U_MS_U: - t: $$mdi:mouse$$ - h: $$mdi:arrow-up$$ - type: tap_dance - CLICK_LEFT: $$mdi:cursor-default-click$$ - CLICK_RIGHT: $$mdi:cursor-default-click-outline$$ - CLICK_MIDDLE: $$mdi:cursor-default-click-outline$$ - MEDIA_ESC: - t: $$mdi:keyboard-esc$$ - h: $$mdi:music-note$$ - MOUSE_TAB: - t: $$mdi:keyboard-tab$$ - h: $$mdi:mouse$$ - NUMBER_SPACE: - t: $$mdi:keyboard-space$$ - h: $$mdi:numeric$$ - "&mo _FUNCTION": $$mdi:function-variant$$ - "&mo _CONFIG": $$mdi:cog$$ - "&mo _LOCK": $$mdi:lock$$ - "&mo _SYMBOL": $$mdi:symbol$$ - "&mo _DISPLAY": $$mdi:television-classic$$ - "&mo _OLED": $$mdi:television-classic$$ - "&mo _LINUX": $$mdi:linux$$ - "&mo _RGB": $$mdi:led-on$$ - DE_CAPS: $$mdi:keyboard-caps$$ - TAB: $$mdi:keyboard-tab$$ - "&mt LSHFT COMMA": - t: $$mdi:google-downasaur$$ - h: $$mdi:apple-keyboard-shift$$ - type: tap_dance - "&kp LSHFT": $$mdi:apple-keyboard-shift$$ - "&kp LCTRL": $$mdi:apple-keyboard-control$$ - "&kp RCTRL": $$mdi:apple-keyboard-control$$ - "&kp LGUI": $$mdi:apple-keyboard-command$$ - "&kp RGUI": $$mdi:apple-keyboard-command$$ - "&kp LALT": $$mdi:apple-keyboard-option$$ - "&kp RALT": $$mdi:apple-keyboard-option$$ - "&kp RSHFT": $$mdi:apple-keyboard-shift$$ - "&kp BSPC": $$mdi:backspace-outline$$ + raw_binding_map: {} sticky_label: sticky toggle_label: toggle tap_toggle_label: tap-toggle @@ -346,55 +57,55 @@ parse_config: right_alt: AltGr left_gui: Gui right_gui: Gui - keycode_combiner: "{mods}+{key}" - mod_combiner: "{mod_1}+{mod_2}" + keycode_combiner: '{mods}+{key}' + mod_combiner: '{mod_1}+{mod_2}' special_combinations: left_ctrl+left_alt+left_gui+left_shift: Hyper left_ctrl+left_alt+left_shift: Meh qmk_remove_keycode_prefix: - - KC_ + - KC_ qmk_keycode_map: - XXXXXXX: "" - "NO": "" - MINUS: "-" - MINS: "-" - EQUAL: "=" - EQL: "=" - LEFT_BRACKET: "[" - LBRC: "[" - RIGHT_BRACKET: "]" - RBRC: "]" + XXXXXXX: '' + 'NO': '' + MINUS: '-' + MINS: '-' + EQUAL: '=' + EQL: '=' + LEFT_BRACKET: '[' + LBRC: '[' + RIGHT_BRACKET: ']' + RBRC: ']' BACKSLASH: \ BSLS: \ - NONUS_HASH: "#" - NUHS: "#" + NONUS_HASH: '#' + NUHS: '#' SEMICOLON: ; SCLN: ; - QUOTE: "'" - QUOT: "'" - GRAVE: "`" - GRV: "`" - COMMA: "," - COMM: "," + QUOTE: '''' + QUOT: '''' + GRAVE: '`' + GRV: '`' + COMMA: ',' + COMM: ',' DOT: . SLASH: / SLSH: / - TILDE: "~" - TILD: "~" - EXCLAIM: "!" - EXLM: "!" - AT: "@" - HASH: "#" + TILDE: '~' + TILD: '~' + EXCLAIM: '!' + EXLM: '!' + AT: '@' + HASH: '#' DOLLAR: $ DLR: $ - PERCENT: "%" - PERC: "%" + PERCENT: '%' + PERC: '%' CIRCUMFLEX: ^ CIRC: ^ - AMPERSAND: "&" - AMPR: "&" - ASTERISK: "*" - ASTR: "*" + AMPERSAND: '&' + AMPR: '&' + ASTERISK: '*' + ASTR: '*' LEFT_PAREN: ( LPRN: ( RIGHT_PAREN: ) @@ -402,186 +113,90 @@ parse_config: UNDERSCORE: _ UNDS: _ PLUS: + - LEFT_CURLY_BRACE: "{" - LCBR: "{" - RIGHT_CURLY_BRACE: "}" - RCBR: "}" - PIPE: "|" - COLON: ":" - COLN: ":" + LEFT_CURLY_BRACE: '{' + LCBR: '{' + RIGHT_CURLY_BRACE: '}' + RCBR: '}' + PIPE: '|' + COLON: ':' + COLN: ':' DOUBLE_QUOTE: '"' DQUO: '"' DQT: '"' LEFT_ANGLE_BRACKET: < LABK: < LT: < - RIGHT_ANGLE_BRACKET: ">" - RABK: ">" - GT: ">" - QUESTION: "?" - QUES: "?" + RIGHT_ANGLE_BRACKET: '>' + RABK: '>' + GT: '>' + QUESTION: '?' + QUES: '?' zmk_remove_keycode_prefix: [] zmk_keycode_map: - # Modifiers - LCTRL: $$mdi:apple-keyboard-control$$ - LALT: $$mdi:apple-keyboard-option$$ - LSHIFT: $$mdi:apple-keyboard-shift$$ - LSHFT: $$mdi:apple-keyboard-shift$$ - LCMD: $$mdi:apple-keyboard-command$$ - LGUI: $$mdi:apple-keyboard-command$$ - RCTRL: $$mdi:apple-keyboard-control$$ - RALT: $$mdi:apple-keyboard-option$$ - RSHIFT: $$mdi:apple-keyboard-shift$$ - RSHFT: $$mdi:apple-keyboard-shift$$ - RCMD: $$mdi:apple-keyboard-command$$ - RGUI: $$mdi:apple-keyboard-command$$ - - # combo - LS(LC(LALT)): $$mdi:triangle$$ # Meh - LC(SPACE): "⌃⎵" - RC(RS(TAB)): "⌃⇧⇥" - RC(TAB): "⌃⇥" - LG(LS(J)): "⌘⇧J" - LG(LSHFT): "⌘⇧" - LG(LA(SPACE)): "⌘⌥⎵" - LOWER: "⤓" - RAISE: "⤒" - - # Arrows - UP: $$mdi:arrow-up-bold$$ - DOWN: $$mdi:arrow-down-bold$$ - LEFT: $$mdi:arrow-left-bold$$ - RIGHT: $$mdi:arrow-right-bold$$ - PG_UP: $$mdi:transfer-up$$ - PG_DN: $$mdi:transfer-down$$ - - ESC: $$mdi:keyboard-esc$$ - TAB: $$mdi:keyboard-tab$$ - SPACE: $$mdi:keyboard-space$$ - BSPC: $$mdi:backspace$$ - RET: $$mdi:keyboard-return$$ - DEL: $$mdi:backspace-reverse-outline$$ - DELETE: $$mdi:backspace-reverse-outline$$ - INS: Insert - HOME: Home - END: End - CAPS: Caps Lock - PSCRN: Print Scrn - PAUSE_BREAK: Pause Break - - # Media - C_NEXT: $$mdi:skip-next$$ - C_PREV: $$mdi:skip-previous$$ - C_PP: $$mdi:play-pause$$ - - # Sound - C_MUTE: $$mdi:volume-off$$ - C_VOL_UP: $$mdi:volume-high$$ - C_VOL_DN: $$mdi:volume-low$$ - - # Bluetooth - BT_CLR: $$mdi:bluetooth-off$$ - BT_SEL: $$mdi:bluetooth-connect$$ - - # Symbols - AMPS: "&" - AMPERSAND: "&" - APOS: "'" - APOSTROPHE: "'" - ASTERISK: "*" - ASTRK: "*" - AT: "@" - AT_SIGN: "@" + EXCLAMATION: '!' + EXCL: '!' + AT_SIGN: '@' + AT: '@' + HASH: '#' + POUND: '#' + DOLLAR: $ + DLLR: $ + PERCENT: '%' + PRCNT: '%' + CARET: ^ + AMPERSAND: '&' + AMPS: '&' + ASTERISK: '*' + ASTRK: '*' + STAR: '*' + LEFT_PARENTHESIS: ( + LPAR: ( + RIGHT_PARENTHESIS: ) + RPAR: ) + EQUAL: '=' + PLUS: + + MINUS: '-' + UNDERSCORE: _ + UNDER: _ + SLASH: / + FSLH: / + QUESTION: '?' + QMARK: '?' BACKSLASH: \ BSLH: \ - CARET: ^ - COLON: ":" - COMMA: "," - DLLR: $ - DOLLAR: $ - DOT: . + PIPE: '|' + NON_US_BACKSLASH: \ + PIPE2: '|' + NON_US_BSLH: '|' + SEMICOLON: ; + SEMI: ; + COLON: ':' + SINGLE_QUOTE: '''' + SQT: '''' + APOSTROPHE: '''' + APOS: '''' DOUBLE_QUOTES: '"' DQT: '"' - EQUAL: "=" - EXCL: "!" - EXCLAMATION: "!" - FSLH: / - GRAVE: "`" - GREATER_THAN: ">" - GT: ">" - HASH: "#" - LBKT: "[" - LBRC: "{" - LEFT_BRACE: "{" - LEFT_BRACKET: "[" - LEFT_PARENTHESIS: ( + COMMA: ',' LESS_THAN: < - LPAR: ( LT: < - MINUS: "-" - NON_US_BACKSLASH: \ - NON_US_BSLH: "|" - NON_US_HASH: "#" - NUHS: "#" - PERCENT: "%" PERIOD: . - PIPE: "|" - PIPE2: "|" - PLUS: + - POUND: "#" - PRCNT: "%" - QMARK: "?" - QUESTION: "?" - RBKT: "]" - RBRC: "}" - RIGHT_BRACE: "}" - RIGHT_BRACKET: "]" - RIGHT_PARENTHESIS: ) - RPAR: ) - SEMI: ; - SEMICOLON: ; - SINGLE_QUOTE: "'" - SLASH: / - SQT: "'" - STAR: "*" - TILDE: "~" - TILDE2: "~" - UNDER: _ - UNDERSCORE: _ - zmk_combos: - combo_tab: - draw_separate: true - combo_del: - draw_separate: true - combo_f12: - align: bottom - combo_btclr: - align: bottom - combo_play: - align: right - combo_capswd: - draw_separate: true - combo_semi: - draw_separate: true - combo_grave: - draw_separate: true - combo_lpar: - draw_separate: true - combo_rpar: - draw_separate: true - combo_lbkt: - draw_separate: true - combo_rbkt: - draw_separate: true - combo_esc: - draw_separate: true - combo_ret: - draw_separate: true - combo_lock: - draw_separate: true - combo_bslh: - draw_separate: true - combo_slsh: - draw_separate: true - zmk_preamble: "#define KEYMAP_DRAWER" - zmk_additional_includes: [] \ No newline at end of file + DOT: . + GREATER_THAN: '>' + GT: '>' + LEFT_BRACKET: '[' + LBKT: '[' + LEFT_BRACE: '{' + LBRC: '{' + RIGHT_BRACKET: ']' + RBKT: ']' + RIGHT_BRACE: '}' + RBRC: '}' + GRAVE: '`' + TILDE: '~' + NON_US_HASH: '#' + NUHS: '#' + TILDE2: '~' + zmk_combos: {} + zmk_preamble: '#define KEYMAP_DRAWER' + zmk_additional_includes: [] From 8859376e341d227118ac088bdbf700108ce0b435 Mon Sep 17 00:00:00 2001 From: Alexey Date: Mon, 27 Oct 2025 18:33:17 +0300 Subject: [PATCH 08/12] Create readme.md --- images/readme.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 images/readme.md diff --git a/images/readme.md b/images/readme.md new file mode 100644 index 0000000..28c62b5 --- /dev/null +++ b/images/readme.md @@ -0,0 +1,3 @@ +- Keymap Drawer: https://github.com/caksoylar/keymap-drawer +- Config app: https://keymap-drawer.streamlit.app/ + From c842cfc73d46a0533fa197a3c1d00fa0248690a9 Mon Sep 17 00:00:00 2001 From: Alexey Date: Mon, 27 Oct 2025 18:36:54 +0300 Subject: [PATCH 09/12] Update corne.yaml From 67930b6d8981d4d2f6e2915d8e07855699515a42 Mon Sep 17 00:00:00 2001 From: Alexey Date: Mon, 27 Oct 2025 18:41:45 +0300 Subject: [PATCH 10/12] Update config.keymap-drawer.yaml --- images/config.keymap-drawer.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/images/config.keymap-drawer.yaml b/images/config.keymap-drawer.yaml index 991d176..763d196 100644 --- a/images/config.keymap-drawer.yaml +++ b/images/config.keymap-drawer.yaml @@ -6,7 +6,7 @@ draw_config: combo_h: 26 key_rx: 6.0 key_ry: 6.0 - dark_mode: true + dark_mode: auto n_columns: 1 separate_combo_diagrams: false combo_diagrams_scale: 2 From b20029e9540431b7e32dbea482d563b9898acc70 Mon Sep 17 00:00:00 2001 From: Alexey Date: Mon, 27 Oct 2025 18:53:26 +0300 Subject: [PATCH 11/12] Delete images/corne.svg --- images/corne.svg | 1196 ---------------------------------------------- 1 file changed, 1196 deletions(-) delete mode 100644 images/corne.svg diff --git a/images/corne.svg b/images/corne.svg deleted file mode 100644 index dc1c8cc..0000000 --- a/images/corne.svg +++ /dev/null @@ -1,1196 +0,0 @@ - - - -Base: - - - -TAB - - - -Q - - - -W - - - -E - - - -R - - - -T - - - -Y - - - -U - - - -I - - - -O - - - -P - - - -BSPC - - - - -Nav - - - -A -LEFT WIN - - - -S -LEFT ALT - - - -D -LCTRL - - - -F -LEFT SHIFT - - - -G - - - -H - - - -J -RIGHT SHIFT - - - -K -RCTRL - - - -L -RIGHT ALT - - - -; -RWIN - - - -' - - - -LCTRL - - - -Z - - - -X - - - -C - - - -V - - - -B - - - -N - - - -M - - - -, - - - -. - - - -/ - - - - -Gui+SPACE - - - - -ESCAPE - -Fn - - - -SPACE - -Num - - - -ENTER - - - -SPACE -LEFT SHIFT - - - -SPACE - -Num - - - -ESCAPE - -Fn - - - - - -? - - - - -Num: - - - -` - - - -1 - - - -2 - - - -3 - - - -4 - - - -5 - - - -6 - - - -7 - - - -8 - - - -9 - - - -0 - - - -BSPC - - - - - - - -LWIN - - - - -LEFTALT - - - - -LCTRL - - - -LSHFT - - - - - - - - - - - -RSHFT - - - -RCTRL - - - - -RIGHTALT - - - - -RWIN - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Nav: - - - - - - - - - - - - - - - - - - - - - - - -PGUP - - - - -BACKSPACE - - - -UP - - - -[ - - - -] - - - -\ - - - - - - - -LEFTWIN - - - - -LALT - - - -LCTRL - - - -LSHFT - - - - - - - -PAGEDOWN - - - - -LEFT - - - -DOWN - - - -RIGHT - - - -- - - - -= - - - - - - - - - - - - - - - - - - - - - - -HOME - - - -END - - - -INSERT - - - -DELETE - - - -? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Fn: - - - -TAB - - - -F1 - - - -F2 - - - -F3 - - - -F4 - - - -F5 - - - -F6 - - - -F7 - - - -F8 - - - -F9 - - - -F10 - - - -F11 - - - - - - - -LWIN - - - - -LEFTALT - - - - -LCTRL - - - -LSHFT - - - - -OUTTOG - - - - - -VOLUP - - - - -RSHFT - - - -RCTRL - - - - -RIGHTALT - - - - -RWIN - - - -F12 - - - - - - - -BT -0 - - - -BT -1 - - - -BT -2 - - - -BT -3 - - - -&bt_clr_3_… - - - - -VOLDN - - - - -MUTE - - - - - - - - - - - - -CAPS - - - - - - - - - - - - - - - - - - - - - - - - - - - -Sys: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Extra: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From 78e5b508c67a9bb8f95187027ae0af05e74df1bc Mon Sep 17 00:00:00 2001 From: Padrecc <8349310+Padrecc@users.noreply.github.com> Date: Mon, 27 Oct 2025 18:57:41 +0300 Subject: [PATCH 12/12] Delete images/corne.yaml --- images/corne.svg | 1196 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1196 insertions(+) create mode 100644 images/corne.svg diff --git a/images/corne.svg b/images/corne.svg new file mode 100644 index 0000000..dc1c8cc --- /dev/null +++ b/images/corne.svg @@ -0,0 +1,1196 @@ + + + +Base: + + + +TAB + + + +Q + + + +W + + + +E + + + +R + + + +T + + + +Y + + + +U + + + +I + + + +O + + + +P + + + +BSPC + + + + +Nav + + + +A +LEFT WIN + + + +S +LEFT ALT + + + +D +LCTRL + + + +F +LEFT SHIFT + + + +G + + + +H + + + +J +RIGHT SHIFT + + + +K +RCTRL + + + +L +RIGHT ALT + + + +; +RWIN + + + +' + + + +LCTRL + + + +Z + + + +X + + + +C + + + +V + + + +B + + + +N + + + +M + + + +, + + + +. + + + +/ + + + + +Gui+SPACE + + + + +ESCAPE + +Fn + + + +SPACE + +Num + + + +ENTER + + + +SPACE +LEFT SHIFT + + + +SPACE + +Num + + + +ESCAPE + +Fn + + + + + +? + + + + +Num: + + + +` + + + +1 + + + +2 + + + +3 + + + +4 + + + +5 + + + +6 + + + +7 + + + +8 + + + +9 + + + +0 + + + +BSPC + + + + + + + +LWIN + + + + +LEFTALT + + + + +LCTRL + + + +LSHFT + + + + + + + + + + + +RSHFT + + + +RCTRL + + + + +RIGHTALT + + + + +RWIN + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Nav: + + + + + + + + + + + + + + + + + + + + + + + +PGUP + + + + +BACKSPACE + + + +UP + + + +[ + + + +] + + + +\ + + + + + + + +LEFTWIN + + + + +LALT + + + +LCTRL + + + +LSHFT + + + + + + + +PAGEDOWN + + + + +LEFT + + + +DOWN + + + +RIGHT + + + +- + + + += + + + + + + + + + + + + + + + + + + + + + + +HOME + + + +END + + + +INSERT + + + +DELETE + + + +? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Fn: + + + +TAB + + + +F1 + + + +F2 + + + +F3 + + + +F4 + + + +F5 + + + +F6 + + + +F7 + + + +F8 + + + +F9 + + + +F10 + + + +F11 + + + + + + + +LWIN + + + + +LEFTALT + + + + +LCTRL + + + +LSHFT + + + + +OUTTOG + + + + + +VOLUP + + + + +RSHFT + + + +RCTRL + + + + +RIGHTALT + + + + +RWIN + + + +F12 + + + + + + + +BT +0 + + + +BT +1 + + + +BT +2 + + + +BT +3 + + + +&bt_clr_3_… + + + + +VOLDN + + + + +MUTE + + + + + + + + + + + + +CAPS + + + + + + + + + + + + + + + + + + + + + + + + + + + +Sys: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Extra: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +