Here is what I want to be able to configure in 1 file and have a fixed matrix.c implementation.
Note the flow of the metal model from the user to the controller.
static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KEYMAP(
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, EJECT, \
BTICK, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINUS, EQUAL, BS, \
TAB, Q, W, E, R, T, Y, U, I, O, P, LSQR, RSQR, BSLASH}, \
CAP, A, S, D, F, G, H, J, K, L, SEMI, QUOTE, ENTER, \
LSHIFT, Z, X, C, V, B, N, M, COMMA, PERIOD, FSLASH, RSHIFT, UP, \
FUNC, LCTRL, LALT, LCMD, SPACE, SPACE, RCMD, RALT, RCTRL, LEFT, DOWN, RIGHT
),
};
#define KEYMAP( \
R0C0, R0C1, R0C2, R0C3, R0C4, R0C5, R0C6, R0C7, R0C8, R0C9, R0C10, R0C11, R0C12, R0C13, \
R1C0, R1C1, R1C2, R1C3, R1C4, R1C5, R1C6, R1C7, R1C8, R1C9, R1C10, R1C11, R1C12, R1C13, \
R2C0, R2C1, R2C2, R2C3, R2C4, R2C5, R2C6, R2C7, R2C8, R2C9, R2C10, R2C11, R2C12, R2C13, \
R3C0, R3C1, R3C2, R3C3, R3C4, R3C5, R3C6, R3C7, R3C8, R3C9, R3C10, R3C11, R3C12, \
R4C0, R4C1, R4C2, R4C3, R4C4, R4C5, R4C6, R4C7, R4C8, R4C9, R4C10, R4C11, R4C12, \
R5C0, R5C1, R5C2, R5C3, R5C5, R5C6, R5C8, R5C9, R5C10, R5C11, R5C12, R5C13 }
) { \
{ R0C0, R0C1, R0C2, R0C3, R0C4, R0C5, R0C6, R0C7, R0C8, R0C9, R0C10, R0C11, R0C12, R0C13 }, \
{ R1C0, R1C1, R1C2, R1C3, R1C4, R1C5, R1C6, R1C7, R1C8, R1C9, R1C10, R1C11, R1C12, R1C13 }, \
{ R2C0, R2C1, R2C2, R2C3, R2C4, R2C5, R2C6, R2C7, R2C8, R2C9, R2C10, R2C11, R2C12, R2C13 }, \
{ R3C0, R3C1, R3C2, R3C3, R3C4, R3C5, R3C6, R3C7, R3C8, R3C9, R3C10, R3C11, R3C12, NONE }, \
{ R4C0, R4C1, R4C2, R4C3, R4C4, R4C5, R4C6, R4C7, R4C8, R4C9, R4C10, R4C11, R4C12, NONE }, \
{ R5C0, R5C1, R5C2, R5C3, NONE, R5C5, R5C6, NONE, R5C8, R5C9, R5C10, R5C11, R5C12, R5C13 }
}
#define DIODE_DIRECTION ROW
static const uint8_t PROGMEM portmap[] = {
/* GND---Vcc */
R0, /* B0 T F0 */ C0,
R1, /* B1 E F1 */ C1,
R2, /* B2 E F4 */ C2,
R3, /* B3 N F5 */ C3,
R4, /* B7 S F6 */ C4,
R5, /* D0 Y F7 */ C5,
C13, /* D1 B6 */ C6,
C12, /* D2 2 B5 */ C7,
C11, /* D3 . B4 */ C8,
C10, /* C6 0 D7 */ C9,
NC, /* C7-----D6 */ NC
}