from kb import KMKKeyboard

from kmk.keys import KC
from kmk.modules.layers import Layers

hx20 = KMKKeyboard()

layers_ext = Layers()
hx20.modules = [layers_ext]


# Cleaner key names
_______ = KC.TRNS
XXXXXXX = KC.NO
UNDO = KC.LCTL(KC.Z)
CUT = KC.LCTL(KC.X)
COPY = KC.LCTL(KC.C)
PASTE = KC.LCTL(KC.V)
LSTRT = KC.LCTL(KC.HOME)
LEND = KC.LCTL(KC.END)
BACK = KC.LALT(KC.LEFT)
NEXT = KC.LALT(KC.RGHT)
LBSPC = KC.LCTL(KC.BSPC)
RAISE = KC.MO(1)



hx20.keymap = [
    # Qwerty
    # ,--------------------------------------------------------------------------------------------------------.
    # | PAUS | MENU | BRK |     | PF1  | PF2  | PF3  | PF4  | PF5  |            +------+------+-----+------+---|
    # |-------------------+     +------+------+------+------+------+            | NUM  | HOME | DWN | DEL  |   |
    # |-------------------------------------------------------------------------+------+-----+----+------+-----|
    # |   |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  |   _  |   [  |   ]  |  \  |   |
    # |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
    # | Tab |  q  |   w  |   e  |   r  |   t  |   y  |   u  |   i  |   o  |   p  |   @  |    <--   |   -->     |
    # |------+------+------+------+------+-------------+------+------+------+------+------+------+------+------|
    # | Ctrl |   a  |   s  |   d  |   f  |   g  |   h  |   j  |   k  |   l  |   ;  |   :  |  |  Enter  |       |
    # |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
    # |  Shift |   z  |   x  |   c  |   v  |   b  |   n  |   m  |   ,  |   .  |   /  |  Shift |  GRPH   |      |
    # |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
    # |               | CAP|                    S P A C E                          |                           |
    # `------------------------------------------------------------------------------------------+------+------'

    #    0        1          2       3       4            5         6           7
    [
        KC.N0,   KC.N8,    KC.AT,   KC.H,    KC.P,      KC.X,     KC.ENTER,   KC.HOME,
        KC.N1,   KC.N9,    KC.A,    KC.I,    KC.Q,      KC.Y,     KC.SPACE,   KC.PGUP,
        KC.N2,   KC.COLN,  KC.B,    KC.J,    KC.R,      KC.Z,     KC.TAB,     KC.BRK,
        KC.N3,   KC.SCLN,  KC.C,    KC.K,    KC.S,      KC.LBRC,  XXXXXXX,    KC.PAUS,
        KC.N4,   KC.COMMA, KC.D,    KC.L,    KC.T,      KC.RBRC,  XXXXXXX,    KC.DEL,
        KC.N5,   KC.MINS,  KC.E,    KC.M,    KC.U,      KC.BSLASH,  KC.NUMLOCK, KC.LGUI,
        KC.N6,   KC.DOT,   KC.F,    KC.N,    KC.V,      KC.RIGHT, XXXXXXX,     XXXXXXX,
        KC.N7,   KC.SLASH, KC.G,    KC.O,    KC.W,      KC.LEFT,  KC.CAPS,    XXXXXXX,
        KC.F1,   KC.F2,    KC.F3,   KC.F4,   KC.F5,     XXXXXXX,  XXXXXXX,    XXXXXXX,
        XXXXXXX, XXXXXXX,  XXXXXXX, XXXXXXX, KC.LCTRL,  RAISE, XXXXXXX,    XXXXXXX,
    ],
    # KC.LSHIFT
    # RAISE
    # ,--------------------------------------------------------------------------------------------------------.
    # | PAUS | MENU | BRK |     | PF1  | PF2  | PF3  | PF4  | PF5  |            +------+-----+----+------+-----|
    # |-------------------+     +------+------+------+------+------+            | ---  | CLR | UP | HME  |     |
    # |-------------------------------------------------------------------------+------+-----+----+------+-----|
    # |   |   !  |   "  |   #  |   $  |   %  |   &  |   '  |   (  |   )  |   -  |   =  |   {  |   }  |  |  |   |
    # |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
    # | Tab |  Q  |   W  |   E  |   R  |   T  |   Y  |   4  |   5  |   6 |   P  |   ^  |  arrw up   | arrw dn |
    # |------+------+------+------+------+-------------+------+------+------+------+------+------+------+------|
    # | Ctrl |   A  |   S  |   D  |   F  |   G  |   H  |   1  |  2  |   3  |   ;  |   :  |  |  Enter  |       |
    # |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
    # |  Shift |   Z  |   X  |   C  |   V  |   B  |   N  |   0  |   <  |   >  |   ?  |  Shift |  GRPH   |      |
    # |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
    # |               | CAP|                    S P A C E                          |                           |
    # `------------------------------------------------------------------------------------------+------+------'
    #
    #    0        1          2       3        4        5        6           7
    [
        KC.UNDS,   KC.LPRN, KC.CIRC, _______, _______, _______, _______, KC.HOME,
        KC.EXLM,   KC.RPRN, _______, KC.P5,   _______, _______, _______, KC.PGDOWN,
        KC.DQUO,   KC.PAST, _______, KC.P1,   _______, _______, _______, KC.BRK,
        KC.HASH,   KC.PPLS, _______, KC.P2,   _______, KC.LCBR, XXXXXXX, _______,
        KC.DLR,    KC.LABK, _______, KC.P3,   _______, KC.RCBR, XXXXXXX, KC.INS,
        KC.PERC,   KC.PEQL, _______, KC.P0,   KC.P4,   KC.PIPE, _______, KC.LGUI,
        KC.AMPR,   KC.RABK, _______, _______, _______, KC.DOWN, XXXXXXX, XXXXXXX,
        KC.QUOT,   KC.QUES, _______, KC.P6,   _______, KC.UP,   _______, XXXXXXX,
        _______,   _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX,
        XXXXXXX,   XXXXXXX, XXXXXXX, KC.LCTRL,RAISE,   XXXXXXX, XXXXXXX, XXXXXXX,
        ],
    ]

print("running")

if __name__ == '__main__':
    hx20.go()