[Keyboard] Add Signum 3.0 for the elite-c (#5478)
authorJan Christoph Ebersbach <jceb@e-jc.de>
Mon, 8 Apr 2019 02:20:09 +0000 (04:20 +0200)
committerDrashna Jaelre <drashna@live.com>
Mon, 8 Apr 2019 02:20:09 +0000 (19:20 -0700)
* Add keyboard Signum 3.0 for the elite-c

* Update readme.md

* Remove unused macros

* Use bootmagic lite instead of full

* Add warning to keymap.c that it's auto-generate

* Add description for customizing keyboard layouts

* Make generate_km.py executable

* Make right shift available in numpad layer

* Update keyboards/signum/3_0/elitec/readme.md

Co-Authored-By: jceb <jceb@e-jc.de>
* Update keyboards/signum/3_0/elitec/readme.md

Co-Authored-By: jceb <jceb@e-jc.de>
* Fix typo in symbol name

keyboards/signum/3_0/elitec/config.h [new file with mode: 0644]
keyboards/signum/3_0/elitec/elitec.c [new file with mode: 0644]
keyboards/signum/3_0/elitec/elitec.h [new file with mode: 0644]
keyboards/signum/3_0/elitec/info.json [new file with mode: 0644]
keyboards/signum/3_0/elitec/keymaps/default/generate_km.py [new file with mode: 0755]
keyboards/signum/3_0/elitec/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/signum/3_0/elitec/keymaps/default/km_template.txt [new file with mode: 0644]
keyboards/signum/3_0/elitec/keymaps/default/layout.py [new file with mode: 0644]
keyboards/signum/3_0/elitec/keymaps/default/readme.md [new file with mode: 0644]
keyboards/signum/3_0/elitec/readme.md [new file with mode: 0644]
keyboards/signum/3_0/elitec/rules.mk [new file with mode: 0644]

diff --git a/keyboards/signum/3_0/elitec/config.h b/keyboards/signum/3_0/elitec/config.h
new file mode 100644 (file)
index 0000000..3df07d1
--- /dev/null
@@ -0,0 +1,26 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xF1E7
+#define PRODUCT_ID      0x5163
+#define DEVICE_VER      0x0000
+#define MANUFACTURER    troyfletcher
+#define PRODUCT         Signum
+#define DESCRIPTION     q.m.k. keyboard firmware for Signum 3.0
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 12
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { D2, D1, F5, B5 }
+#define MATRIX_COL_PINS { B4, D7, D0, E6, D4, F6, F4, F7, B1, B3, C6, B2 }
+#define UNUSED_PINS
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
diff --git a/keyboards/signum/3_0/elitec/elitec.c b/keyboards/signum/3_0/elitec/elitec.c
new file mode 100644 (file)
index 0000000..7819526
--- /dev/null
@@ -0,0 +1 @@
+#include "elitec.h"
diff --git a/keyboards/signum/3_0/elitec/elitec.h b/keyboards/signum/3_0/elitec/elitec.h
new file mode 100644 (file)
index 0000000..1749969
--- /dev/null
@@ -0,0 +1,15 @@
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT( \
+       K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, \
+       K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, \
+       K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, \
+       K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311 \
+) { \
+       { K000,  K001,  K002,  K003,  K004,  K005,  K006,  K007,  K008,  K009, K010, K011 }, \
+       { K100,  K101,  K102,  K103,  K104,  K105,  K106,  K107,  K108,  K109, K110, K111 }, \
+       { K200,  K201,  K202,  K203,  K204,  K205,  K206,  K207,  K208,  K209, K210, K211 }, \
+       { K300,  K301,  K302,  K303,  K304,  K305,  K306,  K307,  K308,  K309, K310, K311 } \
+}
diff --git a/keyboards/signum/3_0/elitec/info.json b/keyboards/signum/3_0/elitec/info.json
new file mode 100644 (file)
index 0000000..e93dceb
--- /dev/null
@@ -0,0 +1,76 @@
+{
+    "keyboard_name": "Signum 3.0",
+    "url": "http://troyfletcher.net/",
+    "maintainer": "jceb",
+    "width": 17,
+    "height": 8,
+    "layouts": {
+        "LAYOUT": {
+            "layout": [
+
+                { "x": 1.25, "y": 0.75, "r": 15 },
+                { "x": 1.25, "y": 1.75, "r": 15 },
+                { "x": 1.25, "y": 2.75, "r": 15 },
+                { "x": 1.25, "y": 4.25, "r": 15 },
+
+                { "x": 2.25, "y": 0.5, "r": 15 },
+                { "x": 2.25, "y": 1.5, "r": 15 },
+                { "x": 2.25, "y": 2.5, "r": 15 },
+                { "x": 2.25, "y": 3.5, "r": 15 },
+
+                { "x": 3.25, "y": 0, "r": 15 },
+                { "x": 3.25, "y": 1, "r": 15 },
+                { "x": 3.25, "y": 2, "r": 15 },
+                { "x": 3.25, "y": 3, "r": 15 },
+
+                { "x": 4.25, "y": 0.25, "r": 15 },
+                { "x": 4.25, "y": 1.25, "r": 15 },
+                { "x": 4.25, "y": 2.25, "r": 15 },
+
+                { "x": 5.25, "y": 0.5, "r": 15 },
+                { "x": 5.25, "y": 1.5, "r": 15 },
+                { "x": 5.25, "y": 2.5, "r": 15 },
+                { "x": 5.25, "y": 4.5, "r": 15, "h": 1.5 },
+
+                { "x": 6.25, "y": 0.75, "r": 15 },
+                { "x": 6.25, "y": 1.75, "r": 15 },
+                { "x": 6.25, "y": 2.75, "r": 15 },
+                { "x": 6.25, "y": 4.25, "r": 15, "h": 2  },
+
+                { "x": 7.25, "y": 4.5, "r": 15, "h": 1.5 },
+
+                { "x": 8.25, "y": 4.5, "r": -15, "h": 1.5 },
+
+                { "x": 9.25, "y": 0.75, "r": -15 },
+                { "x": 9.25, "y": 1.75, "r": -15 },
+                { "x": 9.25, "y": 2.75, "r": -15 },
+                { "x": 9.25, "y": 4.25, "r": -15, "h": 2 },
+
+                { "x": 10.25, "y": 0.5, "r": -15 },
+                { "x": 10.25, "y": 1.5, "r": -15 },
+                { "x": 10.25, "y": 2.5, "r": -15 },
+                { "x": 10.25, "y": 4.5, "r": -15, "h": 1.5 },
+
+                { "x": 11.25, "y": 0.25, "r": -15 },
+                { "x": 11.25, "y": 1.25, "r": -15 },
+                { "x": 11.25, "y": 2.25, "r": -15 },
+
+                { "x": 12.25, "y": 0, "r": -15 },
+                { "x": 12.25, "y": 1, "r": -15 },
+                { "x": 12.25, "y": 2, "r": -15 },
+                { "x": 12.25, "y": 3, "r": -15 },
+
+                { "x": 13.25, "y": 0.5, "r": -15 },
+                { "x": 13.25, "y": 1.5, "r": -15 },
+                { "x": 13.25, "y": 2.5, "r": -15 },
+                { "x": 13.25, "y": 3.5, "r": -15 },
+
+                { "x": 14.25, "y": 0.75, "r": -15 },
+                { "x": 14.25, "y": 1.75, "r": -15 },
+                { "x": 14.25, "y": 2.75, "r": -15 },
+                { "x": 14.25, "y": 4.25, "r": -15 }
+
+            ]
+        }
+    }
+}
diff --git a/keyboards/signum/3_0/elitec/keymaps/default/generate_km.py b/keyboards/signum/3_0/elitec/keymaps/default/generate_km.py
new file mode 100755 (executable)
index 0000000..5147121
--- /dev/null
@@ -0,0 +1,130 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+from sortedcontainers import SortedDict
+import layout
+import re
+
+# TODO: auto-generate mutex layers
+# TODO: auto-generate update_tri_layer (_state)
+
+
+def gen_uc_iter():
+    length = len(layout.uc_dict)
+    for key, value in layout.uc_dict.items():
+        length -= 1
+        if length:
+            yield (key, value, False)
+        else:
+            yield (key, value, True)
+
+
+def translate(s):
+    if re.match("^[0-9]$", s):
+        return ("KC_{0}".format(s), "   {0}   ".format(s))
+    elif re.match("^[a-z]$", s):
+        return ("KC_{0}".format(s.upper()), "   {0}   ".format(s))
+    elif re.match("^[A-Z]$", s):
+        return ("S(KC_{0})".format(s), "   {0}   ".format(s))
+    elif re.match("^F[0-9]{1,2}$", s):  # Fn, works from F0 to F99
+        return ("KC_{0}".format(s), "{0:^7}".format(s))
+    elif re.match("^DF[0-9]{1,2}$", s):  # DFn, works from DF0 to DF99
+        return ("DF({0})".format(s[2:]), "{0:^7}".format(s))
+    elif re.match("^MO[0-9]{1,2}$", s):  # MOn, works from MO0 to MO99
+        return ("MO({0})".format(s[2:]), "{0:^7}".format(s))
+    elif re.match("^OSL[0-9]{1,2}$", s):  # OSLn, works from OSL0 to OSL99
+        return ("OSL({0})".format(s[3:]), "{0:^7}".format(s))
+    elif re.match("^TG[0-9]{1,2}$", s):  # TGn, works from TG0 to TG99
+        return ("TG({0})".format(s[2:]), "{0:^7}".format(s))
+    elif re.match("^TO[0-9]{1,2}$", s):  # Tn, works from TO0 to TO99
+        return ("TO({0})".format(s[2:]), "{0:^7}".format(s))
+    elif re.match("^TT[0-9]{1,2}$", s):  # Tn, works from TT0 to TT99
+        return ("TT({0})".format(s[2:]), "{0:^7}".format(s))
+    elif s in layout.uc_dict:
+        return ("X("+s+")", "   {0}   ".format(chr(int(layout.uc_dict[s], 0))))
+    elif s in layout.qmk_dict:
+        return (layout.qmk_dict[s], "{0:^7}".format(s))
+    elif s == s.upper() and s.startswith("KC_"):
+        return (s, "{0:^7}".format(s[2:]))
+    else:
+        return ("XXXXXXX", "  {0}   ".format(chr(128165)))
+
+
+def toKC(s):
+    (kc, lgd) = translate(s)
+    return kc
+
+
+def toLgd(s):
+    (kc, lgd) = translate(s)
+    return lgd
+
+
+if __name__ == "__main__":
+
+    template = open("km_template.txt", mode="r")
+    output = open("keymap.c", mode="w", encoding='utf-8')
+
+    doCopy = False
+
+    for line in template:
+        doCopy = True
+        if line.startswith("//<enum/>"):
+            doCopy = False
+#            output.write(str(layout.uc_dict))
+            for k, v, isLast in gen_uc_iter():
+                if isLast:
+                    output.write(k + "\n")
+                else:
+                    output.write(k + ",\n")
+        if line.startswith("//<uc_map/>"):
+            doCopy = False
+            for k, v, isLast in gen_uc_iter():
+                if isLast:
+                    output.write(u"\t[{0}] = {1}  // {2}\n".format(k, v, chr(int(v, 0))))
+                else:
+                    output.write(u"\t[{0}] = {1},  // {2}\n".format(k, v, chr(int(v, 0))))
+        if line.startswith("//<keymaps/>"):
+            doCopy = False
+            counter = len(layout.layers)
+            layer = 0
+            S = layout.static
+            for L in layout.layers:
+                counter -= 1
+                r_counter = 4
+                output.write("/* Layer %d\n" % layer)
+                output.write(" * -------------------------------------------------               -------------------------------------------------\n")
+                output.write(" * |{0}|{1}|{2}|{3}|{4}|{5}|               |{6}|{7}|{8}|{9}|{10}|{11}|\n".format(toLgd(L[0][0]), toLgd(L[0][1]), toLgd(L[0][2]), toLgd(L[0][3]), toLgd(L[0][4]), toLgd(L[0][5]), toLgd(L[0][6]), toLgd(L[0][7]), toLgd(L[0][8]), toLgd(L[0][9]), toLgd(L[0][10]), toLgd(L[0][11])))
+                output.write(" * -------------------------------------------------               -------------------------------------------------\n")
+                output.write(" * |{0}|{1}|{2}|{3}|{4}|{5}|               |{6}|{7}|{8}|{9}|{10}|{11}|\n".format(toLgd(L[1][0]), toLgd(L[1][1]), toLgd(L[1][2]), toLgd(L[1][3]), toLgd(L[1][4]), toLgd(L[1][5]), toLgd(L[1][6]), toLgd(L[1][7]), toLgd(L[1][8]), toLgd(L[1][9]), toLgd(L[1][10]), toLgd(L[1][11])))
+                output.write(" * -------------------------------------------------               -------------------------------------------------\n")
+                output.write(" * |{0}|{1}|{2}|{3}|{4}|{5}|               |{6}|{7}|{8}|{9}|{10}|{11}|\n".format(toLgd(L[2][0]), toLgd(L[2][1]), toLgd(L[2][2]), toLgd(L[2][3]), toLgd(L[2][4]), toLgd(L[2][5]), toLgd(L[2][6]), toLgd(L[2][7]), toLgd(L[2][8]), toLgd(L[2][9]), toLgd(L[2][10]), toLgd(L[2][11])))
+                output.write(" * -----------------------------------------------------------------------------------------------------------------\n")
+                output.write(" *  {0} {1} {2}        |{3}|{4}|{5}|{6}|{7}|{8}|        {9} {10} {11}".format(toLgd(L[3][0]), toLgd(L[3][1]), toLgd(L[3][2]), toLgd(L[3][3]), toLgd(L[3][4]), toLgd(L[3][5]), toLgd(L[3][6]), toLgd(L[3][7]), toLgd(L[3][8]), toLgd(L[3][9]), toLgd(L[3][10]), toLgd(L[3][11])).rstrip()+"\n")
+                output.write(" *                                 -------------------------------------------------\n")
+                output.write(" */\n")
+
+                l_code = '\tLAYOUT(\n'
+                for r in range(r_counter):
+                    r_counter -= 1
+                    c_counter = 12
+                    l_code += '\t\t'
+                    for c in range(c_counter):
+                        c_counter -= 1
+                        if c != 0:
+                            l_code += " "
+                        l_code += "%s" % toKC(L[r][c])
+                        if r_counter or c_counter:
+                            l_code += ","
+                    l_code += '\n'
+                if counter:
+                    l_code += "\t),\n\n"
+                else:
+                    l_code += "\t)\n"
+                output.write(l_code)
+                layer += 1
+        if doCopy:
+            output.write(line)
+
+    template.close()
+    output.close()
diff --git a/keyboards/signum/3_0/elitec/keymaps/default/keymap.c b/keyboards/signum/3_0/elitec/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..d7feba3
--- /dev/null
@@ -0,0 +1,754 @@
+/* keymap.c is auto-generated, don't edit it directly.
+ * Further instructions are provided in readme.md */
+
+#include QMK_KEYBOARD_H
+
+enum unicode_name {
+AB_ARC,
+AB_LINE,
+AB_VEC,
+ACUTE,
+AE,
+ALEPH,
+ALLA_BR,
+ALPHA,
+AND,
+AND_,
+ANGLE,
+AST_MID,
+A_SET,
+BARLINE,
+BARLINE_D,
+BARLINE_FIN,
+BETA,
+BETH,
+BICOND,
+BIG_O,
+BISHOP_B,
+BISHOP_W,
+BITCOIN,
+BOTTOM,
+BOWTIE,
+BRA,
+BULLET,
+B_SET,
+CENT,
+CHI,
+CIRCLE,
+CIRC_MID,
+CLUBS_B,
+CLUBS_W,
+CODA,
+COMMON_T,
+COPYR,
+CORRESP,
+CROSS,
+CURRENCY,
+C_CLEF,
+C_SET,
+DACAPO,
+DALSEGNO,
+DEFINE,
+DEGREE,
+DELTA,
+DIAMS_B,
+DIAMS_W,
+DIGAMMA,
+DIVISION,
+DOTS,
+DOT_OP,
+DQT1,
+DQT2,
+DQT3,
+DQT4,
+DQT5,
+EIGHTH_N,
+EIGHTH_P,
+EJECT,
+EMBED,
+EMDASH,
+EMPTYSET,
+EPSILON,
+EQUIV,
+ETA,
+EURO,
+EXISTS,
+FEMALE,
+FLAG_B,
+FLAG_W,
+FLAT,
+FORALL,
+FORWARD,
+FOURIER,
+FULL_OUTER,
+F_CLEF,
+F_SET,
+GAMMA,
+GREAT_GREAT,
+GR_EQ,
+G_CLEF,
+HALF_N,
+HALF_P,
+HAMILTON,
+HEARTS_B,
+HEARTS_W,
+HETA,
+H_SET,
+IMAG_P,
+IMPL,
+IMPL_REV,
+IN,
+INDICATOR,
+INEQUAL,
+INFO,
+INFTY,
+INTEGRAL,
+INTERS,
+INTERS_,
+INV_EXCL,
+INV_QST,
+IOTA,
+ISOMORPH,
+KAPPA,
+KET,
+KEY,
+KING_B,
+KING_W,
+KNIGHT_B,
+KNIGHT_W,
+KOPPA,
+K_SET,
+LAMBDA,
+LAPLACE,
+LEFT_CEIL,
+LEFT_FLOOR,
+LEFT_OUTER,
+LENGTH,
+LESS_LESS,
+LETTER,
+LOCK,
+LOCK_OPEN,
+LS_EQ,
+LTIMES,
+MALE,
+MAPSTO,
+MDOT,
+MICRO,
+MINUS_OP,
+MINUS_PLUS,
+MINUTE,
+MODELS,
+MY,
+M_ANGLE,
+NABLA,
+NATURAL,
+NO,
+NOT,
+NOTIN,
+NOTSUBS,
+NOT_DIV,
+NOT_PARA,
+NY,
+N_SET,
+N_TILDE,
+OE,
+OHM,
+OMEGA,
+OMIKRON,
+OR,
+OR_,
+PARALLEL,
+PARTIAL,
+PAWN_B,
+PAWN_W,
+PEDAL,
+PEDAL_UP,
+PERMIL,
+PHI,
+PHONE,
+PI,
+PLAY,
+PLUS_MINUS,
+PLUS_OP,
+POUND,
+POWERSET,
+PRED,
+PROD_,
+PROP_TO,
+PR_SUBSET,
+PSI,
+QED,
+QUART_N,
+QUART_P,
+QUEEN_B,
+QUEEN_W,
+Q_SET,
+REAL_P,
+REGTM,
+REPEAT_E,
+REPEAT_S,
+REWIND,
+RHO,
+RIGHT_CEIL,
+RIGHT_FLOOR,
+RIGHT_OUTER,
+RIGHT_TACK,
+ROOK_B,
+ROOK_W,
+ROOT,
+ROUGHLY,
+RTIMES,
+R_SET,
+SAMPI,
+SAN,
+SCHO,
+SECOND,
+SECTION,
+SEGNO,
+SETMINUS,
+SHARP,
+SHOGI_B,
+SHOGI_BD,
+SHOGI_W,
+SHOGI_WD,
+SIGMA,
+SIXT_N,
+SIXT_P,
+SNEK,
+SPADES_B,
+SPADES_W,
+SPEAKER_DN,
+SPEAKER_TG,
+SPEAKER_UP,
+SQT1,
+SQT2,
+SQT3,
+SQT4,
+SQT5,
+SQUARE,
+SQ_LS,
+SQ_LS_EQ,
+STAFF,
+STIGMA,
+STOP,
+SUBSET,
+SUBSET_REV,
+SUCC,
+SUM_,
+SUP1,
+SUP2,
+SUP3,
+SUP_A,
+SUP_MIN,
+SUP_O,
+SZ,
+TAU,
+THETA,
+TIMES,
+TIMES_OP,
+TMARK,
+TO,
+TOP,
+TRIANGLE,
+UE,
+UNION,
+UNION_,
+U_SET,
+WHOLE_N,
+WHOLE_P,
+XI,
+YEN,
+YES,
+YPSI2,
+YPSILON,
+ZETA,
+Z_SET,
+ae,
+alpha,
+beta,
+beta2,
+chi,
+delta,
+digamma,
+e_FUN,
+epsi2,
+epsilon,
+eta,
+gamma,
+heta,
+i_UNIT,
+iota,
+kappa,
+kappa2,
+koppa,
+lambda,
+my,
+n_tilde,
+ny,
+oe,
+omega,
+omikron,
+phi,
+phi2,
+pi,
+pi2,
+psi,
+rho,
+rho2,
+sampi,
+san,
+scho,
+sigma,
+sigma2,
+sigma3,
+stigma,
+sz,
+tau,
+theta,
+theta2,
+ue,
+xi,
+ypsilon,
+zeta
+};
+
+const uint32_t PROGMEM unicode_map[] = {
+       [AB_ARC] = 0x0361,  // ͡
+       [AB_LINE] = 0x0305,  // ̅
+       [AB_VEC] = 0x20d7,  // ⃗
+       [ACUTE] = 0x00b4,  // ´
+       [AE] = 0x00c4,  // Ä
+       [ALEPH] = 0x2135,  // ℵ
+       [ALLA_BR] = 0x1d135,  // 𝄵
+       [ALPHA] = 0x0391,  // Α
+       [AND] = 0x2227,  // ∧
+       [AND_] = 0x22c0,  // ⋀
+       [ANGLE] = 0x2220,  // ∠
+       [AST_MID] = 0x2217,  // ∗
+       [A_SET] = 0x1d538,  // 𝔸
+       [BARLINE] = 0x1d100,  // 𝄀
+       [BARLINE_D] = 0x1d101,  // 𝄁
+       [BARLINE_FIN] = 0x1d102,  // 𝄂
+       [BETA] = 0x0392,  // Β
+       [BETH] = 0x2136,  // ℶ
+       [BICOND] = 0x21d4,  // ⇔
+       [BIG_O] = 0x1d4aa,  // 𝒪
+       [BISHOP_B] = 0x265d,  // ♝
+       [BISHOP_W] = 0x2657,  // ♗
+       [BITCOIN] = 0x20bf,  // ₿
+       [BOTTOM] = 0x22a5,  // ⊥
+       [BOWTIE] = 0x22c8,  // ⋈
+       [BRA] = 0x27e8,  // ⟨
+       [BULLET] = 0x2022,  // •
+       [B_SET] = 0x1d539,  // 𝔹
+       [CENT] = 0x00a2,  // ¢
+       [CHI] = 0x03a7,  // Χ
+       [CIRCLE] = 0x25cb,  // ○
+       [CIRC_MID] = 0x2218,  // ∘
+       [CLUBS_B] = 0x2663,  // ♣
+       [CLUBS_W] = 0x2667,  // ♧
+       [CODA] = 0x1d10c,  // 𝄌
+       [COMMON_T] = 0x1d134,  // 𝄴
+       [COPYR] = 0x00a9,  // ©
+       [CORRESP] = 0x2259,  // ≙
+       [CROSS] = 0x2020,  // †
+       [CURRENCY] = 0x00a4,  // ¤
+       [C_CLEF] = 0x1d121,  // 𝄡
+       [C_SET] = 0x2102,  // ℂ
+       [DACAPO] = 0x1d10a,  // 𝄊
+       [DALSEGNO] = 0x1d109,  // 𝄉
+       [DEFINE] = 0x2254,  // ≔
+       [DEGREE] = 0x00b0,  // °
+       [DELTA] = 0x0394,  // Δ
+       [DIAMS_B] = 0x2666,  // ♦
+       [DIAMS_W] = 0x2662,  // ♢
+       [DIGAMMA] = 0x03dc,  // Ϝ
+       [DIVISION] = 0x00f7,  // ÷
+       [DOTS] = 0x2026,  // …
+       [DOT_OP] = 0x2299,  // ⊙
+       [DQT1] = 0x00bb,  // »
+       [DQT2] = 0x201e,  // „
+       [DQT3] = 0x201c,  // “
+       [DQT4] = 0x201d,  // ”
+       [DQT5] = 0x00ab,  // «
+       [EIGHTH_N] = 0x1d160,  // 𝅘𝅥𝅮
+       [EIGHTH_P] = 0x1d13e,  // 𝄾
+       [EJECT] = 0x23cf,  // ⏏
+       [EMBED] = 0x21aa,  // ↪
+       [EMDASH] = 0x2014,  // —
+       [EMPTYSET] = 0x2205,  // ∅
+       [EPSILON] = 0x0395,  // Ε
+       [EQUIV] = 0x2261,  // ≡
+       [ETA] = 0x0397,  // Η
+       [EURO] = 0x20ac,  // €
+       [EXISTS] = 0x2203,  // ∃
+       [FEMALE] = 0x2640,  // ♀
+       [FLAG_B] = 0x2691,  // ⚑
+       [FLAG_W] = 0x2690,  // ⚐
+       [FLAT] = 0x266d,  // ♭
+       [FORALL] = 0x2200,  // ∀
+       [FORWARD] = 0x23ed,  // ⏭
+       [FOURIER] = 0x2131,  // ℱ
+       [FULL_OUTER] = 0x27d7,  // ⟗
+       [F_CLEF] = 0x1d122,  // 𝄢
+       [F_SET] = 0x1d53d,  // 𝔽
+       [GAMMA] = 0x0393,  // Γ
+       [GREAT_GREAT] = 0x226b,  // ≫
+       [GR_EQ] = 0x2265,  // ≥
+       [G_CLEF] = 0x1d11e,  // 𝄞
+       [HALF_N] = 0x1d15e,  // 𝅗𝅥
+       [HALF_P] = 0x1d13c,  // 𝄼
+       [HAMILTON] = 0x210b,  // ℋ
+       [HEARTS_B] = 0x2665,  // ♥
+       [HEARTS_W] = 0x2661,  // ♡
+       [HETA] = 0x0370,  // Ͱ
+       [H_SET] = 0x210d,  // ℍ
+       [IMAG_P] = 0x2111,  // ℑ
+       [IMPL] = 0x21d2,  // ⇒
+       [IMPL_REV] = 0x21d0,  // ⇐
+       [IN] = 0x2208,  // ∈
+       [INDICATOR] = 0x1d7cf,  // 𝟏
+       [INEQUAL] = 0x2260,  // ≠
+       [INFO] = 0x1f6c8,  // 🛈
+       [INFTY] = 0x221e,  // ∞
+       [INTEGRAL] = 0x222b,  // ∫
+       [INTERS] = 0x2229,  // ∩
+       [INTERS_] = 0x22c2,  // ⋂
+       [INV_EXCL] = 0x00a1,  // ¡
+       [INV_QST] = 0x00bf,  // ¿
+       [IOTA] = 0x0399,  // Ι
+       [ISOMORPH] = 0x2245,  // ≅
+       [KAPPA] = 0x039a,  // Κ
+       [KET] = 0x27e9,  // ⟩
+       [KEY] = 0x1f511,  // 🔑
+       [KING_B] = 0x265a,  // ♚
+       [KING_W] = 0x2654,  // ♔
+       [KNIGHT_B] = 0x265e,  // ♞
+       [KNIGHT_W] = 0x2658,  // ♘
+       [KOPPA] = 0x03d8,  // Ϙ
+       [K_SET] = 0x1d542,  // 𝕂
+       [LAMBDA] = 0x039b,  // Λ
+       [LAPLACE] = 0x2112,  // ℒ
+       [LEFT_CEIL] = 0x2308,  // ⌈
+       [LEFT_FLOOR] = 0x230a,  // ⌊
+       [LEFT_OUTER] = 0x27d5,  // ⟕
+       [LENGTH] = 0x2113,  // ℓ
+       [LESS_LESS] = 0x226a,  // ≪
+       [LETTER] = 0x2709,  // ✉
+       [LOCK] = 0x1f512,  // 🔒
+       [LOCK_OPEN] = 0x1f513,  // 🔓
+       [LS_EQ] = 0x2264,  // ≤
+       [LTIMES] = 0x22c9,  // ⋉
+       [MALE] = 0x2642,  // ♂
+       [MAPSTO] = 0x27fc,  // ⟼
+       [MDOT] = 0x22c5,  // ⋅
+       [MICRO] = 0x00b5,  // µ
+       [MINUS_OP] = 0x2296,  // ⊖
+       [MINUS_PLUS] = 0x2213,  // ∓
+       [MINUTE] = 0x02b9,  // ʹ
+       [MODELS] = 0x22a7,  // ⊧
+       [MY] = 0x039c,  // Μ
+       [M_ANGLE] = 0x2221,  // ∡
+       [NABLA] = 0x2207,  // ∇
+       [NATURAL] = 0x266e,  // ♮
+       [NO] = 0x2717,  // ✗
+       [NOT] = 0x00ac,  // ¬
+       [NOTIN] = 0x2209,  // ∉
+       [NOTSUBS] = 0x2288,  // ⊈
+       [NOT_DIV] = 0x2224,  // ∤
+       [NOT_PARA] = 0x2226,  // ∦
+       [NY] = 0x039d,  // Ν
+       [N_SET] = 0x2115,  // ℕ
+       [N_TILDE] = 0x00d1,  // Ñ
+       [OE] = 0x00d6,  // Ö
+       [OHM] = 0x2126,  // Ω
+       [OMEGA] = 0x03a9,  // Ω
+       [OMIKRON] = 0x039f,  // Ο
+       [OR] = 0x2228,  // ∨
+       [OR_] = 0x22c1,  // ⋁
+       [PARALLEL] = 0x2225,  // ∥
+       [PARTIAL] = 0x2202,  // ∂
+       [PAWN_B] = 0x265f,  // ♟
+       [PAWN_W] = 0x2659,  // ♙
+       [PEDAL] = 0x1d1ae,  // 𝆮
+       [PEDAL_UP] = 0x1d1af,  // 𝆯
+       [PERMIL] = 0x2030,  // ‰
+       [PHI] = 0x03a6,  // Φ
+       [PHONE] = 0x2706,  // ✆
+       [PI] = 0x03a0,  // Π
+       [PLAY] = 0x23ef,  // ⏯
+       [PLUS_MINUS] = 0x00b1,  // ±
+       [PLUS_OP] = 0x2295,  // ⊕
+       [POUND] = 0x00a3,  // £
+       [POWERSET] = 0x1d4ab,  // 𝒫
+       [PRED] = 0x227a,  // ≺
+       [PROD_] = 0x220f,  // ∏
+       [PROP_TO] = 0x221d,  // ∝
+       [PR_SUBSET] = 0x2282,  // ⊂
+       [PSI] = 0x03a8,  // Ψ
+       [QED] = 0x220e,  // ∎
+       [QUART_N] = 0x1d15f,  // 𝅘𝅥
+       [QUART_P] = 0x1d13d,  // 𝄽
+       [QUEEN_B] = 0x265b,  // ♛
+       [QUEEN_W] = 0x2655,  // ♕
+       [Q_SET] = 0x211a,  // ℚ
+       [REAL_P] = 0x211c,  // ℜ
+       [REGTM] = 0x00ae,  // ®
+       [REPEAT_E] = 0x1d107,  // 𝄇
+       [REPEAT_S] = 0x1d106,  // 𝄆
+       [REWIND] = 0x23ee,  // ⏮
+       [RHO] = 0x03a1,  // Ρ
+       [RIGHT_CEIL] = 0x2309,  // ⌉
+       [RIGHT_FLOOR] = 0x230b,  // ⌋
+       [RIGHT_OUTER] = 0x27d6,  // ⟖
+       [RIGHT_TACK] = 0x22a2,  // ⊢
+       [ROOK_B] = 0x265c,  // ♜
+       [ROOK_W] = 0x2656,  // ♖
+       [ROOT] = 0x221a,  // √
+       [ROUGHLY] = 0x2248,  // ≈
+       [RTIMES] = 0x22ca,  // ⋊
+       [R_SET] = 0x211d,  // ℝ
+       [SAMPI] = 0x0372,  // Ͳ
+       [SAN] = 0x03fa,  // Ϻ
+       [SCHO] = 0x03f7,  // Ϸ
+       [SECOND] = 0x02ba,  // ʺ
+       [SECTION] = 0x00a7,  // §
+       [SEGNO] = 0x1d10b,  // 𝄋
+       [SETMINUS] = 0x2216,  // ∖
+       [SHARP] = 0x266f,  // ♯
+       [SHOGI_B] = 0x2617,  // ☗
+       [SHOGI_BD] = 0x26ca,  // ⛊
+       [SHOGI_W] = 0x2616,  // ☖
+       [SHOGI_WD] = 0x26c9,  // ⛉
+       [SIGMA] = 0x03a3,  // Σ
+       [SIXT_N] = 0x1d161,  // 𝅘𝅥𝅯
+       [SIXT_P] = 0x1d13f,  // 𝄿
+       [SNEK] = 0x1f40d,  // 🐍
+       [SPADES_B] = 0x2660,  // ♠
+       [SPADES_W] = 0x2664,  // ♤
+       [SPEAKER_DN] = 0x1f509,  // 🔉
+       [SPEAKER_TG] = 0x1f507,  // 🔇
+       [SPEAKER_UP] = 0x1f50a,  // 🔊
+       [SQT1] = 0x203a,  // ›
+       [SQT2] = 0x201a,  // ‚
+       [SQT3] = 0x2018,  // ‘
+       [SQT4] = 0x2019,  // ’
+       [SQT5] = 0x2039,  // ‹
+       [SQUARE] = 0x25a1,  // □
+       [SQ_LS] = 0x228f,  // ⊏
+       [SQ_LS_EQ] = 0x2291,  // ⊑
+       [STAFF] = 0x1d11a,  // 𝄚
+       [STIGMA] = 0x03da,  // Ϛ
+       [STOP] = 0x25fc,  // ◼
+       [SUBSET] = 0x2286,  // ⊆
+       [SUBSET_REV] = 0x2287,  // ⊇
+       [SUCC] = 0x227b,  // ≻
+       [SUM_] = 0x2211,  // ∑
+       [SUP1] = 0x00b9,  // ¹
+       [SUP2] = 0x00b2,  // ²
+       [SUP3] = 0x00b3,  // ³
+       [SUP_A] = 0x00aa,  // ª
+       [SUP_MIN] = 0x207b,  // ⁻
+       [SUP_O] = 0x00ba,  // º
+       [SZ] = 0x1e9e,  // ẞ
+       [TAU] = 0x03a4,  // Τ
+       [THETA] = 0x0398,  // Θ
+       [TIMES] = 0x00d7,  // ×
+       [TIMES_OP] = 0x2297,  // ⊗
+       [TMARK] = 0x2122,  // ™
+       [TO] = 0x27f6,  // ⟶
+       [TOP] = 0x22a4,  // ⊤
+       [TRIANGLE] = 0x25b3,  // △
+       [UE] = 0x00dc,  // Ü
+       [UNION] = 0x222a,  // ∪
+       [UNION_] = 0x22c3,  // ⋃
+       [U_SET] = 0x1d54c,  // 𝕌
+       [WHOLE_N] = 0x1d15d,  // 𝅝
+       [WHOLE_P] = 0x1d13b,  // 𝄻
+       [XI] = 0x039e,  // Ξ
+       [YEN] = 0x00a5,  // ¥
+       [YES] = 0x2713,  // ✓
+       [YPSI2] = 0x03d2,  // ϒ
+       [YPSILON] = 0x03a5,  // Υ
+       [ZETA] = 0x0396,  // Ζ
+       [Z_SET] = 0x2124,  // ℤ
+       [ae] = 0x00e4,  // ä
+       [alpha] = 0x03b1,  // α
+       [beta] = 0x03b2,  // β
+       [beta2] = 0x03d0,  // ϐ
+       [chi] = 0x03c7,  // χ
+       [delta] = 0x03b4,  // δ
+       [digamma] = 0x03dd,  // ϝ
+       [e_FUN] = 0x0065,  // e
+       [epsi2] = 0x03f5,  // ϵ
+       [epsilon] = 0x03b5,  // ε
+       [eta] = 0x03b7,  // η
+       [gamma] = 0x03b3,  // γ
+       [heta] = 0x0371,  // ͱ
+       [i_UNIT] = 0x0069,  // i
+       [iota] = 0x03b9,  // ι
+       [kappa] = 0x03ba,  // κ
+       [kappa2] = 0x03f0,  // ϰ
+       [koppa] = 0x03d9,  // ϙ
+       [lambda] = 0x03bb,  // λ
+       [my] = 0x03bc,  // μ
+       [n_tilde] = 0x00f1,  // ñ
+       [ny] = 0x03bd,  // ν
+       [oe] = 0x00f6,  // ö
+       [omega] = 0x03c9,  // ω
+       [omikron] = 0x03bf,  // ο
+       [phi] = 0x03c6,  // φ
+       [phi2] = 0x03d5,  // ϕ
+       [pi] = 0x03c0,  // π
+       [pi2] = 0x03d6,  // ϖ
+       [psi] = 0x03c8,  // ψ
+       [rho] = 0x03c1,  // ρ
+       [rho2] = 0x03f1,  // ϱ
+       [sampi] = 0x0373,  // ͳ
+       [san] = 0x03fb,  // ϻ
+       [scho] = 0x03f8,  // ϸ
+       [sigma] = 0x03c3,  // σ
+       [sigma2] = 0x03c2,  // ς
+       [sigma3] = 0x03f2,  // ϲ
+       [stigma] = 0x03db,  // ϛ
+       [sz] = 0x00df,  // ß
+       [tau] = 0x03c4,  // τ
+       [theta] = 0x03b8,  // θ
+       [theta2] = 0x03d1,  // ϑ
+       [ue] = 0x00fc,  // ü
+       [xi] = 0x03be,  // ξ
+       [ypsilon] = 0x03c5,  // υ
+       [zeta] = 0x03b6  // ζ
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Layer 0
+ * -------------------------------------------------               -------------------------------------------------
+ * |  Tab  |   q   |   w   |   e   |   r   |   t   |               |   y   |   u   |   i   |   o   |   p   |   [   |
+ * -------------------------------------------------               -------------------------------------------------
+ * | LCtrl |   a   |   s   |   d   |   f   |   g   |               |   h   |   j   |   k   |   l   |   ;   |   '   |
+ * -------------------------------------------------               -------------------------------------------------
+ * |LShift(|   z   |   x   |   c   |   v   |   b   |               |   n   |   m   |   ,   |   .   |   /   |RShift)|
+ * -----------------------------------------------------------------------------------------------------------------
+ *    MO2    LGui    LAlt          |  TT2  |LT6_SPC|  TT4  | Enter | Space |  TT2  |         RAlt    RGui    RCtrl
+ *                                 -------------------------------------------------
+ */
+       LAYOUT(
+               KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
+               KC_LCTRL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+               KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC,
+               MO(2), KC_LGUI, KC_LALT, TT(2), LT(6, KC_SPC), TT(4), KC_ENT, KC_SPC, TT(2), KC_RALT, KC_RGUI, KC_RCTRL
+       ),
+
+/* Layer 1
+ * -------------------------------------------------               -------------------------------------------------
+ * |  Tab  |   q   |   w   |   f   |   p   |   g   |               |   j   |   l   |   u   |   y   |   ;   |   [   |
+ * -------------------------------------------------               -------------------------------------------------
+ * | LCtrl |   a   |   r   |   s   |   t   |   d   |               |   h   |   n   |   e   |   i   |   o   |   '   |
+ * -------------------------------------------------               -------------------------------------------------
+ * |LShift(|   z   |   x   |   c   |   v   |   b   |               |   k   |   m   |   ,   |   .   |   /   |RShift)|
+ * -----------------------------------------------------------------------------------------------------------------
+ *    MO2    LGui    LAlt          |  TT2  |LT6_SPC|  TT4  | Enter | Space |  TT2  |         RAlt    RGui    RCtrl
+ *                                 -------------------------------------------------
+ */
+       LAYOUT(
+               KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC,
+               KC_LCTRL, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
+               KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC,
+               MO(2), KC_LGUI, KC_LALT, TT(2), LT(6, KC_SPC), TT(4), KC_ENT, KC_SPC, TT(2), KC_RALT, KC_RGUI, KC_RCTRL
+       ),
+
+/* Layer 2
+ * -------------------------------------------------               -------------------------------------------------
+ * |   `   |   1   |   2   |   3   |   4   |   5   |               |   6   |   7   |   8   |   9   |   0   |   ]   |
+ * -------------------------------------------------               -------------------------------------------------
+ * |       |  DF0  |  DF1  |  XXX  |  XXX  |  MO3  |               |   4   |   4   |   5   |   6   |   -   |   =   |
+ * -------------------------------------------------               -------------------------------------------------
+ * |       |  MO5  |  XXX  |  XXX  |  XXX  |  XXX  |               |   1   |   1   |   2   |   3   |   \   |       |
+ * -----------------------------------------------------------------------------------------------------------------
+ *    TG2                          |       |       |       |       |       |   0   |
+ *                                 -------------------------------------------------
+ */
+       LAYOUT(
+               KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_RBRC,
+               KC_TRNS, DF(0), DF(1), XXXXXXX, XXXXXXX, MO(3), KC_4, KC_4, KC_5, KC_6, KC_MINS, KC_EQL,
+               KC_TRNS, MO(5), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_1, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
+               TG(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_0, KC_TRNS, KC_TRNS, KC_TRNS
+       ),
+
+/* Layer 3
+ * -------------------------------------------------               -------------------------------------------------
+ * |       |  F1   |  F2   |  F3   |  F4   |  F5   |               |  F6   |  F7   |  F8   |  F9   |  F10  |  XXX  |
+ * -------------------------------------------------               -------------------------------------------------
+ * |       |  XXX  |  XXX  |  XXX  |  XXX  |  MO3  |               |  F4   |  F4   |  F5   |  F6   |  XXX  |  XXX  |
+ * -------------------------------------------------               -------------------------------------------------
+ * |       |  XXX  |  XXX  |  XXX  |  XXX  |  XXX  |               |  F1   |  F1   |  F2   |  F3   |  XXX  |       |
+ * -----------------------------------------------------------------------------------------------------------------
+ *    TG3                          |       |       |       |  F10  |  F11  |  F12  |
+ *                                 -------------------------------------------------
+ */
+       LAYOUT(
+               KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, XXXXXXX,
+               KC_TRNS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MO(3), KC_F4, KC_F4, KC_F5, KC_F6, XXXXXXX, XXXXXXX,
+               KC_TRNS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_F1, KC_F1, KC_F2, KC_F3, XXXXXXX, KC_TRNS,
+               TG(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS
+       ),
+
+/* Layer 4
+ * -------------------------------------------------               -------------------------------------------------
+ * |       |  Esc  | Tab x | Tab n |CPg Dn |CPg Dn |               |Pg Down| Home  |^ Arrow|Insert |SInsert|  Esc  |
+ * -------------------------------------------------               -------------------------------------------------
+ * |       | Caps  | < Gui |Gui Tab|  💥   |  💥   |               |< Arrow|< Arrow|v Arrow|> Arrow|  End  |Pr Scr |
+ * -------------------------------------------------               -------------------------------------------------
+ * |       |  XXX  |  XXX  |  XXX  |CPg Up |CPg Up |               | Pg Up |  XXX  |v Arrow|  XXX  |  App  |       |
+ * -----------------------------------------------------------------------------------------------------------------
+ *    TG4                          |       |       |       |       |       |       |
+ *                                 -------------------------------------------------
+ */
+       LAYOUT(
+               KC_TRNS, KC_ESC, LCTL(KC_W), LCTL(KC_T), CTL_T(KC_PGDN), CTL_T(KC_PGDN), KC_PGDN, KC_HOME, KC_UP, KC_INS, SFT_T(KC_INS), KC_ESC,
+               KC_TRNS, KC_CAPS, LGUI_T(KC_RIGHT), LGUI_T(KC_TAB), XXXXXXX, XXXXXXX, KC_LEFT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_END, KC_PSCR,
+               KC_TRNS, XXXXXXX, XXXXXXX, XXXXXXX, CTL_T(KC_PGUP), CTL_T(KC_PGUP), KC_PGUP, XXXXXXX, KC_DOWN, XXXXXXX, KC_APP, KC_TRNS,
+               TG(4), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+       ),
+
+/* Layer 5
+ * -------------------------------------------------               -------------------------------------------------
+ * |       |  XXX  |play/ps| Vol + | Vol + |  XXX  |               |  XXX  |  XXX  |  XXX  |  XXX  |_reset | Power |
+ * -------------------------------------------------               -------------------------------------------------
+ * |       |  XXX  |  |<<  | Vol 0 |  >>|  |  XXX  |               |  XXX  |  XXX  |  XXX  |  XXX  |  XXX  | Sleep |
+ * -------------------------------------------------               -------------------------------------------------
+ * |       |  XXX  |  XXX  | Vol - | Vol - |  XXX  |               |  XXX  |  XXX  |  XXX  |  XXX  |  XXX  |  XXX  |
+ * -----------------------------------------------------------------------------------------------------------------
+ *    TG5                          |       |       |       |       |       |       |
+ *                                 -------------------------------------------------
+ */
+       LAYOUT(
+               KC_TRNS, XXXXXXX, KC_MPLY, KC_VOLU, KC_VOLU, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET, KC_PWR,
+               KC_TRNS, XXXXXXX, KC_MPRV, KC_MUTE, KC_MNXT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_SLEP,
+               KC_TRNS, XXXXXXX, XXXXXXX, KC_VOLD, KC_VOLD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+               TG(5), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+       ),
+
+/* Layer 6
+ * -------------------------------------------------               -------------------------------------------------
+ * |       | acc1  |  XXX  |  XXX  |  XXX  |  XXX  |               |^ Wheel|< Wheel|^ Mouse|> Wheel|  XXX  |  XXX  |
+ * -------------------------------------------------               -------------------------------------------------
+ * |       | acc2  |Mouse 3|Mouse 2|Mouse 1|Mouse 1|               |< Mouse|< Mouse|v Mouse|> Mouse|  XXX  |  XXX  |
+ * -------------------------------------------------               -------------------------------------------------
+ * |       | acc0  |  XXX  |  XXX  |  XXX  |  XXX  |               |v Wheel|  XXX  |v Mouse|  XXX  |  XXX  |       |
+ * -----------------------------------------------------------------------------------------------------------------
+ *    TG6                          |       |       |       |       |       |       |
+ *                                 -------------------------------------------------
+ */
+       LAYOUT(
+               KC_TRNS, KC_ACL1, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_U, KC_WH_L, KC_MS_U, KC_WH_R, XXXXXXX, XXXXXXX,
+               KC_TRNS, KC_ACL2, KC_BTN3, KC_BTN2, KC_BTN1, KC_BTN1, KC_MS_L, KC_MS_L, KC_MS_D, KC_MS_R, XXXXXXX, XXXXXXX,
+               KC_TRNS, KC_ACL0, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_D, XXXXXXX, KC_MS_D, XXXXXXX, XXXXXXX, KC_TRNS,
+               TG(6), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+       )
+};
+
+/* vi: ft=c:tw=80:sw=2:ts=2:sts=2:et
+ */
diff --git a/keyboards/signum/3_0/elitec/keymaps/default/km_template.txt b/keyboards/signum/3_0/elitec/keymaps/default/km_template.txt
new file mode 100644 (file)
index 0000000..47b35ee
--- /dev/null
@@ -0,0 +1,20 @@
+/* keymap.c is auto-generated, don't edit it directly.
+ * Further instructions are provided in readme.md */
+
+#include QMK_KEYBOARD_H
+
+enum unicode_name {
+//<enum/>
+};
+
+const uint32_t PROGMEM unicode_map[] = {
+//<uc_map/>
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+//<keymaps/>
+};
+
+/* vi: ft=c:tw=80:sw=2:ts=2:sts=2:et
+ */
diff --git a/keyboards/signum/3_0/elitec/keymaps/default/layout.py b/keyboards/signum/3_0/elitec/keymaps/default/layout.py
new file mode 100644 (file)
index 0000000..937fc17
--- /dev/null
@@ -0,0 +1,493 @@
+from sortedcontainers import SortedDict
+
+# Add all used Unicode symbols to this list.
+# The key (e.g. "SNEK") is used in keymap.c for "enum", "unicode_map" and "keymaps", so it needs to be a valid C variable name.
+# The key is also used in this file to define the layout, so use recognizeable names.
+# The value (e.g. "0x1f40d") is used in keymap.c for "unicode_map" and to automatically generate the "ASCII"-art comments.
+# When adding new Unicode names, use "0x1f40d" until you looked up the correct Unicode code point.
+uc_dict = SortedDict({
+    "SNEK": "0x1f40d", ## Error
+    ## qwertz
+    "ACUTE": "0x00b4",
+    ## QWERTZ
+    "INV_EXCL": "0x00a1",
+    "INV_QST": "0x00bf",
+    ## numpad
+    "SUP1": "0x00b9",
+    "SUP2": "0x00b2",
+    "SUP3": "0x00b3",
+    "SUP_MIN": "0x207b",
+    "ROOT": "0x221a",
+    "DEGREE": "0x00b0",
+    "MINUTE": "0x02b9",
+    "SECOND": "0x02ba",
+    "CURRENCY": "0x00a4",
+    "CENT": "0x00a2",
+    "YEN": "0x00a5",
+    "POUND": "0x00a3",
+    "EURO": "0x20ac",
+    "DIVISION": "0x00f7",
+    "MICRO": "0x00b5",
+    "OHM": "0x2126",
+    "BITCOIN": "0x20bf",
+    "SECTION": "0x00a7",
+    ## NAV_TYPO
+    "SQT1": "0x203a",
+    "SQT2": "0x201a",
+    "SQT3": "0x2018",
+    "SQT4": "0x2019",
+    "SQT5": "0x2039",
+    "SUP_A": "0x00aa",
+    "SUP_O": "0x00ba",
+    "TMARK": "0x2122",
+    "COPYR": "0x00a9",
+    "REGTM": "0x00ae",
+    "DOTS": "0x2026",
+    "CROSS": "0x2020",
+    "BULLET": "0x2022",
+    "EMDASH": "0x2014",
+    "PERMIL": "0x2030",
+    "DQT1": "0x00bb",
+    "DQT2": "0x201e",
+    "DQT3": "0x201c",
+    "DQT4": "0x201d",
+    "DQT5": "0x00ab",
+    ## lang
+    "ae": "0x00e4",
+    "oe": "0x00f6",
+    "ue": "0x00fc",
+    "sz": "0x00df",
+    "n_tilde": "0x00f1",
+    ## LANG
+    "AE": "0x00c4",
+    "OE": "0x00d6",
+    "UE": "0x00dc",
+    "SZ": "0x1e9e",
+    "N_TILDE": "0x00d1",
+    ## greek
+    "alpha": "0x03b1",
+    "beta": "0x03b2",
+    "gamma": "0x03b3",
+    "delta": "0x03b4",
+    "epsilon": "0x03b5",
+    "zeta": "0x03b6",
+    "eta": "0x03b7",
+    "theta": "0x03b8",
+    "iota": "0x03b9",
+    "kappa": "0x03ba",
+    "lambda": "0x03bb",
+    "my": "0x03bc",
+    "ny": "0x03bd",
+    "xi": "0x03be",
+    "omikron": "0x03bf",
+    "pi": "0x03c0",
+    "rho": "0x03c1",
+    "sigma": "0x03c3",
+    "tau": "0x03c4",
+    "ypsilon": "0x03c5",
+    "phi": "0x03c6",
+    "chi": "0x03c7",
+    "psi": "0x03c8",
+    "omega": "0x03c9",
+    # variants
+    "beta2": "0x03d0",
+    "epsi2": "0x03f5",
+    "theta2": "0x03d1",
+    "kappa2": "0x03f0",
+    "pi2": "0x03d6",
+    "rho2": "0x03f1",
+    "sigma2": "0x03c2",
+    "sigma3": "0x03f2",
+    "phi2": "0x03d5",
+    # non-standard
+    "digamma": "0x03dd",
+    "stigma": "0x03db",
+    "heta": "0x0371",
+    "san": "0x03fb",
+    "koppa": "0x03d9",
+    "sampi": "0x0373",
+    "scho": "0x03f8",
+    ## GREEK
+    "ALPHA": "0x0391",
+    "BETA": "0x0392",
+    "GAMMA": "0x0393",
+    "DELTA": "0x0394",
+    "EPSILON": "0x0395",
+    "ZETA": "0x0396",
+    "ETA": "0x0397",
+    "THETA": "0x0398",
+    "IOTA": "0x0399",
+    "KAPPA": "0x039a",
+    "LAMBDA": "0x039b",
+    "MY": "0x039c",
+    "NY": "0x039d",
+    "XI": "0x039e",
+    "OMIKRON": "0x039f",
+    "PI": "0x03a0",
+    "RHO": "0x03a1",
+    "SIGMA": "0x03a3",
+    "TAU": "0x03a4",
+    "YPSILON": "0x03a5",
+    "PHI": "0x03a6",
+    "CHI": "0x03a7",
+    "PSI": "0x03a8",
+    "OMEGA": "0x03a9",
+    # variants
+    "YPSI2": "0x03d2",
+    # non-standard
+    "DIGAMMA": "0x03dc",
+    "STIGMA": "0x03da",
+    "HETA": "0x0370",
+    "SAN": "0x03fa",
+    "KOPPA": "0x03d8",
+    "SAMPI": "0x0372",
+    "SCHO": "0x03f7",
+    ## symbol
+    "SHOGI_WD": "0x26c9",
+    "FLAG_W": "0x2690",
+    "LETTER": "0x2709",
+    "PHONE": "0x2706",
+    "INFO": "0x1f6c8",
+    "REWIND": "0x23ee",
+    "PLAY": "0x23ef",
+    "FORWARD": "0x23ed",
+    "STOP": "0x25fc",
+    "EJECT": "0x23cf",
+    "SHOGI_W": "0x2616",
+    "FEMALE": "0x2640",
+    "MALE": "0x2642",
+    "NO": "0x2717",
+    "YES": "0x2713",
+    "FLAT": "0x266d",
+    "NATURAL": "0x266e",
+    "SHARP": "0x266f",
+    "COMMON_T": "0x1d134",
+    "ALLA_BR": "0x1d135",
+    "PAWN_W": "0x2659",
+    "DIAMS_W": "0x2662",
+    "HEARTS_W": "0x2661",
+    "SPADES_W": "0x2664",
+    "CLUBS_W": "0x2667",
+    "WHOLE_N": "0x1d15d",
+    "HALF_N": "0x1d15e",
+    "QUART_N": "0x1d15f",
+    "EIGHTH_N": "0x1d160",
+    "SIXT_N": "0x1d161",
+    "ROOK_W": "0x2656",
+    "KNIGHT_W": "0x2658",
+    "BISHOP_W": "0x2657",
+    "QUEEN_W": "0x2655",
+    "KING_W": "0x2654",
+    "C_CLEF": "0x1d121",
+    "G_CLEF": "0x1d11e",
+    "F_CLEF": "0x1d122",
+    "PEDAL": "0x1d1ae",
+    "PEDAL_UP": "0x1d1af",
+    ## SYMBOL
+    "SHOGI_BD": "0x26ca",
+    "FLAG_B": "0x2691",
+    "SPEAKER_UP": "0x1f50a",
+    "SPEAKER_TG": "0x1f507",
+    "SPEAKER_DN": "0x1f509",
+    "SHOGI_B": "0x2617",
+    "KEY": "0x1f511",
+    "LOCK": "0x1f512",
+    "LOCK_OPEN": "0x1f513",
+    "STAFF": "0x1d11a",
+    "BARLINE": "0x1d100",
+    "BARLINE_D": "0x1d101",
+    "BARLINE_FIN": "0x1d102",
+    "CODA": "0x1d10c",
+    "PAWN_B": "0x265f",
+    "DIAMS_B": "0x2666",
+    "HEARTS_B": "0x2665",
+    "SPADES_B": "0x2660",
+    "CLUBS_B": "0x2663",
+    "WHOLE_P": "0x1d13b",
+    "HALF_P": "0x1d13c",
+    "QUART_P": "0x1d13d",
+    "EIGHTH_P": "0x1d13e",
+    "SIXT_P": "0x1d13f",
+    "ROOK_B": "0x265c",
+    "KNIGHT_B": "0x265e",
+    "BISHOP_B": "0x265d",
+    "QUEEN_B": "0x265b",
+    "KING_B": "0x265a",
+    "REPEAT_S": "0x1d106",
+    "REPEAT_E": "0x1d107",
+    "SEGNO": "0x1d10b",
+    "DALSEGNO": "0x1d109",
+    "DACAPO": "0x1d10a",
+    ## math
+    "EXISTS": "0x2203",
+    "FORALL": "0x2200",
+    "EQUIV": "0x2261",
+    "CORRESP": "0x2259",
+    "INEQUAL": "0x2260",
+    "DEFINE": "0x2254",
+    "TO": "0x27f6",
+    "MAPSTO": "0x27fc",
+    "SETMINUS": "0x2216",
+    "QED": "0x220e",
+    "OR_": "0x22c1",
+    "AND_": "0x22c0",
+    "OR": "0x2228",
+    "AND": "0x2227",
+    "NOT": "0x00ac",
+    "BICOND": "0x21d4",
+    "IMPL_REV": "0x21d0",
+    "IMPL": "0x21d2",
+    "TOP": "0x22a4",
+    "BOTTOM": "0x22a5",
+    "SUM_": "0x2211",
+    "PROD_": "0x220f",
+    "MDOT": "0x22c5",
+    "NOTIN": "0x2209",
+    "IN": "0x2208",
+    "LS_EQ": "0x2264",
+    "GR_EQ": "0x2265",
+    "INFTY": "0x221e",
+    "UNION_": "0x22c3",
+    "INTERS_": "0x22c2",
+    "UNION": "0x222a",
+    "INTERS": "0x2229",
+    "NOTSUBS": "0x2288",
+    "PR_SUBSET": "0x2282",
+    "SUBSET": "0x2286",
+    "SUBSET_REV": "0x2287",
+    "EMPTYSET": "0x2205",
+    ## MATHSCRIPT
+    "LEFT_CEIL": "0x2308",
+    "REAL_P": "0x211c",
+    "NABLA": "0x2207",
+    "RIGHT_CEIL": "0x2309",
+    "LEFT_FLOOR": "0x230a",
+    "BRA": "0x27e8",
+    "IMAG_P": "0x2111",
+    "KET": "0x27e9",
+    "RIGHT_FLOOR": "0x230b",
+    "Q_SET": "0x211a",
+    "e_FUN": "0x0065",
+    "R_SET": "0x211d",
+    "Z_SET": "0x2124",
+    "U_SET": "0x1d54c",
+    "i_UNIT": "0x0069",
+    "BIG_O": "0x1d4aa",
+    "POWERSET": "0x1d4ab",
+    "A_SET": "0x1d538",
+    "INTEGRAL": "0x222b",
+    "PARTIAL": "0x2202",
+    "F_SET": "0x1d53d",
+    "H_SET": "0x210d",
+    "K_SET": "0x1d542",
+    "LENGTH": "0x2113",
+    "ALEPH": "0x2135",
+    "BETH": "0x2136",
+    "C_SET": "0x2102",
+    "B_SET": "0x1d539",
+    "N_SET": "0x2115",
+    "INDICATOR": "0x1d7cf",
+    "FOURIER": "0x2131",
+    "HAMILTON": "0x210b",
+    "LAPLACE": "0x2112",
+    ## MATHEXT
+    "RIGHT_TACK": "0x22a2",
+    "MODELS": "0x22a7",
+    "AB_VEC": "0x20d7",
+    "AB_LINE": "0x0305",
+    "AB_ARC": "0x0361",
+    "LESS_LESS": "0x226a",
+    "PRED": "0x227a",
+    "EMBED": "0x21aa",
+    "SUCC": "0x227b",
+    "GREAT_GREAT": "0x226b",
+    "TRIANGLE": "0x25b3",
+    "SQUARE": "0x25a1",
+    "CIRCLE": "0x25cb",
+    "DOT_OP": "0x2299",
+    "PLUS_OP": "0x2295",
+    "MINUS_OP": "0x2296",
+    "ROUGHLY": "0x2248",
+    "ISOMORPH": "0x2245",
+    "LTIMES": "0x22c9",
+    "RTIMES": "0x22ca",
+    "BOWTIE": "0x22c8",
+    "M_ANGLE": "0x2221",
+    "ANGLE": "0x2220",
+    "CIRC_MID": "0x2218",
+    "AST_MID": "0x2217",
+    "TIMES": "0x00d7",
+    "PLUS_MINUS": "0x00b1",
+    "MINUS_PLUS": "0x2213",
+    "LEFT_OUTER": "0x27d5",
+    "RIGHT_OUTER": "0x27d6",
+    "FULL_OUTER": "0x27d7",
+    "SQ_LS": "0x228f",
+    "SQ_LS_EQ": "0x2291",
+    "PROP_TO": "0x221d",
+    "PARALLEL": "0x2225",
+    "NOT_PARA": "0x2226",
+    "TIMES_OP": "0x2297",
+    "NOT_DIV": "0x2224"
+})
+
+# Add all used Keycodes to this list.
+# The key (e.g. "a") is used in keymap.c to automatically generate the comments. The first 7 chars will show as a keycap legend.
+qmk_dict = {
+    # test cases (These are handled in generate_km.py within toKC() and toLgd(), so these definitions will be ignored.
+    # If you find "BAD" in your keymaps, then something went wrong.)
+    "a": "BAD", "A": "BAD", "0": "BAD",
+    # Basic Keycodes
+    "XXX": "XXXXXXX", "": "KC_TRNS",
+    "!": "S(KC_1)", "@": "S(KC_2)", "#": "S(KC_3)", "$": "S(KC_4)", "%": "S(KC_5)",
+    "^": "S(KC_6)", "&": "S(KC_7)", "*": "S(KC_8)", "(": "S(KC_9)", ")": "S(KC_0)",
+    "Enter": "KC_ENT", "Esc": "KC_ESC", "BSpace": "KC_BSPC", "Tab": "KC_TAB",
+    "Space": "KC_SPC", "-": "KC_MINS", "_": "S(KC_MINS)", "=": "KC_EQL",
+    "+": "S(KC_EQL)", "[": "KC_LBRC", "{": "S(KC_LBRC)", "]": "KC_RBRC",
+    "}": "S(KC_RBRC)", "\\": "KC_BSLS", "|": "S(KC_BSLS)", ";": "KC_SCLN",
+    ":": "S(KC_SCLN)", "'": "KC_QUOT", "\"": "S(KC_QUOT)", "`": "KC_GRV",
+    "~": "S(KC_GRV)", ",": "KC_COMM", "<": "S(KC_COMM)", ".": "KC_DOT",
+    ">": "S(KC_DOT)", "/": "KC_SLSH", "?": "S(KC_SLSH)", "Caps": "KC_CAPS",
+    "Pr Scr": "KC_PSCR", "Scr Lck": "KC_SLCK", "Pause": "KC_BRK", "Insert": "KC_INS", "SInsert": "SFT_T(KC_INS)",
+    "Home": "KC_HOME", "Pg Up": "KC_PGUP", "Del": "KC_DEL", "End": "KC_END",
+    "Pg Down": "KC_PGDN", "> Arrow": "KC_RIGHT", "< Arrow": "KC_LEFT",
+    "v Arrow": "KC_DOWN", "^ Arrow": "KC_UP",
+    # Keypad keycodes missing
+    "App": "KC_APP", "Menu": "KC_MENU",
+    # Command keycodes missing (Execute, Help, ..., Find)
+    # Basic Keycodes missing from Print Screen onwards, included as fallback
+    # random Keycodes
+    "RGui": "KC_RGUI", "LGui": "KC_LGUI", "LAlt": "KC_LALT", "RAlt": "KC_RALT", "LShift": "KC_LSFT", "LCtrl": "KC_LCTRL", "RCtrl": "KC_RCTRL",
+    "LShift(": "KC_LSPO", "RShift)": "KC_RSPC",
+    "L1_ENT": "LT(1, KC_ENT)", "LT6_SPC": "LT(6, KC_SPC)",
+    "CPg Dn": "CTL_T(KC_PGDN)", "CPg Up": "CTL_T(KC_PGUP)",
+    "S_Enter": "S(KC_ENT)", "S_Tab": "S(KC_TAB)", "Compose": "KC_ALGR",
+    "RShift": "KC_RSFT",
+    "Vol 0": "KC_MUTE", "Vol +": "KC_VOLU", "Vol -": "KC_VOLD",
+    ">>|": "KC_MNXT", "|<<": "KC_MPRV", "play/ps": "KC_MPLY",
+    "Bri +": "KC_BRIU", "Bri -": "KC_BRID",
+    # Quantum Keycodes
+    "_reset": "RESET", "_debug": "DEBUG", "_eep_re": "EEP_RST",
+    # Audio Keys missing
+    # Backlighting
+    "Led 0": "BL_TOGG", "Led +": "BL_INC", "Led -": "BL_DEC", "Led ~": "BL_BRTG",
+    # Bootmagic missing
+    # Bluetooth
+    "OUT_AUTO": "OUT_AUTO", "OUT_USB": "OUT_USB", "OUT_BT": "OUT_BT",
+    # Layer Switching missing, Lx -> MO(x), Tx -> TG(x)
+    "qwertz": "DF(0)", "neo": "DF(2)",
+    # Mouse Keys
+    "^ Mouse": "KC_MS_U", "v Mouse": "KC_MS_D", "< Mouse": "KC_MS_L",
+    "> Mouse": "KC_MS_R", "Mouse 1": "KC_BTN1", "Mouse 2": "KC_BTN2",
+    "Mouse 3": "KC_BTN3", "Mouse 4": "KC_BTN4", "Mouse 5": "KC_BTN5",
+    "^ Wheel": "KC_WH_U", "v Wheel": "KC_WH_D", "< Wheel": "KC_WH_L",
+    "> Wheel": "KC_WH_R", "acc0": "KC_ACL0", "acc1": "KC_ACL1",
+    "acc2": "KC_ACL2",
+    # Modifiers missinng, add entry for each specific application
+    # Mod-Tap Keys missing, add entry for each specific application
+    "_Sh_swp": "LSFT_T(SH_TG)",
+    # RGB Lighting missing
+    # RGB Matrix Lighting missing
+    # Thermal Printer missing
+    # US ANSI Shifted Symbols done via S(), don't add KC_entries
+    # One Shot Keys missing
+    # Swap Hands
+    "_sp_swp": "SHT(KC_SPC)",
+    # Unicode support (via X()) included implicitly
+    # Switching Unicode Input Modes
+    "UC_win": "UC_M_WC", "UC_lnx": "UC_M_LN", "UC_osx": "UC_M_OS",
+
+    # custom keys
+    "altF4": "LALT(KC_F4)",
+    "Undo": "LCTL(KC_Z)", "Cut": "LCTL(KC_X)", "Copy": "LCTL(KC_C)", "Paste": "LCTL(KC_V)",
+    "< Tab": "LCTL(S(KC_TAB))", "> Tab": "LCTL(KC_TAB)",
+    "Tab x": "LCTL(KC_W)", "Tab n": "LCTL(KC_T)",
+    "Gui Tab":  "LGUI_T(KC_TAB)", "< Gui":  "LGUI_T(KC_LEFT)", "< Gui":  "LGUI_T(KC_RIGHT)",
+    "C+A+Del": "LCTL(LALT(KC_DEL))", "Mic 0": "LCTL(KC_M)",
+    "Power": "KC_PWR", "Sleep": "KC_SLEP",
+
+    # macros
+    "Macro 1": "KC_1", "Macro 2": "KC_2", "Macro 3": "KC_3", "Macro 4": "KC_4", "Macro 5": "KC_5",
+
+    # custom layers
+    "GREEK": "GREEK",
+    "SYMBOL": "SYMBOL",
+    "MATH": "MATH",
+    "GAME": "GAME",
+    "MOUSE": "MOUSE",
+    "NEO": "TG(2)"
+}
+
+# These keys are repeated in all layers.
+# Generate a keymap.c with the python script and refer to the "ASCII"-art comments, to see which positions this concerns.
+# If you want to put different keycodes in these positions for different layers, you need to modify the python script by yourself.
+static = ["NEO", "GREEK", "GREEK", "GREEK", "GREEK", "MOUSE"]
+
+# mutex_layers = {"GREEK": 8, "GAME": 10, "MOUSE": 11}
+# layer_graph = ...
+
+# 0
+qwerty = [
+    ["Tab",     "q",    "w",       "e",       "r",       "t",       "y",       "u",       "i",       "o",       "p",       "["],
+    ["LCtrl",   "a",    "s",       "d",       "f",       "g",       "h",       "j",       "k",       "l",       ";",       "'"],
+    ["LShift(", "z",    "x",       "c",       "v",       "b",       "n",       "m",       ",",       ".",       "/",       "RShift)"],
+    ["MO2",     "LGui", "LAlt",    "TT2",     "LT6_SPC", "TT4",     "Enter",   "Space",   "TT2",     "RAlt",    "RGui",    "RCtrl"],
+    ]
+
+# 1
+colemak = [
+    ["Tab",     "q",    "w",       "f",       "p",       "g",       "j",       "l",       "u",       "y",       ";",       "["],
+    ["LCtrl",   "a",    "r",       "s",       "t",       "d",       "h",       "n",       "e",       "i",       "o",       "'"],
+    ["LShift(", "z",    "x",       "c",       "v",       "b",       "k",       "m",       ",",       ".",       "/",       "RShift)"],
+    ["MO2",     "LGui", "LAlt",    "TT2",     "LT6_SPC", "TT4",     "Enter",   "Space",   "TT2",     "RAlt",    "RGui",    "RCtrl"],
+    ]
+
+# 2
+numpad = [
+    ["`",       "1",    "2",       "3",       "4",       "5",       "6",       "7",       "8",       "9",       "0",       "]"],
+    ["",        "DF0",  "DF1",     "XXX",     "XXX",     "MO3",     "4",       "4",       "5",       "6",       "-",       "="],
+    ["",        "MO5",  "XXX",     "XXX",     "XXX",     "XXX",     "1",       "1",       "2",       "3",       "\\",      ""],
+    ["TG2",     "",     "",        "",        "",        "",        "",        "",        "0",       "",        "",        ""],
+    ]
+
+# 3
+fpad = [
+    ["",        "F1",   "F2",      "F3",      "F4",      "F5",      "F6",      "F7",      "F8",      "F9",      "F10",     "XXX"],
+    ["",        "XXX",  "XXX",     "XXX",     "XXX",     "MO3",     "F4",      "F4",      "F5",      "F6",      "XXX",     "XXX"],
+    ["",        "XXX",  "XXX",     "XXX",     "XXX",     "XXX",     "F1",      "F1",      "F2",      "F3",      "XXX",     ""],
+    ["TG3",     "",     "",        "",        "",        "",        "F10",     "F11",     "F12",     "",        "",        ""],
+    ]
+
+# 4
+movement = [
+    ["",        "Esc",  "Tab x",   "Tab n",   "CPg Dn",  "CPg Dn",  "Pg Down", "Home",    "^ Arrow", "Insert",  "SInsert", "Esc"],
+    ["",        "Caps", "< Gui",   "Gui Tab", "> Gui",   "> Gui",   "< Arrow", "< Arrow", "v Arrow", "> Arrow", "End",     "Pr Scr"],
+    ["",        "XXX",  "XXX",     "XXX",     "CPg Up",  "CPg Up",  "Pg Up",   "XXX",     "v Arrow", "XXX",     "App",     ""],
+    ["TG4",     "",     "",        "",        "",        "",        "",        "",        "",        "",        "",        ""],
+    ]
+
+# 5
+media = [
+    ["",        "XXX",  "play/ps", "Vol +",   "Vol +",   "XXX",     "XXX",     "XXX",     "XXX",     "XXX",     "_reset",  "Power"],
+    ["",        "XXX",  "|<<",     "Vol 0",   ">>|",     "XXX",     "XXX",     "XXX",     "XXX",     "XXX",     "XXX",     "Sleep"],
+    ["",        "XXX",  "XXX",     "Vol -",   "Vol -",   "XXX",     "XXX",     "XXX",     "XXX",     "XXX",     "XXX",     "XXX"],
+    ["TG5",     "",     "",        "",        "",        "",        "",        "",        "",        "",        "",        ""],
+    ]
+
+# 6
+mouse = [
+    ["",        "acc1", "XXX",     "XXX",     "XXX",     "XXX",     "^ Wheel", "< Wheel", "^ Mouse", "> Wheel", "XXX",     "XXX"],
+    ["",        "acc2", "Mouse 3", "Mouse 2", "Mouse 1", "Mouse 1", "< Mouse", "< Mouse", "v Mouse", "> Mouse", "XXX",     "XXX"],
+    ["",        "acc0", "XXX",     "XXX",     "XXX",     "XXX",     "v Wheel", "XXX",     "v Mouse", "XXX",     "XXX",     ""],
+    ["TG6",     "",     "",        "",        "",        "",        "",        "",        "",        "",        "",        ""],
+    ]
+
+layers = [
+    qwerty,
+    colemak,
+    numpad,
+    fpad,
+    movement,
+    media,
+    mouse
+    ]
diff --git a/keyboards/signum/3_0/elitec/keymaps/default/readme.md b/keyboards/signum/3_0/elitec/keymaps/default/readme.md
new file mode 100644 (file)
index 0000000..efd43a9
--- /dev/null
@@ -0,0 +1,27 @@
+# Default layout
+
+Layout created by: [Jan Christoph Ebersbach](https://github.com/jceb)
+
+The `generate_km.py` file automatically generates `keymap.c` with
+additional comments that visually represent the layout.
+
+This layout is maintained as I am using it. You can also use it as a
+starting point to create your own layouts for the Signum 3.0 with
+`km_template.txt` and `generate_km.py`.
+
+# Customization
+
+- Install `python3` and [Sorted Containers
+  Library](http://www.grantjenks.com/docs/sortedcontainers/), `pip
+  install sortedcontainers`.
+
+- Customize `layout.py` to your liking.
+    - Attention 1: keycodes are either translated into symbols and
+      function calls via the `translate()` function in `generate_km.py`
+      or via user-defined mappings in the dictionary `qmk_dict` in
+      `layout.py`. Especially the latter might require adjustment for
+      uncommon qmk features
+    - Attention 2: additional C functions need to be put into
+      `km_template.txt`
+
+Run `./generate_km.py` to regenerate `keymap.c`.
diff --git a/keyboards/signum/3_0/elitec/readme.md b/keyboards/signum/3_0/elitec/readme.md
new file mode 100644 (file)
index 0000000..f60023f
--- /dev/null
@@ -0,0 +1,14 @@
+# Signum 3.0
+
+![Signum 3.0 Top](https://i.redd.it/vl54yl36bpz11.jpg)
+
+An ergonomic 40% PCB.
+
+Keyboard Maintainer: [Troy Fletcher](http://troyfletcher.net/)  
+Hardware available here: [Troy Fletcher](http://troyfletcher.net/keyboard_sales.html)  
+
+Make example for this keyboard (after setting up your build environment):
+
+    make signum/3_0/elitec:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/signum/3_0/elitec/rules.mk b/keyboards/signum/3_0/elitec/rules.mk
new file mode 100644 (file)
index 0000000..d2f987b
--- /dev/null
@@ -0,0 +1,62 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+# Boot Section Size in *bytes*
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+# Bootloader
+#     This definition is optional, and if your keyboard supports multiple bootloaders of
+#     different sizes, comment this out, and the correct address will be loaded
+#     automatically (+60). See bootloader.mk for all options.
+BOOTLOADER = atmel-dfu
+
+# Build Options
+#   comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = lite        # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes  # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes  # Audio control and System control(+450)
+CONSOLE_ENABLE = no    # Console for debug(+400)
+COMMAND_ENABLE = no    # Commands for debug and configuration
+SLEEP_LED_ENABLE = no  # Breathing sleep LED during USB suspend
+NKRO_ENABLE = yes              # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no  # Enable keyboard backlight functionality
+AUDIO_ENABLE = no
+RGBLIGHT_ENABLE = no
+
+UNICODEMAP_ENABLE = yes