From 4671f86be67e0c00a68115f2be70928159474a7a Mon Sep 17 00:00:00 2001 From: binaryDiv Date: Sun, 25 Aug 2024 22:24:14 +0200 Subject: [PATCH] [WIP] firmware --- Makefile | 49 +++ README.md | 2 +- layouts/keyboard-layout-wip3.json | 280 ++++++++++++++++++ qmk_keyboards/binarydiv/eepyboard/v1/config.h | 7 + .../binarydiv/eepyboard/v1/info.json | 211 +++++++++++++ .../eepyboard/v1/keymaps/default/keymap.c | 87 ++++++ qmk_keyboards/binarydiv/eepyboard/v1/rules.mk | 8 + 7 files changed, 643 insertions(+), 1 deletion(-) create mode 100644 Makefile create mode 100644 layouts/keyboard-layout-wip3.json create mode 100644 qmk_keyboards/binarydiv/eepyboard/v1/config.h create mode 100644 qmk_keyboards/binarydiv/eepyboard/v1/info.json create mode 100644 qmk_keyboards/binarydiv/eepyboard/v1/keymaps/default/keymap.c create mode 100644 qmk_keyboards/binarydiv/eepyboard/v1/rules.mk diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..b8c8397 --- /dev/null +++ b/Makefile @@ -0,0 +1,49 @@ +# Set QMK_HOME in your environment variables to adjust the path of the firmware +QMK_HOME ?= ${HOME}/qmk_firmware + +# Directories for QMK keyboard files (author, keyboard, revision) +QMK_KEYBOARD_AUTHOR_DIR := binarydiv +QMK_KEYBOARD_BASE_DIR := ${QMK_KEYBOARD_AUTHOR_DIR}/eepyboard +QMK_KEYBOARD_REV_DIR := ${QMK_KEYBOARD_BASE_DIR}/v1 + +# Keymap to use when compiling QMK firmware +QMK_KEYMAP := default + +# Set default make target +.DEFAULT_GOAL := qmk-compile + + +# -- QMK commands + +# Prerequisite: Check if QMK is installed +.PHONY: _qmk-check-firmware-installed +_qmk-check-firmware-installed: + @test -d "${QMK_HOME}" || { \ + echo "QMK firmware not found! (QMK_HOME=${QMK_HOME})"; \ + echo "Please install QMK using 'qmk setup' first or set QMK_HOME in environment."; \ + exit 1; \ + } + +# Create symlink in QMK firmware directory to the keyboard files in qmk_keyboards/ +.PHONY: _qmk-create-symlink +_qmk-create-symlink: _qmk-check-firmware-installed ${QMK_HOME}/keyboards/${QMK_KEYBOARD_BASE_DIR} + +# Only create symlink if it doesn't exist already +${QMK_HOME}/keyboards/${QMK_KEYBOARD_BASE_DIR}: + mkdir -p "${QMK_HOME}/keyboards/${QMK_KEYBOARD_AUTHOR_DIR}" + ln -s "$$(realpath qmk_keyboards/${QMK_KEYBOARD_BASE_DIR})" "${QMK_HOME}/keyboards/${QMK_KEYBOARD_BASE_DIR}" + +# Compile QMK firmware +.PHONY: qmk-compile +qmk-compile: _qmk-create-symlink + qmk compile -kb ${QMK_KEYBOARD_REV_DIR} -km ${QMK_KEYMAP} + +# Compile and flash QMK firmware to keyboard +.PHONY: qmk-flash +qmk-flash: _qmk-create-symlink + qmk flash -kb ${QMK_KEYBOARD_REV_DIR} -km ${QMK_KEYMAP} + +# Run "qmk config" to set this keyboard as the default (to simplify running qmk commands manually) +.PHONY: qmk-activate +qmk-activate: _qmk-create-symlink + qmk config user.keyboard=${QMK_KEYBOARD_REV_DIR} user.keymap=${QMK_KEYMAP} diff --git a/README.md b/README.md index b7815a2..3ee46ea 100644 --- a/README.md +++ b/README.md @@ -78,7 +78,7 @@ Now you can generate the gerber, drill and map files. ### Compile and flash QMK firmware -TODO: Add this when building the firmware +TODO: Add this when building the firmware ~ ## Used software diff --git a/layouts/keyboard-layout-wip3.json b/layouts/keyboard-layout-wip3.json new file mode 100644 index 0000000..6399b35 --- /dev/null +++ b/layouts/keyboard-layout-wip3.json @@ -0,0 +1,280 @@ +[ + [ + { + "t": "#000000\n\n\n\n\n\n\n\n\n#ff0000" + }, + "Esc", + { + "x": 0.25, + "fa": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ] + }, + "F1\n\n\n\n\n\n\n\n\nMacro1", + "F2\n\n\n\n\n\n\n\n\nMacro2", + "F3", + "F4", + { + "x": 0.25 + }, + "F5", + "F6", + "F7", + "F8\n\n\n\n\n\n\n\n\nPrtScr", + { + "x": 0.5, + "c": "#a581c9", + "t": "#ff0000", + "a": 7, + "w": 3, + "d": true + }, + "", + { + "x": -1.5, + "c": "#ffa3a3", + "t": "#000000\n\n\n\n\n\n\n\n\n#ff0000", + "a": 4, + "fa": [ + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ] + }, + "Vol +/-" + ], + [ + { + "y": 0.25, + "c": "#cccccc", + "fa": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ] + }, + "~\n`", + "!\n1\n\n\n\n\n\n\n\nF1", + "@\n2\n\n\n\n\n\n\n\nF2", + "#\n3\n\n\n\n\n\n\n\nF3", + "$\n4\n\n\n\n\n\n\n\nF4", + "%\n5\n\n\n\n\n\n\n\nF5", + "^\n6\n\n\n\n\n\n\n\nF6", + "&\n7\n\n\n\n\n\n\n\nF7", + "*\n8\n\n\n\n\n\n\n\nF8", + "(\n9\n\n\n\n\n\n\n\nF9", + ")\n0\n\n\n\n\n\n\n\nF10", + "_\n-\n\n\n\n\n\n\n\nF11", + "+\n=\n\n\n\n\n\n\n\nF12" + ], + [ + "Tab", + "Q\n\n\n\n\n\n\n\n\nHome", + { + "f2": 0 + }, + "W\n\n\n\n\n\n\n\n\n↑", + { + "fa": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ] + }, + "E\n\n\n\n\n\n\n\n\nEnd", + "R\n\n\n\n\n\n\n\n\nPgUp", + "T", + "Y\n\n\n\n\n\n\n\n\nScroll↑", + "U\n\n\n\n\n\n\n\n\nM left", + "I\n\n\n\n\n\n\n\n\nM↑", + "O\n\n\n\n\n\n\n\n\nM right", + "P", + "{\n[", + "}\n]" + ], + [ + "Bksp\n\n\n?", + { + "f2": 0 + }, + "A\n\n\n\n\n\n\n\n\n←", + "S\n\n\n\n\n\n\n\n\n↓", + "D\n\n\n\n\n\n\n\n\n→", + { + "fa": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ] + }, + "F\n\n\n\n\n\n\n\n\nPgDn", + "G", + "H\n\n\n\n\n\n\n\n\nScroll↓", + "J\n\n\n\n\n\n\n\n\nM←", + "K\n\n\n\n\n\n\n\n\nM↓", + "L\n\n\n\n\n\n\n\n\nM→", + ":\n;", + "\"\n'", + "|\n\\" + ], + [ + "Shift\n\n\n?\n\n\n\n\n\nCaps-Word", + "Bksp\n\n\n?\n\n\n\n\n\nDel", + "Z", + "X", + "C", + "V", + "B", + "N", + "M", + "<\n,", + ">\n.", + "?\n/", + "Shift" + ], + [ + "Ctrl", + "Alt", + { + "x": 9, + "t": "#cc00ff\n\n\n\n\n\n\n\n\n#ff0000" + }, + "Fn", + { + "t": "#000000\n\n\n\n\n\n\n\n\n#ff0000" + }, + "Ctrl" + ], + [ + { + "r": 6, + "rx": 1.5, + "ry": 16, + "y": -10.75, + "x": -0.5 + }, + "Super" + ], + [ + { + "r": 12, + "y": -1, + "x": -0.5, + "t": "#ff0000\n\n\n\n\n\n\n\n\n#ff0000" + }, + "Move" + ], + [ + { + "r": 18, + "y": -1, + "x": -0.5, + "t": "#000000\n\n\n\n\n\n\n\n\n#ff0000" + }, + "Bksp\n\n\n?\n\n\n\n\n\nDel" + ], + [ + { + "r": 24, + "y": -1, + "x": -0.5, + "fa": [ + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ] + }, + "Space" + ], + [ + { + "r": -24, + "rx": 11.5, + "y": -10.75, + "x": -0.5, + "fa": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ] + }, + "Enter\n\n\n?" + ], + [ + { + "r": -18, + "y": -1, + "x": -0.5 + }, + "AltGr\n\n\n?" + ], + [ + { + "r": -12, + "y": -1, + "x": -0.5, + "t": "#ff0000", + "a": 7 + }, + "" + ], + [ + { + "r": -6, + "y": -1, + "x": -0.5 + }, + "" + ] +] \ No newline at end of file diff --git a/qmk_keyboards/binarydiv/eepyboard/v1/config.h b/qmk_keyboards/binarydiv/eepyboard/v1/config.h new file mode 100644 index 0000000..ecd559c --- /dev/null +++ b/qmk_keyboards/binarydiv/eepyboard/v1/config.h @@ -0,0 +1,7 @@ +// Copyright 2024 binaryDiv (@binaryDiv) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +// Lock one-shot keys when tapping them twice +#define ONESHOT_TAP_TOGGLE 2 diff --git a/qmk_keyboards/binarydiv/eepyboard/v1/info.json b/qmk_keyboards/binarydiv/eepyboard/v1/info.json new file mode 100644 index 0000000..4104204 --- /dev/null +++ b/qmk_keyboards/binarydiv/eepyboard/v1/info.json @@ -0,0 +1,211 @@ +{ + "keyboard_name": "eepyBoard v1.0", + "maintainer": "binaryDiv", + "manufacturer": "binaryDiv", + "url": "https://git.0xbd.space/binaryDiv/eepyBoard/", + "processor": "RP2040", + "bootloader": "rp2040", + "usb": { + "device_version": "1.0.0", + "vid": "0x1337", + "pid": "0xBD32" + }, + "features": { + "bootmagic": true, + "command": false, + "console": true, + "extrakey": true, + "mousekey": true, + "nkro": true, + "rgb_matrix": true + }, + "diode_direction": "COL2ROW", + "matrix_pins": { + "cols": ["GP8", "GP7", "GP6", "GP5", "GP4", "GP3", "GP2", "GP1", "GP0", "GP25", "GP24", "GP23", "GP22"], + "rows": ["GP12", "GP13", "GP14", "GP15", "GP16", "GP17"] + }, + "encoder": { + "rotary": [ + { + "pin_a": "GP10", + "pin_b": "GP11", + "resolution": 4 + } + ] + }, + "layouts": { + "LAYOUT_ortho_6x13": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0}, + {"matrix": [0, 1], "x": 1, "y": 0}, + {"matrix": [0, 2], "x": 2, "y": 0}, + {"matrix": [0, 3], "x": 3, "y": 0}, + {"matrix": [0, 4], "x": 4, "y": 0}, + {"matrix": [0, 5], "x": 5, "y": 0}, + {"matrix": [0, 6], "x": 6, "y": 0}, + {"matrix": [0, 7], "x": 7, "y": 0}, + {"matrix": [0, 8], "x": 8, "y": 0}, + {"matrix": [0, 9], "x": 9, "y": 0}, + {"matrix": [0, 10], "x": 10, "y": 0}, + {"matrix": [0, 11], "x": 11, "y": 0}, + {"matrix": [0, 12], "x": 12, "y": 0}, + {"matrix": [1, 0], "x": 0, "y": 1}, + {"matrix": [1, 1], "x": 1, "y": 1}, + {"matrix": [1, 2], "x": 2, "y": 1}, + {"matrix": [1, 3], "x": 3, "y": 1}, + {"matrix": [1, 4], "x": 4, "y": 1}, + {"matrix": [1, 5], "x": 5, "y": 1}, + {"matrix": [1, 6], "x": 6, "y": 1}, + {"matrix": [1, 7], "x": 7, "y": 1}, + {"matrix": [1, 8], "x": 8, "y": 1}, + {"matrix": [1, 9], "x": 9, "y": 1}, + {"matrix": [1, 10], "x": 10, "y": 1}, + {"matrix": [1, 11], "x": 11, "y": 1}, + {"matrix": [1, 12], "x": 12, "y": 1}, + {"matrix": [2, 0], "x": 0, "y": 2}, + {"matrix": [2, 1], "x": 1, "y": 2}, + {"matrix": [2, 2], "x": 2, "y": 2}, + {"matrix": [2, 3], "x": 3, "y": 2}, + {"matrix": [2, 4], "x": 4, "y": 2}, + {"matrix": [2, 5], "x": 5, "y": 2}, + {"matrix": [2, 6], "x": 6, "y": 2}, + {"matrix": [2, 7], "x": 7, "y": 2}, + {"matrix": [2, 8], "x": 8, "y": 2}, + {"matrix": [2, 9], "x": 9, "y": 2}, + {"matrix": [2, 10], "x": 10, "y": 2}, + {"matrix": [2, 11], "x": 11, "y": 2}, + {"matrix": [2, 12], "x": 12, "y": 2}, + {"matrix": [3, 0], "x": 0, "y": 3}, + {"matrix": [3, 1], "x": 1, "y": 3}, + {"matrix": [3, 2], "x": 2, "y": 3}, + {"matrix": [3, 3], "x": 3, "y": 3}, + {"matrix": [3, 4], "x": 4, "y": 3}, + {"matrix": [3, 5], "x": 5, "y": 3}, + {"matrix": [3, 6], "x": 6, "y": 3}, + {"matrix": [3, 7], "x": 7, "y": 3}, + {"matrix": [3, 8], "x": 8, "y": 3}, + {"matrix": [3, 9], "x": 9, "y": 3}, + {"matrix": [3, 10], "x": 10, "y": 3}, + {"matrix": [3, 11], "x": 11, "y": 3}, + {"matrix": [3, 12], "x": 12, "y": 3}, + {"matrix": [4, 0], "x": 0, "y": 4}, + {"matrix": [4, 1], "x": 1, "y": 4}, + {"matrix": [4, 2], "x": 2, "y": 4}, + {"matrix": [4, 3], "x": 3, "y": 4}, + {"matrix": [4, 4], "x": 4, "y": 4}, + {"matrix": [4, 5], "x": 5, "y": 4}, + {"matrix": [4, 6], "x": 6, "y": 4}, + {"matrix": [4, 7], "x": 7, "y": 4}, + {"matrix": [4, 8], "x": 8, "y": 4}, + {"matrix": [4, 9], "x": 9, "y": 4}, + {"matrix": [4, 10], "x": 10, "y": 4}, + {"matrix": [4, 11], "x": 11, "y": 4}, + {"matrix": [4, 12], "x": 12, "y": 4}, + {"matrix": [5, 0], "x": 0, "y": 5}, + {"matrix": [5, 1], "x": 1, "y": 5}, + {"matrix": [5, 2], "x": 2, "y": 5}, + {"matrix": [5, 3], "x": 3, "y": 5}, + {"matrix": [5, 4], "x": 4, "y": 5}, + {"matrix": [5, 5], "x": 5, "y": 5}, + {"matrix": [5, 6], "x": 6, "y": 5}, + {"matrix": [5, 7], "x": 7, "y": 5}, + {"matrix": [5, 8], "x": 8, "y": 5}, + {"matrix": [5, 9], "x": 9, "y": 5}, + {"matrix": [5, 10], "x": 10, "y": 5}, + {"matrix": [5, 11], "x": 11, "y": 5}, + {"matrix": [5, 12], "x": 12, "y": 5} + ] + } + }, + "rgb_matrix": { + "driver": "ws2812", + "default": { + "animation": "cycle_pinwheel", + "speed": 32 + }, + "center_point": [2, 2], + "animations": { + "cycle_pinwheel": true + }, + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 1, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 2, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 3, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 4, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 5, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 6, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 7, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 8, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 9, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 1, "flags": 4}, + {"matrix": [1, 1], "x": 1, "y": 1, "flags": 4}, + {"matrix": [1, 2], "x": 2, "y": 1, "flags": 4}, + {"matrix": [1, 3], "x": 3, "y": 1, "flags": 4}, + {"matrix": [1, 4], "x": 4, "y": 1, "flags": 4}, + {"matrix": [1, 5], "x": 5, "y": 1, "flags": 4}, + {"matrix": [1, 6], "x": 6, "y": 1, "flags": 4}, + {"matrix": [1, 7], "x": 7, "y": 1, "flags": 4}, + {"matrix": [1, 8], "x": 8, "y": 1, "flags": 4}, + {"matrix": [1, 9], "x": 9, "y": 1, "flags": 4}, + {"matrix": [1, 10], "x": 10, "y": 1, "flags": 4}, + {"matrix": [1, 11], "x": 11, "y": 1, "flags": 4}, + {"matrix": [1, 12], "x": 12, "y": 1, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 2, "flags": 4}, + {"matrix": [2, 1], "x": 1, "y": 2, "flags": 4}, + {"matrix": [2, 2], "x": 2, "y": 2, "flags": 4}, + {"matrix": [2, 3], "x": 3, "y": 2, "flags": 4}, + {"matrix": [2, 4], "x": 4, "y": 2, "flags": 4}, + {"matrix": [2, 5], "x": 5, "y": 2, "flags": 4}, + {"matrix": [2, 6], "x": 6, "y": 2, "flags": 4}, + {"matrix": [2, 7], "x": 7, "y": 2, "flags": 4}, + {"matrix": [2, 8], "x": 8, "y": 2, "flags": 4}, + {"matrix": [2, 9], "x": 9, "y": 2, "flags": 4}, + {"matrix": [2, 10], "x": 10, "y": 2, "flags": 4}, + {"matrix": [2, 11], "x": 11, "y": 2, "flags": 4}, + {"matrix": [2, 12], "x": 12, "y": 2, "flags": 4}, + {"matrix": [3, 0], "x": 0, "y": 3, "flags": 4}, + {"matrix": [3, 1], "x": 1, "y": 3, "flags": 4}, + {"matrix": [3, 2], "x": 2, "y": 3, "flags": 4}, + {"matrix": [3, 3], "x": 3, "y": 3, "flags": 4}, + {"matrix": [3, 4], "x": 4, "y": 3, "flags": 4}, + {"matrix": [3, 5], "x": 5, "y": 3, "flags": 4}, + {"matrix": [3, 6], "x": 6, "y": 3, "flags": 4}, + {"matrix": [3, 7], "x": 7, "y": 3, "flags": 4}, + {"matrix": [3, 8], "x": 8, "y": 3, "flags": 4}, + {"matrix": [3, 9], "x": 9, "y": 3, "flags": 4}, + {"matrix": [3, 10], "x": 10, "y": 3, "flags": 4}, + {"matrix": [3, 11], "x": 11, "y": 3, "flags": 4}, + {"matrix": [3, 12], "x": 12, "y": 3, "flags": 4}, + {"matrix": [4, 0], "x": 0, "y": 4, "flags": 4}, + {"matrix": [4, 1], "x": 1, "y": 4, "flags": 4}, + {"matrix": [4, 2], "x": 2, "y": 4, "flags": 4}, + {"matrix": [4, 3], "x": 3, "y": 4, "flags": 4}, + {"matrix": [4, 4], "x": 4, "y": 4, "flags": 4}, + {"matrix": [4, 5], "x": 5, "y": 4, "flags": 4}, + {"matrix": [4, 6], "x": 6, "y": 4, "flags": 4}, + {"matrix": [4, 7], "x": 7, "y": 4, "flags": 4}, + {"matrix": [4, 8], "x": 8, "y": 4, "flags": 4}, + {"matrix": [4, 9], "x": 9, "y": 4, "flags": 4}, + {"matrix": [4, 10], "x": 10, "y": 4, "flags": 4}, + {"matrix": [4, 11], "x": 11, "y": 4, "flags": 4}, + {"matrix": [4, 12], "x": 12, "y": 4, "flags": 4}, + {"matrix": [5, 0], "x": 0, "y": 5, "flags": 4}, + {"matrix": [5, 1], "x": 1, "y": 5, "flags": 4}, + {"matrix": [5, 2], "x": 2, "y": 5, "flags": 4}, + {"matrix": [5, 3], "x": 3, "y": 5, "flags": 4}, + {"matrix": [5, 4], "x": 4, "y": 5, "flags": 4}, + {"matrix": [5, 5], "x": 5, "y": 5, "flags": 4}, + {"matrix": [5, 6], "x": 6, "y": 5, "flags": 4}, + {"matrix": [5, 7], "x": 7, "y": 5, "flags": 4}, + {"matrix": [5, 8], "x": 8, "y": 5, "flags": 4}, + {"matrix": [5, 9], "x": 9, "y": 5, "flags": 4}, + {"matrix": [5, 10], "x": 10, "y": 5, "flags": 4}, + {"matrix": [5, 11], "x": 11, "y": 5, "flags": 4}, + {"matrix": [5, 12], "x": 12, "y": 5, "flags": 4} + ] + }, + "ws2812": { + "pin": "GP9" + } +} diff --git a/qmk_keyboards/binarydiv/eepyboard/v1/keymaps/default/keymap.c b/qmk_keyboards/binarydiv/eepyboard/v1/keymaps/default/keymap.c new file mode 100644 index 0000000..6d818e3 --- /dev/null +++ b/qmk_keyboards/binarydiv/eepyboard/v1/keymaps/default/keymap.c @@ -0,0 +1,87 @@ +// Copyright 2024 binaryDiv (@binaryDiv) +// SPDX-License-Identifier: GPL-2.0-or-later +#include QMK_KEYBOARD_H + +// Define layer names for better readability +enum layer_names { + // Base layer + L_BASE, + + // "Code" layer -- TODO name? MOVE? + L_CODE, + + // Fn / keyboard control layer: Used for keyboard configuration + L_FN, +}; + +// Custom keycodes +enum custom_keycodes { + // Macro to select the current word (Ctrl-Left, Shift-Ctrl-Right) + MACRO_SELECT_WORD = SAFE_RANGE, +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + // Base layer + [L_BASE] = LAYOUT_ortho_6x13( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, _______, _______, _______, KC_KB_MUTE, + KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_EQUAL, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LEFT_BRACKET, KC_RIGHT_BRACKET, + KC_BACKSPACE, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SEMICOLON, KC_QUOTE, KC_BACKSLASH, + KC_LEFT_SHIFT, KC_BACKSPACE, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLASH, KC_RIGHT_SHIFT, + KC_LEFT_CTRL, KC_LEFT_ALT, KC_LEFT_GUI, OSL(L_HYPER), _______, KC_SPACE, _______, KC_BACKSPACE, KC_ENTER, KC_RIGHT_ALT, MO(L_HYPER), MO(L_FN), KC_RIGHT_CTRL + ), + + // "Hyper" key layer + [L_CODE] = LAYOUT_ortho_6x13( + _______, _______, _______, _______, _______, _______, _______, _______, KC_PRINT_SCREEN, _______, _______, _______, _______, + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, + _______, KC_HOME, KC_UP, KC_END, KC_PGUP, _______, KC_MS_WH_UP, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2, _______, KC_F12, _______, + KC_DELETE, KC_LEFT, KC_DOWN, KC_RIGHT, KC_PGDN, _______, KC_MS_WH_DOWN, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, _______, _______, _______, + _______, LCTL(KC_LEFT), MACRO_SELECT_WORD, LCTL(KC_RIGHT), _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, KC_SPACE, _______, KC_DELETE, _______, _______, _______, _______, _______ + ), + + // "Fn" key layer + [L_FN] = LAYOUT_ortho_6x13( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_REBOOT, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOTLOADER + ) +}; + +// Define mapping for rotary encoder +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { + [L_BASE] = { + ENCODER_CCW_CW(KC_KB_VOLUME_DOWN, KC_KB_VOLUME_UP) + }, + [L_CODE] = { + ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN) + }, + [L_FN] = { + ENCODER_CCW_CW(RGB_VAD, RGB_VAI) + } +}; +#endif + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case MACRO_SELECT_WORD: + // Run macro when keycode is pressed + if (record->event.pressed) { + // Select word + SEND_STRING(SS_LCTL(SS_TAP(X_LEFT)) SS_LSFT(SS_LCTL(SS_TAP(X_RIGHT)))); + } + break; + } + return true; +} + +// TODO: Idea for leader keys: vim keybindings everywhere :D +// Examples: +// - leader dd -> Home, Shift+Down, Ctrl+X +// - leader D -> Shift+End, Ctrl+X +// - same for yy/Y, etc. diff --git a/qmk_keyboards/binarydiv/eepyboard/v1/rules.mk b/qmk_keyboards/binarydiv/eepyboard/v1/rules.mk new file mode 100644 index 0000000..937faa0 --- /dev/null +++ b/qmk_keyboards/binarydiv/eepyboard/v1/rules.mk @@ -0,0 +1,8 @@ +# Enable support for rotary encoder +ENCODER_ENABLE = yes +ENCODER_MAP_ENABLE = yes + +# TODO: RP2040_BOOTLOADER_DOUBLE_TAP_RESET +# see https://docs.qmk.fm/flashing#raspberry-pi-rp2040-uf2 (below) + +WS2812_DRIVER = vendor