/* * Copyright (c) 2020 The ZMK Contributors * * SPDX-License-Identifier: MIT */ #include #include #include // layers definition #define DEFAULT 0 #define SYMBOLE 1 #define NAVIGATION 2 #define FUNCTION 3 /* ====== * MACROS * ====== */ / { macros { // ['] or ["] followed by a space for QWERTY intl ZMK_MACRO(apostrophe, wait-ms = <0>; tap-ms = <0>; bindings = <&kp SQT &kp SPACE>; ) // [`] or [~] followed by a space for QWERTY intl ZMK_MACRO(tilde, wait-ms = <0>; tap-ms = <0>; bindings = <&kp GRAVE &kp SPACE>; ) // [^] followed by a space for QWERTY intl ZMK_MACRO(chapeau, wait-ms = <0>; tap-ms = <0>; bindings = <&kp CARET &kp SPACE>; ) // [é] ZMK_MACRO(macroeaigumin, wait-ms = <0>; tap-ms = <0>; bindings = <&kp SQT &kp E>; ) // [É] ZMK_MACRO(macroeaigumaj, wait-ms = <40>; tap-ms = <40>; bindings = <¯o_tap &kp SQT>, <¯o_press &kp LSHFT>, <¯o_tap &kp E>, <¯o_release &kp LSHFT>; ) // [è] ZMK_MACRO(macroegravemin, wait-ms = <0>; tap-ms = <0>; bindings = <&kp GRAVE &kp E>; ) // [È] ZMK_MACRO(macroegravemaj, wait-ms = <40>; tap-ms = <40>; bindings = <¯o_tap &kp GRAVE>, <¯o_press &kp LSHFT>, <¯o_tap &kp E>, <¯o_release &kp LSHFT>; ) // [ê] ZMK_MACRO(macroecirconmin, wait-ms = <0>; tap-ms = <0>; bindings = <&kp CARET &kp E>; ) // [Ê] ZMK_MACRO(macroecirconmaj, wait-ms = <40>; tap-ms = <40>; bindings = <¯o_tap &kp CARET>, <¯o_press &kp LSHFT>, <¯o_tap &kp E>, <¯o_release &kp LSHFT>; ) // [ë] ZMK_MACRO(macronoelmin, wait-ms = <0>; tap-ms = <0>; bindings = <¯o_press &kp LSHFT>, <¯o_tap &kp SQT>, <¯o_release &kp LSHFT>, <¯o_tap &kp E>; ) // [Ë] ZMK_MACRO(macronoelmaj, wait-ms = <100>; tap-ms = <100>; bindings = <¯o_press &kp LSHFT>, <¯o_tap &kp SQT>, <¯o_tap &kp E>, <¯o_release &kp LSHFT>; ) // [ç] [Ç] ZMK_MACRO(macrocdille, wait-ms = <0>; tap-ms = <0>; bindings = <¯o_press &kp RALT>, <¯o_tap &kp COMMA>, <¯o_release &kp RALT>; ) // [à] ZMK_MACRO(macroagravmin, wait-ms = <0>; tap-ms = <0>; bindings = <&kp GRAVE &kp A>; ) // [À] ZMK_MACRO(macroagravmaj, wait-ms = <40>; tap-ms = <40>; bindings = <¯o_tap &kp GRAVE>, <¯o_press &kp LSHFT>, <¯o_tap &kp A>, <¯o_release &kp LSHFT>; ) // [â] ZMK_MACRO(macroacircmin, wait-ms = <0>; tap-ms = <0>; bindings = <&kp CARET &kp A>; ) // [Â] ZMK_MACRO(macroacircmaj, wait-ms = <40>; tap-ms = <40>; bindings = <¯o_tap &kp CARET>, <¯o_press &kp LSHFT>, <¯o_tap &kp A>, <¯o_release &kp LSHFT>; ) // [î] ZMK_MACRO(macroicircmin, wait-ms = <0>; tap-ms = <0>; bindings = <&kp CARET &kp I>; ) // [Î] ZMK_MACRO(macroicircmaj, wait-ms = <40>; tap-ms = <40>; bindings = <¯o_tap &kp CARET>, <¯o_press &kp LSHFT>, <¯o_tap &kp I>, <¯o_release &kp LSHFT>; ) // [ï] ZMK_MACRO(macroitremamin, wait-ms = <40>; tap-ms = <40>; bindings = <¯o_press &kp LSHFT>, <¯o_tap &kp SQT>, <¯o_release &kp LSHFT>, <¯o_tap &kp I>; ) // [Ï] ZMK_MACRO(macroitremamaj, wait-ms = <40>; tap-ms = <40>; bindings = <¯o_press &kp LSHFT>, <¯o_tap &kp SQT>, <¯o_tap &kp I>, <¯o_release &kp LSHFT>; ) // [ô] ZMK_MACRO(macroocircmin, wait-ms = <0>; tap-ms = <0>; bindings = <&kp CARET &kp O>; ) // [Ô] ZMK_MACRO(macroocircmaj, wait-ms = <40>; tap-ms = <40>; bindings = <¯o_tap &kp CARET>, <¯o_press &kp LSHFT>, <¯o_tap &kp O>, <¯o_release &kp LSHFT>; ) // [ù] ZMK_MACRO(macrougravemin, wait-ms = <0>; tap-ms = <0>; bindings = <&kp GRAVE &kp U>; ) // [Ù] ZMK_MACRO(macrougravemaj, wait-ms = <40>; tap-ms = <40>; bindings = <¯o_tap &kp GRAVE>, <¯o_press &kp LSHFT>, <¯o_tap &kp U>, <¯o_release &kp LSHFT>; ) // [û] ZMK_MACRO(macroucircmin, wait-ms = <0>; tap-ms = <0>; bindings = <&kp CARET &kp U>; ) // [Û] ZMK_MACRO(macroucircmaj, wait-ms = <40>; tap-ms = <40>; bindings = <¯o_tap &kp CARET>, <¯o_press &kp LSHFT>, <¯o_tap &kp U>, <¯o_release &kp LSHFT>; ) // Ctrl + Alt + Del ZMK_MACRO(macroctrlaltdel, wait-ms = <100>; tap-ms = <40>; bindings = <¯o_press &kp LCTRL>, <¯o_press &kp LALT>, <¯o_press &kp DEL>, <¯o_release &kp LCTRL>, <¯o_release &kp LALT>, <¯o_release &kp DEL>; ) }; /* ====== * MODTAP * ====== */ behaviors { // quick tap for home raw ALT with quick-tab to prevent accident activation 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>; }; // DEPRECATED : call macro apostrophe ['] and ["] or if hold call a layout gui: gui { compatible = "zmk,behavior-hold-tap"; label = "APO"; #binding-cells = <2>; flavor = "tap-preferred"; tapping-term-ms = <200>; quick-tap-ms = <125>; global-quick-tap; bindings = <&mo>, <&apostrophe>; }; /* ======== * MODMORPH * ======== */ // [:] [;] inversion column_invert: column_invert { compatible = "zmk,behavior-mod-morph"; label = "COLUMNINVERT"; #binding-cells = <0>; bindings = <&kp COLON>, <&kp SEMI>; mods = <(MOD_LSFT)>; }; // [é] [É] e_aigu: e_aigu { compatible = "zmk,behavior-mod-morph"; label = "EAIGU"; #binding-cells = <0>; bindings = <¯oeaigumin>, <¯oeaigumaj>; mods = <(MOD_LSFT)>; }; e_grave: e_grave { compatible = "zmk,behavior-mod-morph"; label = "EGRAVE"; #binding-cells = <0>; bindings = <¯oegravemin>, <¯oegravemaj>; mods = <(MOD_LSFT)>; }; e_circ: e_circ { compatible = "zmk,behavior-mod-morph"; label = "ECIRC"; #binding-cells = <0>; bindings = <¯oecirconmin>, <¯oecirconmaj>; mods = <(MOD_LSFT)>; }; noel: noel { compatible = "zmk,behavior-mod-morph"; label = "NOEL"; #binding-cells = <0>; bindings = <¯onoelmin>, <¯onoelmaj>; mods = <(MOD_LSFT)>; }; a_grave: a_grave { compatible = "zmk,behavior-mod-morph"; label = "AGRAVE"; #binding-cells = <0>; bindings = <¯oagravmin>, <¯oagravmaj>; mods = <(MOD_LSFT)>; }; a_circ: a_circ { compatible = "zmk,behavior-mod-morph"; label = "ACIRC"; #binding-cells = <0>; bindings = <¯oacircmin>, <¯oacircmaj>; mods = <(MOD_LSFT)>; }; i_circ: i_circ { compatible = "zmk,behavior-mod-morph"; label = "ICIRC"; #binding-cells = <0>; bindings = <¯oicircmin>, <¯oicircmaj>; mods = <(MOD_LSFT)>; }; i_trema: i_trema { compatible = "zmk,behavior-mod-morph"; label = "ITREMA"; #binding-cells = <0>; bindings = <¯oitremamin>, <¯oitremamaj>; mods = <(MOD_LSFT)>; }; o_circ: o_circ { compatible = "zmk,behavior-mod-morph"; label = "OCIRC"; #binding-cells = <0>; bindings = <¯oocircmin>, <¯oocircmaj>; mods = <(MOD_LSFT)>; }; u_grave: u_grave { compatible = "zmk,behavior-mod-morph"; label = "UGRAVE"; #binding-cells = <0>; bindings = <¯ougravemin>, <¯ougravemaj>; mods = <(MOD_LSFT)>; }; u_circ: u_circ { compatible = "zmk,behavior-mod-morph"; label = "UCIRC"; #binding-cells = <0>; bindings = <¯oucircmin>, <¯oucircmaj>; mods = <(MOD_LSFT)>; }; }; /* ====== * COMBOS * ====== */ combos { compatible = "zmk,combos"; combo_eaigu { timeout-ms = <30>; key-positions = <19 20>; bindings = <&e_aigu>; }; combo_egrv { timeout-ms = <30>; key-positions = <20 21>; bindings = <&e_grave>; }; combo_ecircon { timeout-ms = <40>; key-positions = <19 20 21>; bindings = <&e_circ>; }; combo_cdille { timeout-ms = <30>; key-positions = <26 27>; bindings = <¯ocdille>; }; combo_noel { timeout-ms = <30>; key-positions = <19 21>; bindings = <&noel>; }; combo_agrave { timeout-ms = <30>; key-positions = <13 14>; bindings = <&a_grave>; }; combo_acirc { timeout-ms = <40>; key-positions = <12 13 14>; bindings = <&a_circ>; }; combo_icirc { timeout-ms = <40>; key-positions = <20 21 22>; bindings = <&i_circ>; }; combo_itrema { timeout-ms = <40>; key-positions = <20 22>; bindings = <&i_trema>; }; combo_ocirc { timeout-ms = <40>; key-positions = <21 22 23>; bindings = <&o_circ>; }; combo_ugrave { timeout-ms = <30>; key-positions = <8 9>; bindings = <&u_grave>; }; combo_ucirc { timeout-ms = <40>; key-positions = <7 8 9>; bindings = <&u_circ>; }; }; }; /* ==================== * MOD TAP MODIFICATION * ==================== */ &mt { tapping-term-ms = <400>; }; /* ================= * KEYMAP DEFINITION * ================= */ / { keymap { compatible = "zmk,keymap"; DEFAULT { // ----------------------------------------------------------------------------------------- // | - _ | Q | W | F | P | B | | J | L | U | Y | :; | + = | // | TAB | A | R | S/ALT | T | G | | M | N | E | I | O | ' " | // |ESC/SHT| Z | X | C | D | V | | K | H | ,< | .> | /? | ~ ` | // |ENT/CTL| SPC | BCK | | SYM | SFT |GUI/FN| bindings = < &kp MINUS &kp Q &kp W &kp F &kp P &kp B &kp J &kp L &kp U &kp Y &column_invert &kp EQUAL &kp TAB &kp A &kp R &gqt LALT S &kp T &kp G &kp M &kp N &kp E &kp I &kp O &apostrophe &mt LSHFT ESC &kp Z &kp X &kp C &kp D &kp V &kp K &kp H &kp COMMA &kp DOT &kp FSLH &tilde &mt LCTRL RET < 2 SPACE &kp BSPC &mo 1 &kp LSHFT < 3 LGUI >; }; SYMBOLE { // ----------------------------------------------------------------------------------------- // | - _ | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | + = | // | TAB | ! | @ | # | $ | % | | € | ^ | & | * | | | | // | | ( | ) | [ | ] | | | | { | } | . | \ | | // | boot | SPC | BCK | | | NAV | boot| bindings = < &trans &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &trans &trans &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp RA(N5) &chapeau &kp AMPS &kp STAR &kp PIPE &none &none &kp LPAR &kp RPAR &kp LBKT &kp RBKT &none &none &kp LBRC &kp RBRC &kp DOT &kp BSLH &none &bootloader &kp SPACE &kp BSPC &none &mo 2 &bootloader >; }; NAVIGATION { // -------------------------------------------------------------------------------------------------------------------------- // | | Vol-| ⇧ | ↑ | ⇩ |Vol+ | | |Contr-| |Contr+| | | // | CTRLALTDEL |HOME | ← | ↓ | → | END | | | Vol- | mute| Vol+ | | | // | DEL | |CTL+←| mute|CTL+→| | | | prev | play| next | | | // | | | | | | | | bindings = < &none &kp C_VOL_DN &kp PG_UP &kp UP &kp PG_DN &kp C_VOL_UP &none &kp C_BRI_DN &none &kp C_BRI_UP &none &none ¯octrlaltdel &kp HOME &kp LEFT &kp DOWN &kp RIGHT &kp END &none &kp C_VOL_DN &kp C_MUTE &kp C_VOL_UP &none &none &kp DEL &none &kp LC(LEFT) &kp C_MUTE &kp LC(RIGHT) &none &none &kp C_PREV &kp C_PP &kp C_NEXT &none &none &none &none &none &none &none &none >; }; FUNCTION { // ----------------------------------------------------------------------------------------- // | | F1 | F2 | F3 | F4 | | | | | | | | | // | | F5 | F6 | F7 | F8 | | | | | ALT | | | GUI | // | | F9 | F10 | F11 | F12 | | | | | | | | | // | CTRL| | | | | SHFT| | bindings = < &none &kp F1 &kp F2 &kp F3 &kp F4 &none &none &none &none &none &none &none &none &kp F5 &kp F6 &kp F7 &kp F8 &none &none &none &kp LALT &none &none &kp LGUI &none &kp F9 &kp F10 &kp F11 &kp F12 &none &none &none &none &none &none &none &kp LCTRL &none &none &none &kp LSHFT &none >; }; }; }; // redefine cs-gpios because ultralignt corne from pete do not use the nice!view recommandation pin &nice_view_spi { cs-gpios = <&pro_micro 0 GPIO_ACTIVE_HIGH>; };