--- /dev/null
+#include "4by3.h"
\ No newline at end of file
--- /dev/null
+#pragma once
+
+#include "quantum.h"
+
+/* LAYOUT_horizontal
+ * ┌───┐
+ * │USB│
+ * ├───┼───┬───┬───┐
+ * │K00│K01│K02│K03│
+ * ├───┼───┼───┼───┤
+ * │K10│K11│K12│K13│
+ * ├───┼───┼───┼───┤
+ * │K20│K21│K22│K23│
+ * └───┴───┴───┴───┘
+ */
+#define LAYOUT_horizontal( \
+ K00, K01, K02, K03, \
+ K10, K11, K12, K13, \
+ K20, K21, K22, K23 \
+) { \
+ { K00, K01, K02, K03 }, \
+ { K10, K11, K12, K13 }, \
+ { K20, K21, K22, K23 } \
+}
+
+/* LAYOUT_vertical_right
+ * ┌───┬───┬───┬───┐
+ * │K00│K01│K03│USB│
+ * ├───┼───┼───┬───┘
+ * │K04│K05│K06│
+ * ├───┼───┼───┤
+ * │K07│K08│K09│
+ * ├───┼───┼───┤
+ * │K10│K11│K12│
+ * └───┴───┴───┘
+ */
+#define LAYOUT_vertical_right( \
+ K20, K10, K00, \
+ K21, K11, K01, \
+ K22, K12, K02, \
+ K23, K13, K03 \
+) { \
+ { K00, K01, K02, K03 }, \
+ { K10, K11, K12, K13 }, \
+ { K20, K21, K22, K23 } \
+}
+
+/* LAYOUT_vertical_left
+ * ┌───┬───┬───┐
+ * │K00│K01│K03│
+ * ├───┼───┼───┤
+ * │K04│K05│K06│
+ * ├───┼───┼───┤
+ * │K07│K08│K09│
+ * ┌───┼───┼───┼───┤
+ * │USB│K10│K11│K12│
+ * └───┴───┴───┴───┘
+ */
+#define LAYOUT_vertical_left( \
+ K03, K13, K23, \
+ K02, K12, K22, \
+ K01, K11, K21, \
+ K00, K10, K20 \
+) { \
+ { K00, K01, K02, K03 }, \
+ { K10, K11, K12, K13 }, \
+ { K20, K21, K22, K23 } \
+}
+
+#define LAYOUT LAYOUT_horizontal
--- /dev/null
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xEEEE
+#define PRODUCT_ID 0x2019
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Elias Sjögreen
+#define PRODUCT 4by3
+#define DESCRIPTION A small 12 key keypad
+
+/* key matrix size */
+#define MATRIX_ROWS 3
+#define MATRIX_COLS 4
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { D1, D0, D4 }
+#define MATRIX_COL_PINS { C6, D7, E6, B4 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
--- /dev/null
+{
+ "keyboard_name": "4by3",
+ "url": "https://github.com/eliassjogreen/4by3",
+ "maintainer": "eliassjogreen",
+ "width": 4,
+ "height": 3,
+ "layouts": {
+ "LAYOUT_horizontal": {
+ "key_count": 12,
+ "width": 4,
+ "height": 3,
+ "layout": [
+ { "x": 0, "y": 0 }, { "x": 1, "y": 0 }, { "x": 2, "y": 0 }, { "x": 3, "y": 0 },
+ { "x": 0, "y": 1 }, { "x": 1, "y": 1 }, { "x": 2, "y": 1 }, { "x": 3, "y": 1 },
+ { "x": 0, "y": 2 }, { "x": 1, "y": 2 }, { "x": 2, "y": 2 }, { "x": 3, "y": 2 }
+ ]
+ },
+ "LAYOUT_vertical_right": {
+ "key_count": 12,
+ "width": 3,
+ "height": 4,
+ "layout": [
+ { "x": 0, "y": 0 }, { "x": 1, "y": 0 }, { "x": 2, "y": 0 },
+ { "x": 0, "y": 1 }, { "x": 1, "y": 1 }, { "x": 2, "y": 1 },
+ { "x": 0, "y": 2 }, { "x": 1, "y": 2 }, { "x": 2, "y": 2 },
+ { "x": 0, "y": 3 }, { "x": 1, "y": 3 }, { "x": 2, "y": 3 }
+ ]
+ },
+ "LAYOUT_vertical_left": {
+ "key_count": 12,
+ "width": 3,
+ "height": 4,
+ "layout": [
+ { "x": 0, "y": 0 }, { "x": 1, "y": 0 }, { "x": 2, "y": 0 },
+ { "x": 0, "y": 1 }, { "x": 1, "y": 1 }, { "x": 2, "y": 1 },
+ { "x": 0, "y": 2 }, { "x": 1, "y": 2 }, { "x": 2, "y": 2 },
+ { "x": 0, "y": 3 }, { "x": 1, "y": 3 }, { "x": 2, "y": 3 }
+ ]
+ }
+ }
+}
--- /dev/null
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Change 'LAYOUT_vertical_right' to 'LAYOUT_vertical_left'
+ to change the side where the pro micro usb port is. */
+ [0] = LAYOUT_vertical_right(
+ KC_INS , KC_HOME , KC_PGUP ,
+ KC_DEL , KC_END , KC_PGDN ,
+ KC_PSCR , KC_UP , KC_PAUS ,
+ KC_LEFT , KC_DOWN , KC_RGHT
+ )
+};
--- /dev/null
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_horizontal(
+ KC_VOLU , _______ , _______ , _______ ,
+ KC_MUTE , KC_MPRV , KC_MPLY , KC_MNXT ,
+ KC_VOLD , _______ , _______ , _______
+ )
+};
--- /dev/null
+# The default 4by3 keymap
+
+
--- /dev/null
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_horizontal(
+ KC_F1 , KC_F2 , KC_F3 , KC_F4 ,
+ KC_F5 , KC_F6 , KC_F7 , KC_F8 ,
+ KC_F9 , KC_F10 , KC_F11 , KC_F12
+ )
+};
--- /dev/null
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Change 'LAYOUT_vertical_right' to 'LAYOUT_vertical_left'
+ to change the side where the pro micro usb port is. */
+ [0] = LAYOUT_vertical_right(
+ KC_F1 , KC_F2 , KC_F3 ,
+ KC_F4 , KC_F5 , KC_F6 ,
+ KC_F7 , KC_F8 , KC_F9 ,
+ KC_F10 , KC_F11 , KC_F12
+ )
+};
--- /dev/null
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_horizontal(
+ KC_P1 , KC_P2 , KC_P3 , KC_P4 ,
+ KC_P5 , KC_P6 , KC_P7 , KC_P8 ,
+ KC_P9 , KC_P0 , KC_BSPC , KC_ENT
+ ),
+};
--- /dev/null
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Change 'LAYOUT_vertical_right' to 'LAYOUT_vertical_left'
+ to change the side where the pro micro usb port is. */
+ [0] = LAYOUT_vertical_right(
+ KC_P1 , KC_P2 , KC_P3 ,
+ KC_P4 , KC_P5 , KC_P6 ,
+ KC_P7 , KC_P8 , KC_P9 ,
+ KC_BSPC , KC_P0 , KC_ENT
+ ),
+};
--- /dev/null
+# 4by3
+
+
+
+A 12 key mechanical keypad.
+
+Keyboard Maintainer: [eliassjogreen](https://github.com/eliassjogreen)
+Hardware Supported: 4by3
+Hardware Availability: [eliassjogreen/4by3](https://github.com/eliassjogreen/4by3)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make 4by3: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).
--- /dev/null
+MCU = atmega32u4
+BOOTLOADER = caterina
+
+EXTRAKEY_ENABLE = yes
+NKRO_ENABLE = yes
+CONSOLE_ENABLE = yes
+COMMAND_ENABLE = yes
+