Compare commits

..

2 commits

14 changed files with 396 additions and 51 deletions

3
.gitmodules vendored
View file

@ -1,3 +0,0 @@
[submodule "geeboard_firmware/qmk_firmware"]
path = external/qmk_firmware
url = https://github.com/qmk/qmk_firmware.git

38
README.md Normal file
View file

@ -0,0 +1,38 @@
# geebord
> geeboard @ orangerot.dev // through the keyboard our ghosts rule the machine_
40% ortholinear mechanical diy keyboard with a thumbstick and qmk firmware.
## Features
- trackpoint-style thumbstick as pointing device (JKL as Mousebuttons);
- 40% formfactor to just barely fit in a pocket for the nintedo switch - it
surely has at least one switch inside :)
- ortholinear layout
- QMK Firmware
## Bill of Materials
- ` 1x` Adafruit KB2040 - RP2040 Kee Boar Driver
- ` 1x` Adafruit Mini 2-Axis Analog Thumbstick
- `46x` Kailh Switch Sockets for MX-compatible Mechanical Keys
- `46x` 1N4148 Diode
- ` 4x` M3 Screws of 24mm
- ` 4x` M3 Flange Nut
- 3mm Acrylic Sheet to fit 4 parts of 24x9cm
- 1mm Felt to fit 2 parts of 24x9cm
- Angled USB-C Cable
- Nintendo Switch Case
## PCB Settings
| Setting | PCB | Plate |
| --- | --- | --- |
| Thickness | 1.2mm | 1.6mm |
## License
The hardware is licensed under the CERN-OHL-S-v2 License while the firmware is
licensed under the GPLv3 License - see the `LICENSE` files for details

@ -1 +0,0 @@
Subproject commit ba63bac661c3c6154f3b42a85167b3552d29f0f8

View file

@ -1,28 +0,0 @@
# Inspired by Makefile from https://github.com/Felerius/planck-layout
keyboard := geeboard
layout := bone2planck
qmk_dir := ../external/qmk_firmware
keyboard_dir := ${qmk_dir}/keyboards/${keyboard}
.PHONY: build
build: ${keyboard_dir}
$(MAKE) -C ${qmk_dir} ${keyboard}:${layout}
.PHONY: flash
flash: ${keyboard_dir}
$(MAKE) -C ${qmk_dir} ${keyboard}:${layout}:flash
.PHONY: clean
clean:
$(MAKE) -C ${qmk_dir} clean
rm ${keyboard_dir}
# execute any qmk make target e.g. other keyboard/keymaps
.PHONY: %
%:
$(MAKE) -C ${qmk_dir} $@
${keyboard_dir}:
ln -sf "../../../geeboard_firmware" $@

View file

@ -1,11 +1,17 @@
#pragma once #pragma once
// #include "config_common.h"
#define ANALOG_JOYSTICK_X_AXIS_PIN GP28 #define ANALOG_JOYSTICK_X_AXIS_PIN GP28
#define ANALOG_JOYSTICK_Y_AXIS_PIN GP29 #define ANALOG_JOYSTICK_Y_AXIS_PIN GP29
#define POINTING_DEVICE_INVERT_Y #define POINTING_DEVICE_INVERT_Y
#define POINTING_DEVICE_INVERT_X #define POINTING_DEVICE_INVERT_X
#define ANALOG_JOYSTICK_WEIGHTS {0,0,0,0,0,0,0,0,0,0,0,15,15,16,17,18,18,19,19,20,20,21,21,21,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,24,24,24,24,24,24,25,25,25,26,26,26,27,28,28,29,29,30,31,32,33,34,35,36,37,38,40,41,43,44,46,48,49,51,53,56,58,60,62,65,68,70,73,76,79,82,85,89,92,96,100}
#define POINTING_DEVICE_AUTO_MOUSE_ENABLE #define POINTING_DEVICE_AUTO_MOUSE_ENABLE
// #define ANALOG_JOYSTICK_WEIGHTS {0,2,4,5,7,8,9,10,12,13,14,15,15,16,17,18,18,19,19,20,20,21,21,21,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,24,24,24,24,24,24,25,25,25,26,26,26,27,28,28,29,29,30,31,32,33,34,35,36,37,38,40,41,43,44,46,48,49,51,53,56,58,60,62,65,68,70,73,76,79,82,85,89,92,96,100}
#define ANALOG_JOYSTICK_WEIGHTS {0,0,0,0,0,0,0,0,0,0,0,15,15,16,17,18,18,19,19,20,20,21,21,21,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,24,24,24,24,24,24,25,25,25,26,26,26,27,28,28,29,29,30,31,32,33,34,35,36,37,38,40,41,43,44,46,48,49,51,53,56,58,60,62,65,68,70,73,76,79,82,85,89,92,96,100}
// only required if not setting mouse layer elsewhere
// #define AUTO_MOUSE_DEFAULT_LAYER 6
#define AUTO_MOUSE_TIME 1500 #define AUTO_MOUSE_TIME 1500
#define MIDI_BASIC

View file

@ -4,12 +4,14 @@
"maintainer": "Orangerot", "maintainer": "Orangerot",
"development_board": "kb2040", "development_board": "kb2040",
"diode_direction": "COL2ROW", "diode_direction": "COL2ROW",
"host_language": "german",
"features": { "features": {
"bootmagic": true, "bootmagic": true,
"command": false, "command": false,
"console": false, "console": false,
"extrakey": true, "extrakey": true,
"mousekey": true, "mousekey": true,
"midi": true,
"nkro": true "nkro": true
}, },
"matrix_pins": { "matrix_pins": {

View file

@ -0,0 +1,108 @@
#include QMK_KEYBOARD_H
#undef UNICODE_SELECTED_MODES
#define UNICODE_SELECTED_MODES UC_MAC, UC_LNX, UC_WIN, UC_WINC
extern keymap_config_t keymap_config;
#define _QWERTY 1
#define _BONE 0
#define _BONE_SHIFT 2
#define _BONE_SYM 3
#define _BONE_NAV 4
#define _BONE_GREEK 5
#define _BONE_MATH 6
#define _ADJUST 7
#define KC_BKSL KC_BSLASH
#define KC_ADEN LT(_ADJUST, KC_END)
#define KC_ADPU LT(_ADJUST, KC_PGUP)
enum my_keycodes {
KC_BNCP = SAFE_RANGE,
KC_BNM4,
KC_EN_UC_WIN
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case KC_RSFT:
layer_invert(_BONE_SHIFT);
update_tri_layer(_BONE_SYM, _BONE_SHIFT, _BONE_GREEK);
return true;
case KC_BNCP:
layer_invert(_BONE_SYM);
update_tri_layer(_BONE_SYM, _BONE_SHIFT, _BONE_GREEK);
update_tri_layer(_BONE_NAV, _BONE_SYM, _BONE_MATH);
return false;
case KC_BNM4:
layer_invert(_BONE_NAV);
update_tri_layer(_BONE_NAV, _BONE_SYM, _BONE_MATH);
return false;
case KC_EN_UC_WIN:
if(record->event.pressed)
SEND_STRING("reg add \"HKCU\\Control Panel\\Input Method\" -v EnableHexNumpad -t REG_SZ -d 1");
return false;
default:
return true;
}
}
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTY] = 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_CAPS,KC_A ,KC_S ,KC_D ,KC_F ,KC_G ,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN,KC_QUOT,
KC_LSFT,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,KC_N ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH,KC_LSFT,
KC_LCTL,KC_HYPR,KC_LGUI,KC_LALT,KC_ESC/*,XXXXX,XXXXX*/,KC_RALT,KC_LEFT,KC_DOWN,KC_UP ,KC_RGHT
),
[_ADJUST] = LAYOUT(
XXXXXXX,KC_F11 ,KC_F12 ,KC_F13 ,KC_F14 ,KC_F15 ,KC_F16 ,KC_F17 ,KC_F18 ,KC_F19 ,KC_F20 ,XXXXXXX,
XXXXXXX,UC_LINX,UC_MAC ,UC_WIN ,UC_WINC ,XXXXXXX,UC_WIN ,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,
XXXXXXX,UC_NEXT,UC_PREV,XXXXXXX,XXXXXXX ,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,
XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX/*,XXXXX ,XXXXX*/,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX
),
[_BONE] = LAYOUT(
KC_TAB ,KC_J ,KC_D ,KC_U ,KC_A ,KC_X ,KC_P ,KC_H ,KC_L ,KC_M ,KC_W,UC(L'ß'),
KC_BNCP,KC_C ,KC_T ,KC_I ,KC_E ,KC_O ,KC_B ,KC_N ,KC_R ,KC_S ,KC_G,KC_Q ,
KC_RSFT,KC_F ,KC_V ,UC(L'ü'),UC(L'ä'),UC(L'ö'),KC_Y ,KC_Z ,KC_COMM,KC_DOT ,KC_K,KC_RSFT ,
KC_LCTL,KC_HYPR,KC_LGUI,KC_LALT ,KC_ESC /*,XXXXX ,XXXXX*/ ,KC_BNM4 ,KC_LEFT,KC_DOWN,KC_UP ,KC_RGHT
),
[_BONE_SHIFT] = LAYOUT(
_______,_______,_______,_______ ,_______ ,_______ ,_______,_______,_______,_______,_______,UC(L''),
_______,_______,_______,_______ ,_______ ,_______ ,_______,_______,_______,_______,_______,_______ ,
_______,_______,_______,UC(L'Ü'),UC(L'Ä'),UC(L'Ö'),_______,_______,_______,_______,_______,_______ ,
_______,_______,_______,_______ ,_______ /*,XXXXX ,XXXXX*/,_______,_______,_______,_______,_______
),
[_BONE_SYM] = LAYOUT(
_______,XXXXXXX,KC_UNDS,KC_LBRC,KC_RBRC,KC_CIRC,KC_EXLM,KC_LT ,KC_GT ,KC_EQL ,KC_AMPR,XXXXXXX,
_______,KC_BSLS,KC_SLSH,KC_LCBR,KC_RCBR,KC_ASTR,KC_QUES,KC_LPRN,KC_RPRN,KC_MINS,KC_COLN,KC_AT ,
KC_RSFT,KC_HASH,KC_DLR ,KC_PIPE,KC_TILD,KC_GRV ,KC_PLUS,KC_PERC,KC_DQUO,KC_QUOT,KC_SCLN,XXXXXXX,
_______,_______,_______,_______,_______/*,XXXXX,XXXXX*/,_______,_______,_______,_______,_______
),
[_BONE_NAV] = LAYOUT(
_______,KC_PGUP,KC_BSPC,KC_UP ,KC_DEL ,KC_PGDN,XXXXXXX,KC_P7 ,KC_P8 ,KC_P9 ,KC_PPLS,KC_PMNS,
_______,KC_HOME,KC_LEFT,KC_DOWN,KC_RGHT,KC_END ,XXXXXXX,KC_P4 ,KC_P5 ,KC_P6 ,KC_PDOT,KC_COMM,
_______,KC_ESC ,KC_TAB ,KC_INS ,KC_ENT ,KC_UNDO,KC_COLN,KC_P1 ,KC_P2 ,KC_P3 ,KC_SCLN,_______,
_______,_______,_______,_______,_______/*,XXXXX,XXXXX*/,_______,_______,_______,_______,_______
),
[_BONE_GREEK] = LAYOUT(
_______,UC(L'θ'),UC(L'δ'),UC(L'λ'),UC(L'α'),UC(L'ξ'),UC(L'π'),UC(L'ψ'),UC(L'λ'),UC(L'μ'),UC(L'ω'),UC(L'ς'),
_______,UC(L'χ'),UC(L'τ'),UC(L'ι'),UC(L'ε'),UC(L'ο'),UC(L'β'),UC(L'ν'),UC(L'ρ'),UC(L'σ'),UC(L'γ'),UC(L'ϕ'),
_______,UC(L'φ'),UC(L'ϵ'),UC(L'η'),XXXXXXX ,XXXXXXX ,UC(L'υ'),UC(L'ζ'),UC(L'ϱ'),UC(L'ϑ'),UC(L'κ'),_______ ,
_______,_______ ,_______ ,_______ ,_______ /*,XXXXX ,XXXXX*/ ,_______ ,_______ ,_______ ,_______ ,_______
),
[_BONE_MATH] = LAYOUT(
_______,UC(L'Θ'),UC(L'Δ'),UC(L''),UC(L''),UC(L'Ξ'),UC(L'Π'),UC(L'Ψ'),UC(L'Λ'),UC(L''),UC(L'Ω'),UC(L''),
_______,UC(L''),UC(L''),UC(L''),UC(L''),UC(L''),UC(L''),UC(L''),UC(L''),UC(L'Σ'),UC(L'Γ'),UC(L''),
_______,UC(L'Φ'),UC(L''),UC(L''),XXXXXXX ,XXXXXXX ,UC(L''),UC(L''),UC(L''),UC(L''),UC(L'×'),_______ ,
_______,_______ ,_______ ,_______ ,_______ /*,XXXXX ,XXXXX*/ ,_______ ,_______ ,_______ ,_______ ,_______
)
};
/* vim: set et ts=2: */

View file

@ -0,0 +1,50 @@
{
"keyboard": "geeboard",
"keymap": "bone",
"layout": "LAYOUT",
"layers": [
[
"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_CAPS", "KC_A", "KC_S", "KC_D", "KC_F", "KC_G", "KC_H", "KC_J", "KC_K", "KC_L", "KC_SCLN", "KC_QUOT",
"KC_LSFT", "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", "KC_N", "KC_M", "KC_COMM", "KC_DOT", "KC_SLSH", "KC_LSFT",
"KC_LCTL", "KC_HYPR", "KC_LGUI", "KC_LALT", "KC_ESC", "KC_RALT", "KC_LEFT", "KC_DOWN", "KC_UP", "KC_RGHT"
],
[
"KC_NO", "KC_F11", "KC_F12", "KC_F13", "KC_F14", "KC_F15", "KC_F16", "KC_F17", "KC_F18", "KC_F19", "KC_F20", "KC_NO",
"KC_NO", "UC_LINX", "UC_MAC", "UC_WIN", "UC_WINC", "KC_NO", "UC_WIN", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO",
"KC_NO", "UC_NEXT", "UC_PREV", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO",
"KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"
], [
"KC_TAB", "KC_J", "KC_D", "KC_U", "KC_A", "KC_X", "KC_P", "KC_H", "KC_L", "KC_M", "KC_W", "UC(L'ß')",
"KC_BNCP", "KC_C", "KC_T", "KC_I", "KC_E", "KC_O", "KC_B", "KC_N", "KC_R", "KC_S", "KC_G", "KC_Q",
"KC_RSFT", "KC_F", "KC_V", "UC(L'ü')", "UC(L'ä')", "UC(L'ö')", "KC_Y", "KC_Z", "KC_COMM", "KC_DOT", "KC_K", "KC_RSFT",
"KC_LCTL", "KC_HYPR", "KC_LGUI", "KC_LALT", "KC_ESC", "KC_BNM4", "KC_LEFT", "KC_DOWN", "KC_UP", "KC_RGHT"
], [
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "UC(L'ẞ')",
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS",
"KC_TRNS", "KC_TRNS", "KC_TRNS", "UC(L'Ü')", "UC(L'Ä')", "UC(L'Ö')", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS",
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS"
], [
"KC_TRNS", "KC_NO", "KC_UNDS", "KC_LBRC", "KC_RBRC", "KC_CIRC", "KC_EXLM", "KC_LT", "KC_GT", "KC_EQL", "KC_AMPR", "KC_NO",
"KC_TRNS", "KC_BSLS", "KC_SLSH", "KC_LCBR", "KC_RCBR", "KC_ASTR", "KC_QUES", "KC_LPRN", "KC_RPRN", "KC_MINS", "KC_COLN", "KC_AT",
"KC_RSFT", "KC_HASH", "KC_DLR", "KC_PIPE", "KC_TILD", "KC_GRV", "KC_PLUS", "KC_PERC", "KC_DQUO", "KC_QUOT", "KC_SCLN", "KC_NO",
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS"
], [
"KC_TRNS", "KC_PGUP", "KC_BSPC", "KC_UP", "KC_DEL", "KC_PGDN", "KC_NO", "KC_P7", "KC_P8", "KC_P9", "KC_PPLS", "KC_PMNS",
"KC_TRNS", "KC_HOME", "KC_LEFT", "KC_DOWN", "KC_RGHT", "KC_END", "KC_NO", "KC_P4", "KC_P5", "KC_P6", "KC_PDOT", "KC_COMM",
"KC_TRNS", "KC_ESC", "KC_TAB", "KC_INS", "KC_ENT", "KC_UNDO", "KC_COLN", "KC_P1", "KC_P2", "KC_P3", "KC_SCLN", "KC_TRNS",
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS"
], [
"KC_TRNS", "UC(L'θ')", "UC(L'δ')", "UC(L'λ')", "UC(L'α')", "UC(L'ξ')", "UC(L'π')", "UC(L'ψ')", "UC(L'λ')", "UC(L'μ')", "UC(L'ω')", "UC(L'ς')",
"KC_TRNS", "UC(L'χ')", "UC(L'τ')", "UC(L'ι')", "UC(L'ε')", "UC(L'ο')", "UC(L'β')", "UC(L'ν')", "UC(L'ρ')", "UC(L'σ')", "UC(L'γ')", "UC(L'ϕ')",
"KC_TRNS", "UC(L'φ')", "UC(L'ϵ')", "UC(L'η')", "KC_NO", "KC_NO", "UC(L'υ')", "UC(L'ζ')", "UC(L'ϱ')", "UC(L'ϑ')", "UC(L'κ')", "KC_TRNS",
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS"
], [
"KC_TRNS", "UC(L'Θ')", "UC(L'Δ')", "UC(L'⊂')", "UC(L'∀')", "UC(L'Ξ')", "UC(L'Π')", "UC(L'Ψ')", "UC(L'Λ')", "UC(L'⇔')", "UC(L'Ω')", "UC(L'∘')",
"KC_TRNS", "UC(L'')", "UC(L'∂')", "UC(L'∫')", "UC(L'∃')", "UC(L'∈')", "UC(L'⇐')", "UC(L'')", "UC(L'')", "UC(L'Σ')", "UC(L'Γ')", "UC(L'')",
"KC_TRNS", "UC(L'Φ')", "UC(L'√')", "UC(L'')", "KC_NO", "KC_NO", "UC(L'∇')", "UC(L'')", "UC(L'⇒')", "UC(L'↦')", "UC(L'×')", "KC_TRNS",
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS"
]
]
}

View file

@ -7,12 +7,6 @@
#include "..\..\..\..\tmk_core\common\keycode.h" #include "..\..\..\..\tmk_core\common\keycode.h"
*/ */
/*
Bone2Planck for the planck keyboard from the qmk_firmware at commit 7ea022b as of the
[[Keymap Removal] Planck and related keymaps.](https://github.com/qmk/qmk_firmware/pull/22683)
*/
/* This Layout tries to emulate the Bone2 Variant of Neo2, and is intended to be used with a German QWERTZ Softwarelayout. /* This Layout tries to emulate the Bone2 Variant of Neo2, and is intended to be used with a German QWERTZ Softwarelayout.
It has "üäöß" as it is optimized for a mix of German & English. It has "üäöß" as it is optimized for a mix of German & English.
My favourite features are the placement of the special characters often used for programming right on the home row My favourite features are the placement of the special characters often used for programming right on the home row
@ -20,10 +14,62 @@ and the number & navigation block combo, so you never have to move your hands fr
Bone2 wiki page: http://wiki.neo-layout.org/wiki/Bone Bone2 wiki page: http://wiki.neo-layout.org/wiki/Bone
*/ */
enum custom_keycodes {
CC_MS_BTN1 = SAFE_RANGE,
CC_MS_BTN2,
CC_MS_BTN3,
};
void pointing_device_init_user(void) { void pointing_device_init_user(void) {
set_auto_mouse_layer(6); // only required if AUTO_MOUSE_DEFAULT_LAYER is not set to index of <mouse_layer> set_auto_mouse_layer(6); // only required if AUTO_MOUSE_DEFAULT_LAYER is not set to index of <mouse_layer>
set_auto_mouse_enable(true); // always required before the auto mouse feature will work set_auto_mouse_enable(true); // always required before the auto mouse feature will work
}
bool is_middle_click = false;
bool is_left_click = false;
bool is_right_clicK = false;
// Modify these values to adjust the scrolling speed
#define SCROLL_DIVISOR_H 8.0
#define SCROLL_DIVISOR_V 8.0
// Variables to store accumulated scroll values
float scroll_accumulated_h = 0;
float scroll_accumulated_v = 0;
report_mouse_t pointing_device_task_user(report_mouse_t mouse_report) {
if (is_middle_click) {
// Calculate and accumulate scroll values based on mouse movement and divisors
scroll_accumulated_h += (float)mouse_report.x / SCROLL_DIVISOR_H;
scroll_accumulated_v += (float)mouse_report.y / SCROLL_DIVISOR_V;
// Assign integer parts of accumulated scroll values to the mouse report
mouse_report.h = (int8_t)scroll_accumulated_h;
mouse_report.v = (int8_t)scroll_accumulated_v;
// Update accumulated scroll values by subtracting the integer parts
scroll_accumulated_h -= (int8_t)scroll_accumulated_h;
scroll_accumulated_v -= (int8_t)scroll_accumulated_v;
// Clear the X and Y values of the mouse report
mouse_report.x = 0;
mouse_report.y = 0;
}
return mouse_report;
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
report_mouse_t currentReport = pointing_device_get_report();
if (keycode == CC_MS_BTN1) {
currentReport.buttons = record->event.pressed;
}
if (keycode == CC_MS_BTN2) {
is_right_clicK = record->event.pressed;
}
if (keycode == CC_MS_BTN3) {
is_middle_click = record->event.pressed;
}
return true;
} }
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
@ -41,28 +87,30 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/ */
// columnt -t -o' ' // columnt -t -o' '
[0] = LAYOUT_ortho_4x12( [0] = LAYOUT_ortho_4x12(
DE_SS, DE_J, DE_D, DE_U, DE_A, DE_X, DE_P, DE_H, DE_L, DE_M, DE_W, DE_Q , // MO(1), DE_C, DE_T, DE_I, DE_E, DE_O, DE_B, DE_N, DE_R, DE_S, DE_G, LT(1,KC_ENT) ,
LT(1,KC_TAB), DE_C, DE_T, DE_I, DE_E, DE_O, DE_B, DE_N, DE_R, DE_S, DE_G, LT(1,KC_ENT) , // KC_LCTL, KC_LGUI, KC_LALT, MO(4), MO(2), KC_SPC, KC_SPC, MO(2), MO(4), KC_RALT, KC_ESC, KC_RCTL
MT(MOD_LSFT,KC_ESC), DE_F, DE_V, DE_UDIA, DE_ADIA, DE_ODIA, DE_Y, DE_Z, DE_COMM, DE_DOT, DE_K, KC_LSFT , DE_SS, DE_J, DE_D, DE_U, DE_A, DE_X, DE_P, DE_H, DE_L, DE_M, DE_W, DE_Q ,
KC_LCTL, KC_LALT, KC_LGUI, MO(2), KC_SPC, XXXXXXX, XXXXXXX, KC_ENT, MO(4), KC_RALT, KC_ESC, KC_RCTL LT(1,KC_TAB), DE_C, DE_T, DE_I, DE_E, DE_O, DE_B, DE_N, DE_R, DE_S, DE_G, LT(1,KC_ENT) ,
MT(MOD_LSFT,KC_ESC), DE_F, DE_V, DE_UDIA, DE_ADIA, DE_ODIA, DE_Y, DE_Z, DE_COMM, DE_DOT, DE_K, KC_LSFT ,
KC_LCTL, KC_LALT, KC_LGUI, MO(2), KC_SPC, XXXXXXX, XXXXXXX, KC_ENT, MO(4), KC_RALT, TG(7), KC_RCTL
), ),
/* M1 Special Characters /* M1 Special Characters
* very ergonomic placement for coding * very ergonomic placement for coding
* ,-----------------------------------------------------------------------------------. * ,-----------------------------------------------------------------------------------.
* | ° | @ | _ | [ | ] | ^ | ! | < | > | = | & | | * | ° | @ | _ | [ | ] | ^ | ! | < | > | = | & | ´ |
* |------+------+------+------+------+-------------+------+------+------+------+------| * |------+------+------+------+------+-------------+------+------+------+------+------|
* | M1 | \ | / | { | } | * | ? | ( | ) | - | : | @ | //hold for M1, tap for Enter * | M1 | \ | / | { | } | * | ? | ( | ) | - | : |M1/Ent| //hold for M1, tap for Enter
* |------+------+------+------+------+------|------+------+------+------+------+------| * |------+------+------+------+------+------|------+------+------+------+------+------|
* | Shift| # | $ | | | ~ | ` | + | % | " | ' | ; |Shift | * | Shift| # | ~ | | | $ | | + | % | " | ' | ; |Shift |
* |------+------+------+------+------+------+------+------+------+------+------+------| * |------+------+------+------+------+------+------+------+------+------+------+------|
* | Ctrl | GUI | Alt | M4 | M2 | Space | M2 | M4 | Alt | Esc | Ctrl | * | Ctrl | GUI | Alt | M4 | M2 | Space | M2 | M4 | Alt | Esc | Ctrl |
* `-----------------------------------------------------------------------------------' * `-----------------------------------------------------------------------------------'
*/ */
[1] = LAYOUT_ortho_4x12( [1] = LAYOUT_ortho_4x12(
DE_DEG, DE_AT, DE_UNDS, DE_LBRC, DE_RBRC, DE_CIRC, DE_EXLM, DE_LABK, DE_RABK, DE_EQL, DE_AMPR, DE_EURO , DE_DEG, DE_AT, DE_UNDS, DE_LBRC, DE_RBRC, DE_CIRC, DE_EXLM, DE_LABK, DE_RABK, DE_EQL, DE_AMPR, DE_ACUT ,
_______, DE_BSLS, DE_SLSH, DE_LCBR, DE_RCBR, DE_ASTR, DE_QUES, DE_LPRN, DE_RPRN, DE_MINS, DE_COLN, DE_AT , _______, DE_BSLS, DE_SLSH, DE_LCBR, DE_RCBR, DE_ASTR, DE_QUES, DE_LPRN, DE_RPRN, DE_MINS, DE_COLN, _______ ,
_______, DE_HASH, DE_DLR, DE_PIPE, DE_TILD, DE_GRV, DE_PLUS, DE_PERC, DE_DQUO, DE_QUOT, DE_SCLN, _______ , _______, DE_HASH, DE_TILD, DE_PIPE, DE_DLR, DE_EURO, DE_PLUS, DE_PERC, DE_DQUO, DE_QUOT, DE_SCLN, _______ ,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
), ),
@ -149,4 +197,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
), ),
[7] = LAYOUT_ortho_4x12(
MI_C, MI_Cs, MI_D, MI_Ds, MI_E, MI_F, MI_Fs, MI_G, MI_Gs, MI_A, MI_As, MI_B,
MI_C1, MI_Cs1, MI_D1, MI_Ds1, MI_E1, MI_F1, MI_Fs1, MI_G1, MI_Gs1, MI_A1, MI_As1, MI_B1,
MI_C2, MI_Cs2, MI_D2, MI_Ds2, MI_E2, MI_F2, MI_Fs2, MI_G2, MI_Gs2, MI_A2, MI_As2, MI_B2,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, MI_TOGG
),
}; };

View file

@ -0,0 +1,96 @@
Bone2Planck
=====================================
This layout tries to emulate the Bone2 variant of Neo2, and is intended to be used with a German QWERTZ softwarelayout.
It has "üäöß" as it is optimized for a mix of German & English.
The special character layer and the navigation & number block layer are inspired by the Neo2 layers,
designed to keep the fingers near the home row.
Bone2 wiki page: http://wiki.neo-layout.org/wiki/Bone
To build, run "make" from within the \bone2planck folder.
## Bone2 (adapted) Base Layer
```
,-----------------------------------------------------------------------------------.
| ß | J | D | U | A | X | P | H | L | M | W | Q |
|------+------+------+------+------+-------------+------+------+------+------+------|
| M1 | C | T | I | E | O | B | N | R | S | G |M1/Ent| hold: M1, tap: Enter
|------+------+------+------+------+------|------+------+------+------+------+------|
| Shift| F | V | Ü | Ä | Ö | Y | Z | , | . | K |Shift |
|------+------+------+------+------+------+------+------+------+------+------+------|
| Ctrl | GUI | Alt | M4 | M2 | Space | M2 | M4 | Alt | Esc | Ctrl |
`-----------------------------------------------------------------------------------'
```
## M1 Special Characters
very ergonomic placement for coding
```
,-----------------------------------------------------------------------------------.
| ° | @ | _ | [ | ] | ^ | ! | < | > | = | & | ´ |
|------+------+------+------+------+-------------+------+------+------+------+------|
| M1 | \ | / | { | } | * | ? | ( | ) | - | : |M1/Ent| hold: M1, tap: Enter
|------+------+------+------+------+------|------+------+------+------+------+------|
| Shift| # | ~ | | | $ | € | + | % | " | ' | ; |Shift |
|------+------+------+------+------+------+------+------+------+------+------+------|
| Ctrl | GUI | Alt | M4 | M2 | Space | M2 | M4 | Alt | Esc | Ctrl |
`-----------------------------------------------------------------------------------'
```
## M2 Navigation & Number Blocks
very easy to get used to & intuituve placement
```
,-----------------------------------------------------------------------------------.
| | PgUp | Bksp | Up | DEL | PgDn | | 7 | 8 | 9 | | Ins |
|------+------+------+------+------+-------------+------+------+------+------+------|
| Tab | Home | Lft | Down | Right| End | | 4 | 5 | 6 | . | Enter|
|------+------+------+------+------+------|------+------+------+------+------+------|
| Shift| | Tab | | Enter| | 0 | 1 | 2 | 3 | , |Shift |
|------+------+------+------+------+------+------+------+------+------+------+------|
| Ctrl | GUI | Alt | M3 | M2 | Space | M2 | M3 | Alt | Esc | Ctrl |
`-----------------------------------------------------------------------------------'
```
## M4 Function & Media Keys
```
,-----------------------------------------------------------------------------------.
| | | Print|Scroll|Pause | | | F7 | F8 | F9 | F12 | |
|------+------+------+------+------+-------------+------+------+------+------+------|
| Tab | | Mute | Vol- | Vol+ | | ³ | F4 | F5 | F6 | F11 | Enter|
|------+------+------+------+------+------|------+------+------+------+------+------|
| Shift| | Prev | Play | Next | | ² | F1 | F2 | F3 | F10 |Shift |
|------+------+------+------+------+------+------+------+------+------+------+------|
| Ctrl | GUI | Alt | M4 | M5 | Space | M5 | M4 | Alt | Esc | Ctrl |
`-----------------------------------------------------------------------------------'
```
##Switched layers for one handed access:
### M3 Switched Navigation & Number Blocks
accessed by sliding from M2 to M3 with thumb
```
,-----------------------------------------------------------------------------------.
| Ins | | 7 | 8 | 9 | | PgUp | Bksp | Up | DEL | PgDn | |
|------+------+------+------+------+-------------+------+------+------+------+------|
| Tab | | 4 | 5 | 6 | . | Home | Left | Down | Right| End | Enter|
|------+------+------+------+------+------|------+------+------+------+------+------|
| Shift| 0 | 1 | 2 | 3 | , | | Tab | | Enter| |Shift |
|------+------+------+------+------+------+------+------+------+------+------+------|
| Ctrl | GUI | Alt | M3 | | Space | | M3 | Alt | Esc | Ctrl |
`-----------------------------------------------------------------------------------'
```
### M5 Switched Function & Media Keys
accessed by sliding from M4 to M5 with thumb
```
,-----------------------------------------------------------------------------------.
| | | F7 | F8 | F9 | F12 | | Print|Scroll| Pause| | |
|------+------+------+------+------+-------------+------+------+------+------+------|
| Tab | ³ | F4 | F5 | F6 | F11 | | Mute | Vol- | Vol+ | | Enter|
|------+------+------+------+------+------|------+------+------+------+------+------|
| Shift| ² | F1 | F2 | F3 | F10 | | Prev | Play | Next | |Shift |
|------+------+------+------+------+------+------+------+------+------+------+------|
| Ctrl | GUI | Alt | | M5 | Space | M5 | | Alt | Esc | Ctrl |
`-----------------------------------------------------------------------------------'
```

View file

@ -0,0 +1,20 @@
# Build Options
# change to "no" to disable the options, or define them in the Makefile in
# the appropriate keymap folder that will get included automatically
#
BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
MOUSEKEY_ENABLE = no # 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
NKRO_ENABLE = yes # 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
MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend

View file

@ -1,3 +1,6 @@
POINTING_DEVICE_ENABLE = yes POINTING_DEVICE_ENABLE = yes
POINTING_DEVICE_DRIVER = analog_joystick POINTING_DEVICE_DRIVER = analog_joystick
MOUSEKEY_ENABLE = yes
MIDI_ENABLE = yes
BOOTMAGIC_ENABLE = yes