diff --git a/keyboards/signum/3_0/elitec/config.h b/keyboards/signum/3_0/elitec/config.h
new file mode 100644
index 000000000..3df07d17f
--- /dev/null
+++ b/keyboards/signum/3_0/elitec/config.h
@@ -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
index 000000000..78195260b
--- /dev/null
+++ b/keyboards/signum/3_0/elitec/elitec.c
@@ -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
index 000000000..1749969de
--- /dev/null
+++ b/keyboards/signum/3_0/elitec/elitec.h
@@ -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
index 000000000..e93dceb13
--- /dev/null
+++ b/keyboards/signum/3_0/elitec/info.json
@@ -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
index 000000000..5147121b3
--- /dev/null
+++ b/keyboards/signum/3_0/elitec/keymaps/default/generate_km.py
@@ -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("//"):
+ 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("//"):
+ 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("//"):
+ 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
index 000000000..d7feba349
--- /dev/null
+++ b/keyboards/signum/3_0/elitec/keymaps/default/keymap.c
@@ -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
index 000000000..47b35ee51
--- /dev/null
+++ b/keyboards/signum/3_0/elitec/keymaps/default/km_template.txt
@@ -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 {
+//
+};
+
+const uint32_t PROGMEM unicode_map[] = {
+//
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+//
+};
+
+/* 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
index 000000000..937fc172c
--- /dev/null
+++ b/keyboards/signum/3_0/elitec/keymaps/default/layout.py
@@ -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
index 000000000..efd43a9bf
--- /dev/null
+++ b/keyboards/signum/3_0/elitec/keymaps/default/readme.md
@@ -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
index 000000000..f60023f6d
--- /dev/null
+++ b/keyboards/signum/3_0/elitec/readme.md
@@ -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
index 000000000..d2f987b20
--- /dev/null
+++ b/keyboards/signum/3_0/elitec/rules.mk
@@ -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