summaryrefslogtreecommitdiff
path: root/users/ericgebhart/base_layers
diff options
context:
space:
mode:
Diffstat (limited to 'users/ericgebhart/base_layers')
-rw-r--r--users/ericgebhart/base_layers/accents.h90
-rw-r--r--users/ericgebhart/base_layers/alt.h150
-rw-r--r--users/ericgebhart/base_layers/base_layers.h58
-rw-r--r--users/ericgebhart/base_layers/beakl.h158
-rw-r--r--users/ericgebhart/base_layers/bepo.h114
-rw-r--r--users/ericgebhart/base_layers/carpalx.h46
-rw-r--r--users/ericgebhart/base_layers/dvorak.h73
-rw-r--r--users/ericgebhart/base_layers/gap.h67
-rw-r--r--users/ericgebhart/base_layers/hands_down.h147
-rw-r--r--users/ericgebhart/base_layers/keymaps.txt300
-rw-r--r--users/ericgebhart/base_layers/maks.h61
-rw-r--r--users/ericgebhart/base_layers/qwerty.h69
-rw-r--r--users/ericgebhart/base_layers/toprows.h56
13 files changed, 1389 insertions, 0 deletions
diff --git a/users/ericgebhart/base_layers/accents.h b/users/ericgebhart/base_layers/accents.h
new file mode 100644
index 0000000000..ad575da65c
--- /dev/null
+++ b/users/ericgebhart/base_layers/accents.h
@@ -0,0 +1,90 @@
+#pragma once
+/*
+ Copyright 2018-2022 Eric Gebhart <e.a.gebhart@gmail.com>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+// probably best to have e and é on different fingers.
+
+// doesnt work, oled displays garbage
+/* #define CARTE_ACCENTED \ */
+/* carte_de_map(" æœêùì ¿ïüöë ", \ */
+/* " àôèéî ûçñß^", \ */
+/* " âöíúí ") */
+
+// need to figure out a better way to display these on the oled.
+#define CARTE_ACCENTED \
+ carte_de_map(" aoeui ?iuoe ", \
+ " aoeei ucnS^", \
+ " aoiúi ")
+
+#define ___ACCENTED___ \
+ LANG_MAP(_AE, _OE, _ECIR, _UGRV, _IGRV, _IQUE, _IIAE, _UIAE, _OIAE, _EIAE, \
+ _AGRV, _OCIR, _EGRV, _EACU, _ICIR, _UCIR, _CCED, _NTIL, _SS, _DCIR, \
+ _AACU, _ODIA, _IACU, _UACU, _IACU, _SPC, _SPC, _SPC , _SPC, _SPC)
+
+
+// A dead key layer, optimized for Most common,
+// western european.
+#define CARTE_MORTE \
+ carte_de_map(" ˝˘̉ ̛ ˙° ", \
+ "/`^´ ¸¨~¤", \
+ " ,ˇ. ˛µ¯")
+
+#define ___MORTE___ \
+ LANG_MAP(_, _DACU, _BREV, _HOKA, _, _, _HORN, _DOTA, _RNGA, _, \
+ _DSLS, _DGRV, _DCIR, _ACUT, _, _, _CEDL, _DIAE, _DTIL, _CURR, \
+ _, _DCMM, _CARN, _DOTB, _, _, _OGON, _DGRK, _MACR, _)
+
+// Just taking a guess and putting the things I know are most
+// used in easy to use places., not sure about ntil and ss, put
+// them in their dvorak spots on the home row.
+
+/* #define CARTE_ACCENTS_MORTE \ */
+/* carte_de_map(" æœêùì ¿`^´ë ", \ */
+/* " àôèéî ¸çñß~", \ */
+/* " âö,úí ¨ˇ° ") */
+
+#define CARTE_ACCENTS_MORTE \
+ carte_de_map(" aoeui ?`^'e ", \
+ " aoeei ,cnS~", \
+ " ao,ui \"^o")
+
+#define ___ACCENTS_MORTE___ \
+ LANG_MAP(_AE, _OE, _ECIR, _UGRV, _IGRV, _IQUE, _DGRV, _DCIR, _ACUT, _EIAE, \
+ _AGRV, _OCIR, _EGRV, _EACU, _ICIR, _CEDL, _CCED, _NTIL, _SS, _DTIL, \
+ _AACU, _OIAE, _DCMM, _UACU, _IACU, _OGON, _DIAE, _CARN, _RNGA, _HORN)
+
+/* // DEAD layer. */
+/* BP_DCIR // ^ (dead) */
+/* BP_ACUT // ´ (dead) */
+/* BP_DGRV // ` (dead) */
+/* BP_CARN // ˇ (dead) */
+/* BP_DSLS // / (dead) */
+/* BP_BREV // ˘ (dead) */
+/* BP_DIAE // ¨ (dead) */
+/* BP_DTIL // ~ (dead) */
+/* BP_MACR // ¯ (dead) */
+/* BP_CEDL // ¸ (dead) */
+/* BP_RNGA // ° (dead) */
+/* BP_DGRK // µ (dead Greek key) */
+/* BP_OGON // ˛ (dead) */
+/* BP_DACU // ˝ (dead) */
+/* BP_DOTA // ˙ (dead) */
+/* BP_CURR // ¤ (dead) */
+/* BP_HORN // ̛ (dead) */
+/* BP_DCMM // , (dead) */
+/* BP_HOKA // ̉ (dead) */
+/* BP_DOTB // ̣ (dead) */
diff --git a/users/ericgebhart/base_layers/alt.h b/users/ericgebhart/base_layers/alt.h
new file mode 100644
index 0000000000..28cf5ab738
--- /dev/null
+++ b/users/ericgebhart/base_layers/alt.h
@@ -0,0 +1,150 @@
+#pragma once
+/*
+ Copyright 2018-2022 Eric Gebhart <e.a.gebhart@gmail.com>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+// e goes on the left thumb
+#define CARTE_MALTRON \
+ carte_de_map(" qpycb vmuzl", \
+ " anisf ctdor", \
+ " ;/jg, .wk-x e")
+
+#define ___MALTRON___ \
+ LANG_MAP(_Q, _P, _Y, _C, _B, _V, _M, _U, _Z, _L, \
+ _A, _N, _I, _S, _F, _D, _T, _D, _O, _R, \
+ TL_SCLN, TL_SLSH, _J, _G, TL_COMM, TL_DOT, _W, _K, TL_MINS, _X)
+
+#define CARTE_EUCALYN \
+ carte_de_map(" /,.fq aoeiu", \
+ " zxcvw mrdyp", \
+ " gtksn bhjl;")
+
+#define ___EUCALYN___ \
+ LANG_MAP(TL_SLSH, TL_COMM, TL_DOT, _F, _Q, _A, _O, _E, _I, _U, \
+ _Z, _X, _C, _V, _W, _M, _R, _D, _Y, _P, \
+ _G, _T, _K, _S, _N, _B, _H, _J, _L, TL_SCLN)
+
+
+
+// RSTHD
+/* j c y f k | z l , u q = */
+/* r s t h d | m n a i o - */
+/* / v g p b | x w . ; ' */
+/* e */
+
+// need a thumb cluster for this.
+// removed = and -, edge keys if you've got them.
+// e goes on left thumb
+
+#define CARTE_RSTHD \
+ carte_de_map(" jcyfk zl,uq", \
+ " rsthd mnaio", \
+ " /vgpb xw.;' e")
+
+#define ___RSTHD___ \
+ LANG_MAP(_J, _C, _Y, _F, _K, _Z, _L, TL_COMM, _U, _Q, \
+ _R, _S, _T, _H, _D, _M, _N, _A, _I, _O, \
+ _/, _V, _G, _P, _B, _X, _W, TL_DOT, TL_SCLN, TL_QUOT)
+
+#define CARTE_HANDS_UP \
+ carte_de_map(" fyou, kwclp", \
+ " hiea. dtsrn", \
+ " bj'z; vmgxq")
+
+#define ___HANDS_UP___ \
+ LANG_MAP(_F, _Y, _O, _U, TL_COMM, _K, _W, _C, _L, _P, \
+ _H, _I, _E, _A, TL_DOT , _D, _T, _S, _R, _N, \
+ _B, _J, TL_QUOT, _Z, TL_SCLN, _V, _M, _G, _X, _Q)
+
+#define CARTE_WHITE \
+ carte_de_map(" vyd,' jmlu-", \
+ " atheb csnoi", \
+ " pkgwq xrf.z")
+
+#define ___WHITE___ \
+ LANG_MAP(_V, _Y, _D, TL_COMM, TL_QUOT, _J, _M, _L, _U, _MINS, \
+ _A, _T, _H, _E, _B, _C, _S, _N, _O, _I, \
+ _P, _K, _G, _W, _Q, _X, _R, _F, TL_DOT, _Z)
+
+
+#define CARTE_ISRT \
+ carte_de_map(" yclmk zfu,'", \
+ " isrtg pneao", \
+ " qvwdj bh/.x")
+
+#define ___ISRT___ \
+ LANG_MAP(_Y, _C, _L, _M, _K, _Z, _F, _U, TL_COMM, TL_QUOT, \
+ _I, _S, _R, _T, _G, _P, _N, _E, _A, _O, \
+ _Q, _V, _W, _D, _J, _B, _H, TL_SLSH, TL_DOT, _X)
+
+#define CARTE_SOUL \
+ carte_de_map(" qwldp kmuy;", \
+ " srtg fneio", \
+ " zxcvj bh,./")
+
+#define ___SOUL___ \
+ LANG_MAP(_Q, _W, _L, _D, _P, _K, _M, _U, _Y, TL_SCLN, \
+ _A, _S, _R, _T, _G, _F, _N, _E, _I, _O, \
+ _Z, _X, _C, _V, _J, _B, _H, TL_COMM, TL_DOT, TL_SLSH)
+
+#define CARTE_NIRO \
+ carte_de_map(" qwudp jfyl;", \
+ " asetg hniro", \
+ " zxcvb km,./")
+
+#define ___NIRO___ \
+ LANG_MAP(_Q, _W, _U, _D, _P, _J, _F, _Y, _L, TL_SCLN, \
+ _A, _S, _E, _T, _G, _H, _N, _I, _R, _O, \
+ _Z, _X, _C, _V, _B, _K, _M, TL_COMM, TL_DOT, TL_SLSH)
+
+#define CARTE_ASSET \
+ carte_de_map(" qwjfg ypul;", \
+ " asetd hnior", \
+ " zxcvb km,./")
+
+#define ___Asset___ \
+ LANG_MAP(_Q, _W, _J, _F, _G, _Y, _P, _U, _L, TL_SCLN, \
+ _A, _S, _E, _T, _D, _H, _N, _I, _O, _R, \
+ _Z, _X, _C, _V, _B, _K, _M, TL_COMM, TL_DOT, TL_SLSH)
+
+#define CARTE_WHORF \
+ carte_de_map("flhdm vwou,", \
+ "srntk gyaei", \
+ "xjbzq pc';. ")
+
+#define ___WHORF___ \
+ LANG_MAP(_F, _L, _H, _D, _M, _V, _W, _O, _U, TL_COMM, \
+ _S, _R, _N, _T, _K, _G, _Y, _A, _E, _I, \
+ _X, _J, _B, _Z, _Q, _P, _C, TL_QUOT, TL_SCLN, TL_DOT )
+
+#define CARTE_WHORF6 \
+ carte_de_map("vlhkj gwou.", \
+ "srntk ydeai", \
+ "xqbfz pc',; ")
+
+#define ___WHORF6___ \
+ LANG_MAP(_V, _L, _H, _D, _M, _G, _W, _O, _U, TL_DOT, \
+ _S, _R, _N, _T, _K, _Y, _D, _E, _A, _I, \
+ _X, _Q, _B, _F, _Z, _P, _C, TL_QUOT, TL_COMM, TL_SCLN )
+
+/* rsht/iena */
+/* jfldv @uopq */
+/* zrshtg .iena: */
+/* xcmwk /y,b? */
+
+// pine
+/* y l r d w j m o u , */
+/* c s n t g p h a e i */
+/* x z q v k b f ' / . */
diff --git a/users/ericgebhart/base_layers/base_layers.h b/users/ericgebhart/base_layers/base_layers.h
new file mode 100644
index 0000000000..ee784473fb
--- /dev/null
+++ b/users/ericgebhart/base_layers/base_layers.h
@@ -0,0 +1,58 @@
+#pragma once
+/*
+ Copyright 2018-2022 Eric Gebhart <e.a.gebhart@gmail.com>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "keycodes.h"
+#include "lang_map.h"
+#include "oled_stuff.h"
+
+
+// an empty template.
+
+/* #define CARTE_EMPTY \ */
+/* carte_de_map(" ", \ */
+/* " ", \ */
+/* " ") */
+/* */
+/* #define ___EMPTY___ \ */
+/* LANG_MAP(_, _, _, _, _, _, _, _, _, _, \ */
+/* _, _, _, _, _, _, _, _, _, _, \ */
+/* _, _, _, _, _, _, _, _, _, _) */
+
+
+// dvorak, capewell-dvorak, ahei, and boo.
+#include "dvorak.h"
+//qwerty, workman, norman,
+#include "qwerty.h"
+// Colemak, halmak, minimak, etc.
+#include "maks.h"
+// eucalyn, maltron
+#include "alt.h"
+// mtgap, ctgap, apt
+#include "gap.h"
+// some hands down.
+#include "hands_down.h"
+// some beakls.
+#include "beakl.h"
+// bepo, optimot, beakl19bis, godox-fr?.
+#include "bepo.h"
+// some carpalxs.
+#include "carpalx.h"
+// The symbol, number function rows for all the above.
+#include "toprows.h"
+// some layers with accents and dead keys.
+#include "accents.h"
diff --git a/users/ericgebhart/base_layers/beakl.h b/users/ericgebhart/base_layers/beakl.h
new file mode 100644
index 0000000000..58b5fa4371
--- /dev/null
+++ b/users/ericgebhart/base_layers/beakl.h
@@ -0,0 +1,158 @@
+#pragma once
+/*
+ Copyright 2018-2022 Eric Gebhart <e.a.gebhart@gmail.com>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+// beakl, balanced effort key layout.
+// Beakl 15 and 19 are somewhat more related.
+// Beakl-wi is the latest. It feels a little bit more like a system.
+
+
+// Remember the - and ; outside pinky keys.
+// Or use the 6 size.
+// Both are on the symbol layer too. So you
+// wont lose them at least.
+// KC_BK_COMM, KC_BK_QUOT, KC_BK_DOT - Beakl->Qwerty
+// BP_BK_COMM, BP_BK_QUOT, BP_BK_DOT - Beakl->Bepo
+// take care of the different shifted chars.
+
+
+/* BEAKL 27 (main layer): */
+/* // altered shifted pairs: dot = .` comma = ,? dquot = !" */
+/* Alt target is BK2 */
+
+/* 32104 76598 */
+/* qhoux gcmrv */
+/* yiea. dstnb */
+/* j",k' wflpz */
+
+/* BEAKL 27 (shift layer): */
+/* !@$#% ^(*)& */
+/* QHOUX GCMRV */
+/* YIEA` DSTNB */
+/* J!?K' WFLPZ */
+
+
+#define CARTE_BEAKL27 \
+ carte_de_map(" qhoux gcmrz ", \
+ " yiea. dstnb ", \
+ " j\",k' wflpv ")
+
+// Alt target is BK
+#define ___BEAKL27___ \
+ LANG_MAP(_Q, _H, _O, _U, _X, _G, _C, _M, _R, _Z, \
+ _Y, _I, _E, _A, TL_DOT, _D, _S, _T, _N, _B, \
+ _J, TL_EXLM, TL_COMM, _K, TL_QUOT, _W, _F, _L, _P, _V)
+
+/* BEAKL 15 (main layer): */
+// altered shifted pairs: quot = '` comma = ,! dot = .@
+/* 40123 76598 */
+#define CARTE_BEAKL15 \
+ carte_de_map(" qhoux gcrfz ", \
+ " yiea. dstnb ", \
+ " j/,k' wmlpv ")
+
+// Alt target is BK
+#define ___BEAKL15___ \
+ LANG_MAP(_Q, _H, _O, _U, _X, _G, _C, _R, _F, _Z, \
+ _Y, _I, _E, _A, TL_DOT, _D, _S, _T, _N, _B, \
+ _J, _SLSH, TL_COMM, _K, TL_QUOT, _W, _M, _L, _P, _V)
+
+/* BEAKL 19 */
+// Beakl 19. scores better than 15, better in french also.
+// Both are lots better than dvorak or bepo.
+
+/* same symbols and keypad as 15 */
+/* number row is different */
+/* 32104 76598 */
+
+// Alt target is BK
+#define CARTE_BEAKL19 \
+ carte_de_map(" q.ouj wdnm, ", \
+ " haeik gsrtp ", \
+ " z'/yx bclfv ")
+
+#define ___BEAKL19___ \
+ LANG_MAP(_Q, _DOT, _O, _U, _J, _W, _D, _N, _M, TL_COMM, \
+ _H, _A, _E, _I, _K, _G, _S, _R, _T, _P, \
+ _Z, _QUOT, _SLSH, _Y, _X, _B, _C, _L, _F, _V)
+
+//BEAKL 19bis - original.
+// the é and è were simply added for analysis not real use.
+// even so, this layout scores well for french, better than
+// bepo and mtgap
+/* qyouz wdnck */
+/* -hiea, gtrsp; */
+/* èj'é.x vmlfb */
+
+// A 3x12
+//BEAKL 19bis mod z.
+// French optimised with some english.
+// This version rearranges things a little based on fequency.
+// Since it needs 3x12, I filled in the corners and removed ;.
+// Leaving y where it is. the o and the e might cause sfbs.
+// Put é on a different finger from e.
+// swap z, e's, add à, ^, and ê, swap ; for -.
+// it might be beneficial to swap w and à, as à is much more frequent than w
+#define CARTE_BEAKL19bis \
+ carte_de_map(" àqyoué wdnck^ ", \
+ " ;hiea, gtrsp- ", \
+ " zj'è.x vmlfbê ")
+
+#define ___BEAKL19bis_3x12___ \
+ LANG_MAP6( \
+ _AGRV, _Q, _Y, _O, _U, _EACU, _W, _D, _N, _C, _K, _DCIR, \
+ _SCLN, _H, _I, _E, _A, _COMM, _G, _T, _R, _S, _P, _MINS, \
+ _Z, _J, _QUOT, _EGRV, _DOT, _X, _V, _M, _L, _F, _B, _ECIR)
+
+
+// Beakl Wi. This is the most current beakl this size. 18/01/2022.
+// Nothing on the 6th outer columns but layer toggle buttons. All 6.
+// altered shifted pairs: dot = .` comma = ,~ colon = :;
+// i is on the left thumb.
+/* ;you- ctrsv */
+/* qheaw gdnmz */
+/* j,.k' bplfx */
+/* i */
+
+#define CARTE_BEAKLWI \
+ carte_de_map(" ;you- ctrsv ", \
+ " qheaw gdnmz ", \
+ " j,.k' bplfx i")
+
+#define ___BEAKLWI___ \
+ LANG_MAP(TL_COLN, _Y, _O, _U, _MINS, _C, _T, _R, _S, _V, \
+ _Q, _H, _E, _A, _W, _G, _D, _N, _M, _Z, \
+ _J, TL_COMM, TL_DOT, _K, _QUOT, _B, _P, _L, _F, _X)
+
+// Thumbs.
+#define ___BEAKLWI_CRKBD_THUMBS___ LT_ESC, LT_I, LT_TAB, LT_ENT, LT_SPC, LT_BSPC
+
+// My version, loses KC_mins, because it's easier on my symbol layer.
+// put I in it's dvorak spot instead of thumbs, move W up to make room for I.
+// I'd rather have w and i on different fingers. One domino...
+
+// beakl-wi - mod iw-
+
+#define CARTE_BEAKLWIa \
+ carte_de_map(" ;youw ctrsv ", \
+ " qheai gdnmz ", \
+ " j,.k' bplfx ")
+
+// Alt target is BKW
+#define ___BEAKLWIa___ \
+ LANG_MAP(TL_COLN, _Y, _O, _U, _W, _C, _T, _R, _S, _V, \
+ _Q, _H, _E, _A, _I, _G, _D, _N, _M, _Z, \
+ _J, TL_COMM, TL_DOT, _K, _QUOT, _B, _P, _L, _F, _X)
diff --git a/users/ericgebhart/base_layers/bepo.h b/users/ericgebhart/base_layers/bepo.h
new file mode 100644
index 0000000000..64f56ec9ab
--- /dev/null
+++ b/users/ericgebhart/base_layers/bepo.h
@@ -0,0 +1,114 @@
+#pragma once
+/*
+ Copyright 2018-2022 Eric Gebhart <e.a.gebhart@gmail.com>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+// Maps based on BEPO Mostly 3x12
+
+// BEAKL 19bis - English with French optimisations.
+// Least used letters in french xzykw QJÀ are fairly high.
+// XZ are good choices for pushing out, from english and french,
+// or using chords in both languages.
+
+// Note: The percentages came from different sources so do not
+// match between languages.
+// French
+/* Q 0.89 % */
+/* J 0.71 % */
+/* À 0.54 % */
+/*-------------*/
+/* X 0.42 % */
+/* È 0.35 % */
+/* Ê 0.24 % */
+/* Z 0.21 % */
+/* Y 0.19 % */
+/* K 0.16 % */
+/* Ô 0.07 % */
+/* Û 0.05 % */
+/* W 0.04 % */
+
+/* Least used letters in english. */
+/* X 0.2902% 1.48 */
+/* Z 0.2722% 1.39 */
+/* J 0.1965% 1.00 */
+/* Q 0.1962% (1) */
+
+
+// OPtimot by @Pyjam.
+/* àjoéb fdl’qxz */
+/* aieu, ptsrn^ç */
+/* êkyè.w gcmhvz */
+
+// -- rearranged z, and ç to get 3x12
+#define CARTE_OPTIMOT \
+ carte_de_map(" çàjoéb fdl’qx ", \
+ " aieu, ptsrn^ ", \
+ " êkyè.w gcmhvz ")
+
+#define ___OPTIMOT_3x12___ \
+ LANG_MAP6( \
+ _CCED, _AGRV, _J, _O, _EACU, _B, _F, _D, _L, _QUOT, _Q, _X, \
+ _TAB, _A, _I, _E, _U, _COMM, _P, _T, _S, _R, _N, _DCIR, \
+ _ECIR, _K, _Y, _EGRV, _DOT, _W, _G, _C, _M, _H, _V, _Z)
+
+// no z or x. combos exist for them.
+#define CARTE_OPTIMOT_COMPACT \
+ carte_de_map(" àjoéb fdl’q ", \
+ " aieu, ptsrn ", \
+ " kyè.w gcmhv ")
+
+#define ___OPTIMOT_3x10___ \
+ LANG_MAP6( \
+ _AGRV, _J, _O, _EACU, _B, _F, _D, _L, _QUOT, _Q, \
+ _A, _I, _E, _U, _COMM, _P, _T, _S, _R, _N, \
+ _K, _Y, _EGRV, _DOT, _W, _G, _C, _M, _H, _V,)
+
+// Maybe Use this for C
+//BP_C_CCED = MT(BP_CCED, BP_C)
+
+// BEPO
+
+// No quot, à or ç
+/* bépoè vdljz */
+/* auie, ctsrn */
+/* myx.k qghfw */
+#define CARTE_BEPOc \
+ carte_de_map(" bépoè vdljz", \
+ " auie, ctsrn", \
+ " myx.k qghfw")
+
+#define ___BEPOc_3x10___ \
+ LANG_MAP( \
+ _B, _EACU, _P, _O, _EGRV, _V, _D, _L, _J, _Z, \
+ _A, _U, _I, _E, _COMM, _C, _T, _S, _R, _N, \
+ _M, _Y, _X, _DOT, _K, _Q, _G, _H, _F, _W)
+
+
+#define CARTE_BEPO \
+ carte_de_map(" çbépoè ^vdljz ", \
+ " auie, ctsrnm ", \
+ " êàyx.k ’qghfw ")
+
+#define ___BEPO_3x12___ \
+ LANG_MAP6(_CCED, _B, _EACU, _P, _O, _EGRV, _DCIR, _V, _D, _L, _J, _Z, \
+ _TAB, _A, _U, _I, _E, _COMM, _C, _T, _S, _R, _N, _M, \
+ _ECIR, _AGRV, _Y, _X, _DOT, _K, _QUOT, _Q, _G, _H, _F, _W)
+
+// dont like this one much.
+/* #define ___GODOX_3x12___ \ */
+/* LANG_MAP6(___, _AGRV, _B, _EACU, _dot, _mins, _DCIR, _V, _L, _M, _X, _CCED, \ */
+/* ___, _O, _U, _I, _A, _J, _G, _T, _S, _N, _R, _F, \ */
+/* ___, _Q, _Y, _EGRV, _P, _K, _W, _D, _UP, _H, _C, _Z) */
+/* // E goes on left thumb. */
diff --git a/users/ericgebhart/base_layers/carpalx.h b/users/ericgebhart/base_layers/carpalx.h
new file mode 100644
index 0000000000..ae2ed708a5
--- /dev/null
+++ b/users/ericgebhart/base_layers/carpalx.h
@@ -0,0 +1,46 @@
+#pragma once
+/*
+ Copyright 2018-2022 Eric Gebhart <e.a.gebhart@gmail.com>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+#define CARTE_CARPALX_QFMLWY \
+ carte_de_map(" qfmlw yuobj", \
+ " dstnr iaeh;", \
+ " zvgcx pk,./")
+
+#define ___CARPALX_QFMLWY___ \
+ LANG_MAP(_Q, _F, _M, _L, _W, _Y, _U, _O, _B, _J, \
+ _D, _S, _T, _N, _R, _I, _A, _E, _H, TL_SCLN, \
+ _Z, _V, _G, _C, _X, _P, _K, TL_COMM, TL_DOT, TL_SLSH)
+
+#define CARTE_CARPALX_QFMLWB \
+ carte_de_map(" qgmlw byuv;", \
+ " dstnr iaeoh", \
+ " zxcfj kp,./")
+
+#define ___CARPALX_QGMLWB___ \
+ LANG_MAP(_Q, _G, _M, _L, _W, _B, _Y, _U, _V, TL_SCLN, \
+ _D, _S, _T, _N, _R, _I, _A, _E, _O, _H, \
+ _Z, _X, _C, _F, _J, _K, _P, TL_COMM, TL_DOT, TL_SLSH)
+
+#define CARTE_CARPALX_QGMLWY \
+ carte_de_map(" qgmlw yfub;", \
+ " dstnr iaeoh", \
+ " zxcvj kp,./")
+
+#define ___CARPALX_QGMLWY___ \
+ LANG_MAP(_Q, _G, _M, _L, _W, _Y, _F, _U, _B, TL_SCLN, \
+ _D, _S, _T, _N, _R, _I, _A, _E, _O, _H, \
+ _Z, _X, _C, _V, _J, _K, _P, TL_COMM, TL_DOT, TL_SLSH)
diff --git a/users/ericgebhart/base_layers/dvorak.h b/users/ericgebhart/base_layers/dvorak.h
new file mode 100644
index 0000000000..8deee2005c
--- /dev/null
+++ b/users/ericgebhart/base_layers/dvorak.h
@@ -0,0 +1,73 @@
+#pragma once
+/*
+ Copyright 2018-2022 Eric Gebhart <e.a.gebhart@gmail.com>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#define CARTE_DVORAK \
+ carte_de_map(" ',.py fgcrl ", \
+ " aoeui dhtns ", \
+ " ;qjkx bmwvz ")
+
+#define ___DVORAK___ \
+ LANG_MAP(TL_QUOT, TL_COMM, TL_DOT, _P, _Y, _F, _G, _C, _R, _L, \
+ _A, _O, _E, _U, _I, _D, _H, _T, _N, _S, \
+ TL_SCLN, _Q, _J, _K, _X, _B, _M, _W, _V, _Z)
+
+#define CARTE_DVORAK_RLC_IU \
+ carte_de_map(" ',.py fgrlc ", \
+ " aoeiu dhtns ", \
+ " ;qjkx bmwvz ")
+
+#define ___DVORAK_RLC_IU___ \
+ LANG_MAP(TL_QUOT, TL_COMM, TL_DOT, _P, _Y, _F, _G, _R, _L, _C, \
+ _A, _O, _E, _I, _U, _D, _H, _T, _N, _S, \
+ TL_SCLN, _Q, _J, _K, _X, _B, _M, _W, _V, _Z)
+
+#define CARTE_BOO \
+ carte_de_map(" ,.ucv qfdly", \
+ " aoesg bntri", \
+ " ;x'wz phmkj")
+
+#define ___BOO___ \
+ LANG_MAP( TL_COMM, TL_DOT, _U, _C, _V, _Q, _F, _D, _L, _Y, \
+ _A, _O, _E, _S, _G, _B, _N, _T, _R, _I, \
+ TL_SCLN, _X, TL_QUOT, _W, _Z, _P, _H, _M, _K, _J)
+
+#define CARTE_CAPEWELL_DVORAK \
+ carte_de_map( " ',.py qfgrk", \
+ " oaeiu dhtns", \
+ " zxcvj lmwb;")
+
+#define ___CAPEWELL_DVORAK___ \
+ LANG_MAP(TL_QUOT, TL_COMM, TL_DOT, _P, _Y, _Q, _F, _G, _R, _K, \
+ _O, _A, _E, _I, _U, _D, _H, _T, _N, _S, \
+ _Z, _X, _C, _V, _J, _L, _M, _W, _B, TL_SCLN)
+
+//ahei - derived from dvorak.
+// x moved to left side. j on pinky.
+/*;pouyq gdlm/= */
+/* ahei, fstnr- */
+/* j'k.x bcwvz */
+
+#define CARTE_AHEI \
+ carte_de_map("pouyq gdlm/", \
+ "ahei, fstnr", \
+ "j'k.x bcwvz")
+
+#define ___AHEI___ \
+LANG_MAP(_P, _O, _U, _Y, _Q, _G, _D, _L, _M, TL_SLSH, \
+ _A, _H, _E, _I, TL_COMM, _F, _S, _T, _N, _R, \
+ _J, TL_QUOT, _K, TL_DOT, _X, _B, _C, _W, _V, _Z)
diff --git a/users/ericgebhart/base_layers/gap.h b/users/ericgebhart/base_layers/gap.h
new file mode 100644
index 0000000000..76310bc6f9
--- /dev/null
+++ b/users/ericgebhart/base_layers/gap.h
@@ -0,0 +1,67 @@
+#pragma once
+/*
+ Copyright 2018-2022 Eric Gebhart <e.a.gebhart@gmail.com>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+// an alternate I found.
+/* Reference: MTGAP */
+/* y p o u - | b d l c k j */
+/* i n e a , | m h t s r v */
+/* ( " ' . _ | ) f w g x */
+/* z */
+
+#define CARTE_MTGAP \
+ carte_de_map(" ypouj kdlcw", \
+ " inea, mhtsr", \
+ " qz/.; bfgvx")
+
+#define ___MTGAP___ \
+ LANG_MAP(_Y, _P, _O, _U, _J, _K, _D, _L, _C, _W, \
+ _I, _N, _E, _A, TL_COMM, _M, _H, _T, _S, _R, \
+ _Q, _Z, TL_SLSH, TL_DOT, TL_SCLN, _B, _F, _G, _V, _X)
+
+/* //APT v3*/
+/* https://github.com/Apsu/APT */
+#define CARTE_APT \
+ carte_de_map(" wgdfb qluoy", \
+ " rsthk jneai; ", \
+ " xcmpv z,.'/")
+
+#define ___APT___ \
+ LANG_MAP(_W, _G, _D, _F, _B, _Q, _L, _U, _O, _Y, \
+ _R, _S, _T, _H, _K, _J, _N, _E, _A, _I, TL_SCLN, \
+ _X, _C, _M, _P, _V, _Z, TL_COMM, TL_DOT, TL_QUOT, TL_SLSH)
+
+
+#define CARTE_CTGAP \
+ carte_de_map(" vplcf kuoyj", \
+ " rntsd 'aeih", \
+ " zbmgw x,.;q")
+
+#define ___CTGAP___ \
+ LANG_MAP(_V, _P, _L, _C, _F, _K, _U, _O, _Y, _J, \
+ _R, _N, _T, _S, _D, TL_QUOT, _A, _E, _I, _H, \
+ _Z, _B, _M, _G, _W, _X, TL_COMM, TL_DOT, TL_SCLN, _Q)
+
+#define CARTE_CANARY \
+ carte_de_map( " wlypb zfou'", \
+ " crstg mneia", \
+ " qjvd kxh/,.")
+
+#define ___CANARY___ \
+ LANG_MAP(_W, _L, _Y, _P, _B, _Z, _F, _O, _U, TL_QUOT, \
+ _C, _R, _S, _T, _G, _M, _N, _E, _I, _A, \
+ _Q, _J, _V, _D, _K, _X, _H, TL_SLSH, TL_COMM, TL_DOT)
diff --git a/users/ericgebhart/base_layers/hands_down.h b/users/ericgebhart/base_layers/hands_down.h
new file mode 100644
index 0000000000..0841a358d2
--- /dev/null
+++ b/users/ericgebhart/base_layers/hands_down.h
@@ -0,0 +1,147 @@
+#pragma once
+/*
+ Copyright 2018-2022 Eric Gebhart <e.a.gebhart@gmail.com>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+// https://sites.google.com/alanreiser.com/handsdown/home
+
+// The only 3x12 layout. The rest are 3x10.
+#define CARTE_HD_NEU \
+ carte_de_map( " wfmpv /.q\"'z", \
+ " rsntb ,aeihj", \
+ " xcldg -uoykK")
+
+#define ___HD_NEU___ \
+ LANG_MAP(_SML_NAV, _W, _F, _M, _P, _V , TL_SLSH, TL_DOT, _Q, TL_DQUO, TL_QUOT, _Z, \
+ _TAB, _R, _S, _N, _T, _B , TL_COMM, _A, _E, _I, _H, _J, \
+ _OS_ACCENT, _X, _C, _L, _D, _G , TL_MINS, _U, _O, _Y, _K, _SML_KEYPAD)
+
+
+// modified to fit 3x10.
+#define CARTE_HD_NEU_NARROW \
+ carte_de_map(" xcldb zuoyq", \
+ " rsntg ,aeih", \
+ " wfmpv ;./jk")
+
+#define ___HD_NEU_NARROW___ \
+ LANG_MAP(_X, _C, _L, _D, _B, _Z, _U, _O, _Y, _Q, \
+ _R, _S, _N, _T, _G, TL_COMM, _A, _E, _I, _H, \
+ _W, _F, _M, _P, _V, _SCLN, TL_DOT, TL_SLSH, _J, _K)
+
+
+#define CARTE_HD_REF \
+ carte_de_map(" qchpv kyoj/", \
+ " rsntg wueia", \
+ " xmldb zf',.")
+
+#define ___HD_REF___ \
+ LANG_MAP(_Q, _C, _H, _P, _V, _K, _Y, _O, _J, TL_SLSH, \
+ _R, _S, _N, _T, _G, _W, _U, _E, _I, _A, \
+ _X, _M, _L, _D, _B, _Z, _F, TL_QUOT, TL_COMM, TL_DOT )
+
+
+// All of these have a consonant or vowel on the thumb keys.
+
+/* alt shift keys "? '! dash and elan */
+/* (< {[ - elan */
+/* dash has thumbs of ,; and .: */
+/* dash and the rest get these too. */
+/* alt shifts ;: .& /\* '? "! ,| -+ */
+/* COMBOS - z = jg, z=vg, q=uk, q=mp. */
+
+
+// no z or q, use combos.
+#define CARTE_HD_TITANIUM \
+ carte_de_map(" jgmpv ;./\"' ", \
+ " csntw ,aeih ", \
+ " xfldb -uoyk r")
+
+#define ___HD_TITANIUM___ \
+ LANG_MAP(_J, _G, _M, _P, _V, TL_SCLN, TL_DOT, TL_SLSH, TL_DQUO, TL_QUOT, \
+ _C, _S, _N, _T, _W , TL_COMM, _A, _E, _I, _H, \
+ _X, _F, _L, _D, _B , TL_MINS, _U, _O, _Y, _K)
+
+
+#define CARTE_HD_GOLD \
+ carte_de_map(" jgmpv ;./\"' ", \
+ " rsndb ,aeih ", \
+ " xflcw -uoyk t")
+
+#define ___HD_GOLD___ \
+ LANG_MAP(_J, _G, _M, _P, _V, TL_SCLN, TL_DOT, TL_SLSH, TL_DQUO, TL_QUOT, \
+ _R, _S, _N, _D, _B , TL_COMM, _A, _E, _I, _H, \
+ _X, _F, _L, _C, _W , TL_MINS, _U, _O, _Y, _K)
+/* t, ␣ */
+
+/* jz pq alt shifts ;: .& /\* '? "! ,| -+ */
+
+#define CARTE_HD_PLATINUM \
+ carte_de_map( "jghpv ;./'\"", \
+ "rsntb ,aeic", \
+ "xfmdk -uowy l")
+/* l ␣ */
+
+#define ___HD_PLATINUM___ \
+ LANG_MAP(_J, _G, _H, _P, _V, TL_SCLN, TL_DOT, TL_SLSH, TL_QUOT, TL_DQUO, \
+ _R, _S, _N, _T, _B, TL_COMM, _A, _E, _I, _C, \
+ _X, _F, _M, _D, _K, TL_MINS, _U, _O, _W, _Y)
+
+#define CARTE_HD_SILVER \
+ carte_de_map("jgmpv ;./'\"", \
+ "rshtb ,aeic", \
+ "xfldk -uowy n")
+/* n ␣ */
+
+#define ___HD_SILVER___ \
+ LANG_MAP(_J, _G, _M, _P, _V, TL_SCLN, TL_DOT, TL_SLSH, TL_QUOT, TL_DQUO, \
+ _R, _S, _H, _T, _B, TL_COMM, _A, _E, _I, _C, \
+ _X, _F, _L, _D, _K, TL_MINS, _U, _O, _W, _Y)
+
+#define CARTE_HD_BRONZE \
+ carte_de_map("jgmpv ;./'\"", \
+ "rsntb ,aeic", \
+ "xfldk -uowy h")
+/* h ␣ */
+
+#define ___HD_BRONZE___ \
+ LANG_MAP(_J, _G , _M, _P, _V , TL_SCLN, TL_DOT, TL_SLSH , TL_QUOT, TL_DQUO, \
+ _R, _S, _N, _T, _B , TL_COMM, _A, _E, _I, _C, \
+ _X, _F, _L, _D, _K , TL_MINS, _U, _O, _W, _Y)
+
+#define CARTE_HD_ELAN \
+ carte_de_map("vghpk /({'\"", \
+ "rsntf jaeci", \
+ "xmldb -uowy")
+/* ,; .: ␣ ⏎ */
+
+/* vz g h p kq /\* (< {[ '! "? */
+/* TL_COMM; TL_DOT: _␣ ⏎ */
+#define ___HD_ELAN___ \
+ LANG_MAP(_V, _G, _H, _P, _K, TL_SLSH, TL_LPRN, TL_LCBR, TL_QUOT, TL_DQUO, \
+ _R, _S, _N, _T, _F, _J, _A, _E, _C, _I, \
+ _X, _M, _L, _D, _B, TL_MINS, _U, _O, _W, _Y)
+
+
+#define CARTE_HD_DASH \
+ carte_de_map("jgmpv ;.'\"/", \
+ "rsntb ,haoi", \
+ "xcldw -fuky e")
+ /* e ␣ */
+
+#define ___HD_DASH___ \
+ LANG_MAP(_J, _G, _M, _P, _V , TL_SCLN, TL_DOT, TL_QUOT, TL_DQUO, TL_SLSH, \
+ _R, _S, _N, _T, _B , TL_COMM, _H, _A, _O, _I, \
+ _X, _C, _L, _D, _W , TL_MINS, _F, _U, _K, _Y)
diff --git a/users/ericgebhart/base_layers/keymaps.txt b/users/ericgebhart/base_layers/keymaps.txt
new file mode 100644
index 0000000000..56dc7d79e3
--- /dev/null
+++ b/users/ericgebhart/base_layers/keymaps.txt
@@ -0,0 +1,300 @@
+/*
+This file can be commented by blocks or single lines using //
+Blank lines are ignored
+*/
+/*
+Bigram frequencies in stats.csv
+*/
+
+[keys]
+L21 L22 L23 L24 L25 L26 R26 R25 R24 R23 R22 R21
+L31 L32 L33 L34 L35 L36 R36 R35 R34 R33 R32 R31
+L41 L42 L43 L44 L45 L46 R46 R45 R44 R43 R42 R41
+
+[weights]
+5.0 3.6 2.4 1.8 2.2 3.5 3.5 2.2 1.8 2.4 3.6 5.0
+4.0 1.6 1.2 1.0 1.0 3.0 3.0 1.0 1.0 1.2 1.6 4.0
+5.0 3.4 2.6 2.2 1.8 4.0 4.0 1.8 2.2 2.6 3.4 5.0
+
+/*
+Weights should:
+- limit weak fingers
+- limit bottom row
+- increase home row
+- limit finger travel distance
+
+https://colemakmods.github.io/mod-dh/compare.html
+*/
+
+[penalties]
+ ,same_row,row_jump1,row_jump2
+ii, 2.5, 3.5, 4.5 // same finger
+im, 0.5, 1.0, 2.0
+ir, 0.5, 0.8, 1.5
+ip, 0.5, 0.8, 1.1
+mi, -1.5, -0.5, 1.5 // inward roll
+mm, 2.5, 3.5, 4.5 // same finger
+mr, 0.5, 1.0, 2.0
+mp, 0.5, 0.8, 1.5
+ri, -1.5, -0.5, 1.5 // inward roll
+rm, -2.0, -0.5, 1.2 // inward roll
+rr, 2.5, 3.5, 4.5 // same finger
+rp, 1.0, 1.5, 2.5
+pi, -1.0, 0.0, 1.0 // inward roll
+pm, -1.0, 0.0, 1.5 // inward roll
+pr, -1.0, 0.0, 1.5 // inward roll
+pp, 3.0, 4.0, 5.5 // same finger
+
+/*
+Only apply if not the same letter, and both letters on the same hand.
+
+i, m, r, and p refer to the fingers (index, middle, ring, pinky)
+The columns refer to how many rows separate the two keys
+
+Penalties should:
+- limit same finger typing (except same key twice)
+- balance hands
+- favor inward rolling
+(last 2 in opposition with each other)
+*/
+
+[layouts]
+
+>>Qwerty
+# q w e r t y i o u p #
+é a s d f g h j k l ; '
+è z x c v b n m , . / -
+
+>>Azerty
+è a z e r t y u i o p ^
+' q s d f g h j k l m ù
+é w x c v b n , . : ! -
+
+>>Qwertz
+# q w e r t z u i o p ü
+é a s d f g h j k l ö ä
+è y x c v b n m , . - '
+
+>>Bépo 40%
+# b é p o è ^ v d l j z
+- a u i e , c t s r n m
+ç à y x . k ' q g h f w
+
+// https://github.com/TeXitoi/keyberon#whats-the-layout
+>>Bépo keyberon
+# b é p o è ^ v d l j z
+w a u i e , c t s r n m
+- à y x . k ' q g h f ç
+
+>>Dvorak
+- ' , . p y f g c r l #
+é a o e u i d h t n s #
+è ; q j k x b m w v z #
+
+>>Colemak
+# q w f p g j l u y ; #
+é a r s t d h n e i o '
+è z x c v b k m , . / -
+
+>>Colemak DH
+# q w f p b j l u y ; #
+é a r s t g m n e i o '
+è z x c d v k h , . / -
+
+>>Colemak DH mod
+# q w f p b j l u y é è
+# a r s t g m n e i o -
+# z x c d v k h , . ' /
+
+>>Workman
+# q d r w b j f u p ; #
+é a s h t g y n e o i '
+è z x m c v k l , . / -
+
+>>Norman
+# q w d f k j u r l ; #
+é a s e t g y n i o h '
+è z x c v b p m , . / -
+
+>>Carpalx
+# q g m l w b y u v ; é
+è d s t n r i a e o h '
+# z x c f j k p , . / -
+
+>>Neo
+- x v l c w k h g f q ß
+é u i a e o s n r t d y
+è ü ö ä p z b m , . j '
+
+// http://mkweb.bcgsc.ca/carpalx/?full_optimization
+>>qgmlwyfub
+# q g m l w y f u b ; é
+è d s t n r i a e o h '
+# z x c v j k p , . / -
+
+// https://mathematicalmulticore.wordpress.com/the-keyboard-layout-project/
+>>MTGAP
+# y p o u j k d l c w #
+é i n e a , m h t s r '
+è q z / . : b f g v x -
+
+// http://mtgap.bilfo.com/official_keyboard.html
+// http://mtgap.bilfo.com/completed_keyboard.html
+>>MTGAP 2.0
+# , f h d k j c u l . #
+é o a n t g m s e r i -
+è q x b p z y w ' v ; #
+
+>>MTGAP "Easy"
+# q w l d b j f u k p #
+é a s r t g h n e o i -
+è z x c v ; y m , . / '
+
+>>MTGAP "shortcuts"
+# k g l d b j h u f . #
+é r o t s w m n e a i -
+è z x v c q y p , ' ; #
+
+>>MTGAP "standard"
+# k l h c b j d u f . #
+é o r n s g w t e a i -
+è x q v m z y p , ' ; #
+
+>>MTGAP "ergonomic"
+# . f u d j q h c w k #
+é i a e t p l n s r o -
+è ' , y g z - m b v x #
+
+// https://geekhack.org/index.php?topic=67604.0
+>>Oneproduct
+# p l d w g j x o y q è
+- n r s t m u a e i h '
+# z c f v b , . ? ; k é
+
+// https://bepo.fr/wiki/Utilisateur:Bibidibop
+>>Coeur
+# é w o p y b ' d l j z
+x a u e i , c t s r n h
+# - à è . k g m f q v #
+
+// https://geekhack.org/index.php?topic=98275.0
+>>Kaehi
+# q w l d g j u o p / é
+è n r s t m k a e h i '
+# z x c v b y f , . ; -
+
+// https://deskthority.net/wiki/BEAKL
+>>BEAKL 15
+é q h o u x g c r f z #
+- y i e a . d s t n b ;
+è j / , k ' w m l p v #
+
+// https://web.archive.org/web/20190906220509/http://shenafu.com/smf/index.php?topic=89.msg2566#msg2566
+>>BEAKL 19
+é q . o u j w d n m , #
+- h a e i k g s r t p ;
+è z ' / y x b c l f v #
+
+// https://www.reddit.com/r/ErgoDoxEZ/comments/gsvpug/layout_of_the_month_beakl_15/ftcan68/?context=3
+>>BEAKL 19bis
+# q y o u z w d n c k #
+- h i e a , g t r s p ;
+è j ' é . x v m l f b #
+
+// https://www.reddit.com/r/ErgoMechKeyboards/comments/j1eopm/hands_down_layout_is_ready_for_daily_use/g7bjmr7/?context=3
+>>BEAKL 19 Opt French
+# w m r d v y u o q x #
+# g s n t p , i e a h -
+# k f l c b j é ' . z è
+
+// http://millikeys.sourceforge.net/asset/
+>>ASSET
+# q w j f g y p u l ; #
+é a s e t d h n i o r '
+è z x c v b k m , . / -
+
+// https://sourceforge.net/projects/qwpr/
+>>Qwpr
+# q w p r f y u k l ; #
+é a s d t g h n i o e '
+è z x c v b j m , . / -
+
+// http://www.minimak.org/
+>>Minimak-8key
+# q w d r k y u i l p #
+é a s t f g h n e o ; '
+è z x c v b j m , . / -
+
+// https://github.com/mw8/white_keyboard_layout
+// adapted to ergo keyboard
+>>White
+# v y d , ' j m l u ( )
+é a t h e b c s n o i -
+è p k g w q x r f . z #
+
+// https://github.com/jackrosenthal/threelayout
+>>Three
+# q f u y z x k c w b #
+é o h e a i d r t n s -
+è , m . j ; g l p v ' #
+
+//https://sites.google.com/alanreiser.com/handsdown
+>>Hands down
+# q c h g j y f o b ' #
+é s n r t p w u e i a #
+è x m l d z v k . , ; -
+
+//https://sites.google.com/alanreiser.com/handsdown
+>>Notarize
+# q w d f p y u k l ' #
+é a s t e g h n i o r #
+è z x c v b j m . , ; -
+
+// http://kennetchaz.github.io/symmetric-typing/soul.html
+>>Soul mod
+# q w l d p k m u y ; '
+è a s r t g f n e i o é
+# j z x c v b h , . / -
+
+// http://kennetchaz.github.io/symmetric-typing/niro.html
+>>Niro mod
+# q w u d p j f y l ; #
+é a s e t g h n i r o '
+è b z x c v k m , . / -
+
+// https://docs.google.com/document/d/1yiCnIi1oagV1D8ZouMt-TRFRG8d6AfSBIwQkBvSflvY/edit
+>>The-1
+# k m l u ? v d r ' q #
+é a t h e . c s n o i -
+è z p f j , b g w x y /
+
+// https://engram.dev
+>>Engram 2.0
+# b y o u ' " l d w v z
+é c i e a , . h t s n q
+è g x j k - ? r m f p #
+
+// https://github.com/MadRabbit/halmak
+>>Halmak
+# w l r b z ; q u d j #
+é s h n t , . a e o i '
+è f m v c / g p x k y -
+
+// https://keyboard-design.com/letterlayout.html?layout=optimal-digram.en.ansi
+>>Optimal digram
+# q y u . , f m l d p z
+é s i e a o h n r t c g
+è j ) ' ? ( x v w k b -
+
+// https://keyboard-design.com/letterlayout.html?layout=uciea-keyboard.en.ansi
+>>Uciea
+# p y u o - k d h f x q
+é c i e a ' g t n s r v
+è z " , . ; w m l b j -
+
+// https://keyboard-design.com/letterlayout.html?layout=x1.en.ergodox
+// . and , moved
+>>x1
+# k y o ' ! f c l p q z
+é h i e a u d s t n r v
+è j ? . , # w g m b x -
diff --git a/users/ericgebhart/base_layers/maks.h b/users/ericgebhart/base_layers/maks.h
new file mode 100644
index 0000000000..6f78819421
--- /dev/null
+++ b/users/ericgebhart/base_layers/maks.h
@@ -0,0 +1,61 @@
+#define CARTE_COLEMAK \
+ carte_de_map(" qwfpg jluy;", \
+ " arstd hneio", \
+ " zxcvb km,./")
+
+#define ___COLEMAK___ \
+ LANG_MAP(_Q, _W, _F, _P, _G, _J, _L, _U, _Y, TL_SCLN, \
+ _A, _R, _S, _T, _D, _H, _N, _E, _I, _O, \
+ _Z, _X, _C, _V, _B, _K, _M, TL_COMM, TL_DOT, TL_SLSH)
+
+
+#define CARTE_COLEMAK_DH \
+ carte_de_map(" qwfpb jluy;", \
+ " arstg mneio", \
+ " zxcdv kh,./")
+
+#define ___COLEMAK_DH___ \
+ LANG_MAP(_Q, _W, _F, _P, _B, _J, _L, _U, _Y, TL_SCLN, \
+ _A, _R, _S, _T, _G, _M, _N, _E, _I, _O, \
+ _Z, _X, _C, _D, _V, _K, _H, TL_COMM, TL_DOT, TL_SLSH)
+
+#define CARTE_HALMAK \
+ carte_de_map(" wlrbz ;qudj", \
+ " shnt, .aeoi", \
+ " fmvc/ gpxky")
+
+#define ___HALMAK___ \
+ LANG_MAP(_W, _L, _R, _B, _Z, TL_SCLN, _Q, _U, _D, _J, \
+ _S, _H, _N, _T, TL_COMM, _DOT, _A, _E, _O, _I, \
+ _F, _M, _V, _C, TL_SLSH, _G, _P, _X, _K, _Y)
+
+#define CARTE_MINIMAK \
+ carte_de_map(" qwdrk yuiop", \
+ " astfg hjel;", \
+ " zxcvb nm,./")
+
+#define ___MINIMAK___ \
+ LANG_MAP(_Q, _W, _D, _R, _K, _Y, _U, _I, _O, _P, \
+ _A, _S, _T, _F, _G, _H, _J, _E, _L, TL_SCLN, \
+ _Z, _X, _C, _V, _B, _N, _M, TL_COMM, TL_DOT, TL_SLSH)
+
+#define CARTE_MINIMAK_8 \
+ carte_de_map(" qwdrk yuilp", \
+ " astfg hneo;", \
+ " zxcvb jm,./")
+
+#define ___MINIMAK_8___ \
+ LANG_MAP(_Q, _W, _D, _R, _K, _Y, _U, _I, _L, _P, \
+ _A, _S, _T, _F, _G, _H, _N, _E, _O, TL_SCLN, \
+ _Z, _X, _C, _V, _B, _J, _M, TL_COMM, TL_DOT, TL_SLSH)
+
+
+#define CARTE_MINIMAK_12 \
+ carte_de_map(" qwdfk yuil;", \
+ " astrg hneop", \
+ " zxcvb jm,./")
+
+#define ___MINIMAK_12___ \
+ LANG_MAP(_Q, _W, _D, _F, _K, _Y, _U, _I, _L, _SCLN, \
+ _A, _S, _T, _R, _G, _H, _N, _E, _O, _P, \
+ _Z, _X, _C, _V, _B, _J, _M, TL_COMM, TL_DOT, TL_SLSH)
diff --git a/users/ericgebhart/base_layers/qwerty.h b/users/ericgebhart/base_layers/qwerty.h
new file mode 100644
index 0000000000..47aead197c
--- /dev/null
+++ b/users/ericgebhart/base_layers/qwerty.h
@@ -0,0 +1,69 @@
+#pragma once
+/*
+ Copyright 2018-2022 Eric Gebhart <e.a.gebhart@gmail.com>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+// Layer for combo reference. Make more than one by changing lang is.
+#define ___COMBO_REF___ \
+ LANG_MAP(_1L1, _1L2, _1L3, _1L4, _1L5, _1R1, _1R2, _1R3, _1R4, _1R5, \
+ _2L1, _2L2, _2L3, _2L4, _2L5, _2R1, _2R2, _2R3, _2R4, _2R5, \
+ _3L1, _3L2, _3L3, _3L4, _3L5, _3R1, _3R2, _3R3, _3R4, _3R5)
+
+
+#define CARTE_QWERTY \
+ carte_de_map(" qwert yuiop", \
+ " asdfg hjkl;", \
+ " zxcvb nm,./")
+
+// Need TLKC around comm, dot, and quot, and scln
+// Qwerty based layers that I don't really use.
+#define ___QWERTY___ \
+ LANG_MAP(_Q, _W, _E, _R, _T, _Y, _U, _I, _O, _P, \
+ _A, _S, _D, _F, _G, _H, _J, _K, _L, TL_SCLN, \
+ _Z, _X, _C, _V, _B, _N, _M, TL_COMM, TL_DOT, TL_SLSH)
+
+#define CARTE_AZERTY \
+ carte_de_map(" azert yuiop", \
+ " qsdfg hjkl;", \
+ " wxcvb nm,./")
+
+// Need TLKC around comm, dot, and quot, and scln
+// Qwerty based layers that I don't really use.
+#define ___AZERTY___ \
+ LANG_MAP(_A, _Z, _E, _R, _T, _Y, _U, _I, _O, _P, \
+ _Q, _S, _D, _F, _G, _H, _J, _K, _L, TL_SCLN, \
+ _W, _X, _C, _V, _B, _N, _M, TL_COMM, TL_DOT, TL_SLSH)
+
+
+
+#define CARTE_WORKMAN \
+ carte_de_map(" qdrwb jfup;", \
+ " ashtg yneio", \
+ " zxmcv kl,./")
+
+#define ___WORKMAN___ \
+ LANG_MAP(_Q, _D, _R, _W, _B, _J, _F, _U, _P, _SCLN, \
+ _A, _S, _H, _T, _G, _Y, _N, _E, _O, _I, \
+ _Z, _X, _M, _C, _V, _K, _L, TL_COMM, TL_DOT, TL_SLSH)
+
+#define CARTE_NORMAN \
+ carte_de_map(" qwdfk jurl;", \
+ " asetg yniou", \
+ " zxcvb pm,./")
+#define ___NORMAN___ \
+ LANG_MAP(_Q, _W, _D, _F, _K, _J, _U, _R, _L, TL_SCLN, \
+ _A, _S, _E, _T, _G, _Y, _N, _I, _O, _U, \
+ _Z, _X, _C, _V, _B, _P, _M, TL_COMM, TL_DOT, TL_SLSH)
diff --git a/users/ericgebhart/base_layers/toprows.h b/users/ericgebhart/base_layers/toprows.h
new file mode 100644
index 0000000000..ba32118537
--- /dev/null
+++ b/users/ericgebhart/base_layers/toprows.h
@@ -0,0 +1,56 @@
+#pragma once
+/*
+ Copyright 2018-2022 Eric Gebhart <e.a.gebhart@gmail.com>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+/*******************************************************************/
+/** TOP ROWS Func,Symbols, Numbers you find there. **/
+/*******************************************************************/
+// ltkc language target keycode DV, BK, BKW, NONE
+// _1 = DV_1 or _1 = BP_DV_1 or KC_1
+#define ___10_NUMBERS___ \
+ LANG_ROW(_1, _2, _3, _4, _5, _6, _7, _8, _9, _0)
+
+/* 40123 76598 */
+#define ___10_NUMBERS_BEAKL15___ \
+ LANG_ROW(_4, _0, _1, _2, _3, _7, _6, _5, _9, _8)
+
+/* 32104 76598 */
+#define ___10_NUMBERS_BEAKL19___ \
+ LANG_ROW(_3, _2, _1, _0, _4, _7, _6, _5, _9, _8)
+
+// a top symbol row if someone wants it.
+#define ___10_SYMBOLS___ \
+ LANG_ROW(_EXLM, _AT, _HASH, _DLR, _PERC, _CIRC, _AMPR, _ASTR, _LPRN, _RPRN)
+
+// standard bepo top row
+#define ___10_SYMBOLS_BEPO___ \
+ LANG_ROW(_DQUO, _LDAQ, _RDAQ, _LPRN, _RPRN, _AT, _PLUS, _MINS, _SLSH, _ASTR)
+
+#define ___12_SYMBOLS_BEPO___ \
+ LANG_ROW12(_DLR, _DQUO, _LDAQ, _RDAQ, _LPRN, _RPRN, \
+ _AT, _PLUS, _MINS, _SLSH, _ASTR, _EQL)
+
+// function key rows work for everyone.
+#define ___10_FUNCS___ \
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10
+
+#define ___12_FUNCS___ ___10_FUNCS___, KC_F11, KC_F12
+
+#define ___10_FUNCS_BEAKL15___ \
+ KC_F4, KC_F10, KC_F1, KC_F2, KC_F3, \
+ KC_F7, KC_F6, KC_F5, KC_F9, KC_F8
+
+#define ___12_FUNCS_BEAKL15___ KC_F11, ___10_FUNCS_BEAKL15___, KC_F12