diff --git a/docs/feature_digitizer.md b/docs/feature_digitizer.md index ac2d64f9777..2e9e37cd5f2 100644 --- a/docs/feature_digitizer.md +++ b/docs/feature_digitizer.md @@ -1,35 +1,117 @@ -## Digitizer +# Digitizer :id=digitizer -The digitizer HID interface allows setting the mouse cursor position at absolute coordinates, unlike the Pointing Device feature that applies relative displacements. +Digitizers allow the mouse cursor to be placed at absolute coordinates, unlike the [Pointing Device](feature_pointing_device.md) feature which applies relative displacements. -To enable the digitizer interface, add the following line to your rules.mk: +This feature implements a stylus device with a tip switch and barrel switch (generally equivalent to the primary and secondary mouse buttons respectively). Tip pressure is not currently implemented. + +## Usage :id=usage + +Add the following to your `rules.mk`: ```make DIGITIZER_ENABLE = yes ``` -In order to change the mouse cursor position from your keymap.c file, include the digitizer header : +## Positioning :id=positioning + +The X and Y coordinates are normalized, meaning their value must be set between 0 and 1. For the X component, the value `0` is the leftmost position, whereas the value `1` is the rightmost position. Similarly for the Y component, `0` is at the top and `1` at the bottom. + +?> Since there is no display attached, the OS will likely map these coordinates to the virtual desktop. This may be important to know if you have multiple monitors. + +## Examples :id=examples + +This example simply places the cursor in the middle of the screen: ```c -#include "digitizer.h" +digitizer_in_range_on(); +digitizer_set_position(0.5, 0.5); ``` -This gives you access to the `digitizer` structure which members allow you to change the cursor position. +The "in range" indicator is required to be on for the change in coordinates to be taken. It can then be turned off again to signal the end of the digitizer interaction, but it is not strictly required. -The coordinates are normalized, meaning there value must be set between 0 and 1. For the `x` coordinate, the value `0` is the leftmost position, whereas the value `1` is the rightmost position. -For the `y` coordinate, `0` is at the top and `1` at the bottom. - -Here is an example setting the cursor in the middle of the screen: +You can also modify the digitizer state directly, if you need to change multiple fields in a single report: ```c -digitizer_t digitizer; -digitizer.x = 0.5; -digitizer.y = 0.5; -digitizer.tipswitch = 0; -digitizer.inrange = 1; -digitizer_set_report(digitizer); +digitizer_state.in_range = true; +digitizer_state.dirty = true; +digitizer_flush(); ``` -The `tipswitch` member triggers what equates to a click when set to `1`. The `inrange` member is required for the change in coordinates to be taken. It can then be set to `0` in a new report to signal the end of the digitizer interaction, but it is not strictly required. +`digitizer_state` is a struct of type `digitizer_t`. -Once all members are set to the desired value, the `status` member needs its bitmask `DZ_UPDATED` to be set so the report is sent during the next main loop iteration. + +## API :id=api + +### `struct digitizer_t` :id=api-digitizer-t + +Contains the state of the digitizer. + +#### Members :id=api-digitizer-t-members + + - `bool in_range` + Indicates to the host that the contact is within range (ie. close to or in contact with the digitizer surface). + - `bool tip` + The state of the tip switch. + - `bool barrel` + The state of the barrel switch. + - `float x` + The X coordinate of the digitizer contact. + - `float y` + The Y coordinate of the digitizer contact. + - `bool dirty` + Whether the current state needs to be sent to the host. + +--- + +### `void digitizer_flush(void)` :id=api-digitizer-flush + +Send the digitizer report to the host if it is marked as dirty. + +--- + +### `void digitizer_in_range_on(void)` :api-digitizer-in-range-on + +Assert the "in range" indicator, and flush the report. + +--- + +### `void digitizer_in_range_off(void)` :api-digitizer-in-range-off + +Deassert the "in range" indicator, and flush the report. + +--- + +### `void digitizer_tip_switch_on(void)` :api-digitizer-tip-switch-on + +Assert the tip switch, and flush the report. + +--- + +### `void digitizer_tip_switch_off(void)` :api-digitizer-tip-switch-off + +Deassert the tip switch, and flush the report. + +--- + +### `void digitizer_barrel_switch_on(void)` :api-digitizer-barrel-switch-on + +Assert the barrel switch, and flush the report. + +--- + +### `void digitizer_barrel_switch_off(void)` :api-digitizer-barrel-switch-off + +Deassert the barrel switch, and flush the report. + +--- + +### `void digitizer_set_position(float x, float y)` :api-digitizer-set-position + +Set the absolute X and Y position of the digitizer contact, and flush the report. + +#### Arguments :id=api-digitizer-set-position-arguments + + - `float x` + The X value of the contact position, from 0 to 1. + - `float y` + The Y value of the contact position, from 0 to 1. diff --git a/keyboards/boardsource/lulu/keymaps/rmeli/config.h b/keyboards/boardsource/lulu/keymaps/rmeli/config.h new file mode 100644 index 00000000000..4d8823d785d --- /dev/null +++ b/keyboards/boardsource/lulu/keymaps/rmeli/config.h @@ -0,0 +1,45 @@ +/* +Copyright 2022 Rocco Meli <@RMeli> + +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 . +*/ + +#pragma once + +#define MASTER_LEFT // Left side is the master +#define SPLIT_LED_STATE_ENABLE + +#ifdef RGB_MATRIX_ENABLE +// Configure RGB Matrix +# define RGB_MATRIX_KEYPRESSES // enable keypress effects +# define RGB_MATRIX_LED_FLUSH_LIMIT 16 +# define RGB_DISABLE_WHEN_USB_SUSPENDED +# define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_SOLID_COLOR +# define RGB_MATRIX_STARTUP_HUE 10 +# define RGB_MATRIX_STARTUP_SAT 255 +# define RGB_MATRIX_STARTUP_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS +// Disable RGB Matrix effects (from lulu/config.h) +# undef ENABLE_RGB_MATRIX_ALPHAS_MODS +# undef ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN +# undef ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT +# undef ENABLE_RGB_MATRIX_BREATHING +# undef ENABLE_RGB_MATRIX_BAND_SAT +# undef ENABLE_RGB_MATRIX_BAND_VAL +// Enable RGB Matrix effects +# define ENABLE_RGB_MATRIX_BREATHING +# define ENABLE_RGB_MATRIX_TYPING_HEATMAP +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE +# define ENABLE_RGB_MATRIX_SOLID_COLOR +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE +#endif diff --git a/keyboards/boardsource/lulu/keymaps/rmeli/keymap.c b/keyboards/boardsource/lulu/keymaps/rmeli/keymap.c new file mode 100644 index 00000000000..f9be18ee2d7 --- /dev/null +++ b/keyboards/boardsource/lulu/keymaps/rmeli/keymap.c @@ -0,0 +1,108 @@ +/* +Copyright 2022 Cole Smith +Copyright 2022 Rocco Meli <@RMeli> + +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 . +*/ + +#include QMK_KEYBOARD_H + +#include "rmeli.h" + +enum layers { + _QWERTY, + _COLEMAK_DH, + _RAISE, + _LOWER, + _ADJUST, +}; + +#define RAISE MO(_RAISE) +#define LOWER MO(_LOWER) + +#define QWY_DF DF(_QWERTY) +#define CMK_DF DF(_COLEMAK_DH) + +// clang-format off +#define __________THUMB_LEFT_x4___________ KC_LALT, KC_LGUI, LOWER, KC_SPC +#define __________THUMB_RIGHT_x4__________ KC_ENT, RAISE, KC_LCTL, KC_RGUI +// clang-format on + +/* LAYOUT + * + * ,-----------------------------. ,-----------------------------. + * | | | | | | | | | | | | | | + * |----+----+----+----+----+----| |----+----+----+----+----+----| + * | | | | | | | | | | | | | | + * |----+----+----+----+----+----| |----+----+----+----+----+----| + * | | | | | | |-----. ,-----| | | | | | | + * |----+----+----+----+----+----| | | |----+----+----+----+----+----| + * | | | | | | |-----| |-----| | | | | | | + * `----------------------------/ / \ \----------------------------' + * | | | | / / \ \ | | | | + * | | | |/ / \ \ | | | | + * `--------------''-----' '------''--------------' + */ + +// Define wrapper for standard LULU layout +#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__) + +// clang-format off +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_QWERTY] = LAYOUT_wrapper( + ___________________NUMBER_LEFT_x6___________________, ___________________NUMBER_RIGHT_x6__________________, + ___________________QWERTY_L1_x6_____________________, ___________________QWERTY_R1_x6_____________________, + ___________________QWERTY_L2_x6_____________________, ___________________QWERTY_R2_x6_____________________, + ___________________QWERTY_L3_x6_____________________, KC_LBRC, KC_RBRC, ___________________QWERTY_R3_x6_____________________, + __________THUMB_LEFT_x4___________, __________THUMB_RIGHT_x4__________ + ), + + [_COLEMAK_DH] = LAYOUT_wrapper( + ___________________NUMBER_LEFT_x6___________________, ___________________NUMBER_RIGHT_x6__________________, + ________________COLEMAK_MOD_DH_L1_x6________________, ________________COLEMAK_MOD_DH_R1_x6________________, + ________________COLEMAK_MOD_DH_L2_x6________________, ________________COLEMAK_MOD_DH_R2_x6________________, + ________________COLEMAK_MOD_DH_L3_x6________________, KC_LBRC, KC_RBRC, ________________COLEMAK_MOD_DH_R3_x6________________, + __________THUMB_LEFT_x4___________, __________THUMB_RIGHT_x4__________ + ), + + [_LOWER] = LAYOUT_wrapper( + ____________________FUNC_LEFT_x6____________________, ____________________FUNC_RIGHT_x6___________________, + _______, ______________NUMBER_LEFT_x5_______________, ______________NUMBER_RIGHT_x5______________, _______, + _______, ______________UNICODE_L2_x5________________, ________________NAV_R2_x5__________________, XXXXXXX, + _______, ______________UNICODE_L3_x5________________, _______, _______, ________________NAV_R3_x5__________________, _______, + _______, _______, _______, _______, _______, _______, _______, _______ + ), + + [_RAISE] = LAYOUT_wrapper( + ___________________NUMBER_LEFT_x6___________________, ___________________NUMBER_RIGHT_x6__________________, + ___________________SYMBOL_LEFT_x6___________________, ___________________SYMBOL_RIGHT_x6__________________, + _______, ____________NAV_VIM_x4____________, XXXXXXX, ____________________SYMBOL_R2_x6____________________, + _______, _________________NONE_5x___________________, _______, _______, ____________________SYMBOL_R3_x6____________________, + _______, _______, _______, _______, _______, _______, _______, _______ + ), + + [_ADJUST] = LAYOUT_wrapper( + QK_BOOT, _________________NONE_5x___________________, ______________________NONE_6x_______________________, + XXXXXXX, _________________NONE_5x___________________, _______________CONFIG_R1_x5________________, QWY_DF, + RGB_TOG, ________________RGB_L2_x5__________________, _______________CONFIG_R2_x5________________, XXXXXXX, + XXXXXXX, ________________RGB_L3_x5__________________, _______, _______, _______________CONFIG_R3_x5________________, CMK_DF, + _______, _______, _______, _______, _______, _______, _______, _______ + ) +}; +// clang-format on + +layer_state_t layer_state_set_user(layer_state_t state) { + return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST); +} diff --git a/keyboards/boardsource/lulu/keymaps/rmeli/rules.mk b/keyboards/boardsource/lulu/keymaps/rmeli/rules.mk new file mode 100644 index 00000000000..035e9814e24 --- /dev/null +++ b/keyboards/boardsource/lulu/keymaps/rmeli/rules.mk @@ -0,0 +1,9 @@ +TAP_DANCE_ENABLE = yes +AUTO_SHIFT_ENABLE = no // disable auto-shift with home row mods + +UNICODEMAP_ENABLE = yes +NKRO_ENABLE = yes +MAGIC_ENABLE = yes + +RGBLIGHT_ENABLE = no +RGB_MATRIX_ENABLE = yes \ No newline at end of file diff --git a/keyboards/cannonkeys/serenity/config.h b/keyboards/cannonkeys/serenity/config.h new file mode 100644 index 00000000000..4b06e24a1ca --- /dev/null +++ b/keyboards/cannonkeys/serenity/config.h @@ -0,0 +1,27 @@ +/* +Copyright 2015 Jun Wako + +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 . +*/ + +#pragma once + +#define BACKLIGHT_PWM_DRIVER PWMD3 +#define BACKLIGHT_PWM_CHANNEL 1 +#define BACKLIGHT_PAL_MODE 1 + +#define WS2812_SPI SPID2 +#define WS2812_SPI_MOSI_PAL_MODE 0 +#define WS2812_SPI_SCK_PAL_MODE 0 +#define WS2812_SPI_SCK_PIN B13 diff --git a/keyboards/cannonkeys/serenity/halconf.h b/keyboards/cannonkeys/serenity/halconf.h new file mode 100644 index 00000000000..7a5b2d4de49 --- /dev/null +++ b/keyboards/cannonkeys/serenity/halconf.h @@ -0,0 +1,29 @@ +/* Copyright 2020 QMK + * + * 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 . + */ + +/* + * This file was auto-generated by: + * `qmk chibios-confmigrate -i keyboards/cannonkeys/devastatingtkl/halconf.h -r platforms/chibios/common/configs/halconf.h` + */ + +#pragma once + +#define HAL_USE_PWM TRUE + +#define HAL_USE_SPI TRUE + +#include_next + diff --git a/keyboards/cannonkeys/serenity/info.json b/keyboards/cannonkeys/serenity/info.json new file mode 100644 index 00000000000..cd154a30035 --- /dev/null +++ b/keyboards/cannonkeys/serenity/info.json @@ -0,0 +1,156 @@ +{ + "keyboard_name": "Serenity", + "usb": { + "vid": "0xCA04", + "pid": "0x0017", + "device_version": "0.0.1" + }, + "url": "https://cannonkeys.com", + "maintainer": "awkannan", + "bootloader": "stm32-dfu", + "processor": "STM32F072", + "diode_direction": "COL2ROW", + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": true, + "backlight": true, + "rgblight": true + }, + "debounce": 5, + "matrix_pins": { + "cols": ["B1", "B2", "B10", "B11", "B12", "B14", "A8", "A9", "A10", "A3", "B0", "A2", "A1", "A7", "A0", "B4", "B6", "B7"], + "rows": ["A15", "B3", "B5", "A4", "A5", "F1"] + }, + "backlight": { + "breathing": true, + "breathing_period": 5, + "levels": 15, + "pin": "A6" + }, + "rgblight": { + "led_count": 12, + "pin": "B15", + "hue_steps": 24, + "saturation_steps": 16, + "brightness_steps": 16, + "animations": { + "alternating": true, + "breathing": true, + "christmas": true, + "knight": true, + "rainbow_mood": true, + "rainbow_swirl": true, + "rgb_test": true, + "snake": true, + "static_gradient": true, + "twinkle": true + } + }, + "indicators": { + "caps_lock": "B9", + "scroll_lock": "F0", + "on_state": 0 + }, + "layouts": { + "LAYOUT_all": { + "layout": [ + { "label": "Esc", "matrix": [0, 0], "x": 0.0, "y": 0.0 }, + { "label": "F1", "matrix": [0, 1], "x": 1.25, "y": 0.0 }, + { "label": "F2", "matrix": [0, 2], "x": 2.25, "y": 0.0 }, + { "label": "F3", "matrix": [0, 3], "x": 3.25, "y": 0.0 }, + { "label": "F4", "matrix": [0, 4], "x": 4.25, "y": 0.0 }, + { "label": "F5", "matrix": [0, 5], "x": 5.5, "y": 0.0 }, + { "label": "F6", "matrix": [0, 6], "x": 6.5, "y": 0.0 }, + { "label": "F7", "matrix": [0, 7], "x": 7.5, "y": 0.0 }, + { "label": "F8", "matrix": [0, 8], "x": 8.5, "y": 0.0 }, + { "label": "F9", "matrix": [0, 9], "x": 9.75, "y": 0.0 }, + { "label": "F10", "matrix": [0, 10], "x": 10.75, "y": 0.0 }, + { "label": "F11", "matrix": [0, 11], "x": 11.75, "y": 0.0 }, + { "label": "F12", "matrix": [0, 12], "x": 12.75, "y": 0.0 }, + { "label": "F13", "matrix": [0, 14], "x": 14.0, "y": 0.0 }, + { "label": "PrtSc", "matrix": [0, 15], "x": 15.25, "y": 0.0 }, + { "label": "Scroll Lock", "matrix": [0, 16], "x": 16.25, "y": 0.0 }, + { "label": "Pause", "matrix": [0, 17], "x": 17.25, "y": 0.0 }, + { "label": "~", "matrix": [1, 0], "x": 0.0, "y": 1.25 }, + { "label": "!", "matrix": [1, 1], "x": 1.0, "y": 1.25 }, + { "label": "@", "matrix": [1, 2], "x": 2.0, "y": 1.25 }, + { "label": "#", "matrix": [1, 3], "x": 3.0, "y": 1.25 }, + { "label": "$", "matrix": [1, 4], "x": 4.0, "y": 1.25 }, + { "label": "%", "matrix": [1, 5], "x": 5.0, "y": 1.25 }, + { "label": "^", "matrix": [1, 6], "x": 6.0, "y": 1.25 }, + { "label": "&", "matrix": [1, 7], "x": 7.0, "y": 1.25 }, + { "label": "*", "matrix": [1, 8], "x": 8.0, "y": 1.25 }, + { "label": "(", "matrix": [1, 9], "x": 9.0, "y": 1.25 }, + { "label": ")", "matrix": [1, 10], "x": 10.0, "y": 1.25 }, + { "label": "_", "matrix": [1, 11], "x": 11.0, "y": 1.25 }, + { "label": "+", "matrix": [1, 12], "x": 12.0, "y": 1.25 }, + { "label": "Bksp", "matrix": [1, 13], "x": 13.0, "y": 1.25 }, + { "label": "Del", "matrix": [1, 14], "x": 14.0, "y": 1.25 }, + { "label": "Insert", "matrix": [1, 15], "x": 15.25, "y": 1.25 }, + { "label": "Home", "matrix": [1, 16], "x": 16.25, "y": 1.25 }, + { "label": "PgUp", "matrix": [1, 17], "x": 17.25, "y": 1.25 }, + { "label": "Tab", "matrix": [2, 0], "w": 1.5, "x": 0.0, "y": 2.25 }, + { "label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25 }, + { "label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25 }, + { "label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25 }, + { "label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25 }, + { "label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25 }, + { "label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25 }, + { "label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25 }, + { "label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25 }, + { "label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25 }, + { "label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25 }, + { "label": "{", "matrix": [2, 11], "x": 11.5, "y": 2.25 }, + { "label": "}", "matrix": [2, 12], "x": 12.5, "y": 2.25 }, + { "label": "|", "matrix": [2, 14], "w": 1.5, "x": 13.5, "y": 2.25 }, + { "label": "Delete", "matrix": [2, 15], "x": 15.25, "y": 2.25 }, + { "label": "End", "matrix": [2, 16], "x": 16.25, "y": 2.25 }, + { "label": "PgDn", "matrix": [2, 17], "x": 17.25, "y": 2.25 }, + { "label": "Caps Lock", "matrix": [3, 0], "w": 1.75, "x": 0.0, "y": 3.25 }, + { "label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25 }, + { "label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25 }, + { "label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25 }, + { "label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25 }, + { "label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25 }, + { "label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25 }, + { "label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25 }, + { "label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25 }, + { "label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25 }, + { "label": ":", "matrix": [3, 10], "x": 10.75, "y": 3.25 }, + { "label": "\"", "matrix": [3, 11], "x": 11.75, "y": 3.25 }, + { "label": "|", "matrix": [3, 12], "x": 12.75, "y": 3.25 }, + { "label": "Enter", "matrix": [3, 14], "w": 1.25, "x": 13.75, "y": 3.25 }, + { "label": "Shift", "matrix": [4, 0], "w": 1.25, "x": 0.0, "y": 4.25 }, + { "label": "|", "matrix": [4, 1], "x": 1.25, "y": 4.25 }, + { "label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.25 }, + { "label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.25 }, + { "label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.25 }, + { "label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.25 }, + { "label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.25 }, + { "label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.25 }, + { "label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.25 }, + { "label": "<", "matrix": [4, 9], "x": 9.25, "y": 4.25 }, + { "label": ">", "matrix": [4, 10], "x": 10.25, "y": 4.25 }, + { "label": "?", "matrix": [4, 11], "x": 11.25, "y": 4.25 }, + { "label": "Shift", "matrix": [4, 12], "w": 1.75, "x": 14.75, "y": 4.25 }, + { "label": "Fn", "matrix": [4, 14], "x": 16.5, "y": 4.25 }, + { "label": "\u2191", "matrix": [4, 16], "x": 18.75, "y": 4.25 }, + { "label": "Ctrl", "matrix": [5, 0], "w": 1.25, "x": 0.0, "y": 5.25 }, + { "label": "Win", "matrix": [5, 1], "w": 1.25, "x": 1.25, "y": 5.25 }, + { "label": "Alt", "matrix": [5, 2], "w": 1.25, "x": 2.5, "y": 5.25 }, + { "matrix": [5, 6], "w": 6.25, "x": 3.75, "y": 5.25 }, + { "label": "Alt", "matrix": [5, 10], "w": 1.25, "x": 10.0, "y": 5.25 }, + { "label": "Fn", "matrix": [5, 11], "w": 1.25, "x": 11.25, "y": 5.25 }, + { "label": "Win", "matrix": [5, 12], "w": 1.25, "x": 12.5, "y": 5.25 }, + { "label": "Ctrl", "matrix": [5, 14], "w": 1.25, "x": 13.75, "y": 5.25 }, + { "label": "\u2190", "matrix": [5, 15], "x": 15.25, "y": 5.25 }, + { "label": "\u2193", "matrix": [5, 16], "x": 16.25, "y": 5.25 }, + { "label": "\u2192", "matrix": [5, 17], "x": 17.25, "y": 5.25 } + ] + } + } +} diff --git a/keyboards/cannonkeys/serenity/keymaps/default/keymap.c b/keyboards/cannonkeys/serenity/keymaps/default/keymap.c new file mode 100644 index 00000000000..f142a629dce --- /dev/null +++ b/keyboards/cannonkeys/serenity/keymaps/default/keymap.c @@ -0,0 +1,41 @@ +/* +Copyright 2012,2013 Jun Wako + +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 . +*/ +#include QMK_KEYBOARD_H +enum layer_names { + _BASE, + _FN1 +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_BASE] = LAYOUT_all( + 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_MPLY, KC_PSCR, KC_SCRL, KC_PAUS, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, + 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_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, + 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_NUHS, KC_ENT, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_TRNS, KC_UP, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [_FN1] = LAYOUT_all( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, KC_TRNS, BL_TOGG, BL_DEC, BL_INC, + 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_VOLU, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_MNXT, KC_VOLD, + 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_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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + +}; diff --git a/keyboards/cannonkeys/serenity/keymaps/via/keymap.c b/keyboards/cannonkeys/serenity/keymaps/via/keymap.c new file mode 100644 index 00000000000..bd79ecc05f6 --- /dev/null +++ b/keyboards/cannonkeys/serenity/keymaps/via/keymap.c @@ -0,0 +1,59 @@ +/* +Copyright 2012,2013 Jun Wako + +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 . +*/ +#include QMK_KEYBOARD_H +enum layer_names { + _BASE, + _FN1, + _FN2, + _FN3 +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_BASE] = LAYOUT_all( + 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_MPLY, KC_PSCR, KC_SCRL, KC_PAUS, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, + 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_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, + 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_NUHS, KC_ENT, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_TRNS, KC_UP, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [_FN1] = LAYOUT_all( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, KC_TRNS, BL_TOGG, BL_DEC, BL_INC, + 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_VOLU, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_MNXT, KC_VOLD, + 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_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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + [_FN2] = LAYOUT_all( + 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_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_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_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_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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + [_FN3] = LAYOUT_all( + 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_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_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_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_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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS) + +}; diff --git a/keyboards/cannonkeys/serenity/keymaps/via/rules.mk b/keyboards/cannonkeys/serenity/keymaps/via/rules.mk new file mode 100644 index 00000000000..1e5b99807cb --- /dev/null +++ b/keyboards/cannonkeys/serenity/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes diff --git a/keyboards/cannonkeys/serenity/mcuconf.h b/keyboards/cannonkeys/serenity/mcuconf.h new file mode 100644 index 00000000000..d0920a66601 --- /dev/null +++ b/keyboards/cannonkeys/serenity/mcuconf.h @@ -0,0 +1,31 @@ +/* Copyright 2020 QMK + * + * 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 . + */ + +/* + * This file was auto-generated by: + * `qmk chibios-confmigrate -i keyboards/cannonkeys/devastatingtkl/mcuconf.h -r platforms/chibios/GENERIC_STM32_F072XB/configs/mcuconf.h` + */ + +#pragma once + +#include_next + +#undef STM32_PWM_USE_TIM3 +#define STM32_PWM_USE_TIM3 TRUE + +#undef STM32_SPI_USE_SPI2 +#define STM32_SPI_USE_SPI2 TRUE + diff --git a/keyboards/cannonkeys/serenity/readme.md b/keyboards/cannonkeys/serenity/readme.md new file mode 100644 index 00000000000..730fa084c98 --- /dev/null +++ b/keyboards/cannonkeys/serenity/readme.md @@ -0,0 +1,25 @@ +# Serenity + +A calming F13 TKL from HoodrowThrillson + +* Keyboard Maintainer: [Andrew Kannan](https://github.com/awkannan) +* Hardware Supported: STM32F072CBT6 +* Hardware Availability: [CannonKeys](https://cannonkeys.com) + +Make example for this keyboard (after setting up your build environment): + + make cannonkeys/serenity:default + +Flashing example for this keyboard: + + make cannonkeys/serenity:default:flash + +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). + +## Bootloader + +Enter the bootloader in 3 ways: + +* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard +* **Physical reset button**: Swap the boot switch on the back of the PCB to "1" and hit the reset button +* **Keycode in layout**: Press the key mapped to `RESET` if it is available diff --git a/keyboards/cannonkeys/serenity/rules.mk b/keyboards/cannonkeys/serenity/rules.mk new file mode 100644 index 00000000000..0ab54aaaf71 --- /dev/null +++ b/keyboards/cannonkeys/serenity/rules.mk @@ -0,0 +1,2 @@ +# Wildcard to allow APM32 MCU +DFU_SUFFIX_ARGS = -v FFFF -p FFFF diff --git a/keyboards/crkbd/keymaps/ericgebhart/keymap.c b/keyboards/crkbd/keymaps/ericgebhart/keymap.c old mode 100755 new mode 100644 index e893ec596b9..c534fe3c6d3 --- a/keyboards/crkbd/keymaps/ericgebhart/keymap.c +++ b/keyboards/crkbd/keymaps/ericgebhart/keymap.c @@ -1,5 +1,5 @@ /* - Copyright 2018 Eric Gebhart + Copyright 2018-2022 Eric Gebhart 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 @@ -14,47 +14,5 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#include "ericgebhart.h" -#define Crkbd_base(...) Base_3x6_3(__VA_ARGS__) -#define Crkbd_bepo(...) Base_bepo_3x6_3(__VA_ARGS__) -#define Crkbd_bepo6(...) Base_bepo6_3x6_3(__VA_ARGS__) -#define Crkbd_transient(...) Transient6_3x6_3(__VA_ARGS__) - -/* - * The `Crkbd_base` macro is a template to allow the use of identical - * modifiers for the default layouts (eg QWERTY, Colemak, Dvorak, etc), so - * that there is no need to set them up for each layout, and modify all of - * them if I want to change them. This helps to keep consistency and ease - * of use. K## is a placeholder to pass through the individual keycodes - */ - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - // Qwerty based Base layers - [_DVORAK] = Crkbd_base(___DVORAK___), - [_BEAKL] = Crkbd_base(___BEAKL15___), - [_COLEMAK] = Crkbd_base(___COLEMAK_DH___), - [_QWERTY] = Crkbd_base(___QWERTY___), - - // Bepo base layers - [_BEAKL_BP] = Crkbd_bepo(___BEAKL15_FR___), - [_DVORAK_BP] = Crkbd_bepo(___DVORAK_FR___), - [_BEPO] = Crkbd_bepo6(___BEPO6___), - - // Transient layers. - [_SYMB] = Crkbd_transient(___SYMB_BEAKLB_3x12___), - [_SYMB_BP] = Crkbd_transient(___SYMB_BEAKLB_BP_3x12___), - - [_KEYPAD] = Crkbd_transient(___KP_C_3x12___), - [_KEYPAD_BP] = Crkbd_transient(___KP_C_BP_3x12___), - - [_TOPROWS] = Crkbd_transient(___TOPROWS_3x12___), - [_TOPROWS_BP] = Crkbd_transient(___TOPROWS_BP_3x12___), - - [_NAV] = Crkbd_transient(___NAV_3x12___), - - [_LAYERS] = Crkbd_transient(___LAYERS_3x12___), - //[_RGB] = Crkbd_transient(___RGB_3x12___), - [_ADJUST] = Crkbd_transient(___ADJUST_3x12___), - ///HPT_TOG, KC_NUKE, ___, ___, TG_MODS, HPT_FBK -}; +// See: users/ericgebhart. diff --git a/keyboards/crkbd/keymaps/rmeli/config.h b/keyboards/crkbd/keymaps/rmeli/config.h index 007e4bc45b4..2f06b82cc10 100644 --- a/keyboards/crkbd/keymaps/rmeli/config.h +++ b/keyboards/crkbd/keymaps/rmeli/config.h @@ -21,32 +21,19 @@ along with this program. If not, see . #pragma once -#define MASTER_LEFT // Left side is the master +#define MASTER_LEFT // Left side is the master #define SPLIT_LED_STATE_ENABLE -#define TAPPING_TERM 200 - -#define UNICODE_SELECTED_MODES UNICODE_MODE_MACOS, UNICODE_MODE_LINUX - -#define AUTO_SHIFT_REPEAT - -#ifdef RGBLIGHT_ENABLE -# define RGBLIGHT_LIMIT_VAL 120 -# define RGBLIGHT_HUE_STEP 10 -# define RGBLIGHT_SAT_STEP 17 -# define RGBLIGHT_VAL_STEP 17 -#endif - #ifdef RGB_MATRIX_ENABLE // RGB matrix options -# define RGB_MATRIX_KEYPRESSES // enable keypress effects +# define RGB_MATRIX_KEYPRESSES // enable keypress effects # define RGB_MATRIX_LED_FLUSH_LIMIT 16 # define RGB_DISABLE_WHEN_USB_SUSPENDED // Disable unwanted R2G effects (from r2g/config.h) # undef ENABLE_RGB_MATRIX_ALPHAS_MODS # undef ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN # undef ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT -# undef ENABLE_RGB_MATRIX_BREATHING +# define ENABLE_RGB_MATRIX_BREATHING # undef ENABLE_RGB_MATRIX_BAND_SAT # undef ENABLE_RGB_MATRIX_BAND_VAL # undef ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT @@ -57,8 +44,8 @@ along with this program. If not, see . # undef ENABLE_RGB_MATRIX_RAINDROPS # undef ENABLE_RGB_MATRIX_HUE_BREATHING # undef ENABLE_RGB_MATRIX_PIXEL_FRACTAL -//# undef ENABLE_RGB_MATRIX_TYPING_HEATMAP -# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE +# define ENABLE_RGB_MATRIX_TYPING_HEATMAP +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE # undef ENABLE_RGB_MATRIX_SOLID_REACTIVE # undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS # undef ENABLE_RGB_MATRIX_SPLASH @@ -77,4 +64,4 @@ along with this program. If not, see . #undef LOCKING_SUPPORT_ENABLE #undef LOCKING_RESYNC_ENABLE #define NO_MUSIC_MODE -#define LAYER_STATE_8BIT // Limit to 8 layers +#define LAYER_STATE_8BIT // Limit to 8 layers diff --git a/keyboards/crkbd/keymaps/rmeli/keymap.c b/keyboards/crkbd/keymaps/rmeli/keymap.c index 04528fda8ce..5a04e8150fb 100644 --- a/keyboards/crkbd/keymaps/rmeli/keymap.c +++ b/keyboards/crkbd/keymaps/rmeli/keymap.c @@ -1,6 +1,6 @@ /* Copyright 2019 @foostan -Copyright 2020 Drashna Jaelre <@drashna> +Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) Copyright 2021 Rocco Meli <@RMeli> This program is free software: you can redistribute it and/or modify @@ -69,64 +69,61 @@ enum layer_names { #define _CMK 1 #define _CFG 4 +#define ______THUMB_LEFT_x3______ KC_LGUI, MO(_DWN), KC_SPC +#define ______THUMB_RIGHT_x3_____ KC_ENT, MO(_UP), KC_RCTL + +// LAYOUT +// +// |-----------------------------| |-----------------------------| +// | | | | | | | | | | | | | | +// |----+----+----+----+----+----| |----+----+----+----+----+----| +// | | | | | | | | | | | | | | +// |----+----+----+----+----+----| |----+----+----+----+----+----| +// | | | | | | | | | | | | | | +// |----+----+----+----+----+----+----| |----+----+----+----+----+----+----| +// | | | | | | | | +// |--------------| |--------------| + +// Define wrapper for standard CRKB layout +#define LAYOUT_wrapper(...) LAYOUT_split_3x6_3(__VA_ARGS__) + +// clang-format off const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_QWERTY] = LAYOUT_split_3x6_3( - //|-----------------------------------------------------| |-----------------------------------------------------| - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, - //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| - TD_ED, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, - //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| - TD_LSPC, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, TD_RSPC, - //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| - KC_LGUI,MO(_DWN), KC_SPC, KC_ENT,MO(_UP), KC_RCTL - //|--------------------------| |--------------------------| + + [_QWERTY] = LAYOUT_wrapper( + // clang-format off + ___________________QWERTY_L1_x6_____________________, ___________________QWERTY_R1_x6_____________________, + ___________________QWERTY_L2_x6_____________________, ___________________QWERTY_R2_x6_____________________, + ___________________QWERTY_L3_x6_____________________, ___________________QWERTY_R3_x6_____________________, + ______THUMB_LEFT_x3______, ______THUMB_RIGHT_x3_____ ), - [_COLEMAK_DH] = LAYOUT_split_3x6_3( - //|-----------------------------------------------------| |-----------------------------------------------------| - KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_SCLN, KC_P, KC_BSPC, - //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| - TD_ED, KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O, KC_QUOT, - //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| - TD_LSPC, KC_Z, KC_X, KC_C, KC_D, KC_V, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, TD_RSPC, - //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| - KC_LGUI,MO(_DWN), KC_SPC, KC_ENT,MO(_UP), KC_RCTL - //|--------------------------| |--------------------------| + [_COLEMAK_DH] = LAYOUT_wrapper( + ________________COLEMAK_MOD_DH_L1_x6________________, ________________COLEMAK_MOD_DH_R1_x6________________, + ________________COLEMAK_MOD_DH_L2_x6________________, ________________COLEMAK_MOD_DH_R2_x6________________, + ________________COLEMAK_MOD_DH_L3_x6________________, ________________COLEMAK_MOD_DH_R3_x6________________, + ______THUMB_LEFT_x3______, ______THUMB_RIGHT_x3_____ ), - [_DWN] = LAYOUT_split_3x6_3( - //|-----------------------------------------------------| |-----------------------------------------------------| - _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, - //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| - _______, A_GRV, E_GRV, I_GRV, O_GRV, U_GRV, XXXXXXX, XXXXXXX, KC_UP, XXXXXXX, KC_PGUP, XXXXXXX, - //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| - _______, A_UML, E_ACT, I_CIR, O_UML, U_UML, XXXXXXX, KC_LEFT, KC_DOWN,KC_RIGHT, KC_PGDN, _______, - //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| - KC_LGUI, _______, _______, _______,MO(_CFG), _______ - //|--------------------------| |--------------------------| + [_DWN] = LAYOUT_wrapper( + _______, ______________NUMBER_LEFT_x5_______________, ______________NUMBER_RIGHT_x5______________, _______, + _______, ______________UNICODE_L2_x5________________, ________________NAV_R2_x5__________________, XXXXXXX, + _______, ______________UNICODE_L3_x5________________, ________________NAV_R3_x5__________________, _______, + KC_LGUI, _______, _______, _______,MO(_CFG), _______ ), - [_UP] = LAYOUT_split_3x6_3( - //|-----------------------------------------------------| |-----------------------------------------------------| - _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, - //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| - _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, XXXXXXX, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, KC_GRV, - //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| - _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, KC_TILD, - //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| - _______,MO(_CFG), _______, _______, _______, _______ - //|--------------------------| |--------------------------| + [_UP] = LAYOUT_wrapper( + ___________________SYMBOL_LEFT_x6___________________, ___________________SYMBOL_RIGHT_x6__________________, + _______, ____________NAV_VIM_x4____________, XXXXXXX, ____________________SYMBOL_R2_x6____________________, + _______, _________________NONE_5x___________________, ____________________SYMBOL_R3_x6____________________, + _______,MO(_CFG), _______, _______, _______, _______ ), - [_CONFIG] = LAYOUT_split_3x6_3( - //|-----------------------------------------------------| |-----------------------------------------------------| - QK_BOOT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, UC_NEXT, AS_UP, NK_ON, XXXXXXX, XXXXXXX,DF(_QWY), - //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| - RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, XXXXXXX, AS_TOGG, NK_TOGG, XXXXXXX, XXXXXXX, XXXXXXX, - //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| - XXXXXXX,RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, UC_PREV, AS_DOWN, NK_OFF, XXXXXXX, XXXXXXX,DF(_CMK), - //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| - _______, _______, _______, _______, _______, _______ - //|--------------------------| |--------------------------| + [_CONFIG] = LAYOUT_wrapper( + QK_BOOT, _________________NONE_5x___________________, _______________CONFIG_R1_x5________________,DF(_QWY), + RGB_TOG, ________________RGB_L2_x5__________________, _______________CONFIG_R2_x5________________, XXXXXXX, + XXXXXXX, ________________RGB_L3_x5__________________, _______________CONFIG_R3_x5________________,DF(_CMK), + _______, _______, _______, _______, _______, _______ ) }; +// clang-format on diff --git a/keyboards/crkbd/keymaps/rmeli/rules.mk b/keyboards/crkbd/keymaps/rmeli/rules.mk index 8e9dbbf8cfd..58a00ed6ba3 100644 --- a/keyboards/crkbd/keymaps/rmeli/rules.mk +++ b/keyboards/crkbd/keymaps/rmeli/rules.mk @@ -2,11 +2,11 @@ OLED_ENABLE = yes OLED_DRIVER = SSD1306 TAP_DANCE_ENABLE = yes -AUTO_SHIFT_ENABLE = yes +AUTO_SHIFT_ENABLE = no // disable auto-shift with home row mods UNICODEMAP_ENABLE = yes +NKRO_ENABLE = yes +MAGIC_ENABLE = yes RGBLIGHT_ENABLE = no RGB_MATRIX_ENABLE = yes - -NKRO_ENABLE = yes diff --git a/keyboards/dztech/dz60rgb_ansi/v1/rules.mk b/keyboards/dztech/dz60rgb_ansi/v1/rules.mk index 22ecf071a72..5ccc4989037 100644 --- a/keyboards/dztech/dz60rgb_ansi/v1/rules.mk +++ b/keyboards/dztech/dz60rgb_ansi/v1/rules.mk @@ -5,6 +5,8 @@ BOARD = QMK_PROTON_C # Bootloader selection BOOTLOADER = stm32-dfu +LAYOUTS = 60_ansi + # Build Options # change yes to no to disable # diff --git a/keyboards/dztech/dz60rgb_ansi/v2/rules.mk b/keyboards/dztech/dz60rgb_ansi/v2/rules.mk index d538e324f35..2c2f9a060aa 100644 --- a/keyboards/dztech/dz60rgb_ansi/v2/rules.mk +++ b/keyboards/dztech/dz60rgb_ansi/v2/rules.mk @@ -4,6 +4,8 @@ MCU = atmega32u4 # Bootloader selection BOOTLOADER = atmel-dfu +LAYOUTS = 60_ansi + # Build Options # change yes to no to disable # diff --git a/keyboards/dztech/dz60rgb_ansi/v2_1/rules.mk b/keyboards/dztech/dz60rgb_ansi/v2_1/rules.mk index 800fb472561..f25230516ce 100644 --- a/keyboards/dztech/dz60rgb_ansi/v2_1/rules.mk +++ b/keyboards/dztech/dz60rgb_ansi/v2_1/rules.mk @@ -5,6 +5,8 @@ MCU = atmega32u4 BOOTLOADER = lufa-ms BOOTLOADER_SIZE = 6144 +LAYOUTS = 60_ansi + # Build Options # change yes to no to disable # diff --git a/keyboards/ergodox_ez/keymaps/ericgebhart/keymap.c b/keyboards/ergodox_ez/keymaps/ericgebhart/keymap.c index e76e3296bf6..c534fe3c6d3 100644 --- a/keyboards/ergodox_ez/keymaps/ericgebhart/keymap.c +++ b/keyboards/ergodox_ez/keymaps/ericgebhart/keymap.c @@ -1,5 +1,5 @@ /* - Copyright 2018 Eric Gebhart + Copyright 2018-2022 Eric Gebhart 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 @@ -14,35 +14,5 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#include "keymap_bepo.h" -#include "ericgebhart.h" -#include "layouts.h" -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - // Qwerty Base layers - [_DVORAK] = Dox_base(___NUMS___, ___DVORAK___), - [_QWERTY] = Dox_base(___NUMS___, ___QWERTY___), - [_COLEMAK] = Dox_base(___NUMS___, ___COLEMAK_DH___), - [_BEAKL] = Dox_base(___NUMS___, ___BEAKL15___), - // Bepo Base layers - [_DVORAK_BP] = Dox_bepo_base(___NUMS_BP___, ___DVORAK_FR___), - [_BEAKL_BP] = Dox_bepo_base(___BKLNUMS_BP___, ___BEAKL15_FR___), - [_BEPO] = Dox_bepo_base6(___BEPO6___), - - - // transient layers. - // Switch to using a transient layer macro - [_SYMB] = Dox_transient(___12_FUNC___, ___SYMB_BEAKLA_3x12___), - [_SYMB_BP] = Dox_transient(___12_FUNC___, ___SYMB_BEAKLA_BP_3x12___), - - [_TOPROWS] = Dox_transient(___12___, ___TOPROWS_3x12___), - [_TOPROWS_BP] = Dox_transient(___12___, ___TOPROWS_BP_3x12___), - - [_KEYPAD] = Dox_transient(___KEYPAD_BKL_FUNC_4x12___), - [_KEYPAD_BP] = Dox_transient(___KEYPAD_BKL_FUNC_BP_4x12___), - - [_NAV] = Dox_transient(___12___, ___NAV_3x12___), - [_LAYERS] = Dox_transient(___12___, ___LAYERS_3x12___), - [_RGB] = Dox_transient(___12___, ___RGB_3x12___), -}; +// See: users/ericgebhart. diff --git a/keyboards/ergodox_ez/keymaps/ericgebhart/layouts.h b/keyboards/ergodox_ez/keymaps/ericgebhart/layouts.h deleted file mode 100644 index dd8f193dfc6..00000000000 --- a/keyboards/ergodox_ez/keymaps/ericgebhart/layouts.h +++ /dev/null @@ -1,139 +0,0 @@ -/* - Copyright 2018 Eric Gebhart - - 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 . -*/ - -/********************************************************************/ -/* Ergodox EZ */ -/********************************************************************/ -// This one is is set up to pass in the number row. -// Beakl and bepo both change the number row. -// Left, middle, right, bottom, and thumbs all stay the same. -#define Base_dox( \ - K01, K02, K03, K04, K05, \ - K06, K07, K08, K09, K0A, \ - K11, K12, K13, K14, K15, \ - K16, K17, K18, K19, K1A, \ - K21, K22, K23, K24, K25, \ - K26, K27, K28, K29, K2A, \ - K31, K32, K33, K34, K35, \ - K36, K37, K38, K39, K3A \ - ) \ - LVARG_edox( \ - ROW0_LEFT(K01, K02, K03, K04, K05), \ - ___2_MIDDLE_1___, \ - ROW0_RIGHT(K06, K07, K08, K09, K0A), \ - \ - ROW1_LEFT(K11, K12, K13, K14, K15), \ - ___2_MIDDLE_2___, \ - ROW1_RIGHT(K16, K17, K18, K19, K1A), \ - \ - ROW2_LEFT(K21, K22, K23, K24, K25), \ - ROW2_RIGHT(K26, K27, K28, K29, K2A), \ - \ - ROW3_LEFT(K31, K32, K33, K34, K35), \ - ___2_MIDDLE_3___, \ - ROW3_RIGHT(K36, K37, K38, K39, K3A), \ - ___5_BOTTOM_LEFT___, ___5_BOTTOM_RIGHT___, \ - ___12_DOX_ALL_THUMBS___ \ - ) - -#define Base_dox_bepo( \ - K01, K02, K03, K04, K05, \ - K06, K07, K08, K09, K0A, \ - K11, K12, K13, K14, K15, \ - K16, K17, K18, K19, K1A, \ - K21, K22, K23, K24, K25, \ - K26, K27, K28, K29, K2A, \ - K31, K32, K33, K34, K35, \ - K36, K37, K38, K39, K3A \ - ) \ - LVARG_edox( \ - ROW0_LEFT(K01, K02, K03, K04, K05), \ - ___2_MIDDLE_1___, \ - ROW0_RIGHT(K06, K07, K08, K09, K0A), \ - \ - ROW1_LEFT(K11, K12, K13, K14, K15), \ - ___2_MIDDLE_2___, \ - ROW1_RIGHT(K16, K17, K18, K19, K1A), \ - \ - ROW2_LEFT(K21, K22, K23, K24, K25), \ - ROW2_RIGHT(K26, K27, K28, K29, K2A), \ - \ - ROW3_LEFT(K31, K32, K33, K34, K35), \ - ___2_MIDDLE_3___, \ - ROW3_RIGHT(K36, K37, K38, K39, K3A), \ - ___5_BOTTOM_LEFT___, ___5_BOTTOM_RIGHT___, \ - ___12_DOX_ALL_THUMBS_BP___ \ - ) - - -#define Base_dox_bepo6( \ - K01, K02, K03, K04, K05, K06, \ - K07, K08, K09, K0A, K0B, K0C, \ - K11, K12, K13, K14, K15, K16, \ - K17, K18, K19, K1A, K1B, K1C, \ - K21, K22, K23, K24, K25, K26, \ - K27, K28, K29, K2A, K2B, K2C \ - ) \ - LVARG_edox( \ - ___6SYMBOL_BEPO_L___, \ - ___2_MIDDLE_T_BP___, \ - ___6SYMBOL_BEPO_R___, \ - ROW1_LEFT_BP6(K01, K02, K03, K04, K05, K06), \ - ___2_MIDDLE_2_BP___, \ - ROW1_RIGHT_BP6(K07, K08, K09, K0A, K0B, K0C), \ - \ - ROW2_LEFT_BP6(K11, K12, K13, K14, K15, K16), \ - ROW2_RIGHT_BP6(K17, K18, K19, K1A, K1B, K1C), \ - \ - ROW3_LEFT_BP6(K21, K22, K23, K24, K25, K26), \ - ___2_MIDDLE_3_BP___, \ - ROW3_RIGHT_BP6(K27, K28, K29, K2A, K2B, K2C), \ - \ - ___5_BOTTOM_LEFT_BP___, ___5_BOTTOM_RIGHT_BP___, \ - ___12_DOX_ALL_THUMBS_BP___ \ - ) - -#define Transient_dox6( \ - K01, K02, K03, K04, K05, K06, \ - K07, K08, K09, K0A, K0B, K0C, \ - K11, K12, K13, K14, K15, K16, \ - K17, K18, K19, K1A, K1B, K1C, \ - K21, K22, K23, K24, K25, K26, \ - K27, K28, K29, K2A, K2B, K2C, \ - K31, K32, K33, K34, K35, K36, \ - K37, K38, K39, K3A, K3B, K3C \ - ) \ - LVARG_edox( \ - K01, K02, K03, K04, K05, K06, \ - ___2___, \ - K07, K08, K09, K0A, K0B, K0C, \ - K11, K12, K13, K14, K15, K16, \ - ___2___, \ - K17, K18, K19, K1A, K1B, K1C, \ - K21, K22, K23, K24, K25, K26, \ - K27, K28, K29, K2A, K2B, K2C, \ - K31, K32, K33, K34, K35, K36, \ - ___2___, \ - K37, K38, K39, K3A, K3B, K3C, \ - ___5___, ___5___, \ - ___12___ \ - ) - -#define Dox_base(...) Base_dox(__VA_ARGS__) -#define Dox_bepo_base(...) Base_dox_bepo(__VA_ARGS__) -#define Dox_bepo_base6(...) Base_dox_bepo6(__VA_ARGS__) -#define Dox_transient(...) Transient_dox6(__VA_ARGS__) diff --git a/keyboards/handwired/alcor_dactyl/config.h b/keyboards/handwired/alcor_dactyl/config.h new file mode 100644 index 00000000000..f8ffe4d6a32 --- /dev/null +++ b/keyboards/handwired/alcor_dactyl/config.h @@ -0,0 +1,33 @@ +// Copyright 2022 Ethan (@rocketstrong) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "config_common.h" + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT + +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 200U +#define SERIAL_USART_FULL_DUPLEX +#define SERIAL_USART_TX_PIN GP10 +#define SERIAL_USART_RX_PIN GP9 +#define RGB_DI_PIN GP16 +#define DRIVER_LED_TOTAL 2 +#define RGB_MATRIX_SPLIT { 1, 1 } +#define RGBLED_NUM 1 +#define EE_HANDS diff --git a/keyboards/handwired/alcor_dactyl/info.json b/keyboards/handwired/alcor_dactyl/info.json new file mode 100644 index 00000000000..7bdde8550c9 --- /dev/null +++ b/keyboards/handwired/alcor_dactyl/info.json @@ -0,0 +1,130 @@ +{ + "manufacturer": "Ethan", + "keyboard_name": "alcor_dactyl", + "maintainer": "rocketstrong", + "bootloader": "rp2040", + "processor": "RP2040", + "url": "", + "usb": { + "device_version": "1.0.0", + "pid": "0x0000", + "vid": "0xFEED" + }, + "features": { + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": true, + "rgb_matrix": true + }, + "split": { + "enabled": true + }, + "diode_direction": "COL2ROW", + "matrix_pins": { + "cols": ["GP29", "GP28", "GP27", "GP26", "GP15", "GP14", "GP13"], + "rows": ["GP5", "GP4", "GP3", "GP2", "GP1", "GP0"] + }, + "rgb_matrix": { + "driver": "WS2812", + "layout": [ + {"x":0, "y":0.375}, + {"x":16.5, "y":0.38} + ] + }, + "layouts": { + "LAYOUT":{ + "layout":[ + {"matrix":[0,0], "x":0, "y":0.375, "w":1.5}, + {"matrix":[0,1], "x":1.5, "y":0.38}, + {"matrix":[0,2], "x":2.5, "y":0.125}, + {"matrix":[0,3], "x":3.5, "y":0.25}, + {"matrix":[0,4], "x":4.5, "y":0.25}, + {"matrix":[0,5], "x":5.5, "y":0.25}, + {"matrix":[0,6], "x":6.5, "y":0.25}, + + {"matrix":[6,6], "x":10.5, "y":0.25}, + {"matrix":[6,5], "x":11.5, "y":0.25}, + {"matrix":[6,4], "x":12.5, "y":0.25}, + {"matrix":[6,3], "x":13.5, "y":0.25}, + {"matrix":[6,2], "x":14.5, "y":0.13}, + {"matrix":[6,1], "x":15.5, "y":0.38}, + {"matrix":[6,0], "x":16.5, "y":0.38, "w":1.5}, + + {"matrix":[1,0], "x":0, "y":1.375, "w":1.5}, + {"matrix":[1,1], "x":1.5, "y":1.375}, + {"matrix":[1,2], "x":2.5, "y":1.125}, + {"matrix":[1,3], "x":3.5, "y":1.25}, + {"matrix":[1,4], "x":4.5, "y":1.25}, + {"matrix":[1,5], "x":5.5, "y":1.25}, + {"matrix":[1,6], "x":6.5, "y":1.25}, + + {"matrix":[7,6], "x":10.5, "y":1.25}, + {"matrix":[7,5], "x":11.5, "y":1.25}, + {"matrix":[7,4], "x":12.5, "y":1.25}, + {"matrix":[7,3], "x":13.5, "y":1.25}, + {"matrix":[7,2], "x":14.5, "y":1.13}, + {"matrix":[7,1], "x":15.5, "y":1.38}, + {"matrix":[7,0], "x":16.5, "y":1.38, "w":1.5}, + + {"matrix":[2,0], "x":0, "y":2.375, "w":1.5}, + {"matrix":[2,1], "x":1.5, "y":2.375}, + {"matrix":[2,2], "x":2.5, "y":2.125}, + {"matrix":[2,3], "x":3.5, "y":2.25}, + {"matrix":[2,4], "x":4.5, "y":2.25}, + {"matrix":[2,5], "x":5.5, "y":2.25}, + {"matrix":[2,6], "x":6.5, "y":2.25}, + + {"matrix":[8,6], "x":10.5, "y":2.25}, + {"matrix":[8,5], "x":11.5, "y":2.25}, + {"matrix":[8,4], "x":12.5, "y":2.25}, + {"matrix":[8,3], "x":13.5, "y":2.25}, + {"matrix":[8,2], "x":14.5, "y":2.13}, + {"matrix":[8,1], "x":15.5, "y":2.38}, + {"matrix":[8,0], "x":16.5, "y":2.38, "w":1.5}, + + {"matrix":[3,0], "x":0, "y":3.375, "w":1.5}, + {"matrix":[3,1], "x":1.5, "y":3.375}, + {"matrix":[3,2], "x":2.5, "y":3.125}, + {"matrix":[3,3], "x":3.5, "y":3.25}, + {"matrix":[3,4], "x":4.5, "y":3.25}, + {"matrix":[3,5], "x":5.5, "y":3.25}, + + {"matrix":[9,5], "x":11.5, "y":3.25}, + {"matrix":[9,4], "x":12.5, "y":3.25}, + {"matrix":[9,3], "x":13.5, "y":3.25}, + {"matrix":[9,2], "x":14.5, "y":3.13}, + {"matrix":[9,1], "x":15.5, "y":3.38}, + {"matrix":[9,0], "x":16.5, "y":3.38, "w":1.5}, + + {"matrix":[4,0], "x":0.5, "y":4.375}, + {"matrix":[4,1], "x":1.5, "y":4.375}, + {"matrix":[4,2], "x":2.5, "y":4.125}, + {"matrix":[4,3], "x":3.5, "y":4.25}, + + {"matrix":[10,3], "x":13.5, "y":4.25}, + {"matrix":[10,2], "x":14.5, "y":4.13}, + {"matrix":[10,1], "x":15.5, "y":4.38}, + {"matrix":[10,0], "x":16.5, "y":4.38}, + + {"matrix":[4,4], "x":5, "y":4.5, "h":2}, + {"matrix":[4,5], "x":6.25, "y":4.5, "h":1.5}, + {"matrix":[10,5], "x":10.75, "y":4.5, "h":1.5}, + {"matrix":[10,4], "x":12, "y":4.5, "h":2}, + + {"matrix":[5,4], "x":6.25, "y":6.25}, + {"matrix":[5,5], "x":7.5, "y":6.25}, + + {"matrix":[11,5], "x":9.5, "y":6.25}, + {"matrix":[11,4], "x":10.75, "y":6.25}, + + {"matrix":[5,2], "x":6.25, "y":7.25}, + {"matrix":[5,3], "x":7.25, "y":7.25}, + + {"matrix":[11,3], "x":9.75, "y":7.25}, + {"matrix":[11,2], "x":10.75, "y":7.25} + ] + } + } +} diff --git a/keyboards/handwired/alcor_dactyl/keymaps/colemak_dh/keymap.c b/keyboards/handwired/alcor_dactyl/keymaps/colemak_dh/keymap.c new file mode 100644 index 00000000000..8d416114023 --- /dev/null +++ b/keyboards/handwired/alcor_dactyl/keymaps/colemak_dh/keymap.c @@ -0,0 +1,100 @@ +// Copyright 2022 Ethan (@rocketstrong) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +/* + * ┌──┐┌──┐┌──┐┌──┐┌──┐ ┌──┐┌──┐┌──┐┌──┐┌──┐ + *┌────┐┌──┐│ ││ ││ ││ ││ │ │ ││ ││ ││ ││ │┌──┐┌────┐ + *│ ││ │└──┘└──┘└──┘└──┘└──┘ └──┘└──┘└──┘└──┘└──┘│ ││ │ + *└────┘└──┘┌──┐┌──┐┌──┐┌──┐┌──┐ ┌──┐┌──┐┌──┐┌──┐┌──┐└──┘└────┘ + *┌────┐┌──┐│ ││ ││ ││ ││ │ │ ││ ││ ││ ││ │┌──┐┌────┐ + *│ ││ │└──┘└──┘└──┘└──┘└──┘ └──┘└──┘└──┘└──┘└──┘│ ││ │ + *└────┘└──┘┌──┐┌──┐┌──┐┌──┐┌──┐ ┌──┐┌──┐┌──┐┌──┐┌──┐└──┘└────┘ + *┌────┐┌──┐│ ││ ││ ││ ││ │ │ ││ ││ ││ ││ │┌──┐┌────┐ + *│ ││ │└──┘└──┘└──┘└──┘└──┘ └──┘└──┘└──┘└──┘└──┘│ ││ │ + *└────┘└──┘┌──┐┌──┐┌──┐┌──┐ ┌──┐┌──┐┌──┐┌──┐└──┘└────┘ + *┌────┐┌──┐│ ││ ││ ││ │ │ ││ ││ ││ │┌──┐┌────┐ + *│ ││ │└──┘└──┘└──┘└──┘ └──┘└──┘└──┘└──┘│ ││ │ + *└────┘└──┘┌──┐┌──┐ ┌──┐┌──┐└──┘└────┘ + * ┌──┐┌──┐│ ││ │ ┌──┐ ┌──┐ ┌──┐ ┌──┐ │ ││ │┌──┐┌──┐ + * │ ││ │└──┘└──┘ │ │ │ │ │ │ │ │ └──┘└──┘│ ││ │ + * └──┘└──┘ │ │ │ │ │ │ │ │ └──┘└──┘ + * │ │ └──┘ └──┘ │ │ + * └──┘ ┌──┐ ┌──┐ ┌──┐ ┌──┐ └──┘ + * │ │ │ │ │ │ │ │ + * └──┘ └──┘ └──┘ └──┘ + * ┌──┐┌──┐ ┌──┐┌──┐ + * │ ││ │ │ ││ │ + * └──┘└──┘ └──┘└──┘ + */ + +enum Colemaklayers { + _ARSTG, + _NUMPAD, + _SYMBOLS +}; + +enum custom_keycodes { + AD_DDS = SAFE_RANGE, + AD_SCOPE +}; + +#define TT_NUM TT(_NUMPAD) +#define TT_SYM TT(_SYMBOLS) + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case AD_DDS: + if (!record->event.pressed) { + // when keycode AD_DDS is pressed + SEND_STRING("../"); + } else { + // when keycode AD_DDS is released + } + break; + case AD_SCOPE: + if (!record->event.pressed) { + // when keycode AD_DDS is pressed + SEND_STRING("::"); + } else { + // when keycode AD_DDS is released + } + break; + } + return true; +} + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_ARSTG] = LAYOUT( + KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_MINS , KC_EQL , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_ESC , + KC_TAB , KC_Q , KC_W , KC_F , KC_P , KC_B , KC_LBRC , KC_RBRC , KC_J , KC_L , KC_U , KC_Y , KC_SCLN , KC_BSLS , + KC_ESC , KC_A , KC_R , KC_S , KC_T , KC_G , KC_PSCR , KC_PAUS , KC_M , KC_N , KC_E , KC_I , KC_O , KC_QUOT , + KC_LSFT , KC_Z , KC_X , KC_C , KC_D , KC_V , KC_K , KC_H , KC_COMM , KC_DOT , KC_SLSH , KC_RSFT , + KC_LCTL , KC_LGUI , KC_LALT , KC_DEL , KC_LEFT , KC_UP , KC_DOWN , KC_RIGHT, + KC_SPC , KC_BSPC , KC_TAB , KC_ENT , + TT_NUM , KC_LSFT , KC_RSFT , TT_SYM , + KC_LCTL , KC_LALT , KC_RALT , KC_RCTL + ), + [_NUMPAD] = LAYOUT( + KC_NO , 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_NO , + KC_TRNS , KC_PGUP , KC_HOME , KC_UP , KC_END , KC_NO , KC_NO , KC_NO , KC_NUM , KC_P7 , KC_P8 , KC_P9 , KC_PMNS , KC_NO , + KC_TRNS , KC_PGDN , KC_LEFT , KC_DOWN , KC_RIGHT, KC_NO , KC_TRNS , KC_TRNS , KC_PSLS , KC_P4 , KC_P5 , KC_P6 , KC_PPLS , KC_NO , + KC_TRNS , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_PAST , KC_P1 , KC_P2 , KC_P3 , KC_PEQL , KC_NO , + KC_TRNS , KC_NO , KC_NO , KC_NO , KC_P0 , KC_PDOT , KC_PCMM , KC_NO , + KC_TRNS , KC_TRNS , KC_TRNS , KC_PENT , + KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , + KC_TRNS , QK_BOOT , KC_TRNS , KC_TRNS + ), + [_SYMBOLS] = LAYOUT( + KC_NO , 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_NO , + KC_TRNS , KC_QUOT , KC_LT , KC_GT , KC_DQT , KC_DOT , KC_NO , KC_NO , KC_AMPR , AD_SCOPE, KC_LBRC , KC_RBRC , KC_PERC , KC_NO , + KC_TRNS , KC_EXLM , KC_MINS , KC_PLUS , KC_EQL , KC_HASH , KC_NO , KC_NO , KC_PIPE , KC_COLN , KC_LPRN , KC_RPRN , KC_QUES , KC_NO , + KC_TRNS , KC_CIRC , KC_SLSH , KC_ASTR , KC_BSLS , AD_DDS , KC_TILD , KC_DLR , KC_LCBR , KC_RCBR , KC_AT , KC_NO , + KC_TRNS , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , + KC_TRNS , KC_TRNS , KC_TRNS , KC_PENT , + KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , + KC_TRNS , KC_TRNS , QK_BOOT , KC_TRNS + ) +}; diff --git a/keyboards/handwired/alcor_dactyl/keymaps/default/keymap.c b/keyboards/handwired/alcor_dactyl/keymaps/default/keymap.c new file mode 100644 index 00000000000..55ddb298882 --- /dev/null +++ b/keyboards/handwired/alcor_dactyl/keymaps/default/keymap.c @@ -0,0 +1,43 @@ +// Copyright 2022 Ethan (@rocketstrong) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +/* + * ┌──┐┌──┐┌──┐┌──┐┌──┐ ┌──┐┌──┐┌──┐┌──┐┌──┐ + *┌────┐┌──┐│ ││ ││ ││ ││ │ │ ││ ││ ││ ││ │┌──┐┌────┐ + *│ ││ │└──┘└──┘└──┘└──┘└──┘ └──┘└──┘└──┘└──┘└──┘│ ││ │ + *└────┘└──┘┌──┐┌──┐┌──┐┌──┐┌──┐ ┌──┐┌──┐┌──┐┌──┐┌──┐└──┘└────┘ + *┌────┐┌──┐│ ││ ││ ││ ││ │ │ ││ ││ ││ ││ │┌──┐┌────┐ + *│ ││ │└──┘└──┘└──┘└──┘└──┘ └──┘└──┘└──┘└──┘└──┘│ ││ │ + *└────┘└──┘┌──┐┌──┐┌──┐┌──┐┌──┐ ┌──┐┌──┐┌──┐┌──┐┌──┐└──┘└────┘ + *┌────┐┌──┐│ ││ ││ ││ ││ │ │ ││ ││ ││ ││ │┌──┐┌────┐ + *│ ││ │└──┘└──┘└──┘└──┘└──┘ └──┘└──┘└──┘└──┘└──┘│ ││ │ + *└────┘└──┘┌──┐┌──┐┌──┐┌──┐ ┌──┐┌──┐┌──┐┌──┐└──┘└────┘ + *┌────┐┌──┐│ ││ ││ ││ │ │ ││ ││ ││ │┌──┐┌────┐ + *│ ││ │└──┘└──┘└──┘└──┘ └──┘└──┘└──┘└──┘│ ││ │ + *└────┘└──┘┌──┐┌──┐ ┌──┐┌──┐└──┘└────┘ + * ┌──┐┌──┐│ ││ │ ┌──┐ ┌──┐ ┌──┐ ┌──┐ │ ││ │┌──┐┌──┐ + * │ ││ │└──┘└──┘ │ │ │ │ │ │ │ │ └──┘└──┘│ ││ │ + * └──┘└──┘ │ │ │ │ │ │ │ │ └──┘└──┘ + * │ │ └──┘ └──┘ │ │ + * └──┘ ┌──┐ ┌──┐ ┌──┐ ┌──┐ └──┘ + * │ │ │ │ │ │ │ │ + * └──┘ └──┘ └──┘ └──┘ + * ┌──┐┌──┐ ┌──┐┌──┐ + * │ ││ │ │ ││ │ + * └──┘└──┘ └──┘└──┘ + */ + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT( + 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_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_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_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 + ) +}; diff --git a/keyboards/handwired/alcor_dactyl/readme.md b/keyboards/handwired/alcor_dactyl/readme.md new file mode 100644 index 00000000000..3c18faf247d --- /dev/null +++ b/keyboards/handwired/alcor_dactyl/readme.md @@ -0,0 +1,28 @@ +# alcor_dactyl + +![alcor_dactyl](https://i.imgur.com/F0E1JCQh.jpg) + +This is a handwired dactyl manufor utalising an RP2040-zero + +* Keyboard Maintainer: [Ethan](https://github.com/rocketstrong) +* Hardware Supported: Waveshare RP2040-Zero +* Hardware Availability: https://www.waveshare.com/wiki/RP2040-Zero +* 3D Print File Source: https://dactyl.mbugert.de/manuform + +Make example for this keyboard (after setting up your build environment): + + make handwired/alcor_dactyl:default + +Flashing example for this keyboard: + + make handwired/alcor_dactyl:default:flash + +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). + +## Bootloader + +Enter the bootloader in 3 ways: + +* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard +* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available diff --git a/keyboards/handwired/alcor_dactyl/rules.mk b/keyboards/handwired/alcor_dactyl/rules.mk new file mode 100644 index 00000000000..8fb51ec82d5 --- /dev/null +++ b/keyboards/handwired/alcor_dactyl/rules.mk @@ -0,0 +1,2 @@ +SERIAL_DRIVER = vendor +WS2812_DRIVER = vendor diff --git a/keyboards/handwired/dactyl_manuform/5x6_6/5x6_6.c b/keyboards/handwired/dactyl_manuform/5x6_6/5x6_6.c new file mode 100644 index 00000000000..dbfb96ce40e --- /dev/null +++ b/keyboards/handwired/dactyl_manuform/5x6_6/5x6_6.c @@ -0,0 +1,18 @@ +/* +Copyright 2022 fgoodwin + +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 . +*/ + +#include "5x6_6.h" diff --git a/keyboards/handwired/dactyl_manuform/5x6_6/5x6_6.h b/keyboards/handwired/dactyl_manuform/5x6_6/5x6_6.h new file mode 100644 index 00000000000..1392cb0b18f --- /dev/null +++ b/keyboards/handwired/dactyl_manuform/5x6_6/5x6_6.h @@ -0,0 +1,47 @@ +/* +Copyright 2022 fgoodwin + +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 . +*/ + +#include "quantum.h" +#pragma once + +#define XXX KC_NO + +#define LAYOUT_split_5x6_6( \ + L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \ + L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \ + L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \ + L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35, \ + L42, L43, L44, L45, R40, R41, R42, R43, \ + L54, L55, R50, R51, \ + L64, L65, R60, R61 \ +) { \ + { L00, L01, L02, L03, L04, L05 }, \ + { L10, L11, L12, L13, L14, L15 }, \ + { L20, L21, L22, L23, L24, L25 }, \ + { L30, L31, L32, L33, L34, L35 }, \ + { XXX, XXX, L42, L43, L44, L45 }, \ + { XXX, XXX, XXX, XXX, L54, L55 }, \ + { XXX, XXX, XXX, XXX, L64, L65 }, \ +\ + { R00, R01, R02, R03, R04, R05 }, \ + { R10, R11, R12, R13, R14, R15 }, \ + { R20, R21, R22, R23, R24, R25 }, \ + { R30, R31, R32, R33, R34, R35 }, \ + { R40, R41, R42, R43, XXX, XXX }, \ + { R50, R51, XXX, XXX, XXX, XXX }, \ + { R60, R61, XXX, XXX, XXX, XXX } \ +} diff --git a/keyboards/handwired/dactyl_manuform/5x6_6/config.h b/keyboards/handwired/dactyl_manuform/5x6_6/config.h new file mode 100644 index 00000000000..3571a6d979a --- /dev/null +++ b/keyboards/handwired/dactyl_manuform/5x6_6/config.h @@ -0,0 +1,34 @@ +/* +Copyright 2022 fgoodwin + +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 . +*/ + +#pragma once + +#include "config_common.h" + +/* key matrix size */ +// Rows are doubled-up +#define MATRIX_COLS 6 +#define MATRIX_ROWS 14 + +#undef SOFT_SERIAL_PIN +#define SOFT_SERIAL_PIN D3 + +// wiring of each half +#define MATRIX_COL_PINS { D4, C6, D7, E6, B4, B5 } +#define MATRIX_ROW_PINS { F5, F6, F7, B1, B3, B2, B6 } + +#define DIODE_DIRECTION COL2ROW \ No newline at end of file diff --git a/keyboards/handwired/dactyl_manuform/5x6_6/info.json b/keyboards/handwired/dactyl_manuform/5x6_6/info.json new file mode 100644 index 00000000000..2774cec1181 --- /dev/null +++ b/keyboards/handwired/dactyl_manuform/5x6_6/info.json @@ -0,0 +1,93 @@ +{ + "keyboard_name": "Dactyl Manuform 5x6+6", + "url": "https://github.com/fgoodwin/dactyl-manuform-5x6_6/tree/main/5x6_6", + "maintainer": "fgoodwin", + "usb": { + "vid": "0x444D", + "pid": "0x3536", + "device_version": "0.0.3" + }, + "layouts": { + "LAYOUT_split_5x6_6": { + "layout": [ + {"x": 0, "y": 0}, + {"x": 1, "y": 0}, + {"x": 2, "y": 0}, + {"x": 3, "y": 0}, + {"x": 4, "y": 0}, + {"x": 5, "y": 0}, + + {"x": 11, "y": 0}, + {"x": 12, "y": 0}, + {"x": 13, "y": 0}, + {"x": 14, "y": 0}, + {"x": 15, "y": 0}, + {"x": 16, "y": 0}, + + {"x": 0, "y": 1}, + {"x": 1, "y": 1}, + {"x": 2, "y": 1}, + {"x": 3, "y": 1}, + {"x": 4, "y": 1}, + {"x": 5, "y": 1}, + + {"x": 11, "y": 1}, + {"x": 12, "y": 1}, + {"x": 13, "y": 1}, + {"x": 14, "y": 1}, + {"x": 15, "y": 1}, + {"x": 16, "y": 1}, + + {"x": 0, "y": 2}, + {"x": 1, "y": 2}, + {"x": 2, "y": 2}, + {"x": 3, "y": 2}, + {"x": 4, "y": 2}, + {"x": 5, "y": 2}, + + {"x": 11, "y": 2}, + {"x": 12, "y": 2}, + {"x": 13, "y": 2}, + {"x": 14, "y": 2}, + {"x": 15, "y": 2}, + {"x": 16, "y": 2}, + + {"x": 0, "y": 3}, + {"x": 1, "y": 3}, + {"x": 2, "y": 3}, + {"x": 3, "y": 3}, + {"x": 4, "y": 3}, + {"x": 5, "y": 3}, + + {"x": 11, "y": 3}, + {"x": 12, "y": 3}, + {"x": 13, "y": 3}, + {"x": 14, "y": 3}, + {"x": 15, "y": 3}, + {"x": 16, "y": 3}, + + {"x": 2, "y": 4}, + {"x": 3, "y": 4}, + + {"x": 5, "y": 4}, + {"x": 6, "y": 4}, + {"x": 7, "y": 4}, + + {"x": 9, "y": 4}, + {"x": 10, "y": 4}, + {"x": 11, "y": 4}, + + {"x": 13, "y": 4}, + {"x": 14, "y": 4}, + + {"x": 5, "y": 5}, + {"x": 6, "y": 5}, + {"x": 7, "y": 5}, + + {"x": 5, "y": 5}, + {"x": 9, "y": 5}, + {"x": 10, "y": 5} + ] + } + } +} diff --git a/keyboards/handwired/dactyl_manuform/5x6_6/keymaps/default/keymap.c b/keyboards/handwired/dactyl_manuform/5x6_6/keymaps/default/keymap.c new file mode 100644 index 00000000000..74fe44702e9 --- /dev/null +++ b/keyboards/handwired/dactyl_manuform/5x6_6/keymaps/default/keymap.c @@ -0,0 +1,39 @@ +/* +Copyright 2022 fgoodwin + +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 . +*/ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [0] = LAYOUT_split_5x6_6( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS, + KC_GRV, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_EQL, + KC_TAB, 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_MINS, + KC_NO, KC_LGUI, KC_LCTL, KC_SPC, KC_RSFT, KC_ENT, KC_LBRC, KC_RBRC, + MO(1), LCTL(KC_C), KC_BSPC, MO(1), + KC_LALT, LCTL(KC_V), KC_DEL, KC_RSFT + ), + [1] = LAYOUT_split_5x6_6( + KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F12, + KC_TRNS, KC_TRNS, KC_PSCR, KC_DOWN, KC_UP, KC_HOME, KC_END, KC_LEFT, KC_RIGHT, 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_BSLS, KC_TRNS, + RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + MO(1), LCTL(KC_C), KC_TRNS, MO(1), + KC_TRNS, LCTL(KC_V), KC_TRNS, KC_TRNS + ) +}; diff --git a/keyboards/handwired/dactyl_manuform/5x6_6/readme.md b/keyboards/handwired/dactyl_manuform/5x6_6/readme.md new file mode 100644 index 00000000000..78107a183d2 --- /dev/null +++ b/keyboards/handwired/dactyl_manuform/5x6_6/readme.md @@ -0,0 +1,22 @@ +# Dactyl Manuform (5x6) with 6 thumb cluster + +The [Dactyl-Manuform](https://github.com/tshort/dactyl-keyboard) is a split curved keyboard based on the design of [adereth dactyl](https://github.com/adereth/dactyl-keyboard) and thumb cluster design of the [manuform](https://geekhack.org/index.php?topic=46015.0) keyboard, the hardware is similar to the let's split keyboard. All information needed for making one is in the first link. + +![Imgur](https://i.imgur.com/MvtMG1vh.png) + +* Keyboard Maintainer: fgoodwin +* Hardware Supported: Pro Micro Micro Micro USB or USB C + +Make example for this keyboard (after setting up your build environment): + + make handwired/dactyl_manuform/5x6_6:default + +Flashing example for this keyboard: + + make handwired/dactyl_manuform/5x6_6:default:flash + +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). + +Enter the bootloader in 2 ways: +**Physical reset button**: Briefly press the reset button on the bottom of the case, or bridge the reset and ground pins momentarily on the pro micro +**Keycode in layout**: Press the key mapped to `QK_BOOT` (by default hold down `MO(1)` and press the left most key in row 5 on the left hand half of the keyboard) \ No newline at end of file diff --git a/keyboards/handwired/dactyl_manuform/5x6_6/rules.mk b/keyboards/handwired/dactyl_manuform/5x6_6/rules.mk new file mode 100644 index 00000000000..1d413868d40 --- /dev/null +++ b/keyboards/handwired/dactyl_manuform/5x6_6/rules.mk @@ -0,0 +1,19 @@ +# MCU name +MCU = atmega32u4 + +# Bootloader selection +BOOTLOADER = caterina + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite +MOUSEKEY_ENABLE = yes # Mouse keys +EXTRAKEY_ENABLE = yes # Audio control and System control +CONSOLE_ENABLE = no # Console for debug +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Enable N-Key Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +AUDIO_ENABLE = no # Audio output +SPLIT_KEYBOARD = yes \ No newline at end of file diff --git a/keyboards/handwired/onekey/keymaps/digitizer/keymap.c b/keyboards/handwired/onekey/keymaps/digitizer/keymap.c index 6b304e86fe9..dcc0adc59b4 100644 --- a/keyboards/handwired/onekey/keymaps/digitizer/keymap.c +++ b/keyboards/handwired/onekey/keymaps/digitizer/keymap.c @@ -1,38 +1,58 @@ - /* Copyright 2021 QMK - * - * 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 . - */ +/* Copyright 2021 QMK + * + * 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 . + */ + #include QMK_KEYBOARD_H -#include "digitizer.h" +#include -#include "math.h" +enum custom_keycodes { + DG_TIP = SAFE_RANGE, +}; -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {LAYOUT_ortho_1x1(KC_A)}; +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + LAYOUT_ortho_1x1(DG_TIP) +}; uint32_t timer = 0; +void keyboard_post_init_user(void) { + digitizer_in_range_on(); +} + void matrix_scan_user() { if (timer_elapsed32(timer) < 200) { return; } - - timer = timer_read32(); - digitizer_t digitizer; - digitizer.x = 0.5 - 0.2 * cos(timer_read() / 250. / 6.28); - digitizer.y = 0.5 - 0.2 * sin(timer_read() / 250. / 6.28); - digitizer.tipswitch = 0; - digitizer.inrange = 1; - digitizer_set_report(digitizer); + + timer = timer_read32(); + + float x = 0.5 - 0.2 * cos(timer / 250. / 6.28); + float y = 0.5 - 0.2 * sin(timer / 250. / 6.28); + digitizer_set_position(x, y); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case DG_TIP: + if (record->event.pressed) { + digitizer_tip_switch_on(); + } else { + digitizer_tip_switch_off(); + } + return false; + } + return true; } diff --git a/keyboards/keebio/viterbi/keymaps/ericgebhart/keymap.c b/keyboards/keebio/viterbi/keymaps/ericgebhart/keymap.c index 60f7b74bc0e..c534fe3c6d3 100644 --- a/keyboards/keebio/viterbi/keymaps/ericgebhart/keymap.c +++ b/keyboards/keebio/viterbi/keymaps/ericgebhart/keymap.c @@ -1,5 +1,5 @@ /* - Copyright 2018 Eric Gebhart + Copyright 2018-2022 Eric Gebhart 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 @@ -15,34 +15,4 @@ along with this program. If not, see . */ -#include "keymap_bepo.h" -#include "ericgebhart.h" - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - // 4x10 - [_DVORAK] = BASE_5x14(___NUMS___, ___DVORAK___), - [_QWERTY] = BASE_5x14(___NUMS___, ___QWERTY___), - [_COLEMAK] = BASE_5x14(___NUMS___, ___COLEMAK_DH___), - [_BEAKL] = BASE_5x14(___BKLNUMS___, ___BEAKL15___), - - //[_DVORAK_BP] = BASE_5x14_bepo(___DVORAK_FR___), - //[_BEAKL_BP] = BASE_5x14_bepo(___BEAKL15_FR___), - - // 4x12 - //[_BEPO] = BASE_5x14_bepo6(___BEPO6_FR___), - - // transient macro takes a 3x12 for args - [_SYMB] = TRANSIENT_5x14(___12___, ___SYMB_BEAKLA_3x12___), - //[_SYMB_BP] = TRANSIENT_5x14(___SYMB_BEAKLA_BP_3x12___), - - [_TOPROWS] = TRANSIENT_5x14(___12___, ___TOPROWS_3x12___), - //[_TOPROWS_BP] = TRANSIENT_5x14(___TOPROWS_BP_3x12___), - - [_KEYPAD] = TRANSIENT_5x14(___12___, ___KP_C_3x12___), - //[_KEYPAD_BP] = TRANSIENT_5x14(___KP_C_BP_3x12___), - - // Navigation and control - [_NAV] = TRANSIENT_5x14(___12___, ___NAV_3x12___), - [_LAYERS] = TRANSIENT_5x14(___12___, ___LAYERS_3x12___), - //[_RGB] = TRANSIENT_5x14(___12___, ___RGB_3x12___), -}; +// See: users/ericgebhart. diff --git a/keyboards/keychron/q6/ansi/ansi.c b/keyboards/keychron/q6/ansi/ansi.c new file mode 100644 index 00000000000..dc27c9a82d0 --- /dev/null +++ b/keyboards/keychron/q6/ansi/ansi.c @@ -0,0 +1,177 @@ +/* Copyright 2022 @ Keychron (https://www.keychron.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 . + */ + +#include "ansi.h" + +#ifdef RGB_MATRIX_ENABLE + +// clang-format off + +const ckled2001_led PROGMEM g_ckled2001_leds[DRIVER_LED_TOTAL] = { +/* Refer to IS31 manual for these locations + * driver + * | R location + * | | G location + * | | | B location + * | | | | */ + {0, I_1, G_1, H_1}, + {0, I_2, G_2, H_2}, + {0, I_3, G_3, H_3}, + {0, I_4, G_4, H_4}, + {0, I_5, G_5, H_5}, + {0, I_6, G_6, H_6}, + {0, I_7, G_7, H_7}, + {0, I_8, G_8, H_8}, + {0, I_9, G_9, H_9}, + {0, I_10, G_10, H_10}, + {0, I_11, G_11, H_11}, + {0, I_12, G_12, H_12}, + {0, I_13, G_13, H_13}, + {0, I_15, G_15, H_15}, + {0, I_16, G_16, H_16}, + {0, L_5, J_5, K_5}, + {0, L_6, J_6, K_6}, + {0, L_7, J_7, K_7}, + {0, L_8, J_8, K_8}, + {0, L_4, J_4, K_4}, + + {0, C_1, A_1, B_1}, + {0, C_2, A_2, B_2}, + {0, C_3, A_3, B_3}, + {0, C_4, A_4, B_4}, + {0, C_5, A_5, B_5}, + {0, C_6, A_6, B_6}, + {0, C_7, A_7, B_7}, + {0, C_8, A_8, B_8}, + {0, C_9, A_9, B_9}, + {0, C_10, A_10, B_10}, + {0, C_11, A_11, B_11}, + {0, C_12, A_12, B_12}, + {0, C_13, A_13, B_13}, + {0, C_14, A_14, B_14}, + {0, C_15, A_15, B_15}, + {0, C_16, A_16, B_16}, + {0, L_9, J_9, K_9}, + {0, L_10, J_10, K_10}, + {0, L_11, J_11, K_11}, + {0, L_12, J_12, K_12}, + {0, L_13, J_13, K_13}, + + {0, F_1, D_1, E_1}, + {0, F_2, D_2, E_2}, + {0, F_3, D_3, E_3}, + {0, F_4, D_4, E_4}, + {0, F_5, D_5, E_5}, + {0, F_6, D_6, E_6}, + {0, F_7, D_7, E_7}, + {0, F_8, D_8, E_8}, + {0, F_9, D_9, E_9}, + {0, F_10, D_10, E_10}, + {0, F_11, D_11, E_11}, + {0, F_12, D_12, E_12}, + {0, F_13, D_13, E_13}, + {0, F_14, D_14, E_14}, + {0, F_15, D_15, E_15}, + {0, F_16, D_16, E_16}, + {0, L_14, J_14, K_14}, + {0, L_15, J_15, K_15}, + {0, L_16, J_16, K_16}, + {1, L_1, J_1, K_1}, + + {1, C_16, A_16, B_16}, + {1, C_15, A_15, B_15}, + {1, C_14, A_14, B_14}, + {1, C_13, A_13, B_13}, + {1, C_12, A_12, B_12}, + {1, C_11, A_11, B_11}, + {1, C_10, A_10, B_10}, + {1, C_9, A_9, B_9}, + {1, C_8, A_8, B_8}, + {1, C_7, A_7, B_7}, + {1, C_6, A_6, B_6}, + {1, C_5, A_5, B_5}, + {1, C_3, A_3, B_3}, + {1, L_3, J_3, K_3}, + {1, L_4, J_4, K_4}, + {1, L_5, J_5, K_5}, + {1, L_2, J_2, K_2}, + + {1, I_16, G_16, H_16}, + {1, I_14, G_14, H_14}, + {1, I_13, G_13, H_13}, + {1, I_12, G_12, H_12}, + {1, I_11, G_11, H_11}, + {1, I_10, G_10, H_10}, + {1, I_9, G_9, H_9}, + {1, I_8, G_8, H_8}, + {1, I_7, G_7, H_7}, + {1, I_6, G_6, H_6}, + {1, I_5, G_5, H_5}, + {1, I_3, G_3, H_3}, + {1, I_1, G_1, H_1}, + {1, L_6, J_6, K_6}, + {1, L_7, J_7, K_7}, + {1, L_8, J_8, K_8}, + + {1, F_16, D_16, E_16}, + {1, F_15, D_15, E_15}, + {1, F_14, D_14, E_14}, + {1, F_10, D_10, E_10}, + {1, F_6, D_6, E_6}, + {1, F_5, D_5, E_5}, + {1, F_4, D_4, E_4}, + {1, F_3, D_3, E_3}, + {1, F_2, D_2, E_2}, + {1, F_1, D_1, E_1}, + {1, L_10, J_10, K_10}, + {1, L_11, J_11, K_11}, + {1, L_12, J_12, K_12}, + {1, L_9, J_9, K_9}, +}; + +#define __ NO_LED + +led_config_t g_led_config = { + { + // Key Matrix to LED Index + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, __, 13, 14, 15, 39, 40, 16 }, + { 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 17 }, + { 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 18 }, + { 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, __, 73, 60, 77, 76, 74, 75, 19 }, + { 78, __, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, __, 89, 93, 90, 107, 91, 92, __ }, + { 94, 95, 96, __, __, __, 97, __, __, __, 98, 99, 100, 101, 102, 103, 104, 105, 106, __ }, + }, + { + // LED Index to Physical Position + {0,0}, {21,0}, {31,0}, {42,0}, {52,0}, {68,0}, {78,0}, {89,0}, {99,0}, {115,0}, {125,0}, {136,0}, {146,0}, {159,0}, {169,0}, {180,0}, {193,0}, {203,0}, {214,0}, {224,0}, + {0,15}, {10,15}, {21,15}, {31,15}, {42,15}, {52,15}, {63,15}, {73,15}, {83,15}, {94,15}, {104,15}, {115,15}, {125,15}, {141,15}, {159,15}, {169,15}, {180,15}, {193,15}, {203,15}, {214,15}, {224,15}, + {3,27}, {16,27}, {26,27}, {36,27}, {47,27}, {57,27}, {68,27}, {78,27}, {89,27}, {99,27}, {109,27}, {120,27}, {130,27}, {143,27}, {159,27}, {169,27}, {180,27}, {193,27}, {203,27}, {214,27}, + {4,40}, {18,40}, {29,40}, {39,40}, {50,40}, {60,40}, {70,40}, {81,40}, {91,40}, {102,40}, {112,40}, {123,40}, {139,40}, {193,40}, {203,40}, {214,40}, {224,34}, + {7,52}, {23,52}, {34,52}, {44,52}, {55,52}, {65,52}, {76,52}, {86,52}, {96,52}, {107,52}, {117,52}, {137,52}, {169,52}, {193,52}, {203,52}, {214,52}, + {1,64}, {14,64}, {27,64}, {66,64}, {105,64}, {118,64}, {131,64}, {145,64}, {159,64}, {169,64}, {180,64}, {198,64}, {214,64}, {224,58}, + }, + { + // RGB LED Index to Flag + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 8, 4, 4, 4, + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 4, 4, 4, + 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 4, 4, 4, + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 4, 4, 4, + 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, + } +}; + +#endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/q6/ansi/ansi.h b/keyboards/keychron/q6/ansi/ansi.h new file mode 100644 index 00000000000..de5b0aedb14 --- /dev/null +++ b/keyboards/keychron/q6/ansi/ansi.h @@ -0,0 +1,19 @@ +/* Copyright 2022 @ Keychron (https://www.keychron.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 . + */ + +#pragma once + +#include "quantum.h" diff --git a/keyboards/keychron/q6/ansi/config.h b/keyboards/keychron/q6/ansi/config.h new file mode 100644 index 00000000000..148f8d4c45b --- /dev/null +++ b/keyboards/keychron/q6/ansi/config.h @@ -0,0 +1,36 @@ +/* Copyright 2022 @ Keychron (https://www.keychron.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 . + */ + +#pragma once + +/* Key matrix pins */ +#define MATRIX_ROW_PINS \ + { B5, B4, B3, A15, A14, A13 } +#define MATRIX_COL_PINS \ + { A10, A9, A8, B1, B0, A7, A6, A5, A4, A3, A2, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, C14 } +#define NO_PIN_START 11 +#define NO_PIN_OFFSET 1 + +/* RGB Matrix Configuration */ +#define DRIVER_1_LED_TOTAL 60 +#define DRIVER_2_LED_TOTAL 48 +#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL) + +/* Enable caps-lock LED*/ +#define CAPS_LOCK_LED_INDEX 61 + +/* Enable NUM_LOCK_LED_INDEX */ +// #define NUM_LOCK_LED_INDEX 37 diff --git a/keyboards/keychron/q6/ansi/info.json b/keyboards/keychron/q6/ansi/info.json new file mode 100644 index 00000000000..a104096a6f7 --- /dev/null +++ b/keyboards/keychron/q6/ansi/info.json @@ -0,0 +1,130 @@ +{ + "keyboard_name": "Keychron Q6", + "manufacturer": "Keychron", + "url": "https://github.com/Keychron", + "maintainer": "lalalademaxiya1", + "usb": { + "vid": "0x3434", + "pid": "0x0160", + "device_version": "1.0.0" + }, + "layouts": { + "LAYOUT_ansi_108": { + "layout": [ + {"matrix":[0, 0], "x":0, "y":0}, + {"matrix":[0, 1], "x":2, "y":0}, + {"matrix":[0, 2], "x":3, "y":0}, + {"matrix":[0, 3], "x":4, "y":0}, + {"matrix":[0, 4], "x":5, "y":0}, + {"matrix":[0, 5], "x":6.5, "y":0}, + {"matrix":[0, 6], "x":7.5, "y":0}, + {"matrix":[0, 7], "x":8.5, "y":0}, + {"matrix":[0, 8], "x":9.5, "y":0}, + {"matrix":[0, 9], "x":11, "y":0}, + {"matrix":[0,10], "x":12, "y":0}, + {"matrix":[0,11], "x":13, "y":0}, + {"matrix":[0,12], "x":14, "y":0}, + {"matrix":[0,14], "x":15.25, "y":0}, + {"matrix":[0,15], "x":16.25, "y":0}, + {"matrix":[0,16], "x":17.25, "y":0}, + {"matrix":[0,19], "x":18.5, "y":0}, + {"matrix":[1,19], "x":19.5, "y":0}, + {"matrix":[2,19], "x":20.5, "y":0}, + {"matrix":[3,19], "x":21.5, "y":0}, + + {"matrix":[1, 0], "x":0, "y":1.25}, + {"matrix":[1, 1], "x":1, "y":1.25}, + {"matrix":[1, 2], "x":2, "y":1.25}, + {"matrix":[1, 3], "x":3, "y":1.25}, + {"matrix":[1, 4], "x":4, "y":1.25}, + {"matrix":[1, 5], "x":5, "y":1.25}, + {"matrix":[1, 6], "x":6, "y":1.25}, + {"matrix":[1, 7], "x":7, "y":1.25}, + {"matrix":[1, 8], "x":8, "y":1.25}, + {"matrix":[1, 9], "x":9, "y":1.25}, + {"matrix":[1,10], "x":10, "y":1.25}, + {"matrix":[1,11], "x":11, "y":1.25}, + {"matrix":[1,12], "x":12, "y":1.25}, + {"matrix":[1,13], "x":13, "y":1.25, "w":2}, + {"matrix":[1,14], "x":15.25, "y":1.25}, + {"matrix":[1,15], "x":16.25, "y":1.25}, + {"matrix":[1,16], "x":17.25, "y":1.25}, + {"matrix":[1,17], "x":18.5, "y":1.25}, + {"matrix":[1,18], "x":19.5, "y":1.25}, + {"matrix":[0,17], "x":20.5, "y":1.25}, + {"matrix":[0,18], "x":21.5, "y":1.25}, + + {"matrix":[2, 0], "x":0, "y":2.25, "w":1.5}, + {"matrix":[2, 1], "x":1.5, "y":2.25}, + {"matrix":[2, 2], "x":2.5, "y":2.25}, + {"matrix":[2, 3], "x":3.5, "y":2.25}, + {"matrix":[2, 4], "x":4.5, "y":2.25}, + {"matrix":[2, 5], "x":5.5, "y":2.25}, + {"matrix":[2, 6], "x":6.5, "y":2.25}, + {"matrix":[2, 7], "x":7.5, "y":2.25}, + {"matrix":[2, 8], "x":8.5, "y":2.25}, + {"matrix":[2, 9], "x":9.5, "y":2.25}, + {"matrix":[2,10], "x":10.5, "y":2.25}, + {"matrix":[2,11], "x":11.5, "y":2.25}, + {"matrix":[2,12], "x":12.5, "y":2.25}, + {"matrix":[2,13], "x":13.5, "y":2.25, "w":1.5}, + {"matrix":[2,14], "x":15.25, "y":2.25}, + {"matrix":[2,15], "x":16.25, "y":2.25}, + {"matrix":[2,16], "x":17.25, "y":2.25}, + {"matrix":[2,17], "x":18.5, "y":2.25}, + {"matrix":[2,18], "x":19.5, "y":2.25}, + {"matrix":[3,14], "x":20.5, "y":2.25}, + + {"matrix":[3, 0], "x":0, "y":3.25, "w":1.75}, + {"matrix":[3, 1], "x":1.75, "y":3.25}, + {"matrix":[3, 2], "x":2.75, "y":3.25}, + {"matrix":[3, 3], "x":3.75, "y":3.25}, + {"matrix":[3, 4], "x":4.75, "y":3.25}, + {"matrix":[3, 5], "x":5.75, "y":3.25}, + {"matrix":[3, 6], "x":6.75, "y":3.25}, + {"matrix":[3, 7], "x":7.75, "y":3.25}, + {"matrix":[3, 8], "x":8.75, "y":3.25}, + {"matrix":[3, 9], "x":9.75, "y":3.25}, + {"matrix":[3,10], "x":10.75, "y":3.25}, + {"matrix":[3,11], "x":11.75, "y":3.25}, + {"matrix":[3,13], "x":12.75, "y":3.25, "w":2.25}, + {"matrix":[3,17], "x":18.5, "y":3.25}, + {"matrix":[3,18], "x":19.5, "y":3.25}, + {"matrix":[3,16], "x":20.5, "y":3.25}, + {"matrix":[3,15], "x":21.5, "y":2.25, "h":2}, + + {"matrix":[4, 0], "x":0, "y":4.25, "w":2.25}, + {"matrix":[4, 2], "x":2.25, "y":4.25}, + {"matrix":[4, 3], "x":3.25, "y":4.25}, + {"matrix":[4, 4], "x":4.25, "y":4.25}, + {"matrix":[4, 5], "x":5.25, "y":4.25}, + {"matrix":[4, 6], "x":6.25, "y":4.25}, + {"matrix":[4, 7], "x":7.25, "y":4.25}, + {"matrix":[4, 8], "x":8.25, "y":4.25}, + {"matrix":[4, 9], "x":9.25, "y":4.25}, + {"matrix":[4,10], "x":10.25, "y":4.25}, + {"matrix":[4,11], "x":11.25, "y":4.25}, + {"matrix":[4,13], "x":12.25, "y":4.25, "w":2.75}, + {"matrix":[4,15], "x":16.25, "y":4.25}, + {"matrix":[4,17], "x":18.5, "y":4.25}, + {"matrix":[4,18], "x":19.5, "y":4.25}, + {"matrix":[4,14], "x":20.5, "y":4.25}, + + {"matrix":[5, 0], "x":0, "y":5.25, "w":1.25}, + {"matrix":[5, 1], "x":1.25, "y":5.25, "w":1.25}, + {"matrix":[5, 2], "x":2.5, "y":5.25, "w":1.25}, + {"matrix":[5, 6], "x":3.75, "y":5.25, "w":6.25}, + {"matrix":[5,10], "x":10, "y":5.25, "w":1.25}, + {"matrix":[5,11], "x":11.25, "y":5.25, "w":1.25}, + {"matrix":[5,12], "x":12.5, "y":5.25, "w":1.25}, + {"matrix":[5,13], "x":13.75, "y":5.25, "w":1.25}, + {"matrix":[5,14], "x":15.25, "y":5.25}, + {"matrix":[5,15], "x":16.25, "y":5.25}, + {"matrix":[5,16], "x":17.25, "y":5.25}, + {"matrix":[5,17], "x":18.5, "y":5.25, "w":2}, + {"matrix":[5,18], "x":20.5, "y":5.25}, + {"matrix":[4,16], "x":21.5, "y":4.25, "h":2} + ] + } + } +} diff --git a/keyboards/keychron/q6/ansi/keymaps/default/keymap.c b/keyboards/keychron/q6/ansi/keymaps/default/keymap.c new file mode 100644 index 00000000000..19bab1ee378 --- /dev/null +++ b/keyboards/keychron/q6/ansi/keymaps/default/keymap.c @@ -0,0 +1,57 @@ +/* Copyright 2022 @ Keychron (https://www.keychron.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 . + */ + +#include QMK_KEYBOARD_H + +// clang-format off + +enum layers{ + MAC_BASE, + MAC_FN, + WIN_BASE, + WIN_FN +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [MAC_BASE] = LAYOUT_ansi_108( + KC_ESC, KC_BRID, KC_BRIU, KC_NO, KC_NO, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO, RGB_MOD, KC_F13, KC_F14, KC_F15, KC_F16, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, + 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_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, + 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_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, + KC_LCTL, KC_LOPT, KC_LCMD, KC_SPC, KC_RCMD, KC_ROPT, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT), + [MAC_FN] = LAYOUT_ansi_108( + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, RGB_TOG, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + [WIN_BASE] = LAYOUT_ansi_108( + 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_PSCR, KC_NO, RGB_MOD, _______, _______, _______, _______, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, + 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_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, + 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_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, + KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT), + [WIN_FN] = LAYOUT_ansi_108( + _______, KC_BRID, KC_BRIU, _______, _______, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_TOG, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), +}; diff --git a/keyboards/keychron/q6/ansi/keymaps/keychron/keymap.c b/keyboards/keychron/q6/ansi/keymaps/keychron/keymap.c new file mode 100644 index 00000000000..2ae53ecb632 --- /dev/null +++ b/keyboards/keychron/q6/ansi/keymaps/keychron/keymap.c @@ -0,0 +1,72 @@ +/* Copyright 2022 @ Keychron (https://www.keychron.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 . + */ + +#include QMK_KEYBOARD_H +#include "keychron_common.h" + +// clang-format off + +enum layers{ + MAC_BASE, + MAC_FN, + WIN_BASE, + WIN_FN +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [MAC_BASE] = LAYOUT_ansi_108( + KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_SNAP, KC_SIRI, RGB_MOD, KC_F13, KC_F14, KC_F15, KC_F16, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, + 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_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, + 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_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, + KC_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, KC_ROPTN, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT), + [MAC_FN] = LAYOUT_ansi_108( + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, RGB_TOG, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + [WIN_BASE] = LAYOUT_ansi_108( + 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_PSCR, KC_CRTA, RGB_MOD, _______, _______, _______, _______, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, + 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_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, + 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_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, + KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT), + [WIN_FN] = LAYOUT_ansi_108( + _______, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_TOG, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), +}; + +// clang-format on + +void housekeeping_task_user(void) { + housekeeping_task_keychron(); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + if(!process_record_keychron(keycode, record)) { + return false; + } + + return true; +} diff --git a/keyboards/keychron/q6/ansi/keymaps/keychron/rules.mk b/keyboards/keychron/q6/ansi/keymaps/keychron/rules.mk new file mode 100644 index 00000000000..495e8907b48 --- /dev/null +++ b/keyboards/keychron/q6/ansi/keymaps/keychron/rules.mk @@ -0,0 +1,4 @@ +VIA_ENABLE = yes + +VPATH += keyboards/keychron/common +SRC += keychron_common.c diff --git a/keyboards/keychron/q6/ansi/keymaps/via/keymap.c b/keyboards/keychron/q6/ansi/keymaps/via/keymap.c new file mode 100644 index 00000000000..19bab1ee378 --- /dev/null +++ b/keyboards/keychron/q6/ansi/keymaps/via/keymap.c @@ -0,0 +1,57 @@ +/* Copyright 2022 @ Keychron (https://www.keychron.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 . + */ + +#include QMK_KEYBOARD_H + +// clang-format off + +enum layers{ + MAC_BASE, + MAC_FN, + WIN_BASE, + WIN_FN +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [MAC_BASE] = LAYOUT_ansi_108( + KC_ESC, KC_BRID, KC_BRIU, KC_NO, KC_NO, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO, RGB_MOD, KC_F13, KC_F14, KC_F15, KC_F16, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, + 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_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, + 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_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, + KC_LCTL, KC_LOPT, KC_LCMD, KC_SPC, KC_RCMD, KC_ROPT, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT), + [MAC_FN] = LAYOUT_ansi_108( + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, RGB_TOG, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + [WIN_BASE] = LAYOUT_ansi_108( + 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_PSCR, KC_NO, RGB_MOD, _______, _______, _______, _______, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, + 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_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, + 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_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, + KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT), + [WIN_FN] = LAYOUT_ansi_108( + _______, KC_BRID, KC_BRIU, _______, _______, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_TOG, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), +}; diff --git a/keyboards/keychron/q6/ansi/keymaps/via/rules.mk b/keyboards/keychron/q6/ansi/keymaps/via/rules.mk new file mode 100644 index 00000000000..1e5b99807cb --- /dev/null +++ b/keyboards/keychron/q6/ansi/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes diff --git a/keyboards/keychron/q6/ansi/readme.md b/keyboards/keychron/q6/ansi/readme.md new file mode 100644 index 00000000000..d4075e91593 --- /dev/null +++ b/keyboards/keychron/q6/ansi/readme.md @@ -0,0 +1 @@ +# The ANSI variant of the Keychron Q6 diff --git a/keyboards/keychron/q6/ansi/rules.mk b/keyboards/keychron/q6/ansi/rules.mk new file mode 100644 index 00000000000..d7ee4abddd0 --- /dev/null +++ b/keyboards/keychron/q6/ansi/rules.mk @@ -0,0 +1,32 @@ +# MCU name +MCU = STM32L432 + +# Bootloader selection +BOOTLOADER = stm32-dfu + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite +MOUSEKEY_ENABLE = yes # Mouse keys +EXTRAKEY_ENABLE = yes # Audio control and System control +CONSOLE_ENABLE = no # Console for debug +COMMAND_ENABLE = no # Commands for debug and configuration +NKRO_ENABLE = yes # Enable USB N-key Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +AUDIO_ENABLE = no # Audio output +DIP_SWITCH_ENABLE = yes +RGB_MATRIX_ENABLE = yes +RGB_MATRIX_DRIVER = CKLED2001 +LTO_ENABLE = yes +EEPROM_DRIVER = wear_leveling +WEAR_LEVELING_DRIVER = embedded_flash + +# Enter lower-power sleep mode when on the ChibiOS idle thread +OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE + +# custom matrix setup +CUSTOM_MATRIX = lite + +SRC += matrix.c diff --git a/keyboards/keychron/q6/ansi_encoder/ansi_encoder.c b/keyboards/keychron/q6/ansi_encoder/ansi_encoder.c new file mode 100644 index 00000000000..bb1044bd09a --- /dev/null +++ b/keyboards/keychron/q6/ansi_encoder/ansi_encoder.c @@ -0,0 +1,177 @@ +/* Copyright 2022 @ Keychron (https://www.keychron.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 . + */ + +#include "ansi_encoder.h" + +#ifdef RGB_MATRIX_ENABLE + +// clang-format off + +const ckled2001_led PROGMEM g_ckled2001_leds[DRIVER_LED_TOTAL] = { +/* Refer to IS31 manual for these locations + * driver + * | R location + * | | G location + * | | | B location + * | | | | */ + {0, I_1, G_1, H_1}, + {0, I_2, G_2, H_2}, + {0, I_3, G_3, H_3}, + {0, I_4, G_4, H_4}, + {0, I_5, G_5, H_5}, + {0, I_6, G_6, H_6}, + {0, I_7, G_7, H_7}, + {0, I_8, G_8, H_8}, + {0, I_9, G_9, H_9}, + {0, I_10, G_10, H_10}, + {0, I_11, G_11, H_11}, + {0, I_12, G_12, H_12}, + {0, I_13, G_13, H_13}, + {0, I_15, G_15, H_15}, + {0, I_16, G_16, H_16}, + {0, L_5, J_5, K_5}, + {0, L_6, J_6, K_6}, + {0, L_7, J_7, K_7}, + {0, L_8, J_8, K_8}, + {0, L_4, J_4, K_4}, + + {0, C_1, A_1, B_1}, + {0, C_2, A_2, B_2}, + {0, C_3, A_3, B_3}, + {0, C_4, A_4, B_4}, + {0, C_5, A_5, B_5}, + {0, C_6, A_6, B_6}, + {0, C_7, A_7, B_7}, + {0, C_8, A_8, B_8}, + {0, C_9, A_9, B_9}, + {0, C_10, A_10, B_10}, + {0, C_11, A_11, B_11}, + {0, C_12, A_12, B_12}, + {0, C_13, A_13, B_13}, + {0, C_14, A_14, B_14}, + {0, C_15, A_15, B_15}, + {0, C_16, A_16, B_16}, + {0, L_9, J_9, K_9}, + {0, L_10, J_10, K_10}, + {0, L_11, J_11, K_11}, + {0, L_12, J_12, K_12}, + {0, L_13, J_13, K_13}, + + {0, F_1, D_1, E_1}, + {0, F_2, D_2, E_2}, + {0, F_3, D_3, E_3}, + {0, F_4, D_4, E_4}, + {0, F_5, D_5, E_5}, + {0, F_6, D_6, E_6}, + {0, F_7, D_7, E_7}, + {0, F_8, D_8, E_8}, + {0, F_9, D_9, E_9}, + {0, F_10, D_10, E_10}, + {0, F_11, D_11, E_11}, + {0, F_12, D_12, E_12}, + {0, F_13, D_13, E_13}, + {0, F_14, D_14, E_14}, + {0, F_15, D_15, E_15}, + {0, F_16, D_16, E_16}, + {0, L_14, J_14, K_14}, + {0, L_15, J_15, K_15}, + {0, L_16, J_16, K_16}, + {1, L_1, J_1, K_1}, + + {1, C_16, A_16, B_16}, + {1, C_15, A_15, B_15}, + {1, C_14, A_14, B_14}, + {1, C_13, A_13, B_13}, + {1, C_12, A_12, B_12}, + {1, C_11, A_11, B_11}, + {1, C_10, A_10, B_10}, + {1, C_9, A_9, B_9}, + {1, C_8, A_8, B_8}, + {1, C_7, A_7, B_7}, + {1, C_6, A_6, B_6}, + {1, C_5, A_5, B_5}, + {1, C_3, A_3, B_3}, + {1, L_3, J_3, K_3}, + {1, L_4, J_4, K_4}, + {1, L_5, J_5, K_5}, + {1, L_2, J_2, K_2}, + + {1, I_16, G_16, H_16}, + {1, I_14, G_14, H_14}, + {1, I_13, G_13, H_13}, + {1, I_12, G_12, H_12}, + {1, I_11, G_11, H_11}, + {1, I_10, G_10, H_10}, + {1, I_9, G_9, H_9}, + {1, I_8, G_8, H_8}, + {1, I_7, G_7, H_7}, + {1, I_6, G_6, H_6}, + {1, I_5, G_5, H_5}, + {1, I_3, G_3, H_3}, + {1, I_1, G_1, H_1}, + {1, L_6, J_6, K_6}, + {1, L_7, J_7, K_7}, + {1, L_8, J_8, K_8}, + + {1, F_16, D_16, E_16}, + {1, F_15, D_15, E_15}, + {1, F_14, D_14, E_14}, + {1, F_10, D_10, E_10}, + {1, F_6, D_6, E_6}, + {1, F_5, D_5, E_5}, + {1, F_4, D_4, E_4}, + {1, F_3, D_3, E_3}, + {1, F_2, D_2, E_2}, + {1, F_1, D_1, E_1}, + {1, L_10, J_10, K_10}, + {1, L_11, J_11, K_11}, + {1, L_12, J_12, K_12}, + {1, L_9, J_9, K_9}, +}; + +#define __ NO_LED + +led_config_t g_led_config = { + { + // Key Matrix to LED Index + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, __, 13, 14, 15, 39, 40, 16 }, + { 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 17 }, + { 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 18 }, + { 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, __, 73, 60, 77, 76, 74, 75, 19 }, + { 78, __, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, __, 89, 93, 90, 107, 91, 92, __ }, + { 94, 95, 96, __, __, __, 97, __, __, __, 98, 99, 100, 101, 102, 103, 104, 105, 106, __ }, + }, + { + // LED Index to Physical Position + {0,0}, {13,0}, {24,0}, {34,0}, {45,0}, {57,0}, {68,0}, {78,0}, {89,0}, {102,0}, {112,0}, {123,0}, {133,0}, {159,0}, {169,0}, {180,0}, {193,0}, {203,0}, {214,0}, {224,0}, + {0,15}, {10,15}, {21,15}, {31,15}, {42,15}, {52,15}, {63,15}, {73,15}, {83,15}, {94,15}, {104,15}, {115,15}, {125,15}, {141,15}, {159,15}, {169,15}, {180,15}, {193,15}, {203,15}, {214,15}, {224,15}, + {3,27}, {16,27}, {26,27}, {36,27}, {47,27}, {57,27}, {68,27}, {78,27}, {89,27}, {99,27}, {109,27}, {120,27}, {130,27}, {143,27}, {159,27}, {169,27}, {180,27}, {193,27}, {203,27}, {214,27}, + {4,40}, {18,40}, {29,40}, {39,40}, {50,40}, {60,40}, {70,40}, {81,40}, {91,40}, {102,40}, {112,40}, {123,40}, {139,40}, {193,40}, {203,40}, {214,40}, {224,34}, + {7,52}, {23,52}, {34,52}, {44,52}, {55,52}, {65,52}, {76,52}, {86,52}, {96,52}, {107,52}, {117,52}, {137,52}, {169,52}, {193,52}, {203,52}, {214,52}, + {1,64}, {14,64}, {27,64}, {66,64}, {105,64}, {118,64}, {131,64}, {145,64}, {159,64}, {169,64}, {180,64}, {198,64}, {214,64}, {224,58}, + }, + { + // RGB LED Index to Flag + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 8, 4, 4, 4, + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 4, 4, 4, + 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 4, 4, 4, + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 4, 4, 4, + 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, + } +}; + +#endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/q6/ansi_encoder/ansi_encoder.h b/keyboards/keychron/q6/ansi_encoder/ansi_encoder.h new file mode 100644 index 00000000000..de5b0aedb14 --- /dev/null +++ b/keyboards/keychron/q6/ansi_encoder/ansi_encoder.h @@ -0,0 +1,19 @@ +/* Copyright 2022 @ Keychron (https://www.keychron.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 . + */ + +#pragma once + +#include "quantum.h" diff --git a/keyboards/keychron/q6/ansi_encoder/config.h b/keyboards/keychron/q6/ansi_encoder/config.h new file mode 100644 index 00000000000..31d801430fa --- /dev/null +++ b/keyboards/keychron/q6/ansi_encoder/config.h @@ -0,0 +1,43 @@ +/* Copyright 2022 @ Keychron (https://www.keychron.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 . + */ + +#pragma once + +/* Key matrix pins */ +#define MATRIX_ROW_PINS \ + { B5, B4, B3, A15, A14, A13 } +#define MATRIX_COL_PINS \ + { A10, A9, A8, B1, B0, A7, A6, A5, A4, A3, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN } +#define NO_PIN_START 10 +#define NO_PIN_NUM 10 +#define CLR_REG_VAL 0x3FF + +/* RGB Matrix Configuration */ +#define DRIVER_1_LED_TOTAL 60 +#define DRIVER_2_LED_TOTAL 48 +#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL) + +/* Encoder Configuration */ +#define ENCODERS_PAD_A { C14 } +#define ENCODERS_PAD_B { A2 } +#define ENCODER_RESOLUTION 4 +#define ENCODER_DEFAULT_POS 0x3 + +/* Enable caps-lock LED*/ +#define CAPS_LOCK_LED_INDEX 61 + +/* Enable NUM_LOCK_LED_INDEX */ +// #define NUM_LOCK_LED_INDEX 37 diff --git a/keyboards/keychron/q6/ansi_encoder/info.json b/keyboards/keychron/q6/ansi_encoder/info.json new file mode 100644 index 00000000000..7449c191cf7 --- /dev/null +++ b/keyboards/keychron/q6/ansi_encoder/info.json @@ -0,0 +1,131 @@ +{ + "keyboard_name": "Keychron Q6", + "manufacturer": "Keychron", + "url": "https://github.com/Keychron", + "maintainer": "lalalademaxiya1", + "usb": { + "vid": "0x3434", + "pid": "0x0161", + "device_version": "1.0.0" + }, + "layouts": { + "LAYOUT_ansi_109": { + "layout": [ + {"matrix":[0, 0], "x":0, "y":0}, + {"matrix":[0, 1], "x":1.25, "y":0}, + {"matrix":[0, 2], "x":2.25, "y":0}, + {"matrix":[0, 3], "x":3.25, "y":0}, + {"matrix":[0, 4], "x":4.25, "y":0}, + {"matrix":[0, 5], "x":5.5, "y":0}, + {"matrix":[0, 6], "x":6.5, "y":0}, + {"matrix":[0, 7], "x":7.5, "y":0}, + {"matrix":[0, 8], "x":8.5, "y":0}, + {"matrix":[0, 9], "x":9.75, "y":0}, + {"matrix":[0,10], "x":10.75, "y":0}, + {"matrix":[0,11], "x":11.75, "y":0}, + {"matrix":[0,12], "x":12.75, "y":0}, + {"matrix":[4,19], "x":14, "y":0}, + {"matrix":[0,14], "x":15.25, "y":0}, + {"matrix":[0,15], "x":16.25, "y":0}, + {"matrix":[0,16], "x":17.25, "y":0}, + {"matrix":[0,19], "x":18.5, "y":0}, + {"matrix":[1,19], "x":19.5, "y":0}, + {"matrix":[2,19], "x":20.5, "y":0}, + {"matrix":[3,19], "x":21.5, "y":0}, + + {"matrix":[1, 0], "x":0, "y":1.25}, + {"matrix":[1, 1], "x":1, "y":1.25}, + {"matrix":[1, 2], "x":2, "y":1.25}, + {"matrix":[1, 3], "x":3, "y":1.25}, + {"matrix":[1, 4], "x":4, "y":1.25}, + {"matrix":[1, 5], "x":5, "y":1.25}, + {"matrix":[1, 6], "x":6, "y":1.25}, + {"matrix":[1, 7], "x":7, "y":1.25}, + {"matrix":[1, 8], "x":8, "y":1.25}, + {"matrix":[1, 9], "x":9, "y":1.25}, + {"matrix":[1,10], "x":10, "y":1.25}, + {"matrix":[1,11], "x":11, "y":1.25}, + {"matrix":[1,12], "x":12, "y":1.25}, + {"matrix":[1,13], "x":13, "y":1.25, "w":2}, + {"matrix":[1,14], "x":15.25, "y":1.25}, + {"matrix":[1,15], "x":16.25, "y":1.25}, + {"matrix":[1,16], "x":17.25, "y":1.25}, + {"matrix":[1,17], "x":18.5, "y":1.25}, + {"matrix":[1,18], "x":19.5, "y":1.25}, + {"matrix":[0,17], "x":20.5, "y":1.25}, + {"matrix":[0,18], "x":21.5, "y":1.25}, + + {"matrix":[2, 0], "x":0, "y":2.25, "w":1.5}, + {"matrix":[2, 1], "x":1.5, "y":2.25}, + {"matrix":[2, 2], "x":2.5, "y":2.25}, + {"matrix":[2, 3], "x":3.5, "y":2.25}, + {"matrix":[2, 4], "x":4.5, "y":2.25}, + {"matrix":[2, 5], "x":5.5, "y":2.25}, + {"matrix":[2, 6], "x":6.5, "y":2.25}, + {"matrix":[2, 7], "x":7.5, "y":2.25}, + {"matrix":[2, 8], "x":8.5, "y":2.25}, + {"matrix":[2, 9], "x":9.5, "y":2.25}, + {"matrix":[2,10], "x":10.5, "y":2.25}, + {"matrix":[2,11], "x":11.5, "y":2.25}, + {"matrix":[2,12], "x":12.5, "y":2.25}, + {"matrix":[2,13], "x":13.5, "y":2.25, "w":1.5}, + {"matrix":[2,14], "x":15.25, "y":2.25}, + {"matrix":[2,15], "x":16.25, "y":2.25}, + {"matrix":[2,16], "x":17.25, "y":2.25}, + {"matrix":[2,17], "x":18.5, "y":2.25}, + {"matrix":[2,18], "x":19.5, "y":2.25}, + {"matrix":[3,14], "x":20.5, "y":2.25}, + + {"matrix":[3, 0], "x":0, "y":3.25, "w":1.75}, + {"matrix":[3, 1], "x":1.75, "y":3.25}, + {"matrix":[3, 2], "x":2.75, "y":3.25}, + {"matrix":[3, 3], "x":3.75, "y":3.25}, + {"matrix":[3, 4], "x":4.75, "y":3.25}, + {"matrix":[3, 5], "x":5.75, "y":3.25}, + {"matrix":[3, 6], "x":6.75, "y":3.25}, + {"matrix":[3, 7], "x":7.75, "y":3.25}, + {"matrix":[3, 8], "x":8.75, "y":3.25}, + {"matrix":[3, 9], "x":9.75, "y":3.25}, + {"matrix":[3,10], "x":10.75, "y":3.25}, + {"matrix":[3,11], "x":11.75, "y":3.25}, + {"matrix":[3,13], "x":12.75, "y":3.25, "w":2.25}, + {"matrix":[3,17], "x":18.5, "y":3.25}, + {"matrix":[3,18], "x":19.5, "y":3.25}, + {"matrix":[3,16], "x":20.5, "y":3.25}, + {"matrix":[3,15], "x":21.5, "y":2.25, "h":2}, + + {"matrix":[4, 0], "x":0, "y":4.25, "w":2.25}, + {"matrix":[4, 2], "x":2.25, "y":4.25}, + {"matrix":[4, 3], "x":3.25, "y":4.25}, + {"matrix":[4, 4], "x":4.25, "y":4.25}, + {"matrix":[4, 5], "x":5.25, "y":4.25}, + {"matrix":[4, 6], "x":6.25, "y":4.25}, + {"matrix":[4, 7], "x":7.25, "y":4.25}, + {"matrix":[4, 8], "x":8.25, "y":4.25}, + {"matrix":[4, 9], "x":9.25, "y":4.25}, + {"matrix":[4,10], "x":10.25, "y":4.25}, + {"matrix":[4,11], "x":11.25, "y":4.25}, + {"matrix":[4,13], "x":12.25, "y":4.25, "w":2.75}, + {"matrix":[4,15], "x":16.25, "y":4.25}, + {"matrix":[4,17], "x":18.5, "y":4.25}, + {"matrix":[4,18], "x":19.5, "y":4.25}, + {"matrix":[4,14], "x":20.5, "y":4.25}, + + {"matrix":[5, 0], "x":0, "y":5.25, "w":1.25}, + {"matrix":[5, 1], "x":1.25, "y":5.25, "w":1.25}, + {"matrix":[5, 2], "x":2.5, "y":5.25, "w":1.25}, + {"matrix":[5, 6], "x":3.75, "y":5.25, "w":6.25}, + {"matrix":[5,10], "x":10, "y":5.25, "w":1.25}, + {"matrix":[5,11], "x":11.25, "y":5.25, "w":1.25}, + {"matrix":[5,12], "x":12.5, "y":5.25, "w":1.25}, + {"matrix":[5,13], "x":13.75, "y":5.25, "w":1.25}, + {"matrix":[5,14], "x":15.25, "y":5.25}, + {"matrix":[5,15], "x":16.25, "y":5.25}, + {"matrix":[5,16], "x":17.25, "y":5.25}, + {"matrix":[5,17], "x":18.5, "y":5.25, "w":2}, + {"matrix":[5,18], "x":20.5, "y":5.25}, + {"matrix":[4,16], "x":21.5, "y":4.25, "h":2} + ] + } + } +} diff --git a/keyboards/keychron/q6/ansi_encoder/keymaps/default/keymap.c b/keyboards/keychron/q6/ansi_encoder/keymaps/default/keymap.c new file mode 100644 index 00000000000..73b2b7984d9 --- /dev/null +++ b/keyboards/keychron/q6/ansi_encoder/keymaps/default/keymap.c @@ -0,0 +1,66 @@ +/* Copyright 2022 @ Keychron (https://www.keychron.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 . + */ + +#include QMK_KEYBOARD_H + +// clang-format off + +enum layers{ + MAC_BASE, + MAC_FN, + WIN_BASE, + WIN_FN +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [MAC_BASE] = LAYOUT_ansi_109( + KC_ESC, KC_BRID, KC_BRIU, KC_NO, KC_NO, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_MUTE, KC_NO, KC_NO, RGB_MOD, KC_F13, KC_F14, KC_F15, KC_F16, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, + 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_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, + 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_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, + KC_LCTL, KC_LOPT, KC_LCMD, KC_SPC, KC_RCMD, KC_ROPT, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT), + [MAC_FN] = LAYOUT_ansi_109( + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, RGB_TOG, _______, _______, RGB_TOG, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + [WIN_BASE] = LAYOUT_ansi_109( + 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_MUTE, KC_PSCR, KC_NO, RGB_MOD, _______, _______, _______, _______, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, + 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_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, + 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_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, + KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT), + [WIN_FN] = LAYOUT_ansi_109( + _______, KC_BRID, KC_BRIU, _______, _______, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, RGB_TOG, _______, _______, RGB_TOG, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][1][2] = { + [MAC_BASE] = {ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [MAC_FN] = {ENCODER_CCW_CW(RGB_VAD, RGB_VAI) }, + [WIN_BASE] = {ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [WIN_FN] = {ENCODER_CCW_CW(RGB_VAD, RGB_VAI) } +}; +#endif diff --git a/keyboards/keychron/q6/ansi_encoder/keymaps/default/rules.mk b/keyboards/keychron/q6/ansi_encoder/keymaps/default/rules.mk new file mode 100644 index 00000000000..ee325681483 --- /dev/null +++ b/keyboards/keychron/q6/ansi_encoder/keymaps/default/rules.mk @@ -0,0 +1 @@ +ENCODER_MAP_ENABLE = yes diff --git a/keyboards/keychron/q6/ansi_encoder/keymaps/keychron/keymap.c b/keyboards/keychron/q6/ansi_encoder/keymaps/keychron/keymap.c new file mode 100644 index 00000000000..41832123051 --- /dev/null +++ b/keyboards/keychron/q6/ansi_encoder/keymaps/keychron/keymap.c @@ -0,0 +1,81 @@ +/* Copyright 2022 @ Keychron (https://www.keychron.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 . + */ + +#include QMK_KEYBOARD_H +#include "keychron_common.h" + +// clang-format off + +enum layers{ + MAC_BASE, + MAC_FN, + WIN_BASE, + WIN_FN +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [MAC_BASE] = LAYOUT_ansi_109( + KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_MUTE, KC_SNAP, KC_SIRI, RGB_MOD, KC_F13, KC_F14, KC_F15, KC_F16, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, + 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_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, + 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_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, + KC_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, KC_ROPTN, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT), + [MAC_FN] = LAYOUT_ansi_109( + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, RGB_TOG, _______, _______, RGB_TOG, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + [WIN_BASE] = LAYOUT_ansi_109( + 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_MUTE, KC_PSCR, KC_CRTA, RGB_MOD, _______, _______, _______, _______, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, + 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_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, + 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_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, + KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT), + [WIN_FN] = LAYOUT_ansi_109( + _______, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, RGB_TOG, _______, _______, RGB_TOG, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][1][2] = { + [MAC_BASE] = {ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [MAC_FN] = {ENCODER_CCW_CW(RGB_VAD, RGB_VAI) }, + [WIN_BASE] = {ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [WIN_FN] = {ENCODER_CCW_CW(RGB_VAD, RGB_VAI) } +}; +#endif + +// clang-format on + +void housekeeping_task_user(void) { + housekeeping_task_keychron(); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + if(!process_record_keychron(keycode, record)) { + return false; + } + + return true; +} diff --git a/keyboards/keychron/q6/ansi_encoder/keymaps/keychron/rules.mk b/keyboards/keychron/q6/ansi_encoder/keymaps/keychron/rules.mk new file mode 100644 index 00000000000..9cf1a9b56cb --- /dev/null +++ b/keyboards/keychron/q6/ansi_encoder/keymaps/keychron/rules.mk @@ -0,0 +1,5 @@ +VIA_ENABLE = yes +ENCODER_MAP_ENABLE = yes + +VPATH += keyboards/keychron/common +SRC += keychron_common.c diff --git a/keyboards/keychron/q6/ansi_encoder/keymaps/via/keymap.c b/keyboards/keychron/q6/ansi_encoder/keymaps/via/keymap.c new file mode 100644 index 00000000000..dfe2bd5e07c --- /dev/null +++ b/keyboards/keychron/q6/ansi_encoder/keymaps/via/keymap.c @@ -0,0 +1,66 @@ +/* Copyright 2022 @ Keychron (https://www.keychron.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 . + */ + +#include QMK_KEYBOARD_H + +// clang-format off + +enum layers{ + MAC_BASE, + MAC_FN, + WIN_BASE, + WIN_FN +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [MAC_BASE] = LAYOUT_ansi_109( + KC_ESC, KC_BRID, KC_BRIU, KC_NO, KC_NO, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_MUTE, KC_NO, KC_NO, RGB_MOD, KC_F13, KC_F14, KC_F15, KC_F16, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, + 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_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, + 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_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, + KC_LCTL, KC_LOPT, KC_LCMD, KC_SPC, KC_RCMD, KC_ROPT, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT), + [MAC_FN] = LAYOUT_ansi_109( + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, RGB_TOG, _______, _______, RGB_TOG, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + [WIN_BASE] = LAYOUT_ansi_109( + 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_MUTE, KC_PSCR, KC_NO, RGB_MOD, _______, _______, _______, _______, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, + 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_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, + 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_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, + KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT), + [WIN_FN] = LAYOUT_ansi_109( + _______, KC_BRID, KC_BRIU, _______, _______, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, RGB_TOG, _______, _______, RGB_TOG, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][1][2] = { + [MAC_BASE] = {ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [MAC_FN] = {ENCODER_CCW_CW(RGB_VAD, RGB_VAI) }, + [WIN_BASE] = {ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [WIN_FN] = {ENCODER_CCW_CW(RGB_VAD, RGB_VAI) } +}; +#endif diff --git a/keyboards/keychron/q6/ansi_encoder/keymaps/via/rules.mk b/keyboards/keychron/q6/ansi_encoder/keymaps/via/rules.mk new file mode 100644 index 00000000000..f1adcab005e --- /dev/null +++ b/keyboards/keychron/q6/ansi_encoder/keymaps/via/rules.mk @@ -0,0 +1,2 @@ +VIA_ENABLE = yes +ENCODER_MAP_ENABLE = yes diff --git a/keyboards/keychron/q6/ansi_encoder/readme.md b/keyboards/keychron/q6/ansi_encoder/readme.md new file mode 100644 index 00000000000..f63e1c1648e --- /dev/null +++ b/keyboards/keychron/q6/ansi_encoder/readme.md @@ -0,0 +1,5 @@ +# The ANSI variant of the Keychron Q6 + +- Enable rotary encoder support. +- Turn clockwise to increase volume and turn anti-clockwise to decrease volume. +- Press top right key pushbutton to mute. diff --git a/keyboards/keychron/q6/ansi_encoder/rules.mk b/keyboards/keychron/q6/ansi_encoder/rules.mk new file mode 100644 index 00000000000..4b277f6d9e7 --- /dev/null +++ b/keyboards/keychron/q6/ansi_encoder/rules.mk @@ -0,0 +1,33 @@ +# MCU name +MCU = STM32L432 + +# Bootloader selection +BOOTLOADER = stm32-dfu + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite +MOUSEKEY_ENABLE = yes # Mouse keys +EXTRAKEY_ENABLE = yes # Audio control and System control +CONSOLE_ENABLE = no # Console for debug +COMMAND_ENABLE = no # Commands for debug and configuration +NKRO_ENABLE = yes # Enable USB N-key Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +AUDIO_ENABLE = no # Audio output +ENCODER_ENABLE = yes # Enable Encoder +DIP_SWITCH_ENABLE = yes +RGB_MATRIX_ENABLE = yes +RGB_MATRIX_DRIVER = CKLED2001 +LTO_ENABLE = yes +EEPROM_DRIVER = wear_leveling +WEAR_LEVELING_DRIVER = embedded_flash + +# Enter lower-power sleep mode when on the ChibiOS idle thread +OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE + +# custom matrix setup +CUSTOM_MATRIX = lite + +SRC += matrix.c diff --git a/keyboards/keychron/q6/config.h b/keyboards/keychron/q6/config.h new file mode 100644 index 00000000000..5578aed0c51 --- /dev/null +++ b/keyboards/keychron/q6/config.h @@ -0,0 +1,100 @@ +/* Copyright 2022 @ Keychron(https://www.keychron.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 . + */ + +#pragma once + +/* Key matrix size */ +#define MATRIX_ROWS 6 +#define MATRIX_COLS 20 + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION ROW2COL + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCE 5 + +/* RGB Matrix Driver Configuration */ +#define DRIVER_COUNT 2 +#define DRIVER_ADDR_1 0b1110111 +#define DRIVER_ADDR_2 0b1110100 + +#define CKLED2001_CURRENT_TUNE \ + { 0xA4, 0xA4, 0x52, 0xA4, 0xA4, 0x52, 0xA4, 0xA4, 0x52, 0xA4, 0xA4, 0x52 } + +/* DIP switch */ +#define DIP_SWITCH_MATRIX_GRID { {5, 4} } + +/* Disable DIP switch in matrix data */ +#define MATRIX_MASKED + +/* turn off effects when suspended */ +#define RGB_DISABLE_WHEN_USB_SUSPENDED + +/* EEPROM Driver Configuration */ +#define WEAR_LEVELING_LOGICAL_SIZE 2048 +#define WEAR_LEVELING_BACKING_SIZE (WEAR_LEVELING_LOGICAL_SIZE * 2) + +// RGB Matrix Animation modes. Explicitly enabled +// For full list of effects, see: +// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects +// #define ENABLE_RGB_MATRIX_ALPHAS_MODS +// #define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN +// #define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT +#define ENABLE_RGB_MATRIX_BREATHING +// #define ENABLE_RGB_MATRIX_BAND_SAT +// #define ENABLE_RGB_MATRIX_BAND_VAL +// #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT +// #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL +// #define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT +#define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL +#define ENABLE_RGB_MATRIX_CYCLE_ALL +#define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT +#define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN +#define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON +#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN +#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL +#define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL +#define ENABLE_RGB_MATRIX_CYCLE_SPIRAL +#define ENABLE_RGB_MATRIX_DUAL_BEACON +#define ENABLE_RGB_MATRIX_RAINBOW_BEACON +// #define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS +// #define ENABLE_RGB_MATRIX_RAINDROPS +#define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS +// #define ENABLE_RGB_MATRIX_HUE_BREATHING +// #define ENABLE_RGB_MATRIX_HUE_PENDULUM +// #define ENABLE_RGB_MATRIX_HUE_WAVE +#define ENABLE_RGB_MATRIX_PIXEL_RAIN +// #define ENABLE_RGB_MATRIX_PIXEL_FLOW +// #define ENABLE_RGB_MATRIX_PIXEL_FRACTAL +// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined +#define ENABLE_RGB_MATRIX_TYPING_HEATMAP +#define ENABLE_RGB_MATRIX_DIGITAL_RAIN +// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE +// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE +// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE +// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS +// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS +// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS +#define ENABLE_RGB_MATRIX_SPLASH +// #define ENABLE_RGB_MATRIX_MULTISPLASH +#define ENABLE_RGB_MATRIX_SOLID_SPLASH +// #define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH + +#define RGB_MATRIX_FRAMEBUFFER_EFFECTS +#define RGB_MATRIX_KEYPRESSES diff --git a/keyboards/keychron/q6/halconf.h b/keyboards/keychron/q6/halconf.h new file mode 100644 index 00000000000..41bddcb2799 --- /dev/null +++ b/keyboards/keychron/q6/halconf.h @@ -0,0 +1,21 @@ +/* Copyright 2020 QMK + * + * 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 . + */ + +#pragma once + +#define HAL_USE_I2C TRUE + +#include_next diff --git a/keyboards/keychron/q6/iso/config.h b/keyboards/keychron/q6/iso/config.h new file mode 100644 index 00000000000..3c1164be6d1 --- /dev/null +++ b/keyboards/keychron/q6/iso/config.h @@ -0,0 +1,36 @@ +/* Copyright 2022 @ Keychron (https://www.keychron.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 . + */ + +#pragma once + +/* Key matrix pins */ +#define MATRIX_ROW_PINS \ + { B5, B4, B3, A15, A14, A13 } +#define MATRIX_COL_PINS \ + { A10, A9, A8, B1, B0, A7, A6, A5, A4, A3, A2, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, C14 } +#define NO_PIN_START 11 +#define NO_PIN_OFFSET 1 + +/* RGB Matrix Configuration */ +#define DRIVER_1_LED_TOTAL 60 +#define DRIVER_2_LED_TOTAL 49 +#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL) + +/* Enable caps-lock LED*/ +#define CAPS_LOCK_LED_INDEX 60 + +/* Enable NUM_LOCK_LED_INDEX */ +// #define NUM_LOCK_LED_INDEX 37 diff --git a/keyboards/keychron/q6/iso/info.json b/keyboards/keychron/q6/iso/info.json new file mode 100644 index 00000000000..fd83c3baf8e --- /dev/null +++ b/keyboards/keychron/q6/iso/info.json @@ -0,0 +1,131 @@ +{ + "keyboard_name": "Keychron Q6", + "manufacturer": "Keychron", + "url": "https://github.com/Keychron", + "maintainer": "lalalademaxiya1", + "usb": { + "vid": "0x3434", + "pid": "0x0162", + "device_version": "1.0.0" + }, + "layouts": { + "LAYOUT_iso_109": { + "layout": [ + {"matrix":[0, 0], "x":0, "y":0}, + {"matrix":[0, 1], "x":2, "y":0}, + {"matrix":[0, 2], "x":3, "y":0}, + {"matrix":[0, 3], "x":4, "y":0}, + {"matrix":[0, 4], "x":5, "y":0}, + {"matrix":[0, 5], "x":6.5, "y":0}, + {"matrix":[0, 6], "x":7.5, "y":0}, + {"matrix":[0, 7], "x":8.5, "y":0}, + {"matrix":[0, 8], "x":9.5, "y":0}, + {"matrix":[0, 9], "x":11, "y":0}, + {"matrix":[0,10], "x":12, "y":0}, + {"matrix":[0,11], "x":13, "y":0}, + {"matrix":[0,12], "x":14, "y":0}, + {"matrix":[0,14], "x":15.25, "y":0}, + {"matrix":[0,15], "x":16.25, "y":0}, + {"matrix":[0,16], "x":17.25, "y":0}, + {"matrix":[0,19], "x":18.5, "y":0}, + {"matrix":[1,19], "x":19.5, "y":0}, + {"matrix":[2,19], "x":20.5, "y":0}, + {"matrix":[3,19], "x":21.5, "y":0}, + + {"matrix":[1, 0], "x":0, "y":1.25}, + {"matrix":[1, 1], "x":1, "y":1.25}, + {"matrix":[1, 2], "x":2, "y":1.25}, + {"matrix":[1, 3], "x":3, "y":1.25}, + {"matrix":[1, 4], "x":4, "y":1.25}, + {"matrix":[1, 5], "x":5, "y":1.25}, + {"matrix":[1, 6], "x":6, "y":1.25}, + {"matrix":[1, 7], "x":7, "y":1.25}, + {"matrix":[1, 8], "x":8, "y":1.25}, + {"matrix":[1, 9], "x":9, "y":1.25}, + {"matrix":[1,10], "x":10, "y":1.25}, + {"matrix":[1,11], "x":11, "y":1.25}, + {"matrix":[1,12], "x":12, "y":1.25}, + {"matrix":[1,13], "x":13, "y":1.25, "w":2}, + {"matrix":[1,14], "x":15.25, "y":1.25}, + {"matrix":[1,15], "x":16.25, "y":1.25}, + {"matrix":[1,16], "x":17.25, "y":1.25}, + {"matrix":[1,17], "x":18.5, "y":1.25}, + {"matrix":[1,18], "x":19.5, "y":1.25}, + {"matrix":[0,17], "x":20.5, "y":1.25}, + {"matrix":[0,18], "x":21.5, "y":1.25}, + + {"matrix":[2, 0], "x":0, "y":2.25, "w":1.5}, + {"matrix":[2, 1], "x":1.5, "y":2.25}, + {"matrix":[2, 2], "x":2.5, "y":2.25}, + {"matrix":[2, 3], "x":3.5, "y":2.25}, + {"matrix":[2, 4], "x":4.5, "y":2.25}, + {"matrix":[2, 5], "x":5.5, "y":2.25}, + {"matrix":[2, 6], "x":6.5, "y":2.25}, + {"matrix":[2, 7], "x":7.5, "y":2.25}, + {"matrix":[2, 8], "x":8.5, "y":2.25}, + {"matrix":[2, 9], "x":9.5, "y":2.25}, + {"matrix":[2,10], "x":10.5, "y":2.25}, + {"matrix":[2,11], "x":11.5, "y":2.25}, + {"matrix":[2,12], "x":12.5, "y":2.25}, + {"matrix":[2,14], "x":15.25, "y":2.25}, + {"matrix":[2,15], "x":16.25, "y":2.25}, + {"matrix":[2,16], "x":17.25, "y":2.25}, + {"matrix":[2,17], "x":18.5, "y":2.25}, + {"matrix":[2,18], "x":19.5, "y":2.25}, + {"matrix":[3,14], "x":20.5, "y":2.25}, + + {"matrix":[3, 0], "x":0, "y":3.25, "w":1.75}, + {"matrix":[3, 1], "x":1.75, "y":3.25}, + {"matrix":[3, 2], "x":2.75, "y":3.25}, + {"matrix":[3, 3], "x":3.75, "y":3.25}, + {"matrix":[3, 4], "x":4.75, "y":3.25}, + {"matrix":[3, 5], "x":5.75, "y":3.25}, + {"matrix":[3, 6], "x":6.75, "y":3.25}, + {"matrix":[3, 7], "x":7.75, "y":3.25}, + {"matrix":[3, 8], "x":8.75, "y":3.25}, + {"matrix":[3, 9], "x":9.75, "y":3.25}, + {"matrix":[3,10], "x":10.75, "y":3.25}, + {"matrix":[3,11], "x":11.75, "y":3.25}, + {"matrix":[3,13], "x":12.75, "y":3.25}, + {"matrix":[2,13], "x":13.75, "y":2.25, "w":1.25, "h":2}, + {"matrix":[3,17], "x":18.5, "y":3.25}, + {"matrix":[3,18], "x":19.5, "y":3.25}, + {"matrix":[3,16], "x":20.5, "y":3.25}, + {"matrix":[3,15], "x":21.5, "y":2.25, "h":2}, + + {"matrix":[4, 0], "x":0, "y":4.25, "w":1.25}, + {"matrix":[4, 1], "x":1.25, "y":4.25}, + {"matrix":[4, 2], "x":2.25, "y":4.25}, + {"matrix":[4, 3], "x":3.25, "y":4.25}, + {"matrix":[4, 4], "x":4.25, "y":4.25}, + {"matrix":[4, 5], "x":5.25, "y":4.25}, + {"matrix":[4, 6], "x":6.25, "y":4.25}, + {"matrix":[4, 7], "x":7.25, "y":4.25}, + {"matrix":[4, 8], "x":8.25, "y":4.25}, + {"matrix":[4, 9], "x":9.25, "y":4.25}, + {"matrix":[4,10], "x":10.25, "y":4.25}, + {"matrix":[4,11], "x":11.25, "y":4.25}, + {"matrix":[4,13], "x":12.25, "y":4.25, "w":2.75}, + {"matrix":[4,15], "x":16.25, "y":4.25}, + {"matrix":[4,17], "x":18.5, "y":4.25}, + {"matrix":[4,18], "x":19.5, "y":4.25}, + {"matrix":[4,14], "x":20.5, "y":4.25}, + + {"matrix":[5, 0], "x":0, "y":5.25, "w":1.25}, + {"matrix":[5, 1], "x":1.25, "y":5.25, "w":1.25}, + {"matrix":[5, 2], "x":2.5, "y":5.25, "w":1.25}, + {"matrix":[5, 6], "x":3.75, "y":5.25, "w":6.25}, + {"matrix":[5,10], "x":10, "y":5.25, "w":1.25}, + {"matrix":[5,11], "x":11.25, "y":5.25, "w":1.25}, + {"matrix":[5,12], "x":12.5, "y":5.25, "w":1.25}, + {"matrix":[5,13], "x":13.75, "y":5.25, "w":1.25}, + {"matrix":[5,14], "x":15.25, "y":5.25}, + {"matrix":[5,15], "x":16.25, "y":5.25}, + {"matrix":[5,16], "x":17.25, "y":5.25}, + {"matrix":[5,17], "x":18.5, "y":5.25, "w":2}, + {"matrix":[5,18], "x":20.5, "y":5.25}, + {"matrix":[4,16], "x":21.5, "y":4.25, "h":2} + ] + } + } +} diff --git a/keyboards/keychron/q6/iso/iso.c b/keyboards/keychron/q6/iso/iso.c new file mode 100644 index 00000000000..497efc2d11a --- /dev/null +++ b/keyboards/keychron/q6/iso/iso.c @@ -0,0 +1,178 @@ +/* Copyright 2022 @ Keychron (https://www.keychron.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 . + */ + +#include "iso.h" + +#ifdef RGB_MATRIX_ENABLE + +// clang-format off + +const ckled2001_led PROGMEM g_ckled2001_leds[DRIVER_LED_TOTAL] = { +/* Refer to IS31 manual for these locations + * driver + * | R location + * | | G location + * | | | B location + * | | | | */ + {0, I_1, G_1, H_1}, + {0, I_2, G_2, H_2}, + {0, I_3, G_3, H_3}, + {0, I_4, G_4, H_4}, + {0, I_5, G_5, H_5}, + {0, I_6, G_6, H_6}, + {0, I_7, G_7, H_7}, + {0, I_8, G_8, H_8}, + {0, I_9, G_9, H_9}, + {0, I_10, G_10, H_10}, + {0, I_11, G_11, H_11}, + {0, I_12, G_12, H_12}, + {0, I_13, G_13, H_13}, + {0, I_15, G_15, H_15}, + {0, I_16, G_16, H_16}, + {0, L_5, J_5, K_5}, + {0, L_6, J_6, K_6}, + {0, L_7, J_7, K_7}, + {0, L_8, J_8, K_8}, + {0, L_4, J_4, K_4}, + + {0, C_1, A_1, B_1}, + {0, C_2, A_2, B_2}, + {0, C_3, A_3, B_3}, + {0, C_4, A_4, B_4}, + {0, C_5, A_5, B_5}, + {0, C_6, A_6, B_6}, + {0, C_7, A_7, B_7}, + {0, C_8, A_8, B_8}, + {0, C_9, A_9, B_9}, + {0, C_10, A_10, B_10}, + {0, C_11, A_11, B_11}, + {0, C_12, A_12, B_12}, + {0, C_13, A_13, B_13}, + {0, C_14, A_14, B_14}, + {0, C_15, A_15, B_15}, + {0, C_16, A_16, B_16}, + {0, L_9, J_9, K_9}, + {0, L_10, J_10, K_10}, + {0, L_11, J_11, K_11}, + {0, L_12, J_12, K_12}, + {0, L_13, J_13, K_13}, + + {0, F_1, D_1, E_1}, + {0, F_2, D_2, E_2}, + {0, F_3, D_3, E_3}, + {0, F_4, D_4, E_4}, + {0, F_5, D_5, E_5}, + {0, F_6, D_6, E_6}, + {0, F_7, D_7, E_7}, + {0, F_8, D_8, E_8}, + {0, F_9, D_9, E_9}, + {0, F_10, D_10, E_10}, + {0, F_11, D_11, E_11}, + {0, F_12, D_12, E_12}, + {0, F_13, D_13, E_13}, + {0, F_15, D_15, E_15}, + {0, F_16, D_16, E_16}, + {0, L_14, J_14, K_14}, + {0, L_15, J_15, K_15}, + {0, L_16, J_16, K_16}, + {1, L_1, J_1, K_1}, + + {1, C_16, A_16, B_16}, + {1, C_15, A_15, B_15}, + {1, C_14, A_14, B_14}, + {1, C_13, A_13, B_13}, + {1, C_12, A_12, B_12}, + {1, C_11, A_11, B_11}, + {1, C_10, A_10, B_10}, + {1, C_9, A_9, B_9}, + {1, C_8, A_8, B_8}, + {1, C_7, A_7, B_7}, + {1, C_6, A_6, B_6}, + {1, C_5, A_5, B_5}, + {1, C_3, A_3, B_3}, + {0, F_14, D_14, E_14}, + {1, L_3, J_3, K_3}, + {1, L_4, J_4, K_4}, + {1, L_5, J_5, K_5}, + {1, L_2, J_2, K_2}, + + {1, I_16, G_16, H_16}, + {1, I_15, G_15, H_15}, + {1, I_14, G_14, H_14}, + {1, I_13, G_13, H_13}, + {1, I_12, G_12, H_12}, + {1, I_11, G_11, H_11}, + {1, I_10, G_10, H_10}, + {1, I_9, G_9, H_9}, + {1, I_8, G_8, H_8}, + {1, I_7, G_7, H_7}, + {1, I_6, G_6, H_6}, + {1, I_5, G_5, H_5}, + {1, I_3, G_3, H_3}, + {1, I_1, G_1, H_1}, + {1, L_6, J_6, K_6}, + {1, L_7, J_7, K_7}, + {1, L_8, J_8, K_8}, + + {1, F_16, D_16, E_16}, + {1, F_15, D_15, E_15}, + {1, F_14, D_14, E_14}, + {1, F_10, D_10, E_10}, + {1, F_6, D_6, E_6}, + {1, F_5, D_5, E_5}, + {1, F_4, D_4, E_4}, + {1, F_3, D_3, E_3}, + {1, F_2, D_2, E_2}, + {1, F_1, D_1, E_1}, + {1, L_10, J_10, K_10}, + {1, L_11, J_11, K_11}, + {1, L_12, J_12, K_12}, + {1, L_9, J_9, K_9}, +}; + +#define __ NO_LED + +led_config_t g_led_config = { + { + // Key Matrix to LED Index + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, __, 13, 14, 15, 39, 40, 16 }, + { 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 17 }, + { 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 73, 54, 55, 56, 57, 58, 18 }, + { 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, __, 72, 59, 77, 76, 74, 75, 19 }, + { 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, __, 90, 94, 91, 108, 92, 93, __ }, + { 95, 96, 97, __, __, __, 98, __, __, __, 99, 100, 101, 102, 103, 104, 105, 106, 107, __ }, + }, + { + // LED Index to Physical Position + {0,0}, {21,0}, {31,0}, {42,0}, {52,0}, {68,0}, {78,0}, {89,0}, {99,0}, {115,0}, {125,0}, {136,0}, {146,0}, {159,0}, {169,0}, {180,0}, {193,0}, {203,0}, {214,0}, {224,0}, + {0,15}, {10,15}, {21,15}, {31,15}, {42,15}, {52,15}, {63,15}, {73,15}, {83,15}, {94,15}, {104,15}, {115,15}, {125,15}, {141,15}, {159,15}, {169,15}, {180,15}, {193,15}, {203,15}, {214,15}, {224,15}, + {3,27}, {16,27}, {26,27}, {36,27}, {47,27}, {57,27}, {68,27}, {78,27}, {89,27}, {99,27}, {109,27}, {120,27}, {130,27}, {159,27}, {169,27}, {180,27}, {193,27}, {203,27}, {214,27}, + {4,40}, {18,40}, {29,40}, {39,40}, {50,40}, {60,40}, {70,40}, {81,40}, {91,40}, {102,40}, {112,40}, {123,40}, {133,40}, {147,36}, {193,40}, {203,40}, {214,40}, {224,34}, + {1,52}, {13,52}, {23,52}, {34,52}, {44,52}, {55,52}, {65,52}, {76,52}, {86,52}, {96,52}, {107,52}, {117,52}, {137,52}, {169,52}, {193,52}, {203,52}, {214,52}, + {1,64}, {14,64}, {27,64}, {66,64}, {105,64}, {118,64}, {131,64}, {145,64}, {159,64}, {169,64}, {180,64}, {198,64}, {214,64}, {224,58}, + }, + { + // RGB LED Index to Flag + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 8, 4, 4, 4, + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 4, 4, 4, + 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 4, 4, 4, + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 4, 4, 4, + 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, + } +}; + +#endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/q6/iso/iso.h b/keyboards/keychron/q6/iso/iso.h new file mode 100644 index 00000000000..de5b0aedb14 --- /dev/null +++ b/keyboards/keychron/q6/iso/iso.h @@ -0,0 +1,19 @@ +/* Copyright 2022 @ Keychron (https://www.keychron.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 . + */ + +#pragma once + +#include "quantum.h" diff --git a/keyboards/keychron/q6/iso/keymaps/default/keymap.c b/keyboards/keychron/q6/iso/keymaps/default/keymap.c new file mode 100644 index 00000000000..cf376b89048 --- /dev/null +++ b/keyboards/keychron/q6/iso/keymaps/default/keymap.c @@ -0,0 +1,57 @@ +/* Copyright 2022 @ Keychron (https://www.keychron.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 . + */ + +#include QMK_KEYBOARD_H + +// clang-format off + +enum layers{ + MAC_BASE, + MAC_FN, + WIN_BASE, + WIN_FN +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [MAC_BASE] = LAYOUT_iso_109( + KC_ESC, KC_BRID, KC_BRIU, KC_NO, KC_NO, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO, RGB_MOD, KC_F13, KC_F14, KC_F15, KC_F16, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, + 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_RBRC, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, + 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_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, + KC_LCTL, KC_LOPT, KC_LCMD, KC_SPC, KC_RCMD, KC_ROPT, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT), + [MAC_FN] = LAYOUT_iso_109( + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, RGB_TOG, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + [WIN_BASE] = LAYOUT_iso_109( + 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_PSCR, KC_NO, RGB_MOD, _______, _______, _______, _______, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, + 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_RBRC, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, + 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_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, + KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT), + [WIN_FN] = LAYOUT_iso_109( + _______, KC_BRID, KC_BRIU, _______, _______, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_TOG, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), +}; diff --git a/keyboards/keychron/q6/iso/keymaps/keychron/keymap.c b/keyboards/keychron/q6/iso/keymaps/keychron/keymap.c new file mode 100644 index 00000000000..363b10e92e3 --- /dev/null +++ b/keyboards/keychron/q6/iso/keymaps/keychron/keymap.c @@ -0,0 +1,72 @@ +/* Copyright 2022 @ Keychron (https://www.keychron.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 . + */ + +#include QMK_KEYBOARD_H +#include "keychron_common.h" + +// clang-format off + +enum layers{ + MAC_BASE, + MAC_FN, + WIN_BASE, + WIN_FN +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [MAC_BASE] = LAYOUT_iso_109( + KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_SNAP, KC_SIRI, RGB_MOD, KC_F13, KC_F14, KC_F15, KC_F16, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, + 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_RBRC, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, + 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_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, + KC_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, KC_ROPTN, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT), + [MAC_FN] = LAYOUT_iso_109( + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, RGB_TOG, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + [WIN_BASE] = LAYOUT_iso_109( + 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_PSCR, KC_CRTA, RGB_MOD, _______, _______, _______, _______, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, + 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_RBRC, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, + 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_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, + KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT), + [WIN_FN] = LAYOUT_iso_109( + _______, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_TOG, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), +}; + +// clang-format on + +void housekeeping_task_user(void) { + housekeeping_task_keychron(); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + if(!process_record_keychron(keycode, record)) { + return false; + } + + return true; +} diff --git a/keyboards/keychron/q6/iso/keymaps/keychron/rules.mk b/keyboards/keychron/q6/iso/keymaps/keychron/rules.mk new file mode 100644 index 00000000000..495e8907b48 --- /dev/null +++ b/keyboards/keychron/q6/iso/keymaps/keychron/rules.mk @@ -0,0 +1,4 @@ +VIA_ENABLE = yes + +VPATH += keyboards/keychron/common +SRC += keychron_common.c diff --git a/keyboards/keychron/q6/iso/keymaps/via/keymap.c b/keyboards/keychron/q6/iso/keymaps/via/keymap.c new file mode 100644 index 00000000000..cf376b89048 --- /dev/null +++ b/keyboards/keychron/q6/iso/keymaps/via/keymap.c @@ -0,0 +1,57 @@ +/* Copyright 2022 @ Keychron (https://www.keychron.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 . + */ + +#include QMK_KEYBOARD_H + +// clang-format off + +enum layers{ + MAC_BASE, + MAC_FN, + WIN_BASE, + WIN_FN +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [MAC_BASE] = LAYOUT_iso_109( + KC_ESC, KC_BRID, KC_BRIU, KC_NO, KC_NO, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO, RGB_MOD, KC_F13, KC_F14, KC_F15, KC_F16, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, + 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_RBRC, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, + 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_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, + KC_LCTL, KC_LOPT, KC_LCMD, KC_SPC, KC_RCMD, KC_ROPT, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT), + [MAC_FN] = LAYOUT_iso_109( + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, RGB_TOG, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + [WIN_BASE] = LAYOUT_iso_109( + 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_PSCR, KC_NO, RGB_MOD, _______, _______, _______, _______, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, + 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_RBRC, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, + 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_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, + KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT), + [WIN_FN] = LAYOUT_iso_109( + _______, KC_BRID, KC_BRIU, _______, _______, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_TOG, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), +}; diff --git a/keyboards/keychron/q6/iso/keymaps/via/rules.mk b/keyboards/keychron/q6/iso/keymaps/via/rules.mk new file mode 100644 index 00000000000..1e5b99807cb --- /dev/null +++ b/keyboards/keychron/q6/iso/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes diff --git a/keyboards/keychron/q6/iso/readme.md b/keyboards/keychron/q6/iso/readme.md new file mode 100644 index 00000000000..05fced2017d --- /dev/null +++ b/keyboards/keychron/q6/iso/readme.md @@ -0,0 +1 @@ +# The ISO variant of the Keychron Q6 diff --git a/keyboards/keychron/q6/iso/rules.mk b/keyboards/keychron/q6/iso/rules.mk new file mode 100644 index 00000000000..878a067c9f8 --- /dev/null +++ b/keyboards/keychron/q6/iso/rules.mk @@ -0,0 +1,33 @@ +# MCU name +MCU = STM32L432 + +# Bootloader selection +BOOTLOADER = stm32-dfu + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite +MOUSEKEY_ENABLE = yes # Mouse keys +EXTRAKEY_ENABLE = yes # Audio control and System control +CONSOLE_ENABLE = no # Console for debug +COMMAND_ENABLE = no # Commands for debug and configuration +NKRO_ENABLE = yes # Enable USB N-key Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +AUDIO_ENABLE = no # Audio output +DIP_SWITCH_ENABLE = yes +RGB_MATRIX_ENABLE = yes +RGB_MATRIX_DRIVER = CKLED2001 +RAW_ENABLE = yes +LTO_ENABLE = yes +EEPROM_DRIVER = wear_leveling +WEAR_LEVELING_DRIVER = embedded_flash + +# Enter lower-power sleep mode when on the ChibiOS idle thread +OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE + +# custom matrix setup +CUSTOM_MATRIX = lite + +SRC += matrix.c diff --git a/keyboards/keychron/q6/iso_encoder/config.h b/keyboards/keychron/q6/iso_encoder/config.h new file mode 100644 index 00000000000..442fd35efd0 --- /dev/null +++ b/keyboards/keychron/q6/iso_encoder/config.h @@ -0,0 +1,43 @@ +/* Copyright 2022 @ Keychron (https://www.keychron.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 . + */ + +#pragma once + +/* Key matrix pins */ +#define MATRIX_ROW_PINS \ + { B5, B4, B3, A15, A14, A13 } +#define MATRIX_COL_PINS \ + { A10, A9, A8, B1, B0, A7, A6, A5, A4, A3, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN } +#define NO_PIN_START 10 +#define NO_PIN_NUM 10 +#define CLR_REG_VAL 0x3FF + +/* RGB Matrix Configuration */ +#define DRIVER_1_LED_TOTAL 60 +#define DRIVER_2_LED_TOTAL 49 +#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL) + +/* Encoder Configuration */ +#define ENCODERS_PAD_A { C14 } +#define ENCODERS_PAD_B { A2 } +#define ENCODER_RESOLUTION 4 +#define ENCODER_DEFAULT_POS 0x3 + +/* Enable caps-lock LED*/ +#define CAPS_LOCK_LED_INDEX 60 + +/* Enable NUM_LOCK_LED_INDEX */ +// #define NUM_LOCK_LED_INDEX 37 diff --git a/keyboards/keychron/q6/iso_encoder/info.json b/keyboards/keychron/q6/iso_encoder/info.json new file mode 100644 index 00000000000..d368ffee285 --- /dev/null +++ b/keyboards/keychron/q6/iso_encoder/info.json @@ -0,0 +1,132 @@ +{ + "keyboard_name": "Keychron Q6", + "manufacturer": "Keychron", + "url": "https://github.com/Keychron", + "maintainer": "lalalademaxiya1", + "usb": { + "vid": "0x3434", + "pid": "0x0163", + "device_version": "1.0.0" + }, + "layouts": { + "LAYOUT_iso_110": { + "layout": [ + {"matrix":[0, 0], "x":0, "y":0}, + {"matrix":[0, 1], "x":1.25, "y":0}, + {"matrix":[0, 2], "x":2.25, "y":0}, + {"matrix":[0, 3], "x":3.25, "y":0}, + {"matrix":[0, 4], "x":4.25, "y":0}, + {"matrix":[0, 5], "x":5.5, "y":0}, + {"matrix":[0, 6], "x":6.5, "y":0}, + {"matrix":[0, 7], "x":7.5, "y":0}, + {"matrix":[0, 8], "x":8.5, "y":0}, + {"matrix":[0, 9], "x":9.75, "y":0}, + {"matrix":[0,10], "x":10.75, "y":0}, + {"matrix":[0,11], "x":11.75, "y":0}, + {"matrix":[0,12], "x":12.75, "y":0}, + {"matrix":[4,19], "x":14, "y":0}, + {"matrix":[0,14], "x":15.25, "y":0}, + {"matrix":[0,15], "x":16.25, "y":0}, + {"matrix":[0,16], "x":17.25, "y":0}, + {"matrix":[0,19], "x":18.5, "y":0}, + {"matrix":[1,19], "x":19.5, "y":0}, + {"matrix":[2,19], "x":20.5, "y":0}, + {"matrix":[3,19], "x":21.5, "y":0}, + + {"matrix":[1, 0], "x":0, "y":1.25}, + {"matrix":[1, 1], "x":1, "y":1.25}, + {"matrix":[1, 2], "x":2, "y":1.25}, + {"matrix":[1, 3], "x":3, "y":1.25}, + {"matrix":[1, 4], "x":4, "y":1.25}, + {"matrix":[1, 5], "x":5, "y":1.25}, + {"matrix":[1, 6], "x":6, "y":1.25}, + {"matrix":[1, 7], "x":7, "y":1.25}, + {"matrix":[1, 8], "x":8, "y":1.25}, + {"matrix":[1, 9], "x":9, "y":1.25}, + {"matrix":[1,10], "x":10, "y":1.25}, + {"matrix":[1,11], "x":11, "y":1.25}, + {"matrix":[1,12], "x":12, "y":1.25}, + {"matrix":[1,13], "x":13, "y":1.25, "w":2}, + {"matrix":[1,14], "x":15.25, "y":1.25}, + {"matrix":[1,15], "x":16.25, "y":1.25}, + {"matrix":[1,16], "x":17.25, "y":1.25}, + {"matrix":[1,17], "x":18.5, "y":1.25}, + {"matrix":[1,18], "x":19.5, "y":1.25}, + {"matrix":[0,17], "x":20.5, "y":1.25}, + {"matrix":[0,18], "x":21.5, "y":1.25}, + + {"matrix":[2, 0], "x":0, "y":2.25, "w":1.5}, + {"matrix":[2, 1], "x":1.5, "y":2.25}, + {"matrix":[2, 2], "x":2.5, "y":2.25}, + {"matrix":[2, 3], "x":3.5, "y":2.25}, + {"matrix":[2, 4], "x":4.5, "y":2.25}, + {"matrix":[2, 5], "x":5.5, "y":2.25}, + {"matrix":[2, 6], "x":6.5, "y":2.25}, + {"matrix":[2, 7], "x":7.5, "y":2.25}, + {"matrix":[2, 8], "x":8.5, "y":2.25}, + {"matrix":[2, 9], "x":9.5, "y":2.25}, + {"matrix":[2,10], "x":10.5, "y":2.25}, + {"matrix":[2,11], "x":11.5, "y":2.25}, + {"matrix":[2,12], "x":12.5, "y":2.25}, + {"matrix":[2,14], "x":15.25, "y":2.25}, + {"matrix":[2,15], "x":16.25, "y":2.25}, + {"matrix":[2,16], "x":17.25, "y":2.25}, + {"matrix":[2,17], "x":18.5, "y":2.25}, + {"matrix":[2,18], "x":19.5, "y":2.25}, + {"matrix":[3,14], "x":20.5, "y":2.25}, + + {"matrix":[3, 0], "x":0, "y":3.25, "w":1.75}, + {"matrix":[3, 1], "x":1.75, "y":3.25}, + {"matrix":[3, 2], "x":2.75, "y":3.25}, + {"matrix":[3, 3], "x":3.75, "y":3.25}, + {"matrix":[3, 4], "x":4.75, "y":3.25}, + {"matrix":[3, 5], "x":5.75, "y":3.25}, + {"matrix":[3, 6], "x":6.75, "y":3.25}, + {"matrix":[3, 7], "x":7.75, "y":3.25}, + {"matrix":[3, 8], "x":8.75, "y":3.25}, + {"matrix":[3, 9], "x":9.75, "y":3.25}, + {"matrix":[3,10], "x":10.75, "y":3.25}, + {"matrix":[3,11], "x":11.75, "y":3.25}, + {"matrix":[3,13], "x":12.75, "y":3.25}, + {"matrix":[2,13], "x":13.75, "y":2.25, "w":1.25, "h":2}, + {"matrix":[3,17], "x":18.5, "y":3.25}, + {"matrix":[3,18], "x":19.5, "y":3.25}, + {"matrix":[3,16], "x":20.5, "y":3.25}, + {"matrix":[3,15], "x":21.5, "y":2.25, "h":2}, + + {"matrix":[4, 0], "x":0, "y":4.25, "w":1.25}, + {"matrix":[4, 1], "x":2.25, "y":4.25}, + {"matrix":[4, 2], "x":2.25, "y":4.25}, + {"matrix":[4, 3], "x":3.25, "y":4.25}, + {"matrix":[4, 4], "x":4.25, "y":4.25}, + {"matrix":[4, 5], "x":5.25, "y":4.25}, + {"matrix":[4, 6], "x":6.25, "y":4.25}, + {"matrix":[4, 7], "x":7.25, "y":4.25}, + {"matrix":[4, 8], "x":8.25, "y":4.25}, + {"matrix":[4, 9], "x":9.25, "y":4.25}, + {"matrix":[4,10], "x":10.25, "y":4.25}, + {"matrix":[4,11], "x":11.25, "y":4.25}, + {"matrix":[4,13], "x":12.25, "y":4.25, "w":2.75}, + {"matrix":[4,15], "x":16.25, "y":4.25}, + {"matrix":[4,17], "x":18.5, "y":4.25}, + {"matrix":[4,18], "x":19.5, "y":4.25}, + {"matrix":[4,14], "x":20.5, "y":4.25}, + + {"matrix":[5, 0], "x":0, "y":5.25, "w":1.25}, + {"matrix":[5, 1], "x":1.25, "y":5.25, "w":1.25}, + {"matrix":[5, 2], "x":2.5, "y":5.25, "w":1.25}, + {"matrix":[5, 6], "x":3.75, "y":5.25, "w":6.25}, + {"matrix":[5,10], "x":10, "y":5.25, "w":1.25}, + {"matrix":[5,11], "x":11.25, "y":5.25, "w":1.25}, + {"matrix":[5,12], "x":12.5, "y":5.25, "w":1.25}, + {"matrix":[5,13], "x":13.75, "y":5.25, "w":1.25}, + {"matrix":[5,14], "x":15.25, "y":5.25}, + {"matrix":[5,15], "x":16.25, "y":5.25}, + {"matrix":[5,16], "x":17.25, "y":5.25}, + {"matrix":[5,17], "x":18.5, "y":5.25, "w":2}, + {"matrix":[5,18], "x":20.5, "y":5.25}, + {"matrix":[4,16], "x":21.5, "y":4.25, "h":2} + ] + } + } +} diff --git a/keyboards/keychron/q6/iso_encoder/iso_encoder.c b/keyboards/keychron/q6/iso_encoder/iso_encoder.c new file mode 100644 index 00000000000..3ad47b7b0f5 --- /dev/null +++ b/keyboards/keychron/q6/iso_encoder/iso_encoder.c @@ -0,0 +1,178 @@ +/* Copyright 2022 @ Keychron (https://www.keychron.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 . + */ + +#include "iso_encoder.h" + +#ifdef RGB_MATRIX_ENABLE + +// clang-format off + +const ckled2001_led PROGMEM g_ckled2001_leds[DRIVER_LED_TOTAL] = { +/* Refer to IS31 manual for these locations + * driver + * | R location + * | | G location + * | | | B location + * | | | | */ + {0, I_1, G_1, H_1}, + {0, I_2, G_2, H_2}, + {0, I_3, G_3, H_3}, + {0, I_4, G_4, H_4}, + {0, I_5, G_5, H_5}, + {0, I_6, G_6, H_6}, + {0, I_7, G_7, H_7}, + {0, I_8, G_8, H_8}, + {0, I_9, G_9, H_9}, + {0, I_10, G_10, H_10}, + {0, I_11, G_11, H_11}, + {0, I_12, G_12, H_12}, + {0, I_13, G_13, H_13}, + {0, I_15, G_15, H_15}, + {0, I_16, G_16, H_16}, + {0, L_5, J_5, K_5}, + {0, L_6, J_6, K_6}, + {0, L_7, J_7, K_7}, + {0, L_8, J_8, K_8}, + {0, L_4, J_4, K_4}, + + {0, C_1, A_1, B_1}, + {0, C_2, A_2, B_2}, + {0, C_3, A_3, B_3}, + {0, C_4, A_4, B_4}, + {0, C_5, A_5, B_5}, + {0, C_6, A_6, B_6}, + {0, C_7, A_7, B_7}, + {0, C_8, A_8, B_8}, + {0, C_9, A_9, B_9}, + {0, C_10, A_10, B_10}, + {0, C_11, A_11, B_11}, + {0, C_12, A_12, B_12}, + {0, C_13, A_13, B_13}, + {0, C_14, A_14, B_14}, + {0, C_15, A_15, B_15}, + {0, C_16, A_16, B_16}, + {0, L_9, J_9, K_9}, + {0, L_10, J_10, K_10}, + {0, L_11, J_11, K_11}, + {0, L_12, J_12, K_12}, + {0, L_13, J_13, K_13}, + + {0, F_1, D_1, E_1}, + {0, F_2, D_2, E_2}, + {0, F_3, D_3, E_3}, + {0, F_4, D_4, E_4}, + {0, F_5, D_5, E_5}, + {0, F_6, D_6, E_6}, + {0, F_7, D_7, E_7}, + {0, F_8, D_8, E_8}, + {0, F_9, D_9, E_9}, + {0, F_10, D_10, E_10}, + {0, F_11, D_11, E_11}, + {0, F_12, D_12, E_12}, + {0, F_13, D_13, E_13}, + {0, F_15, D_15, E_15}, + {0, F_16, D_16, E_16}, + {0, L_14, J_14, K_14}, + {0, L_15, J_15, K_15}, + {0, L_16, J_16, K_16}, + {1, L_1, J_1, K_1}, + + {1, C_16, A_16, B_16}, + {1, C_15, A_15, B_15}, + {1, C_14, A_14, B_14}, + {1, C_13, A_13, B_13}, + {1, C_12, A_12, B_12}, + {1, C_11, A_11, B_11}, + {1, C_10, A_10, B_10}, + {1, C_9, A_9, B_9}, + {1, C_8, A_8, B_8}, + {1, C_7, A_7, B_7}, + {1, C_6, A_6, B_6}, + {1, C_5, A_5, B_5}, + {1, C_3, A_3, B_3}, + {0, F_14, D_14, E_14}, + {1, L_3, J_3, K_3}, + {1, L_4, J_4, K_4}, + {1, L_5, J_5, K_5}, + {1, L_2, J_2, K_2}, + + {1, I_16, G_16, H_16}, + {1, I_15, G_15, H_15}, + {1, I_14, G_14, H_14}, + {1, I_13, G_13, H_13}, + {1, I_12, G_12, H_12}, + {1, I_11, G_11, H_11}, + {1, I_10, G_10, H_10}, + {1, I_9, G_9, H_9}, + {1, I_8, G_8, H_8}, + {1, I_7, G_7, H_7}, + {1, I_6, G_6, H_6}, + {1, I_5, G_5, H_5}, + {1, I_3, G_3, H_3}, + {1, I_1, G_1, H_1}, + {1, L_6, J_6, K_6}, + {1, L_7, J_7, K_7}, + {1, L_8, J_8, K_8}, + + {1, F_16, D_16, E_16}, + {1, F_15, D_15, E_15}, + {1, F_14, D_14, E_14}, + {1, F_10, D_10, E_10}, + {1, F_6, D_6, E_6}, + {1, F_5, D_5, E_5}, + {1, F_4, D_4, E_4}, + {1, F_3, D_3, E_3}, + {1, F_2, D_2, E_2}, + {1, F_1, D_1, E_1}, + {1, L_10, J_10, K_10}, + {1, L_11, J_11, K_11}, + {1, L_12, J_12, K_12}, + {1, L_9, J_9, K_9}, +}; + +#define __ NO_LED + +led_config_t g_led_config = { + { + // Key Matrix to LED Index + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, __, 13, 14, 15, 39, 40, 16 }, + { 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 17 }, + { 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 73, 54, 55, 56, 57, 58, 18 }, + { 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, __, 72, 59, 77, 76, 74, 75, 19 }, + { 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, __, 90, 94, 91, 108, 92, 93, __ }, + { 95, 96, 97, __, __, __, 98, __, __, __, 99, 100, 101, 102, 103, 104, 105, 106, 107, __ }, + }, + { + // LED Index to Physical Position + {0,0}, {13,0}, {24,0}, {34,0}, {45,0}, {57,0}, {68,0}, {78,0}, {89,0}, {102,0}, {112,0}, {123,0}, {133,0}, {159,0}, {169,0}, {180,0}, {193,0}, {203,0}, {214,0}, {224,0}, + {0,15}, {10,15}, {21,15}, {31,15}, {42,15}, {52,15}, {63,15}, {73,15}, {83,15}, {94,15}, {104,15}, {115,15}, {125,15}, {141,15}, {159,15}, {169,15}, {180,15}, {193,15}, {203,15}, {214,15}, {224,15}, + {3,27}, {16,27}, {26,27}, {36,27}, {47,27}, {57,27}, {68,27}, {78,27}, {89,27}, {99,27}, {109,27}, {120,27}, {130,27}, {159,27}, {169,27}, {180,27}, {193,27}, {203,27}, {214,27}, + {4,40}, {18,40}, {29,40}, {39,40}, {50,40}, {60,40}, {70,40}, {81,40}, {91,40}, {102,40}, {112,40}, {123,40}, {133,40}, {147,36}, {193,40}, {203,40}, {214,40}, {224,34}, + {1,52}, {13,52}, {23,52}, {34,52}, {44,52}, {55,52}, {65,52}, {76,52}, {86,52}, {96,52}, {107,52}, {117,52}, {137,52}, {169,52}, {193,52}, {203,52}, {214,52}, + {1,64}, {14,64}, {27,64}, {66,64}, {105,64}, {118,64}, {131,64}, {145,64}, {159,64}, {169,64}, {180,64}, {198,64}, {214,64}, {224,58}, + }, + { + // RGB LED Index to Flag + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 8, 4, 4, 4, + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 4, 4, 4, + 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 4, 4, 4, + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 4, 4, 4, + 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, + } +}; + +#endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/q6/iso_encoder/iso_encoder.h b/keyboards/keychron/q6/iso_encoder/iso_encoder.h new file mode 100644 index 00000000000..de5b0aedb14 --- /dev/null +++ b/keyboards/keychron/q6/iso_encoder/iso_encoder.h @@ -0,0 +1,19 @@ +/* Copyright 2022 @ Keychron (https://www.keychron.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 . + */ + +#pragma once + +#include "quantum.h" diff --git a/keyboards/keychron/q6/iso_encoder/keymaps/default/keymap.c b/keyboards/keychron/q6/iso_encoder/keymaps/default/keymap.c new file mode 100644 index 00000000000..69f8c96a0dc --- /dev/null +++ b/keyboards/keychron/q6/iso_encoder/keymaps/default/keymap.c @@ -0,0 +1,66 @@ +/* Copyright 2022 @ Keychron (https://www.keychron.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 . + */ + +#include QMK_KEYBOARD_H + +// clang-format off + +enum layers{ + MAC_BASE, + MAC_FN, + WIN_BASE, + WIN_FN +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [MAC_BASE] = LAYOUT_iso_110( + KC_ESC, KC_BRID, KC_BRIU, KC_NO, KC_NO, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_MUTE, KC_NO, KC_NO, RGB_MOD, KC_F13, KC_F14, KC_F15, KC_F16, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, + 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_RBRC, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, + 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_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, + KC_LCTL, KC_LOPT, KC_LCMD , KC_SPC, KC_RCMD, KC_ROPT, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT), + [MAC_FN] = LAYOUT_iso_110( + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, RGB_TOG, _______, _______, RGB_TOG, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + [WIN_BASE] = LAYOUT_iso_110( + 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_MUTE, KC_PSCR, KC_NO, RGB_MOD, _______, _______, _______, _______, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, + 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_RBRC, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, + 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_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, + KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT), + [WIN_FN] = LAYOUT_iso_110( + _______, KC_BRID, KC_BRIU, _______, _______, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, RGB_TOG, _______, _______, RGB_TOG, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][1][2] = { + [MAC_BASE] = {ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [MAC_FN] = {ENCODER_CCW_CW(RGB_VAD, RGB_VAI) }, + [WIN_BASE] = {ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [WIN_FN] = {ENCODER_CCW_CW(RGB_VAD, RGB_VAI) } +}; +#endif diff --git a/keyboards/keychron/q6/iso_encoder/keymaps/default/rules.mk b/keyboards/keychron/q6/iso_encoder/keymaps/default/rules.mk new file mode 100644 index 00000000000..ee325681483 --- /dev/null +++ b/keyboards/keychron/q6/iso_encoder/keymaps/default/rules.mk @@ -0,0 +1 @@ +ENCODER_MAP_ENABLE = yes diff --git a/keyboards/keychron/q6/iso_encoder/keymaps/keychron/keymap.c b/keyboards/keychron/q6/iso_encoder/keymaps/keychron/keymap.c new file mode 100644 index 00000000000..fbe314a2c3d --- /dev/null +++ b/keyboards/keychron/q6/iso_encoder/keymaps/keychron/keymap.c @@ -0,0 +1,82 @@ +/* Copyright 2022 @ Keychron (https://www.keychron.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 . + */ + +#include QMK_KEYBOARD_H +#include "keychron_common.h" + +// clang-format off + +enum layers{ + MAC_BASE, + MAC_FN, + WIN_BASE, + WIN_FN +}; + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [MAC_BASE] = LAYOUT_iso_110( + KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_MUTE, KC_SNAP, KC_SIRI, RGB_MOD, KC_F13, KC_F14, KC_F15, KC_F16, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, + 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_RBRC, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, + 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_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, + KC_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, KC_ROPTN, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT), + [MAC_FN] = LAYOUT_iso_110( + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, RGB_TOG, _______, _______, RGB_TOG, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + [WIN_BASE] = LAYOUT_iso_110( + 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_MUTE, KC_PSCR, KC_CRTA, RGB_MOD, _______, _______, _______, _______, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, + 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_RBRC, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, + 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_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, + KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT), + [WIN_FN] = LAYOUT_iso_110( + _______, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, RGB_TOG, _______, _______, RGB_TOG, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][1][2] = { + [MAC_BASE] = {ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [MAC_FN] = {ENCODER_CCW_CW(RGB_VAD, RGB_VAI) }, + [WIN_BASE] = {ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [WIN_FN] = {ENCODER_CCW_CW(RGB_VAD, RGB_VAI) } +}; +#endif + +// clang-format on + +void housekeeping_task_user(void) { + housekeeping_task_keychron(); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + if(!process_record_keychron(keycode, record)) { + return false; + } + + return true; +} diff --git a/keyboards/keychron/q6/iso_encoder/keymaps/keychron/rules.mk b/keyboards/keychron/q6/iso_encoder/keymaps/keychron/rules.mk new file mode 100644 index 00000000000..9cf1a9b56cb --- /dev/null +++ b/keyboards/keychron/q6/iso_encoder/keymaps/keychron/rules.mk @@ -0,0 +1,5 @@ +VIA_ENABLE = yes +ENCODER_MAP_ENABLE = yes + +VPATH += keyboards/keychron/common +SRC += keychron_common.c diff --git a/keyboards/keychron/q6/iso_encoder/keymaps/via/keymap.c b/keyboards/keychron/q6/iso_encoder/keymaps/via/keymap.c new file mode 100644 index 00000000000..dfb6751854c --- /dev/null +++ b/keyboards/keychron/q6/iso_encoder/keymaps/via/keymap.c @@ -0,0 +1,66 @@ +/* Copyright 2022 @ Keychron (https://www.keychron.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 . + */ + +#include QMK_KEYBOARD_H + +// clang-format off + +enum layers{ + MAC_BASE, + MAC_FN, + WIN_BASE, + WIN_FN +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [MAC_BASE] = LAYOUT_iso_110( + KC_ESC, KC_BRID, KC_BRIU, KC_NO, KC_NO, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_MUTE, KC_NO, KC_NO, RGB_MOD, KC_F13, KC_F14, KC_F15, KC_F16, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, + 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_RBRC, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, + 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_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, + KC_LCTL, KC_LOPT, KC_LCMD, KC_SPC, KC_RCMD, KC_ROPT, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT), + [MAC_FN] = LAYOUT_iso_110( + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, RGB_TOG, _______, _______, RGB_TOG, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + [WIN_BASE] = LAYOUT_iso_110( + 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_MUTE, KC_PSCR, KC_NO, RGB_MOD, _______, _______, _______, _______, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, + 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_RBRC, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, + 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_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, + KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT), + [WIN_FN] = LAYOUT_iso_110( + _______, KC_BRID, KC_BRIU, _______, _______, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, RGB_TOG, _______, _______, RGB_TOG, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][1][2] = { + [MAC_BASE] = {ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [MAC_FN] = {ENCODER_CCW_CW(RGB_VAD, RGB_VAI) }, + [WIN_BASE] = {ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [WIN_FN] = {ENCODER_CCW_CW(RGB_VAD, RGB_VAI) } +}; +#endif diff --git a/keyboards/keychron/q6/iso_encoder/keymaps/via/rules.mk b/keyboards/keychron/q6/iso_encoder/keymaps/via/rules.mk new file mode 100644 index 00000000000..f1adcab005e --- /dev/null +++ b/keyboards/keychron/q6/iso_encoder/keymaps/via/rules.mk @@ -0,0 +1,2 @@ +VIA_ENABLE = yes +ENCODER_MAP_ENABLE = yes diff --git a/keyboards/keychron/q6/iso_encoder/readme.md b/keyboards/keychron/q6/iso_encoder/readme.md new file mode 100644 index 00000000000..b68e3401496 --- /dev/null +++ b/keyboards/keychron/q6/iso_encoder/readme.md @@ -0,0 +1,5 @@ +# The ISO variant of the Keychron Q6 + +- Enable rotary encoder support. +- Turn clockwise to increase volume and turn anti-clockwise to decrease volume. +- Press top right key pushbutton to mute. diff --git a/keyboards/keychron/q6/iso_encoder/rules.mk b/keyboards/keychron/q6/iso_encoder/rules.mk new file mode 100644 index 00000000000..a4a0e8b7588 --- /dev/null +++ b/keyboards/keychron/q6/iso_encoder/rules.mk @@ -0,0 +1,34 @@ +# MCU name +MCU = STM32L432 + +# Bootloader selection +BOOTLOADER = stm32-dfu + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite +MOUSEKEY_ENABLE = yes # Mouse keys +EXTRAKEY_ENABLE = yes # Audio control and System control +CONSOLE_ENABLE = no # Console for debug +COMMAND_ENABLE = no # Commands for debug and configuration +NKRO_ENABLE = yes # Enable USB N-key Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +AUDIO_ENABLE = no # Audio output +ENCODER_ENABLE = yes # Enable Encoder +DIP_SWITCH_ENABLE = yes +RGB_MATRIX_ENABLE = yes +RGB_MATRIX_DRIVER = CKLED2001 +RAW_ENABLE = yes +LTO_ENABLE = yes +EEPROM_DRIVER = wear_leveling +WEAR_LEVELING_DRIVER = embedded_flash + +# Enter lower-power sleep mode when on the ChibiOS idle thread +OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE + +# custom matrix setup +CUSTOM_MATRIX = lite + +SRC += matrix.c diff --git a/keyboards/keychron/q6/matrix.c b/keyboards/keychron/q6/matrix.c new file mode 100644 index 00000000000..11f3432e6b1 --- /dev/null +++ b/keyboards/keychron/q6/matrix.c @@ -0,0 +1,219 @@ +/* Copyright 2022 @ Keychron (https://www.keychron.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 . + */ + +#include "matrix.h" +#include "quantum.h" + +// Pin connected to DS of 74HC595 +#define DATA_PIN C15 +// Pin connected to SH_CP of 74HC595 +#define CLOCK_PIN A1 +// Pin connected to ST_CP of 74HC595 +#define LATCH_PIN A0 + +#ifdef MATRIX_ROW_PINS +static pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS; +#endif // MATRIX_ROW_PINS +#ifdef MATRIX_COL_PINS +static pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS; +#endif // MATRIX_COL_PINS + +#define ROWS_PER_HAND (MATRIX_ROWS) + +#ifndef NO_PIN_NUM +# define NO_PIN_NUM 8 +#endif + +#ifndef NO_PIN_OFFSET +# define NO_PIN_OFFSET 0 +#endif + +#ifndef CLR_REG_VAL +# define CLR_REG_VAL 0xFF +#endif + +static inline void setPinOutput_writeLow(pin_t pin) { + ATOMIC_BLOCK_FORCEON { + setPinOutput(pin); + writePinLow(pin); + } +} + +static inline void setPinOutput_writeHigh(pin_t pin) { + ATOMIC_BLOCK_FORCEON { + setPinOutput(pin); + writePinHigh(pin); + } +} + +static inline void setPinInputHigh_atomic(pin_t pin) { + ATOMIC_BLOCK_FORCEON { + setPinInputHigh(pin); + } +} + +static inline uint8_t readMatrixPin(pin_t pin) { + if (pin != NO_PIN) { + return readPin(pin); + } else { + return 1; + } +} + +static void shiftOut(uint16_t dataOut) { + for (uint8_t i = 0; i < NO_PIN_NUM; i++) { + if (dataOut & 0x1) { + setPinOutput_writeHigh(DATA_PIN); + } else { + setPinOutput_writeLow(DATA_PIN); + } + dataOut = dataOut >> 1; + setPinOutput_writeHigh(CLOCK_PIN); + setPinOutput_writeLow(CLOCK_PIN); + } + setPinOutput_writeHigh(LATCH_PIN); + setPinOutput_writeLow(LATCH_PIN); +} + +static void shiftout_single(uint8_t data) { + if (data & 0x1) { + setPinOutput_writeHigh(DATA_PIN); + } else { + setPinOutput_writeLow(DATA_PIN); + } + setPinOutput_writeHigh(CLOCK_PIN); + setPinOutput_writeLow(CLOCK_PIN); + + setPinOutput_writeHigh(LATCH_PIN); + setPinOutput_writeLow(LATCH_PIN); +} + +static bool select_col(uint8_t col) { + pin_t pin = col_pins[col]; + + if (pin != NO_PIN) { + setPinOutput_writeLow(pin); + return true; + } else { + if (col == NO_PIN_START) { + shiftout_single(0x00); + } else { + shiftout_single(0x01); + } + return true; + } + return false; +} + +static void unselect_col(uint8_t col) { + pin_t pin = col_pins[col]; + + if (pin != NO_PIN) { +#ifdef MATRIX_UNSELECT_DRIVE_HIGH + setPinOutput_writeHigh(pin); +#else + setPinInputHigh_atomic(pin); +#endif + } else { + if (col == (MATRIX_COLS - NO_PIN_OFFSET - 1)) + setPinOutput_writeHigh(CLOCK_PIN); + setPinOutput_writeLow(CLOCK_PIN); + setPinOutput_writeHigh(LATCH_PIN); + setPinOutput_writeLow(LATCH_PIN); + } +} + +static void unselect_cols(void) { + for (uint8_t x = 0; x < MATRIX_COLS; x++) { + pin_t pin = col_pins[x]; + if (pin != NO_PIN) { +#ifdef MATRIX_UNSELECT_DRIVE_HIGH + setPinOutput_writeHigh(pin); +#else + setPinInputHigh_atomic(pin); +#endif + } + if (x == (MATRIX_COLS - NO_PIN_OFFSET - 1)) + // unselect shift Register + shiftOut(CLR_REG_VAL); + } +} + +static void matrix_init_pins(void) { + unselect_cols(); + for (uint8_t x = 0; x < MATRIX_ROWS; x++) { + if (row_pins[x] != NO_PIN) { + setPinInputHigh_atomic(row_pins[x]); + } + } +} + +static void matrix_read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col, matrix_row_t row_shifter) { + bool key_pressed = false; + + // Select col + if (!select_col(current_col)) { // select col + return; // skip NO_PIN col + } + + if (current_col < 10) { + matrix_output_select_delay(); + } else { + for (int8_t cycle = 4; cycle > 0; cycle--) { + matrix_output_select_delay(); // 0.25us + matrix_output_select_delay(); + matrix_output_select_delay(); + matrix_output_select_delay(); + } + } + + // For each row... + for (uint8_t row_index = 0; row_index < ROWS_PER_HAND; row_index++) { + // Check row pin state + if (readMatrixPin(row_pins[row_index]) == 0) { + // Pin LO, set col bit + current_matrix[row_index] |= row_shifter; + key_pressed = true; + } else { + // Pin HI, clear col bit + current_matrix[row_index] &= ~row_shifter; + } + } + + // Unselect col + unselect_col(current_col); + matrix_output_unselect_delay(current_col, key_pressed); // wait for all Row signals to go HIGH +} + +void matrix_init_custom(void) { + // initialize key pins + matrix_init_pins(); +} + +bool matrix_scan_custom(matrix_row_t current_matrix[]) { + matrix_row_t curr_matrix[MATRIX_ROWS] = {0}; + + // Set col, read rows + matrix_row_t row_shifter = MATRIX_ROW_SHIFTER; + for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++, row_shifter <<= 1) { + matrix_read_rows_on_col(curr_matrix, current_col, row_shifter); + } + + bool changed = memcmp(current_matrix, curr_matrix, sizeof(curr_matrix)) != 0; + if (changed) memcpy(current_matrix, curr_matrix, sizeof(curr_matrix)); + + return changed; +} diff --git a/keyboards/keychron/q6/mcuconf.h b/keyboards/keychron/q6/mcuconf.h new file mode 100644 index 00000000000..0ca8c64850f --- /dev/null +++ b/keyboards/keychron/q6/mcuconf.h @@ -0,0 +1,22 @@ +/* Copyright 2020 QMK + * + * 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 . + */ + +#pragma once + +#include_next + +#undef STM32_I2C_USE_I2C1 +#define STM32_I2C_USE_I2C1 TRUE diff --git a/keyboards/keychron/q6/q6.c b/keyboards/keychron/q6/q6.c new file mode 100644 index 00000000000..85018004e0a --- /dev/null +++ b/keyboards/keychron/q6/q6.c @@ -0,0 +1,92 @@ +/* Copyright 2022 @ Keychron (https://www.keychron.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 . + */ + +#include "q6.h" + +const matrix_row_t matrix_mask[] = { + 0b11111111111111111111, + 0b11111111111111111111, + 0b11111111111111111111, + 0b11111111111111111111, + 0b11111111111111111111, + 0b11111111111111101111, +}; + +#ifdef DIP_SWITCH_ENABLE + +bool dip_switch_update_kb(uint8_t index, bool active) { + if (!dip_switch_update_user(index, active)) { + return false; + } + if (index == 0) { + default_layer_set(1UL << (active ? 2 : 0)); + } + return true; +} + +#endif // DIP_SWITCH_ENABLE + +#if defined(RGB_MATRIX_ENABLE) && (defined(CAPS_LOCK_LED_INDEX) || defined(NUM_LOCK_LED_INDEX)) + +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { + if (!process_record_user(keycode, record)) { + return false; + } + switch (keycode) { + case RGB_TOG: + if (record->event.pressed) { + switch (rgb_matrix_get_flags()) { + case LED_FLAG_ALL: { + rgb_matrix_set_flags(LED_FLAG_NONE); + rgb_matrix_set_color_all(0, 0, 0); + } break; + default: { + rgb_matrix_set_flags(LED_FLAG_ALL); + } break; + } + } + if (!rgb_matrix_is_enabled()) { + rgb_matrix_set_flags(LED_FLAG_ALL); + rgb_matrix_enable(); + } + return false; + } + return true; +} + +__attribute__((weak)) void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { + // RGB_MATRIX_INDICATOR_SET_COLOR(index, red, green, blue); +# if defined(CAPS_LOCK_LED_INDEX) + if (host_keyboard_led_state().caps_lock) { + RGB_MATRIX_INDICATOR_SET_COLOR(CAPS_LOCK_LED_INDEX, 255, 255, 255); + } else { + if (!rgb_matrix_get_flags()) { + RGB_MATRIX_INDICATOR_SET_COLOR(CAPS_LOCK_LED_INDEX, 0, 0, 0); + } + } +# endif // CAPS_LOCK_LED_INDEX +# if defined(NUM_LOCK_LED_INDEX) + if (host_keyboard_led_state().num_lock) { + RGB_MATRIX_INDICATOR_SET_COLOR(NUM_LOCK_LED_INDEX, 255, 255, 255); + } else { + if (!rgb_matrix_get_flags()) { + RGB_MATRIX_INDICATOR_SET_COLOR(NUM_LOCK_LED_INDEX, 0, 0, 0); + } + } +# endif // NUM_LOCK_LED_INDEX +} + +#endif // RGB_MATRIX_ENABLE... diff --git a/keyboards/keychron/q6/q6.h b/keyboards/keychron/q6/q6.h new file mode 100644 index 00000000000..9e878e700c8 --- /dev/null +++ b/keyboards/keychron/q6/q6.h @@ -0,0 +1,29 @@ +/* Copyright 2022 @ Keychron (https://www.keychron.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 . + */ + +#pragma once + +#include "quantum.h" + +#if defined(KEYBOARD_keychron_q6_ansi) +# include "ansi.h" +#elif defined(KEYBOARD_keychron_q6_ansi_encoder) +# include "ansi_encoder.h" +#elif defined(KEYBOARD_keychron_q6_iso) +# include "iso.h" +#elif defined(KEYBOARD_keychron_q6_iso_encoder) +# include "iso_encoder.h" +#endif diff --git a/keyboards/keychron/q6/readme.md b/keyboards/keychron/q6/readme.md new file mode 100644 index 00000000000..a2056c57ae2 --- /dev/null +++ b/keyboards/keychron/q6/readme.md @@ -0,0 +1,19 @@ +# Keychron Q6 + +A customizable 100% keyboard. + +* Keyboard Maintainer: [Keychron](https://github.com/keychron) +* Hardware Supported: Keychron Q6 +* Hardware Availability: [Keychron](https://www.keychron.com) + +Make example for this keyboard (after setting up your build environment): + + make keychron/q6/ansi:default + +Flashing example for this keyboard: + + make keychron/q6/ansi:default:flash + +**Reset Key**: Hold down the key located at *K00*, commonly programmed as *Esc* while plugging in the keyboard. + +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). diff --git a/keyboards/kinesis/keymaps/ericgebhart/keymap.c b/keyboards/kinesis/keymaps/ericgebhart/keymap.c index 731e257b05a..c534fe3c6d3 100644 --- a/keyboards/kinesis/keymaps/ericgebhart/keymap.c +++ b/keyboards/kinesis/keymaps/ericgebhart/keymap.c @@ -1,5 +1,5 @@ /* - Copyright 2018 Eric Gebhart + Copyright 2018-2022 Eric Gebhart 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 @@ -14,40 +14,5 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#include "keymap_bepo.h" -#include "ericgebhart.h" -#define LAYOUT_PVARG(...) LAYOUT_pretty(__VA_ARGS__) - -#define Kinesis_base(...) Base_4x6_4_6(__VA_ARGS__) -#define Kinesis_bepo_base(...) Base_bepo_4x6_4_6(__VA_ARGS__) -#define Kinesis_bepo_base6(...) Base_bepo6_4x6_4_6(__VA_ARGS__) -#define Kinesis_transient(...) Transient6_4x6_4_6(__VA_ARGS__) - - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - // Qwerty Base layers - [_DVORAK] = Kinesis_base(___NUMS___, ___DVORAK___), - [_QWERTY] = Kinesis_base(___NUMS___, ___QWERTY___), - [_COLEMAK] = Kinesis_base(___NUMS___, ___COLEMAK_DH___), - [_BEAKL] = Kinesis_base(___BKLNUMS___, ___BEAKL15___), - // Bepo Base layers - [_DVORAK_BP] = Kinesis_bepo_base(___NUMS_BP___, ___DVORAK_FR___), - [_BEAKL_BP] = Kinesis_bepo_base(___BKLNUMS_BP___, ___BEAKL15_FR___), - - [_BEPO] = Kinesis_bepo_base6(___BEPO6___), - - // transient layers. - // Switch to using a transient layer macro - [_SYMB] = Kinesis_transient(___12_FUNC___, ___SYMB_BEAKLA_3x12___), - [_SYMB_BP] = Kinesis_transient(___12_FUNC___, ___SYMB_BEAKLA_BP_3x12___), - - [_TOPROWS] = Kinesis_transient(___12___, ___TOPROWS_3x12___), - [_TOPROWS_BP] = Kinesis_transient(___12___, ___TOPROWS_BP_3x12___), - - [_NAV] = Kinesis_transient(___12___, ___NAV_3x12___), - [_LAYERS] = Kinesis_transient(___12___, ___LAYERS_3x12___), - [_ADJUST] = Kinesis_transient(___12___, ___ADJUST_3x12___), - //[_RGB] = Kinesis_transient(___12___, ___RGB_3x12___), -}; +// See: users/ericgebhart. diff --git a/keyboards/kinesis/keymaps/ericgebhart/rules.mk b/keyboards/kinesis/keymaps/ericgebhart/rules.mk index 61115e927a6..dd625503433 100644 --- a/keyboards/kinesis/keymaps/ericgebhart/rules.mk +++ b/keyboards/kinesis/keymaps/ericgebhart/rules.mk @@ -11,6 +11,5 @@ BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output UNICODE_ENABLE = no # Unicode -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend - diff --git a/keyboards/laser_ninja/pumpkin_pad/config.h b/keyboards/laser_ninja/pumpkin_pad/config.h new file mode 100644 index 00000000000..926d8788c14 --- /dev/null +++ b/keyboards/laser_ninja/pumpkin_pad/config.h @@ -0,0 +1,60 @@ +/* Copyright 2022 Joah Nelson (Jels) + * + * 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 . + */ + +#pragma once + +#include "config_common.h" + +#ifdef RGB_MATRIX_ENABLE +# define RGB_DI_PIN A10 +# define RGBLED_NUM 28 +# define DRIVER_LED_TOTAL RGBLED_NUM +# define BACKLIGHT_LIMIT_VAL 200 +# define ENABLE_RGB_MATRIX_ALPHAS_MODS +# define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN +# define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT +# define ENABLE_RGB_MATRIX_BREATHING +# define ENABLE_RGB_MATRIX_BAND_SAT +# define ENABLE_RGB_MATRIX_BAND_VAL +# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT +# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL +# define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT +# define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL +# define ENABLE_RGB_MATRIX_CYCLE_ALL +# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT +# define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN +# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON +# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN +# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL +# define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL +# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL +# define ENABLE_RGB_MATRIX_DUAL_BEACON +# define ENABLE_RGB_MATRIX_RAINBOW_BEACON +# define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS +# define ENABLE_RGB_MATRIX_RAINDROPS +# define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS +# define ENABLE_RGB_MATRIX_HUE_BREATHING +# define ENABLE_RGB_MATRIX_HUE_PENDULUM +# define ENABLE_RGB_MATRIX_HUE_WAVE +# define ENABLE_RGB_MATRIX_PIXEL_FRACTAL +# define ENABLE_RGB_MATRIX_PIXEL_FLOW +# define ENABLE_RGB_MATRIX_PIXEL_RAIN +#endif + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE diff --git a/keyboards/laser_ninja/pumpkin_pad/info.json b/keyboards/laser_ninja/pumpkin_pad/info.json new file mode 100644 index 00000000000..cf37ffd9a53 --- /dev/null +++ b/keyboards/laser_ninja/pumpkin_pad/info.json @@ -0,0 +1,78 @@ +{ + "keyboard_name": "Pumpkin Pad", + "manufacturer": "Laser Ninja", + "url": "", + "maintainer": "Jels", + "processor": "STM32F072", + "bootloader": "stm32-dfu", + "debounce": 5, + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": false, + "mousekey": false, + "nkro": false, + "rgb_matrix": true + }, + "matrix_pins": { + "direct": [ + ["A9", "B3", "B9", "NO_PIN"], + ["A8", "B12", "A2", "A1"], + ["B15", "B14", "B13", "NO_PIN"] + ] + }, + "usb": { + "vid": "0x6C6E", + "pid": "0x7070", + "device_version": "0.0.1" + }, + "layouts": { + "LAYOUT": { + "layout": [ + { "matrix": [0, 0], "x": 0.5, "y": 0 }, + { "matrix": [0, 1], "x": 1.5, "y": 0 }, + { "matrix": [0, 2], "x": 2.5, "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": [2, 0], "x": 0.5, "y": 2 }, + { "matrix": [2, 1], "x": 1.5, "y": 2 }, + { "matrix": [2, 2], "x": 2.5, "y": 2 } + ] + } + }, + "rgb_matrix": { + "driver": "WS2812", + "layout": [ + { "flags": 2, "x": 36, "y": 3 }, + { "flags": 2, "x": 86, "y": 2 }, + { "flags": 2, "x": 138, "y": 2 }, + { "flags": 2, "x": 188, "y": 2 }, + { "flags": 2, "x": 215, "y": 16 }, + { "flags": 2, "x": 215, "y": 16 }, + { "flags": 4, "matrix": [0, 2], "x": 167, "y": 17 }, + { "flags": 4, "matrix": [0, 1], "x": 112, "y": 17 }, + { "flags": 4, "matrix": [0, 0], "x": 57, "y": 17 }, + { "flags": 2, "x": 9, "y": 15 }, + { "flags": 2, "x": 9, "y": 15 }, + { "flags": 2, "x": 6, "y": 34 }, + { "flags": 2, "x": 9, "y": 48 }, + { "flags": 2, "x": 9, "y": 48 }, + { "flags": 4, "matrix": [1, 0], "x": 29, "y": 38 }, + { "flags": 4, "matrix": [1, 1], "x": 84, "y": 38 }, + { "flags": 4, "matrix": [1, 2], "x": 140, "y": 38 }, + { "flags": 2, "x": 218, "y": 34 }, + { "flags": 2, "x": 215, "y": 48 }, + { "flags": 2, "x": 215, "y": 48 }, + { "flags": 2, "x": 188, "y": 61 }, + { "flags": 4, "matrix": [2, 2], "x": 167, "y": 59 }, + { "flags": 2, "x": 138, "y": 61 }, + { "flags": 4, "matrix": [2, 1], "x": 112, "y": 59 }, + { "flags": 2, "x": 86, "y": 61 }, + { "flags": 4, "matrix": [2, 0], "x": 57, "y": 59 }, + { "flags": 2, "x": 36, "y": 61 } + ] + } +} diff --git a/keyboards/laser_ninja/pumpkin_pad/keymaps/default/keymap.c b/keyboards/laser_ninja/pumpkin_pad/keymaps/default/keymap.c new file mode 100644 index 00000000000..8b60519b90f --- /dev/null +++ b/keyboards/laser_ninja/pumpkin_pad/keymaps/default/keymap.c @@ -0,0 +1,31 @@ + /* Copyright 2022 Joah Nelson (Jels) + * + * 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 . + */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +[0] = LAYOUT( + KC_F1, KC_F2, KC_F3, + KC_F4, KC_F5, KC_F6, KC_F7, + KC_F8, MO(1), KC_F10 +), +[1] = LAYOUT( + RGB_TOG, RGB_MOD, RGB_RMOD, + RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, + RGB_VAI, RGB_VAD, _______ +) +}; diff --git a/keyboards/laser_ninja/pumpkin_pad/keymaps/via/keymap.c b/keyboards/laser_ninja/pumpkin_pad/keymaps/via/keymap.c new file mode 100644 index 00000000000..a63a5a00477 --- /dev/null +++ b/keyboards/laser_ninja/pumpkin_pad/keymaps/via/keymap.c @@ -0,0 +1,41 @@ + /* Copyright 2022 Joah Nelson (Jels) + * + * 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 . + */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +[0] = LAYOUT( + KC_F1, KC_F2, KC_F3, + KC_F4, KC_F5, KC_F6, KC_F7, + KC_F8, MO(1), KC_F10 +), +[1] = LAYOUT( + RGB_TOG, RGB_MOD, RGB_RMOD, + RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, + RGB_VAI, RGB_VAD, _______ +), +[2] = LAYOUT( + _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______ +), +[3] = LAYOUT( + _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______ +) +}; diff --git a/keyboards/laser_ninja/pumpkin_pad/keymaps/via/rules.mk b/keyboards/laser_ninja/pumpkin_pad/keymaps/via/rules.mk new file mode 100644 index 00000000000..1e5b99807cb --- /dev/null +++ b/keyboards/laser_ninja/pumpkin_pad/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes diff --git a/keyboards/laser_ninja/pumpkin_pad/readme.md b/keyboards/laser_ninja/pumpkin_pad/readme.md new file mode 100644 index 00000000000..452f4f67236 --- /dev/null +++ b/keyboards/laser_ninja/pumpkin_pad/readme.md @@ -0,0 +1,23 @@ +# Pumpkin Pad + +![pumpkin-pad](https://i.imgur.com/jFkl9rwh.jpg) + +A 60% PCB + +- Keyboard Maintainer: [Jels](https://github.com/Jels02) +- Hardware Supported: Pumpkin Pad PCB +- Hardware Availabililty: [Laser_Ninja](https://kennui.com/w/Laser_Ninja) + +Make example for this keyboard (after setting up your build environment): + + make laser_ninja/pumpkin_pad:default + +Flashing example for this keyboard: + + make laser_ninja/pumpkin_pad:default:flash + +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). + +- **Bootmagic reset**: Hold down the top left key and plug in the keyboard +- **Physical reset button**: Briefly press the button on the back of the PCB +- **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available diff --git a/keyboards/laser_ninja/pumpkin_pad/rules.mk b/keyboards/laser_ninja/pumpkin_pad/rules.mk new file mode 100644 index 00000000000..08a1c1568c9 --- /dev/null +++ b/keyboards/laser_ninja/pumpkin_pad/rules.mk @@ -0,0 +1 @@ +# This file is intentionally left blank. diff --git a/keyboards/montsinger/rebound/rev4/keymaps/ericgebhart/keymap.c b/keyboards/montsinger/rebound/rev4/keymaps/ericgebhart/keymap.c index 59f2a23733e..c534fe3c6d3 100644 --- a/keyboards/montsinger/rebound/rev4/keymaps/ericgebhart/keymap.c +++ b/keyboards/montsinger/rebound/rev4/keymaps/ericgebhart/keymap.c @@ -1,5 +1,5 @@ /* - Copyright 2018 Eric Gebhart + Copyright 2018-2022 Eric Gebhart 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 @@ -14,88 +14,5 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#include "ericgebhart.h" -#include "layouts.h" - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - // Qwerty based Base layers - [_DVORAK] = Rebound_base(___DVORAK___), - [_BEAKL] = Rebound_base(___BEAKL15___), - [_COLEMAK] = Rebound_base(___COLEMAK_DH___), - [_QWERTY] = Rebound_base(___QWERTY___), - - // Bepo base layers - [_BEAKL_BP] = Rebound_base_bepo(___BEAKL15_FR___), - [_DVORAK_BP] = Rebound_base_bepo(___DVORAK_FR___), - [_BEPO] = Rebound_base_bepo6(___BEPO6___), - - // Transient layers. - [_SYMB] = Rebound_transient(___SYMB_BEAKLA_3x12___), - [_SYMB_BP] = Rebound_transient(___SYMB_BEAKLA_BP_3x12___), - - [_KEYPAD] = Rebound_transient(___KP_C_3x12___), - [_KEYPAD_BP] = Rebound_transient(___KP_C_BP_3x12___), - - [_TOPROWS] = Rebound_transient(___TOPROWS_3x12___), - [_TOPROWS_BP] = Rebound_transient(___TOPROWS_BP_3x12___), - [_NAV] = Rebound_transient(___NAV_3x12___), - [_LAYERS] = Rebound_transient(___LAYERS_3x12___), -}; - - -bool encoder_update_user(uint8_t index, bool clockwise) { - switch(get_highest_layer(layer_state)){ - case _DVORAK: - if (clockwise) { - tap_code16(KC_VOLD); - } else { - tap_code16(KC_VOLU); - } - break; - - case _NAV: - if (clockwise) { - tap_code16(S(KC_TAB)); - } else { - tap_code16(KC_TAB); - } - break; - } - return true; -} - -#ifdef OLED_ENABLE -void oled_task_user(void) { - // Host Keyboard Layer Status - oled_write_P(PSTR(""), false); - - switch (get_highest_layer(layer_state)) { - case _BASE: - oled_write_P(PSTR("Rebound\n"), false); - oled_write_P(PSTR("Rev4\n"), false); - break; - case _NAV: - oled_write_P(PSTR("Nav\n"), false); - break; - case _SYMB_BEAKL: - case _SYMB: - oled_write_P(PSTR("Symbols\n"), false); - break; - case _KEYPAD: - oled_write_P(PSTR("Top Rows\n"), false); - break; - default: - // Or use the write_ln shortcut over adding '\n' to the end of your string - oled_write_ln_P(PSTR("Undefined"), false); - } - - // Host Keyboard LED Status - led_t led_state = host_keyboard_led_state(); - oled_write_P(led_state.num_lock ? PSTR("NUM ") : PSTR(" "), false); - oled_write_P(led_state.caps_lock ? PSTR("CAPS") : PSTR(" "), false); - oled_write_P(led_state.scroll_lock ? PSTR("SCR ") : PSTR(" "), false); - -} - -#endif +// See: users/ericgebhart. diff --git a/keyboards/montsinger/rebound/rev4/keymaps/ericgebhart/layouts.h b/keyboards/montsinger/rebound/rev4/keymaps/ericgebhart/layouts.h deleted file mode 100644 index f6b7fc15131..00000000000 --- a/keyboards/montsinger/rebound/rev4/keymaps/ericgebhart/layouts.h +++ /dev/null @@ -1,113 +0,0 @@ -/* - Copyright 2018 Eric Gebhart - - 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 . -*/ - -/********************************************************************/ -/* Rebound 4 rows, 1x12, 3x13 */ -/********************************************************************/ - -#define LVARG_rebound(...) LAYOUT_all(__VA_ARGS__) -#define LAYOUT_rebound_base( \ - K01, K02, K03, K04, K05, \ - K06, K07, K08, K09, K0A, \ - K11, K12, K13, K14, K15, \ - K16, K17, K18, K19, K1A, \ - K21, K22, K23, K24, K25, \ - K26, K27, K28, K29, K2A \ - ) \ - LVARG_rebound( \ - ROW1_LEFT(K01, K02, K03, K04, K05), \ - ROW1_RIGHT(K06, K07, K08, K09, K0A), \ - \ - ROW2_LEFT(K11, K12, K13, K14, K15), \ - KC_CCCV, \ - ROW2_RIGHT(K16, K17, K18, K19, K1A), \ - \ - ROW3_LEFT(K21, K22, K23, K24, K25), \ - MO(_ADJUST), \ - ROW3_RIGHT(K26, K27, K28, K29, K2A), \ - ___13_BOTTOM___ \ - ) - -#define LAYOUT_rebound_base_bepo( \ - K01, K02, K03, K04, K05, \ - K06, K07, K08, K09, K0A, \ - K11, K12, K13, K14, K15, \ - K16, K17, K18, K19, K1A, \ - K21, K22, K23, K24, K25, \ - K26, K27, K28, K29, K2A \ - ) \ - LVARG_rebound( \ - ROW1_LEFT_BP(K01, K02, K03, K04, K05), \ - ROW1_RIGHT_BP(K06, K07, K08, K09, K0A), \ - \ - ROW2_LEFT_BP(K11, K12, K13, K14, K15), \ - KC_CCCV, \ - ROW2_RIGHT_BP(K16, K17, K18, K19, K1A), \ - \ - ROW3_LEFT_BP(K21, K22, K23, K24, K25), \ - MO(_ADJUST), \ - ROW3_RIGHT_BP(K26, K27, K28, K29, K2A), \ - ___13_BOTTOM_BP___ \ - ) - -// Just for bepo because it's a 3x6 matrix on each side. -// So 3 pairs of 6 keys, left and right. -#define LAYOUT_rebound_base_bepo6( \ - K01, K02, K03, K04, K05, K06, \ - K07, K08, K09, K0A, K0B, K0C, \ - K11, K12, K13, K14, K15, K16, \ - K17, K18, K19, K1A, K1B, K1C, \ - K21, K22, K23, K24, K25, K26, \ - K27, K28, K29, K2A, K2B, K2C \ - ) \ - LVARG_rebound( \ - ROW1_LEFT_BP6(K01, K02, K03, K04, K05, K06), \ - ROW1_RIGHT_BP6(K07, K08, K09, K0A, K0B, K0C), \ - \ - ROW2_LEFT_BP6(K11, K12, K13, K14, K15, K16), \ - KC_CCCV, \ - ROW2_RIGHT_BP6(K17, K18, K19, K1A, K1B, K1C), \ - \ - ROW3_LEFT_BP6(K21, K22, K23, K24, K25, K26), \ - MO(_ADJUST), \ - ROW3_RIGHT_BP6(K27, K28, K29, K2A, K2B, K2C), \ - ___13_BOTTOM_BP___ \ - ) - -#define LAYOUT_rebound_transient( \ - K01, K02, K03, K04, K05, K06, \ - K07, K08, K09, K0A, K0B, K0C, \ - K11, K12, K13, K14, K15, K16, \ - K17, K18, K19, K1A, K1B, K1C, \ - K21, K22, K23, K24, K25, K26, \ - K27, K28, K29, K2A, K2B, K2C \ - ) \ - LVARG_rebound( \ - K01, K02, K03, K04, K05, K06, \ - K07, K08, K09, K0A, K0B, K0C, \ - K11, K12, K13, K14, K15, K16, \ - ___, \ - K17, K18, K19, K1A, K1B, K1C, \ - K21, K22, K23, K24, K25, K26, \ - ___, \ - K27, K28, K29, K2A, K2B, K2C, \ - ___, ___12___) - -#define Rebound_base(...) LAYOUT_rebound_base(__VA_ARGS__) -#define Rebound_base_bepo(...) LAYOUT_rebound_base_bepo(__VA_ARGS__) -#define Rebound_base_bepo6(...) LAYOUT_rebound_base_bepo6(__VA_ARGS__) -#define Rebound_transient(...) LAYOUT_rebound_transient(__VA_ARGS__) diff --git a/keyboards/montsinger/rebound/rev4/keymaps/ericgebhart/rules.mk b/keyboards/montsinger/rebound/rev4/keymaps/ericgebhart/rules.mk index cf27df39b89..28b87141004 100644 --- a/keyboards/montsinger/rebound/rev4/keymaps/ericgebhart/rules.mk +++ b/keyboards/montsinger/rebound/rev4/keymaps/ericgebhart/rules.mk @@ -1,6 +1,7 @@ # Build Options # change yes to no to disable # +# BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite MOUSEKEY_ENABLE = yes # Mouse keys EXTRAKEY_ENABLE = yes # Audio control and System control @@ -11,6 +12,7 @@ BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend TAP_DANCE_ENABLE = yes # Enable the tap dance feature. diff --git a/keyboards/nixkeyboards/day_off/config.h b/keyboards/nixkeyboards/day_off/config.h new file mode 100644 index 00000000000..1ed4ea91e32 --- /dev/null +++ b/keyboards/nixkeyboards/day_off/config.h @@ -0,0 +1,43 @@ +/* Copyright 2021 Nix Keyboards + * + * 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 . + */ + +#pragma once + +#include "config_common.h" + +/* key matrix size */ +#define MATRIX_ROWS 5 +#define MATRIX_COLS 15 + +#define MATRIX_ROW_PINS \ + { B3, B7, F5, F4, F1 } +#define MATRIX_COL_PINS \ + { F0, F7, C7, C6, B6, B5, B4, D7, D6, D4, D5, D3, D2, D1, D0 } +#define DIODE_DIRECTION COL2ROW + +/* encoder */ +#define ENCODERS_PAD_A \ + { B0 } +#define ENCODERS_PAD_B \ + { B1 } +#define ENCODER_RESOLUTION 4 + +/* Debounce reduces chatter */ +#define DEBOUNCE 5 + +/* Set the Bootmagic key to the escape key (default key doesn't exist 0,0) */ +#define BOOTMAGIC_LITE_ROW 0 +#define BOOTMAGIC_LITE_COLUMN 1 diff --git a/keyboards/nixkeyboards/day_off/day_off.c b/keyboards/nixkeyboards/day_off/day_off.c new file mode 100755 index 00000000000..2694682f091 --- /dev/null +++ b/keyboards/nixkeyboards/day_off/day_off.c @@ -0,0 +1,16 @@ +/* Copyright 2021 Nix Keyboards + * + * 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 . + */ +#include "day_off.h" diff --git a/keyboards/nixkeyboards/day_off/day_off.h b/keyboards/nixkeyboards/day_off/day_off.h new file mode 100755 index 00000000000..f890b837e63 --- /dev/null +++ b/keyboards/nixkeyboards/day_off/day_off.h @@ -0,0 +1,32 @@ +/* Copyright 2021 Nix Keyboards + * + * 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 . + */ +#pragma once + +#include "quantum.h" + +#define LAYOUT_all(K001, K002, K003, K004, K005, K006, K007, K008, K009, K010,\ + K011, K012, K013, K014, K101, K102, K103, K104, K105, K106, \ + K107, K108, K109, K110, K111, K112, K113, K114, K200, K201, \ + K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, \ + K212, K213, K214, K300, K301, K302, K303, K304, K305, K306, \ + K307, K308, K309, K310, K311, K312, K313, K314, K400, K401, \ + K402, K403, K405, K407, K408, K410, K411, K412, K413, K414) \ + { {KC_NO, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014}, \ + {KC_NO, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114}, \ + {K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214}, \ + {K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314}, \ + {K400, K401, K402, K403, KC_NO, K405, KC_NO, K407, K408, KC_NO, K410, K411, K412, K413, KC_NO} \ + } diff --git a/keyboards/nixkeyboards/day_off/info.json b/keyboards/nixkeyboards/day_off/info.json new file mode 100755 index 00000000000..0c57be6e82a --- /dev/null +++ b/keyboards/nixkeyboards/day_off/info.json @@ -0,0 +1,87 @@ +{ + "keyboard_name": "DayOff", + "manufacturer": "NixKeyboards", + "url": "nixkeyboards.com", + "maintainer": "Schrobie", + "usb": { + "vid": "0x6E6B", + "pid": "0x444F", + "device_version": "0.0.1" + }, + "layouts": { + "LAYOUT_all": { + "layout": [ + {"label":"~", "x":1.5, "y":0}, + {"label":"!", "x":2.5, "y":0}, + {"label":"@", "x":3.5, "y":0}, + {"label":"#", "x":4.5, "y":0}, + {"label":"$", "x":5.5, "y":0}, + {"label":"%", "x":6.5, "y":0}, + {"label":"^", "x":7.5, "y":0}, + {"label":"&", "x":8.5, "y":0}, + {"label":"*", "x":9.5, "y":0}, + {"label":"(", "x":10.5, "y":0}, + {"label":")", "x":11.5, "y":0}, + {"label":"_", "x":12.5, "y":0}, + {"label":"+", "x":13.5, "y":0}, + {"label":"Bksp", "x":14.5, "y":0}, + {"label":"Del", "x":15.5, "y":0}, + {"label":"Tab", "x":1.5, "y":1, "w":1.5}, + {"label":"Q", "x":3, "y":1}, + {"label":"W", "x":4, "y":1}, + {"label":"E", "x":5, "y":1}, + {"label":"R", "x":6, "y":1}, + {"label":"T", "x":7, "y":1}, + {"label":"Y", "x":8, "y":1}, + {"label":"U", "x":9, "y":1}, + {"label":"I", "x":10, "y":1}, + {"label":"O", "x":11, "y":1}, + {"label":"P", "x":12, "y":1}, + {"label":"{", "x":13, "y":1}, + {"label":"}", "x":14, "y":1}, + {"label":"|", "x":15, "y":1, "w":1.5}, + {"label":"M1", "x":0, "y":2}, + {"label":"Caps Lock", "x":1.5, "y":2, "w":1.75}, + {"label":"A", "x":3.25, "y":2}, + {"label":"S", "x":4.25, "y":2}, + {"label":"D", "x":5.25, "y":2}, + {"label":"F", "x":6.25, "y":2}, + {"label":"G", "x":7.25, "y":2}, + {"label":"H", "x":8.25, "y":2}, + {"label":"J", "x":9.25, "y":2}, + {"label":"K", "x":10.25, "y":2}, + {"label":"L", "x":11.25, "y":2}, + {"label":":", "x":12.25, "y":2}, + {"label":"\"", "x":13.25, "y":2}, + {"label":"Enter", "x":14.25, "y":2, "w":2.25}, + {"label":"M2", "x":0, "y":3}, + {"label":"", "x":1.5, "y":3, "w":1.25}, + {"label":"Shift", "x":2.75, "y":3}, + {"label":"Z", "x":3.75, "y":3}, + {"label":"X", "x":4.75, "y":3}, + {"label":"C", "x":5.75, "y":3}, + {"label":"V", "x":6.75, "y":3}, + {"label":"B", "x":7.75, "y":3}, + {"label":"N", "x":8.75, "y":3}, + {"label":"M", "x":9.75, "y":3}, + {"label":"<", "x":10.75, "y":3}, + {"label":">", "x":11.75, "y":3}, + {"label":"?", "x":12.75, "y":3}, + {"label":"Shift", "x":13.75, "y":3, "w":1.75}, + {"label":"", "x":15.5, "y":3}, + {"label":"M3", "x":0, "y":4}, + {"label":"Ctrl", "x":1.5, "y":4, "w":1.25}, + {"label":"Win", "x":2.75, "y":4, "w":1.25}, + {"label":"Alt", "x":4, "y":4, "w":1.25}, + {"label":"Space", "x":5.25, "y":4, "w":6.25}, + {"label":"Space", "x":5.25, "y":4, "w":2.25}, + {"label":"Mod", "x":7.5, "y":4, "w":1.25}, + {"label":"Space", "x":8.75, "y":4, "w":2.25}, + {"label":"Alt", "x":11.5, "y":4, "w":1.25}, + {"label":"Win", "x":12.75, "y":4, "w":1.25}, + {"label":"Menu", "x":14, "y":4, "w":1.25}, + {"label":"Ctrl", "x":15.25, "y":4, "w":1.25} + ] + } + } +} diff --git a/keyboards/nixkeyboards/day_off/keymaps/default/keymap.c b/keyboards/nixkeyboards/day_off/keymaps/default/keymap.c new file mode 100644 index 00000000000..61e879eb4f9 --- /dev/null +++ b/keyboards/nixkeyboards/day_off/keymaps/default/keymap.c @@ -0,0 +1,60 @@ +/* Copyright 2021 Nix Keyboards + * + * 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 . + */ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_all( + KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, + 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_RBRC, KC_BSPC, + KC_MPLY, 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_BSLS, KC_ENT, + KC_MNXT, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_BSLS, + KC_MPRV, KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_SPC, KC_SPC, KC_RGUI, KC_RALT, KC_APP, KC_RCTL, RESET + ), + + [1] = LAYOUT_all( + RESET, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, + 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_RBRC, KC_BSPC, + KC_MPLY, 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_BSLS, KC_ENT, + KC_MNXT, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_BSLS, + KC_MPRV, KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_SPC, KC_SPC, KC_RGUI, KC_RALT, KC_APP, KC_RCTL, RESET + ), + + [2] = LAYOUT_all( + KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, + 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_RBRC, KC_BSPC, + KC_MPLY, 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_BSLS, KC_ENT, + KC_MNXT, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_BSLS, + KC_MPRV, KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_SPC, KC_SPC, KC_RGUI, KC_RALT, KC_APP, KC_RCTL, RESET + ), + + [3] = LAYOUT_all( + KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, + 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_RBRC, KC_BSPC, + KC_MPLY, 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_BSLS, KC_ENT, + KC_MNXT, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_BSLS, + KC_MPRV, KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_SPC, KC_SPC, KC_RGUI, KC_RALT, KC_APP, KC_RCTL, RESET + ), +}; + +bool encoder_update_user(uint8_t index, bool clockwise) { + if (clockwise) { + tap_code(KC_VOLU); + } + else { + tap_code(KC_VOLD); + } + return false; +} diff --git a/keyboards/nixkeyboards/day_off/readme.md b/keyboards/nixkeyboards/day_off/readme.md new file mode 100644 index 00000000000..5525de91cfe --- /dev/null +++ b/keyboards/nixkeyboards/day_off/readme.md @@ -0,0 +1,23 @@ +# Day Off Vial Support + +[More info at nixkeyboards.com](https://nixkeyboards.com/) + +* Keyboard Maintainer: [Schrobie](https://github.com/schrobie) +* Hardware Supported: Day Off PCBs, both solderable and hotswap +* Hardware Availability: [Nix Keyboards](https://nixkeyboards.com/) + +Make example for this keyboard (after setting up your build environment): + + make nixkeyboards/day_off:default + +Flashing example for this keyboard: + + make nixkeyboards/day_off:default:flash + +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). + +Enter the bootloader in 3 ways: + +* **Bootmagic reset**: Hold down the key at (0,1) in the matrix (usually the top left key or Escape) and plug in the keyboard +* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead +* **Keycode in layout**: Press the key mapped to `RESET` if it is available diff --git a/keyboards/nixkeyboards/day_off/rules.mk b/keyboards/nixkeyboards/day_off/rules.mk new file mode 100755 index 00000000000..05e63bf5b87 --- /dev/null +++ b/keyboards/nixkeyboards/day_off/rules.mk @@ -0,0 +1,19 @@ +# MCU name +MCU = atmega32u4 + +# Bootloader selection +BOOTLOADER = atmel-dfu + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite +MOUSEKEY_ENABLE = yes # Mouse keys +EXTRAKEY_ENABLE = yes # Audio control and System control +CONSOLE_ENABLE = no # Console for debug +COMMAND_ENABLE = no # Commands for debug and configuration +NKRO_ENABLE = yes # Enable N-Key Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +AUDIO_ENABLE = no # Audio output +ENCODER_ENABLE = yes diff --git a/keyboards/preonic/keymaps/rmeli/config.h b/keyboards/preonic/keymaps/rmeli/config.h new file mode 100644 index 00000000000..6f8b8b6c70f --- /dev/null +++ b/keyboards/preonic/keymaps/rmeli/config.h @@ -0,0 +1,45 @@ +/* Copyright 2015-2021 Jack Humbert + * + * 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 . + */ + +#pragma once + +#ifdef AUDIO_ENABLE +# define STARTUP_SONG SONG(PREONIC_SOUND) +// #define STARTUP_SONG SONG(NO_SOUND) + +# define DEFAULT_LAYER_SONGS \ + { SONG(QWERTY_SOUND), SONG(COLEMAK_SOUND), SONG(DVORAK_SOUND) } +#endif + +#define MUSIC_MASK (keycode != KC_NO) + +/* + * MIDI options + */ + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ + +#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED diff --git a/keyboards/preonic/keymaps/rmeli/keymap.c b/keyboards/preonic/keymaps/rmeli/keymap.c new file mode 100644 index 00000000000..da6269129e8 --- /dev/null +++ b/keyboards/preonic/keymaps/rmeli/keymap.c @@ -0,0 +1,231 @@ +/* Copyright 2015-2021 Jack Humbert + * Copyright 2022 Rocco Meli <@RMeli> + * + * 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 . + */ + +#include QMK_KEYBOARD_H +#include "muse.h" + +#include "rmeli.h" + +enum preonic_layers { _QWERTY, _COLEMAK, _LOWER, _RAISE, _ADJUST }; +enum preonic_keycodes { QWERTY = SAFE_RANGE, COLEMAK, LOWER, RAISE, BACKLIT }; + +#define ____________________BOTTOM_L_x6_____________________ BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC +#define ____________________BOTTOM_R_x6_____________________ KC_ENT, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT + +/* LAYOUT + * + * ,-----------------------------------------------------------. + * | | | | | | | | | | | | | + * |----+----+----+----+----+----+----+----+----+----+----+----| + * | | | | | | | | | | | | | + * |----+----+----+----+----+----+----+----+----+----+----+----| + * | | | | | | | | | | | | | + * |----+----+----+----+----+----+----+----+----+----+----+----| + * | | | | | | | | | | | | | + * |----+----+----+----+----+----+----+----+----+----+----+----| + * | | | | | | | | | | | | | + * `----+----+----+----+----+----+----+----+----+----+----+----' + */ + +// Define wrapper for standard CRKB layout +#define LAYOUT_wrapper(...) LAYOUT_preonic_grid(__VA_ARGS__) + +// clang-format off +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +[_QWERTY] = LAYOUT_wrapper( + ___________________NUMBER_LEFT_x6___________________, ___________________NUMBER_RIGHT_x6__________________, + ___________________QWERTY_L1_x6_____________________, ___________________QWERTY_R1_x6_____________________, + ___________________QWERTY_L2_x6_____________________, ___________________QWERTY_R2_x6_____________________, + ___________________QWERTY_L3_x6_____________________, ___________________QWERTY_R3_x6_____________________, + ____________________BOTTOM_L_x6_____________________, ____________________BOTTOM_R_x6_____________________ +), + +[_COLEMAK] = LAYOUT_wrapper( + ___________________NUMBER_LEFT_x6___________________, ___________________NUMBER_RIGHT_x6__________________, + ________________COLEMAK_MOD_DH_L1_x6________________, ________________COLEMAK_MOD_DH_R1_x6________________, + ________________COLEMAK_MOD_DH_L2_x6________________, ________________COLEMAK_MOD_DH_R2_x6________________, + ________________COLEMAK_MOD_DH_L3_x6________________, ________________COLEMAK_MOD_DH_R3_x6________________, + ____________________BOTTOM_L_x6_____________________, ____________________BOTTOM_R_x6_____________________ +), + +[_LOWER] = LAYOUT_wrapper( + ____________________FUNC_LEFT_x6____________________, ____________________FUNC_RIGHT_x6___________________, + ___________________NUMBER_LEFT_x6___________________, ___________________NUMBER_RIGHT_x6__________________, + _______, ______________UNICODE_L2_x5________________, ________________NAV_R2_x5__________________, XXXXXXX, + _______, ______________UNICODE_L3_x5________________, ________________NAV_R3_x5__________________, _______, + ______________________BLANK_6x______________________, ______________________BLANK_6x______________________ +), + +[_RAISE] = LAYOUT_wrapper( + ___________________NUMBER_LEFT_x6___________________, ___________________NUMBER_RIGHT_x6__________________, + ___________________SYMBOL_LEFT_x6___________________, ___________________SYMBOL_RIGHT_x6__________________, + _______, ____________NAV_VIM_x4____________, XXXXXXX, ____________________SYMBOL_R2_x6____________________, + _______, _________________NONE_5x___________________, ____________________SYMBOL_R3_x6____________________, + ______________________BLANK_6x______________________, ______________________BLANK_6x______________________ +), + +[_ADJUST] = LAYOUT_wrapper( + QK_BOOT, _________________NONE_5x___________________, ______________________NONE_6x_______________________, + XXXXXXX, MU_ON, AU_ON, MI_ON, XXXXXXX, XXXXXXX, _______________CONFIG_R1_x5________________, QWERTY, + RESET, MU_MOD, AU_TOG, MI_TOG, XXXXXXX, XXXXXXX, _______________CONFIG_R2_x5________________, XXXXXXX, + XXXXXXX, MU_OFF, AU_OFF, MI_OFF, XXXXXXX, XXXXXXX, _______________CONFIG_R3_x5________________, COLEMAK, + ______________________BLANK_6x______________________, ______________________BLANK_6x______________________ +) +}; +// clang-format on + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + set_single_persistent_default_layer(_QWERTY); + } + return false; + break; + case COLEMAK: + if (record->event.pressed) { + set_single_persistent_default_layer(_COLEMAK); + } + return false; + break; + case LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case BACKLIT: + if (record->event.pressed) { + register_code(KC_RSFT); +#ifdef BACKLIGHT_ENABLE + backlight_step(); +#endif +#ifdef RGBLIGHT_ENABLE + rgblight_step(); +#endif +#ifdef __AVR__ + writePinLow(E6); +#endif + } else { + unregister_code(KC_RSFT); +#ifdef __AVR__ + writePinHigh(E6); +#endif + } + return false; + break; + } + return true; +}; + +bool muse_mode = false; +uint8_t last_muse_note = 0; +uint16_t muse_counter = 0; +uint8_t muse_offset = 70; +uint16_t muse_tempo = 50; + +bool encoder_update_user(uint8_t index, bool clockwise) { + if (muse_mode) { + if (IS_LAYER_ON(_RAISE)) { + if (clockwise) { + muse_offset++; + } else { + muse_offset--; + } + } else { + if (clockwise) { + muse_tempo += 1; + } else { + muse_tempo -= 1; + } + } + } else { + if (clockwise) { + register_code(KC_PGDN); + unregister_code(KC_PGDN); + } else { + register_code(KC_PGUP); + unregister_code(KC_PGUP); + } + } + return true; +} + +bool dip_switch_update_user(uint8_t index, bool active) { + switch (index) { + case 0: + if (active) { + layer_on(_ADJUST); + } else { + layer_off(_ADJUST); + } + break; + case 1: + if (active) { + muse_mode = true; + } else { + muse_mode = false; + } + } + return true; +} + +void matrix_scan_user(void) { +#ifdef AUDIO_ENABLE + if (muse_mode) { + if (muse_counter == 0) { + uint8_t muse_note = muse_offset + SCALE[muse_clock_pulse()]; + if (muse_note != last_muse_note) { + stop_note(compute_freq_for_midi_note(last_muse_note)); + play_note(compute_freq_for_midi_note(muse_note), 0xF); + last_muse_note = muse_note; + } + } + muse_counter = (muse_counter + 1) % muse_tempo; + } else { + if (muse_counter) { + stop_all_notes(); + muse_counter = 0; + } + } +#endif +} + +bool music_mask_user(uint16_t keycode) { + switch (keycode) { + case RAISE: + case LOWER: + return false; + default: + return true; + } +} diff --git a/keyboards/preonic/keymaps/rmeli/readme.md b/keyboards/preonic/keymaps/rmeli/readme.md new file mode 100644 index 00000000000..e911968dd96 --- /dev/null +++ b/keyboards/preonic/keymaps/rmeli/readme.md @@ -0,0 +1 @@ +# The default Preonic layout - largely based on the Planck's \ No newline at end of file diff --git a/keyboards/preonic/keymaps/rmeli/rules.mk b/keyboards/preonic/keymaps/rmeli/rules.mk new file mode 100644 index 00000000000..3903cc12281 --- /dev/null +++ b/keyboards/preonic/keymaps/rmeli/rules.mk @@ -0,0 +1,12 @@ +TAP_DANCE_ENABLE = yes +AUTO_SHIFT_ENABLE = no + +MAGIC_ENABLE = yes + +UNICODEMAP_ENABLE = yes + +# Turn off rev3_drop options +RGBLIGHT_ENABLE = no +MOUSEKEY_ENABLE = no + +SRC += muse.c diff --git a/keyboards/splitkb/kyria/keymaps/ericgebhart/config.h b/keyboards/splitkb/kyria/keymaps/ericgebhart/config.h new file mode 100755 index 00000000000..6f7578aa5d6 --- /dev/null +++ b/keyboards/splitkb/kyria/keymaps/ericgebhart/config.h @@ -0,0 +1,25 @@ +/* +This is the c configuration file for the keymap + +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert + +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 . +*/ + +#pragma once + +// otherwise the other promicro v3 isn't found +#define SPLIT_USB_DETECT +#define OLED_DISPLAY_128X64 diff --git a/keyboards/splitkb/kyria/keymaps/ericgebhart/keymap.c b/keyboards/splitkb/kyria/keymaps/ericgebhart/keymap.c new file mode 100644 index 00000000000..c534fe3c6d3 --- /dev/null +++ b/keyboards/splitkb/kyria/keymaps/ericgebhart/keymap.c @@ -0,0 +1,18 @@ +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ + +// See: users/ericgebhart. diff --git a/keyboards/splitkb/kyria/keymaps/ericgebhart/rules.mk b/keyboards/splitkb/kyria/keymaps/ericgebhart/rules.mk new file mode 100644 index 00000000000..1946c18729a --- /dev/null +++ b/keyboards/splitkb/kyria/keymaps/ericgebhart/rules.mk @@ -0,0 +1,3 @@ +EXTRAKEY_ENABLE = no # Audio control and System control +ENCODER_ENABLE = no # Enables the use of one or more encoders +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow diff --git a/keyboards/xiudi/xd75/keymaps/ericgebhart/keymap.c b/keyboards/xiudi/xd75/keymaps/ericgebhart/keymap.c index a500e4b682e..c534fe3c6d3 100644 --- a/keyboards/xiudi/xd75/keymaps/ericgebhart/keymap.c +++ b/keyboards/xiudi/xd75/keymaps/ericgebhart/keymap.c @@ -1,5 +1,5 @@ /* - Copyright 2018 Eric Gebhart + Copyright 2018-2022 Eric Gebhart 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 @@ -15,125 +15,4 @@ along with this program. If not, see . */ -#include "keymap_bepo.h" -#include "ericgebhart.h" - - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - // 4x10 - [_DVORAK] = BASE_5x15(___NUMS___, ___DVORAK___), - [_QWERTY] = BASE_5x15(___NUMS___, ___QWERTY___), - [_COLEMAK] = BASE_5x15(___NUMS___, ___COLEMAK_DH___), - [_BEAKL] = BASE_5x15(___BKLNUMS___, ___BEAKL15___), - - //[_DVORAK_BP] = BASE_5x15_bepo(___DVORAK_FR___), - //[_BEAKL_BP] = BASE_5x15_bepo(___BEAKL15_FR___), - - // 4x12 - //[_BEPO] = BASE_5x15_bepo6(___BEPO6_FR___), - - // transient macro takes a 4x12 for args - [_SYMB] = TRANSIENT_5x15(___12___, ___SYMB_BEAKLA_3x12___), - //[_SYMB_BP] = TRANSIENT_5x15(___12___, ___SYMB_BEAKLA_BP_3x12___), - - [_TOPROWS] = TRANSIENT_5x15(___12___, ___TOPROWS_3x12___), - //[_TOPROWS_BP] = TRANSIENT_5x15(___12___, ___TOPROWS_BP_3x12___), - - [_KEYPAD] = TRANSIENT_5x15(___12___, ___KP_C_3x12___), - //[_KEYPAD_BP] = TRANSIENT_5x15(___12___, ___KP_C_BP_3x12___), - - // Navigation and control - [_NAV] = TRANSIENT_5x15(___12___, ___NAV_3x12___), - [_LAYERS] = TRANSIENT_5x15(___12___, ___LAYERS_3x12___), - //[_RGB] = TRANSIENT_5x15(___12___, ___RGB_3x12___), - [_ADJUST] = TRANSIENT_5x15(___12___, ___ADJUST_3x12___), -}; - - -/********************************************************************************/ -/* Using layers to do RGB underlighting */ -/********************************************************************************/ - -const rgblight_segment_t PROGMEM on_bepo[] = RGBLIGHT_LAYER_SEGMENTS( - {0, 2, HSV_AZURE} - ); - -const rgblight_segment_t PROGMEM bepo[] = RGBLIGHT_LAYER_SEGMENTS( - {3, 2, HSV_MAGENTA} - ); - -const rgblight_segment_t PROGMEM dvorak[] = RGBLIGHT_LAYER_SEGMENTS( - {3, 2, HSV_AZURE} - ); - -const rgblight_segment_t PROGMEM media[] = RGBLIGHT_LAYER_SEGMENTS( - {5, 1, HSV_GREEN} - ); - -const rgblight_segment_t PROGMEM symbol[] = RGBLIGHT_LAYER_SEGMENTS( - {4, 2, HSV_GOLD} - ); - -const rgblight_segment_t PROGMEM keypad[] = RGBLIGHT_LAYER_SEGMENTS( - {4, 2, HSV_BLUE} - ); - -const rgblight_segment_t PROGMEM layers[] = RGBLIGHT_LAYER_SEGMENTS( - {5, 1, HSV_RED} - ); - -const rgblight_segment_t PROGMEM rgb[] = RGBLIGHT_LAYER_SEGMENTS( - {5, 1, HSV_ORANGE} - ); - -const rgblight_segment_t* const PROGMEM rgb_layers[] = RGBLIGHT_LAYERS_LIST(on_bepo, bepo, dvorak, media, symbol, - keypad, layers, rgb); - -void keyboard_post_init_user(void) { - rgblight_sethsv_noeeprom(HSV_PURPLE); - rgblight_layers = rgb_layers; -} - -layer_state_t layer_state_set_user(layer_state_t state) { - // rgblight_set_layer_state(0, !on_qwerty()); - rgblight_set_layer_state(0, layer_state_cmp(state, _DVORAK)); - - rgblight_set_layer_state(1, layer_state_cmp(state, _BEPO)); - rgblight_set_layer_state(2, layer_state_cmp(state, _DVORAK)); - //|| layer_state_cmp(state, DVORAK_ON_BEPO))); - rgblight_set_layer_state(3, layer_state_cmp(state, _NAV)); - rgblight_set_layer_state(4, layer_state_cmp(state, _SYMB) ); - - //(layer_state_cmp(state, SYMB) || (layer_state_cmp(state, SYMB_ON_BEPO)))); - rgblight_set_layer_state(5, layer_state_cmp(state, _KEYPAD) ); - ///(layer_state_cmp(state, KEYPAD) || (layer_state_cmp(state, KEYPAD_ON_BEPO)))); - rgblight_set_layer_state(6, layer_state_cmp(state, _LAYERS)); - rgblight_set_layer_state(7, layer_state_cmp(state, _RGB)); - return state; -} - -/* void suspend_power_down_user(void) { */ -/* rgblight_disable(); */ -/* } */ - -/* void suspend_wakeup_init_user(void) { */ -/* rgblight_enable(); */ -/* } */ - -/* bool is_shift_pressed = false; */ - -/* bool led_update_user(led_t led_state) { */ -/* rgblight_set_layer_state(2, is_shift_pressed != led_state.caps_lock); */ -/* return true; */ -/* } */ - -/* bool process_record_user(uint16_t keycode, keyrecord_t* record) { */ -/* switch (keycode) { */ -/* case KC_LSFT: */ -/* case KC_RSFT: */ -/* is_shift_pressed = record->event.pressed; */ -/* rgblight_set_layer_state(2, is_shift_pressed != host_keyboard_led_state().caps_lock); */ -/* default: */ -/* return true; */ -/* } */ -/* } */ +// See: users/ericgebhart. diff --git a/keyboards/xiudi/xd75/keymaps/ericgebhart/readme.md b/keyboards/xiudi/xd75/keymaps/ericgebhart/readme.md deleted file mode 100644 index a1c0236ed9c..00000000000 --- a/keyboards/xiudi/xd75/keymaps/ericgebhart/readme.md +++ /dev/null @@ -1 +0,0 @@ -# The default keymap for xd75, with led controls \ No newline at end of file diff --git a/keyboards/xiudi/xd75/keymaps/ericgebhart/rules.mk b/keyboards/xiudi/xd75/keymaps/ericgebhart/rules.mk index 11871f9c9da..f171387f291 100644 --- a/keyboards/xiudi/xd75/keymaps/ericgebhart/rules.mk +++ b/keyboards/xiudi/xd75/keymaps/ericgebhart/rules.mk @@ -1,3 +1,3 @@ RGBLIGHT_ENABLE = yes -RGBLIGHT_ANIMATION = yes +RGBLIGHT_ANIMATION = no # BACKLIGHT_ENABLE = yes diff --git a/quantum/digitizer.c b/quantum/digitizer.c index 7925129d0cb..f1b926181ef 100644 --- a/quantum/digitizer.c +++ b/quantum/digitizer.c @@ -13,26 +13,64 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ + #include "digitizer.h" -digitizer_t digitizerReport = {.tipswitch = 0, .inrange = 0, .id = 0, .x = 0, .y = 0, .status = DZ_INITIALIZED}; +digitizer_t digitizer_state = { + .in_range = false, + .tip = false, + .barrel = false, + .x = 0, + .y = 0, + .dirty = false, +}; -__attribute__((weak)) void digitizer_send(void) { - if (digitizerReport.status & DZ_UPDATED) { - host_digitizer_send(&digitizerReport); - digitizerReport.status &= ~DZ_UPDATED; +void digitizer_flush(void) { + if (digitizer_state.dirty) { + host_digitizer_send(&digitizer_state); + digitizer_state.dirty = false; } } -__attribute__((weak)) void digitizer_task(void) { - digitizer_send(); +void digitizer_in_range_on(void) { + digitizer_state.in_range = true; + digitizer_state.dirty = true; + digitizer_flush(); } -digitizer_t digitizer_get_report(void) { - return digitizerReport; +void digitizer_in_range_off(void) { + digitizer_state.in_range = false; + digitizer_state.dirty = true; + digitizer_flush(); } -void digitizer_set_report(digitizer_t newDigitizerReport) { - digitizerReport = newDigitizerReport; - digitizerReport.status |= DZ_UPDATED; -} \ No newline at end of file +void digitizer_tip_switch_on(void) { + digitizer_state.tip = true; + digitizer_state.dirty = true; + digitizer_flush(); +} + +void digitizer_tip_switch_off(void) { + digitizer_state.tip = false; + digitizer_state.dirty = true; + digitizer_flush(); +} + +void digitizer_barrel_switch_on(void) { + digitizer_state.barrel = true; + digitizer_state.dirty = true; + digitizer_flush(); +} + +void digitizer_barrel_switch_off(void) { + digitizer_state.barrel = false; + digitizer_state.dirty = true; + digitizer_flush(); +} + +void digitizer_set_position(float x, float y) { + digitizer_state.x = x; + digitizer_state.y = y; + digitizer_state.dirty = true; + digitizer_flush(); +} diff --git a/quantum/digitizer.h b/quantum/digitizer.h index cef551567e0..b826ba8ac87 100644 --- a/quantum/digitizer.h +++ b/quantum/digitizer.h @@ -17,25 +17,70 @@ #include "quantum.h" +#include #include -enum digitizer_status { DZ_INITIALIZED = 1, DZ_UPDATED = 2 }; +/** + * \defgroup digitizer + * + * HID Digitizer + * \{ + */ typedef struct { - int8_t tipswitch; - int8_t inrange; - uint8_t id; - float x; - float y; - uint8_t status : 2; + bool in_range : 1; + bool tip : 1; + bool barrel : 1; + float x; + float y; + bool dirty; } digitizer_t; -extern digitizer_t digitizer; +extern digitizer_t digitizer_state; -digitizer_t digitizer_get_report(void); +/** + * \brief Send the digitizer report to the host if it is marked as dirty. + */ +void digitizer_flush(void); -void digitizer_set_report(digitizer_t newDigitizerReport); +/** + * \brief Assert the "in range" indicator, and flush the report. + */ +void digitizer_in_range_on(void); -void digitizer_task(void); +/** + * \brief Deassert the "in range" indicator, and flush the report. + */ +void digitizer_in_range_off(void); + +/** + * \brief Assert the tip switch, and flush the report. + */ +void digitizer_tip_switch_on(void); + +/** + * \brief Deassert the tip switch, and flush the report. + */ +void digitizer_tip_switch_off(void); + +/** + * \brief Assert the barrel switch, and flush the report. + */ +void digitizer_barrel_switch_on(void); + +/** + * \brief Deassert the barrel switch, and flush the report. + */ +void digitizer_barrel_switch_off(void); + +/** + * \brief Set the absolute X and Y position of the digitizer contact, and flush the report. + * + * \param x The X value of the contact position, from 0 to 1. + * \param y The Y value of the contact position, from 0 to 1. + */ +void digitizer_set_position(float x, float y); void host_digitizer_send(digitizer_t *digitizer); + +/** \} */ diff --git a/quantum/keyboard.c b/quantum/keyboard.c index eb5e4b583a9..83ade7829ae 100644 --- a/quantum/keyboard.c +++ b/quantum/keyboard.c @@ -90,9 +90,6 @@ along with this program. If not, see . #if defined(CRC_ENABLE) # include "crc.h" #endif -#ifdef DIGITIZER_ENABLE -# include "digitizer.h" -#endif #ifdef VIRTSER_ENABLE # include "virtser.h" #endif @@ -662,10 +659,6 @@ void keyboard_task(void) { joystick_task(); #endif -#ifdef DIGITIZER_ENABLE - digitizer_task(); -#endif - #ifdef BLUETOOTH_ENABLE bluetooth_task(); #endif diff --git a/quantum/quantum.h b/quantum/quantum.h index 7c4f2c48c68..438a7081066 100644 --- a/quantum/quantum.h +++ b/quantum/quantum.h @@ -207,6 +207,10 @@ extern layer_state_t layer_state; # include "joystick.h" #endif +#ifdef DIGITIZER_ENABLE +# include "digitizer.h" +#endif + #ifdef XAP_ENABLE # include "xap.h" #endif diff --git a/tmk_core/protocol/host.c b/tmk_core/protocol/host.c index b441d2d5d9a..5fee872326e 100644 --- a/tmk_core/protocol/host.c +++ b/tmk_core/protocol/host.c @@ -217,10 +217,11 @@ void host_digitizer_send(digitizer_t *digitizer) { # ifdef DIGITIZER_SHARED_EP .report_id = REPORT_ID_DIGITIZER, # endif - .tip = digitizer->tipswitch & 0x1, - .inrange = digitizer->inrange & 0x1, - .x = (uint16_t)(digitizer->x * 0x7FFF), - .y = (uint16_t)(digitizer->y * 0x7FFF), + .in_range = digitizer->in_range, + .tip = digitizer->tip, + .barrel = digitizer->barrel, + .x = (uint16_t)(digitizer->x * 0x7FFF), + .y = (uint16_t)(digitizer->y * 0x7FFF), }; send_digitizer(&report); diff --git a/tmk_core/protocol/report.h b/tmk_core/protocol/report.h index 8bc4a57c0c7..543c44e33c8 100644 --- a/tmk_core/protocol/report.h +++ b/tmk_core/protocol/report.h @@ -226,9 +226,10 @@ typedef struct { #ifdef DIGITIZER_SHARED_EP uint8_t report_id; #endif - uint8_t tip : 1; - uint8_t inrange : 1; - uint8_t pad2 : 6; + bool in_range : 1; + bool tip : 1; + bool barrel : 1; + uint8_t reserved : 5; uint16_t x; uint16_t y; } __attribute__((packed)) report_digitizer_t; diff --git a/tmk_core/protocol/usb_descriptor.c b/tmk_core/protocol/usb_descriptor.c index dfed4e813f3..ada7a8ac248 100644 --- a/tmk_core/protocol/usb_descriptor.c +++ b/tmk_core/protocol/usb_descriptor.c @@ -181,39 +181,37 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM DigitizerReport[] = { const USB_Descriptor_HIDReport_Datatype_t PROGMEM SharedReport[] = { # define SHARED_REPORT_STARTED # endif - HID_RI_USAGE_PAGE(8, 0x0D), // Digitizers - HID_RI_USAGE(8, 0x01), // Digitizer - HID_RI_COLLECTION(8, 0x01), // Application + HID_RI_USAGE_PAGE(8, 0x0D), // Digitizers + HID_RI_USAGE(8, 0x01), // Digitizer + HID_RI_COLLECTION(8, 0x01), // Application # ifdef DIGITIZER_SHARED_EP HID_RI_REPORT_ID(8, REPORT_ID_DIGITIZER), # endif - HID_RI_USAGE(8, 0x20), // Stylus - HID_RI_COLLECTION(8, 0x00), // Physical - // Tip Switch (1 bit) - HID_RI_USAGE(8, 0x42), // Tip Switch + HID_RI_USAGE(8, 0x20), // Stylus + HID_RI_COLLECTION(8, 0x00), // Physical + // In Range, Tip Switch & Barrel Switch (3 bits) + HID_RI_USAGE(8, 0x32), // In Range + HID_RI_USAGE(8, 0x42), // Tip Switch + HID_RI_USAGE(8, 0x44), // Barrel Switch HID_RI_LOGICAL_MINIMUM(8, 0x00), HID_RI_LOGICAL_MAXIMUM(8, 0x01), + HID_RI_REPORT_COUNT(8, 0x03), HID_RI_REPORT_SIZE(8, 0x01), - HID_RI_REPORT_COUNT(8, 0x01), - HID_RI_INPUT(8, HID_IOF_VARIABLE), - // In Range (1 bit) - HID_RI_USAGE(8, 0x32), // In Range - HID_RI_INPUT(8, HID_IOF_VARIABLE), - // Padding (6 bits) - HID_RI_REPORT_COUNT(8, 0x06), - HID_RI_INPUT(8, HID_IOF_CONSTANT | HID_IOF_VARIABLE), + HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), + // Padding (5 bits) + HID_RI_REPORT_COUNT(8, 0x05), + HID_RI_INPUT(8, HID_IOF_CONSTANT), // X/Y Position (4 bytes) - HID_RI_USAGE_PAGE(8, 0x01), // Generic Desktop + HID_RI_USAGE_PAGE(8, 0x01), // Generic Desktop + HID_RI_USAGE(8, 0x30), // X + HID_RI_USAGE(8, 0x31), // Y HID_RI_LOGICAL_MAXIMUM(16, 0x7FFF), + HID_RI_REPORT_COUNT(8, 0x02), HID_RI_REPORT_SIZE(8, 0x10), - HID_RI_REPORT_COUNT(8, 0x01), - HID_RI_UNIT(8, 0x33), // Inch, English Linear - HID_RI_UNIT_EXPONENT(8, 0x0E), // -2 - HID_RI_USAGE(8, 0x30), // X - HID_RI_INPUT(8, HID_IOF_VARIABLE), - HID_RI_USAGE(8, 0x31), // Y - HID_RI_INPUT(8, HID_IOF_VARIABLE), + HID_RI_UNIT(8, 0x33), // Inch, English Linear + HID_RI_UNIT_EXPONENT(8, 0x0E), // -2 + HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), HID_RI_END_COLLECTION(0), HID_RI_END_COLLECTION(0), # ifndef DIGITIZER_SHARED_EP diff --git a/tmk_core/protocol/vusb/vusb.c b/tmk_core/protocol/vusb/vusb.c index 7599a198586..fac2b792b4e 100644 --- a/tmk_core/protocol/vusb/vusb.c +++ b/tmk_core/protocol/vusb/vusb.c @@ -638,32 +638,30 @@ const PROGMEM uchar shared_hid_report[] = { 0x09, 0x01, // Usage (Digitizer) 0xA1, 0x01, // Collection (Application) 0x85, REPORT_ID_DIGITIZER, // Report ID - 0x09, 0x22, // Usage (Finger) + 0x09, 0x20, // Usage (Stylus) 0xA1, 0x00, // Collection (Physical) - // Tip Switch (1 bit) + // In Range, Tip Switch & Barrel Switch (3 bits) + 0x09, 0x32, // Usage (In Range) 0x09, 0x42, // Usage (Tip Switch) + 0x09, 0x44, // Usage (Barrel Switch) 0x15, 0x00, // Logical Minimum 0x25, 0x01, // Logical Maximum - 0x95, 0x01, // Report Count (1) - 0x75, 0x01, // Report Size (16) + 0x95, 0x03, // Report Count (3) + 0x75, 0x01, // Report Size (1) 0x81, 0x02, // Input (Data, Variable, Absolute) - // In Range (1 bit) - 0x09, 0x32, // Usage (In Range) - 0x81, 0x02, // Input (Data, Variable, Absolute) - // Padding (6 bits) - 0x95, 0x06, // Report Count (6) + // Padding (5 bits) + 0x95, 0x05, // Report Count (5) 0x81, 0x03, // Input (Constant) // X/Y Position (4 bytes) 0x05, 0x01, // Usage Page (Generic Desktop) + 0x09, 0x30, // Usage (X) + 0x09, 0x31, // Usage (Y) 0x26, 0xFF, 0x7F, // Logical Maximum (32767) - 0x95, 0x01, // Report Count (1) + 0x95, 0x02, // Report Count (2) 0x75, 0x10, // Report Size (16) 0x65, 0x33, // Unit (Inch, English Linear) 0x55, 0x0E, // Unit Exponent (-2) - 0x09, 0x30, // Usage (X) - 0x81, 0x02, // Input (Data, Variable, Absolute) - 0x09, 0x31, // Usage (Y) 0x81, 0x02, // Input (Data, Variable, Absolute) 0xC0, // End Collection 0xC0, // End Collection diff --git a/users/ericgebhart/altlocal_keys.c b/users/ericgebhart/altlocal_keys.c deleted file mode 100755 index 285041b418a..00000000000 --- a/users/ericgebhart/altlocal_keys.c +++ /dev/null @@ -1,94 +0,0 @@ -/* - Copyright 2018 Eric Gebhart - - 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 . -*/ - -#include "ericgebhart.h" -#include "altlocal_keys.h" - -#include "keymap_bepo.h" - -// These are the keys for dvorak on bepo. column one is the keycode and mods for -// the unshifted key, the second column is the keycode and mods for the shifted key. -// GR is Good Range. It subtracts SAFE_RANGE from the keycode so we can make a -// reasnably sized array without difficulties. The macro is for the constant declarations -// the function is for when we use it. -const uint16_t key_translations[][2][2] = { - [GR(DB_1)] = {{BP_DQUO, MOD_LSFT}, {BP_DCIR, MOD_LSFT}}, - [GR(DB_2)] = {{BP_LDAQ, MOD_LSFT}, {BP_AT, MOD_NONE}}, - [GR(DB_3)] = {{BP_RDAQ, MOD_LSFT}, {BP_DLR, MOD_LSFT}}, - [GR(DB_4)] = {{BP_LPRN, MOD_LSFT}, {BP_DLR, MOD_NONE}}, - [GR(DB_5)] = {{BP_RPRN, MOD_LSFT}, {BP_PERC, MOD_NONE}}, - [GR(DB_6)] = {{BP_AT, MOD_LSFT}, {BP_AT, MOD_BIT(KC_RALT)}}, - [GR(DB_7)] = {{BP_PLUS, MOD_LSFT}, {BP_P, MOD_BIT(KC_RALT)}}, - [GR(DB_8)] = {{BP_MINS, MOD_LSFT}, {BP_ASTR, MOD_NONE}}, - [GR(DB_9)] = {{BP_SLSH, MOD_LSFT}, {BP_LPRN, MOD_NONE}}, - [GR(DB_0)] = {{BP_ASTR, MOD_LSFT}, {BP_RPRN, MOD_NONE}}, - [GR(DB_GRV)] = {{BP_PERC, MOD_LSFT}, {BP_K, MOD_BIT(KC_RALT)}}, - [GR(DB_SCOLON)] = {{BP_COMM, MOD_LSFT}, {BP_DOT, MOD_LSFT}}, - [GR(DB_SLASH)] = {{BP_SLSH, MOD_NONE}, {BP_QUOT, MOD_LSFT}}, - [GR(DB_BACKSLASH)] = {{BP_AGRV, MOD_BIT(KC_RALT)}, {BP_B, MOD_BIT(KC_RALT)}}, - [GR(DB_EQL)] = {{BP_EQL, MOD_NONE}, {BP_PLUS, MOD_NONE}}, - [GR(DB_COMM)] = {{BP_COMM, MOD_NONE}, {BP_LDAQ, MOD_BIT(KC_RALT)}}, - [GR(DB_DOT)] = {{BP_DOT, MOD_NONE}, {BP_RDAQ, MOD_BIT(KC_RALT)}}, - [GR(DB_QUOT)] = {{BP_QUOT, MOD_NONE}, {BP_DQUO, MOD_NONE}}, - [GR(DB_MINUS)] = {{BP_MINS, MOD_NONE}, {KC_SPC, MOD_BIT(KC_RALT)}}, - [GR(DB_LPRN)] = {{BP_LPRN, MOD_NONE}, {BP_LPRN, MOD_BIT(KC_RALT)}}, - [GR(DB_RPRN)] = {{BP_RPRN, MOD_NONE}, {BP_RPRN, MOD_BIT(KC_RALT)}}, - [GR(DB_LBRC)] = {{BP_Y, MOD_BIT(KC_RALT)}, {BP_LPRN, MOD_BIT(KC_RALT)}}, - [GR(DB_RBRC)] = {{BP_X, MOD_BIT(KC_RALT)}, {BP_RPRN, MOD_BIT(KC_RALT)}}, - // For the symbol layer - [GR(DB_HASH)] = {{BP_DLR, MOD_LSFT}, {BP_DLR, MOD_LSFT}}, - [GR(DB_LCBR)] = {{BP_LPRN, MOD_BIT(KC_RALT)}, {BP_LPRN, MOD_BIT(KC_RALT)}}, - [GR(DB_RCBR)] = {{BP_LPRN, MOD_BIT(KC_RALT)}, {BP_RPRN, MOD_BIT(KC_RALT)}}, - [GR(DB_PIPE)] = {{BP_B, MOD_BIT(KC_RALT)}, {BP_B, MOD_BIT(KC_RALT)}}, - [GR(DB_TILD)] = {{BP_K, MOD_BIT(KC_RALT)}, {BP_K, MOD_BIT(KC_RALT)}}, - [GR(DB_CIRC)] = {{BP_AT, MOD_BIT(KC_RALT)}, {BP_AT, MOD_BIT(KC_RALT)}}, - [GR(DB_LESS)] = {{BP_LDAQ, MOD_BIT(KC_RALT)}, {BP_LDAQ, MOD_BIT(KC_RALT)}}, - [GR(DB_GRTR)] = {{BP_RDAQ, MOD_BIT(KC_RALT)}, {BP_RDAQ, MOD_BIT(KC_RALT)}}, - // Keys for BEAKL on Qwerty - [GR(BQ_COMM)] = {{KC_COMMA, MOD_NONE}, {KC_1, MOD_LSFT}}, - [GR(BQ_DOT)] = {{KC_DOT, MOD_NONE}, {KC_2, MOD_LSFT}}, - [GR(BQ_QUOT)] = {{KC_QUOT, MOD_NONE}, {KC_GRV, MOD_NONE}}, -}; - - -uint8_t gr(uint16_t kc){ - return (kc - SAFE_RANGE); -} -// send the right keycode for the right mod. -// remove the mods we are taking care of, -// send our keycodes then restore them. -// all so we can make dvorak keys from bepo keycodes. -void send_keycode(uint16_t kc){ - uint8_t tmp_mods = get_mods(); - bool is_shifted = ( tmp_mods & (MOD_BIT(KC_LSFT)|MOD_BIT(KC_RSFT)) ); - //uint8_t key[2][2] = key_translations[GR(kc)]; - // need to turn of the shift if it is on. - unregister_mods((MOD_BIT(KC_LSFT)|MOD_BIT(KC_RSFT))); - if(is_shifted){ - register_mods(SHIFTED_MODS(kc)); - register_code(SHIFTED_KEY(kc)); - unregister_code(SHIFTED_KEY(kc)); - unregister_mods(SHIFTED_MODS(kc)); - } else{ - register_mods(UNSHIFTED_MODS(kc)); - register_code(UNSHIFTED_KEY(kc)); - unregister_code(UNSHIFTED_KEY(kc)); - unregister_mods(UNSHIFTED_MODS(kc)); - } - clear_mods(); - register_mods(tmp_mods); -} diff --git a/users/ericgebhart/base_layers/accents.h b/users/ericgebhart/base_layers/accents.h new file mode 100644 index 00000000000..ad575da65cb --- /dev/null +++ b/users/ericgebhart/base_layers/accents.h @@ -0,0 +1,90 @@ +#pragma once +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ + +// 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 00000000000..28cf5ab738d --- /dev/null +++ b/users/ericgebhart/base_layers/alt.h @@ -0,0 +1,150 @@ +#pragma once +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ +// 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 00000000000..ee784473fb4 --- /dev/null +++ b/users/ericgebhart/base_layers/base_layers.h @@ -0,0 +1,58 @@ +#pragma once +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ + +#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 00000000000..58b5fa43714 --- /dev/null +++ b/users/ericgebhart/base_layers/beakl.h @@ -0,0 +1,158 @@ +#pragma once +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ +// 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 00000000000..64f56ec9abf --- /dev/null +++ b/users/ericgebhart/base_layers/bepo.h @@ -0,0 +1,114 @@ +#pragma once +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ +// 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 00000000000..ae2ed708a57 --- /dev/null +++ b/users/ericgebhart/base_layers/carpalx.h @@ -0,0 +1,46 @@ +#pragma once +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ +#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 00000000000..8deee2005c5 --- /dev/null +++ b/users/ericgebhart/base_layers/dvorak.h @@ -0,0 +1,73 @@ +#pragma once +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ + +#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 00000000000..76310bc6f96 --- /dev/null +++ b/users/ericgebhart/base_layers/gap.h @@ -0,0 +1,67 @@ +#pragma once +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ + +// 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 00000000000..0841a358d20 --- /dev/null +++ b/users/ericgebhart/base_layers/hands_down.h @@ -0,0 +1,147 @@ +#pragma once +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ + +// 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 00000000000..56dc7d79e37 --- /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 00000000000..6f78819421a --- /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 00000000000..47aead197cc --- /dev/null +++ b/users/ericgebhart/base_layers/qwerty.h @@ -0,0 +1,69 @@ +#pragma once +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ + +// 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 00000000000..ba32118537b --- /dev/null +++ b/users/ericgebhart/base_layers/toprows.h @@ -0,0 +1,56 @@ +#pragma once +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ +/*******************************************************************/ +/** 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 diff --git a/users/ericgebhart/caps_word.c b/users/ericgebhart/caps_word.c deleted file mode 100644 index ba81c15d66b..00000000000 --- a/users/ericgebhart/caps_word.c +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// -// For full documentation, see -// https://getreuer.info/posts/keyboards/caps-word - -#include "caps_word.h" - -bool process_caps_word(uint16_t keycode, keyrecord_t* record) { - static bool caps_word_enabled = false; - static bool shifted = false; -#ifndef NO_ACTION_ONESHOT - const uint8_t mods = get_mods() | get_oneshot_mods(); -#else - const uint8_t mods = get_mods(); -#endif // NO_ACTION_ONESHOT - - if (!caps_word_enabled) { - // Pressing both shift keys at the same time enables caps word. - if ((mods & MOD_MASK_SHIFT) == MOD_MASK_SHIFT) { - clear_mods(); -#ifndef NO_ACTION_ONESHOT - clear_oneshot_mods(); -#endif // NO_ACTION_ONESHOT - shifted = false; - caps_word_enabled = true; - return false; - } - return true; - } - - if (!record->event.pressed) { return true; } - - if (!(mods & ~MOD_MASK_SHIFT)) { - switch (keycode) { - case QK_MOD_TAP ... QK_MOD_TAP_MAX: - case QK_LAYER_TAP ... QK_LAYER_TAP_MAX: - // Earlier return if this has not been considered tapped yet. - if (record->tap.count == 0) { return true; } - // Get the base tapping keycode of a mod- or layer-tap key. - keycode &= 0xff; - } - - switch (keycode) { - // Letter keys should be shifted. - case KC_A ... KC_Z: - if (!shifted) { register_code(KC_LSFT); } - shifted = true; - return true; - - // Keycodes that continue caps word but shouldn't get shifted. - case KC_1 ... KC_0: - case KC_BSPC: - case KC_MINS: - case KC_UNDS: - if (shifted) { unregister_code(KC_LSFT); } - shifted = false; - return true; - - // Any other keycode disables caps word. - } - } - - // Disable caps word. - caps_word_enabled = false; - if (shifted) { unregister_code(KC_LSFT); } - shifted = false; - return true; -} diff --git a/users/ericgebhart/caps_word.h b/users/ericgebhart/caps_word.h deleted file mode 100644 index a59b2e4338c..00000000000 --- a/users/ericgebhart/caps_word.h +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// -// Caps Word, activated by pressing both shift keys at the same time. -// -// This library implements "Caps Word", which is like conventional Caps Lock, -// but automatically disables itself at the end of the word. This is useful for -// typing all-caps identifiers like `MOD_MASK_ALT`. -// -// Caps Word is activated by pressing the left and right shift keys at the same -// time. This way you don't need a dedicated key for using Caps Word. I've -// tested that this works as expected with one-shot mods and Space Cadet Shift. -// If your shift keys are mod-taps, activate Caps Word by holding both shift -// mod-tap keys until the tapping term, release them, then begin typing. -// -// For full documentation, see -// https://getreuer.info/posts/keyboards/caps-word - -#pragma once - -#include QMK_KEYBOARD_H - -bool process_caps_word(uint16_t keycode, keyrecord_t* record); diff --git a/users/ericgebhart/combos.def b/users/ericgebhart/combos.def deleted file mode 100644 index 9b5f2c8a9e7..00000000000 --- a/users/ericgebhart/combos.def +++ /dev/null @@ -1,10 +0,0 @@ -// name result chord keys -COMB(LNAV, TG(_NAV), SPC_TOPR, ENT_NAV) -COMB(OSLSYM, OSL(_SYMB), ESC_TOPR, BSPC_SYMB) -COMB(OSLSYMBP, OSL(_SYMB_BP), ESC_TOPR_BP, BSPC_SYMB_BP) -COMB(LKEYPAD, TG(_KEYPAD), SPC_TOPR, BSPC_SYMB) -COMB(LKEYPADBP, TG(_KEYPAD_BP), SPC_TOPR_BP, BSPC_SYMB_BP) -COMB(LLAYERS, OSL(_LAYERS), KC_TAB, ENT_NAV) - -//COMB(JKL_SPC, KC_SPC, KC_J, KC_X) -//SUBS(TH_THE, "the", KC_T, KC_H) // SUBS uses SEND_STRING to output the given string. diff --git a/users/ericgebhart/config.h b/users/ericgebhart/config.h old mode 100755 new mode 100644 index 116d48f4ab6..6cd983b37b6 --- a/users/ericgebhart/config.h +++ b/users/ericgebhart/config.h @@ -18,12 +18,11 @@ #ifndef USERSPACE_CONFIG_H #define USERSPACE_CONFIG_H -#include "../../config.h" +// pro-micro v3's don't always detect otherwise. +/* #define SPLIT_USB_DETECT */ #define NO_ACTION_MACRO #define NO_ACTION_FUNCTION -#define COMBO_MUST_HOLD_MODS -#define COMBO_HOLD_TERM 150 // Sets good default for the speed of the mouse. #undef MOUSEKEY_INTERVAL #undef MOUSEKEY_DELAY @@ -51,4 +50,274 @@ #define TAPPING_TERM 200 #define IGNORE_MOD_TAP_INTERRUPT + +#define TAP_HOLD_TERM 200 +#define COMBO_MUST_HOLD_MODS +#define COMBO_HOLD_TERM 150 +#define TAP_CODE_DELAY 5 // for send string with delay + +// change the behavior of Mod taps for HRMs. +// #define GLOBAL_QUICK_TAP + + /* Control switches for my keymaps. */ + /* if needed, this goes in the keyboard's config.h */ + /* Alternately, fix the number row in the layout template. */ +/* #define BASE_NUMBER_ROW // turn on 4 row base templates. */ + +// Extensions, turn them on and off. +#define USERSPACE_H "ericgebhart.h" + +// Layout definitions, which language, thumb cluster, mod layer. +// Columns in and out. + +// the default. set it, use it, set it back. +// US_INT // EN, BEPO, US_INT +#define LANG_IS US_INT +#define DEFAULT_LANG US_INT +#define DEFAULT_LANG_NAME " us" + +// Enable a second locale, for another set of layers. +// This will add bepo versions of all layers chosen. +/* #define SECOND_LOCALE BEPO */ +/* #define SECOND_LOCALE_NAME " bepo" */ + +// Choose a mod layer. Can be changed per layer. +// TRNS, ALT, HRS_NAV HRM_GACS, HRM_SCAG, HRM_GASC, MIRYOKU_HRM_GASC +#define MODS_ARE HRS_NAV +#define DEFAULT_MODS MODS_ARE + +// Choose a thumb cluster. +// WI, WIa, DEFAULT, TEST, TRNS, MODS, LAYERS, MODS_LAYERS, +// MIRYOKU, MIRYOKU_TR, MODS_LAYERS_NAV, +// The following use THUMB_LETTER to place a letter on the Thumbs. +// for use with the hands down metals, maltron, and rsthd. +// HD, HDA, HD_SIMPLE, TH_LTR, HD_DASH, +// MIRYOKU_TR_LTR, MIRYOKU_LTR +#define THUMBS_ARE DEFAULT +#define DEFAULT_THUMBS DEFAULT + +// pick the edge key set. normie, no kc, smart locks or test. +// NORM, NOKC, SML, TEST +#define EDGE_KEY_SET_IS SML +#define DEFAULT_EDGE_SET SML + +// for the base layers which need a thumb cluster which takes a letter. +#define HANDS_DOWN_LTR_THUMBS_ARE TH_LTR +#define MALTRON_LTR_THUMBS_ARE TH_LTR +#define RSTHD_LTR_THUMBS_ARE TH_LTR + +// layout io, matrix size. +// a reasonable default for most keyboards. +// give a 3x10 and get a 3x12, managed in keyboards/keyboards.h +#define BASE_COLS_IN_OUT 5_6 // 5, 5_6, 6 + +// OLED STUFF. +#define OLED_CUSTOM_ENABLE // custom oled here. +//#define OLED_LOGO_ENABLE // turn on/off the logo. +#define KEYLOGGER_ENABLE // 1500 bytes, track and print keypress info to oled. +//#define SPLIT_LAYER_STATE_ENABLE // to sync state between sides. + +// EXTENSIONS + +// Combos +#define COMBO_REF_LAYER_ENABLE +// #define COMBO_REF_LAYER_TWO_ENABLE +// works if you know the number of your layer. +// otherwise set and use them later. +// #define COMBO_ONLY_FROM_LAYER 2 +// #define COMBO_REF_DEFAULT 2 + + +// Console key logging for creation of heatmaps, etc. +// CONSOLE must be enabled for this to work. +// To create Precondition's heat maps, from console key logging +// with hid_listen or qmk console +//#define CONSOLE_KEY_LOGGER_ENABLE // turn on keylogging for heat maps. + +#define ALT_LOCAL_ENABLE // alternate key combinations, with mods as needed. +#define ACCENTED_KEYS_ENABLE // direct access to altgr keys. + +#define SMART_LOCK_ENABLE // smart lock layers and mods. +//#define MOD_LOCK_ENABLE // smart lock mods, similar/overlapping with Smart lock. +#define NSHOT_ENABLE // smart n-shot for count. +//#define ONESHOT_MOD_ENABLE // oneshot mods, similar/overlapping with nshots + +#define TAP_HOLD_ENABLE // tap for one thing, hold for tapping term to get another. +//#define SWAPPER_ENABLE // enable swapper keys. +#define NOT_DEAD_ENABLE // make undead versions (US_DQUO_ND) of dead keys. +//#define ALT_SHIFT_ENABLE // alternate shift behaviors for existing keys. +//#define SEND_STRING_ENABLE // Turn on send string keys +//#define SEND_UNICODE_ENABLE // Unicode must be enabled for this to work. + + +// Turn on the base layers do not exceed 4 if doing two locales. +// That will likely push a layer past 15 and then it will +// no longer work with the LT macro. + +// dvorak and relatives +#define DVORAK_LAYER_ENABLE +//#define DVORAK_RLC_IU_LAYER_ENABLE +//#define CAPEWELL_DVORAK_LAYER_ENABLE +//#define AHEI_LAYER_ENABLE +//#define BOO_LAYER_ENABLE + +// qwerty and derivitives +//#define QWERTY_LAYER_ENABLE +//#define AZERTY_LAYER_ENABLE +//#define WORKMAN_LAYER_ENABLE +//#define NORMAN_LAYER_ENABLE + +// COLEMAK and relatives +//#define COLEMAK_LAYER_ENABLE +//#define COLEMAK_DH_LAYER_ENABLE +//#define HALMAK_LAYER_ENABLE +//#define MINIMAK_LAYER_ENABLE +//#define MINIMAK_8_LAYER_ENABLE +//#define MINIMAK_12_LAYER_ENABLE + +// BEAKL +// #define BEAKL15_LAYER_ENABLE +//#define BEAKL19_LAYER_ENABLE +//#define BEAKL27_LAYER_ENABLE +//#define BEAKLWI_LAYER_ENABLE + +// carpalx layouts +//#define CARPALX_QFMLWY_LAYER_ENABLE +//#define CARPALX_QGMLWB_LAYER_ENABLE +//#define CARPALX_QGMLWY_LAYER_ENABLE + +// alternate layouts +//#define MALTRON_LAYER_ENABLE +//#define EUCALYN_LAYER_ENABLE +//#define HANDS_UP_LAYER_ENABLE +//#define RSTHD_LAYER_ENABLE +//#define HANDS_UP_LAYER_ENABLE +//#define WHITE_LAYER_ENABLE +//#define ISRT_LAYER_ENABLE +//#define SOUL_LAYER_ENABLE +//#define NIRO_LAYER_ENABLE +//#define ASSET_LAYER_ENABLE +//#define WHORF_LAYER_ENABLE +//#define WHORF6_LAYER_ENABLE + +// mtgap and relatives +//#define MTGAP_LAYER_ENABLE +//#define CTGAP_LAYER_ENABLE +//#define APT_LAYER_ENABLE +//#define CANARY_LAYER_ENABLE + +// Hands down +#define HD_NEU_NARROW_LAYER_ENABLE +//#define HD_REF_LAYER_ENABLE +//#define HD_DASH_LAYER_ENABLE +//#define HD_ELAN_LAYER_ENABLE +//#define HD_BRONZE_LAYER_ENABLE +//#define HD_SILVER_LAYER_ENABLE +//#define HD_PLATINUM_LAYER_ENABLE +//#define HD_GOLD_LAYER_ENABLE +//#define HD_TITANIUM_LAYER_ENABLE + +// A compact optimot for 3x10. +// requires accent characters. +//#define OPTIMOT_COMPACT_LAYER_ENABLE + +// 3x12 sized base layers +//-------------------------- +//#define HD_NEU_LAYER_ENABLE + +// Optimized for french +// All these have accent characters on base layer. +// so these dont work for En, but do for US-international and Bepo. + +//#define BEPO_LAYER_ENABLE +//#define OPTIMOT_LAYER_ENABLE +//#define BEAKL19bis_LAYER_ENABLE + + +// enable transient function layers. +#define SYMBOL_LAYER_ENABLE +#define NAV_LAYER_ENABLE +// #define MOUSE_LAYER_ENABLE +#define TOPROWS_LAYER_ENABLE +// #define LAYERS_LAYER_ENABLE - defunct. always on. +#define KEYPAD_LAYER_ENABLE +//#define ADJUST_LAYER_ENABLE +//#define RGB_LAYER_ENABLE +//#define MEDIA_LAYER_ENABLE +//#define FUNC_LAYER_ENABLE + + +// define alternate thumb definitions for the transient layers. +#define MEDIA_LAYER_THUMBS MEDIA_THUMBS +#define MOUSE_LAYER_THUMBS MOUSE_THUMBS +#define NAV_LAYER_THUMBS TRNS_THUMBS +#define KEYPAD_LAYER_THUMBS KEYPAD_THUMBS +#define SYMB_LAYER_THUMBS SYMB_THUMBS +#define TOPROWS_LAYER_THUMBS DEFAULT + +// Extra character layers. +// Bepo has dead keys (altgr) and accented keycodes +// A layer of accented keys +// #define ACCENTS_LAYER_ENABLE +// A layer of dead keys +// #define MORTE_LAYER_ENABLE +// A layer of the most popular accented keys and dead keys +#define ACCENTS_MORTE_LAYER_ENABLE + +// Functional layer choices. +/* configure the function layers. */ +/* They have to be turned on above. */ +/* Choose one of each as desired. */ +/* There are reasonable defaults */ +/* for each if nothing is defined. */ + +/* nav */ +//#define NAV_FULL // monolithic, two sided nav with mouse and arrows. +#define NAV_FULL_LOCK_MODS // Replace left mouse buttons with lockmods. + +// Just the non mouse bits, with lock mods, n-shot mods on the left. +// if mousekeys enabled, adds a mouse layer accessible via smart lock. +// #define NAV_NO_MOUSE +// #define NAV_MIRYOKU +// #define NAV_MOUSE_MIRYOKU + + +/* keypads */ +// beakl keypads are usual, if not chosen, regular keypads will be used. +// left side is the default. +// Beakl, except for WI, is only on the left side. +// Miryoku is on the left also. + +//#define KEYPAD_RIGHT +#define KEYPAD_BEAKL // beakl doesn't have a rightside, swap hands? +//#define KEYPAD_MODS // give mods on the other side instead of funcs. +//#define KEYPAD_BEAKL_WI // right side with hexpad on left. +//#define KEYPAD_MIRYOKU // use the miryoku keypad +// the default if nothing chosen, +// is a functionpad on the left and normal keypad on the right. + +// funcpad from miryoku +// #define FUNCPAD_MIRYOKU + + +/* symbols */ +// pick one of these or get the default. +//#define SYMBOL_BEAKL // original - the default if nothing else. +//#define SYMBOL_BEAKL_EXT // extended for non beakl base layers. +//#define SYMBOL_BEAKL_EXT_VI // extended with vi keybinding in mind. +#define SYMBOL_BEAKL_C // more alterations by frequency +// #define SYMBOL_NEO // The symbol layer from the Neo layout. +// #define SYMBOL_MIRYOKU // minimalist symbols after miryoku +//#define SYMBOL_BEAKL_WI // original wi + + +/* toprows. */ +// The default, if not defined, is a standard qwerty set of rows. +// symbols, numbers, function keys. Numbers on the home row. + +// #define TOPROWS_BKL_15_NUMS // center row with Beakl15 order. 40123 76598. +// #define TOPROWS_BKL_19_NUMS // Beakl 19 order: 32104 76598 +#define TOPROWS_MOD // beakl 15 nums, oneshot and smart lock mods. no Fkeys. + + #endif diff --git a/users/ericgebhart/core_keys.h b/users/ericgebhart/core_keys.h deleted file mode 100755 index 73beaaf7abd..00000000000 --- a/users/ericgebhart/core_keys.h +++ /dev/null @@ -1,280 +0,0 @@ -#pragma once -/* - Copyright 2018 Eric Gebhart - - 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 . -*/ - -#include "quantum.h" -#include "process_keycode/process_tap_dance.h" -#include "eeconfig.h" -#include "keymap_bepo.h" -#include "altlocal_keys.h" - -//#define ONESHOT_TAP_TOGGLE 2 /* Tapping this number of times holds the key until tapped once again. */ - -bool process_record_secrets(uint16_t keycode, keyrecord_t *record); - -enum userspace_custom_keycodes { - // keep the keycodes using the send_key function close to SAFE_RANGE - // so the array of keycodes remains a reasonbale size. - DB_1 = SAFE_RANGE, // can always be here - DB_2, - DB_3, - DB_4, - DB_5, - DB_6, - DB_7, - DB_8, - DB_9, - DB_0, - DB_GRV, - DB_SCOLON, - DB_SLASH, - DB_BACKSLASH, - DB_EQL, - DB_DOT, - DB_COMM, - DB_QUOT, - DB_MINUS, - DB_RPRN, - DB_LPRN, - DB_RBRC, - DB_LBRC, - // for symbols layer - DB_HASH, - DB_LCBR, - DB_RCBR, - DB_PIPE, - DB_TILD, - DB_CIRC, - DB_LESS, - DB_GRTR, - // End of dvorak on bepo translation keys. - // BEAKL on Qwerty.. - BQ_DOT, - BQ_COMM, - BQ_QUOT, - // End of beakl on qwerty - BB_DOT, - BB_COMM, - BB_QUOT, - // End of beakl on Bepo - - EPRM, - VRSN, - // Default keyboard layouts - Same order as enum. - KC_DVORAK, - KC_QWERTY, - KC_COLEMAK, - KC_BEAKL, - // KC_WORKMAN, - // KC_NORMAN, - // KC_MALTRON, - // KC_EUCALYN, - // KC_CARPLAX, - KC_DVORAK_BP, - KC_BEAKL_BP, - KC_BEPO, - KC_LAYERS, - - // Misc. - KC_MAKE, - KC_RESET, - KC_RGB_T, - RGB_IDL, - KC_SECRET_1, - KC_SECRET_2, - KC_SECRET_3, - KC_SECRET_4, - KC_SECRET_5, - KC_CCCV, // Ctrl-C V in one key. - BP_CCCV, - KC_CTCN, // Ctrl-T N in one key. - BP_CTCN, - KC_CWCQ, // Ctrl-W Q in one key. - BP_CWCQ, - KC_XM_PORD, // Xmonad gui-e, gui-t for the scratchpads or desktops. - BP_XM_PORD, - KC_OCPRN, // Open, or open and close, cursor in the middle with hold. - BP_OCPRN, - KC_OCBRC, - BP_OCBRC, - KC_OCCBR, - BP_OCCBR, - KC_OCDQUO, - BP_OCDQUO, - KC_OCQUOT, - BP_OCQUOT, - KC_OCGRV, - BP_OCGRV, - KC_OCLTGT, - BP_OCLTGT, - UC_FLIP, - UC_TABL, - UC_SHRG, - UC_DISA, - KC_SPACETEST, - NEW_SAFE_RANGE -}; - -#define CTLGUI_T(kc) MT(MOD_LGUI | MOD_LCTL, kc) -#define SFTGUI_T(kc) MT(MOD_LGUI | MOD_LSFT, kc) -#define ALTGUI_T(kc) MT(MOD_LGUI | MOD_LALT, kc) - -#define ALT_ENT ALT_T(KC_ENT) // Alt or enter -#define CTL_SPC CTL_T(KC_SPC) // ctrl or space -#define CTL_BSPC CTL_T(KC_BSPC) // ctrl or backspace -#define ALT_DEL ALT_T(KC_DEL) // Alt or delete -#define GUI_ESC GUI_T(KC_ESC) // Gui or escape -#define ALGR_SYMB ALGR_T(TG(_SYMB)) // Alt gre or toggle symbol layer - -#define ENT_NAV LT(_NAV, KC_ENT) -#define ENT_TOPR LT(_TOPROWS, KC_ENT) -#define ENT_TOPR_BP LT(_TOPROWS_BP, KC_ENT) -#define ESC_TOPR LT(_TOPROWS, KC_ESC) -#define ESC_TOPR_BP LT(_TOPROWS_BP, KC_ESC) -#define ESC_SYMB LT(_SYMB, KC_ESC) -#define ESC_SYMB_BP LT(_SYMB_BP, KC_ESC) -#define SPC_NAV LT(_NAV, KC_SPC) -#define SPC_TOPR LT(_TOPROWS, KC_SPC) -#define SPC_TOPR_BP LT(_TOPROWS_BP, KC_SPC) -#define SPC_LAYR LT(_LAYERS, KC_SPC) -#define SPC_LAYR_BP LT(_LAYERS, KC_SPC) -#define SPC_ADJ LT(_ADJUST, KC_SPC) -#define SPC_ADJ_BP LT(_ADJUST, KC_SPC) -#define BSPC_SYMB LT(_SYMB, KC_BSPC) -#define BSPC_SYMB_BP LT(_SYMB_BP, KC_BSPC) -#define BSPC_TOPR LT(_TOPROWS, KC_BSPC) -#define BSPC_TOPR_BP LT(_TOPROWS_BP, KC_BSPC) -#define SPC_NUM LT(_KEYPAD, KC_SPC) -#define SPC_NUM_BP LT(_KEYPAD_BP, KC_SPC) -#define BSPC_NUM LT(_KEYPAD, KC_BSPC) -#define BSPC_NUM_BP LT(_KEYPAD_BP, KC_BSPC) - -// OSM keycodes, to keep things clean and easy to change -#define KC_MLSF OSM(MOD_LSFT) -#define KC_MRSF OSM(MOD_RSFT) -#define OS_LGUI OSM(MOD_LGUI) -#define OS_RGUI OSM(MOD_RGUI) -#define OS_LSFT OSM(MOD_LSFT) -#define OS_RSFT OSM(MOD_RSFT) -#define OS_LCTL OSM(MOD_LCTL) -#define OS_RCTL OSM(MOD_RCTL) -#define OS_LALT OSM(MOD_LALT) -#define OS_RALT OSM(MOD_RALT) -#define ALT_APP ALT_T(KC_APP) - -#define MG_NKRO MAGIC_TOGGLE_NKRO - -#define UC_IRNY UC(0x2E2E) -#define UC_CLUE UC(0x203D) - - -//// TAP DANCE - - typedef struct { - bool is_press_action; - int state; - } tdtap; - -enum { - SINGLE_TAP = 1, - SINGLE_HOLD = 2, - DOUBLE_TAP = 3, - DOUBLE_HOLD = 4, - DOUBLE_SINGLE_TAP = 5, //send two single taps - TRIPLE_TAP = 6, - TRIPLE_HOLD = 7 -}; - -//Tap Dance Declarations -enum { - TD_ESC_CAPS = 0, - TD_TAB_BKTAB = 1, - TD_MDIA_SYMB = 2, - TD_HOME_END = 3, - TD_XMONAD_ESC = 4, - TD_DEF_LAYER_SW = 5, - TD_DEF_OS_LAYER_SW = 6, - TD_MOUSE_BTNS = 7, - TD_DVORAK_BEPO = 8, - TD_UP_HOME = 9, - TD_DOWN_END = 10, - TD_RIGHT_TAB = 11, - TD_LEFT_BACKTAB = 12 -}; - - -// Tap dance -#define KC_BKTAB LSFT(KC_TAB) -#define TAB_BKTAB TD(TD_TAB_BKTAB) // Tab or backtab tapdance. -#define MDIA_SYMB_KP_LAYERS TD(TD_MDIA_SYMB) // MDIA, symb, keypad, layouts layer tapdance toggle. -#define DEF_LAYER_SW TD(TD_DEF_LAYER_SW) // dvorak, dvorak_on_bepo, bepo default layer -#define DEF_OS_LAYER_SW TD(TD_DEF_OS_LAYER_SW) // dvorak, dvorak_on_bepo, bepo default layer -#define HOME_END TD(TD_HOME_END) // home or end tapdance. -#define XMONAD_ESC TD(TD_XMONAD_ESC) // Escape, dvorak, media or symb. - tap and hold tap dance. 1-4 -#define DVORAK_ET_BEPO TD(TD_DVORAK_BEPO) // Escape, dvorak, media or symb. - tap and hold tap dance. 1-4 -#define TDMOUSE_BTNS TD(TD_MOUSE_BTNS) // hmmm. 1-5 -#define RIGHT_TAB TD(TD_RIGHT_TAB) // Bad idea these 4. Maybe with good timing... -#define LEFT_BACKTAB TD(TD_LEFT_BACKTAB) -#define UP_HOME TD(TD_UP_HOME) -#define DOWN_END TD(TD_DOWN_END) // No! Down Down Not End.... - -// HOME ROW LAYER TOGGLE (LT) and Shift. -// both sides of the home row have "shift, ___, media , symb, ___" and "___, symb, media, ___, shift". -// so pinky fingers are shift when held and the index and second fingers are symbol and -// media layers when held. - -// The most portable copy/paste keys (windows (mostly), linux, and some terminal emulators). -// The KC_CCCV key takes care of the last two... -#define MK_CUT LSFT(KC_DEL) // shift + delete -#define MK_COPY LCTL(KC_INS) // ctrl + insert -#define MK_PASTE LSFT(KC_INS) // shift + insert - -#undef ___ //kint defines it as KC_NO -#define ___ KC_TRNS -#define XXX KC_NO - -// Blocking keys -#define _X_ XXX -#define ___X___ XXX -#define ___X2___ XXX, XXX -#define ___X3___ ___X2___, XXX -#define ___X5___ ___X3___, XXX, XXX -#define ___X6___ ___X5___, XXX -#define ___X12___ ___X6___, ___X6___ -#define ___X15___ ___X5___, ___X5___, ___X5___ - -// Transparent keys -#define ___2___ ___, ___ -#define ___3___ ___2___, ___ -#define ___4___ ___3___, ___ -#define ___5___ ___4___, ___ -#define ___6___ ___5___, ___ -#define ___12___ ___6___, ___6___ -#define ___14___ ___5___, ___4___, ___5___ -#define ___15___ ___5___, ___5___, ___5___ -#define ___16___ ___15___, ___ - -int on_qwerty(void); -int get_xmonad_layer(void); - -#ifdef TAP_DANCES_ENABLE -int cur_dance (qk_tap_dance_state_t *state); - -//for the x tap dance. Put it here so it can be used in any keymap -void x_finished (qk_tap_dance_state_t *state, void *user_data); -void x_reset (qk_tap_dance_state_t *state, void *user_data); -#endif diff --git a/users/ericgebhart/core_keysets.h b/users/ericgebhart/core_keysets.h deleted file mode 100755 index f51f7439219..00000000000 --- a/users/ericgebhart/core_keysets.h +++ /dev/null @@ -1,345 +0,0 @@ -#pragma once -/* - Copyright 2018 Eric Gebhart - - 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 . -*/ - -#include "core_keys.h" -/********************************************************************/ -/** The Core rows of each given layout. **/ -/********************************************************************/ -//Dvorak on a qwerty software layer in the OS -#define ___DVORAK_L1___ KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y -#define ___DVORAK_L2___ KC_A, KC_O, KC_E, KC_U, KC_I -#define ___DVORAK_L3___ KC_SCLN, KC_Q, KC_J, KC_K, KC_X - -#define ___DVORAK_R1___ KC_F, KC_G, KC_C, KC_R, KC_L -#define ___DVORAK_R2___ KC_D, KC_H, KC_T, KC_N, KC_S -#define ___DVORAK_R3___ KC_B, KC_M, KC_W, KC_V, KC_Z - -#define ___DVORAK___ ___DVORAK_L1___, ___DVORAK_R1___, \ - ___DVORAK_L2___, ___DVORAK_R2___, \ - ___DVORAK_L3___, ___DVORAK_R3___ - -/* BEAKL 15 (main layer): */ -/* 40123 76598 */ -/* qhoux gcrfz */ -/* - yiea. dstnb ; */ -/* j/,k' wmlpv */ - -// 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. -// BQ_COMM, BQ_QUOT, BQ_DOT - Beakl->Qwerty -// BB_COMM, BB_QUOT, BB_DOT - Beakl->Bepo -// take care of the different shifted chars. -/* BEAKL 15 (shift layer): */ -/* QHOUX GCRFZ */ -/* - YIEA@ DSTNB ; */ -/* J?!K` WMLPV */ -#define ___BEAKL15_L1___ KC_Q, KC_H, KC_O, KC_U, KC_X -#define ___BEAKL15_L2___ KC_Y, KC_I, KC_E, KC_A, BQ_DOT -#define ___BEAKL15_L3___ KC_J, KC_SLASH, BQ_COMM, KC_K, BQ_QUOT - -#define ___BEAKL15_R1___ KC_G, KC_C, KC_R, KC_F, KC_Z -#define ___BEAKL15_R2___ KC_D, KC_S, KC_T, KC_N, KC_B -#define ___BEAKL15_R3___ KC_W, KC_M, KC_L, KC_P, KC_V - -#define ___BEAKL15___ ___BEAKL15_L1___, ___BEAKL15_R1___, \ - ___BEAKL15_L2___, ___BEAKL15_R2___, \ - ___BEAKL15_L3___, ___BEAKL15_R3___ - -#define ___6BEAKL15_L1___ ___, KC_Q, KC_H, KC_O, KC_U, KC_X -#define ___6BEAKL15_L2___ KC_MINS, KC_Y, KC_I, KC_E, KC_A, BQ_DOT -#define ___6BEAKL15_L3___ ___, KC_J, KC_SLASH, BQ_COMM, KC_K, BQ_QUOT - -#define ___6BEAKL15_R1___ KC_G, KC_C, KC_R, KC_F, KC_Z, ___ -#define ___6BEAKL15_R2___ KC_D, KC_S, KC_T, KC_N, KC_B, KC_SCLN -#define ___6BEAKL15_R3___ KC_W, KC_M, KC_L, KC_P, KC_V, ___ - -#define ___6BEAKL15___ ___6BEAKL15_L1___, ___6BEAKL15_R1___, \ - ___6BEAKL15_L2___, ___6BEAKL15_R2___, \ - ___6BEAKL15_L3___, ___6BEAKL15_R3___ - -// Qwerty based layers that I don't really use. -#define ___QWERTY_L1___ KC_Q, KC_W, KC_E, KC_R, KC_T -#define ___QWERTY_L2___ KC_A, KC_S, KC_D, KC_F, KC_G -#define ___QWERTY_L3___ KC_Z, KC_X, KC_C, KC_V, KC_B - -#define ___QWERTY_R1___ KC_Y, KC_U, KC_I, KC_O, KC_P -#define ___QWERTY_R2___ KC_H, KC_J, KC_K, KC_L, KC_SCLN -#define ___QWERTY_R3___ KC_N, KC_M, KC_COMM, KC_DOT, KC_SLASH - -#define ___QWERTY___ ___QWERTY_L1___, ___QWERTY_R1___, \ - ___QWERTY_L2___, ___QWERTY_R2___, \ - ___QWERTY_L3___, ___QWERTY_R3___ - -// Qwerty based layers that I don't really use. - -// COLEMAK -#define ___COLEMAK_L1___ KC_Q, KC_W, KC_F, KC_P, KC_G -#define ___COLEMAK_L2___ KC_A, KC_R, KC_S, KC_T, KC_D -#define ___COLEMAK_L3___ KC_Z, KC_X, KC_C, KC_V, KC_B - -#define ___COLEMAK_R1___ KC_J, KC_L, KC_U, KC_Y, KC_SCLN -#define ___COLEMAK_R2___ KC_H, KC_N, KC_E, KC_I, KC_O -#define ___COLEMAK_R3___ KC_K, KC_M, KC_COMM, KC_DOT, KC_SLASH - -#define ___COLEMAK___ ___COLEMAK_L1___, ___COLEMAK_R1___, \ - ___COLEMAK_L2___, ___COLEMAK_R2___, \ - ___COLEMAK_L3___, ___COLEMAK_R3___ - -// COLEMAK-DH -#define ___COLEMAK_DH_L1___ KC_Q, KC_W, KC_F, KC_P, KC_B -#define ___COLEMAK_DH_L2___ KC_A, KC_R, KC_S, KC_T, KC_G -#define ___COLEMAK_DH_L3___ KC_Z, KC_X, KC_C, KC_D, KC_V - -#define ___COLEMAK_DH_R1___ KC_J, KC_L, KC_U, KC_Y, KC_SCLN -#define ___COLEMAK_DH_R2___ KC_M, KC_N, KC_E, KC_I, KC_O -#define ___COLEMAK_DH_R3___ KC_K, KC_H, KC_COMM, KC_DOT, KC_SLASH - -#define ___COLEMAK_DH___ ___COLEMAK_DH_L1___, ___COLEMAK_DH_R1___, \ - ___COLEMAK_DH_L2___, ___COLEMAK_DH_R2___, \ - ___COLEMAK_DH_L3___, ___COLEMAK_DH_R3___ - - -// WORKMAN -#define ___WORKMAN_L1___ KC_Q, KC_D, KC_R, KC_W, KC_B -#define ___WORKMAN_L2___ KC_A, KC_S, KC_H, KC_T, KC_G -#define ___WORKMAN_L3___ KC_Z, KC_X, KC_M, KC_C, KC_V - -#define ___WORKMAN_R1___ KC_J, KC_F, KC_U, KC_P, KC_SCLN -#define ___WORKMAN_R2___ KC_Y, KC_N, KC_E, KC_O, KC_I -#define ___WORKMAN_R3___ KC_K, KC_L, KC_COMM, KC_DOT, KC_SLASH - -#define ___WORKMAN___ ___WORKMAN_L1___, ___WORKMAN_R1___, \ - ___WORKMAN_L2___, ___WORKMAN_R2___, \ - ___WORKMAN_L3___, ___WORKMAN_R3___ - - -// NORMAN -#define ___NORMAN_L1___ KC_Q, KC_W, KC_D, KC_F, KC_K -#define ___NORMAN_L2___ KC_A, KC_S, KC_E, KC_T, KC_G -#define ___NORMAN_L3___ KC_Z, KC_X, KC_C, KC_V, KC_B - -#define ___NORMAN_R1___ KC_J, KC_U, KC_R, KC_L, KC_SCLN -#define ___NORMAN_R2___ KC_Y, KC_N, KC_I, KC_O, KC_U -#define ___NORMAN_R3___ KC_P, KC_M, KC_COMM, KC_DOT, KC_SLASH - -#define ___NORMAN___ ___NORMAN_L1___, ___NORMAN_R1___, \ - ___NORMAN_L2___, ___NORMAN_R2___, \ - ___NORMAN_L3___, ___NORMAN_R3___ - - -#define ___MALTRON_L1___ KC_Q, KC_P, KC_Y, KC_C, KC_B -#define ___MALTRON_L2___ KC_A, KC_N, KC_I, KC_S, KC_F -#define ___MALTRON_L3___ KC_SCLN, KC_SLSH, KC_J, KC_G, KC_COMM - -#define ___MALTRON_R1___ KC_V, KC_M, KC_U, KC_Z, KC_L -#define ___MALTRON_R2___ KC_D, KC_T, KC_D, KC_O, KC_R -#define ___MALTRON_R3___ KC_DOT, KC_W, KC_K, KC_MINS, KC_X - -#define ___MALTRON___ ___MALTRON_L1___, ___MALTRON_R1___, \ - ___MALTRON_L2___, ___MALTRON_R2___, \ - ___MALTRON_L3___, ___MALTRON_R3___ - - -#define ___EUCALYN_L1___ KC_SLSH, KC_COMM, KC_DOT, KC_F, KC_Q -#define ___EUCALYN_L2___ KC_A, KC_O, KC_E, KC_I, KC_U -#define ___EUCALYN_L3___ KC_Z, KC_X, KC_C, KC_V, KC_W - -#define ___EUCALYN_R1___ KC_M, KC_R, KC_D, KC_Y, KC_P -#define ___EUCALYN_R2___ KC_G, KC_T, KC_K, KC_S, KC_N -#define ___EUCALYN_R3___ KC_B, KC_H, KC_J, KC_L, KC_SCLN - -#define ___EUCALYN___ ___EUCALYN_L1___, ___EUCALYN_R1___, \ - ___EUCALYN_L2___, ___EUCALYN_R2___, \ - ___EUCALYN_L3___, ___EUCALYN_R3___ - - -#define ___CARPLAX_QFMLWY_L1___ KC_Q, KC_F, KC_M, KC_L, KC_W -#define ___CARPLAX_QFMLWY_L2___ KC_D, KC_S, KC_T, KC_N, KC_R -#define ___CARPLAX_QFMLWY_L3___ KC_Z, KC_V, KC_G, KC_C, KC_X - -#define ___CARPLAX_QFMLWY_R1___ KC_Y, KC_U, KC_O, KC_B, KC_J -#define ___CARPLAX_QFMLWY_R2___ KC_I, KC_A, KC_E, KC_H, KC_SCLN -#define ___CARPLAX_QFMLWY_R3___ KC_P, KC_K, KC_COMM, KC_DOT, KC_SLSH - -#define ___CARPLAX_QFMLWY___ ___CARPLAX_QFMLWY_L1___, ___CARPLAX_QFMLWY_R1___, \ - ___CARPLAX_QFMLWY_L2___, ___CARPLAX_QFMLWY_R2___, \ - ___CARPLAX_QFMLWY_L3___, ___CARPLAX_QFMLWY_R3___ - - -#define ___CARPLAX_QGMLWB_L1___ KC_Q, KC_G, KC_M, KC_L, KC_W -#define ___CARPLAX_QGMLWB_L2___ KC_D, KC_S, KC_T, KC_N, KC_R -#define ___CARPLAX_QGMLWB_L3___ KC_Z, KC_X, KC_C, KC_F, KC_J - -#define ___CARPLAX_QGMLWB_R1___ KC_B, KC_Y, KC_U, KC_V, KC_SCLN -#define ___CARPLAX_QGMLWB_R2___ KC_I, KC_A, KC_E, KC_O, KC_H -#define ___CARPLAX_QGMLWB_R3___ KC_K, KC_P, KC_COMM, KC_DOT, KC_SLSH - -#define ___CARPLAX_QGMLWB___ ___CARPLAX_QGMLWB_L1___, ___CARPLAX_QGMLWB_R1___, \ - ___CARPLAX_QGMLWB_L2___, ___CARPLAX_QGMLWB_R2___, \ - ___CARPLAX_QGMLWB_L3___, ___CARPLAX_QGMLWB_R3___ - - -#define ___CARPLAX_QGMLWY_L1___ KC_Q, KC_G, KC_M, KC_L, KC_W -#define ___CARPLAX_QGMLWY_L2___ KC_D, KC_S, KC_T, KC_N, KC_R -#define ___CARPLAX_QGMLWY_L3___ KC_Z, KC_X, KC_C, KC_V, KC_J - -#define ___CARPLAX_QGMLWY_R1___ KC_Y, KC_F, KC_U, KC_B, KC_SCLN -#define ___CARPLAX_QGMLWY_R2___ KC_I, KC_A, KC_E, KC_O, KC_H -#define ___CARPLAX_QGMLWY_R3___ KC_K, KC_P, KC_COMM, KC_DOT, KC_SLSH - -#define ___CARPLAX_QGMLWY___ ___CARPLAX_QGMLWY_L1___, ___CARPLAX_QGMLWY_R1___, \ - ___CARPLAX_QGMLWY_L2___, ___CARPLAX_QGMLWY_R2___, \ - ___CARPLAX_QGMLWY_L3___, ___CARPLAX_QGMLWY_R3___ - - -// BEPO Based Layouts. -// Bepo, Dvorak and Beakl on fr-bepo software layer in the OS. -// for dvorak and all the other qwerty like keyboards on bepo -#define ___DVORAK_FR_L1___ DB_QUOT, DB_COMM, DB_DOT, BP_P, BP_Y -#define ___DVORAK_FR_L2___ BP_A, BP_O, BP_E, BP_U, BP_I -#define ___DVORAK_FR_L3___ DB_SCOLON, BP_Q, BP_J, BP_K, BP_X - -#define ___DVORAK_FR_R1___ BP_F, BP_G, BP_C, BP_R, BP_L -#define ___DVORAK_FR_R2___ BP_D, BP_H, BP_T, BP_N, BP_S -#define ___DVORAK_FR_R3___ BP_B, BP_M, BP_W, BP_V, BP_Z - -#define ___DVORAK_FR___ ___DVORAK_FR_L1___, ___DVORAK_FR_R1___, \ - ___DVORAK_FR_L2___, ___DVORAK_FR_R2___, \ - ___DVORAK_FR_L3___, ___DVORAK_FR_R3___ - -/* BEAKL 15 (main layer): */ - -#define ___DVORAK6_FR_L1___ DB_GRV, ___DVORAK_FR_L1___ -#define ___DVORAK6_FR_L2___ TAB_BKTAB, ___DVORAK_FR_L2___ -#define ___DVORAK6_FR_L3___ ___, ___DVORAK_FR_L3___ - -#define ___DVORAK6_FR_R1___ ___DVORAK_FR_R1___, BP_MIN -#define ___DVORAK6_FR_R2___ ___DVORAK_FR_R2___, BP_SLSH -#define ___DVORAK6_FR_R3___ ___DVORAK_FR_R3___, DB_BACKSLASH - -#define ___6DVORAK_FR___ ___6DVORAK_FR_L1___, ___6DVORAK_FR_R1___, \ - ___6DVORAK_FR_L2___, ___6DVORAK_FR_R2___, \ - ___6DVORAK_FR_L3___, ___6DVORAK_FR_R3___ - -// dont forget ; and -. the 'a' home row is official placement. -#define ___BEAKL15_FR_L1___ BP_Q, BP_H, BP_O, BP_U, BP_X -#define ___BEAKL15_FR_L2___ BP_Y, BP_I, BP_E, BP_A, BB_DOT -#define ___BEAKL15_FR_L2a___ BP_MIN, BP_Y, BP_I, BP_E, BP_A, BB_DOT -#define ___BEAKL15_FR_L3___ BP_J, BP_SLSH, BB_COMM, BP_K, BB_QUOT - -#define ___BEAKL15_FR_R1___ BP_G, BP_C, BP_R, BP_F, BP_Z -#define ___BEAKL15_FR_R2___ BP_D, BP_S, BP_T, BP_N, BP_B -#define ___BEAKL15_FR_R2a___ BP_D, BP_S, BP_T, BP_N, BP_B, DB_SCLN -#define ___BEAKL15_FR_R3___ BP_W, BP_M, BP_L, BP_P, BP_V - -#define ___6BEAKL15_FR___ ___, ___BEAKL15_FR_L1___, ___BEAKL15_FR_R1___, ___, \ - ___BEAKL15_FR_L2a___, ___BEAKL15_FR_R2a___, \ - ___, ___BEAKL15_FR_L3___, ___BEAKL15_FR_R3___, ___ - -#define ___BEAKL15_FR___ ___BEAKL15_FR_L1___, ___BEAKL15_FR_R1___, \ - ___BEAKL15_FR_L2___, ___BEAKL15_FR_R2___, \ - ___BEAKL15_FR_L3___, ___BEAKL15_FR_R3___ - -#define ___BEPO_L1___ BP_B, BP_EACU, BP_P, BP_O, BP_EGRV -#define ___BEPO_L2___ BP_A, BP_U, BP_I, BP_E, BP_COMM -#define ___BEPO_L3___ /*BP_ECRC*/ BP_AGRV, BP_Y, BP_X, BP_DOT, BP_K - -#define ___BEPO_R1___ /* BP_DCRC,*/ BP_V, BP_D, BP_L, BP_J, BP_Z -#define ___BEPO_R2___ /* BP_C, */ BP_T, BP_S, BP_R, BP_N, BP_M //BP_CCED -#define ___BEPO_R3___ BP_QUOT, BP_Q, BP_G, BP_H, BP_F //BP_SFT_T_W - -// Bepo for a 3x6 split. CCED switched hands. :-( 'Altgr-c c' does the same. -// W has to drop down to the bottom. Silly unbalanced layout. -#define ___BEPO6_L1___ BP_CCED, ___BEPO_L1___ -#define ___BEPO6_L2___ TAB_BKTAB, ___BEPO_L2___ -#define ___BEPO6_L3___ BP_ECIR, ___BEPO_L3___ - -#define ___BEPO6_R1___ ___BEPO_R1___, BP_PERC -#define ___BEPO6_R2___ ___BEPO_R2___, BP_C -#define ___BEPO6_R3___ ___BEPO_R3___, BP_W - -#define ___BEPO6___ ___BEPO6_L1___, ___BEPO6_R1___, \ - ___BEPO6_L2___, ___BEPO6_R2___, \ - ___BEPO6_L3___, ___BEPO6_R3___ - -#define ___BEPO___ ___BEPO_L1___, ___BEPO_R1___, \ - ___BEPO_L2___, ___BEPO_R2___, \ - ___BEPO_L3___, ___BEPO_R3___ - - -/*******************************************************************/ -/** TOP ROWS Func,Symbols, Numbers you find there. **/ -/*******************************************************************/ -// for everything on qwerty. -#define ___NUMBER_L___ KC_1, KC_2, KC_3, KC_4, KC_5 -#define ___NUMBER_R___ KC_6, KC_7, KC_8, KC_9, KC_0 - -#define ___NUMBER_BEAKL15_L___ KC_4, KC_0, KC_1, KC_2, KC_3 -#define ___NUMBER_BEAKL15_R___ KC_7, KC_6, KC_5, KC_9, KC_8 - -// a top symbol row if someone wants it. -#define ___SYMB_L___ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC -#define ___SYMB_R___ KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN - -/// BEPO //// -// For numbers on bepo. Bepo has numbers on shifted keys, the -// reverse of many layouts. -#define ___NUMBER_BEPO_L___ DB_1, DB_2, DB_3, DB_4, DB_5 -#define ___NUMBER_BEPO_R___ DB_6, DB_7, DB_8, DB_9, DB_0 - -// In case you want to try BEAKL 15 Numbers -#define ___NUMBER_BEAKL15_BP_L___ DB_4, DB_0, DB_1, DB_2, DB_3 -#define ___NUMBER_BEAKL15_BP_R___ DB_7, DB_6, DB_5, DB_9, DB_8 - -// The top row. Bepo has symbols not numbers. Numbers are the shifted values. -// There are actually 13 keys specified for bepo. -#define ___SYMBOL_BEPO_L___ /* BP_DLR */ BP_DQUO, BP_LDAQ, BP_RDAQ, BP_LPRN, BP_RPRN -#define ___SYMBOL_BEPO_R___ BP_AT, BP_PLUS, BP_MINS, BP_SLSH, BP_ASTR /* BP_EQL, BP_PERC */ - -#define ___6SYMBOL_BEPO_L___ BP_DLR, ___SYMBOL_BEPO_L___ -#define ___6SYMBOL_BEPO_R___ ___SYMBOL_BEPO_R___, BP_EQL /* BP_PERC */ - -// a top qwerty style symbol row if someone wants it. -#define ___SYMB_L_FR___ DB_EXLM, BP_AT, BP_HASH, BP_DLR, BP_PERC -#define ___SYMB_R_FR___ DB_CIRC, BP_AMPR, BP_ASTR, BP_LPRN, BP_RPRN - - -// function key rows, works for everyone. -#define ___FUNC_L___ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5 -#define ___FUNC_R___ KC_F6, KC_F7, KC_F8, KC_F9, KC_F10 - -#define ___FUNC_1_6___ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6 -#define ___FUNC_7_12___ KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12 - -#define ___FUNC_BEAKL_L___ KC_F4, KC_F10, KC_F1, KC_F2, KC_F3 -#define ___FUNC_BEAKL_R___ KC_F7, KC_F6, KC_F5, KC_F9, KC_F8 - -#define ___12_FUNC_BEAKL___ KC_F11, ___FUNC_BEAKL_L___, ___FUNC_BEAKL_R___, KC_F12 - -// Altogether. Defines all the various top rows that -// are present with all these layouts. -// All together as blocks of 10 -#define ___NUMS___ ___NUMBER_L___, ___NUMBER_R___ -#define ___SYMS___ ___SYMB_L___, ___SYMB_R___ -#define ___BKLNUMS___ ___NUMBER_BEAKL15_L___, ___NUMBER_BEAKL15_R___ -#define ___NUMS_BP___ ___NUMBER_BEPO_L___, ___NUMBER_BEPO_R___ -#define ___SYMS_BEPO___ ___SYMBOL_BEPO_L___, ___SYMBOL_BEPO_L___ -#define ___BKLNUMS_BP___ ___NUMBER_BEAKL15_BP_L___, ___NUMBER_BEAKL15_BP_R___ -#define ___FUNCS_1_10___ ___FUNC_L___, ___FUNC_R___ diff --git a/users/ericgebhart/defs/accented_keys.def b/users/ericgebhart/defs/accented_keys.def new file mode 100644 index 00000000000..a0b203be932 --- /dev/null +++ b/users/ericgebhart/defs/accented_keys.def @@ -0,0 +1,101 @@ +// Accented keys. +// add them to the custom keys enum. +// List them here, with their keycode and the accent keycode +// that are needed to create them. + + +// Last, most frequent letters in french. +// é is further up. +// 24 x 3 588 990 0.38% +// 25 j 3 276 064 0.34% +// 26 è 2 969 466 0.31% +// 27 à 2 966 029 0.31% +// 28 k 2 747 547 0.29% +// 29 w 1 653 435 0.17% +// 30 z 1 433 913 0.15% +// 31 ê 802 211 0.08% +// 32 ç 544 509 0.06% +// 33 ô 357 197 0.04% +// 34 â 320 837 0.03% +// 35 î 280 201 0.03% +// 36 û 164 516 0.02% +// 37 ù 151 236 0.02% +// 38 ï 138 221 0.01% +// 39 á 73 751 0.01% - absent. +// 79 ü 55 172 0.01% +// 82 ë 53 862 0.01% +//absent. +// 83 ö 51 020 0.01% +// 84 í 48 391 0.01% + + // ACCENT +// Custom key code, Keycode, altgr accent keycode. +#if defined(SECOND_LOCALE) && (SECOND_LOCALE == BEPO) +ACCENTED(BP_OCIR, BP_O, BP_DCIR) +ACCENTED(BP_ACIR, BP_A, BP_DCIR) +ACCENTED(BP_ICIR, BP_I, BP_DCIR) +ACCENTED(BP_UCIR, BP_U, BP_DCIR) +//ACCENTED(BP_CCIR, BP_C, BP_DCIR) +//ACCENTED(BP_GCIR, BP_G, BP_DCIR) +//ACCENTED(BP_HCIR, BP_H, BP_DCIR) +#endif + +ACCENTED(US_OCIR, US_O, US_DCIR) +ACCENTED(US_ACIR, US_A, US_DCIR) +ACCENTED(US_ICIR, US_I, US_DCIR) +ACCENTED(US_UCIR, US_U, US_DCIR) +ACCENTED(US_ECIR, US_E, US_DCIR) + +#if defined(SECOND_LOCALE) && (SECOND_LOCALE == BEPO) +ACCENTED(BP_AACU, BP_A, BP_ACUT) +ACCENTED(BP_OACU, BP_O, BP_ACUT) +ACCENTED(BP_IACU, BP_I, BP_ACUT) +ACCENTED(BP_UACU, BP_U, BP_ACUT) + +//ACCENTED(BP_OGRV, BP_O, BP_DGRV) +ACCENTED(BP_IGRV, BP_I, BP_DGRV) +#endif + +ACCENTED(US_IGRV, US_I, US_DGRV) +ACCENTED(US_UGRV, US_U, US_DGRV) +ACCENTED(US_EGRV, US_E, US_DGRV) +ACCENTED(US_AGRV, US_A, US_DGRV) + +// ACCENTED(BP_NTIL, BP_N, BP_DTIL) +// ACCENTED(BP_ATIL, BP_A, BP_DTIL) +// ACCENTED(BP_OTIL, BP_O, BP_DTIL) +// ACCENTED(BP_UTIL, BP_U, BP_DTIL) + +ACCENTED(US_IIAE, US_I, US_DIAE) +ACCENTED(US_UIAE, US_U, US_DIAE) +ACCENTED(US_EIAE, US_E, US_DIAE) +ACCENTED(US_OIAE, US_O, US_DIAE) + +#if defined(SECOND_LOCALE) && (SECOND_LOCALE == BEPO) +ACCENTED(BP_IIAE, BP_I, BP_DIAE) +ACCENTED(BP_UIAE, BP_U, BP_DIAE) +ACCENTED(BP_EIAE, BP_E, BP_DIAE) +ACCENTED(BP_OIAE, BP_O, BP_DIAE) +// ACCENTED(BP_AIAE, BP_A, BP_DIAE) +#endif + + // ACCENTED(E_ACUTE, SK_E, SK_ACUT) + // ACCENTED(R_ACUTE, SK_R, SK_ACUT) + // ACCENTED(U_ACUTE, SK_U, SK_ACUT) + // ACCENTED(I_ACUTE, SK_I, SK_ACUT) + // ACCENTED(O_ACUTE, SK_O, SK_ACUT) + // ACCENTED(A_ACUTE, SK_A, SK_ACUT) + // ACCENTED(L_ACUTE, SK_L, SK_ACUT) + // ACCENTED(Y_ACUTE, SK_Z, SK_ACUT) + // ACCENTED(T_CARON, SK_T, SK_CARN) + // ACCENTED(Z_CARON, SK_Y, SK_CARN) + // ACCENTED(O_CARON, SK_O, SK_CARN) + // ACCENTED(S_CARON, SK_S, SK_CARN) + // ACCENTED(D_CARON, SK_D, SK_CARN) + // ACCENTED(L_CARON, SK_L, SK_CARN) + // ACCENTED(C_CARON, SK_C, SK_CARN) + // ACCENTED(N_CARON, SK_N, SK_CARN) + // ACCENTED(U_UMLAU, SK_U, SK_DIAE + // ACCENTED(O_UMLAU,SK_O, SK_DIAE) + // // napis o s vokanom cez vokan rather than normalne aby sa dalo velke uo + // ACCENTED(O_CCIRC, SK_O, SK_CIRC) diff --git a/users/ericgebhart/defs/alt_shift.def b/users/ericgebhart/defs/alt_shift.def new file mode 100644 index 00000000000..52d9cf11f48 --- /dev/null +++ b/users/ericgebhart/defs/alt_shift.def @@ -0,0 +1,6 @@ +// alt shift. Give an existing key code, +// and maybe an alternate shift keycode. + +ALT_SHIFT(US_EXLM, US_PERC) +SHIFT_FOR_2(US_AT) +SHIFT_FOR_3(US_DLR) diff --git a/users/ericgebhart/defs/altlocal_keys.def b/users/ericgebhart/defs/altlocal_keys.def new file mode 100644 index 00000000000..20d1e99b400 --- /dev/null +++ b/users/ericgebhart/defs/altlocal_keys.def @@ -0,0 +1,208 @@ +// These are to create keys which don't exist in a locale. +// so that we can create alternate maps to qwerty, azerty, or whatever. +// Key name, +// unshifted key and it's required mods. +// the desired shifted keys and it's required mods. + +// for dvorak on bepo +#if defined(SECOND_LOCALE) && (SECOND_LOCALE == BEPO) + MK_KEY(BP_DV_1, BP_DQUO, MOD_LSFT, BP_DCIR, MOD_LSFT) + MK_KEY(BP_DV_2, BP_LDAQ, MOD_LSFT, BP_AT, MOD_NONE) + MK_KEY(BP_DV_3, BP_RDAQ, MOD_LSFT, BP_DLR, MOD_LSFT) + MK_KEY(BP_DV_4, BP_LPRN, MOD_LSFT, BP_DLR, MOD_NONE) + MK_KEY(BP_DV_5, BP_RPRN, MOD_LSFT, BP_PERC, MOD_NONE) + MK_KEY(BP_DV_6, BP_AT, MOD_LSFT, BP_AT, MOD_BIT(KC_RALT)) + MK_KEY(BP_DV_7, BP_PLUS, MOD_LSFT, BP_P, MOD_BIT(KC_RALT)) + MK_KEY(BP_DV_8, BP_MINS, MOD_LSFT, BP_ASTR, MOD_NONE) + MK_KEY(BP_DV_9, BP_SLSH, MOD_LSFT, BP_LPRN, MOD_NONE) + MK_KEY(BP_DV_0, BP_ASTR, MOD_LSFT, BP_RPRN, MOD_NONE) + + MK_KEY(BP_DV_GRV, BP_PERC, MOD_LSFT, BP_K, MOD_BIT(KC_RALT)) + MK_KEY(BP_DV_SCLN, BP_COMM, MOD_LSFT, BP_DOT, MOD_LSFT) + MK_KEY(BP_DV_SLSH, BP_SLSH, MOD_NONE, BP_QUOT, MOD_LSFT) + //MK_KEY(BP_DV_BSLS, BP_AGRV, MOD_BIT(KC_RALT), BP_B, MOD_BIT(KC_RALT)) + MK_KEY(BP_DV_EQL, BP_EQL, MOD_NONE, BP_PLUS, MOD_NONE) + MK_KEY(BP_DV_COMM, BP_COMM, MOD_NONE, BP_LDAQ, MOD_BIT(KC_RALT)) + MK_KEY(BP_DV_DOT, BP_DOT, MOD_NONE, BP_RDAQ, MOD_BIT(KC_RALT)) + MK_KEY(BP_DV_QUOT, BP_QUOT, MOD_NONE, BP_DQUO, MOD_NONE) + MK_KEY(BP_DV_MINS, BP_MINS, MOD_NONE, KC_SPC, MOD_BIT(KC_RALT)) +#endif + +#if defined(BEAKL15_LAYER_ENABLE) || defined(BEAKL19_LAYER_ENABLE) + // Keys for BEAKL 15, 19 on Qwerty + MK_KEY(KC_BK_DOT, KC_DOT, MOD_NONE, KC_2, MOD_LSFT) + MK_KEY(KC_BK_COMM, KC_COMM, MOD_NONE, KC_1, MOD_LSFT) + MK_KEY(KC_BK_QUOT, KC_QUOT, MOD_NONE, KC_GRV, MOD_NONE) + + MK_KEY(US_BK_DOT, KC_DOT, MOD_NONE, KC_2, MOD_LSFT) + MK_KEY(US_BK_COMM, KC_COMM, MOD_NONE, KC_1, MOD_LSFT) + MK_KEY(US_BK_QUOT, KC_QUOT, MOD_NONE, KC_GRV, MOD_NONE) + + // Keys for BEAKL WI on Qwerty + MK_KEY(KC_BKW_DOT, KC_DOT, MOD_NONE, KC_GRV, MOD_NONE) + MK_KEY(KC_BKW_COMM, KC_COMM, MOD_NONE, KC_TILD, MOD_NONE) + MK_KEY(KC_BKW_COLN, KC_SCLN, MOD_LSFT, KC_SCLN, MOD_NONE) + +# if defined(SECOND_LOCALE) && (SECOND_LOCALE == BEPO) || (DEFAULT_LANG == BEPO) + // Keys for BEAKL on BEPO + MK_KEY(BP_BK_DOT, BP_DOT, MOD_NONE, BP_AT, MOD_NONE) + MK_KEY(BP_BK_COMM, BP_COMM, MOD_NONE, BP_EXLM, MOD_NONE) + MK_KEY(BP_BK_QUOT, BP_QUOT, MOD_NONE, BP_PERC, MOD_LSFT) + + +# ifdef BEAKLWI_LAYER_ENABLE + // Keys for BEAKL WI on BEPO + MK_KEY(BP_BKW_DOT, BP_DOT, MOD_NONE, BP_GRV, MOD_NONE) + MK_KEY(BP_BKW_COMM, BP_COMM, MOD_NONE, BP_TILD, MOD_NONE) + MK_KEY(BP_BKW_COLN, BP_COLN, MOD_LSFT, BP_SCLN, MOD_NONE) +# endif + + // Keys for BEAKL 27 on BEPO +# ifdef BEAKL27_LAYER_ENABLE + MK_KEY(BP_BK2_DOT, BP_DOT, MOD_NONE, BP_GRV, MOD_NONE) + MK_KEY(BP_BK2_COMM, BP_COMM, MOD_NONE, BP_QUES, MOD_NONE) + MK_KEY(BP_BK2_EXLM, BP_EXLM, MOD_NONE, BP_PERC, MOD_LSFT) + MK_KEY(BP_BK2_QUOT, BP_QUOT, MOD_NONE, BP_QUOT, MOD_NONE) +# endif +# endif +#endif + +#ifdef BEAKL27_LAYER_ENABLE + // Keys for BEAKL 27 on Qwerty + /* // altered shifted pairs: dot = .` comma = ,? dquot = "! */ + MK_KEY(KC_BK2_DOT, KC_DOT, MOD_NONE, KC_GRV, MOD_NONE) + MK_KEY(KC_BK2_COMM, KC_COMM, MOD_NONE, KC_QUES, MOD_NONE) + MK_KEY(KC_BK2_EXLM, KC_EXLM, MOD_NONE, KC_DQUO, MOD_NONE) + MK_KEY(KC_BK2_QUOT, KC_QUOT, MOD_NONE, KC_QUOT, MOD_NONE) + + MK_KEY(US_BK2_DOT, US_DOT, MOD_NONE, US_GRV, MOD_NONE) + MK_KEY(US_BK2_COMM, US_COMM, MOD_NONE, US_QUES, MOD_NONE) + MK_KEY(US_BK2_EXLM, US_EXLM, MOD_NONE, US_DQUO, MOD_NONE) + MK_KEY(US_BK2_QUOT, US_QUOT, MOD_NONE, US_QUOT, MOD_NONE) +#endif + + +// shifted pairs: dot = .` comma = ,~ colon = :; + +#if defined(HD_NEU_LAYER_ENABLE) || \ + defined(HD_NEU_NARROW_LAYER_ENABLE) || \ + defined(HD_GOLD_LAYER_ENABLE) || \ + defined(HD_SILVER_LAYER_ENABLE) || \ + defined(HD_BRONZE_LAYER_ENABLE) || \ + defined(HD_PLATINUM_LAYER_ENABLE) || \ + defined(HD_REF_LAYER_ENABLE) + +// hands down alterations. +/* alt shifts ;: .& /\* '? "! ,| -+ */ +// for en qwerty + MK_KEY(KC_HD_DQUO, KC_QUOT, MOD_LSFT, KC_1, MOD_LSFT) // "! + MK_KEY(KC_HD_QUOT, KC_QUOT, MOD_NONE, KC_SLSH, MOD_LSFT) // '? + + MK_KEY(KC_HD_DOT, KC_DOT, MOD_NONE, KC_7, MOD_LSFT) // .& + MK_KEY(KC_HD_SCLN, KC_SCLN, MOD_NONE, KC_SCLN, MOD_LSFT) // ;: + MK_KEY(KC_HD_COMM, KC_COMM, MOD_NONE, KC_BSLS, MOD_LSFT) // ,| + MK_KEY(KC_HD_MINS, KC_MINS, MOD_NONE, KC_EQL, MOD_LSFT) // -+ + MK_KEY(KC_HD_SLSH, KC_SLSH, MOD_NONE, KC_8, MOD_LSFT) // /* + + // for us international + MK_KEY(US_HD_DQUO, US_QUOT, MOD_LSFT, US_1, MOD_LSFT) + MK_KEY(US_HD_QUOT, US_QUOT, MOD_NONE, KC_SLSH, MOD_LSFT) + + MK_KEY(US_HD_DOT, US_DOT, MOD_NONE, US_7, MOD_LSFT) + MK_KEY(US_HD_SCLN, KC_SCLN, MOD_NONE, KC_SCLN, MOD_LSFT) // ;: + MK_KEY(US_HD_COMM, US_COMM, MOD_NONE, US_BSLS, MOD_LSFT) + MK_KEY(US_HD_MINS, US_MINS, MOD_NONE, US_EQL, MOD_LSFT) + MK_KEY(US_HD_SLSH, US_SLSH, MOD_NONE, US_8, MOD_LSFT) + +// for bepo +#if defined(SECOND_LOCALE) && (SECOND_LOCALE == BEPO) || (DEFAULT_LANG == BEPO) + MK_KEY(BP_HD_DQUO, BP_DQUO, MOD_NONE, BP_QUES, MOD_NONE) + MK_KEY(BP_HD_QUOT, BP_QUOT, MOD_NONE, BP_EXLM, MOD_NONE) + MK_KEY(BP_HD_SCLN, BP_SCLN, MOD_NONE, BP_COLN, MOD_NONE) // ;: + + MK_KEY(BP_HD_DOT, BP_DOT, MOD_NONE, BP_AMPR, MOD_NONE) + MK_KEY(BP_HD_COMM, BP_COMM, MOD_NONE, BP_PIPE, MOD_NONE) + MK_KEY(BP_HD_MINS, BP_MINS, MOD_NONE, BP_PLUS, MOD_NONE) + MK_KEY(BP_HD_SLSH, BP_SLSH, MOD_NONE, BP_ASTR, MOD_NONE) +#endif + +#endif + + +/* alt shifts ;: .& /\* '? "! ,| -+ */ +#ifdef HD_DASH_LAYER_ENABLE +// DASH and Elan have these reversed from the metals. +/* //alt shift keys. "? '! */ + MK_KEY(KC_HD_D_DQUO, KC_DQUO, MOD_NONE, KC_SLSH, MOD_LSFT) // "? + MK_KEY(KC_HD_D_QUOT, KC_QUOT, MOD_NONE, KC_1, MOD_LSFT) // '! + + MK_KEY(KC_HD_D_DOT, KC_DOT, MOD_NONE, KC_7, MOD_LSFT) // .& + MK_KEY(KC_HD_D_COMM, KC_COMM, MOD_NONE, KC_BSLS, MOD_LSFT) // ,| + MK_KEY(KC_HD_D_MINS, KC_MINS, MOD_NONE, KC_EQL, MOD_LSFT) // -+ + MK_KEY(KC_HD_D_SLSH, KC_SLSH, MOD_NONE, KC_8, MOD_LSFT) // /* + + // for us international + MK_KEY(US_HD_D_DQUO, US_QUOT, MOD_LSFT, KC_SLSH, MOD_LSFT) + MK_KEY(US_HD_D_QUOT, US_QUOT, MOD_NONE, US_1, MOD_LSFT) + + MK_KEY(US_HD_D_DOT, US_DOT, MOD_NONE, US_7, MOD_LSFT) + MK_KEY(US_HD_D_COMM, US_COMM, MOD_NONE, US_BSLS, MOD_LSFT) + MK_KEY(US_HD_D_MINS, US_MINS, MOD_NONE, US_EQL, MOD_LSFT) + MK_KEY(US_HD_D_SLSH, US_SLSH, MOD_NONE, US_8, MOD_LSFT) + +// for bepo +#if defined(SECOND_LOCALE) && (SECOND_LOCALE == BEPO) || (DEFAULT_LANG == BEPO) + MK_KEY(BP_HD_D_DQUO, BP_DQUO, MOD_NONE, BP_QUES, MOD_NONE) + MK_KEY(BP_HD_D_QUOT, BP_QUOT, MOD_NONE, BP_EXLM, MOD_NONE) + + MK_KEY(BP_HD_D_DOT, BP_DOT, MOD_NONE, BP_AMPR, MOD_NONE) + MK_KEY(BP_HD_D_COMM, BP_COMM, MOD_NONE, BP_PIPE, MOD_NONE) + MK_KEY(BP_HD_D_MINS, BP_MINS, MOD_NONE, BP_PLUS, MOD_NONE) + MK_KEY(BP_HD_D_SLSH, BP_SLSH, MOD_NONE, BP_ASTR, MOD_NONE) +#endif + +#endif + +#ifdef HD_ELAN_LAYER_ENABLE +// Elan has alt shift of comma and dot on the thumb. +// en + MK_KEY(KC_HD_E_DQUO, KC_QUOT, MOD_LSFT, KC_SLSH, MOD_LSFT) + MK_KEY(KC_HD_E_QUOT, KC_QUOT, MOD_NONE, KC_1, MOD_LSFT) +// the rest is the same + MK_KEY(KC_HD_E_MINS, KC_MINS, MOD_NONE, KC_EQL, MOD_LSFT) // -+ + MK_KEY(KC_HD_E_SLSH, KC_SLSH, MOD_NONE, KC_8, MOD_LSFT) // /* +// until .: and ,; + MK_KEY(KC_HD_E_DOT, KC_DOT, MOD_NONE, KC_SCLN, MOD_LSFT) // .: + MK_SKEY(KC_HD_E_COMM, KC_COMM, KC_SCLN) // ,; +/* (< {[ */ + MK_KEY(KC_HD_E_LPRN, KC_LPRN, MOD_NONE, KC_COMM, MOD_LSFT) + MK_KEY(KC_HD_E_LCBR, KC_LCBR, MOD_NONE, KC_LBRC, MOD_NONE ) + +// US-intl + MK_KEY(US_HD_E_DQUO, US_QUOT, MOD_LSFT, KC_SLSH, MOD_LSFT) + MK_KEY(US_HD_E_QUOT, US_QUOT, MOD_NONE, US_1, MOD_LSFT) +// the rest is the same + MK_KEY(US_HD_E_MINS, US_MINS, MOD_NONE, US_EQL, MOD_LSFT) // -+ + MK_KEY(US_HD_E_SLSH, US_SLSH, MOD_NONE, US_8, MOD_LSFT) // /* +// until .: and ,; + MK_KEY(US_HD_E_DOT, KC_DOT, MOD_NONE, US_SCLN, MOD_LSFT) // .: + MK_SKEY(US_HD_E_COMM, US_COMM, US_SCLN) // ,; +/* (< {[ */ + MK_KEY(US_HD_E_LPRN, US_LPRN, MOD_NONE, US_COMM, MOD_LSFT) + MK_KEY(US_HD_E_LCBR, US_LCBR, MOD_NONE, US_LBRC, MOD_NONE ) + +// bepo +#if defined(SECOND_LOCALE) && (SECOND_LOCALE == BEPO) || (DEFAULT_LANG == BEPO) + MK_KEY(BP_HD_E_DQUO, BP_DQUO, MOD_NONE, BP_SLSH, MOD_NONE) + MK_KEY(BP_HD_E_QUOT, BP_QUOT, MOD_NONE, BP_EXLM, MOD_NONE) +// the rest is the same + MK_KEY(BP_HD_E_MINS, BP_MINS, MOD_NONE, BP_EQL, MOD_NONE) // -+ + MK_KEY(BP_HD_E_SLSH, BP_SLSH, MOD_NONE, BP_ASTR, MOD_NONE) // /* +// until .: and ,; + MK_KEY(BP_HD_E_DOT, KC_DOT, MOD_NONE, BP_SCLN, MOD_LSFT) // .: + MK_SKEY(BP_HD_E_COMM, BP_COMM, BP_SCLN) // ,; +/* (< {[ */ + MK_KEY(BP_HD_E_LPRN, BP_LPRN, MOD_NONE, BP_COMM, MOD_LSFT) + MK_KEY(BP_HD_E_LCBR, BP_LCBR, MOD_NONE, BP_LBRC, MOD_NONE ) +#endif +#endif diff --git a/users/ericgebhart/defs/combos.def b/users/ericgebhart/defs/combos.def new file mode 100644 index 00000000000..85b5d2d5885 --- /dev/null +++ b/users/ericgebhart/defs/combos.def @@ -0,0 +1,139 @@ +// Per layer combo reference layers. +// Default is current layer, or COMBO_REF_DEFAULT if set. +// _COMBO_REF is the default if enabled. + +//COMBO_REF_LAYER(_DVORAK_BP, _COMBO_REF2) +COMBO_REF_LAYER(_NAV, _NAV) + + +// COMBOS +// name result chord keys + +// sml nav, sml keypad, zqxj, onshot accents, oneshot symbols +// home, end, caps word, accents? -> aeeecio oe, ao, + + +// reference COMBO_REF +COMB(TSCTL, TS_LCTL, CB_1L3, CB_1L4) +COMB(SMLNAV1, SML_NAV, CB_1L2, CB_1L3) +COMB(OSACCENTMT, SML_KEYPAD, CB_1L2, CB_1R4) + +#ifdef TOPROWS_LAYER_ENABLE +COMB(OSTOPROWS, SML_TOPROWS, CB_1L3, CB_1R3) +#endif + +//COMB(OSlsftT, OS_LSFT, CB_1L4, CB_1R2) +COMB(OSSFT, OS_LSFT, CB_2L4, CB_2R2) +COMB(TSCTL2, TS_LCTL, CB_1L4, CB_1R2) + +// COMB(SMLNAV, SML_NAV, CB_2L4, CB_2R2) +COMB(OSCTL, OS_LCTL, CB_2L2, CB_2R4) + +COMB(OSACCENTM, OSL_ACCENTS_MORTE, CB_2L3, CB_2R3) + +COMB(capsword, CAPS_WORD, CB_3L4, CB_3R2) +COMB(OSRALT, OS_RALT, CB_3L3, CB_3R3) +COMB(OSLALT2, OS_LALT, CB_3L2, CB_3R4) + +COMB(OSLAYER, LAYER_OSL, CB_3L1, CB_3R5) +COMB(OSLSYMB, OSL_SYMB, CB_TH2, CB_TH5) +COMB(LNAV, SML_NAV, CB_TH3, CB_TH4) + +COMB(_Q, KC_Q, CB_3L2, CB_3L3) +COMB(_X, KC_X, CB_3L3, CB_3L4) +COMB(_Z, KC_Z, CB_3R3, CB_3R4) + +// vertical thumb combos for the kyria +//COMB(xxx, xxx, CB_TH2, CB_0TH1) + +#ifdef MEDIA_LAYER_ENABLE +COMB(SMLMEDIA, SML_MEDIA, CB_TH3, CB_0TH2) +#endif + +COMB(OSLACCENT2, OSL_ACCENTS_MORTE, CB_TH4, CB_0TH3) +COMB(KEYPAD, SML_KEYPAD, CB_TH5, CB_0TH4) + + + +// reference COMBO_REF2 + +#if defined(SECOND_LOCALE) && (SECOND_LOCALE == BEPO) +COMB(TSCTL_BP, TS_LCTL, CB_1L3, CB_1L4) +COMB(SMLNAV1_bp, SML_NAV, CB_1L2, CB_1L3) + +#ifdef ACCENTS_MORTE_LAYER_ENABLE +COMB(OSLACCENT_bp, OSL(_ACCENTS_MORTE_BP), CB2_2L1, CB2_2L2) +#endif + +COMB(SMLNAV_BP, SML_NAV, CB2_2L2, CB2_2L3) +COMB(OSCTL_BP, OS_LCTL, CB2_2L3, CB2_2L4) + +COMB(OSSFT_BP, OS_LSFT, CB2_2R2, CB2_2R3) +// COMB(SMLKEYPAD_BP, SML_KEYPAD_BP, CB2_2R3, CB2_2R4) + +COMB(capsword_BP, CAPS_WORD_ON, CB2_3L4, CB2_3R2) + +// COMB(OSLSYMBP_BP, OSL(_SYMB_BP), CB2_TH2, CB2_TH5) +COMB(LNAV_BP, SML_NAV, CB2_TH3, CB2_TH4) + +COMB(_Qbp, BP_Q, CB2_3L2, CB2_3L3) +COMB(_Xbp, BP_X, CB2_3L3, CB2_3L4) +COMB(_Zbp, BP_Z, CB2_3R3, CB2_3R4) +#endif + + +// Reference nav layer +COMB(END_nav, KC_END, KC_PGUP, KC_PGDN) +COMB(HOME_nav, KC_HOME, KC_UP, KC_DOWN) + + +//COMB(JKL_SPC, KC_SPC, KC_J, KC_X) +//SUBS(TH_THE, "the", KC_T, KC_H) // SUBS uses SEND_STRING to output the given string. + +// from possum vibes to review. +/* COMBO NAME | OUTPUT | PARAMS */ + +// /*---- TOP ROW ----*/ +// COMB(turbonav, NAV_TG, KC_W, KC_R) // Nav access +// COMB(save, S_SAVE, KC_E, KC_R) // Save +// COMB(back_fwd, BCK_FWD, KC_R, KC_T) // Back/Fwd (shifted) + +// COMB(undo_redo, UND_RED, KC_Y, KC_U) // Undo/Redo (shifted) +// COMB(esc, KC_ESC, KC_U, KC_O) // Esc + +// #ifdef IS_PINKY_CLUSTER +// COMB(delete, KC_DEL, KC_A, KC_SCLN) +// COMB(caps, KC_CAPS, KC_Q, KC_P) +// #endif + +// /*---- HOME ROW ----*/ +// COMB(cut, S_CUT, KC_S, KC_F) // Shift+Del (cut) +// COMB(copy, S_COPY, KC_S, KC_D) // Ctrl+Ins (copy) +// COMB(paste, S_PASTE, KC_D, KC_F) // Shift+Del (paste) +// COMB(panic, PANIC, KC_D, KC_K) // panic! + +// COMB(nummode, NUMMODE, KC_J, KC_K) // Nummode toggle +// COMB(symmode, SYM_TG, KC_K, KC_L) // Sym layer +// COMB(tab, KC_TAB, KC_K, KC_M) // Tab + + +// /*---- BOTTOM ROW ----*/ +// COMB(hash, KC_HASH, KC_X, KC_C) // # +// COMB(fslash, KC_SLSH, KC_C, KC_V) // / + +// COMB(dash, KC_MINS, KC_M, KC_COMM) // - +// COMB(asterisk, KC_ASTR, KC_COMM, KC_DOT) // * +// COMB(at, KC_AT, KC_M, KC_DOT) // @ + + +// /*---- THUMBS ----*/ +// COMB(sys_lthm, SYS_OSL, KC_B, KC_ENT) // Sys OSL + +// COMB(space_shift, SPC_SFT, KC_TAB, KC_SPC) // space and activate oss + +// COMB(underscore_rthm, KC_UNDS, KC_SPC, KC_N) // _ + +// /*---- THUMB+ALPHAS ----*/ +// // COMB(os_fun, FUN_OSL, KC_ENT, KC_C) // OS Func +// // COMB(os_num, NUM_OSL, KC_A, KC_F) // OSL num +// // COMB(os_sym, SYM_OSL, KC_SPC, KC_M) // OSL sym diff --git a/users/ericgebhart/defs/custom_keys.def b/users/ericgebhart/defs/custom_keys.def new file mode 100644 index 00000000000..075b7de0c18 --- /dev/null +++ b/users/ericgebhart/defs/custom_keys.def @@ -0,0 +1,86 @@ +// custom key codes. + EPRM, + //VRSN, + CAPS_WORD_ON, + + // LAYERStuff. + KC_NEXT_LOCALE, + KC_NEXT_BASE_LAYER, + KC_SET_BASE, + // Misc. + KC_MAKE, + KC_RESET, + KC_RGB_T, + RGB_IDL, + KC_SECRET_1, + KC_SECRET_2, + KC_SECRET_3, + KC_SECRET_4, + KC_SECRET_5, + + KC_SPACETEST, + + /// Need to evaluate which to keep. + BCK_FWD, // Alt left and right + CLEAR, // Clears all mods, does not change layers. + LOCKSCR, // locks screen per is_windows value + PANIC, // Clears all One-Shot keys and returns to base layer. + UND_RED, // Ctrl Z and Y + + // macros + QMKCOMP, // qmk compile + QMKFLSH, // qmk flash + + // Swapper keys - just the swapper key, maybe gets reused. + SW_REV, // Dead key, reverse direction for swapper + +// for the combo ref layers. + CB_0M1, CB_0M2, CB_0M3, + CB_1M1, CB_1M2, CB_1M3, + CB_2M1, CB_2M2, CB_2M3, + CB_3M1, CB_3M2, CB_3M3, + CB_4M1, CB_4M2, CB_4M3, CB_4M4, CB_4M5, + + CB_1, CB_2, CB_3, CB_4, CB_5, CB_6, CB_7, CB_8, CB_9, CB_0, + + CB_1R1, CB_1R2, CB_1R3, CB_1R4, CB_1R5, + CB_1L1, CB_1L2, CB_1L3, CB_1L4, CB_1L5, + CB_2R1, CB_2R2, CB_2R3, CB_2R4, CB_2R5, + CB_2L1, CB_2L2, CB_2L3, CB_2L4, CB_2L5, + CB_3R1, CB_3R2, CB_3R3, CB_3R4, CB_3R5, + CB_3L1, CB_3L2, CB_3L3, CB_3L4, CB_3L5, + CB_4L1, CB_4L2, CB_4L3, CB_4L4, CB_4L5, + CB_4R1, CB_4R2, CB_4R3, CB_4R4, CB_4R5, + + CB2_0M1, CB2_0M2, CB2_0M3, + CB2_1M1, CB2_1M2, CB2_1M3, + CB2_2M1, CB2_2M2, CB2_2M3, + CB2_3M1, CB2_3M2, CB2_3M3, + CB2_4M1, CB2_4M2, CB2_4M3, CB2_4M4, CB2_4M5, + + CB2_1, CB2_2, CB2_3, CB2_4, CB2_5, CB2_6, CB2_7, CB2_8, CB2_9, CB2_0, + + CB2_1R1, CB2_1R2, CB2_1R3, CB2_1R4, CB2_1R5, + CB2_1L1, CB2_1L2, CB2_1L3, CB2_1L4, CB2_1L5, + CB2_2R1, CB2_2R2, CB2_2R3, CB2_2R4, CB2_2R5, + CB2_2L1, CB2_2L2, CB2_2L3, CB2_2L4, CB2_2L5, + CB2_3R1, CB2_3R2, CB2_3R3, CB2_3R4, CB2_3R5, + CB2_3L1, CB2_3L2, CB2_3L3, CB2_3L4, CB2_3L5, + CB2_4L1, CB2_4L2, CB2_4L3, CB2_4L4, CB2_4L5, + CB2_4R1, CB2_4R2, CB2_4R3, CB2_4R4, CB2_4R5, + +// core 6 thumb keys for combo reference layer + CB_TH1, CB_TH2, CB_TH3, CB_TH4, CB_TH5, CB_TH6, + CB2_TH1, CB2_TH2, CB2_TH3, CB2_TH4, CB2_TH5, CB2_TH6, + CB_1TH1, CB_1TH2, CB_1TH3, CB_1TH4, CB_1TH5, CB_1TH6, + CB2_1TH1, CB2_1TH2, CB2_1TH3, CB2_1TH4, CB2_1TH5, CB2_1TH6, + + // for the extra thumb keys on the kyria + CB_0TH1 , CB_0TH2, CB_0TH3, CB_0TH4, + CB_THA, CB_THB, CB_THC, CB_THD, + +// edge keys for the combo reference layer + L0_CB, L1_CB, L2_CB, L3_CB, + R0_CB, R1_CB, R2_CB, R3_CB, + L0_CB2, L1_CB2, L2_CB2, L3_CB2, + R0_CB2, R1_CB2, R2_CB2, R3_CB2, diff --git a/users/ericgebhart/defs/encoders.def b/users/ericgebhart/defs/encoders.def new file mode 100644 index 00000000000..638d3fbf4ba --- /dev/null +++ b/users/ericgebhart/defs/encoders.def @@ -0,0 +1,65 @@ +// Layer/none, encoder index 0/1, CW_KC, CCW_KC, Qualifying mod or none +// LAYER_NONE and MOD_NONE for a single use. +// LEFT and RIGHT for index. 0 and 1... + +// default encoders, all layers no mods. +ENCODER_ACTION(LAYER_NONE, RIGHT, KC_PGDN, KC_PGUP, MOD_NONE) +ENCODER_ACTION(LAYER_NONE, LEFT, KC_DOWN, KC_UP, MOD_NONE) +ENCODER_ACTION(LAYER_NONE, LEFT, KC_PGDN, KC_PGUP, MOD_LSFT) + +// Symbol layer encoders. +// left and right. +ENCODER_ACTION(_SYMB_EN, LEFT, KC_LEFT, KC_RIGHT, MOD_NONE) +// word left or right. +ENCODER_ACTION(_SYMB_EN, LEFT, LCTL(KC_LEFT), LCTL(KC_RIGHT), MOD_NONE) + +// Nav layer encoders. +ENCODER_ACTION(_NAV, LEFT, KC_TAB, S(KC_TAB), MOD_NONE) +ENCODER_ACTION(_NAV, RIGHT, A(KC_TAB), A(S(KC_TAB)), MOD_NONE) +ENCODER_ACTION(_NAV, RIGHT, KC_VOLU, KC_VOLD, MOD_NONE) + +// RGB functions for the RGB layer. +#ifdef RGB_MATRIX_ENABLE + ENCODER_FUNCTION(_RGB, LEFT, + rgb_matrix_increase_speed_noeeprom, + rgb_matrix_decrease_speed_noeeprom, MOD_NONE) + + ENCODER_FUNCTION(_RGB, RIGHT, + rgb_matrix_increase_hue_noeeprom, + rgb_matrix_decrease_hue_noeeprom, MOD_NONE) + + ENCODER_FUNCTION(_RGB, LEFT, + rgb_matrix_increase_sat_noeeprom, + rgb_matrix_decrease_sat_noeeprom, MOD_LSFT) + + ENCODER_FUNCTION(_RGB, RIGHT, + rgb_matrix_increase_val_noeeprom, + rgb_matrix_decrease_val_noeeprom, MOD_LSFT) + + ENCODER_FUNCTION(_RGB, LEFT, + rgb_matrix_step_noeeprom; + rgb_matrix_step_reverse_noeeprom, MOD_LCTL) + +#elif defined(RGBLIGHT_ENABLE) + + ENCODER_FUNCTION(_RGB, LEFT, + rgblight_increase_speed_noeeprom, + rgblight_decrease_speed_noeeprom, MOD_NONE) + + ENCODER_FUNCTION(_RGB, RIGHT, + rgblight_increase_hue_noeeprom, + rgblight_decrease_hue_noeeprom, MOD_NONE) + + ENCODER_FUNCTION(_RGB, LEFT, + rgblight_increase_sat_noeeprom, + rgblight_decrease_sat_noeeprom, MOD_LSFT) + + ENCODER_FUNCTION(_RGB, RIGHT, + rgblight_increase_val_noeeprom, + rgblight_decrease_val_noeeprom, MOD_LSFT) + + + ENCODER_FUNCTION(_RGB, LEFT, + rgblight_step_noeeprom, + rgblight_step_reverse_noeeprom, MOD_LCTL) + #endif // RGB_MATRIX_ENABLE || RGBLIGHT_ENABLE diff --git a/users/ericgebhart/defs/key_overrides.def b/users/ericgebhart/defs/key_overrides.def new file mode 100644 index 00000000000..159e02e87ea --- /dev/null +++ b/users/ericgebhart/defs/key_overrides.def @@ -0,0 +1,23 @@ +//KOL -> name, mod_mask, keycode, sendkeycode, layer to apply. + +// // these are actually handled by alt_local_keys, in a more universal +// // and adaptable way. +// KOL(slash_pipe, MOD_MASK_SHIFT, KC_SLSH, KC_PIPE, _DVORAK_EN) + +// this one is interesting. +KOL(slash_backslash, MOD_MASK_ALT, KC_SLSH, KC_BSLS, _DVORAK_EN) + +// KOL(N2_dot, MOD_MASK_SHIFT, KC_2, KC_DOT, _KEYPAD_EN) +// KOL(N3_comma, MOD_MASK_SHIFT, KC_3, KC_COMMA, _KEYPAD_EN) + +// KOL(hash_at, MOD_MASK_SHIFT, KC_HASH, KC_AT, _CDH) +// KOL(dot_colon, MOD_MASK_SHIFT, KC_DOT, KC_COLN, _CDH) +// KOL(comma_semicolon, MOD_MASK_SHIFT, KC_COMMA, KC_SCLN, _CDH) +// KOL(space_unds, MOD_MASK_SHIFT, KC_SPACE, KC_UNDS, _CDH) +// KOL(mins_exlm, MOD_MASK_SHIFT, KC_MINS, KC_EXLM, _CDH) + +// KOL(bspc_del, MOD_MASK_SHIFT, KC_BSPC, KC_DEL, _NAV) + +// KOL(zero_degree, MOD_MASK_SHIFT, KC_0, DEGREE, _KEYPAD_EN) + +// KOL(eur_pnd, MOD_MASK_SHIFT, KC_EUR, KC_PND, _SYMB_EN) diff --git a/users/ericgebhart/defs/mod_lock.def b/users/ericgebhart/defs/mod_lock.def new file mode 100644 index 00000000000..da53ea0503d --- /dev/null +++ b/users/ericgebhart/defs/mod_lock.def @@ -0,0 +1,19 @@ +// mod lock keys. takes keymods not mods. +// keycode should be defined in custom_keys.def. +// custom key, modkey to activate +MODL(ML_LSFT, KC_LSFT) +MODL(ML_LCTL, KC_LCTL) +MODL(ML_LALT, KC_LALT) +MODL(ML_LGUI, KC_LGUI) + +// Keycodes which will NOT cancel mod lock mode. +IGNORE_KC( KC_LEFT) +IGNORE_KC( KC_RGHT) +IGNORE_KC( KC_UP) +IGNORE_KC( KC_DOWN) +IGNORE_KC( KC_HOME) +IGNORE_KC( KC_END) +IGNORE_KC( ML_LALT) +IGNORE_KC( ML_LCTL) +IGNORE_KC( ML_LGUI) +IGNORE_KC( ML_LSFT) diff --git a/users/ericgebhart/defs/not_dead.def b/users/ericgebhart/defs/not_dead.def new file mode 100644 index 00000000000..66023ec523a --- /dev/null +++ b/users/ericgebhart/defs/not_dead.def @@ -0,0 +1,19 @@ +// Make not dead keys from dead keys. +// Not dead keycode, dead key +NOT_DEAD(KC_DQUO_ND, KC_DQUO) +NOT_DEAD(KC_GRV_ND, KC_GRV) +NOT_DEAD(KC_QUOT_ND, KC_QUOT) +NOT_DEAD(KC_CIRC_ND, KC_CIRC) +NOT_DEAD(KC_TILD_ND, KC_TILD) + +NOT_DEAD(US_DQUO_ND, US_DQUO) +NOT_DEAD(US_GRV_ND, US_GRV) +NOT_DEAD(US_QUOT_ND, US_QUOT) +NOT_DEAD(US_CIRC_ND, US_CIRC) +NOT_DEAD(US_TILD_ND, US_TILD) + +NOT_DEAD(BP_DQUO_ND, BP_DQUO) +NOT_DEAD(BP_GRV_ND, BP_GRV) +NOT_DEAD(BP_QUOT_ND, BP_QUOT) +NOT_DEAD(BP_CIRC_ND, BP_CIRC) +NOT_DEAD(BP_TILD_ND, BP_TILD) diff --git a/users/ericgebhart/defs/nshot.def b/users/ericgebhart/defs/nshot.def new file mode 100644 index 00000000000..79559534c7e --- /dev/null +++ b/users/ericgebhart/defs/nshot.def @@ -0,0 +1,45 @@ +// Define keycodes in custom keys. +// KEYCode, mod keycode, to set for n-shot. +// ONESHOT is for one. +// NSHOT takes a count. + +// oneshots +ONESHOT(OS_LSFT, KC_LSFT) +ONESHOT(OS_LCTL, KC_LCTL) +ONESHOT(OS_LALT, KC_LALT) +ONESHOT(OS_LGUI, KC_LGUI) + +ONESHOT(OS_RSFT, KC_RSFT) +ONESHOT(OS_RCTL, KC_RCTL) +ONESHOT(OS_RALT, KC_RALT) +ONESHOT(OS_RGUI, KC_RGUI) + +// N-Shots +NSHOT(TS_LCTL, KC_LCTL, 2) +NSHOT(TS_RCTL, KC_RCTL, 2) + +// Keys which will cancel the n-shots. +CANCEL_KEY( PANIC) +CANCEL_KEY( CLEAR) +//CANCEL_KEY( THM_LH0) +//CANCEL_KEY( THM_LH1) +//CANCEL_KEY( THM_RH0) +//CANCEL_KEY( THM_RH1) + +// inherited from @possumvibes, keeping for now. +// Keys which will be ignored by n-shots. +//IGNORE_KEY( THM_LH0) +//IGNORE_KEY( THM_LH1) +//IGNORE_KEY( THM_RH0) +//IGNORE_KEY( THM_RH1) +//IGNORE_KEY( SYM_OSL) +//IGNORE_KEY( SYM_TG) +//IGNORE_KEY( NAV_TG) +//IGNORE_KEY( NUM_OSL) +//IGNORE_KEY( NUM_TO) +//IGNORE_KEY( FUN_OSL) +//IGNORE_KEY( ALPHA) +IGNORE_KEY( SML_NAV) +IGNORE_KEY( SPC_TOPR) +// IGNORE_KEY( SML_KEYPAD) +//IGNORE_KEY( SML_TOPROWS) diff --git a/users/ericgebhart/defs/oneshot.def b/users/ericgebhart/defs/oneshot.def new file mode 100644 index 00000000000..c54215234f5 --- /dev/null +++ b/users/ericgebhart/defs/oneshot.def @@ -0,0 +1,17 @@ +// custom-key, Oneshot name. + ONESHOT( OS_LSFT, ONESHOT_LSFT) + ONESHOT( OS_LCTL, ONESHOT_LCTL) + ONESHOT( OS_LALT, ONESHOT_LALT) + ONESHOT( OS_LGUI, ONESHOT_LGUI) + +// keys to cancel + CANCEL_KEY( KC_ESC) + +// CANCEL_KEY( KC_FNAV) +// CANCEL_KEY( KC_FNUM) +// CANCEL_KEY( KC_FCAPS) + +// keys to ignore. +IGNORE_KEY( SPC_NAV) +// IGNORE_KEY( KC_FNAV) +// IGNORE_KEY( KC_FSYM) diff --git a/users/ericgebhart/defs/send_string.def b/users/ericgebhart/defs/send_string.def new file mode 100644 index 00000000000..455d25bfb1a --- /dev/null +++ b/users/ericgebhart/defs/send_string.def @@ -0,0 +1,7 @@ +// key to be defined and string to send. + +//SEND_STR(MYKEY, "this is a test") +//SEND_STR_DELAY(MYKEY4, "this is another test") + +SEND_STR_DELAY(VRSN, QMK_KEYBOARD ":" QMK_KEYMAP " @ " QMK_VERSION ", Built on: " QMK_BUILDDATE) +// SEND_STR_DELAY(VRSN, QMK_KEYBOARD ":" QMK_KEYMAP " # @ " QMK_VERSION) diff --git a/users/ericgebhart/defs/smart_lock.def b/users/ericgebhart/defs/smart_lock.def new file mode 100644 index 00000000000..8202feb0d99 --- /dev/null +++ b/users/ericgebhart/defs/smart_lock.def @@ -0,0 +1,123 @@ +// Define smart layers here. +// SMLL = smart lock layer. +// SMLM = smart lock mod. + +// Keycode, layer/mod. +// list of keycodes to ignore. + +SMLM(SMLM_LSFT, MOD_LSFT, + ___VI_ARROWS___, + ___HOME_PGDN_PGUP_END___, + ___TAB_PGDN_PGUP_BKTAB___, + ___SML_MODS_L___) + +SMLM(SMLM_LCTL, MOD_LCTL, + ___VI_ARROWS___, + ___HOME_PGDN_PGUP_END___, + ___TAB_PGDN_PGUP_BKTAB___, + ___SML_MODS_L___) + +SMLM(SMLM_LALT, MOD_LALT, + ___VI_ARROWS___, + ___HOME_PGDN_PGUP_END___, + ___TAB_PGDN_PGUP_BKTAB___, + ___SML_MODS_L___) + +SMLM(SMLM_LGUI, MOD_LGUI, + ___VI_ARROWS___, + ___HOME_PGDN_PGUP_END___, + ___TAB_PGDN_PGUP_BKTAB___, + ___SML_MODS_L___) + +SMLM(SMLM_RSFT, MOD_RSFT, + ___VI_ARROWS___, + ___HOME_PGDN_PGUP_END___, + ___TAB_PGDN_PGUP_BKTAB___, + ___SML_MODS_L___) + +SMLM(SMLM_RCTL, MOD_RCTL, + ___VI_ARROWS___, + ___HOME_PGDN_PGUP_END___, + ___TAB_PGDN_PGUP_BKTAB___, + ___SML_MODS_L___) + +SMLM(SMLM_RALT, MOD_RALT, + ___VI_ARROWS___, + ___HOME_PGDN_PGUP_END___, + ___TAB_PGDN_PGUP_BKTAB___, + ___SML_MODS_L___) + +SMLM(SMLM_RGUI, MOD_RGUI, + ___VI_ARROWS___, + ___HOME_PGDN_PGUP_END___, + ___TAB_PGDN_PGUP_BKTAB___, + ___SML_MODS_L___) + +SMLL(SML_NAV, _NAV, ___NAV_3x10___) + +#ifdef MEDIA_LAYER_ENABLE +SMLL(SML_MEDIA, _MEDIA, ___MEDIA_3x10___) +#endif + +#ifdef MOUSEKEY_ENABLE +SMLL(SML_NAVm, _NAVm, ___NAVm_3x10___) +#endif + +SMLL(SML_KEYPAD, _KEYPAD_EN, + KC_1, + KC_2, + KC_3, + KC_4, + KC_5, + KC_6, + KC_7, + KC_8, + KC_9, + KC_0, + KC_PERC, + KC_DLR, + KC_COMM, + KC_DOT, + KC_SLSH, + KC_MINS, + KC_ASTR, + KC_PLUS, + KC_COLN, + KC_SCLN, + KC_EQL, + // KC_UNDS, + KC_BSPC, + KC_X, + SYM_MO) + +// SMLL(SML_KEYPAD_BP, _KEYPAD_BP, +// BP_1, +// BP_2, +// BP_3, +// BP_4, +// BP_5, +// BP_6, +// BP_7, +// BP_8, +// BP_9, +// BP_0, +// BP_PERC, +// BP_DLR, +// BP_COMM, +// BP_DOT, +// BP_SLSH, +// BP_MINS, +// BP_ASTR, +// BP_PLUS, +// BP_COLN, +// BP_SCLN, +// BP_EQL, +// // KC_UNDS, +// KC_BSPC, +// BP_X, +// SYM_MO) + +#ifdef TOPROWS_LAYER_ENABLE +SMLL(SML_TOPROWS, _TOPROWS_EN, ___10_SYMBOLS___, ___10_NUMBERS___) +#endif +//SMLL(SML_SYMB, _SYMB_EN, ___SYMB_BEAKLB_3x10___) diff --git a/users/ericgebhart/defs/swapper.def b/users/ericgebhart/defs/swapper.def new file mode 100644 index 00000000000..64a51910cb9 --- /dev/null +++ b/users/ericgebhart/defs/swapper.def @@ -0,0 +1,3 @@ +// KEYCODE, Reverseit kc, KC to send, KC to send in reverse, MODs to apply. +SWAPPER_KEY(SW_WIN, SW_REV, KC_TAB, S(KC_TAB), KC_LALT) +SWAPPER_KEY(SW_TAB, SW_REV, KC_TAB, S(KC_TAB), KC_LCTL) diff --git a/users/ericgebhart/defs/tap_hold.def b/users/ericgebhart/defs/tap_hold.def new file mode 100644 index 00000000000..54140b99f84 --- /dev/null +++ b/users/ericgebhart/defs/tap_hold.def @@ -0,0 +1,68 @@ +// tap or long tap for different key. + +// One key copy/paste +TP_TPL(KC_CCCV, LCTL(KC_C), LCTL(KC_V)) +// New TaB/Window +TP_TPL(KC_CTCN, LCTL(KC_T), LCTL(KC_N)) +// Close Tab-window/Quit +TP_TPL(KC_CWCQ, LCTL(KC_W), LCTL(KC_Q)) +// Xmonad scratch pads or desktop +//TP_TPL(KC_XM_PORD, LGUI(KC_E), LGUI(KC_T)) + +//TP_SML(ENTNAV, KC_ENTER, SML_NAV) + + +#if defined(SECOND_LOCALE) && (SECOND_LOCALE == BEPO) || (DEFAULT_LANG == BEPO) +TP_TPL(BP_CCCV, LCTL(BP_C), LCTL(BP_V)) +TP_TPL(BP_CTCN, LCTL(BP_T), LCTL(BP_N)) +TP_TPL(BP_CWCQ, LCTL(BP_W), LCTL(BP_Q)) +TP_TPL(BP_XM_PORD, LGUI(BP_E), LGUI(BP_T)) + +TP_TPL(BP_C_CCED, BP_C, BP_CCED) +#endif + + +#if defined(SECOND_LOCALE) && (SECOND_LOCALE == US_INT) || (DEFAULT_LANG == US_INT) +TP_TPL(US_CCCV, LCTL(US_C), LCTL(US_V)) +TP_TPL(US_CTCN, LCTL(US_T), LCTL(US_N)) +TP_TPL(US_CWCQ, LCTL(US_W), LCTL(US_Q)) +TP_TPL(US_XM_PORD, LGUI(US_E), LGUI(US_T)) + +TP_TPL(US_C_CCED, US_C, US_CCED) +#endif + +// Open on tap and Open with close and back arrow on hold. +// (){}[]""''``<> +# if defined(SECOND_LOCALE) && (SECOND_LOCALE == EN) || (DEFAULT_LANG == EN) +OPEN_OCL(KC_OCPRN, KC_LPRN, KC_RPRN) +OPEN_OCL(KC_OCBRC, KC_LBRC, KC_RBRC) +OPEN_OCL(KC_OCCBR, KC_LCBR, KC_RCBR) +OPEN_OCL(KC_OCDQUO, KC_DQUO, KC_DQUO) +OPEN_OCL(KC_OCQUOT, KC_QUOT, KC_QUOT) +OPEN_OCL(KC_OCGRV, KC_GRAVE, KC_GRAVE) +OPEN_OCL(KC_OCLTGT, KC_LT, KC_GT) +#endif + + +#if defined(SECOND_LOCALE) && (SECOND_LOCALE == BEPO) || (DEFAULT_LANG == BEPO) +OPEN_OCL(BP_OCPRN, BP_LPRN, BP_RPRN) +OPEN_OCL(BP_OCBRC, BP_LBRC, BP_RBRC) +OPEN_OCL(BP_OCCBR, BP_LCBR, BP_RCBR) +OPEN_OCL(BP_OCDQUO, BP_DQUO, BP_DQUO) +OPEN_OCL_ND(BP_OCQUOT, BP_QUOT, BP_QUOT) +OPEN_OCL(BP_OCGRV, BP_GRV, BP_GRV) +OPEN_OCL(BP_OCLTGT, BP_LT, BP_GT) +#endif + + + +#if defined(SECOND_LOCALE) && (SECOND_LOCALE == US_INT) || (DEFAULT_LANG == US_INT) +OPEN_OCL(US_OCPRN, US_LPRN, US_RPRN) +OPEN_OCL(US_OCBRC, US_LBRC, US_RBRC) +OPEN_OCL(US_OCCBR, US_LCBR, US_RCBR) +OPEN_OCL(US_OCDQUO, US_DQUO, US_DQUO) + +OPEN_OCL_ND(US_OCQUOT, US_QUOT, US_QUOT) +OPEN_OCL(US_OCGRV, US_GRV, US_GRV) +OPEN_OCL(US_OCLTGT, US_LT, US_GT) +#endif diff --git a/users/ericgebhart/defs/unicode.def b/users/ericgebhart/defs/unicode.def new file mode 100644 index 00000000000..ee8dbecead9 --- /dev/null +++ b/users/ericgebhart/defs/unicode.def @@ -0,0 +1,5 @@ +// define keys to send unicode strings. + UC_STR(UC_FLIP, "(ノಠ痊ಠ)ノ彡┻━┻") + UC_STR(UC_TABL, "┬─┬ノ( º _ ºノ)") + UC_STR(UC_SHRG, "¯\\_(ツ)_/¯") + UC_STR(UC_DISA, "ಠ_ಠ") diff --git a/users/ericgebhart/edge_keys.h b/users/ericgebhart/edge_keys.h deleted file mode 100644 index 0b729fde6c2..00000000000 --- a/users/ericgebhart/edge_keys.h +++ /dev/null @@ -1,238 +0,0 @@ -#pragma once -/* - Copyright 2018 Eric Gebhart - - 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 . -*/ - -#include "core_keysets.h" - -/******************************************************************/ -/* This is where I put my Keyboard layouts, Everything on the */ -/* edges, the functions on keys like LT() and SFT_T() */ -/* can be applied here. The physical shape of the keyboard is */ -/* also accounted for here. This makes it very simple to add a */ -/* new keyboard and reuse all of my layouts and layers */ -/* */ -/* The particular pieces we define here (as needed) are: */ -/* * Edge pinky keys, */ -/* * Middle section keys */ -/* * Bottom/5th row */ -/* * Thumbkeys */ -/* * Any functional additions to wrap the keys. ie. LT() */ -/* */ -/* With all of that in hand, we then create a LAYOUT wrapper */ -/* macro that takes a list of keys, to create a keyboard matrix */ -/* that fits the keyboard. Simple. */ -/* */ -/* The thumb keys, the bottom rows, etc. */ -/* */ -/* An attempt has been made to adapt the kinesis and ergodox */ -/* Thumb keys to the rectangular shapes of the xd75 and viterbi. */ -/* which are 15x and 14x matrices respectively. */ -/* The Corne was a perfect fit */ -/******************************************************************/ - -/******************************************************************/ -/* * The XD75 is a 5x15 Ortholinear matrix which means it has 3 */ -/* keys inbetween the usual left and right hand keys */ -/* * The Viterbi is a split 5x14 Ortholinear with 2 middle keys. */ -/* * The Ergodox is a split 5x14 Ortholinear with 2 middle keys, */ -/* thumbkeys. It is missing middle keys on (home) row 3. */ -/* * The Corne is a split 3x12 with 6 thumb keys. It has no */ -/* extra middle keys */ -/* */ -/******************************************************************/ - - -/******************************************************************/ -/* In all cases these keyboards are defined in a matrix which is */ -/* a set of rows. Maybe like so, or not. */ -/* */ -/* -------------------------|------------------------ */ -/* | Left0 | Numbers L | mid|dle0 | numbers R | Right0 | */ -/* | Left1 | keys0-5 | mid|dle1 | Keys6-10 | Right1 | */ -/* | Left2 | keys11-15 | mid|dle2 | Keys16-20 | Right2 | */ -/* | Left3 | keys20-25 | mid|dle3 | Keys25-30 | Right3 | */ -/* | Row5L | Row5R | */ -/* | ThumbsL | ThumbsR | */ -/* -------------------------|------------------------ */ - -/* Generally speaking, the keys on the right and left don't change. */ -/* Neither does the bottom row or the thumbs. Frequently the numbers */ -/* row is identical across layers. Mostly, we want our Base layers to */ -/* be predctable. */ - -// EDGES -// outside pinky keys row 0-3. -// Qwerty and Bepo, - Applies -// to foreign layouts on bepo. dvorak_bp, beakl_bp. -#define LEFT0 KC_GRV -#define LEFT1 KC_GRV -#define LEFT2 KC_TAB -#define LEFT3 KC_BSLS -//#define LEFT3 KC_COLN - -#define LEFT0_BP DB_GRV -#define LEFT1_BP DB_GRV -#define LEFT2_BP KC_TAB -#define LEFT3_BP DB_BACKSLASH -//#define LEFT3_BP BP_COLN - -#define RIGHT0 KC_EQL -#define RIGHT1 KC_SLASH -#define RIGHT2 KC_MINS -#define RIGHT3 KC_SCLN - -#define RIGHT0_BP BP_EQL -#define RIGHT1_BP BP_SLSH -#define RIGHT2_BP BP_MINS -#define RIGHT3_BP BP_SCLN - -/******************************************************************/ -/* Middle Keysets for various keyboards */ -// MIDDLES -/// Middle left and right keys. -/******************************************************************/ -#define ___MIDDLE_LT___ OSL(_LAYERS) -#define ___MIDDLE_L1___ KC_CCCV -#define ___MIDDLE_L2___ TO(_SYMB) -#define ___MIDDLE_L3___ TO(_NAV) - -#define ___MIDDLE_RT___ _X_ -#define ___MIDDLE_R1___ KC_CCCV -#define ___MIDDLE_R2___ TO(_TOPROWS) -#define ___MIDDLE_R3___ OSL(_KEYPAD) - -#define ___MIDDLE_L1_BP___ BP_CCCV -#define ___MIDDLE_L2_BP___ TO(_SYMB_BP) - -#define ___MIDDLE_R1_BP___ BP_CCCV -#define ___MIDDLE_R2_BP___ TO(_KEYPAD_BP) -#define ___MIDDLE_R3_BP___ OSL(_KEYPAD_BP) - -// 3 keys in the middle of a 15x matrix -#define ___3_MIDDLE_T___ ___MIDDLE_LT___, LCTL(KC_A), ___MIDDLE_RT___ -#define ___3_MIDDLE_1___ ___MIDDLE_L1___, LCTL(KC_X), ___MIDDLE_R1___ -#define ___3_MIDDLE_2___ ___MIDDLE_L2___, TO(_RGB), ___MIDDLE_R2___ -#define ___3_MIDDLE_3___ ___MIDDLE_L3___, TO(_SYMB), ___MIDDLE_R3___ - -// The same, for BEPO -#define ___3_MIDDLE_T_BP___ ___MIDDLE_LT___, LCTL(BP_A), ___MIDDLE_RT___ -#define ___3_MIDDLE_1_BP___ ___MIDDLE_L1_BP___, LCTL(BP_X), ___MIDDLE_R1_BP___ -#define ___3_MIDDLE_2_BP___ ___MIDDLE_L2_BP___, TO(_RGB), ___MIDDLE_R2_BP___ -#define ___3_MIDDLE_3_BP___ ___MIDDLE_L3___, TO(_SYMB_BP), ___MIDDLE_R3_BP___ - -// 2 keys in the middle of a 14x matrix - For viterbi and ergodox. -#define ___2_MIDDLE_T___ ___MIDDLE_LT___, ___MIDDLE_RT___ -#define ___2_MIDDLE_1___ ___MIDDLE_L1___, ___MIDDLE_R1___ -#define ___2_MIDDLE_2___ ___MIDDLE_L2___, ___MIDDLE_R2___ -#define ___2_MIDDLE_3___ ___MIDDLE_L3___, ___MIDDLE_R3___ - -// The same, for BEPO -#define ___2_MIDDLE_T_BP___ ___MIDDLE_LT___, ___MIDDLE_RT___ -#define ___2_MIDDLE_1_BP___ ___MIDDLE_L1_BP___, ___MIDDLE_R1_BP___ -#define ___2_MIDDLE_2_BP___ ___MIDDLE_L2_BP___, ___MIDDLE_R2_BP___ -#define ___2_MIDDLE_3_BP___ ___MIDDLE_L3___, ___MIDDLE_R3_BP___ - -/********************************************************************/ -/* THUMBS */ -/* Define the thumb clusters for all the keyboards. */ -/********************************************************************/ - -// for xd75 or other layouts with a center column. -// #define ___5_MIDDLE_THUMBS___ CTL_BSPC, ALT_DEL, XMONAD_ESC, ALT_ENT, CTL_SPC -#define ___5_MIDDLE_THUMBS___ ALT_DEL, BSPC_TOPR, ESC_SYMB, ENT_NAV, SPC_TOPR -#define ___5_MIDDLE_THUMBS_BP___ ALT_DEL, BSPC_TOPR_BP, ESC_SYMB_BP, ENT_NAV, SPC_TOPR_BP - -// for a last, 4th thumb row. for rebound. -// backtab, home end, ----, pgup, pgdn, tab ? -#define ___13_BOTTOM___ \ - KC_BKTAB, HOME_END, KC_TAB, TT(_NAV), BSPC_SYMB, ESC_TOPR, \ - OSL(_LAYERS), \ - ENT_NAV, SPC_TOPR, KC_LEFT, KC_PGUP, KC_PGDN, KC_RIGHT - -#define ___13_BOTTOM_BP___ \ - KC_BKTAB, HOME_END, KC_TAB, TT(_NAV), BSPC_SYMB_BP, ESC_TOPR_BP, \ - OSL(_LAYERS), \ - ENT_NAV, SPC_TOPR_BP, KC_LEFT, KC_PGUP, KC_PGDN, KC_RIGHT - -// becomes the upper thumbs, the real 4th row if we throw away -// the number row at the top. -// this is the 4th row on the viterbi above the thumbrow if the number -// row is not used for numbers. -#define ___4_MIDDLE_4___ LSFT(KC_TAB), HOME_END, KC_PGDN, KC_TAB -#define ___4_MIDDLE_4b___ TAB_BKTAB, HOME_END, KC_PGDN, KC_PGUP - -/********************************************************************/ -/** The bottom row and thumbs as needed. **/ -/********************************************************************/ -// I do not use those pinky keys. I had useful things there but there -// are better more useful ways than those pinkys. -#define ___5_BOTTOM_LEFT___ ___X2___, KC_INS, KC_LEFT, KC_RIGHT -#define ___5_BOTTOM_RIGHT___ KC_UP, KC_DOWN, KC_BSLS, ___X2___ - -#define ___4_BOTTOM_LEFT___ LCTL(KC_V), KC_INS, KC_LEFT, KC_RIGHT -#define ___4_BOTTOM_RIGHT___ KC_UP, KC_DOWN, KC_BSLS, LCTL(KC_C) - -// the bottom rows for keyboards on bepo. -// bepo on bepo - not enough space to go around.... -#define ___5_BOTTOM_LEFT_BP___ _X_, BP_EACU, _X_, KC_LEFT, KC_RIGHT -#define ___5_BOTTOM_RIGHT_BP___ KC_UP, KC_DOWN, DB_BACKSLASH, BP_CCED, BP_PERC - -#define ___4_BOTTOM_LEFT_BP___ LCTL(BP_C), BP_EACU, KC_LEFT, KC_RIGHT -#define ___4_BOTTOM_RIGHT_BP___ KC_UP, KC_DOWN, DB_BACKSLASH, BP_CCED - -// for dvorak and beakl on bepo -#define ___5_BOTTOM_LEFT_FR___ ___X3___, KC_LEFT, KC_RIGHT -#define ___5_BOTTOM_RIGHT_FR___ KC_UP, KC_DOWN, DB_BACKSLASH, ___X2___ - -// basically a 5th row in a 5x matrix. but maybe a 4th if there isnt a number row. -#define ___15_BOTTOM___ ___5_BOTTOM_LEFT___, ___5_MIDDLE_THUMBS___, ___5_BOTTOM_RIGHT___ -#define ___15_BOTTOM_FR___ ___5_BOTTOM_LEFT_FR___, ___5_MIDDLE_THUMBS___, ___5_BOTTOM_RIGHT_FR___ -#define ___15_BOTTOM_BP___ ___5_BOTTOM_LEFT_BP___, ___5_MIDDLE_THUMBS___, ___5_BOTTOM_RIGHT_BP___ - -#define ___14_BOTTOM___ ___5_BOTTOM_LEFT___, ___4_MIDDLE_4b___, ___5_BOTTOM_RIGHT___ -#define ___14_BOTTOM_FR___ ___5_BOTTOM_LEFT_FR___, ___4_MIDDLE_4b___, ___5_BOTTOM_RIGHT_FR___ -#define ___14_BOTTOM_BP___ ___5_BOTTOM_LEFT_BP___, ___4_MIDDLE_4b___, ___5_BOTTOM_RIGHT_BP___ -#define ___14_THUMBS_BOTTOM___ ___X4___, ___6_MIDDLE_THUMBS___, ___X4___ - -// bottom row of ergodox thumbs, bottom middle of all layouts. -// start with the minimilist thumb row of 6, like the Corne, 2x3. - -#define ___THUMBS_1___ TT(_KEYPAD), MO(_ADJUST), MO(_LAYERS), OSL(_TOPROWS) -#define ___THUMBS_1_BP___ TT(_KEYPAD_BP), MO(_ADJUST), MO(_LAYERS), OSL(_TOPROWS_BP) -#define ___THUMBS_2___ HOME_END, KC_PGUP -#define ___THUMBS_3___ ___6_ERGO_THUMBS___ - -#define ___4_THUMBS_1_BP___ TT(_KEYPAD_BP), KC_HOME, KC_PGUP, OSL(_TOPROWS_BP) -#define ___4_THUMBS_1___ TT(_KEYPAD), KC_HOME, KC_PGUP, OSL(_TOPROWS) -#define ___6_THUMBS_2___ KC_LSFT, KC_BKTAB, KC_END, KC_PGDN, KC_TAB, KC_RSFT - -#define ___6_THUMBS_2b___ BSPC_SYMB, ESC_TOPR, KC_END, KC_PGUP, ENT_NAV, SPC_TOPR -#define ___6_ERGO_THUMBSb___ TT(_LAYERS), BSPC_SYMB, KC_XM_PORD, KC_PGDN, TT(_NAV), KC_XM_PORD -#define ___6_THUMBS_2b_BP___ BSPC_SYMB_BP, ESC_TOPR_BP, KC_END, KC_PGDN, ENT_TOPR_BP, SPC_NAV - -#define ___6_ERGO_THUMBS___ TT(_NAV), BSPC_SYMB, ESC_TOPR, ENT_NAV, SPC_TOPR, KC_XM_PORD -#define ___6_ERGO_THUMBS_BP___ TT(_NAV), BSPC_SYMB_BP, ESC_TOPR, ENT_NAV, SPC_TOPR_BP, BP_XM_PORD - -#define ___6_MIDDLE_THUMBS___ ___6_ERGO_THUMBS___ - -#define ___12_DOX_ALL_THUMBS___ ___THUMBS_1___, ___THUMBS_2___, ___THUMBS_3___ -#define ___12_DOX_ALL_THUMBS_BP___ ___THUMBS_1_BP___, ___THUMBS_2___, ___THUMBS_3___ - -#define ___16_ALL_THUMBSb___ ___4_THUMBS_1___, ___6_THUMBS_2b___, ___6_ERGO_THUMBSb___ -#define ___16_ALL_THUMBS___ ___4_THUMBS_1___, ___6_THUMBS_2___, ___6_ERGO_THUMBS___ -#define ___16_ALL_THUMBSb_BP___ ___4_THUMBS_1_BP___, ___6_THUMBS_2b_BP___, ___6_ERGO_THUMBS___ -#define ___16_ALL_THUMBS_BP___ ___4_THUMBS_1_BP___, ___6_THUMBS_2_BP___, ___6_ERGO_THUMBS_BP___ diff --git a/users/ericgebhart/ericgebhart.c b/users/ericgebhart/ericgebhart.c index a071fb8c2ea..965456e56cd 100755 --- a/users/ericgebhart/ericgebhart.c +++ b/users/ericgebhart/ericgebhart.c @@ -22,12 +22,6 @@ #include "action.h" #include "action_layer.h" #include "process_keycode/process_tap_dance.h" -#include "keymap_bepo.h" - -float tone_copy[][2] = SONG(SCROLL_LOCK_ON_SOUND); -float tone_paste[][2] = SONG(SCROLL_LOCK_OFF_SOUND); - -userspace_config_t userspace_config; // Add reconfigurable functions here, for keymap customization // This allows for a global, userspace functions, and continued @@ -40,7 +34,7 @@ __attribute__ ((weak)) void matrix_scan_keymap(void) {} __attribute__ ((weak)) -layer_state_t layer_state_set_keymap (layer_state_t state) { +uint32_t layer_state_set_keymap (uint32_t state) { return state; } diff --git a/users/ericgebhart/ericgebhart.h b/users/ericgebhart/ericgebhart.h index 92f8f22d298..4721b85ebd6 100755 --- a/users/ericgebhart/ericgebhart.h +++ b/users/ericgebhart/ericgebhart.h @@ -19,54 +19,10 @@ #ifndef ericgebhart #define ericgebhart -#include QMK_KEYBOARD_H -#include "core_keysets.h" -#include "layouts.h" -#include "layers.h" -#if defined(OLED_ENABLE) -# include "oled_stuff.h" +#include "layer_names.h" + +#ifdef CONSOLE_ENABLE +#include "print.h" #endif - -//#define ONESHOT_TAP_TOGGLE 2 /* Tapping this number of times holds the key until tapped once again. */ -/* Define layer names */ -enum userspace_layers { - _DVORAK = 0, - _QWERTY, - _COLEMAK, - _BEAKL, - //_WORKMAN, - //_NORMAN, - //_MALTRON, - //_EUCALYN, - //_CARPLAX, - _DVORAK_BP, // beginning of Bepo - _BEAKL_BP, - _BEPO, - _LAYERS, - _NAV, // transient layers - _SYMB, - _SYMB_BP, - _KEYPAD, - _KEYPAD_BP, - _TOPROWS, - _TOPROWS_BP, - _RGB, - _ADJUST, -}; - -// clang-format off -typedef union { - uint32_t raw; - struct { - bool rgb_layer_change :1; - bool is_overwatch :1; - bool nuke_switch :1; - bool swapped_numbers :1; - bool rgb_matrix_idle_anim :1; - }; -} userspace_config_t; -// clang-format on -extern userspace_config_t userspace_config; - #endif diff --git a/users/ericgebhart/extensions/accented_keys.c b/users/ericgebhart/extensions/accented_keys.c new file mode 100644 index 00000000000..2569bffea8c --- /dev/null +++ b/users/ericgebhart/extensions/accented_keys.c @@ -0,0 +1,50 @@ +/* + Copyright 2022 Eric Gebhart + + 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 . +*/ + +#include USERSPACE_H +#include "accented_keys.h" +#include +#include + +static inline void tap_accented_letter(uint16_t letter, uint16_t dead_key) { + uint8_t mod_state = get_mods(); + uint8_t oneshot_mod_state = get_oneshot_mods(); + del_mods(MOD_MASK_SHIFT); + del_oneshot_mods(MOD_MASK_SHIFT); + tap_code16(dead_key); + set_mods(mod_state); + set_oneshot_mods(oneshot_mod_state); + tap_code(letter); +} + +#undef ACCENTED +#define ACCENTED(KC, K1, DEAD_KEY) \ + case KC: \ + if (record->event.pressed) { \ + tap_accented_letter(K1, DEAD_KEY); \ + } \ + return false; + + +bool process_accent_keys(uint16_t keycode, keyrecord_t* record) { + switch(keycode){ +#ifdef ACCENTED_KEYS_ENABLE +#include "accented_keys.def" +#endif + } + return true; +} diff --git a/users/ericgebhart/oled_stuff.h b/users/ericgebhart/extensions/accented_keys.h old mode 100755 new mode 100644 similarity index 78% rename from users/ericgebhart/oled_stuff.h rename to users/ericgebhart/extensions/accented_keys.h index df1f50985fa..017c6fa312b --- a/users/ericgebhart/oled_stuff.h +++ b/users/ericgebhart/extensions/accented_keys.h @@ -16,9 +16,4 @@ along with this program. If not, see . */ -#include "quantum.h" -#include "oled_driver.h" - -void oled_render_mod_lock_status(void); -void oled_driver_render_logo(void); -bool process_record_user_oled(uint16_t keycode, keyrecord_t *record); +bool process_accent_keys(uint16_t keycode, keyrecord_t* record); diff --git a/users/ericgebhart/extensions/alt_shift.c b/users/ericgebhart/extensions/alt_shift.c new file mode 100644 index 00000000000..002adec2305 --- /dev/null +++ b/users/ericgebhart/extensions/alt_shift.c @@ -0,0 +1,99 @@ +#include USERSPACE_H +#include +#include + +bool shift_for_two(uint16_t keycode, keyrecord_t *record){ + uint16_t mod_state = get_mods(); + + bool is_shifted = (get_mods() & MOD_MASK_SHIFT) || + (get_oneshot_mods() & MOD_MASK_SHIFT); + + if(record ->event.pressed) { + // If shifted, double these common punctuation marks. + if(is_shifted){ + // clear shift temporarily + del_mods(MOD_MASK_SHIFT); + del_oneshot_mods(MOD_MASK_SHIFT); + + tap_code16(keycode); + tap_code16(keycode); + + // restore previous shift state + set_mods(mod_state); + return false; + } + } + return true; +} + +bool shift_for_three(uint16_t keycode, keyrecord_t *record){ + uint16_t mod_state = get_mods(); + + bool is_shifted = (get_mods() & MOD_MASK_SHIFT) || + (get_oneshot_mods() & MOD_MASK_SHIFT); + + if(record ->event.pressed) { + // If shifted, double these common punctuation marks. + if(is_shifted){ + // clear shift temporarily + del_mods(MOD_MASK_SHIFT); + del_oneshot_mods(MOD_MASK_SHIFT); + + tap_code16(keycode); + tap_code16(keycode); + tap_code16(keycode); + + // restore previous shift state + set_mods(mod_state); + return false; + } + } + return true; + } + +bool override_shift(uint16_t keycode, + uint16_t shift_keycode, + keyrecord_t *record + ) { + + bool is_shifted = (get_mods() & MOD_MASK_SHIFT) || + (get_oneshot_mods() & MOD_MASK_SHIFT); + + if (record->event.pressed) { + if (is_shifted) { + uint8_t mod_state = get_mods(); + del_mods(MOD_MASK_SHIFT); + del_oneshot_mods(MOD_MASK_SHIFT); + + tap_code16(shift_keycode); + + set_mods(mod_state); + } else { + //tap_code16(keycode); + } + } + return false; +} + +// macros for use in alt_shift.defs. +#define ALT_SHIFT(KCKEY, KC01) \ + case KCKEY: \ + return override_shift(KCKEY, KC01, record); \ + break; + +#define SHIFT_FOR_2(KCKEY) \ + case KCKEY: \ + return shift_for_two(KCKEY, record); \ + break; + +#define SHIFT_FOR_3(KCKEY) \ + case KCKEY: \ + return shift_for_three(KCKEY, record); \ + break; + +bool process_alt_shift_user(uint16_t keycode, keyrecord_t *record) { + switch(keycode){ +#include "alt_shift.def" + } + return true; +} diff --git a/users/ericgebhart/extensions/altlocal_keys.c b/users/ericgebhart/extensions/altlocal_keys.c new file mode 100644 index 00000000000..569a2076b52 --- /dev/null +++ b/users/ericgebhart/extensions/altlocal_keys.c @@ -0,0 +1,82 @@ +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ + +// Create custom keycodes with arbitrary shifted and unshifted keys. +// originally for dvorak on bepo. But used by beakl on qwerty now too. + +// Why?: Because the keycodes are actually defined on the computer. So +// if you are trying to have dvorak, or beakl on bepo-fr, the shifted keys +// are wrong. But, I want my dvorak, so this allows the pairing of keys into +// a keycode that has shifted and non shifted behavior, outside of what the +// locale map says on the computer. +// +// These are the keys for dvorak on bepo. column one is the keycode and mods for +// the unshifted key, the second column is the keycode and mods for the shifted key. +// GR is Good Range. It subtracts SAFE_RANGE from the keycode so we can make a +// reasonably sized array without difficulties. The macro is for the constant declarations +// the function is for when we use it. + +//make an alt_local_keys.def - see the example. +// Include this file where you have your process_record_user function, +// call process_alt_local_key inside your process_record_user. + +#include USERSPACE_H +#include "altlocal_keys.h" + +const uint16_t key_translations[][2][2] = { +#include "altlocal_keys.def" +}; + +uint8_t gr(uint16_t kc){ + return (kc - SAFE_RANGE); +} + +// send the right keycode for the right mod. +// remove the mods we are taking care of, +// send our keycodes then restore them. +// all so we can make dvorak keys from bepo keycodes. +void send_keycode(uint16_t kc){ + uint8_t tmp_mods = get_mods(); + bool is_shifted = ( tmp_mods & (MOD_BIT(KC_LSFT)|MOD_BIT(KC_RSFT)) ); + + // need to turn of the shift if it is on. + unregister_mods((MOD_BIT(KC_LSFT)|MOD_BIT(KC_RSFT))); + if(is_shifted){ + register_mods(SHIFTED_MODS(kc)); + register_code16(SHIFTED_KEY(kc)); + unregister_code16(SHIFTED_KEY(kc)); + unregister_mods(SHIFTED_MODS(kc)); + } else{ + register_mods(UNSHIFTED_MODS(kc)); + register_code16(UNSHIFTED_KEY(kc)); + unregister_code16(UNSHIFTED_KEY(kc)); + unregister_mods(UNSHIFTED_MODS(kc)); + } + clear_mods(); + register_mods(tmp_mods); +} + +bool process_alt_local_key(uint16_t keycode, keyrecord_t* record) { + switch(keycode){ + case ALT_LOCAL_KEYS_START ... ALT_LOCAL_KEYS_END: + if(record->event.pressed) + send_keycode(keycode); + unregister_code(keycode); + break; + } + return (true); +} diff --git a/users/ericgebhart/extensions/altlocal_keys.h b/users/ericgebhart/extensions/altlocal_keys.h new file mode 100644 index 00000000000..8e304720811 --- /dev/null +++ b/users/ericgebhart/extensions/altlocal_keys.h @@ -0,0 +1,56 @@ +#pragma once +/* + Copyright 2018 Eric Gebhart + + 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 . +*/ + +// Create custom keycodes with arbitrary shifted and unshifted keys. +// originally for dvorak on bepo. But used by beakl on qwerty now too. + +// Why?: Because the keycodes are actually defined on the computer. So +// if you are trying to have dvorak, or beakl on bepo-fr, the shifted keys +// are wrong. But, I want my dvorak, so this allows the pairing of keys into +// a keycode that has shifted and non shifted behavior, outside of what the +// locale map says on the computer. +// +// These are the keys for dvorak on bepo. column one is the keycode and mods for +// the unshifted key, the second column is the keycode and mods for the shifted key. +// GR is Good Range. It subtracts SAFE_RANGE from the keycode so we can make a +// reasonably sized array without difficulties. The macro is for the constant declarations +// the function is for when we use it. + +//make an alt_local_keys.def - see the example. +// Include this file where you have your process_record_user function, +// call process_alt_local_key inside your process_record_user. + +uint8_t gr(uint16_t); +void send_keycode(uint16_t); +bool process_alt_local_key(uint16_t keycode, keyrecord_t* record); + +#define MOD_NONE 0x00 + +#define GR(x) (x-SAFE_RANGE) +// indexs for the keycode translation table. + +#define MK_KEY(KCNAME, KC1, MOD1, KC2, MOD2) \ + [GR(KCNAME)] = {{KC1, MOD1}, {KC2, MOD2}}, + +#define MK_SKEY(KCNAME, KC1, KC2) \ + [GR(KCNAME)] = {{KC1, MOD_NONE}, {KC2, MOD_NONE}}, + +#define UNSHIFTED_KEY(key) key_translations[gr(key)][0][0] +#define UNSHIFTED_MODS(key) key_translations[gr(key)][0][1] +#define SHIFTED_KEY(key) key_translations[gr(key)][1][0] +#define SHIFTED_MODS(key) key_translations[gr(key)][1][1] diff --git a/users/ericgebhart/extensions/console_key_logger.c b/users/ericgebhart/extensions/console_key_logger.c new file mode 100644 index 00000000000..074673bd063 --- /dev/null +++ b/users/ericgebhart/extensions/console_key_logger.c @@ -0,0 +1,38 @@ +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ + +#if defined( CONSOLE_ENABLE) && defined(CONSOLE_KEY_LOGGER_ENABLE) + +#include USERSPACE_H +#include "print.h" +#include "console_key_logger.h" + +void process_console_key_logger(uint16_t keycode, keyrecord_t *record) { + if (record->event.pressed) { + uprintf("0x%04X,%u,%u,%u,%b,0x%02X,0x%02X,%u\n", + keycode, + record->event.key.row, + record->event.key.col, + get_highest_layer(layer_state), + record->event.pressed, + get_mods(), + get_oneshot_mods(), + record->tap.count + ); + } +} +#endif diff --git a/users/ericgebhart/extensions/console_key_logger.h b/users/ericgebhart/extensions/console_key_logger.h new file mode 100644 index 00000000000..5e7e2d5bc0a --- /dev/null +++ b/users/ericgebhart/extensions/console_key_logger.h @@ -0,0 +1,19 @@ +#pragma once +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ + +void process_console_key_logger(uint16_t keycode, keyrecord_t *record); diff --git a/users/ericgebhart/extensions/encoders.c b/users/ericgebhart/extensions/encoders.c new file mode 100644 index 00000000000..9a3d90b82fa --- /dev/null +++ b/users/ericgebhart/extensions/encoders.c @@ -0,0 +1,83 @@ +/* + Copyright 2022 Eric Gebhart + + 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 . +*/ +#ifdef ENCODER_ENABLE +#include "encoders.h" +#include USERSPACE_H + +encoder_action_t encoder_actions[] = { +#include "encoders.def" +}; +uint8_t NUM_ENCODER_ACTIONS = sizeof(encoder_actions) / sizeof(encoder_action_t); + + +bool encoder_update_user(uint8_t index, bool clockwise) { + // do it twice, once for layer actions, once for non layer specific actions. + if (!do_encoder_action(index, clockwise, true)){ + do_encoder_action(index, clockwise, false); + } + return false; +} + +bool do_encoder_action(uint8_t index, bool clockwise, bool layer_actions) { + uint8_t mods = get_mods(); + encoder_action_t *action; + + // look for a match. + // on the layer, not on any layer. + // with the mods, or no mods. + for (int i = 0; i < NUM_ENCODER_ACTIONS; ++i) { + action = &encoder_actions[i]; + + // this encoder, or another. + if (action->index != index) + continue; + + // skip non layer specific actions and visa versa + // two pass system, once for layers, again for + // actions without layers. + if (layer_actions){ + if (action->layer == LAYER_NONE || + action->layer != biton32(layer_state)){ + continue; + } + }else if (action->layer != LAYER_NONE) + continue; + + // no mods, or these mods. + if ((mods && (action->mods == MOD_NONE)) || + (mods && (mods != action->mods))) + continue; + + // found one. + if (clockwise) { + if (action->clockwise != 0) { + tap_code16(action->clockwise); + } else if (action->cw_func != NULL) { + action->cw_func(); + } + } else { + if (action->counter_clockwise != 0) { + tap_code16(action->counter_clockwise); + } else if (action->ccw_func != NULL) { + action->ccw_func(); + } + } + } + return false; +} + +#endif diff --git a/users/ericgebhart/extensions/encoders.h b/users/ericgebhart/extensions/encoders.h new file mode 100644 index 00000000000..458c5c541de --- /dev/null +++ b/users/ericgebhart/extensions/encoders.h @@ -0,0 +1,46 @@ +#pragma once +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ + +#include QMK_KEYBOARD_H + +typedef struct { + uint16_t layer; + uint16_t index; // 0 or 1, left/right. + uint16_t clockwise; + uint16_t counter_clockwise; + uint16_t mods; + void (*cw_func)(void); + void (*ccw_func)(void); +} encoder_action_t; +extern encoder_action_t encoder_actions[]; +extern uint8_t NUM_ENCODER_ACTIONS; + +// haven't looked at the real values for index, but I know +// 0 and 1 are left and right on my kyria. +#define LEFT 0 +#define RIGHT 1 +#define LAYER_NONE -1 +#define MOD_NONE 0x00 + +#define ENCODER_ACTION(LAYER, INDEX, CW_KC, CCW_KC, MOD) \ + {LAYER, INDEX, CW_KC, CCW_KC, MOD, NULL, NULL}, + +#define ENCODER_FUNCTION(LAYER, INDEX, CW_FUNC, CCW_FUNC, MOD) \ + {LAYER, INDEX, 0, 0, MOD, CW_FUNC, CCW_FUNC}, + +bool do_encoder_action(uint8_t index, bool clockwise, bool layer_actions); diff --git a/users/ericgebhart/extensions/extensions.c b/users/ericgebhart/extensions/extensions.c new file mode 100644 index 00000000000..f71e615a003 --- /dev/null +++ b/users/ericgebhart/extensions/extensions.c @@ -0,0 +1,91 @@ +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ + +#include USERSPACE_H + +#include "extensions.h" +#include "keymap_combo.h" +#include "altlocal_keys.h" +#include "tap_hold.h" +#include "accented_keys.h" +#include "process_smart_lock.h" +#include "mod_lock.h" +#include "oneshot.h" +#include "process_nshot.h" +#include "process_locales.h" +#include "unicode.h" +#include "key_overrides.h" +#include "console_key_logger.h" + +// should make header files maybe. being lazy. +void process_not_dead(uint16_t keycode, keyrecord_t *record); +bool process_alt_shift_user(uint16_t keycode, keyrecord_t *record); +void process_send_strs(uint16_t keycode, keyrecord_t *record); +//bool process_alt_local_key(uint16_t keycode, keyrecord_t* record); +bool process_global_quick_tap(uint16_t keycode, keyrecord_t *record); + +// call this from the top of process records before the switch. + +bool process_extensions(uint16_t keycode, keyrecord_t *record){ + if (!process_locales(keycode, record)) { return false; } + +#ifdef GLOBAL_QUICK_TAP_ENABLE + if (!process_global_quick_tap(keycode, record)) {return false; } +#endif +#ifdef CAPS_WORD_ENABLE + if (!process_caps_word(keycode, record)) { return false; } +#endif +#ifdef ALT_LOCAL_ENABLE + if (!process_alt_local_key(keycode, record)) { return false; } +#endif +#ifdef ACCENTED_KEYS_ENABLE + if (!process_accent_keys(keycode, record)) { return false; } +#endif +#ifdef TAP_HOLD_ENABLE + process_tap_hold_user(keycode, record); +#endif +#ifdef SMART_LOCK_ENABLE + process_smart_lock(keycode, record); +#endif +#ifdef MOD_LOCK_ENABLE + process_mod_lock(keycode, record); +#endif +#ifdef NSHOT_ENABLE + if(!process_nshot_state(keycode, record)) {return false;} +#endif +#ifdef SEND_UNICODE_ENABLE + process_unicode_strs(keycode, record); +#endif +#ifdef SEND_STRING_ENABLE + process_send_strs(keycode, record); +#endif +#ifdef NOT_DEAD_ENABLE + process_not_dead(keycode, record); +#endif +#ifdef ALT_SHIFT_ENABLE + if(!process_alt_shift_user(keycode, record)) {return false;} +#endif +#if defined( CONSOLE_ENABLE) && defined(CONSOLE_KEY_LOGGER_ENABLE) + process_console_key_logger(keycode, record); +#endif +#ifdef ONESHOT_MOD_ENABLE + int8_t keycode_consumed = 0; + keycode_consumed += update_oneshot_modifiers(keycode, record, keycode_consumed); +#endif + return true; + +} diff --git a/users/ericgebhart/extensions/extensions.h b/users/ericgebhart/extensions/extensions.h new file mode 100644 index 00000000000..899dbdd3d67 --- /dev/null +++ b/users/ericgebhart/extensions/extensions.h @@ -0,0 +1,22 @@ +#pragma once +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ + +bool process_extensions(uint16_t keycode, keyrecord_t *record); + +#define PROCESS_EXTENSIONS \ + if (!process_extensions(keycode, record)) {return false;} diff --git a/users/ericgebhart/extensions/key_overrides.h b/users/ericgebhart/extensions/key_overrides.h new file mode 100644 index 00000000000..3fb0c9a5bbe --- /dev/null +++ b/users/ericgebhart/extensions/key_overrides.h @@ -0,0 +1,53 @@ +#pragma once +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ +#ifdef KEY_OVERRIDE_ENABLE + +#define KO_NAME(name, ...) &name, +#define KO_T(name) const key_override_t name + +#undef KOL +#define KOL(name, mods, modded_key, replacement, layer) \ + KO_T(name) = ko_make_with_layers(mods, modded_key, replacement, (1 << layer)); + +#define KO(name, mods, key, replacement) \ + KO_T(name) = ko_make_basic(mods, key, replacement) + +#define KOLN(name, mods, key, replacement, layers, neg_mods) \ + KO_T(name) = ko_make_with_layers_and_negmods(mods, key, replacement, layers, neg_mods) + +#define KOLNO(name, mods, key, replacement, layers, neg_mods, options) \ + KO_T(name) = ko_make_with_layers_negmods_and_options \ + (mods, key, replacement, layers, neg_mods, options) + +#include "key_overrides.def" + +#undef KO +#undef KOL +#undef KOLN +#undef KOLNO +#define KO KO_NAME +#define KOL KO_NAME +#define KOLN KO_NAME +#define KOLNO KO_NAME + +// This globally defines all key overrides to be used +const key_override_t **key_overrides = (const key_override_t *[]){ +#include "key_overrides.def" + NULL // Null terminate the array of overrides! +}; +#endif diff --git a/users/ericgebhart/extensions/keycodes.h b/users/ericgebhart/extensions/keycodes.h new file mode 100755 index 00000000000..a3c5d72a09e --- /dev/null +++ b/users/ericgebhart/extensions/keycodes.h @@ -0,0 +1,523 @@ +#pragma once +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ + +#include "quantum.h" +#include "process_keycode/process_tap_dance.h" +#include "eeconfig.h" +#include "keymap_bepo.h" +//#include "keymap_us_international.h" +#include "keymap_us_international_linux.h" +#include "lang.h" +#include "ericgebhart.h" + +//#define ONESHOT_TAP_TOGGLE 2 /* Tapping this number of times holds the key until tapped once again. */ + +// #define DEFAULT_LANG EN // US_INT // EN, BEPO, US_INT, EURkey + +#define KEY_NAME(NAME, ...) NAME, +#define BLANK(...) + +bool process_record_secrets(uint16_t keycode, keyrecord_t *record); + +enum userspace_custom_keycodes { + // Get all the custom keys from the defs if we can. + ALT_LOCAL_KEYS_START = SAFE_RANGE, +#ifdef ALT_LOCAL_ENABLE +#undef MK_KEY +#define MK_KEY KEY_NAME +#undef MK_SKEY +#define MK_SKEY KEY_NAME +#include "altlocal_keys.def" +#undef MK_KEY +#undef MK_SKEY +#endif + ALT_LOCAL_KEYS_END, + +#ifdef ACCENTED_KEYS_ENABLE +#undef ACCENTED +#define ACCENTED KEY_NAME +#include "accented_keys.def" +#undef ACCENTED +#endif + +#ifdef TAP_HOLD_ENABLE +#undef TP_TPL +#define TP_TPL KEY_NAME +#undef TP_SML +#define TP_SML KEY_NAME +#undef OPEN_OCL +#define OPEN_OCL KEY_NAME +#undef OPEN_OCL_ND +#define OPEN_OCL_ND KEY_NAME +#include "tap_hold.def" +#undef OPEN_OCL +#undef OPEN_OCL_ND +#undef TP_TPL +#undef TP_SML +#endif + +#ifdef UNICODE_ENABLE +#undef UC_STR +#define UC_STR KEY_NAME +#include "unicode.def" +#undef UC_STR +#endif + +#ifdef SEND_STRING_ENABLE +#undef SEND_STR +#define SEND_STR KEY_NAME +#undef SEND_STR_DELAY +#define SEND_STR_DELAY KEY_NAME +#include "send_string.def" +#undef SEND_STR +#undef SEND_STR_DELAY +#endif + +#ifdef SMART_LOCK_ENABLE +#undef SMLM +#define SMLM KEY_NAME +#undef SMLL +#define SMLL KEY_NAME +#include "smart_lock.def" +#undef SMLM +#undef SMLL +#endif + +#ifdef MOD_LOCK_ENABLE +#undef IGNORE_KC +#define IGNORE_KC BLANK +#undef MODL +#define MODL KEY_NAME +#include "mod_lock.def" +#undef IGNORE_KC +#undef MODL +#endif + + +#undef IGNORE_KEY +#define IGNORE_KEY BLANK +#undef CANCEL_KEY +#define CANCEL_KEY BLANK +#undef ONESHOT +#undef NSHOT +#define ONESHOT KEY_NAME +#define NSHOT KEY_NAME + +#ifdef NSHOT_ENABLE +#include "nshot.def" +#else + TS_RCTL, + TS_LCTL, +#endif + +#ifdef ONESHOT_MOD_ENABLE +#include "oneshot.def" +#endif + +#undef IGNORE_KEY +#undef CANCEL_KEY +#undef ONESHOT +#undef NSHOT + +#ifdef SWAPPER_ENABLE +#undef SWAPPER_KEY +#define SWAPPER_KEY KEY_NAME +#include "swapper.def" +#undef SWAPPER_KEY +#endif + +#ifdef NOT_DEAD_ENABLE +#undef NOT_DEAD +#define NOT_DEAD KEY_NAME +#include "not_dead.def" +#undef NOT_DEAD +#endif + +#include "custom_keys.def" + NEW_SAFE_RANGE +}; + +#define FIRST_LAYER (BEGINNING_OF_BASE_LAYERS + 1) + +#define TL_DQUO TLKC(_DQUO) +#define TL_QUOT TLKC(_QUOT) +#define TL_COMM TLKC(_COMM) +#define TL_DOT TLKC(_DOT) +#define TL_SCLN TLKC(_SCLN) +#define TL_SLSH TLKC(_SLSH) +#define TL_EXLM TLKC(_EXLM) +#define TL_MINS TLKC(_MINS) +#define TL_LPRN TLKC(_LPRN) +#define TL_LCBR TLKC(_LCBR) +#ifdef SYMBOL_LAYER_ENABLE +#define TL_DOT_SYMB LT(LN_SYMB, LANG_KC(TL_DOT)) +#endif + + +#define BP_LT BP_LABK +#define BP_GT BP_RABK +#define BP_TAB KC_TAB +#define US_GT US_RABK +#define US_LT US_LABK +#define US_TAB KC_TAB +#define US_DCMM KC_COMM // us doesn't have this dead key. + +// this is odd, there is interplay between this and +// the not-dead extension. - and tap-hold not-dead. +#undef US_TILD +#define US_TILD KC_TILD +// redefine us_circ so we actually get a circ. +#undef US_CIRC +#define US_CIRC KC_CIRC +#define US_EQUAL KC_EQUAL +// redefine us_quote so we actually get a quote. +#undef US_QUOT +#define US_QUOT KC_QUOT + +#define US_PRINT_SCREEN KC_PRINT_SCREEN +#define US_SCROLL_LOCK KC_SCROLL_LOCK +#define US_PAUSE KC_PAUSE +#define BP_PRINT_SCREEN KC_PRINT_SCREEN +#define BP_SCROLL_LOCK KC_SCROLL_LOCK +#define BP_PAUSE KC_PAUSE + +#define BP_F1 KC_F1 +#define BP_F2 KC_F2 +#define BP_F3 KC_F3 +#define BP_F4 KC_F4 +#define BP_F5 KC_F5 +#define BP_F6 KC_F6 +#define BP_F7 KC_F7 +#define BP_F8 KC_F8 +#define BP_F9 KC_F9 +#define BP_F10 KC_F10 +#define BP_F11 KC_F11 +#define BP_F12 KC_F12 +#define BP_TRNS KC_TRNS + +#define US_F1 KC_F1 +#define US_F2 KC_F2 +#define US_F3 KC_F3 +#define US_F4 KC_F4 +#define US_F5 KC_F5 +#define US_F6 KC_F6 +#define US_F7 KC_F7 +#define US_F8 KC_F8 +#define US_F9 KC_F9 +#define US_F10 KC_F10 +#define US_F11 KC_F11 +#define US_F12 KC_F12 +#define US_TRNS KC_TRNS + +#ifdef KEYPAD_LAYER_ENABLE +#define TT_KEYPAD TT(LANG_N(_KEYPAD)) +#define MO_KEYPAD MO(LANG_N(_KEYPAD)) +#else +#define TT_KEYPAD ___ +#define MO_KEYPAD ___ +#endif + +#ifdef SYMBOL_LAYER_ENABLE +#define TT_SYMB TT(LANG_N(_SYMB)) +#define MO_SYMB MO(LANG_N(_SYMB)) +#define OSL_SYMB OSL(LANG_N(_SYMB)) +#else +#define TT_SYMB ___ +#define MO_SYMB ___ +#define OSL_SYMB ___ +#endif + +#ifdef TOPROWS_LAYER_ENABLE +#define TT_TOPROWS TT(LANG_N(_TOPROWS)) +#define MO_TOPROWS MO(LANG_N(_TOPROWS)) +#else +#define TT_TOPROWS ___ +#define MO_TOPROWS ___ +#endif + +#ifdef RGB_LAYER_ENABLE +#define MO_RGB MO(_RGB) +#else +#define MO_RGB ___ +#endif + +#ifdef ADJUST_LAYER_ENABLE +#define MO_ADJUST MO(_ADJUST) +#else +#define MO_ADJUST ___ +#endif + +#ifdef ACCENTS_MORTE_LAYER_ENABLE +//#define LN_ACCENTS_MORTE LANG_N(_ACCENTS_MORTE) +#define OSL_ACCENTS_MORTE OSL(LANG_N(_ACCENTS_MORTE)) +#else +#define OSL_ACCENTS_MORTE ___ +#endif + +#ifdef ACCENTS_LAYER_ENABLE +#define LN_ACCENTS LANG_N(_ACCENTS) +#define OSL_ACCENTS OSL(LN_ACCENTS) +#else +#define OSL_ACCENTS ___ +#endif + +#ifdef MORTE_LAYER_ENABLE +#define LN_MORTE LANG_N(_MORTE) +#define OSL_MORTE OSL(LN_MORTE) +#else +#define OSL_MORTE ___ +#endif + +#define CTLGUI_T(kc) MT(MOD_LGUI | MOD_LCTL, kc) +#define SFTGUI_T(kc) MT(MOD_LGUI | MOD_LSFT, kc) +#define ALTGUI_T(kc) MT(MOD_LGUI | MOD_LALT, kc) + +#define ALT_ENT ALGR_T(KC_ENT) // Alt oor nter +#define CTL_ENT CTL_T(KC_ENT) // ctrl or space +#define CTL_SPC CTL_T(KC_SPC) // ctrl or space +#define CTL_BSPC CTL_T(KC_BSPC) // ctrl or backspace +#define ALT_DEL ALT_T(KC_DEL) // Alt or delete +#define GUI_ESC GUI_T(KC_ESC) // Gui or escape +#define ALGR_SYMB ALGR_T(TG(LANG_N(_SYMB))) // Alt gre or toggle symbol layer + +// one shot on tap, or hold like usual +#define OSLCTL_CTL CTL_T(OS_LCTL) +#define OSLSFT_SFT SFT_T(OS_LSFT) +#define OSLALT_ALT ALT_T(OS_LALT) +#define OSLGUI_GUI GUI_T(OS_LGUI) + +/* miryoku */ +/* esc_media, space_navnm, tab_navm, ENT_SYM, BSPC_TOPR, del_fun */ +/* hands down */ +/* TL_COMM, TL_DOT_SYMB, GUI_ESC, ALT_ENT, SPC_TOPR, BSPC */ + +// Lots of LT options. My thumb keys. +#ifdef TOPROWS_LAYER_ENABLE +#define LN_TOPROWS LANG_N(_TOPROWS) +#else +#define LN_TOPROWS KC_NO +#endif + +#ifdef SYMBOL_LAYER_ENABLE +# define LN_SYMB LANG_N(_SYMB) +# define TH_LTR_SYM LT(LN_SYMB, THUMB_LETTER) +#else +# define TH_LTR_SYM THUMB_LETTER +#endif + +#define TH_LTR_NAV LT(_NAV, THUMB_LETTER) + +#define LN_KEYPAD LANG_N(_KEYPAD) + +#define ACCENTS_RALT MT(MOD_RALT, OSL_ACCENTS) +#define ACCENTS_CTL MT(MOD_LCTL, OSL_ACCENTS) +#define ENT_SYM LT(LN_SYMB, KC_ENT) +#define ENT_NAV LT(_NAV, KC_ENT) +#define ENT_TOPR LT(LN_TOPROWS, KC_ENT) + +#define ESC_TOPR LT(LN_TOPROWS, KC_ESC) +#define ESC_SYMB LT(LN_SYMB, KC_ESC) +#define ESC_NUM LT(LN_KEYPAD, KC_ESC) +#define ESC_MEDIA LT(_MEDIA, KC_ESC) + +#define DEL_FUN LT(_FUN, KC_DEL) +#define TAB_NAVM LT(_NAVm, KC_TAB) +#define TAB_NUM LT(LN_KEYPAD, KC_TAB) +#define I_SYMB LT(LN_SYMB, KC_I) + +#define SPC_NAVm LT(_NAVm, KC_SPC) +#define SPC_NAVnm LT(_NAVnm, KC_SPC) +#define SPC_NAV LT(_NAV, KC_SPC) +#define SPC_SYMB LT(LN_SYMB, KC_SPC) +#define SPC_TOPR LT(LN_TOPROWS, KC_SPC) +#define SPC_LAYR LT(_LAYERS, KC_SPC) +#define SPC_ADJ LT(_ADJUST, KC_SPC) +#define SPC_NUM LT(LN_KEYPAD, KC_SPC) + +#define BSPC_NAVm LT(_NAVm, KC_BSPC) +#define BSPC_NAV LT(_NAV, KC_BSPC) +#ifdef SYMBOL_LAYER_ENABLE +#define BSPC_SYMB LT(LN_SYMB, KC_BSPC) +#else +#define BSPC_SYMB KC_BSPC +#endif +#define BSPC_TOPR LT(LN_TOPROWS, KC_BSPC) +#define BSPC_NUM LT(LN_KEYPAD, KC_BSPC) +#define BSPC_ALT MT(MOD_LALT, KC_BSPC) +#define BSPC_MEDIA LT(_MEDIA, KC_BSPC) + +#define KC_BKTAB LSFT(KC_TAB) + +// layer toggles +#define LAYER_OSL OSL(_LAYERS) +#define SYM_OSL OSL(LN_SYMB) +#define SYM_TG TG(LN_SYMB) +#define SYM_MO MO(LN_SYMB) +#define NAV_TG TG(_NAV) +#define COMBO_REF_TG_EN TG(_COMBO_REF) +#define NUM_OSL OSL(LN_KEYPAD) +#define NUM_TO TO(LN_KEYPAD) +#define FUN_OSL OSL(LN_FUNC) +#define SYS_OSL OSL(LN_SYSTEM) +#define SYS_TG TG(LN_SYSTEM) + +// Shortcuts +#define S_CUT S(KC_DEL) +#define S_COPY C(KC_INS) +#define S_PASTE S(KC_INS) +#define S_UNDO C(KC_Z) +#define S_REDO C(KC_Y) +#define S_SAVE C(KC_S) +#define S_ALL C(KC_A) +#define S_BACK A(KC_LEFT) +#define S_FWD A(KC_RIGHT) +#define C_BSPC C(KC_BSPC) +#define SCREEN S(C(KC_PSCR)) + +// One Shot Mods keycodes, +#define KC_MLSF OSM(MOD_LSFT) +#define KC_MRSF OSM(MOD_RSFT) +#define OS_LGUI OSM(MOD_LGUI) +#define OS_RGUI OSM(MOD_RGUI) +#define OS_LSFT OSM(MOD_LSFT) +#define OS_RSFT OSM(MOD_RSFT) +#define OS_LCTL OSM(MOD_LCTL) +#define OS_RCTL OSM(MOD_RCTL) +#define OS_LALT OSM(MOD_LALT) +#define OS_RALT OSM(MOD_RALT) +#define ALT_APP ALT_T(KC_APP) + +#define MG_NKRO MAGIC_TOGGLE_NKRO + +#define UC_IRNY UC(0x2E2E) +#define UC_CLUE UC(0x203D) + + +//// TAP DANCE + +typedef struct { + bool is_press_action; + int state; +} tdtap; + +enum { + SINGLE_TAP = 1, + SINGLE_HOLD = 2, + DOUBLE_TAP = 3, + DOUBLE_HOLD = 4, + DOUBLE_SINGLE_TAP = 5, //send two single taps + TRIPLE_TAP = 6, + TRIPLE_HOLD = 7 +}; + +//Tap Dance Declarations +enum { + TD_ESC_CAPS = 0, + TD_TAB_BKTAB = 1, + TD_MDIA_SYMB = 2, + TD_HOME_END = 3, + TD_XMONAD_ESC = 4, + TD_DEF_LAYER_SW = 5, + TD_DEF_OS_LAYER_SW = 6, + TD_MOUSE_BTNS = 7, + TD_DVORAK_BEPO = 8, + TD_UP_HOME = 9, + TD_DOWN_END = 10, + TD_RIGHT_TAB = 11, + TD_LEFT_BACKTAB = 12 +}; + + +// Tap dance +#define TAB_BKTAB TD(TD_TAB_BKTAB) // Tab or backtab tapdance. +#define MDIA_SYMB_KP_LAYERS TD(TD_MDIA_SYMB) // MDIA, symb, keypad, layouts layer tapdance toggle. +#define DEF_LAYER_SW TD(TD_DEF_LAYER_SW) // dvorak, dvorak_on_bepo, bepo default layer +#define DEF_OS_LAYER_SW TD(TD_DEF_OS_LAYER_SW) // dvorak, dvorak_on_bepo, bepo default layer +#define HOME_END TD(TD_HOME_END) // home or end tapdance. +#define XMONAD_ESC TD(TD_XMONAD_ESC) // Escape, dvorak, media or symb. - tap and hold tap dance. 1-4 +#define DVORAK_ET_BEPO TD(TD_DVORAK_BEPO) // Escape, dvorak, media or symb. - tap and hold tap dance. 1-4 +#define TDMOUSE_BTNS TD(TD_MOUSE_BTNS) // hmmm. 1-5 +#define RIGHT_TAB TD(TD_RIGHT_TAB) // Bad idea these 4. Maybe with good timing... +#define LEFT_BACKTAB TD(TD_LEFT_BACKTAB) +#define UP_HOME TD(TD_UP_HOME) +#define DOWN_END TD(TD_DOWN_END) // No! Down Down Not End.... + +// HOME ROW LAYER TOGGLE (LT) and Shift. +// both sides of the home row have "shift, ___, media , symb, ___" and "___, symb, media, ___, shift". +// so pinky fingers are shift when held and the index and second fingers are symbol and +// media layers when held. + +// The most portable copy/paste keys (windows (mostly), linux, and some terminal emulators). +// The KC_CCCV key takes care of the last two... +#define MK_CUT LSFT(KC_DEL) // shift + delete +#define MK_COPY LCTL(KC_INS) // ctrl + insert +#define MK_PASTE LSFT(KC_INS) // shift + insert +#define EOT LCTL(KC_D) +#define NAK LCTL(KC_U) +#define XPASTE LCTL(LSFT(KC_V)) +#define UNDO LCTL(KC_Z) +#define XCOPY LCTL(LSFT(KC_C)) + +#undef ___ //kint defines it as KC_NO +#define ___ KC_TRNS +#define XXX KC_NO +#define ____ _TRNS + +// Blocking keys +#define _X_ XXX +#define ___X___ XXX +#define ___X2___ XXX, XXX +#define ___X3___ ___X2___, XXX +#define ___X4___ ___X3___, XXX +#define ___X5___ ___X4___, XXX +#define ___X6___ ___X5___, XXX +#define ___X12___ ___X6___, ___X6___ +#define ___X15___ ___X5___, ___X5___, ___X5___ + +// Transparent keys +#define ___2___ ___, ___ +#define ___3___ ___2___, ___ +#define ___4___ ___3___, ___ +#define ___5___ ___4___, ___ +#define ___6___ ___5___, ___ +#define ___10___ ___6___, ___4___ +#define ___12___ ___6___, ___6___ +#define ___14___ ___5___, ___4___, ___5___ +#define ___15___ ___5___, ___5___, ___5___ +#define ___16___ ___15___, ___ + +#define ____2_ ____, ____ +#define ____3_ ____2_, ____ +#define ____4_ ____3_, ____ +#define ____5_ ____4_, ____ +#define ____6_ ____5_, ____ +#define ____10_ ____6_, ____4_ +#define ____12_ ____6_, ____6_ +#define ____14_ ____5_, ____4_, ____5_ +#define ____15_ ____5_, ____5_, ____5_ +#define ____16_ ____15_, ____ + +int on_qwerty(void); + +#ifdef TAP_DANCES_ENABLE +int cur_dance (qk_tap_dance_state_t *state); + +//for the x tap dance. Put it here so it can be used in any keymap +void x_finished (qk_tap_dance_state_t *state, void *user_data); +void x_reset (qk_tap_dance_state_t *state, void *user_data); +#endif diff --git a/users/ericgebhart/extensions/keymap_combo.h b/users/ericgebhart/extensions/keymap_combo.h new file mode 100644 index 00000000000..cd9684e601d --- /dev/null +++ b/users/ericgebhart/extensions/keymap_combo.h @@ -0,0 +1,139 @@ +#pragma once +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ +// Keymap helpers +void process_combo_event(uint16_t combo_index, bool pressed); + + +// define reference layers per layer. +#define REF_LAYER(LAYER, REF_LAYER) \ + case LAYER: return REF_LAYER; + +#define K_ENUM(name, key, ...) name, +#define K_DATA(name, key, ...) const uint16_t PROGMEM cmb_##name[] = {__VA_ARGS__, COMBO_END}; +#define K_COMB(name, key, ...) [name] = COMBO(cmb_##name, key), + +#define A_ENUM(name, string, ...) name, +#define A_DATA(name, string, ...) const uint16_t PROGMEM cmb_##name[] = {__VA_ARGS__, COMBO_END}; +#define A_COMB(name, string, ...) [name] = COMBO_ACTION(cmb_##name), +#define A_ACTI(name, string, ...) \ + case name: \ + if (pressed) SEND_STRING(string); \ + break; + +#define A_TOGG(name, layer, ...) \ + case name: \ + if (pressed) layer_invert(layer); \ + break; + +#define BLANK(...) +// Generate data needed for combos/actions +// Create Enum +#define COMBO_REF_LAYER BLANK +#undef COMB +#undef SUBS +#undef TOGG +#define COMB K_ENUM +#define SUBS A_ENUM +#define TOGG A_ENUM +enum combos { +#include "combos.def" + COMBO_LENGTH +}; +// Export length to combo module +uint16_t COMBO_LEN = COMBO_LENGTH; + +// Bake combos into mem +#undef COMB +#undef SUBS +#undef TOGG +#define COMB K_DATA +#define SUBS A_DATA +#define TOGG A_DATA +#include "combos.def" +#undef COMB +#undef SUBS +#undef TOGG + +// Fill combo array +#define COMB K_COMB +#define SUBS A_COMB +#define TOGG A_COMB +combo_t key_combos[] = { +#include "combos.def" +}; +#undef COMB +#undef SUBS +#undef TOGG + +// Fill QMK hook +#define COMB BLANK +#define SUBS A_ACTI +#define TOGG A_TOGG + +void process_combo_event(uint16_t combo_index, bool pressed) { +#if defined( CONSOLE_ENABLE) && defined(CONSOLE_KEY_LOGGER_ENABLE) + if (pressed) { + combo_t *combo = &key_combos[combo_index]; + uint8_t idx = 0; + uint16_t combo_keycode; + while ((combo_keycode = pgm_read_word(&combo->keys[idx])) != COMBO_END) { + uprintf("0x%04X,NA,NA,%u,%u,0x%02X,0x%02X,0\n", + combo_keycode, + /* */ + /* */ + get_highest_layer(layer_state), + pressed, + get_mods(), + get_oneshot_mods() + ); + idx++; + } + } +#endif + switch (combo_index) { +#include "combos.def" + } + + // Allow user overrides per keymap +#if __has_include("inject.h") +# include "inject.h" +#endif +} + +#undef COMB +#undef SUBS +#undef TOGG + +#define COMB BLANK +#define SUBS BLANK +#define TOGG BLANK + +#undef COMBO_REF_LAYER +#define COMBO_REF_LAYER REF_LAYER + +uint16_t combo_ref_from_layer(uint16_t layer){ + switch (biton32(layer_state)){ +#include "combos.def" + +#ifdef COMBO_REF_DEFAULT + default: return COMBO_REF_DEFAULT; +#else + default: return layer; +#endif + } +} diff --git a/users/ericgebhart/extensions/mod_lock.c b/users/ericgebhart/extensions/mod_lock.c new file mode 100644 index 00000000000..c78f7cdfe8b --- /dev/null +++ b/users/ericgebhart/extensions/mod_lock.c @@ -0,0 +1,81 @@ +/* + Copyright 2022 Eric Gebhart , @possumvibes + + 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 . +*/ +// Derived from mod_lock by @possumvibes. + +#include "mod_lock.h" + +#undef MODL +#define MODL(KEYCODE, MODKC) \ + {false, MODKC, KEYCODE}, + +#define A_KEY(KEYCODE) case KEYCODE: +#define BLANK(...) + +#undef IGNORE_KC +#define IGNORE_KC BLANK + +mod_lock_state_t modlock_states[] = { +#ifdef MOD_LOCK_ENABLE +#include "mod_lock.def" +#endif +}; +uint8_t NUM_MODLOCK_STATES = sizeof(modlock_states) / sizeof(mod_lock_state_t); + +void process_mod_lock(uint16_t keycode, keyrecord_t *record) { +#ifdef MOD_LOCK_ENABLE + mod_lock_state_t *curr_state = NULL; + + for (int i = 0; i < NUM_MODLOCK_STATES; ++i) { + curr_state = &modlock_states[i]; + + if (keycode == curr_state->trigger) { + if (record->event.pressed) { + if (curr_state->locking) { + unregister_code(curr_state->mod); + } else { + register_code(curr_state->mod); + } + + curr_state->locking = !curr_state->locking; + } + } else { + // check for cancel condition on keydown and keyup + if (curr_state->locking && is_mod_lock_cancel_key(keycode)) { + unregister_code(curr_state->mod); + curr_state->locking = false; + } + } + } +#endif +} + +#undef MODL +#undef IGNORE_KC +#define MODL BLANK +#define IGNORE_KC A_KEY +bool is_mod_lock_cancel_key(uint16_t keycode) { + // Mod locks are exclusively used on the nav layer. + // any key besides nav keys should cancel the lock. + switch (keycode) { +#ifdef MOD_LOCK_ENABLE +#include "mod_lock.def" +#endif + return false; + default: + return true; + } +} diff --git a/users/ericgebhart/extensions/mod_lock.h b/users/ericgebhart/extensions/mod_lock.h new file mode 100644 index 00000000000..d9e6106c4e7 --- /dev/null +++ b/users/ericgebhart/extensions/mod_lock.h @@ -0,0 +1,39 @@ +#pragma once +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ + +#include USERSPACE_H + +typedef struct { + bool locking; + uint16_t mod; + uint16_t trigger; +} mod_lock_state_t; + +extern mod_lock_state_t mod_lock_states[]; +extern uint8_t NUM_MODLOCK_STATES; + +// Custom mod-locking functionality that registers the mod and +// keeps it registered until the trigger key is tapped again +// or until a specified cancel key is tapped. +void process_mod_lock(uint16_t keycode, keyrecord_t *record); + +bool is_mod_lock_cancel_key(uint16_t keycode); + +#undef IGNORE_KC +#define IGNORE_KC(KC) \ + case KC: diff --git a/users/ericgebhart/extensions/not_dead.c b/users/ericgebhart/extensions/not_dead.c new file mode 100644 index 00000000000..8369edd52d3 --- /dev/null +++ b/users/ericgebhart/extensions/not_dead.c @@ -0,0 +1,36 @@ +/* + Copyright 2022 Eric Gebhart + + 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 . +*/ + +#include USERSPACE_H + +inline void not_dead(uint16_t kc1, keyrecord_t *record) { + if (record->event.pressed) { + tap_code16(kc1); + tap_code16(KC_SPACE); + } +} + +#define NOT_DEAD(KCKEY, KC01) \ + case KCKEY: \ + not_dead(KC01, record); \ + break; \ + +void process_not_dead(uint16_t keycode, keyrecord_t *record) { + switch(keycode){ +#include "not_dead.def" + } +} diff --git a/users/ericgebhart/extensions/nshot_mod.c b/users/ericgebhart/extensions/nshot_mod.c new file mode 100644 index 00000000000..1346f7eba6f --- /dev/null +++ b/users/ericgebhart/extensions/nshot_mod.c @@ -0,0 +1,154 @@ +/* + Copyright 2022 Eric Gebhart , @possumvibes + + 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 . +*/ +// Derived from nshot_mod by @possumvibes. +// Derived from one shot_mod by @Callum. + +#include "nshot_mod.h" +#include USERSPACE_H + +#undef NSHOT +#define NSHOT(KEYCODE, MOD, COUNT) \ + {KEYCODE, MOD, COUNT, os_up_unqueued, 0}, + +#undef ONESHOT +#define ONESHOT(KEYCODE, MOD) NSHOT(KEYCODE, MOD, 1) +#define A_KEY(KEYCODE) case KEYCODE: +#define BLANK(...) + +#define CANCEL_KEY BLANK +#define IGNORE_KEY BLANK +nshot_state_t nshot_states[] = { +#include "nshot.def" +}; +uint8_t NUM_NSHOT_STATES = sizeof(nshot_states) / sizeof(nshot_state_t); + +bool process_nshot_state(uint16_t keycode, keyrecord_t *record) { + nshot_state_t *curr_state = NULL; + + switch(keycode){ + case CLEAR: { + clear_oneshot_mods(); + clear_mods(); + return false; + } + case PANIC: { + clear_oneshot_mods(); + clear_mods(); + if (get_oneshot_layer() != 0) { + clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED); + } + layer_move(0); + return false; + } + } + + for (int i = 0; i < NUM_NSHOT_STATES; ++i) { + curr_state = &nshot_states[i]; + + if (keycode == curr_state->trigger) { + if (record->event.pressed) { + // Trigger keydown + if (curr_state->state == os_up_unqueued) { + register_code(curr_state->mod); + } + curr_state->state = os_down_unused; + curr_state->count = 0; + } else { + // Trigger keyup + switch (curr_state->state) { + case os_down_unused: + // If we didn't use the mod while trigger was held, queue it. + curr_state->state = os_up_queued; + break; + case os_down_used: + // If we did use the mod while trigger was held, unregister it. + curr_state->state = os_up_unqueued; + unregister_code(curr_state->mod); + break; + default: + break; + } + } +} else { + if (record->event.pressed) { + if (is_nshot_cancel_key(keycode) && curr_state->state != os_up_unqueued) { + // Cancel oneshot on designated cancel keydown. + curr_state->state = os_up_unqueued; + curr_state->count = 0; + unregister_code(curr_state->mod); + } + } else { + if (!is_nshot_ignored_key(keycode)) { + // On non-ignored keyup, consider the oneshot used. + switch (curr_state->state) { + case os_down_unused: + // The mod key is being held as a normal mod. + curr_state->state = os_down_used; + break; + case os_up_queued: + // The mod key is being used as an n-shot. + // Increment the keys-used count. + curr_state->count = curr_state->count + 1; + + // If the n-shot max has been reached, complete the n-shot. + if (curr_state->count == curr_state->max_count) { + curr_state->state = os_up_unqueued; + curr_state->count = 0; + unregister_code(curr_state->mod); + } + break; + default: + break; + } + } + } + } + } + return true; +} + +// turn off the nshot/oneshot macros +#undef ONESHOT +#undef NSHOT +#define ONESHOT BLANK +#define NSHOT BLANK + +#undef CANCEL_KEY +#undef IGNORE_KEY +#define IGNORE_KEY BLANK +#define CANCEL_KEY A_KEY +bool is_nshot_cancel_key(uint16_t keycode) { + switch (keycode) { +#include "nshot.def" + return true; + default: + return false; + } +} + +#undef CANCEL_KEY +#undef IGNORE_KEY +#define CANCEL_KEY BLANK +#define IGNORE_KEY A_KEY +bool is_nshot_ignored_key(uint16_t keycode) { + switch (keycode) { +#include "nshot.def" + return true; + default: + return false; + } +} diff --git a/users/ericgebhart/extensions/nshot_mod.h b/users/ericgebhart/extensions/nshot_mod.h new file mode 100644 index 00000000000..c5840e6bef2 --- /dev/null +++ b/users/ericgebhart/extensions/nshot_mod.h @@ -0,0 +1,45 @@ +#pragma once +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ + +#include QMK_KEYBOARD_H + +// Represents the four states an n-shot key can be in (from users/callum) +typedef enum { + os_up_unqueued, + os_up_queued, + os_down_unused, + os_down_used, +} oneshot_state; + +typedef struct { + uint16_t trigger; + uint16_t mod; + uint8_t max_count; + oneshot_state state; + uint8_t count; +} nshot_state_t; + +extern nshot_state_t nshot_states[]; +extern uint8_t NUM_NSHOT_STATES; + + +// Keys that should cancel the n-shot mod if tapped +bool is_nshot_cancel_key(uint16_t keycode); + +// Keys that should not count towards n-shot usage (e.g., layer toggles) +bool is_nshot_ignored_key(uint16_t keycode); diff --git a/users/ericgebhart/extensions/oneshot.c b/users/ericgebhart/extensions/oneshot.c new file mode 100644 index 00000000000..83c8a04363a --- /dev/null +++ b/users/ericgebhart/extensions/oneshot.c @@ -0,0 +1,217 @@ +#include QMK_KEYBOARD_H +#include USERSPACE_H +#include "oneshot.h" + +#ifdef ONESHOT_MOD_ENABLE + +/* -------------------------------------------- */ +// Add to process_record_user. +/* int8_t keycode_consumed = 0; */ + +/* #ifdef ONESHOT_ENABLE */ +/* keycode_consumed += update_oneshot_modifiers(keycode, record, keycode_consumed); */ +/* #endif */ +/* -------------------------------------------- */ + +#define ONESHOT(KEYCODE, MOD) case KEYCODE: return MOD; + +#define A_KEY(KEYCODE) case KEYCODE: +#define BLANK(...) + +#define CANCEL_KEY BLANK +#define IGNORE_KEY BLANK + +// the basic states a oneshot modifier can be in +typedef enum { + ONESHOT_STATE_OFF = 0, + ONESHOT_STATE_PRESSED = 1, + ONESHOT_STATE_QUEUED = 2, + ONESHOT_STATE_CAPSWORD = 3, + ONESHOT_STATE_LOCK = 4, + ONESHOT_STATE_END_PRESSED = 5, +} oneshot_state; + +oneshot_state modifiers_state_transitions_normal[5] = {ONESHOT_STATE_PRESSED, ONESHOT_STATE_QUEUED, ONESHOT_STATE_LOCK, ONESHOT_STATE_END_PRESSED, ONESHOT_STATE_END_PRESSED}; + +static oneshot_state modifiers_with_state[ONESHOT_MOD_COUNT] = { + ONESHOT_STATE_OFF, ONESHOT_STATE_OFF, ONESHOT_STATE_OFF, ONESHOT_STATE_OFF, ONESHOT_STATE_OFF, ONESHOT_STATE_OFF, ONESHOT_STATE_OFF, ONESHOT_STATE_OFF, +}; + +// oneshot mods always get registered immediately to the operating system, but we also +// need to keep track if the mod(s) got combined with a normal key (applied) +static bool unapplied_mods_present = false; + +// keycode of the last pressed 'normal' key which haven't been released yet +static uint16_t repeating_normal_key = 0; + +// utility functions (implemented at the bottom of this file) +static void set_modifier_state(oneshot_mod osmod, oneshot_state new_state); +static int8_t set_modifier_state_all(oneshot_state new_state); +static void set_modifier_state_all_from_to(oneshot_state oneshot_state_from, oneshot_state oneshot_state_to); +static bool all_modifiers_are_off(void); + +int8_t turnoff_oneshot_modifiers() { + return set_modifier_state_all(ONESHOT_STATE_OFF); +} + +// see comment in corresponding headerfile +int8_t update_oneshot_modifiers(uint16_t keycode, keyrecord_t *record, int8_t keycode_consumed) { + + // cancel keys + if (is_oneshot_modifier_cancel_key(keycode) && record->event.pressed) { + if (keycode_consumed == 0) { + unapplied_mods_present = false; + keycode_consumed += set_modifier_state_all(ONESHOT_STATE_OFF); + } else { + keycode_consumed = 0; + } + return keycode_consumed; + } + + // ignored keys + if (is_oneshot_modifier_ignored_key(keycode)) { + return keycode_consumed; + } + + oneshot_mod osmod = get_modifier_for_trigger_key(keycode); + + // trigger keys + if (osmod != ONESHOT_NONE) { + oneshot_state state = modifiers_with_state[osmod]; + if (record->event.pressed) { + if (state == ONESHOT_STATE_OFF) { + unapplied_mods_present = (repeating_normal_key == 0); + } + oneshot_state tostate = modifiers_state_transitions_normal[state]; + set_modifier_state(osmod, tostate); + } else { + if (state == ONESHOT_STATE_PRESSED) { + if (!unapplied_mods_present) { + set_modifier_state(osmod, ONESHOT_STATE_OFF); + } else { + set_modifier_state(osmod, ONESHOT_STATE_QUEUED); + } + } else if (state == ONESHOT_STATE_END_PRESSED) { + set_modifier_state(osmod, ONESHOT_STATE_OFF); + } + } + } + // normal keys + else { + if (record->event.pressed) { + if (!all_modifiers_are_off()) { + if (unapplied_mods_present) { + unapplied_mods_present = false; + } else { + unregister_code(repeating_normal_key); + set_modifier_state_all_from_to(ONESHOT_STATE_QUEUED, ONESHOT_STATE_OFF); + } + } + repeating_normal_key = keycode; + } else { + if (!all_modifiers_are_off()) { + unregister_code(keycode); + set_modifier_state_all_from_to(ONESHOT_STATE_QUEUED, ONESHOT_STATE_OFF); + } + repeating_normal_key = 0; + } + } + + return 0; +} + +// implementation of utility functions + +// registers/unregisters a mod to the operating system on state change if necessary +void update_modifier(oneshot_mod osmod, oneshot_state previous_state, oneshot_state current_state) { + if (previous_state == ONESHOT_STATE_OFF) { + register_code(KC_LCTRL + osmod); + } else { + if (current_state == ONESHOT_STATE_OFF) { + unregister_code(KC_LCTRL + osmod); + } + } +} + +void set_modifier_state(oneshot_mod osmod, oneshot_state new_state) { + oneshot_state previous_state = modifiers_with_state[osmod]; + if (previous_state != new_state) { + modifiers_with_state[osmod] = new_state; + update_modifier(osmod, previous_state, new_state); + } +} + +int8_t set_modifier_state_all(oneshot_state new_state) { + int8_t c = 0; + for (int8_t i = 0; i < ONESHOT_MOD_COUNT; i++) { + oneshot_state previous_state = modifiers_with_state[i]; + if (previous_state != new_state) { + modifiers_with_state[i] = new_state; + update_modifier(i, previous_state, new_state); + c += 1; + } + } + return c; +} + +void set_modifier_state_all_from_to(oneshot_state oneshot_state_from, oneshot_state oneshot_state_to) { + for (int8_t i = 0; i < ONESHOT_MOD_COUNT; i++) { + if (modifiers_with_state[i] == oneshot_state_from) { + modifiers_with_state[i] = oneshot_state_to; + update_modifier(i, oneshot_state_from, oneshot_state_to); + } + } +} + +bool all_modifiers_are_off() { + for (int8_t i = 0; i < ONESHOT_MOD_COUNT; i++) { + if (modifiers_with_state[i] != ONESHOT_STATE_OFF) { + return false; + } + } + return true; +} + +oneshot_mod get_modifier_for_trigger_key(uint16_t keycode) +{ + switch (keycode) + { +#include "oneshot.def" + return true; + default: + return ONESHOT_NONE; + } +} + +// turn off the oneshot macros +#undef ONESHOT +#define ONESHOT BLANK +#define NSHOT BLANK + +#undef CANCEL_KEY +#undef IGNORE_KEY +#define CANCEL_KEY A_KEY +#define IGNORE_KEY BLANK +bool is_oneshot_modifier_cancel_key(uint16_t keycode) { + switch (keycode) { +#include "oneshot.def" + return true; + default: + return false; + } +} + +#undef CANCEL_KEY +#undef IGNORE_KEY +#define CANCEL_KEY BLANK +#define IGNORE_KEY A_KEY +bool is_oneshot_modifier_ignored_key(uint16_t keycode) { + switch (keycode) { +#include "oneshot.def" + return true; + default: + return false; + } +} + +#endif diff --git a/users/ericgebhart/extensions/oneshot.h b/users/ericgebhart/extensions/oneshot.h new file mode 100644 index 00000000000..774dc4ab39a --- /dev/null +++ b/users/ericgebhart/extensions/oneshot.h @@ -0,0 +1,37 @@ +#define ENABLE_ONESHOT +#ifdef ENABLE_ONESHOT +#pragma once + +typedef enum { + ONESHOT_LCTL = 0, + ONESHOT_LSFT = 1, + ONESHOT_LALT = 2, + ONESHOT_LGUI = 3, + ONESHOT_RCTL = 4, + ONESHOT_RSFT = 5, + ONESHOT_RALT = 6, + ONESHOT_RGUI = 7, + ONESHOT_NONE = 8, + ONESHOT_MOD_COUNT = 8, +} oneshot_mod; + + +// This function should be called inside proces_record_user and does everything needed to get one shot modifiers working. +// Returns true if the keycode needs further handling, false otherwise. +int8_t update_oneshot_modifiers(uint16_t keycode, keyrecord_t *record, int8_t keycode_consumed); +int8_t turnoff_oneshot_modifiers(void); + +// TO BE IMPLEMENTED BY THE USER +// This function should return one of the oneshot_mod enumerations (see keymap.c implementation) +oneshot_mod get_modifier_for_trigger_key(uint16_t keycode); + +// TO BE IMPLEMENTED BY THE USER +// This function should return true for keycodes that must be ignored in the oneshot modifier behaviour. +// You probably want to ignore layer keys. Trigger keys don't need to be specified here. +bool is_oneshot_modifier_ignored_key(uint16_t keycode); + +// TO BE IMPLEMENTED BY THE USER +// This function should return true for keycodes that should reset all oneshot modifiers. +bool is_oneshot_modifier_cancel_key(uint16_t keycode); + +#endif diff --git a/users/ericgebhart/extensions/process_locales.h b/users/ericgebhart/extensions/process_locales.h new file mode 100644 index 00000000000..d0f7af53bf2 --- /dev/null +++ b/users/ericgebhart/extensions/process_locales.h @@ -0,0 +1,29 @@ +#pragma once +/* + Copyright 2022 Eric Gebhart + + 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 . +*/ + +#include USERSPACE_H + +// Stuff we need for locale and layer switching +// there can be more but we need to know where they start and end. +// remember there's limitations on layers. +// Our locales. so it's easy to switch between them. + +bool process_locales(uint16_t keycode, keyrecord_t *record); + +#define PROCESS_LOCALES \ + if (!process_locales(keycode, record)) { return false; } diff --git a/users/ericgebhart/extensions/process_nshot.h b/users/ericgebhart/extensions/process_nshot.h new file mode 100644 index 00000000000..1ec42db4785 --- /dev/null +++ b/users/ericgebhart/extensions/process_nshot.h @@ -0,0 +1,21 @@ +#pragma once +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ +// Custom one-or-more-shot implementation that does not rely on timers +// and persists across layer changes. Based on the users/callum implementation +// at https://github.com/callum-oakley/qmk_firmware/tree/master/users/callum +bool process_nshot_state(uint16_t keycode, keyrecord_t *record); diff --git a/users/ericgebhart/extensions/process_smart_lock.h b/users/ericgebhart/extensions/process_smart_lock.h new file mode 100644 index 00000000000..b8e2fb27357 --- /dev/null +++ b/users/ericgebhart/extensions/process_smart_lock.h @@ -0,0 +1,19 @@ +#pragma once +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ +///* -------- Process Record -------- */ +void process_smart_lock(uint16_t keycode, keyrecord_t *record); diff --git a/users/ericgebhart/extensions/quick_tap.c b/users/ericgebhart/extensions/quick_tap.c new file mode 100644 index 00000000000..8c25f153bdd --- /dev/null +++ b/users/ericgebhart/extensions/quick_tap.c @@ -0,0 +1,37 @@ +/* + Copyright 2022 Eric Gebhart , @possumvibes + + 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 . +*/ + +// written by @dnaq. +#if defined( global_quick_tap) && defined(CONSOLE_KEY_LOGGER_ENABLE) + bool process_global_quick_tap(uint16_t keycode, keyrecord_t *record) { + static uint16_t global_quick_tap_timer = 0; + if (keycode < QK_MOD_TAP || keycode > QK_MOD_TAP_MAX) { + global_quick_tap_timer = timer_read(); + return true; + } + if (timer_elapsed(global_quick_tap_timer) > TAPPING_TERM) { + return true; + } + if (record->event.pressed) { + keycode = keycode & 0xFF; + global_quick_tap_timer = timer_read(); + tap_code(keycode); + return false; + } + return true; + } +#endif diff --git a/users/ericgebhart/extensions/send_string.c b/users/ericgebhart/extensions/send_string.c new file mode 100644 index 00000000000..50237f51432 --- /dev/null +++ b/users/ericgebhart/extensions/send_string.c @@ -0,0 +1,40 @@ +/* + Copyright 2018 Eric Gebhart + + 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 . +*/ +#include USERSPACE_H +#include "version.h" + +#define SEND_STR(KEYC, STRING) \ + case KEYC: \ + if (record->event.pressed) { \ + SEND_STRING(STRING); \ + } \ + break; + +#define SEND_STR_DELAY(KEYC, STRING) \ + case KEYC: \ + if (record->event.pressed) { \ + SEND_STRING_DELAY(STRING, TAP_CODE_DELAY); \ + } \ + break; + +void process_send_strs(uint16_t keycode, keyrecord_t *record){ +#ifdef SEND_STRING_ENABLE + switch (keycode) { +#include "send_string.def" + } +#endif +} diff --git a/users/ericgebhart/extensions/smart_lock.c b/users/ericgebhart/extensions/smart_lock.c new file mode 100644 index 00000000000..5b3dc0ecb27 --- /dev/null +++ b/users/ericgebhart/extensions/smart_lock.c @@ -0,0 +1,117 @@ +/* + Copyright 2022 Eric Gebhart + + 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 . +*/ +// Derived from smart_layers by @Possumvibes +// Derived from one shot_mod by @Callum. + +#include "smart_lock.h" +#include USERSPACE_H + +/* print("string"): Print a simple string. */ +/* uprintf("%s string", var) */ + +bool ignore_key(uint16_t keycode, + const uint16_t *cond_keys){ + + // look for non-cancel condition. + // look for keys to ignore, if we match, we do nothing. + for (; pgm_read_word(cond_keys) != COND_KEYS_END ; ++cond_keys){ + if (pgm_read_word(cond_keys) == keycode){ + return true; + } + } + return false; +} + +void deactivate_sml_layer(smart_lock_t *sml){ + layer_off(sml->thing); + sml->active = false; +} +void deactivate_sml_mod(smart_lock_t *sml){ + unregister_mods(sml->thing); + sml->active = false; +} + +void deactivate_sml(smart_lock_t *sml){ + switch(sml->type){ + case sml_layer: + deactivate_sml_layer(sml); + case sml_mod: + deactivate_sml_mod(sml); + } +} + + +void sml_activate_layer(smart_lock_t *sml){ + sml->active = true; + layer_on(sml->thing); +} + +void sml_maybe_activate_mod(smart_lock_t *sml ){ + if (sml->active) { + unregister_mods(sml->thing); + } else { + register_mods(sml->thing); + } + sml->active = !sml->active; +} + +void sml_activate(smart_lock_t *sml){ + switch(sml->type){ + case sml_layer: + sml_activate_layer(sml); + break; + case sml_mod: +sml_maybe_activate_mod(sml); + break; + } +} + + + +void update_smart_lock(uint16_t keycode) { + +#ifdef SMART_LOCK_ENABLE + bool deactivate = false; + smart_lock_t *sml; + + for (int i = 0; i < SML_LEN; ++i){ + sml = &smart_locks[i]; + + // if it's a match, + // maybe activate/deactivate it if we got it's keycode. + if (sml->keycode == keycode){ + sml_activate(sml); + return; + } + + // deactivate what we need to. + if(sml->active){ + deactivate = !ignore_key(keycode, &sml->keys[0]); + if (deactivate){ + deactivate_sml(sml); + } + } + } +#endif + return; +} + +void process_smart_lock(uint16_t keycode, keyrecord_t *record) { + if (record->event.pressed) { + update_smart_lock(keycode); + } +} diff --git a/users/ericgebhart/extensions/smart_lock.h b/users/ericgebhart/extensions/smart_lock.h new file mode 100644 index 00000000000..0102d611cd3 --- /dev/null +++ b/users/ericgebhart/extensions/smart_lock.h @@ -0,0 +1,103 @@ +#pragma once +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ +#include QMK_KEYBOARD_H +#include USERSPACE_H + +#ifdef SMART_LOCK_ENABLE +typedef enum { + sml_layer, + sml_mod +} smart_lock_type; + +typedef struct { + bool active; + const uint16_t *keys; + uint16_t keycode; + uint16_t thing; + smart_lock_type type; +} smart_lock_t; + + +// smart layer, smart mods +#undef SMLL +#undef SMLM +#define SMLL(key, layer, ...) +#define SMLM(key, mod, ...) // to replace mod_lock.. +#define COND_KEYS_END 0 + +#define CONCATENATE_SA(a, ...) a ## __VA_ARGS__ +#define CONCATENATE_S(a, ...) a ## __VA_ARGS__ +#define CAT_S(a, ...) CONCATENATE_S(a, __VA_ARGS__) +#define MK_SKEY(KC) CONCATENATE_S(sml_, KC) +#define MK_ARRAY(KC) \ + const uint16_t PROGMEM CONCATENATE_SA(sml_, KC)[] + +// to create an enum and find how many... +#define S_ENUM(kc, layer, ...) CAT_S(sml__, kc), +// create a const array of the condkeys for each SML +#define S_DATA(kc, thing, ...) MK_ARRAY(kc) = {__VA_ARGS__, COND_KEYS_END}; + +// create a list of smart_lock structs. Two names, one for mod one for layer to be concise. +#define S_SMART_LOCK(kc, layer, ...) {false, MK_SKEY(kc), kc, layer, sml_layer}, +#define M_SMART_LOCK(kc, mod, ...) {false, MK_SKEY(kc), kc, mod, sml_mod}, + +#define SML(sk, sa, st, stype) \ + { .keys = &(sk)[0], .keycode = (sa), .thing = (st), .smart_lock_type = stype} +#define K_SMLM(key, mod...) [MK_SKEY(key)] = SML(MK_SKEY(key), key, mod, sml_mod), +#define K_SMLL(key, layer...) [MK_SKEY(key)] = SML(MK_SKEY(key), key, layer, sml_layer), + +// Set everything up +// - Create enum of names, (sml_keycode). Used as indexes in the arrays. +// avoids using the keycodes which would create a sparse/large array. +// - Create array of conditional locks.. +// - Create array of the conditional keys for the locks, by name. + +// Create Enum +#undef SMLL +#undef SMLM +#define SMLL S_ENUM +#define SMLM S_ENUM + +// find how many +enum smart_locks { +#include "smart_lock.def" + SML_LENGTH +}; +uint16_t SML_LEN = SML_LENGTH; + +// Bake locks into mem, name, ignore/cancel keys +#undef SMLL +#undef SMLM +#undef TOGG +#define SMLL S_DATA +#define SMLM S_DATA +#include "smart_lock.def" +#undef SMLL +#undef SMLM + +// Fill array of locks by name, kc, layer/mod. +#define SMLL S_SMART_LOCK +#define SMLM M_SMART_LOCK + +smart_lock_t smart_locks[] = { +#include "smart_lock.def" +}; +#undef SMLL +#undef SMLM + +#endif diff --git a/users/ericgebhart/extensions/swapper.c b/users/ericgebhart/extensions/swapper.c new file mode 100644 index 00000000000..988a99e6025 --- /dev/null +++ b/users/ericgebhart/extensions/swapper.c @@ -0,0 +1,58 @@ +/* + Copyright 2022 Eric Gebhart . +*/ +// Derived from swapper by @Possumvibes and @Callum + +#include "swapper.h" + +swapper_state_t swapper_states[] = { +#ifdef SWAPPER_ENABLE +#include "swapper.def" +#endif +}; +uint8_t NUM_SWAPPER_STATES = sizeof(swapper_states) / sizeof(swapper_state_t); + +// Based on https://github.com/callum-oakley/qmk_firmware/tree/master/users/callum +void process_swappers(uint16_t keycode, keyrecord_t *record) { +#ifdef SWAPPER_ENABLE + swapper_state_t *curr_state = NULL; + for (int i = 0; i < NUM_SWAPPER_STATES; ++i) { + curr_state = &swapper_states[i]; + + if (keycode == curr_state->forward_trigger) { + if (record->event.pressed) { + if (!curr_state->active) { + curr_state->active = true; + register_code16(curr_state->mod); + } + register_code16(curr_state->forward); + } else { + unregister_code16(curr_state->forward); + // Don't unregister curr_state->mod until some other key is hit or released. + } + } else if (curr_state->active && keycode == curr_state->reverse_trigger) { + if (record->event.pressed) { + register_code16(curr_state->reverse); + } else { + unregister_code16(curr_state->reverse); + } + } else if (curr_state->active) { + unregister_code16(curr_state->mod); + curr_state->active = false; + } + } +#endif +} diff --git a/users/ericgebhart/extensions/swapper.h b/users/ericgebhart/extensions/swapper.h new file mode 100644 index 00000000000..fb7774f37a3 --- /dev/null +++ b/users/ericgebhart/extensions/swapper.h @@ -0,0 +1,37 @@ +#pragma once +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ + +#include QMK_KEYBOARD_H +#include USERSPACE_H + +typedef struct { + bool active; + uint16_t mod; + uint16_t forward; + uint16_t reverse; + uint16_t forward_trigger; + uint16_t reverse_trigger; +} swapper_state_t; +extern swapper_state_t swapper_states[]; +extern uint8_t NUM_SWAPPER_STATES; + +#undef SWAPPER_KEY +#define SWAPPER_KEY(KC, REVERSE_IT_KC, FWD_KC, REV_KC, MOD) \ + {false, MOD, FWD_KC, REV_KC, KC, REVERSE_IT_KC}, + +void process_swappers(uint16_t keycode, keyrecord_t *record); diff --git a/users/ericgebhart/tap_dances.c b/users/ericgebhart/extensions/tap_dances.c similarity index 97% rename from users/ericgebhart/tap_dances.c rename to users/ericgebhart/extensions/tap_dances.c index 8f9503a2619..b292dab6781 100755 --- a/users/ericgebhart/tap_dances.c +++ b/users/ericgebhart/extensions/tap_dances.c @@ -47,8 +47,16 @@ void tap_dance_mouse_btns (qk_tap_dance_state_t *state, void *user_data) { // counting on all the qwerty layers to be less than dvorak_on_bepo int on_qwerty(){ - uint8_t deflayer = (get_highest_layer(default_layer_state)); - return (deflayer < _DVORAK_BP); + uint8_t deflayer = (biton32(default_layer_state)); + switch(deflayer){ + case _DVORAK_BP: + case _BEAKL_BP: + case _BEPO: + return (false); + default: + break; + } + return (true); } static void switch_default_layer(uint8_t layer) { @@ -58,7 +66,7 @@ static void switch_default_layer(uint8_t layer) { // so the keyboard remembers which layer it's in after power disconnect. /* - layer_state_t default_layer_state_set_kb(layer_state_t state) { + uint32_t default_layer_state_set_kb(uint32_t state) { eeconfig_update_default_layer(state); return state; } diff --git a/users/ericgebhart/tap_dances.h b/users/ericgebhart/extensions/tap_dances.h similarity index 96% rename from users/ericgebhart/tap_dances.h rename to users/ericgebhart/extensions/tap_dances.h index 11978467a79..745446756e2 100755 --- a/users/ericgebhart/tap_dances.h +++ b/users/ericgebhart/extensions/tap_dances.h @@ -16,4 +16,4 @@ along with this program. If not, see . */ -#include "ericgebhart.h" +#include USERSPACE_H diff --git a/users/ericgebhart/extensions/tap_hold.c b/users/ericgebhart/extensions/tap_hold.c new file mode 100644 index 00000000000..041b961e11c --- /dev/null +++ b/users/ericgebhart/extensions/tap_hold.c @@ -0,0 +1,165 @@ +/* + Copyright 2022 Eric Gebhart + + 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 . +*/ + +/* This is variations on custom tap hold functionality. It makes it easy */ +/* to maintain tap_hold keys and combinations. These combinations go into */ +/* the file "tap_hold.def". Here are two examples. */ +/* */ +/* This example is tap or tap for TAP_HOLD_TERM, It defines a key */ +/* KC_CCCV, which sends Control-c on tap, and Control-v on hold. */ +/* */ +/* TP_TPL(KC_CCCV, LCTL(KC_C), LCTL(KC_V)) */ +/* */ +/* This is an example of Open - Open and Close. */ +/* It defines a key, KC_OCPRN which when tapped gives an '(' and */ +/* when held gives '()' followed by a backarrow. */ +/* Which places the cursor between them.*/ +/* */ +/* OPEN_OCL(KC_OCPRN, KC_LPRN, KC_RPRN) */ +/* */ +/* To use this, add it to your src in rules.mk, and include */ +/* tap_hold.h in your code above process_record_user. */ +/* */ +/* Add a call like this to use it. */ +/* process_tap_hold_user(keycode, record); */ +/* */ +/* Note: You must add any custom keycodes to your keycodes enum */ +/* otherwise they will not exist. */ + + +#include USERSPACE_H +#include "stdint.h" +#include "tap_hold.h" +void update_smart_lock(uint16_t keycode); + + +void tap_taplong(uint16_t kc1, uint16_t kc2, keyrecord_t *record) { + if (record->event.pressed) { + tap_taplong_timer = timer_read(); + } else { + if (timer_elapsed(tap_taplong_timer) > TAP_HOLD_TERM) { + tap_code16(kc2); + } else { + tap_code16(kc1); + } + } +} + +void tap_sml(uint16_t kc1, uint16_t kc2, keyrecord_t *record) { + if (record->event.pressed) { + tap_taplong_timer = timer_read(); + } else { + if (timer_elapsed(tap_taplong_timer) > TAP_HOLD_TERM) { + update_smart_lock(kc2); + } else { + tap_code16(kc1); + } + } +} + +/* for (){}[]""''<>``. tap for open. Hold for open and close, ending inbetween. */ +/* Assumes a one character length. */ +void open_openclose(uint16_t kc1, uint16_t kc2, keyrecord_t *record) { + if (record->event.pressed) { + tap_taplong_timer = timer_read(); + }else{ + if (timer_elapsed(tap_taplong_timer) > TAP_HOLD_TERM) { + tap_code16(kc1); + tap_code16(kc2); + tap_code16(KC_LEFT); + + } else { + // is shifted + uint16_t mod_state = get_mods(); + if ((mod_state & MOD_MASK_SHIFT) || + (get_oneshot_mods() & MOD_MASK_SHIFT)){ + del_mods(MOD_MASK_SHIFT); + del_oneshot_mods(MOD_MASK_SHIFT); + + tap_code16(kc1); + tap_code16(kc1); + tap_code16(kc1); + + set_mods(mod_state); + }else{ + tap_code16(kc1); + } + } + } +} + +// open and open close for dead keys. +void open_openclose_not_dead(uint16_t kc1, uint16_t kc2, keyrecord_t *record) { + if (record->event.pressed) { + tap_taplong_timer = timer_read(); + }else{ + if (timer_elapsed(tap_taplong_timer) > TAP_HOLD_TERM) { + tap_code16(kc1); + tap_code16(KC_SPACE); + tap_code16(kc2); + tap_code16(KC_SPACE); + tap_code16(KC_LEFT); + } else { + // is shifted - give a triple + uint16_t mod_state = get_mods(); + if ((mod_state & MOD_MASK_SHIFT) || + (get_oneshot_mods() & MOD_MASK_SHIFT)){ + del_mods(MOD_MASK_SHIFT); + del_oneshot_mods(MOD_MASK_SHIFT); + + tap_code16(kc1); + tap_code16(KC_SPACE); + tap_code16(kc1); + tap_code16(KC_SPACE); + tap_code16(kc1); + tap_code16(KC_SPACE); + + set_mods(mod_state); + }else{ + tap_code16(kc1); + tap_code16(KC_SPACE); + } + } + } +} + +// macros for use in tap_hold.defs. +#define TP_TPL(KCKEY, KC01, KC02) \ + case KCKEY: \ + tap_taplong(KC01, KC02, record); \ + break; + +#define TP_SML(KCKEY, KC01, KC02) \ + case KCKEY: \ + tap_sml(KC01, KC02, record); \ + break; + +#define OPEN_OCL(KCKEY, KC01, KC02) \ + case KCKEY: \ + open_openclose(KC01, KC02, record); \ + break; + +#define OPEN_OCL_ND(KCKEY, KC01, KC02) \ + case KCKEY: \ + open_openclose_not_dead(KC01, KC02, record); \ + break; + +void process_tap_hold_user(uint16_t keycode, keyrecord_t *record) { + switch(keycode){ +#include "tap_hold.def" + } +} diff --git a/users/ericgebhart/extensions/tap_hold.h b/users/ericgebhart/extensions/tap_hold.h new file mode 100644 index 00000000000..e5b3c42d8a2 --- /dev/null +++ b/users/ericgebhart/extensions/tap_hold.h @@ -0,0 +1,20 @@ +#pragma once +/* + Copyright 2022 Eric Gebhart + + 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 . +*/ + +void process_tap_hold_user(uint16_t keycode, keyrecord_t* record); +uint16_t tap_taplong_timer; diff --git a/users/ericgebhart/altlocal_keys.h b/users/ericgebhart/extensions/unicode.c similarity index 50% rename from users/ericgebhart/altlocal_keys.h rename to users/ericgebhart/extensions/unicode.c index b7fa977b92a..fe44c69b1c1 100644 --- a/users/ericgebhart/altlocal_keys.h +++ b/users/ericgebhart/extensions/unicode.c @@ -1,4 +1,3 @@ -#pragma once /* Copyright 2018 Eric Gebhart @@ -15,22 +14,21 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ +#include USERSPACE_H +#include "process_unicode_common.h" -// for the creation of dvorak keys on an Bepo keyboard at the OS layer. -// so we can create an array of reasonable size -// for our translation keys. We have to create a -// good range of numbers -#define GR(x) (x-SAFE_RANGE) +#undef UC_STR +#define UC_STR(KEYC, STRING) \ + case KEYC: \ + if (record->event.pressed) { \ + send_unicode_string(STRING); \ + } \ + break; -// void tap(uint16_t keycode){ register_code(keycode); unregister_code(keycode); }; - -uint8_t gr(uint16_t); -void send_keycode(uint16_t); - -#define MOD_NONE 0x00 - -// indexs for the keycode translation table. -#define UNSHIFTED_KEY(key) key_translations[gr(key)][0][0] -#define UNSHIFTED_MODS(key) key_translations[gr(key)][0][1] -#define SHIFTED_KEY(key) key_translations[gr(key)][1][0] -#define SHIFTED_MODS(key) key_translations[gr(key)][1][1] +void process_unicode_strs(uint16_t keycode, keyrecord_t *record){ +#if defined(UNICODE_ENABLE) && defined(SEND_UNICODE_ENABLE) + switch (keycode) { +#include "unicode.def" + } +#endif +} diff --git a/users/ericgebhart/extensions/unicode.h b/users/ericgebhart/extensions/unicode.h new file mode 100644 index 00000000000..eecf05d1bc8 --- /dev/null +++ b/users/ericgebhart/extensions/unicode.h @@ -0,0 +1,24 @@ +#pragma once +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ +// Custom one-or-more-shot implementation that does not rely on timers +// and persists across layer changes. Based on the users/callum implementation +// at https://github.com/callum-oakley/qmk_firmware/tree/master/users/callum +// make it easy to put unicode keys into process_record + + +void process_unicode_strs(uint16_t keycode, keyrecord_t *record); diff --git a/users/ericgebhart/flash-ergodox b/users/ericgebhart/flash-ergodox deleted file mode 100755 index 945b2b605af..00000000000 --- a/users/ericgebhart/flash-ergodox +++ /dev/null @@ -1 +0,0 @@ -teensy-loader-cli -mmcu=atmega32u4 -w $1 diff --git a/users/ericgebhart/keyboards/keyboards.h b/users/ericgebhart/keyboards/keyboards.h new file mode 100644 index 00000000000..8a6371af5e4 --- /dev/null +++ b/users/ericgebhart/keyboards/keyboards.h @@ -0,0 +1,115 @@ +#pragma once +/* + Copyright 2018 Eric Gebhart + + 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 . +*/ + + +// Kyria +#ifdef KEYBOARD_splitkb_kyria +#define BASE Base_2x6_8_5 +#define BASEt6 Base_2x6_8_5t6 +#define TRANS Transient_2x6_8_5 +#define BASE_COLS_IN_OUT 5_6 // 5, 5_6, 6 +#endif + +// Corne +#ifdef KEYBOARD_crkbd +#define BASE Base_3x6_3 +#define BASEt6 Base_3x6_3t6 +#define TRANS Transient_3x6_3 +#define BASE_COLS_IN_OUT 5_6 // 5, 5_6, 6 +#endif + +// Ergodox ez. +#ifdef KEYBOARD_ergodox_ez +#define BASE Base_dox +#define BASEt6 Base_doxt6 +#define TRANS Transient_dox +#define BASE_COLS_IN_OUT 5_6 // 5, 5_6, 6 +// tell the keymap we want to specify number rows. +// 4x10 input instead 3x10. +#define BASE_NUMBER_ROW // turn on 4 row base templates. +#endif + +// XD75 +#ifdef KEYBOARD_xiudi_xd75 +#define BASE Base_5x15 +#define BASEt6 Base_5x15t6 +#define TRANS Transient_5x15 +#define BASE_COLS_IN_OUT 5_6 // 5, 5_6, 6 + +// tell the keymap we want to specify number rows. +// 4x10 input instead 3x10. +#define BASE_NUMBER_ROW // turn on 4 row base templates. +#endif + +// Viterbi +#ifdef KEYBOARD_keebio_viterbi +#define BASE Base_5x14 +#define BASEt6 Base_5x14t6 +#define TRANS Transient_5x14 +#define BASE_COLS_IN_OUT 5_6 // 5, 5_6, 6 + +// tell the keymap we want to specify number rows. +// 4x10 input instead 3x10. +#define BASE_NUMBER_ROW // turn on 4 row base templates. +#endif + +// Rebound +#ifdef KEYBOARD_montsinger_rebound +#define BASE Base_rebound +#define BASEt6 Base_reboundt6 +#define TRANS Rebound_transient +#define BASE_COLS_IN_OUT 5_6 // 5, 5_6, 6 +#endif + +// Kinesis +#if defined(KEYBOARD_kinesis_alvicstep) \ + || defined(KEYBOARD_kinesis_stapelberg) \ + || defined(KEYBOARD_kinesis_kint2pp) \ + || defined(KEYBOARD_kinesis_nguyenvietyen) \ + || defined(KEYBOARD_kinesis_kint36) \ + || defined(KEYBOARD_kinesis_kint41) \ + || defined(KEYBOARD_kinesis_kintlc) + +#undef LAYOUT_PVARG +#define LAYOUT_PVARG(...) LAYOUT_pretty(__VA_ARGS__) +// Base layers 4x10, so numbers are enabled, and a 3x10 for the keymap. +// Transient function layers are all 3x10. +#define BASE Base_4x6_4_6 +#define BASEt6 Base_4x6_4_6t6 +#define TRANS Transient_4x6_4_6 +#define BASE_COLS_IN_OUT 5_6 // 5, 5_6, 6 + +// tell the keymap we want to specify number rows. +// 4x10 input instead 3x10. +#define BASE_NUMBER_ROW // turn on 4 row base templates. +#endif + +// My Morpho Dactyl +#ifdef KEYBOARD_gebhart_morpho +#undef LAYOUT_PVARG +#define LAYOUT_PVARG(...) LAYOUT_split_4x6_5_8(__VA_ARGS__) + +#define BASE Base_4x6_5_8 +#define BASEt6 Base_4x6_5_8t6 +#define TRANS Transient_4x6_5_8 +#define BASE_COLS_IN_OUT 5_6 // 5, 5_6, 6 + +// tell the keymap we want to specify number rows. +// 4x10 input instead 3x10. +#define BASE_NUMBER_ROW // turn on 4 row base templates. +#endif diff --git a/users/ericgebhart/keyboards/layouts.h b/users/ericgebhart/keyboards/layouts.h new file mode 100644 index 00000000000..b77d5a3de6d --- /dev/null +++ b/users/ericgebhart/keyboards/layouts.h @@ -0,0 +1,771 @@ +#pragma once +/* + Copyright 2018 Eric Gebhart + + 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 . +*/ + +#include "base_layers.h" +#include "mod_layer.h" +#include "edge_keys.h" +#include "thumbs.h" +#include QMK_KEYBOARD_H + +/******************************************************************/ +/* This is where I put my Keyboard layouts. */ +/* The mod layer can be modified in mod_layer.h */ +/* can be applied here. The physical shape of the keyboard is */ +/* also accounted for here. This makes it very simple to add a */ +/* new keyboard and reuse all of my layouts and layers */ +/* */ +/* With all of that in hand, we then create a LAYOUT wrapper */ +/* macro that takes a list of keys, to create a keyboard matrix */ +/* that fits the keyboard. Simple. */ +/* */ +/* The thumb keys, the bottom rows, etc. */ +/* */ +/* An attempt has been made to adapt the kinesis and ergodox */ +/* Thumb keys to the rectangular shapes of the xd75, viterbi, */ +/* and rebound. */ +/******************************************************************/ + +/******************************************************************/ +/* * The XD75 is a 5x15 Ortholinear matrix which means it has 3 */ +/* keys inbetween the usual left and right hand keys */ +/* * The Viterbi is a split 5x14 Ortholinear with 2 middle keys. */ +/* * The Ergodox is a split 5x14 Ortholinear with 2 middle keys, */ +/* thumbkeys. It is missing middle keys on (home) row 3. */ +/* * The Corne is a split 3x12 with 6 thumb keys. It has no */ +/* extra middle keys */ +/* * The Kinesis is 4x6 + 4 and 6 thumb keys. */ +/* * My Dactyl is 4x6 + 5 and 8 thumb keys. */ +/******************************************************************/ + + +/******************************************************************/ +/* In all cases these keyboards are defined in a matrix which is */ +/* a set of rows. Maybe like so, or not. */ +/* */ +/* -------------------------|------------------------ */ +/* | Left0 | Numbers L | mid|dle0 | numbers R | Right0 | */ +/* | Left1 | keys0-5 | mid|dle1 | Keys6-10 | Right1 | */ +/* | Left2 | keys11-15 | mid|dle2 | Keys16-20 | Right2 | */ +/* | Left3 | keys20-25 | mid|dle3 | Keys25-30 | Right3 | */ +/* | Row5L | Row5R | */ +/* | ThumbsL | ThumbsR | */ +/* -------------------------|------------------------ */ + +/* Generally speaking, the keys on the right and left don't change. */ +/* Neither does the bottom row or the thumbs. Frequently the numbers */ +/* row is identical across layers. Mostly, we want our Base layers to */ +/* be predctable. */ + + +// Since our quirky block definitions are basically a list of comma separated +// arguments, we need a wrapper in order for these definitions to be +// expanded before being used as arguments to the LAYOUT_xxx macro. +#if (!defined(LAYOUT) && defined(KEYMAP)) +#define LAYOUT KEYMAP +#endif + +// every keyboard has it's Layout. We start there and make a var args +// out of it. + +#define LVARG_ergodox(...) LAYOUT_ergodox(__VA_ARGS__) +#define LVARG_edox(...) LAYOUT_ergodox_pretty(__VA_ARGS__) +#define LAYOUT_VARG(...) LAYOUT(__VA_ARGS__) +#define LAYOUT_PVARG(...) LAYOUT_pretty(__VA_ARGS__) + +#define LVARG_4x12(...) LAYOUT_ortho_4x12(__VA_ARGS__) +#define LVARG_5x12(...) LAYOUT_ortho_5x12(__VA_ARGS__) +#define LVARG_5x14(...) LAYOUT_ortho_5x14(__VA_ARGS__) +#define LVARG_5x15(...) LAYOUT_ortho_5x15(__VA_ARGS__) + +/* + | Left | Numbers L | middle | numbers R | Right | + | Left | keys0-5 | middle | Keys6-10 | Right | + | Left | keys11-15 | middle | Keys16-20 | Right | + | Left | keys20-25 | middle | Keys25-30 | Right | + |Row5L Row5R | + |ThumbsL ThumbsR | +*/ + +/* Assuming that left, midddle, right, row5, and thumbs stay the same, */ +/* numbers, no numbers, numbers never change, whatever. */ +/* we can have a layout macro that takes a nice rectangle of keys. */ + + +/*Some keyboards need number rows, some don't. there is a setting for that */ +/* the keymap will give number rows if BASE_NUMBER_ROW is defined.*/ +/* in that case, the layout should take 4 rows of 10. */ +/* If all the layouts you might ever want would have the same top row,*/ +/* Then it could be defined like that here, and it could take 3x10.*/ +/* All layouts are relatively simple to make. */ +/* The ROW macros add a universal mod layer so that mods can be defined once */ +/* and used everywhere. No matter the keymap or layer. this allows actual maps */ +/* like dvorak, qwerty, colemak, beakl, etc., to be defined simply. */ + + +/* Additional, usage examples can be found in keyboards.*/ +/* crkbd/keymaps/ericgebhart */ +/* kinesis/keymaps/ericgebhart */ +/* ergodox_ez/keymaps/ericgebhart */ +/* keebio/viterbi/keymaps/ericgebhart */ +/* xiudi/xd75/keymaps/ericgebhart */ +/* montsinger/rebound/rev4/keymaps/ericgebhart */ + + + +/********************************************************************/ +/* xiudi/xd75 - Ortholinear 5x15 */ +/********************************************************************/ +/// These first two base layout templates take sets of 5 keys, left and right. +// Using 4 sets allows for changing the number row if you have one. +// if you never change the number row, then use 3 sets of left and right. +// and define the number row here. +#define Base_5x15( \ + K01, K02, K03, K04, K05, \ + K06, K07, K08, K09, K0A, \ + K11, K12, K13, K14, K15, \ + K16, K17, K18, K19, K1A, \ + K21, K22, K23, K24, K25, \ + K26, K27, K28, K29, K2A, \ + K31, K32, K33, K34, K35, \ + K36, K37, K38, K39, K3A) \ + LVARG_5x15( \ + MOD_ROW(ROW0L)(K01, K02, K03, K04, K05), \ + MAP_CHUNK(___3_MIDDLE_T), \ + MOD_ROW(ROW0R)(K06, K07, K08, K09, K0A), \ + \ + MOD_ROW(ROW1L)(K11, K12, K13, K14, K15), \ + MAP_CHUNK(___3_MIDDLE_1), \ + MOD_ROW(ROW1R)(K16, K17, K18, K19, K1A), \ + \ + MOD_ROW(ROW2L)(K21, K22, K23, K24, K25), \ + MAP_CHUNK(___3_MIDDLE_2), \ + MOD_ROW(ROW2R)(K26, K27, K28, K29, K2A), \ + \ + MOD_ROW(ROW3L)(K31, K32, K33, K34, K35), \ + MAP_CHUNK(___3_MIDDLE_3), \ + MOD_ROW(ROW3R)(K36, K37, K38, K39, K3A), \ + MAP_CHUNK(___15_BOTTOM) \ + ) + +#define Base_5x15t6( \ + K01, K02, K03, K04, K05, K06, \ + K07, K08, K09, K0A, K0B, K0C, \ + K11, K12, K13, K14, K15, K16, \ + K17, K18, K19, K1A, K1B, K1C, \ + K21, K22, K23, K24, K25, K26, \ + K27, K28, K29, K2A, K2B, K2C, \ + K31, K32, K33, K34, K35, K36, \ + K37, K38, K39, K3A, K3B, K3C) \ + LVARG_5x15( \ + MOD_ROW(ROW0L)(K01, K02, K03, K04, K05, K06), \ + MAP_CHUNK(___3_MIDDLE_T), \ + MOD_ROW(ROW0R)(K07, K08, K09, K0A, K0B, K0C), \ + MOD_ROW(ROW1L)(K11, K12, K13, K14, K15, K16), \ + MAP_CHUNK(___3_MIDDLE_1), \ + MOD_ROW(ROW1R)(K17, K18, K19, K1A, K1B, K1C), \ + MOD_ROW(ROW2L)(K21, K22, K23, K24, K25, K26), \ + MAP_CHUNK(___3_MIDDLE_2), \ + MOD_ROW(ROW2R)(K27, K28, K29, K2A, K2B, K2C), \ + MOD_ROW(ROW3L)(K31, K32, K33, K34, K35, K36), \ + MAP_CHUNK(___3_MIDDLE_3), \ + MOD_ROW(ROW3R)(K37, K38, K39, K3A, K3B, K3C), \ + MAP_CHUNK(___15_BOTTOM) \ + ) + +// 4 rows of 12. 3 columns transparent in the middle. +#define Transient_5x15( \ + K01, K02, K03, K04, K05, \ + K07, K08, K09, K0A, K0B, \ + K11, K12, K13, K14, K15, \ + K17, K18, K19, K1A, K1B, \ + K21, K22, K23, K24, K25, \ + K27, K28, K29, K2A, K2B \ + ) \ + LVARG_5x15( \ + ___15___, \ + ___, K01, K02, K03, K04, K05, \ + ___3___, \ + K07, K08, K09, K0A, K0B, ___, \ + ___, K11, K12, K13, K14, K15, \ + ___3___, \ + K17, K18, K19, K1A, K1B, ___, \ + ___, K21, K22, K23, K24, K25, \ + ___3___, \ + K27, K28, K29, K2A, K2B, ___, \ + MAP_CHUNK(___15_BOTTOM) \ + ) \ + +/********************************************************************/ + + +/********************************************************************/ +/* viterbi - Ortholinear 5x14 */ +/********************************************************************/ +#define Base_5x14( \ + K01, K02, K03, K04, K05, \ + K06, K07, K08, K09, K0A, \ + K11, K12, K13, K14, K15, \ + K16, K17, K18, K19, K1A, \ + K21, K22, K23, K24, K25, \ + K26, K27, K28, K29, K2A, \ + K31, K32, K33, K34, K35, \ + K36, K37, K38, K39, K3A) \ + LVARG_5x14( \ + MOD_ROW(ROW0L)(K01, K02, K03, K04, K05), \ + MAP_CHUNK(___2_MIDDLE_T), \ + MOD_ROW(ROW0R)(K06, K07, K08, K09, K0A), \ + \ + MOD_ROW(ROW1L)(K11, K12, K13, K14, K15), \ + MAP_CHUNK(___2_MIDDLE_1), \ + MOD_ROW(ROW1R)(K16, K17, K18, K19, K1A), \ + \ + MOD_ROW(ROW2L)(K21, K22, K23, K24, K25), \ + MAP_CHUNK(___2_MIDDLE_2), \ + MOD_ROW(ROW2R)(K26, K27, K28, K29, K2A), \ + \ + MOD_ROW(ROW3L)(K31, K32, K33, K34, K35), \ + MAP_CHUNK(___2_MIDDLE_3), \ + MOD_ROW(ROW3R)(K36, K37, K38, K39, K3A), \ + MAP_CHUNK(___14_BOTTOM) \ + ) +#define Base_5x14t6( \ + K01, K02, K03, K04, K05, K06, \ + K07, K08, K09, K0A, K0B, K0C, \ + K11, K12, K13, K14, K15, K16, \ + K17, K18, K19, K1A, K1B, K1C, \ + K21, K22, K23, K24, K25, K26, \ + K27, K28, K29, K2A, K2B, K2C, \ + K31, K32, K33, K34, K35, K36, \ + K37, K38, K39, K3A, K3B, K3C) \ + LVARG_5x15( \ + MOD_ROW(ROW0L)(K01, K02, K03, K04, K05, K06), \ + MAP_CHUNK(___2_MIDDLE_T), \ + MOD_ROW(ROW0R)(K07, K08, K09, K0A, K0B, K0C), \ + MOD_ROW(ROW1L)(K11, K12, K13, K14, K15, K16), \ + MAP_CHUNK(___2_MIDDLE_1), \ + MOD_ROW(ROW1R)(K17, K18, K19, K1A, K1B, K1C), \ + MOD_ROW(ROW2L)(K21, K22, K23, K24, K25, K26), \ + MAP_CHUNK(___2_MIDDLE_2), \ + MOD_ROW(ROW2R)(K27, K28, K29, K2A, K2B, K2C), \ + MOD_ROW(ROW3L)(K31, K32, K33, K34, K35, K36), \ + MAP_CHUNK(___2_MIDDLE_3), \ + MOD_ROW(ROW3R)(K37, K38, K39, K3A, K3B, K3C), \ + MAP_CHUNK(___14_BOTTOM) \ + ) + +// 4 rows of 12. 2 columns transparent in the middle. +#define Transient_5x14( \ + K01, K02, K03, K04, K05, \ + K07, K08, K09, K0A, K0B, \ + K11, K12, K13, K14, K15, \ + K17, K18, K19, K1A, K1B, \ + K21, K22, K23, K24, K25, \ + K27, K28, K29, K2A, K2B \ + ) \ + LVARG_5x14( \ + ___14___, \ + ___, K01, K02, K03, K04, K05, \ + ___2___, \ + K07, K08, K09, K0A, K0B, ___, \ + \ + ___, K11, K12, K13, K14, K15, \ + ___2___, \ + K17, K18, K19, K1A, K1B, ___, \ + \ + ___, K21, K22, K23, K24, K25, \ + ___2___, \ + K27, K28, K29, K2A, K2B, ___, \ + MAP_CHUNK(___14_BOTTOM) \ + ) \ + +/********************************************************************/ +/* Ortholinear 4x12 */ +/********************************************************************/ +#define LAYOUT_4x12_base( \ + K01, K02, K03, K04, K05, \ + K06, K07, K08, K09, K0A, \ + K11, K12, K13, K14, K15, \ + K16, K17, K18, K19, K1A, \ + K21, K22, K23, K24, K25, \ + K26, K27, K28, K29, K2A \ + ) \ + LVARG_4x12( \ + MOD_CORE_3x5(K01, K02, K03, K04, K05, \ + K06, K07, K08, K09, K0A, \ + K11, K12, K13, K14, K15, \ + K16, K17, K18, K19, K1A, \ + K21, K22, K23, K24, K25, \ + K26, K27, K28, K29, K2A), \ + ___12_BOTTOM___ \ + ) + +// Just for bepo because it's a 3x6 matrix on each side. +// So 3 pairs of 6 keys, left and right. + +// takes 3 makes 4 rows of 12. +#define LAYOUT_4x12_transient( \ + K01, K02, K03, K04, K05, K06, \ + K07, K08, K09, K0A, K0B, K0C, \ + K11, K12, K13, K14, K15, K16, \ + K17, K18, K19, K1A, K1B, K1C, \ + K21, K22, K23, K24, K25, K26, \ + K27, K28, K29, K2A, K2B, K2C \ + ) \ + LVARG_4x12( \ + K01, K02, K03, K04, K05, K06, \ + K07, K08, K09, K0A, K0B, K0C, \ + K11, K12, K13, K14, K15, K16, \ + K17, K18, K19, K1A, K1B, K1C, \ + K21, K22, K23, K24, K25, K26, \ + K27, K28, K29, K2A, K2B, K2C, \ + ___12_BOTTOM___ \ + ) \ + +/********************************************************************/ +/* CRKBD Corne or any other 3x5/6 with 3 thumbs on each side. */ +/* The Corne has 3x6 matrix on both sides with 6 thumbs total */ +/* This Macro takes 2x3x5 and gives it pinkies, and thumbs. */ +/* Arg chunks are in the middle with the passthrough modifiers as */ +/* needed. Sama Sama apres cette fois. */ +/********************************************************************/ + +#define Base_3x6_3( \ + K01, K02, K03, K04, K05, \ + K06, K07, K08, K09, K0A, \ + K11, K12, K13, K14, K15, \ + K16, K17, K18, K19, K1A, \ + K21, K22, K23, K24, K25, \ + K26, K27, K28, K29, K2A) \ + LAYOUT_VARG( \ + MOD_CORE_3x5(K01, K02, K03, K04, K05, \ + K06, K07, K08, K09, K0A, \ + K11, K12, K13, K14, K15, \ + K16, K17, K18, K19, K1A, \ + K21, K22, K23, K24, K25, \ + K26, K27, K28, K29, K2A), \ + ___6_ERGO_THUMBS___ \ + ) + +#define Base_3x6_3t6( \ + K01, K02, K03, K04, K05, K06, \ + K07, K08, K09, K0A, K0B, K0C, \ + K11, K12, K13, K14, K15, K16, \ + K17, K18, K19, K1A, K1B, K1C, \ + K21, K22, K23, K24, K25, K26, \ + K27, K28, K29, K2A, K2B, K2C) \ + LAYOUT_VARG( \ + MOD_CORE_3x6( \ + K01, K02, K03, K04, K05, K06, \ + K07, K08, K09, K0A, K0B, K0C, \ + K11, K12, K13, K14, K15, K16, \ + K17, K18, K19, K1A, K1B, K1C, \ + K21, K22, K23, K24, K25, K26, \ + K27, K28, K29, K2A, K2B, K2C), \ + ___6_ERGO_THUMBS___ \ + ) + + // All we really need is to add the see through thumbs to the end. +#define Transient_3x6_3( \ + K01, K02, K03, K04, K05, \ + K07, K08, K09, K0A, K0B, \ + K11, K12, K13, K14, K15, \ + K17, K18, K19, K1A, K1B, \ + K21, K22, K23, K24, K25, \ + K27, K28, K29, K2A, K2B \ + ) \ + LAYOUT_VARG( \ + ___, K01, K02, K03, K04, K05, \ + K07, K08, K09, K0A, K0B, ___, \ + ___, K11, K12, K13, K14, K15, \ + K17, K18, K19, K1A, K1B, ___, \ + ___, K21, K22, K23, K24, K25, \ + K27, K28, K29, K2A, K2B, ___, \ + ___6_ERGO_THUMBS___ \ + ) + +//___6_ERGO_THUMBS___ + +/********************************************************************/ +/* Kinesis*/ +/********************************************************************/ +// A 4x6 on each side, with a 4 column fifth row, and 6 thumbs on +// each side. - 4x6_4_6. +// Then a giant row up top, 9 keys on each side, for function keys. +#define Base_4x6_4_6( \ + K01, K02, K03, K04, K05, \ + K06, K07, K08, K09, K0A, \ + K11, K12, K13, K14, K15, \ + K16, K17, K18, K19, K1A, \ + K21, K22, K23, K24, K25, \ + K26, K27, K28, K29, K2A, \ + K31, K32, K33, K34, K35, \ + K36, K37, K38, K39, K3A \ + ) \ + LAYOUT_PVARG( \ + ___KINTFUNC_L___, ___KINTFUNC_R___, \ + MOD_CORE_4x5(K01, K02, K03, K04, K05, \ + K06, K07, K08, K09, K0A, \ + K11, K12, K13, K14, K15, \ + K16, K17, K18, K19, K1A, \ + K21, K22, K23, K24, K25, \ + K26, K27, K28, K29, K2A, \ + K31, K32, K33, K34, K35, \ + K36, K37, K38, K39, K3A), \ + MAP_CHUNK(___4_BOTTOM_LEFT), \ + MAP_CHUNK(___4_BOTTOM_RIGHT), \ + MAP_CHUNK(___12_DOX_ALL_THUMBS) \ + ) + + +#define Base_4x6_4_6t6( \ + K01, K02, K03, K04, K05, K06, \ + K07, K08, K09, K0A, K0B, K0C, \ + K11, K12, K13, K14, K15, K16, \ + K17, K18, K19, K1A, K1B, K1C, \ + K21, K22, K23, K24, K25, K26, \ + K27, K28, K29, K2A, K2B, K2C, \ + K31, K32, K33, K34, K35, K36, \ + K37, K38, K39, K3A, K3B, K3C) \ + LAYOUT_PVARG( \ + MOD_CORE_4x6( \ + K01, K02, K03, K04, K05, K06, \ + K07, K08, K09, K0A, K0B, K0C, \ + K11, K12, K13, K14, K15, K16, \ + K17, K18, K19, K1A, K1B, K1C, \ + K21, K22, K23, K24, K25, K26, \ + K27, K28, K29, K2A, K2B, K2C, \ + K31, K32, K33, K34, K35, K36, \ + K37, K38, K39, K3A, K3B, K3C), \ + MAP_CHUNK(___4_BOTTOM_LEFT), \ + MAP_CHUNK(___4_BOTTOM_RIGHT), \ + MAP_CHUNK(___12_DOX_ALL_THUMBS) \ + ) + +#define Transient_4x6_4_6( \ + K01, K02, K03, K04, K05, \ + K07, K08, K09, K0A, K0B, \ + K11, K12, K13, K14, K15, \ + K17, K18, K19, K1A, K1B, \ + K21, K22, K23, K24, K25, \ + K27, K28, K29, K2A, K2B \ + ) \ + LAYOUT_PVARG( \ + ___12___, ___6___, \ + ___12___, \ + ___, K01, K02, K03, K04, K05, \ + K07, K08, K09, K0A, K0B, ___, \ + ___, K11, K12, K13, K14, K15, \ + K17, K18, K19, K1A, K1B, ___, \ + ___, K21, K22, K23, K24, K25, \ + K27, K28, K29, K2A, K2B, ___, \ + ___4___, ___4___, \ + MAP_CHUNK(___12_DOX_ALL_THUMBS) \ + ) + +/* ___KINTFUNC_L___, ___KINTFUNC_R___, \ */ + +/* This keyboard is a split, 4x6 + a row of 5 and a thumb cluster of 8. */ +/* So We need Base_4x6_5_8 As a layout template to add mods, and fill */ +/* out the perimeter keys of the keyboard. Perimeter keys being the */ +/* number row, outside pinky keys, the 5th row, and thumbs. */ + +/********************************************************************/ +/* Dactyl with 8 thumb keys*/ +/********************************************************************/ +// Basically an ergodox ez without the 3 pairs of middle keys. +// electrically 7 columns in the 5th row. 6 in the rest. +// Left, right, bottom, and thumbs all stay the same. + +#define Base_4x6_5_8( \ + K01, K02, K03, K04, K05, \ + K06, K07, K08, K09, K0A, \ + K11, K12, K13, K14, K15, \ + K16, K17, K18, K19, K1A, \ + K21, K22, K23, K24, K25, \ + K26, K27, K28, K29, K2A, \ + K31, K32, K33, K34, K35, \ + K36, K37, K38, K39, K3A \ + ) \ + LAYOUT_PVARG( \ + MOD_CORE_4x5(K01, K02, K03, K04, K05, \ + K06, K07, K08, K09, K0A, \ + K11, K12, K13, K14, K15, \ + K16, K17, K18, K19, K1A, \ + K21, K22, K23, K24, K25, \ + K26, K27, K28, K29, K2A, \ + K31, K32, K33, K34, K35, \ + K36, K37, K38, K39, K3A \ + ), \ + MAP_CHUNK(___5_BOTTOM_LEFT), MAP_CHUNK(___5_BOTTOM_RIGHT), \ + MAP_CHUNK(___16_ALL_THUMBSa) \ + ) + +#define Base_4x6_5_8t6( \ + K01, K02, K03, K04, K05, K06, \ + K07, K08, K09, K0A, K0B, K0C, \ + K11, K12, K13, K14, K15, K16, \ + K17, K18, K19, K1A, K1B, K1C, \ + K21, K22, K23, K24, K25, K26, \ + K27, K28, K29, K2A, K2B, K2C, \ + K31, K32, K33, K34, K35, K36, \ + K37, K38, K39, K3A, K3B, K3C) \ + LAYOUT_PVARG( \ + MOD_CORE_4x6( \ + K01, K02, K03, K04, K05, K06, \ + K07, K08, K09, K0A, K0B, K0C, \ + K11, K12, K13, K14, K15, K16, \ + K17, K18, K19, K1A, K1B, K1C, \ + K21, K22, K23, K24, K25, K26, \ + K27, K28, K29, K2A, K2B, K2C, \ + K31, K32, K33, K34, K35, K36, \ + K37, K38, K39, K3A, K3B, K3C), \ + MAP_CHUNK(___5_BOTTOM_LEFT), MAP_CHUNK(___5_BOTTOM_RIGHT), \ + MAP_CHUNK(___16_ALL_THUMBSa) \ + ) + + +// so far no need for mods on the transient layers. +// switching to 3x5 transients. 10 column defines. +// I like 3x10 maps even on big keyboards. +# define Transient_4x6_5_8( \ + K01, K02, K03, K04, K05, \ + K06, K07, K08, K09, K0A, \ + K11, K12, K13, K14, K15, \ + K16, K17, K18, K19, K1A, \ + K21, K22, K23, K24, K25, \ + K26, K27, K28, K29, K2A \ + ) \ + LAYOUT_PVARG( \ + ___6___, ___6___, \ + ___, K01, K02, K03, K04, K05, \ + K06, K07, K08, K09, K0A, ___, \ + ___, K11, K12, K13, K14, K15, \ + K16, K17, K18, K19, K1A, ___, \ + ___, K21, K22, K23, K24, K25, \ + K26, K27, K28, K29, K2A, ___, \ + ___5___, ___5___, \ + MAP_CHUNK(___16_ALL_THUMBSa) \ + ) + +/********************************************************************/ +/* Ergodox EZ */ +/********************************************************************/ +// This one is is set up to pass in the number row. +// Beakl and bepo both change the number row. +// Left, middle, right, bottom, and thumbs all stay the same. +#define Base_dox( \ + K01, K02, K03, K04, K05, \ + K06, K07, K08, K09, K0A, \ + K11, K12, K13, K14, K15, \ + K16, K17, K18, K19, K1A, \ + K21, K22, K23, K24, K25, \ + K26, K27, K28, K29, K2A, \ + K31, K32, K33, K34, K35, \ + K36, K37, K38, K39, K3A \ + ) \ + LVARG_edox( \ + MOD_ROW(ROW0L)(K01, K02, K03, K04, K05), \ + MAP_CHUNK(___2_MIDDLE_1), \ + MOD_ROW(ROW0R)(K06, K07, K08, K09, K0A), \ + \ + MOD_ROW(ROW1L)(K11, K12, K13, K14, K15), \ + MAP_CHUNK(___2_MIDDLE_2), \ + MOD_ROW(ROW1R)(K16, K17, K18, K19, K1A), \ + \ + MOD_ROW(ROW2L)(K21, K22, K23, K24, K25), \ + MOD_ROW(ROW2R)(K26, K27, K28, K29, K2A), \ + \ + MOD_ROW(ROW3L)(K31, K32, K33, K34, K35), \ + MAP_CHUNK(___2_MIDDLE_3), \ + MOD_ROW(ROW3R)(K36, K37, K38, K39, K3A), \ + MAP_CHUNK(___5_BOTTOM_LEFT), MAP_CHUNK(___5_BOTTOM_RIGHT), \ + MAP_CHUNK(___12_DOX_ALL_THUMBS) \ + ) + +#define Base_doxt6( \ + K01, K02, K03, K04, K05, K06, \ + K07, K08, K09, K0A, K0B, K0C, \ + K11, K12, K13, K14, K15, K16, \ + K17, K18, K19, K1A, K1B, K1C, \ + K21, K22, K23, K24, K25, K26, \ + K27, K28, K29, K2A, K2B, K2C, \ + K31, K32, K33, K34, K35, K36, \ + K37, K38, K39, K3A, K3B, K3C) \ + LVARG_edox(MOD_ROW(ROW0L)(K01, K02, K03, K04, K05, K06), \ + MAP_CHUNK(___2_MIDDLE_1), \ + MOD_ROW(ROW0R)(K07, K08, K09, K0A, K0B, K0C), \ + MOD_ROW(ROW1L)(K11, K12, K13, K14, K15, K16), \ + MAP_CHUNK(___2_MIDDLE_2), \ + MOD_ROW(ROW1R)(K17, K18, K19, K1A, K1B, K1C), \ + MOD_ROW(ROW2L)(K21, K22, K23, K24, K25, K26), \ + MOD_ROW(ROW2R)(K27, K28, K29, K2A, K2B, K2C), \ + MOD_ROW(ROW3L)(K31, K32, K33, K34, K35, K36), \ + MAP_CHUNK(___2_MIDDLE_3), \ + MOD_ROW(ROW3R)(K37, K38, K39, K3A, K3B, K3C), \ + MAP_CHUNK(___5_BOTTOM_LEFT), \ + MAP_CHUNK(___5_BOTTOM_RIGHT), \ + MAP_CHUNK(___12_DOX_ALL_THUMBS)) + +#define Transient_dox( \ + K01, K02, K03, K04, K05, \ + K07, K08, K09, K0A, K0B, \ + K11, K12, K13, K14, K15, \ + K17, K18, K19, K1A, K1B, \ + K21, K22, K23, K24, K25, \ + K27, K28, K29, K2A, K2B) \ + LVARG_edox( \ + ___14___, \ + ___, K01, K02, K03, K04, K05, \ + ___2___, \ + K07, K08, K09, K0A, K0B, ___, \ + ___, K11, K12, K13, K14, K15, \ + K17, K18, K19, K1A, K1B, ___, \ + ___, K21, K22, K23, K24, K25, \ + ___2___, \ + K27, K28, K29, K2A, K2B, ___, \ + ___5___, ___5___, \ + MAP_CHUNK(___12_DOX_ALL_THUMBS) \ + ) + + +/********************************************************************/ +/* Rebound 4 rows, 1x12, 3x13 */ +/********************************************************************/ +#define LVARG_rebound(...) LAYOUT_all(__VA_ARGS__) +#define Base_rebound( \ + K01, K02, K03, K04, K05, \ + K06, K07, K08, K09, K0A, \ + K11, K12, K13, K14, K15, \ + K16, K17, K18, K19, K1A, \ + K21, K22, K23, K24, K25, \ + K26, K27, K28, K29, K2A \ + ) \ + LVARG_rebound( \ + MOD_ROW(ROW1L)(K01, K02, K03, K04, K05), \ + MOD_ROW(ROW1R)(K06, K07, K08, K09, K0A), \ + \ + MOD_ROW(ROW2L)(K11, K12, K13, K14, K15), \ + KC_CCCV, \ + MOD_ROW(ROW2R)(K16, K17, K18, K19, K1A), \ + \ + MOD_ROW(ROW3L)(K21, K22, K23, K24, K25), \ + MO_ADJUST, \ + MOD_ROW(ROW3R)(K26, K27, K28, K29, K2A), \ + MAP_CHUNK(___13_BOTTOM) \ + ) +#define Base_reboundt6( \ + K01, K02, K03, K04, K05, K06, \ + K07, K08, K09, K0A, K0B, K0C, \ + K11, K12, K13, K14, K15, K16, \ + K17, K18, K19, K1A, K1B, K1C, \ + K21, K22, K23, K24, K25, K26, \ + K27, K28, K29, K2A, K2B, K2C \ + ) \ + LVARG_rebound( \ + MOD_ROW(ROW1L)(K01, K02, K03, K04, K05, K06), \ + MOD_ROW(ROW1R)(K07, K08, K09, K0A, K0B, K0C), \ + MOD_ROW(ROW2L)(K11, K12, K13, K14, K15, K16), \ + KC_CCCV, \ + MOD_ROW(ROW2R)(K17, K18, K19, K1A, K1B, K1C), \ + MOD_ROW(ROW3L)(K21, K22, K23, K24, K25, K26), \ + MO_ADJUST, \ + MOD_ROW(ROW3R)(K27, K28, K29, K2A, K2B, K2C), \ + MAP_CHUNK(___13_BOTTOM) \ + ) + +#define Rebound_transient( \ + K01, K02, K03, K04, K05, \ + K07, K08, K09, K0A, K0B, \ + K11, K12, K13, K14, K15, \ + K17, K18, K19, K1A, K1B, \ + K21, K22, K23, K24, K25, \ + K27, K28, K29, K2A, K2B \ + ) \ + LVARG_rebound( \ + ___, K01, K02, K03, K04, K05, \ + K07, K08, K09, K0A, K0B, ___, \ + ___, K11, K12, K13, K14, K15, \ + ___, \ + K17, K18, K19, K1A, K1B, ___, \ + ___, K21, K22, K23, K24, K25, \ + ___, \ + K27, K28, K29, K2A, K2B, ___, \ + MAP_CHUNK(___13_BOTTOM) \ + ) + +/********************************************************************/ +/* Kyria or any other 3x5/6 with 4 keys in the middle of the last */ +/* Row. Followed by 5 thumb keys on each side. 7 thumb keys total. */ +/********************************************************************/ +#define Base_2x6_8_5( \ + K01, K02, K03, K04, K05, \ + K06, K07, K08, K09, K0A, \ + K11, K12, K13, K14, K15, \ + K16, K17, K18, K19, K1A, \ + K21, K22, K23, K24, K25, \ + K26, K27, K28, K29, K2A) \ + LAYOUT_VARG( \ + MOD_ROW(ROW1L)(K01, K02, K03, K04, K05), \ + MOD_ROW(ROW1R)(K06, K07, K08, K09, K0A), \ + \ + MOD_ROW(ROW2L)(K11, K12, K13, K14, K15), \ + MOD_ROW(ROW2R)(K16, K17, K18, K19, K1A), \ + \ + MOD_ROW(ROW3L)(K21, K22, K23, K24, K25), \ + MAP_CHUNK(___4_THUMBS), \ + MOD_ROW(ROW3R)(K26, K27, K28, K29, K2A), \ + MAP_CHUNK(___10_ERGO_THUMBS) \ + ) + +#define Base_2x6_8_5t6( \ + K01, K02, K03, K04, K05, K06, \ + K07, K08, K09, K0A, K0B, K0C, \ + K11, K12, K13, K14, K15, K16, \ + K17, K18, K19, K1A, K1B, K1C, \ + K21, K22, K23, K24, K25, K26, \ + K27, K28, K29, K2A, K2B, K2C) \ + LAYOUT_VARG( \ + MOD_ROW(ROW1L)(K01, K02, K03, K04, K05, K06), \ + MOD_ROW(ROW1R)(K07, K08, K09, K0A, K0B, K0C), \ + MOD_ROW(ROW2L)(K11, K12, K13, K14, K15, K16), \ + MOD_ROW(ROW2R)(K17, K18, K19, K1A, K1B, K1C), \ + MOD_ROW(ROW3L)(K21, K22, K23, K24, K25, K26), \ + MAP_CHUNK(___4_THUMBS), \ + MOD_ROW(ROW3R)(K27, K28, K29, K2A, K2B, K2C), \ + MAP_CHUNK(___10_ERGO_THUMBS) \ + ) + +// All we really need is to add the see through thumbs to the end. +#define Transient_2x6_8_5( \ + K01, K02, K03, K04, K05, \ + K07, K08, K09, K0A, K0B, \ + K11, K12, K13, K14, K15, \ + K17, K18, K19, K1A, K1B, \ + K21, K22, K23, K24, K25, \ + K27, K28, K29, K2A, K2B \ + ) \ + LAYOUT_VARG( \ + ___, K01, K02, K03, K04, K05, \ + K07, K08, K09, K0A, K0B, ___, \ + ___, K11, K12, K13, K14, K15, \ + K17, K18, K19, K1A, K1B, ___, \ + ___, K21, K22, K23, K24, K25, \ + ___4___, \ + K27, K28, K29, K2A, K2B, ___, \ + MAP_CHUNK(___10_ERGO_THUMBS) \ + ) diff --git a/users/ericgebhart/keymap/keymap.c b/users/ericgebhart/keymap/keymap.c new file mode 100644 index 00000000000..bee8538e262 --- /dev/null +++ b/users/ericgebhart/keymap/keymap.c @@ -0,0 +1,142 @@ +/* + Copyright 2022 Eric Gebhart + + 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 . +*/ + +/* This is my keymap. Enable the layers you want in config.h. */ + +#include QMK_KEYBOARD_H +#include "ericgebhart.h" +#include "layouts.h" + +#include "keyboards.h" + +// set up the wrapper macros. +#define BASE_LAYER(NAME, ...) [NAME] = BASE(__VA_ARGS__) +#define BASE_LAYERt6(NAME, ...) [NAME] = BASEt6(__VA_ARGS__) +#define T_LAYER(LNAME, ...) [LNAME] = TRANS(__VA_ARGS__) + + +// One that takes 5 and one that takes 6 for bepo and other big maps +// that need 3x12 instead of 3x10. +#ifdef BASE_NUMBER_ROW +#define B_LAYER(LNAME, NUMS, LAYOUT) BASE_LAYER(LNAME, NUMS, LAYOUT) +#define B_LAYERt6(LNAME, NUMS, LAYOUT) BASE_LAYERt6(LNAME, NUMS, LAYOUT) +#else +// if there is no number row, don't give it one. +#define B_LAYER(LNAME, NUMS, LAYOUT) BASE_LAYER(LNAME, LAYOUT) +#define B_LAYERt6(LNAME, NUMS, LAYOUT) BASE_LAYERt6(LNAME, LAYOUT) +#endif + +// Find alt local key definitions. +// DV for dvorak/qwerty maps on bepo. +// BK, BKW for beakl maps on en-qwerty and bepo. +// BKW is automatic in map_beakl.h +#define ALT_TARGET_IS NONE // NONE, DV=dvorak, BK=Beakl, BK2, BKW=Beaklwi. + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + // Default lang, Base layers +#include "map_dvorak.h" +#include "map_maks.h" +#include "map_qwerty.h" +#include "map_beakl.h" +#include "map_alt.h" +#include "map_gap.h" +#include "map_carpalx.h" +#include "map_hd.h" +#include "map_bepo.h" + + // create a set of layers for a second locale. +#ifdef SECOND_LOCALE +#undef LANG_IS +#define LANG_IS SECOND_LOCALE + + // changes alt target for us, because both en-qwerty and fr-bepo + // need a beakl alt target. +#include "map_beakl.h" + + // Qwerty based layers. Need a DV alt target to get the right shifted keys. +#undef ALT_TARGET_IS +#define ALT_TARGET_IS DV // NONE, DV = dvorak, BK=Beakl, BKW=Beaklwi. + +#include "map_dvorak.h" +#include "map_maks.h" +#include "map_qwerty.h" +#include "map_alt.h" +#include "map_gap.h" +#include "map_carpalx.h" +#include "map_hd.h" + +#undef ALT_TARGET_IS +#define ALT_TARGET_IS NONE // NONE, DV = dvorak, BK=Beakl, BKW=Beaklwi. + +#include "map_bepo.h" + +#undef LANG_IS +#define LANG_IS DEFAULT_LANG +#endif // bepo + + +// SYMBOL LAYER +#include "map_symbols.h" + +#ifdef SECOND_LOCALE +#undef LANG_IS +#define LANG_IS SECOND_LOCALE + +#include "map_symbols.h" + +#undef LANG_IS +#define LANG_IS DEFAULT_LANG +#endif + + + // KEYPAD LAYER +#include "map_keypads.h" + +#ifdef SECOND_LOCALE +#undef LANG_IS +#define LANG_IS SECOND_LOCALE + +#include "map_keypads.h" + +#undef LANG_IS +#define LANG_IS DEFAULT_LANG +#endif + + +// TOPROWS LAYER +#include "map_toprows.h" + +#include "map_accented.h" + +#ifdef SECOND_LOCALE +#undef LANG_IS +#define LANG_IS SECOND_LOCALE + +#include "map_toprows.h" + +#include "map_accented.h" + +#undef LANG_IS +#define LANG_IS EN +#endif + +// functional non language based layers. +#include "map_funcs.h" + +}; diff --git a/users/ericgebhart/keymap/map_accented.h b/users/ericgebhart/keymap/map_accented.h new file mode 100644 index 00000000000..98ff8a34f1c --- /dev/null +++ b/users/ericgebhart/keymap/map_accented.h @@ -0,0 +1,26 @@ +/* + Copyright 2022 Eric Gebhart + + 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 . +*/ +// Accented character and dead key layers. +#ifdef ACCENTS_LAYER_ENABLE + T_LAYER(LANG_N(_ACCENTS), ___ACCENTS___), +#endif +#ifdef MORTE_LAYER_ENABLE + T_LAYER(LANG_N(_MORTE), ___MORTE___), +#endif +#ifdef ACCENTS_MORTE_LAYER_ENABLE + T_LAYER(LANG_N(_ACCENTS_MORTE), ___ACCENTS_MORTE___), +#endif diff --git a/users/ericgebhart/keymap/map_alt.h b/users/ericgebhart/keymap/map_alt.h new file mode 100644 index 00000000000..5fb0a121358 --- /dev/null +++ b/users/ericgebhart/keymap/map_alt.h @@ -0,0 +1,69 @@ +/* + Copyright 2022 Eric Gebhart + + 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 . +*/ + +#ifdef MALTRON_LAYER_ENABLE +#undef THUMBS_ARE +#define THUMBS_ARE MALTRON_LTR_THUMBS_ARE +#undef THUMB_LETTER +#define THUMB_LETTER LANG_KC(_E) + B_LAYER(LANG_N(_MALTRON), ___10_NUMBERS___, ___MALTRON___), +#undef THUMBS_ARE +#define THUMBS_ARE DEFAULT_THUMBS +#undef THUMB_LETTER +#endif + + + +#ifdef RSTHD_LAYER_ENABLE +#undef THUMBS_ARE +#define THUMBS_ARE RSTHD_LTR_THUMBS_ARE +#undef THUMB_LETTER +#define THUMB_LETTER LANG_KC(_E) + B_LAYER(LANG_N(_RSTHD), ___10_NUMBERS___, ___RSTHD___), +#undef THUMBS_ARE +#define THUMBS_ARE DEFAULT_THUMBS +#undef THUMB_LETTER +#endif + +#ifdef EUCALYN_LAYER_ENABLE + B_LAYER(LANG_N(_EUCALYN), ___10_NUMBERS___, ___EUCALYN___), +#endif + +#ifdef HANDS_UP_LAYER_ENABLE + B_LAYER(LANG_N(_HANDS_UP), ___10_NUMBERS___, ___HANDS_UP___), +#endif +#ifdef WHITE_LAYER_ENABLE + B_LAYER(LANG_N(_WHITE), ___10_NUMBERS___, ___WHITE___), +#endif +#ifdef ISRT_LAYER_ENABLE + B_LAYER(LANG_N(_ISRT), ___10_NUMBERS___, ___ISRT___), +#endif +#ifdef SOUL_LAYER_ENABLE + B_LAYER(LANG_N(_SOUL), ___10_NUMBERS___, ___SOUL___), +#endif +#ifdef NIRO_LAYER_ENABLE + B_LAYER(LANG_N(_NIRO), ___10_NUMBERS___, ___NIRO___), +#endif +#ifdef ASSET_LAYER_ENABLE + B_LAYER(LANG_N(_ASSET), ___10_NUMBERS___, ___ASSET___), +#endif +#ifdef WHORF_LAYER_ENABLE + B_LAYER(LANG_N(_WHORF), ___10_NUMBERS___, ___WHORF___), +#endif +#ifdef WHORF6_LAYER_ENABLE + B_LAYER(LANG_N(_WHORF6), ___10_NUMBERS___, ___WHORF6___), +#endif diff --git a/users/ericgebhart/keymap/map_beakl.h b/users/ericgebhart/keymap/map_beakl.h new file mode 100644 index 00000000000..e477790fbce --- /dev/null +++ b/users/ericgebhart/keymap/map_beakl.h @@ -0,0 +1,48 @@ +/* + Copyright 2022 Eric Gebhart + + 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 . +*/ +// choose your beakl, +#undef ALT_TARGET_IS +#define ALT_TARGET_IS BK // NONE, DV = dvorak, BK=Beakl, BKW=Beaklwi. + +#ifdef BEAKL15_LAYER_ENABLE +B_LAYER(LANG_N(_BEAKL15), ___10_NUMBERS_BEAKL15___, ___BEAKL15___), +#endif + +#ifdef BEAKL19_LAYER_ENABLE + B_LAYER(LANG_N(_BEAKL19), ___10_NUMBERS_BEAKL19___, ___BEAKL19___), +#endif + +#ifdef BEAKL27_LAYER_ENABLE +#undef ALT_TARGET_IS +#define ALT_TARGET_IS BK2 // NONE, DV = dvorak, BK=Beakl, BKW=Beaklwi. + + B_LAYER(LANG_N(_BEAKL27), ___10_NUMBERS_BEAKL19___, ___BEAKL27___), +#endif + +#ifdef BEAKLWI_LAYER_ENABLE +#undef ALT_TARGET_IS +#define ALT_TARGET_IS BKW // NONE, DV = dvorak, BK=Beakl, BKW=Beaklwi. + +#undef THUMBS_ARE // change the default thumbs to WI. +#define THUMBS_ARE WIa + B_LAYER(LANG_N(_BEAKLWI), ___10_NUMBERS_BEAKL19___, ___BEAKLWI___), +#undef THUMBS_ARE +#define THUMBS_ARE DEFAULT_THUMBS +#endif + +#undef ALT_TARGET_IS +#define ALT_TARGET_IS NONE // NONE, DV = dvorak, BK=Beakl, BKW=Beaklwi. diff --git a/users/ericgebhart/keymap/map_bepo.h b/users/ericgebhart/keymap/map_bepo.h new file mode 100644 index 00000000000..8371096053b --- /dev/null +++ b/users/ericgebhart/keymap/map_bepo.h @@ -0,0 +1,40 @@ +/* + Copyright 2022 Eric Gebhart + + 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 . +*/ +// beginning of 3x12 base layers. + +#undef BASE_COLS_IN_OUT +#define BASE_COLS_IN_OUT 6 // 5, 5_6, 6 + +#ifdef BEPO_LAYER_ENABLE + B_LAYERt6(LANG_N(_BEPO), ___12_SYMBOLS_BEPO___, ___BEPO_3x12___), +#endif + +#ifdef OPTIMOT_LAYER_ENABLE + B_LAYERt6(LANG_N(_OPTIMOT), ___12_SYMBOLS_BEPO___, ___OPTIMOT_3x12___), +#endif + +#ifdef OPTIMOT_COMPACT_LAYER_ENABLE + B_LAYER(LANG_N(_OPTIMOT), ___10_SYMBOLS_BEPO___, ___OPTIMOT_3x10___), +#endif + +#ifdef BEAKL19bis_LAYER_ENABLE + B_LAYERt6(LANG_N(_BEAKL19bis), ___12_SYMBOLS_BEPO___, ___BEAKL19bis_3x12___), +#endif + +// end of 3x12 base layers. +#undef BASE_COLS_IN_OUT +#define BASE_COLS_IN_OUT 5_6 // 5, 5_6, 6 diff --git a/users/ericgebhart/keymap/map_carpalx.h b/users/ericgebhart/keymap/map_carpalx.h new file mode 100644 index 00000000000..e36ca1caefa --- /dev/null +++ b/users/ericgebhart/keymap/map_carpalx.h @@ -0,0 +1,25 @@ +/* + Copyright 2022 Eric Gebhart + + 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 . +*/ +#ifdef CARPALX_QFMLWY_LAYER_ENABLE +B_LAYER(LANG_N(_CARPALX_QFMLWY), ___10_NUMBERS___, ___CARPALX_QFMLWY___), +#endif +#ifdef CARPALX_QGMLWB_LAYER_ENABLE + B_LAYER(LANG_N(_CARPALX_QGMLWB), ___10_NUMBERS___, ___CARPALX_QGMLWB___), +#endif +#ifdef CARPALX_QGMLWY_LAYER_ENABLE + B_LAYER(LANG_N(_CARPALX_QGMLWY), ___10_NUMBERS___, ___CARPALX_QGMLWY___), +#endif diff --git a/users/ericgebhart/keymap/map_dvorak.h b/users/ericgebhart/keymap/map_dvorak.h new file mode 100644 index 00000000000..40afe827cc1 --- /dev/null +++ b/users/ericgebhart/keymap/map_dvorak.h @@ -0,0 +1,31 @@ +/* + Copyright 2022 Eric Gebhart + + 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 . +*/ +#ifdef DVORAK_LAYER_ENABLE +B_LAYER(LANG_N(_DVORAK), ___10_NUMBERS___, ___DVORAK___), +#endif +#ifdef DVORAK_RLC_IU_LAYER_ENABLE + B_LAYER(LANG_N(_DVORAK_RLC_IU), ___10_NUMBERS___, ___DVORAK_RLC_IU___), +#endif +#ifdef BOO_LAYER_ENABLE + B_LAYER(LANG_N(_BOO), ___10_NUMBERS___, ___BOO___), +#endif +#ifdef CAPEWELL_DVORAK_LAYER_ENABLE + B_LAYER(LANG_N(_CAPEWELL_DVORAK), ___10_NUMBERS___, ___CAPEWELL_DVORAK___), +#endif +#ifdef AHEI_LAYER_ENABLE + B_LAYER(LANG_N(_AHEI), ___10_NUMBERS___, ___AHEI___), +#endif diff --git a/users/ericgebhart/keymap/map_funcs.h b/users/ericgebhart/keymap/map_funcs.h new file mode 100644 index 00000000000..0bf20610f3d --- /dev/null +++ b/users/ericgebhart/keymap/map_funcs.h @@ -0,0 +1,127 @@ +/* + Copyright 2022 Eric Gebhart + + 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 . +*/ +// navigation. Mouse keys, arrows, home,end, etc. +#ifdef NAV_LAYER_ENABLE +# ifdef MOUSEKEY_ENABLE +# undef THUMBS_ARE +# define THUMBS_ARE MOUSE_LAYER_THUMBS + +# ifdef NAV_FULL_LOCK_MODS +T_LAYER(_NAV, ___NAVA_3x10___), +# endif + +# ifdef NAV_FULL + T_LAYER(_NAV, ___NAV_3x10___), +# endif + +# ifdef NAV_NO_MOUSE + T_LAYER(_NAV, ___NAVnm_3x10___), + T_LAYER(_NAVm, ___NAVm_3x10___), +# endif + +// give a default +# if !defined(NAV_FULL) && \ + !defined(NAV_NO_MOUSE) && \ + !defined(NAV_FULL_LOCK_MODS) \ + + T_LAYER(_NAV, ___NAVA_3x10___), +# endif + +# ifdef MOUSE_LAYER_ENABLE + T_LAYER(_NAVm, ___NAVm_3x10___), +# endif + +# undef THUMBS_ARE +# define THUMBS_ARE DEFAULT_THUMBS + +# else // no mouse enable. + T_LAYER(_NAV, ___NAVnm_3x10___), +# endif // mousekey end. +#endif //nav end. + +#ifdef MEDIA_LAYER_ENABLE +#undef THUMBS_ARE +#define THUMBS_ARE MEDIA_LAYER_THUMBS + T_LAYER(_MEDIA, ___MEDIA_3x10___), +#undef THUMBS_ARE +#define THUMBS_ARE DEFAULT_THUMBS +#endif + +#ifdef FUN_LAYER_ENABLE + +#ifdef FUNCPAD_MIRYOKU_ENABLE + T_LAYER(_FUN, ___FUN_3x10___), +#else + T_LAYER(_FUN, ___FUN_MIRYOKU_3x10___), +#endif + +#endif + +// A layer for layers. to set the default, etc. + T_LAYER(_LAYERS, ___LAYERS_3x10___), + +// control the RGB if there are any. +#ifdef RGB_LAYER_ENABLE + T_LAYER(_RGB, ___RGB_3x10___), +#endif + +// control and adjust stuff. +#ifdef ADJUST_LAYER_ENABLE + T_LAYER(_ADJUST, ___ADJUST_3x10___), +#endif + + +// put the combo reference layers at the end. +#ifdef COMBO_REF_LAYER_ENABLE +#undef LANG_IS +#define LANG_IS COMBO +#undef EDGE_KEY_SET_IS +#define EDGE_KEY_SET_IS REF1 +#undef THUMBS_ARE +#define THUMBS_ARE COMBO +#undef MODS_ARE +#define MODS_ARE TRNS + B_LAYER(_COMBO_REF, ___10_NUMBERS___, ___COMBO_REF___), +#undef LANG_IS +#define LANG_IS DEFAULT_LANG +#undef EDGE_KEY_SET_IS +#define EDGE_KEY_SET_IS DEFAULT_EDGE_SET +#undef THUMBS_ARE +#define THUMBS_ARE DEFAULT_THUMBS +#undef MODS_ARE +#define MODS_ARE DEFAULT_MODS +#endif + +#ifdef COMBO_REF_LAYER_TWO_ENABLE +#undef LANG_IS +#define LANG_IS COMBO2 +#undef EDGE_KEY_SET_IS +#define EDGE_KEY_SET_IS REF2 +#undef THUMBS_ARE +#define THUMBS_ARE COMBO2 +#undef MODS_ARE +#define MODS_ARE TRNS + B_LAYER(_COMBO_REF2, ___10_NUMBERS___, ___COMBO_REF___), +#undef LANG_IS +#define LANG_IS DEFAULT_LANG +#undef EDGE_KEY_SET_IS +#define EDGE_KEY_SET_IS DEFAULT_EDGE_SET +#undef THUMBS_ARE +#define THUMBS_ARE DEFAULT_THUMBS +#undef MODS_ARE +#define MODS_ARE DEFAULT_MODS +#endif diff --git a/users/ericgebhart/keymap/map_gap.h b/users/ericgebhart/keymap/map_gap.h new file mode 100644 index 00000000000..af0855c9835 --- /dev/null +++ b/users/ericgebhart/keymap/map_gap.h @@ -0,0 +1,31 @@ +/* + Copyright 2022 Eric Gebhart + + 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 . +*/ +#ifdef MTGAP_LAYER_ENABLE +B_LAYER(LANG_N(_MTGAP), ___10_NUMBERS___, ___MTGAP___), +#endif + +#ifdef CTGAP_LAYER_ENABLE + B_LAYER(LANG_N(_CTGAP), ___10_NUMBERS___, ___CTGAP___), +#endif + +#ifdef APT_LAYER_ENABLE + B_LAYER(LANG_N(_APT), ___10_NUMBERS___, ___APT___), +#endif + +#ifdef CANARY_LAYER_ENABLE + B_LAYER(LANG_N(_CANARY), ___10_NUMBERS___, ___CANARY___), +#endif diff --git a/users/ericgebhart/keymap/map_hd.h b/users/ericgebhart/keymap/map_hd.h new file mode 100644 index 00000000000..1123e880749 --- /dev/null +++ b/users/ericgebhart/keymap/map_hd.h @@ -0,0 +1,117 @@ +/* + Copyright 2022 Eric Gebhart + + 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 . +*/ +#undef ALT_TARGET_IS +#define ALT_TARGET_IS HD +// NONE, DV = dvorak, BK=Beakl, BKW=Beaklwi, HD=Hands down. +// HD_ELAN, + +#ifdef HD_NEU_LAYER_ENABLE +B_LAYERt6(LANG_N(_HD_NEU), ___12_NUMBERS___, ___HD_NEU___), +#endif + +#ifdef HD_NEU_NARROW_LAYER_ENABLE + B_LAYER(LANG_N(_HD_NEU_NARROW), ___10_NUMBERS___, ___HD_NEU_NARROW___), +#endif + +#ifdef HD_REF_LAYER_ENABLE + B_LAYER(LANG_N(_HD_REF), ___10_NUMBERS___, ___HD_REF___), +#endif + +#ifdef HD_TITANIUM_LAYER_ENABLE +#undef THUMBS_ARE +#define THUMBS_ARE HANDS_DOWN_LTR_THUMBS_ARE +#undef THUMB_LETTER +#define THUMB_LETTER LANG_KC(_R) + B_LAYER(LANG_N(_HD_TITANIUM), ___10_NUMBERS___, ___HD_TITANIUM___), +#undef THUMBS_ARE +#define THUMBS_ARE DEFAULT_THUMBS +#undef THUMB_LETTER +#endif + +#ifdef HD_GOLD_LAYER_ENABLE +#undef THUMBS_ARE +#define THUMBS_ARE HANDS_DOWN_LTR_THUMBS_ARE +#undef THUMB_LETTER +#define THUMB_LETTER LANG_KC(_T) + B_LAYER(LANG_N(_HD_GOLD), ___10_NUMBERS___, ___HD_GOLD___), +#undef THUMBS_ARE +#define THUMBS_ARE DEFAULT_THUMBS +#undef THUMB_LETTER +#endif + +#ifdef HD_PLATINUM_LAYER_ENABLE +#undef THUMBS_ARE +#define THUMBS_ARE HANDS_DOWN_LTR_THUMBS_ARE +#undef THUMB_LETTER +#define THUMB_LETTER LANG_KC(_L) + B_LAYER(LANG_N(_HD_PLATINUM), ___10_NUMBERS___, ___HD_PLATINUM___), +#undef THUMBS_ARE +#define THUMBS_ARE DEFAULT_THUMBS +#undef THUMB_LETTER +#endif + +#ifdef HD_SILVER_LAYER_ENABLE +#undef THUMBS_ARE +#define THUMBS_ARE HANDS_DOWN_LTR_THUMBS_ARE +#undef THUMB_LETTER +#define THUMB_LETTER LANG_KC(_N) + B_LAYER(LANG_N(_HD_SILVER), ___10_NUMBERS___, ___HD_SILVER___), +#undef THUMBS_ARE +#define THUMBS_ARE DEFAULT_THUMBS +#undef THUMB_LETTER +#endif + +#ifdef HD_BRONZE_LAYER_ENABLE +#undef THUMBS_ARE +#define THUMBS_ARE HANDS_DOWN_LTR_THUMBS_ARE +#undef THUMB_LETTER +#define THUMB_LETTER LANG_KC(_H) + B_LAYER(LANG_N(_HD_BRONZE), ___10_NUMBERS___, ___HD_BRONZE___), +#undef THUMBS_ARE +#define THUMBS_ARE DEFAULT_THUMBS +#undef THUMB_LETTER +#endif + +#ifdef HD_ELAN_LAYER_ENABLE +#undef THUMBS_ARE +#define THUMBS_ARE HANDS_DOWN_LTR_THUMBS_ARE +#undef THUMB_LETTER +#define THUMB_LETTER LANG_KC(TL_DOT) +#undef ALT_TARGET_IS +#define ALT_TARGET_IS HD_ELAN + B_LAYER(LANG_N(_HD_ELAN), ___10_NUMBERS___, ___HD_ELAN___), +#undef THUMBS_ARE +#define THUMBS_ARE DEFAULT_THUMBS +#undef ALT_TARGET_IS +#define ALT_TARGET_IS NONE +#undef THUMB_LETTER +#endif + +#ifdef HD_DASH_LAYER_ENABLE +#undef ALT_TARGET_IS +#define ALT_TARGET_IS HD_DASH +#undef THUMBS_ARE +#define THUMBS_ARE HD_DASH +#undef THUMB_LETTER +#define THUMB_LETTER LANG_KC(_E) + B_LAYER(LANG_N(_HD_DASH), ___10_NUMBERS___, ___HD_DASH___), +#undef THUMBS_ARE +#define THUMBS_ARE DEFAULT_THUMBS +#undef ALT_TARGET_IS +#define ALT_TARGET_IS NONE +#undef THUMB_LETTER +#endif diff --git a/users/ericgebhart/keymap/map_keypads.h b/users/ericgebhart/keymap/map_keypads.h new file mode 100644 index 00000000000..7b76731b834 --- /dev/null +++ b/users/ericgebhart/keymap/map_keypads.h @@ -0,0 +1,66 @@ +/* + Copyright 2022 Eric Gebhart + + 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 . +*/ +#ifdef KEYPAD_LAYER_ENABLE +# undef THUMBS_ARE +# define THUMBS_ARE KEYPAD_LAYER_THUMBS + +# ifdef KEYPAD_BEAKL +# ifdef KEYPAD_BEAKL_WI +T_LAYER(LANG_N(_KEYPAD), ___KP_BKL_WI_3x10___), +# else +# ifdef KEYPAD_MODS + T_LAYER(LANG_N(_KEYPAD), ___KP_BKL_MODS_3x10___), +# else + T_LAYER(LANG_N(_KEYPAD), ___KP_BKL_FUNC_3x10___), +# endif +# endif + +# else //not beakl + +# ifdef KEYPAD_MIRYOKU + T_LAYER(LANG_N(_KEYPAD), ___KP_MIRYOKU_3x10___), +# else + +# ifdef KEYPAD_RIGHT +# ifdef KEYPAD_MODS + T_LAYER(LANG_N(_KEYPAD), ___MODS_KP_3x10___), +# else + T_LAYER(LANG_N(_KEYPAD), ___FP_KP_3x10___), +# endif + +# else // kp Left +# ifdef KEYPAD_MODS + T_LAYER(LANG_N(_KEYPAD), ___KP_MODS_3x10___), +# else + T_LAYER(LANG_N(_KEYPAD), ___KP_FP_3x10___), +# endif +# endif +# endif + +# endif // not beakl + +#undef THUMBS_ARE +#define THUMBS_ARE DEFAULT_THUMBS +#endif + +#ifdef FUNC_LAYER_ENABLE +# ifdef FUNCPAD_MIRYOKU + T_LAYER(_FUN, ___FP_MIRYOKU_3x10___), +# else + T_LAYER(_FUN, ___FUN_3x10___), +# endif +#endif diff --git a/users/ericgebhart/keymap/map_maks.h b/users/ericgebhart/keymap/map_maks.h new file mode 100644 index 00000000000..3290b2b7729 --- /dev/null +++ b/users/ericgebhart/keymap/map_maks.h @@ -0,0 +1,34 @@ +/* + Copyright 2022 Eric Gebhart + + 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 . +*/ +#ifdef COLEMAK_LAYER_ENABLE +B_LAYER(LANG_N(_COLEMAK), ___10_NUMBERS___, ___COLEMAK___), +#endif +#ifdef COLEMAK_DH_LAYER_ENABLE + B_LAYER(LANG_N(_COLEMAK_DH), ___10_NUMBERS___, ___COLEMAK_DH___), +#endif +#ifdef HALMAK_LAYER_ENABLE + B_LAYER(LANG_N(_HALMAK), ___10_NUMBERS___, ___HALMAK___), +#endif +#ifdef MINIMAK_LAYER_ENABLE + B_LAYER(LANG_N(_MINIMAK), ___10_NUMBERS___, ___MINIMAK___), +#endif +#ifdef MINIMAK_8_LAYER_ENABLE + B_LAYER(LANG_N(_MINIMAK_8), ___10_NUMBERS___, ___MINIMAK___), +#endif +#ifdef MINIMAK_12_LAYER_ENABLE + B_LAYER(LANG_N(_MINIMAK_12), ___10_NUMBERS___, ___MINIMAK___), +#endif diff --git a/users/ericgebhart/keymap/map_qwerty.h b/users/ericgebhart/keymap/map_qwerty.h new file mode 100644 index 00000000000..db74bdeb39e --- /dev/null +++ b/users/ericgebhart/keymap/map_qwerty.h @@ -0,0 +1,25 @@ +/* + Copyright 2022 Eric Gebhart + + 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 . +*/ +#ifdef QWERTY_LAYER_ENABLE +B_LAYER(LANG_N(_QWERTY), ___10_NUMBERS___, ___QWERTY___), +#endif +#ifdef NORMAN_LAYER_ENABLE + B_LAYER(LANG_N(_NORMAN), ___10_NUMBERS___, ___NORMAN___), +#endif +#ifdef WORKMAN_LAYER_ENABLE + B_LAYER(LANG_N(_WORKMAN), ___10_NUMBERS___, ___WORKMAN___), +#endif diff --git a/users/ericgebhart/keymap/map_symbols.h b/users/ericgebhart/keymap/map_symbols.h new file mode 100644 index 00000000000..7908e95262b --- /dev/null +++ b/users/ericgebhart/keymap/map_symbols.h @@ -0,0 +1,56 @@ +/* + Copyright 2022 Eric Gebhart + + 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 . +*/ +#ifdef SYMBOL_LAYER_ENABLE +# undef THUMBS_ARE +# define THUMBS_ARE SYMB_LAYER_THUMBS + +# ifdef SYMBOL_BEAKL_C +T_LAYER(LANG_N(_SYMB), ___SYMB_BEAKLC_3x10___), +# else + +# ifdef SYMBOL_BEAKL_EXT_VI + T_LAYER(LANG_N(_SYMB), ___SYMB_BEAKLB_3x10___), +# else + +# ifdef SYMBOL_BEAKL_EXT + T_LAYER(LANG_N(_SYMB ), ___SYMB_BEAKLA_3x10___), +# else + +# ifdef SYMBOL_BEAKL_WI + T_LAYER(LANG_N(_SYMB), ___SYMB_BEAKLWI_3x10___), +# else + +# ifdef SYMBOL_MIRYOKU + T_LAYER(LANG_N(_SYMB), ___SYMB_MIRYOKU_3x10___), +# else + +# ifdef SYMBOL_NEO + T_LAYER(LANG_N(_SYMB), ___SYMB_NEO_3x10___), +# else + +// basic beakl, the default if nothing chosen. + T_LAYER(LANG_N(_SYMB), ___SYMB_BEAKL_3x10___), + +# endif //neo +# endif //miryoku +# endif //beakl wi +# endif //beakl ext +# endif //beakl ext vi +# endif //beaklc +# undef THUMBS_ARE +# define THUMBS_ARE DEFAULT_THUMBS +#endif diff --git a/users/ericgebhart/keymap/map_toprows.h b/users/ericgebhart/keymap/map_toprows.h new file mode 100644 index 00000000000..893541e8a0c --- /dev/null +++ b/users/ericgebhart/keymap/map_toprows.h @@ -0,0 +1,45 @@ +/* + Copyright 2022 Eric Gebhart + + 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 . +*/ +// Top Rows commonly called Raise +#ifdef TOPROWS_LAYER_ENABLE + +# undef THUMBS_ARE +# define THUMBS_ARE TOPROWS_LAYER_THUMBS + +# ifdef TOPROWS_BKL_15_NUMS +T_LAYER(LANG_N(_TOPROWS), ___TOPROWS_3x10___), +# endif + +# ifdef TOPROWS_BKL_19_NUMS + T_LAYER(LANG_N(_TOPROWS), ___TOPROWS_BKL19_3x10___), +# endif + +# ifdef TOPROWS_MOD + T_LAYER(LANG_N(_TOPROWS), ___TOPROWS_MOD_3x10___), +# endif + +// Not beakl numbers. Give a basic en-qwerty toprows layer. +#if !defined(TOPROWS_BKL_15_NUMS) && \ + !defined(TOPROWS_BKL_19_NUMS) && \ + !defined(TOPROWS_MOD) + + T_LAYER(LANG_N(_TOPROWS), ___RAISE_3x10___), +#endif + +# undef THUMBS_ARE +# define THUMBS_ARE DEFAULT_THUMBS +#endif // toprows. diff --git a/users/ericgebhart/lang/lang.h b/users/ericgebhart/lang/lang.h new file mode 100644 index 00000000000..32172a935e5 --- /dev/null +++ b/users/ericgebhart/lang/lang.h @@ -0,0 +1,106 @@ +#pragma once +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ +// Language macros to change the names of things to +// match the value of LANG_IS, and EDGE_COLS. +// it would be nice to have consistency, but there isn't. +// Keys need a prefix, layer chunks need a different suffix, +// defines that are are opposite, of keys. +// +// In order to change layer and other names to match lang. +// foo --> foo_bp or foo. + +// A new language just needs entries to match so +// that it will create the proper names when LANG_IS +// set to the appropriate values. +// sonly the pfx and sfx functions need additions for +// another language. +// The rest is making sure there are keymap chunks +// defined as needed. +#define COMMA , + +#define CONCATENATE(a, ...) a ## __VA_ARGS__ +#define CAT(a, ...) CONCATENATE(a, __VA_ARGS__) + +// We need another one with a different name. +// The macros are painted blue otherwise. +// Cat gets used at a low level, around keys, or layers basically. +// Cat 2 is used for thumb cluster choices, any of which can contain +// a number of CATS down at the bottom. -- nested macros of the same +// name get painted blue. So here we are. :-). look in edge_keys.h +// for THUMBS +#define CONCATENATE2(a, ...) a ## __VA_ARGS__ +#define CAT2(a, ...) CONCATENATE2(a, __VA_ARGS__) + +#define CONCATENATE3(a, ...) a ## __VA_ARGS__ +#define CAT3(a, ...) CONCATENATE3(a, __VA_ARGS__) + + +#define EMPTY() +#define DEFER(id) id EMPTY() +#define OBSTRUCT(...) __VA_ARGS__ DEFER(EMPTY)() +#define EXPAND(...) __VA_ARGS__ + +// Give the right keycode prefix by LANG_IS +#define LANG_PFX CAT(LANG_IS, KC) +#define COMBOKC CB +#define COMBO2KC CB2 +#define BEPOKC BP +#define ENKC KC +#define US_INTKC US + +// Give the right symbol suffix by LANG_IS +#define LANG_SFX CAT(CAT(LANG_IS, _), SFX) +#define LOCALE_LAYERS_SFX _LL // for counting the base layers. +#define COMBO_SFX _CB +#define COMBO2_SFX _CB2 +#define BEPO_SFX _BP +#define EN_SFX _EN +#define US_INT_SFX _EN + +// Give the right map chunk suffix by LANG_IS +#define LANG_MAPSFX CAT(CAT(LANG_IS, _), MAPSFX) +#define COMBO_MAPSFX _CB___ +#define COMBO2_MAPSFX _CB2___ +#define BEPO_MAPSFX _BP___ +#define EN_MAPSFX _EN___ +#define US_INT_MAPSFX _EN___ + +// These use the mapping above to get their job done. + +// In order to create keycode names to match lang. +// A --> BP_A or KC_A,US_A +#define LANG_KC(NAME) CAT(LANG_PFX, NAME) + +// _SYMB -> _SYMB_EN +// _SYMB -> _SYMB_BP +#define LANG_N(NAME) CAT(NAME, LANG_SFX) + +// In order to map chunk names to match lang. +// MAP_CHUNK(___15_BOTTOM) --> ___15_BOTTOM_EN___ or ___15_BOTTOM_BP___ +#define MAP_CHUNK(NAME) CAT3(NAME, LANG_MAPSFX) + + +// for the oled layer map switch +#ifdef SECOND_LOCALE +#define LCASE(NAME) \ + case CAT2(NAME, _EN): \ + case CAT2(NAME, _BP): +#else +#define LCASE(NAME) \ + case CAT2(NAME, _EN): +#endif diff --git a/users/ericgebhart/lang/lang_map.h b/users/ericgebhart/lang/lang_map.h new file mode 100644 index 00000000000..16226f64fd5 --- /dev/null +++ b/users/ericgebhart/lang/lang_map.h @@ -0,0 +1,78 @@ +#pragma once +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ +#define CONCATENATEKC(a, ...) a ## __VA_ARGS__ +#define CATKC(a, ...) CONCATENATEKC(a, __VA_ARGS__) +#define LKC(NAME) CATKC(LANG_PFX, NAME) + +// NONE, DV = dvorak, BK=Beakl, BK2=Beakl27, BKW=Beaklwi. +// Give the right keycode prefix by Alt target _IS +#define ALT_TARGET_IS NONE +#define TARGET_PFX CATKC(ALT_TARGET_IS, KC) +#define NONEKC +#define DVKC _DV +#define BKKC _BK +#define BKWKC _BKW +#define BK2KC _BK2 +#define HDKC _HD +#define HD_ELANKC _HD_E +#define HD_DASHKC _HD_D + +#define CONCATENATETKC(a, ...) a ## __VA_ARGS__ +#define CATTKC(a, ...) CONCATENATETKC(a, __VA_ARGS__) + +// depending on the value of ALT_TARGET_IS and LANG_IS. +// TL_COMM -> TLKC(_COMM) +// TLKC(_COMM) -> _BK_COMM, _DV_COMM, _BK2_COMM, _BK_COMM, _HD_COMM... +#define TLKC(NAME) CATTKC(TARGET_PFX, NAME) + +#define LANG_ROW(K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A) \ + LKC(K01), LKC(K02), LKC(K03), LKC(K04), LKC(K05), \ + LKC(K06), LKC(K07), LKC(K08), LKC(K09), LKC(K0A) \ + +#define LANG_ROW12(K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C) \ + LKC(K01), LKC(K02), LKC(K03), LKC(K04), LKC(K05), LKC(K06), \ + LKC(K07), LKC(K08), LKC(K09), LKC(K0A), LKC(K0B), LKC(K0C) \ + +// takes a 3x10 +#define LANG_MAP(K01, K02, K03, K04, K05, \ + K06, K07, K08, K09, K0A, \ + K11, K12, K13, K14, K15, \ + K16, K17, K18, K19, K1A, \ + K21, K22, K23, K24, K25, \ + K26, K27, K28, K29, K2A) \ + LKC(K01), LKC(K02), LKC(K03), LKC(K04), LKC(K05), \ + LKC(K06), LKC(K07), LKC(K08), LKC(K09), LKC(K0A), \ + LKC(K11), LKC(K12), LKC(K13), LKC(K14), LKC(K15), \ + LKC(K16), LKC(K17), LKC(K18), LKC(K19), LKC(K1A), \ + LKC(K21), LKC(K22), LKC(K23), LKC(K24), LKC(K25), \ + LKC(K26), LKC(K27), LKC(K28), LKC(K29), LKC(K2A) + + +// takes a 3x12 +#define LANG_MAP6(K01, K02, K03, K04, K05, K06, \ + K07, K08, K09, K0A, K0B, K0C, \ + K11, K12, K13, K14, K15, K16, \ + K17, K18, K19, K1A, K1B, K1C, \ + K21, K22, K23, K24, K25, K26, \ + K27, K28, K29, K2A, K2B, K2C) \ + LKC(K01), LKC(K02), LKC(K03), LKC(K04), LKC(K05), LKC(K06), \ + LKC(K07), LKC(K08), LKC(K09), LKC(K0A), LKC(K0B), LKC(K0C), \ + LKC(K11), LKC(K12), LKC(K13), LKC(K14), LKC(K15), LKC(K16), \ + LKC(K18), LKC(K18), LKC(K19), LKC(K1A), LKC(K1B), LKC(K1C), \ + LKC(K21), LKC(K22), LKC(K23), LKC(K24), LKC(K25), LKC(K26), \ + LKC(K27), LKC(K28), LKC(K29), LKC(K2A), LKC(K2B), LKC(K2C) diff --git a/users/ericgebhart/lang/locale_layers.h b/users/ericgebhart/lang/locale_layers.h new file mode 100644 index 00000000000..103c1c4ed90 --- /dev/null +++ b/users/ericgebhart/lang/locale_layers.h @@ -0,0 +1,27 @@ +#pragma once +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ +#define LOCALE_DEFAULT CAT(LOCALE_, DEFAULT_LANG) +#define LOCALE_TWO CAT(LOCALE_, SECOND_LOCALE) + +enum locales { + LOCALE_DEFAULT = 0, +#ifdef SECOND_LOCALE + LOCALE_TWO, +#endif + LOCALES_END, +}; diff --git a/users/ericgebhart/lang/locales.c b/users/ericgebhart/lang/locales.c new file mode 100644 index 00000000000..560dec13b77 --- /dev/null +++ b/users/ericgebhart/lang/locales.c @@ -0,0 +1,60 @@ +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ +#include "ericgebhart.h" +#include "locales.h" + +bool process_locales(uint16_t keycode, keyrecord_t *record) { + + switch (keycode) { + case KC_SET_BASE: + // set the current default base to eeprom. + if (record->event.pressed) { + set_single_persistent_default_layer(get_highest_layer(default_layer_state)); + } + break; + + // choose a different set of default layers based on locales. + case KC_NEXT_LOCALE: + // choose another locale and set the default base to the first layer. + if (!record->event.pressed) { + if (current_locale + 1 < LOCALES_END){ + current_locale++; + }else{ + current_locale = 0; + } + default_layer_set(1UL << LOCALE_LAYER_RANGE[0]); + } + return false; + break; + + // choose a different base layer based on locales. + // simply iterates over the list and sets the default layer. + case KC_NEXT_BASE_LAYER: + if (!record->event.pressed) { + uint8_t current = get_highest_layer(default_layer_state); + if (current < LOCALE_LAYER_RANGE[1]){ + current++; + }else{ + current = LOCALE_LAYER_RANGE[0]; + } + default_layer_set(1UL << current); + } + return false; + break; + } + return true; +} diff --git a/users/ericgebhart/lang/locales.h b/users/ericgebhart/lang/locales.h new file mode 100644 index 00000000000..e38f5aeb72b --- /dev/null +++ b/users/ericgebhart/lang/locales.h @@ -0,0 +1,42 @@ +#pragma once +/* + Copyright 2022 Eric Gebhart + + 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 . +*/ + +#include "ericgebhart.h" + +// Stuff we need for locale and layer switching +// there can be more but we need to know where they start and end. +// remember there's limitations on layers. +// Our locales. so it's easy to switch between them. + + +const uint16_t base_layer_count = BASE_NAME_COUNT - 1; + +const uint16_t locale_layers[][2] = { + [LOCALE_DEFAULT] = {0, base_layer_count}, +#ifdef SECOND_LOCALE + [LOCALE_TWO] = {BASE_NAME_COUNT, BASE_NAME_COUNT + base_layer_count}, +#endif +}; + +uint32_t current_locale = LOCALE_DEFAULT; +#define LOCALE_LAYER_RANGE locale_layers[current_locale] + +bool process_locales(uint16_t keycode, keyrecord_t *record); + +#define PROCESS_LOCALES \ + if (!process_locales(keycode, record)) { return false; } diff --git a/users/ericgebhart/layer_names/base_names.h b/users/ericgebhart/layer_names/base_names.h new file mode 100644 index 00000000000..1fef1efed05 --- /dev/null +++ b/users/ericgebhart/layer_names/base_names.h @@ -0,0 +1,173 @@ +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ +#ifdef DVORAK_LAYER_ENABLE + LANG_N(_DVORAK), +#endif +#ifdef DVORAK_RLC_IU_LAYER_ENABLE + LANG_N(_DVORAK_RLC_IU_), +#endif +#ifdef BOO_LAYER_ENABLE + LANG_N(_BOO), +#endif +#ifdef CAPEWELL_DVORAK_LAYER_ENABLE + LANG_N(_CAPEWELL_DVORAK), +#endif +#ifdef AHEI_LAYER_ENABLE + LANG_N(_AHEI), +#endif + + +#ifdef QWERTY_LAYER_ENABLE + LANG_N(_QWERTY), +#endif +#ifdef WORKMAN_LAYER_ENABLE + LANG_N(_WORKMAN), +#endif +#ifdef NORMAN_LAYER_ENABLE + LANG_N(_NORMAN), +#endif + + +#ifdef COLEMAK_LAYER_ENABLE + LANG_N(_COLEMAK), +#endif +#ifdef COLEMAK_DH_LAYER_ENABLE + LANG_N(_COLEMAK_DH), +#endif +#ifdef HALMAK_LAYER_ENABLE + LANG_N(_COLEMAK), +#endif +#ifdef MINIMAK_LAYER_ENABLE + LANG_N(_MINIMAK), +#endif +#ifdef MINIMAK_8_LAYER_ENABLE + LANG_N(_MINIMAK_8), +#endif +#ifdef MINIMAK_12_LAYER_ENABLE + LANG_N(_MINIMAK_12), +#endif + + +#ifdef BEAKL15_LAYER_ENABLE + LANG_N(_BEAKL15), +#endif +#ifdef BEAKL19_LAYER_ENABLE + LANG_N(_BEAKL19), +#endif +#ifdef BEAKL27_LAYER_ENABLE + LANG_N(_BEAKL27), +#endif +#ifdef BEAKLWI_LAYER_ENABLE + LANG_N(_BEAKLWI), +#endif + +#ifdef MALTRON_LAYER_ENABLE + LANG_N(_MALTRON), +#endif +#ifdef EUCALYN_LAYER_ENABLE + LANG_N(_EUCALYN), +#endif +#ifdef RSTHD_LAYER_ENABLE + LANG_N(_RSTHD), +#endif +#ifdef HANDS_UP_LAYER_ENABLE + LANG_N(_HANDS_UP), +#endif +#ifdef WHITE_LAYER_ENABLE + LANG_N(_WHITE), +#endif +#ifdef ISRT_LAYER_ENABLE + LANG_N(_ISRT), +#endif +#ifdef SOUL_LAYER_ENABLE + LANG_N(_SOUL), +#endif +#ifdef NIRO_LAYER_ENABLE + LANG_N(_NIRO), +#endif +#ifdef ASSET_LAYER_ENABLE + LANG_N(_ASSET), +#endif +#ifdef WHORF_LAYER_ENABLE + LANG_N(_WHORF), +#endif +#ifdef WHORF6_LAYER_ENABLE + LANG_N(_WHORF6), +#endif + +#ifdef CARPALX_QFMLWY_LAYER_ENABLE + LANG_N(_CARPALX_QFMLWY), +#endif +#ifdef CARPALX_QGMLWB_LAYER_ENABLE + LANG_N(_CARPALX_QGMLWB), +#endif +#ifdef CARPALX_QGMLWY_LAYER_ENABLE + LANG_N(_CARPALX_QGMLWY), +#endif + + +#ifdef MTGAP_LAYER_ENABLE + LANG_N(_MTGAP), +#endif +#ifdef CTGAP_LAYER_ENABLE + LANG_N(_CTGAP), +#endif +#ifdef APT_LAYER_ENABLE + LANG_N(_APT), +#endif +#ifdef CANARY_LAYER_ENABLE + LANG_N(_CANARY), +#endif + + +#ifdef HD_NEU_LAYER_ENABLE + LANG_N(_HD_NEU), +#endif +#ifdef HD_NEU_NARROW_LAYER_ENABLE + LANG_N(_HD_NEU_NARROW), +#endif +#ifdef HD_GOLD_LAYER_ENABLE + LANG_N(_HD_GOLD), +#endif +#ifdef HD_PLATINUM_LAYER_ENABLE + LANG_N(_HD_PLATINUM), +#endif +#ifdef HD_SILVER_LAYER_ENABLE + LANG_N(_HD_SILVER), +#endif +#ifdef HD_BRONZE_LAYER_ENABLE + LANG_N(_HD_BRONZE), +#endif +#ifdef HD_ELAN_LAYER_ENABLE + LANG_N(_HD_ELAN), +#endif +#ifdef HD_DASH_LAYER_ENABLE + LANG_N(_HD_DASH), +#endif +#ifdef HD_REF_LAYER_ENABLE + LANG_N(_HD_REF), +#endif + +#ifdef BEPO_LAYER_ENABLE + LANG_N(_BEPO), +#endif +#ifdef OPTIMOT_LAYER_ENABLE + LANG_N(_OPTIMOT), +#endif +#ifdef BEAKL19bis_LAYER_ENABLE + LANG_N(_BEAKL19bis), +#endif diff --git a/users/ericgebhart/layer_names/func_names.h b/users/ericgebhart/layer_names/func_names.h new file mode 100644 index 00000000000..e1b061a1456 --- /dev/null +++ b/users/ericgebhart/layer_names/func_names.h @@ -0,0 +1,38 @@ +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ + +// functional layers that would be different by language + +#ifdef ACCENTS_LAYER_ENABLE +LANG_N(_ACCENTS), +#endif +#ifdef MORTE_LAYER_ENABLE + LANG_N(_MORTE), +#endif +#ifdef ACCENTS_MORTE_LAYER_ENABLE + LANG_N(_ACCENTS_MORTE), +#endif + +#ifdef SYMBOL_LAYER_ENABLE + LANG_N(_SYMB), +#endif +#ifdef KEYPAD_LAYER_ENABLE + LANG_N(_KEYPAD), +#endif +#ifdef TOPROWS_LAYER_ENABLE + LANG_N(_TOPROWS), +#endif diff --git a/users/ericgebhart/layer_names/layer_names.h b/users/ericgebhart/layer_names/layer_names.h new file mode 100644 index 00000000000..69d9d50d32a --- /dev/null +++ b/users/ericgebhart/layer_names/layer_names.h @@ -0,0 +1,75 @@ +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ +#include QMK_KEYBOARD_H +#include "base_layers.h" +#include "layouts.h" +#include "layers.h" +#if defined(OLED_CUSTOM_ENABLE) +# include "oled_stuff.h" +#endif + +#define MO_LAYERS MO(_LAYERS) + +#undef LANG_IS +#define LANG_IS LOCALE_LAYERS + +enum base_layer_names{ +#include "base_names.h" + BASE_NAME_COUNT +}; +#undef LANG_IS +#define LANG_IS DEFAULT_LANG + + +// Get the enums for the layers. +enum userspace_layers { + +#include "base_names.h" + + // get them again if we have another locale. +#ifdef SECOND_LOCALE +#undef LANG_IS +#define LANG_IS SECOND_LOCALE + +#include "base_names.h" + +#undef LANG_IS +#define LANG_IS DEFAULT_LANG +#endif + + _LAYERS, + +#include "func_names.h" + + // get them again if we have another locale. +#ifdef SECOND_LOCALE +#undef LANG_IS +#define LANG_IS SECOND_LOCALE + +#include "func_names.h" + +#undef LANG_IS +#define LANG_IS DEFAULT_LANG +#endif + +#include "util_names.h" + +}; + + +// find the beginning and end of each locale. +#include "locale_layers.h" diff --git a/users/ericgebhart/layer_names/util_names.h b/users/ericgebhart/layer_names/util_names.h new file mode 100644 index 00000000000..55597385fe4 --- /dev/null +++ b/users/ericgebhart/layer_names/util_names.h @@ -0,0 +1,59 @@ +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ + +// transient layers which are language agnostic. + + +#ifdef NAV_LAYER_ENABLE + _NAV, +#ifdef MOUSEKEY_ENABLE + _NAVm, +#endif +#endif + +#ifdef MEDIA_LAYER_ENABLE + _MEDIA, +#endif + +#ifdef FUNC_LAYER_ENABLE + _FUN, +#endif + +#ifdef RGB_LAYER_ENABLE + _RGB, +#define TO_RGB MO(_RGB) +#else +#define TO_RGB ___ +#endif + +#ifdef ADJUST_LAYER_ENABLE + _ADJUST, +#define MO_ADJUST MO(_ADJUST) +#else +#define MO_ADJUST ___ +#endif + + +#ifdef COMBO_REF_LAYER_ENABLE + _COMBO_REF, +// set the combo reference layer if we have one. +#undef COMBO_REF_DEFAULT +#define COMBO_REF_DEFAULT _COMBO_REF +#endif +#ifdef COMBO_REF_LAYER_TWO_ENABLE + _COMBO_REF2, +#endif diff --git a/users/ericgebhart/layers.h b/users/ericgebhart/layers.h deleted file mode 100755 index d4eb62d0a24..00000000000 --- a/users/ericgebhart/layers.h +++ /dev/null @@ -1,677 +0,0 @@ -#pragma once -/* - Copyright 2018 Eric Gebhart - - 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 . -*/ - -#include "core_keys.h" -/*********************************************************************/ -/* Non-Base Layer Definitions. */ -/* */ -/* Keypads, sympads, funcpads, symbols, RGB, Layers, Controls, etc. */ -/* Qwerty and Bepo versions exist as needed. */ -/* */ -/* This file defines every auxillary layer I use on every keyboard */ -/* Ergodox, keebio/viterbi, xd75, rebound, crkbd, morpho, dactyl,.. */ -/*********************************************************************/ -/********************************************************************************/ -/* The following Transient/Non-Base Layers are provided within. */ -/* Each layer is named with the size of Keymatrix it has entries for. */ -/* 3x12 or 4x12 are usual for these. Splitting is managed in the macros as */ -/* needed. BP indicates the Bepo equivalent to the Qwerty layer when needed. */ -/********************************************************************************/ -/* */ -/* Explore below to see what they all are. */ -/* Naming gives the sizes of things, a prefix number is the length. */ -/* BP is the bepo version of things. */ -/* BKL is the beakl 15 version of a layout or chunk. */ -/* C on the end of a name means its a compact version of something. */ -/* Compact meaning for use on a 3 row layout. */ -/* */ -/* TOPROWS - numbers, symbols, functions, all on one layer. */ -/* ___TOPROWS_3x12___ */ -/* ___TOPROWS_BP_3x12___ */ -/* // just numbers on the home row */ -/* ___NUM_HOME_BEAKL_3x12___ */ -/* ___NUM_HOME_BEAKL_BP_3x12___ */ -/* ___NUM_HOME_3x12___ */ -/* ___NUM_HOME_BP_3x12___ */ -/* */ -/* KEYPADS/FUNCPADS. */ -/* ___KEY_BKL_FUNC_4x12___ -- The BEAKL15 Keypad with a Funcpad on the right */ -/* ___KEY_BKL_FUNC_BP_4x12___ */ -/* ___FUNC_KEYPAD_4x12___ -- A Funcpad and a keypad */ -/* ___FUNC_KEYPAD_BP_4x12___ -- For Bepo */ -/* */ -/* // Compact Funcpad and keypad, 3x12 */ -/* ___KP_C_3x12___ */ -/* ___KP_C_BP_3x12___ */ -/* ___KP_C_BKL_FUNC_3x12___ -- BEAKL key/func pads. */ -/* ___KP_C_BKL_FUNC_BP_3x12___ */ -/* */ -/* SYMBOLS -Beakl or Beakl extended */ -/* ___SYMB_BEAKL_3x12___ */ -/* ___SYMB_BEAKL_BP_3x12___ */ -/* */ -/* Beakl extended symbol layer with additional corner symbols. */ -/* For use with non-beakl base layers. */ -/* ___SYMB_BEAKLA_3x12___ */ -/* ___SYMB_BEAKLA_BP_3x12___ */ -/* For use with vi bindings optimized */ -/* ___SYMB_BEAKLB_3x12___ */ -/* ___SYMB_BEAKLB_BP_3x12___ */ -/* */ -/* NAVIGATION */ -/* ___NAV_3x12___ */ -/* ___NAV_4x12___ */ -/* */ -/* CONTROLS */ -/* ___RGB_3x12___ */ -/* ___ADJUST_3x12___ */ -/* ___LAYERS_3x12___ */ -/********************************************************************************/ -/*********************************************************************/ -/* XXXXXX Layer chunk -- These are the final layers. */ -/* */ -/* Each section defines the necessary pieces to create a layer. */ -/* It builds them up into consistently shaped lists for the layout */ -/* wrapper. */ -/* */ -/* Each Section ends with a _Layer Chunk_. This is so the */ -/* layer can be easily given to the Layout Wrapper macros which */ -/* takes a list of keys in lengths of 2x3x5, 2x3x6, 2x4x5, or 2x4x6. */ -/* */ -/* All of my keyboard definitions use these same chunks with similar */ -/* macros. The differences between keyboards are all managed in the */ -/* macro. Here we just have nice rectangular sets of keys to */ -/* complete a layout. */ -/*********************************************************************/ - - -/*******************************************************************/ -/* A Top Rows layer. Pick your parts. Bepo and Qwerty */ -/* */ -/* This is, to me, a stop gap layer. If I need symbols, numbers or */ -/* function keys these rows are nicely predictable to most people. */ -/* I currently use the beakl number row with regular symbols. */ -/* I never use function keys for anything. */ -/*******************************************************************/ -#define ___12_SYMB___ ___, ___SYMS___, ___ -#define ___12_SYMB_BP___ ___12_SYMS_BEPO___, - -#define ___12_NUM___ ___, ___NUMS___, ___ -#define ___12_NUM_BP___ ___, ___NUMS_BP___, ___ -#define ___12_NUM_BEAKL___ ___, ___BKLNUMS___, ___ -#define ___12_NUM_BEAKL_BP___ ___, ___BKLNUMS_BP___, ___ - -#define ___12_FUNC___ ___FUNC_1_6___, ___FUNC_7_12___ -#define ___12_SYMS_BEPO___ ___6SYMBOL_BEPO_L___, ___6SYMBOL_BEPO_R___ -#define ___12_SYMS_FR___ ___SYMB_L_FR___, ___SYMB_R_FR___ - -// Kinesis function key row. I don't use them. but might as well define them. -#define ___KINTFUNC_L___ KC_ESC, ___FUNC_1_6___, KC_F7, KC_F8 -// #define ___KINTFUNC_RIGHT___ KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS, KC_FN0, RESET -#define ___KINTFUNC_R___ KC_F9, KC_F10, KC_F11, KC_F12, XXX, XXX, XXX, XXX, RESET - -// A TOPROWS Layer. -// set it how you like it, if you like it. -#define ___TOPROW_1___ ___12_SYMB___ -#define ___TOPROW_2___ ___12_NUM_BEAKL___ -#define ___TOPROW_3___ ___12_FUNC___ - -#define ___TOPROW_1_BP___ ___12_SYMS_BEPO___ -#define ___TOPROW_2_BP___ ___12_NUM_BEAKL_BP___ -#define ___TOPROW_3_BP___ ___12_FUNC___ - -/********************************************************************************/ -/* TOPROWS Layer chunk */ -/********************************************************************************/ -// altogether in a chunk. -#define ___TOPROWS_3x12___ ___TOPROW_1___, ___TOPROW_2___, ___TOPROW_3___ -#define ___TOPROWS_BP_3x12___ ___TOPROW_1_BP___, ___TOPROW_2_BP___, ___TOPROW_3_BP___ - -// Some layers with just a home row of numbers. -// The beakl ones, r the usual ones. -#define ___NUM_HOME_BEAKL_3x12___ ___12___, ___12_NUM_BEAKL___, ___12___ -#define ___NUM_HOME_BEAKL_BP_3x12___ ___12___, ___12_NUM_BEAKL_BP___, ___12___ -#define ___NUM_HOME_3x12___ ___12___, ___12_NUM___, ___12___ -#define ___NUM_HOME_BP_3x12___ ___12___, ___12_NUM_BP___, ___12___ - - -/********************************************************************************/ -/* KEYPADS. Mostly all in Bepo and Qwerty versions */ -/* 4 row Pads: */ -/* * The BEAKL 15 Number pad, for the left hand. */ -/* * Regular Number pad, for the right hand. */ -/* * 12 Function pad. */ -/* 3 row pads: */ -/* keypad */ -/* function pad */ -/* */ -/* LAYERS: */ -/* 4 Row: */ -/* * BEAKL with a compact FuncPad on the right. */ -/* * Funcpad on the left, keypad on the right. */ -/* 3 Row: */ -/* * Funcpad on the left, keypad on the right. */ -/* * BEAKL with a compact FuncPad on the right. */ -/* */ -/********************************************************************************/ - -// BEAKL 15 (numpad layer): -/* +=* ^%~ */ -/* ↹523: */ -/* - 7.104 */ -/* /698, */ - -// Keypads -#define ___6KEYPAD_BEAKL_L1___ ___, _X_, KC_PLUS, KC_PEQL, KC_ASTR, _X_ -#define ___6KEYPAD_BEAKL_L2___ ___, TAB_BKTAB, KC_5, KC_2, KC_3, KC_COLON -#define ___6KEYPAD_BEAKL_L3___ KC_MINS, KC_7, KC_DOT, KC_1, KC_0, KC_4 -#define ___6KEYPAD_BEAKL_L4___ ___, KC_SLASH, KC_6, KC_9, KC_8, KC_COMM - -#define ___5KEYPAD_BEAKL_R1___ ___, KC_CIRC, KC_PERC, KC_TILD, ___ - -#define ___6KEYPAD_BEAKL_L1_BP___ ___, _X_, BP_PLUS, BP_EQL, BP_ASTR, _X_ -#define ___6KEYPAD_BEAKL_L2_BP___ ___, TAB_BKTAB, BP_5, BP_2, BP_3, BP_COLN -#define ___6KEYPAD_BEAKL_L3_BP___ BP_MINS, BP_7, BP_DOT, BP_1, BP_0, BP_4 -#define ___6KEYPAD_BEAKL_L4_BP___ ___, BP_SLSH, BP_6, BP_9, BP_8, BP_COMM - -#define ___5KEYPAD_BEAKL_R1_BP___ ___, BP_CIRC, BP_PERC, BP_TILD, ___ - -#define ___5KEYPAD_1___ _X_, KC_7, KC_8, KC_9, KC_PSLS -#define ___5KEYPAD_2___ _X_, KC_4, KC_5, KC_6, KC_PAST -#define ___5KEYPAD_3___ _X_, KC_1, KC_2, KC_3, KC_PMNS -#define ___5KEYPAD_4___ _X_, KC_0, KC_DOT, KC_PEQL, KC_PPLS -// For Bepo -#define ___5KEYPAD_1_BP___ _X_, DB_7, DB_8, DB_9, BP_SLSH -#define ___5KEYPAD_2_BP___ _X_, DB_4, DB_5, DB_6, BP_ASTR -#define ___5KEYPAD_3_BP___ _X_, DB_1, DB_2, DB_3, DB_MINUS -#define ___5KEYPAD_4_BP___ _X_, DB_0, DB_DOT, DB_EQL, BP_PLUS - -// Keypad from the default keymap.c of the xd75 -#define ___4KEYPAD_1_ALT___ _X_, KC_P7, KC_P8, KC_P9, KC_MINS -#define ___4KEYPAD_2_ALT___ _X_, KC_P4, KC_P5, KC_P6, KC_PLUS -#define ___4KEYPAD_3_ALT___ _X_, KC_P1, KC_P2, KC_P3, KC_PENT -#define ___4KEYPAD_4_ALT___ _X_, KC_P0, KC_DOT, KC_PENT, KC_PENT - -// Function pad. Same idea as above, but for function keys. -// For the left side. -#define ___5FUNCPAD_T___ _X_, KC_F10, KC_F11, KC_F12, _X_ -#define ___5FUNCPAD_1___ _X_, KC_F7, KC_F8, KC_F9, _X_ -#define ___5FUNCPAD_2___ _X_, KC_F4, KC_F5, KC_F6, _X_ -#define ___5FUNCPAD_3___ _X_, KC_F1, KC_F2, KC_F3, _X_ - - -// Put them together for complete left and right layers. -// Beakl keypad with a funcpad -#define ___12_KEYPAD_BKL_FUNCPAD_1___ ___6KEYPAD_BEAKL_L1___, _X_, ___5KEYPAD_BEAKL_R1___ -#define ___12_KEYPAD_BKL_FUNCPAD_2___ ___6KEYPAD_BEAKL_L2___, _X_, ___5_FUNCPADC_1___ -#define ___12_KEYPAD_BKL_FUNCPAD_3___ ___6KEYPAD_BEAKL_L3___, _X_, ___5_FUNCPADC_2___ -#define ___12_KEYPAD_BKL_FUNCPAD_4___ ___6KEYPAD_BEAKL_L4___, _X_, ___5_FUNCPADC_3___ - -#define ___12_KEYPAD_BKL_FUNCPAD_1_BP___ ___6KEYPAD_BEAKL_L1_BP___, _X_, ___5KEYPAD_BEAKL_R1_BP___ -#define ___12_KEYPAD_BKL_FUNCPAD_2_BP___ ___6KEYPAD_BEAKL_L2_BP___, _X_, ___5_FUNCPADC_1___ -#define ___12_KEYPAD_BKL_FUNCPAD_3_BP___ ___6KEYPAD_BEAKL_L3_BP___, _X_, ___5_FUNCPADC_2___ -#define ___12_KEYPAD_BKL_FUNCPAD_4_BP___ ___6KEYPAD_BEAKL_L4_BP___, _X_, ___5_FUNCPADC_3___ - -// Funcpad and keypad layer for Qwerty based layers. -#define ___12_FUNCPAD_KEYPAD_1___ ___, ___5FUNCPAD_T___, ___5KEYPAD_1___, ___ -#define ___12_FUNCPAD_KEYPAD_2___ ___, ___5FUNCPAD_1___, ___5KEYPAD_2___, ___ -#define ___12_FUNCPAD_KEYPAD_3___ ___, ___5FUNCPAD_2___, ___5KEYPAD_3___, KC_PENT -#define ___12_FUNCPAD_KEYPAD_4___ ___, ___5FUNCPAD_3___, ___5KEYPAD_4___, ___ - -// Funcpad and keypad layer for BEPO -#define ___12_FUNCPAD_KEYPAD_BP_1___ ___, ___5FUNCPAD_T_BP___, ___5KEYPAD_1_BP___, ___ -#define ___12_FUNCPAD_KEYPAD_BP_2___ ___, ___5FUNCPAD_1_BP___, ___5KEYPAD_2_BP___, ___ -#define ___12_FUNCPAD_KEYPAD_BP_3___ ___, ___5FUNCPAD_2_BP___, ___5KEYPAD_3_BP___, KC_PENT -#define ___12_FUNCPAD_KEYPAD_BP_4___ ___, ___5FUNCPAD_3_BP___, ___5KEYPAD_4_BP___, ___ - -/********************************************************************************/ -/* COMPACT - KEYPAD and FUNCPAD. 3 Rows. */ -/********************************************************************************/ -// Compact versions of each. 3 rows. -//Compact keypad, 3 rows. -#define ___6KEYPADC_1___ ___, KC_7, KC_8, KC_9, KC_PSLS, ___ -#define ___6KEYPADC_2___ KC_DOT, KC_4, KC_5, KC_6, KC_PAST, KC_PEQL -#define ___6KEYPADC_3___ KC_0, KC_1, KC_2, KC_3, KC_PMNS, KC_PPLS -// For Bepo -#define ___6KEYPADC_1_BP___ ___, DB_7, DB_8, DB_9, BP_SLSH -#define ___6KEYPADC_2_BP___ DB_DOT, DB_4, DB_5, DB_6, BP_ASTR, DB_EQL -#define ___6KEYPADC_3_BP___ DB_0, DB_1, DB_2, DB_3, DB_MINUS, DB_PLUS - -// compact 1-12 funcpad for 3 row keyboards. -#define ___5_FUNCPADC_1___ KC_F9, KC_F10, KC_F11, KC_F12, ___ -#define ___5_FUNCPADC_2___ KC_F5, KC_F6, KC_F7, KC_F8, ___ -#define ___5_FUNCPADC_3___ KC_F1, KC_F2, KC_F3, KC_F4, ___ - -// Compact funcpads/keypad Layer -#define ___12_KP_1C___ ___, ___5_FUNCPADC_1___, ___5KEYPAD_1___, ___ -#define ___12_KP_2C___ ___, ___5_FUNCPADC_2___, ___5KEYPAD_2___, ___ -#define ___12_KP_3C___ ___, ___5_FUNCPADC_3___, ___5KEYPAD_3___, ___ -// Reversed -#define ___12_KP_FP_1C___ ___, ___5KEYPAD_1___, ___5_FUNCPADC_1___, ___ -#define ___12_KP_FP_2C___ ___, ___5KEYPAD_2___, ___5_FUNCPADC_2___, ___ -#define ___12_KP_FP_3C___ ___, ___5KEYPAD_3___, ___5_FUNCPADC_3___, ___ - -//Bepo funcpad and keypad Layer -#define ___12_KP_1_BP___ ___, ___5_FUNCPADC_1___, ___5KEYPAD_1_BP___, ___ -#define ___12_KP_2_BP___ ___, ___5_FUNCPADC_2___, ___5KEYPAD_2_BP___, ___ -#define ___12_KP_3_BP___ ___, ___5_FUNCPADC_3___, ___5KEYPAD_3_BP___, ___ - -/********************************************************************************/ -/* FUNCPAD and Keypad Layer chunks */ -/********************************************************************************/ -// Full size, 4x12 -#define ___KEYPAD_BKL_FUNC_4x12___ \ - ___12_KEYPAD_BKL_FUNCPAD_1___, \ - ___12_KEYPAD_BKL_FUNCPAD_2___, \ - ___12_KEYPAD_BKL_FUNCPAD_3___, \ - ___12_KEYPAD_BKL_FUNCPAD_4___ -#define ___KEYPAD_BKL_FUNC_BP_4x12___ \ - ___12_KEYPAD_BKL_FUNCPAD_1_BP___, \ - ___12_KEYPAD_BKL_FUNCPAD_2_BP___, \ - ___12_KEYPAD_BKL_FUNCPAD_3_BP___, \ - ___12_KEYPAD_BKL_FUNCPAD_4_BP___ -#define ___FUNC_KEYPAD_4x12___ \ - ___12_FUNCPAD_KEYPAD_1___, \ - ___12_FUNCPAD_KEYPAD_2___, \ - ___12_FUNCPAD_KEYPAD_3___, \ - ___12_FUNCPAD_KEYPAD_4___ -#define ___FUNC_KEYPAD_BP_4x12___ \ - ___12_FUNCPAD_KEYPAD_BP_1___, \ - ___12_FUNCPAD_KEYPAD_BP_2___, \ - ___12_FUNCPAD_KEYPAD_BP_3___, \ - ___12_FUNCPAD_KEYPAD_BP_4___ - -// Compact, 3x12 -#define ___KP_C_BKL_FUNC_3x12___ \ - ___12_KEYPAD_BKL_FUNCPAD_2___, \ - ___12_KEYPAD_BKL_FUNCPAD_3___, \ - ___12_KEYPAD_BKL_FUNCPAD_4___ -#define ___KP_C_BKL_FUNC_BP_3x12___ \ - ___12_KEYPAD_BKL_FUNCPAD_2_BP___, \ - ___12_KEYPAD_BKL_FUNCPAD_3_BP___, \ - ___12_KEYPAD_BKL_FUNCPAD_4_BP___ - -#define ___KP_C_3x12___ ___12_KP_1C___, ___12_KP_2C___, ___12_KP_3C___ -#define ___KP_FP_C_3x12___ ___12_KP_FP_1C___, ___12_KP_FP_2C___, ___12_KP_FP_3C___ -#define ___KP_C_BP_3x12___ ___12_KP_1_BP___, ___12_KP_2_BP___, ___12_KP_3_BP___ - - - -/********************************************************************************/ -/* SYMBOLS. The BEAKL15 Symbol layer with or without additions. */ -/* */ -/* Symbol layers: */ -/* */ -/* BEAKL symbol layer */ -/* <$> [_] */ -/* - \(")# %{=}| ; */ -/* :*+ &^~ */ -/* */ -/* BEAKL Extended symbol layer */ -/* `<$>' ?[_] */ -/* - \(")# %{=}| ; */ -/* @:*+; !&^~/ */ -/* */ -/* This layer has replaced my former Symbol pad and Symbols */ -/* layer. The Sympad was nice, But this incorporates the matching */ -/* (){}[] that I had and at the same time provides an easily */ -/* Learnable layer that makes sense. It was also easy to */ -/* Supplement with new keys that other layouts might need. */ -/* */ -/* The first Layer defined is the "Official" version. */ -/* The second Layer defined only adds to the original by */ -/* Placing 8 keys in the pinky and index corners */ -/* at the edges of the, 3x3, BEAKL home Region. */ -/* */ -/* Namely these: !?@`'/-; */ -/* */ -/* Beakl has these keys in it's base layer which isn't the case */ -/* for other layouts like dvorak, colemak, etc. */ -/* */ -/******************************************************************/ - -/******************************************************************/ -/* Official BEAKL15 Symbol layer. */ -/* BEAKL 15 (punctuation layer): */ -/* */ -/* <$> [_] */ -/* - \(")# %{=}| ; */ -/* :*+ &^~ */ -/******************************************************************/ -/********************************************************************************/ -/* The expanded Beakl Symbol Layer */ -/* */ -/* Expanded with: !?@`'/-; */ -/* */ -/* This insures access to all common symbols, regardless of availabilily on */ -/* other layers. All the extra characters are added to the pinky and index */ -/* corners which are empty in the BEAKL symbol layer. */ -/* */ -/* Both ; and ' could find their dvorak positions. */ -/* Analysis showed that only caused pinky overuse. Rotating the symbols around */ -/* Put better keys on the index finger which showed a huge improvement */ -/* in efficiency. The same is true of the exclamation point. */ -/* */ -/* A: */ -/* `<$>' ?[_] */ -/* - \(")# %{=}| ; */ -/* @:*+; !&^~/ */ -/* */ -/* B: */ -/* With vi bindings /:? and a leader key for vi/emacs.*/ -/* ; is popular, I use , it's easy in dvorak.: */ -/* */ -/* `<$>' ?[_]- */ -/* - \(")# !{:}/ ; */ -/* @=*+; %&^~| */ -/********************************************************************************/ -// Left -#define ___SB_L1___ KC_OCLTGT, KC_DLR, KC_GT -#define ___SB_L2___ KC_BACKSLASH, KC_OCPRN, KC_OCDQUO, KC_RPRN, KC_HASH -#define ___SB_L3___ KC_COLON, KC_ASTR, KC_PLUS -#define ___SB_L3b___ KC_EQL, KC_ASTR, KC_PLUS - -// Bepo -#define ___SB_L1_BP___ BP_OCLTGT, BP_DLR, DB_GRTR -#define ___SB_L2_BP___ DB_BACKSLASH, DB_LPRN, BP_OCDQUO, DB_RPRN, DB_HASH -#define ___SB_L3_BP___ KC_COLON, BP_ASTR, BP_PLUS -#define ___SB_L3b_BP___ BP_EQL, BP_ASTR, BP_PLUS - -// Right -#define ___SB_R1___ KC_OCBRC, KC_UNDS, KC_RBRC -#define ___SB_R2___ KC_PERC, KC_OCCBR, KC_EQL, KC_RCBR, KC_PIPE -#define ___SB_R3___ KC_AMPR, KC_CIRC, KC_TILD - -#define ___SB_R2a___ KC_PERC, KC_OCCBR, KC_EXLM, KC_RCBR, KC_PIPE -#define ___SB_R2b___ KC_EXLM, KC_OCCBR, KC_COLN, KC_RCBR, KC_SLASH - -// Bepo -#define ___SB_R1_BP___ BP_OCBRC, BP_UNDS, DB_RBRC -#define ___SB_R2_BP___ BP_PERC, BP_OCCBR, BP_EQL, DB_RCBR, DB_PIPE -#define ___SB_R3_BP___ BP_AMPR, DB_CIRC, DB_TILD - -#define ___SB_R2a_BP___ BP_PERC, BP_OCCBR, BP_EXLM, DB_RCBR, DB_PIPE -#define ___SB_R2b_BP___ BP_EXLM, BP_OCCBR, KC_COLON, DB_RCBR, DB_SLASH - -// --------------------------- -// --------------------------- - -// Square it to 6, Add in the - and ;. -#define ___6SYMBOLS_BEAKL_L1___ ___, ___, ___SB_L1___, ___ -#define ___6SYMBOLS_BEAKL_L2___ KC_MINS, ___SB_L2___ -#define ___6SYMBOLS_BEAKL_L3___ ___, ___, ___SB_L3___, ___ - -#define ___6SYMBOLS_BEAKL_R1___ ___, ___SB_R1___, ___, ___ -#define ___6SYMBOLS_BEAKL_R2___ ___SB_R2___, KC_SCLN -#define ___6SYMBOLS_BEAKL_R3___ ___, ___SB_R3___, ___, ___ -// --------------------------- -#define ___6SYMBOLS_BEAKL_L1a___ ___, KC_OCGRV, ___SB_L1___, KC_OCQUOT -#define ___6SYMBOLS_BEAKL_L2a___ ___6SYMBOLS_BEAKL_L2___ -#define ___6SYMBOLS_BEAKL_L3a___ ___, KC_AT, ___SB_L3___, KC_SCLN - -#define ___6SYMBOLS_BEAKL_R1a___ LSFT(KC_SLASH), ___SB_R1___, KC_MINS, ___ -#define ___6SYMBOLS_BEAKL_R2a___ ___SB_R2a___, KC_SCLN -#define ___6SYMBOLS_BEAKL_R3a___ KC_EXLM, ___SB_R3___, KC_SLASH, ___ -// --------------------------- -#define ___6SYMBOLS_BEAKL_L1b___ ___, KC_OCGRV, ___SB_L1___, KC_OCQUOT -#define ___6SYMBOLS_BEAKL_L2b___ ___6SYMBOLS_BEAKL_L2___ -#define ___6SYMBOLS_BEAKL_L3b___ ___, KC_AT, ___SB_L3b___, KC_SCLN - -#define ___6SYMBOLS_BEAKL_R1b___ ___6SYMBOLS_BEAKL_R1a___ -#define ___6SYMBOLS_BEAKL_R2b___ ___SB_R2b___, KC_SCLN -#define ___6SYMBOLS_BEAKL_R3b___ KC_PERC, ___SB_R3___, KC_PIPE, ___ - -// --------------------------- -// --------------------------- -// Bepo -#define ___6SYMBOLS_BEAKL_L1_BP___ ___, ___, ___SB_L1_BP___, ___ -#define ___6SYMBOLS_BEAKL_L2_BP___ BP_MINS, ___SB_L2_BP___ -#define ___6SYMBOLS_BEAKL_L3_BP___ ___, ___, ___SB_L3_BP___, ___ - -#define ___6SYMBOLS_BEAKL_R1_BP___ ___, ___SB_R1_BP___, ___, ___ -#define ___6SYMBOLS_BEAKL_R2_BP___ ___SB_R2_BP___, BP_SCLN -#define ___6SYMBOLS_BEAKL_R3_BP___ ___, ___SB_R3_BP___, ___, ___ -// --------------------------- -#define ___6SYMBOLS_BEAKL_L1a_BP___ ___, BP_GRV, ___SB_L1_BP___, BP_AT -#define ___6SYMBOLS_BEAKL_L2a_BP___ ___6SYMBOLS_BEAKL_L2_BP___ -#define ___6SYMBOLS_BEAKL_L3a_BP___ ___, BP_AT, ___SB_L3_BP___, BP_SCLN - -#define ___6SYMBOLS_BEAKL_R1a_BP___ BP_QUES, ___SB_R1_BP___, BP_MINS, ___ -#define ___6SYMBOLS_BEAKL_R2a_BP___ ___SB_R2a_BP___, BP_SCLN -#define ___6SYMBOLS_BEAKL_R3a_BP___ BP_EXLM, ___SB_R3_BP___, BP_SLSH, ___ -// --------------------------- -#define ___6SYMBOLS_BEAKL_L1b_BP___ ___, BP_GRV, ___SB_L1___, BP_OCQUOT -#define ___6SYMBOLS_BEAKL_L2b_BP___ ___6SYMBOLS_BEAKL_L2_BP___ -#define ___6SYMBOLS_BEAKL_L3b_BP___ ___, BP_AT, ___SB_L3b_BP___, BP_SCLN - -#define ___6SYMBOLS_BEAKL_R1b_BP___ ___, ___SB_R1_BP___, BP_MINS, ___ -#define ___6SYMBOLS_BEAKL_R2b_BP___ ___SB_R2b_BP___, BP_SCLN -#define ___6SYMBOLS_BEAKL_R3b_BP___ BP_PERC, ___SB_R3_BP___, BP_PIPE, ___ -// --------------------------- - -// Some 12 column rows. -#define ___12_SYM_BKL_1_BP___ ___6SYMBOLS_BEAKL_L1_BP___, ___6SYMBOLS_BEAKL_R1_BP___ -#define ___12_SYM_BKL_2_BP___ ___6SYMBOLS_BEAKL_L2_BP___, ___6SYMBOLS_BEAKL_R2_BP___ -#define ___12_SYM_BKL_3_BP___ ___6SYMBOLS_BEAKL_L3_BP___, ___6SYMBOLS_BEAKL_R3_BP___ - -#define ___12_SYM_BKL_1___ ___6SYMBOLS_BEAKL_L1___, ___6SYMBOLS_BEAKL_R1___ -#define ___12_SYM_BKL_2___ ___6SYMBOLS_BEAKL_L2___, ___6SYMBOLS_BEAKL_R2___ -#define ___12_SYM_BKL_3___ ___6SYMBOLS_BEAKL_L3___, ___6SYMBOLS_BEAKL_R3___ - -// Some 12 column rows. -#define ___12_SYM_BKL_A1_BP___ ___6SYMBOLS_BEAKL_L1a_BP___, ___6SYMBOLS_BEAKL_R1a_BP___ -#define ___12_SYM_BKL_A2_BP___ ___6SYMBOLS_BEAKL_L2a_BP___, ___6SYMBOLS_BEAKL_R2a_BP___ -#define ___12_SYM_BKL_A3_BP___ ___6SYMBOLS_BEAKL_L3a_BP___, ___6SYMBOLS_BEAKL_R3a_BP___ - -#define ___12_SYM_BKL_A1___ ___6SYMBOLS_BEAKL_L1a___, ___6SYMBOLS_BEAKL_R1a___ -#define ___12_SYM_BKL_A2___ ___6SYMBOLS_BEAKL_L2a___, ___6SYMBOLS_BEAKL_R2a___ -#define ___12_SYM_BKL_A3___ ___6SYMBOLS_BEAKL_L3a___, ___6SYMBOLS_BEAKL_R3a___ - -#define ___12_SYM_BKL_B1_BP___ ___6SYMBOLS_BEAKL_L1b_BP___, ___6SYMBOLS_BEAKL_R1b_BP___ -#define ___12_SYM_BKL_B2_BP___ ___6SYMBOLS_BEAKL_L2b_BP___, ___6SYMBOLS_BEAKL_R2b_BP___ -#define ___12_SYM_BKL_B3_BP___ ___6SYMBOLS_BEAKL_L3b_BP___, ___6SYMBOLS_BEAKL_R3b_BP___ - -#define ___12_SYM_BKL_B1___ ___6SYMBOLS_BEAKL_L1b___, ___6SYMBOLS_BEAKL_R1b___ -#define ___12_SYM_BKL_B2___ ___6SYMBOLS_BEAKL_L2b___, ___6SYMBOLS_BEAKL_R2b___ -#define ___12_SYM_BKL_B3___ ___6SYMBOLS_BEAKL_L3b___, ___6SYMBOLS_BEAKL_R3b___ - -/********************************************************************************/ -/* The BEAKL and BEAKL-A SYMBOL LAYER Chunks */ -/********************************************************************************/ -// The Official beakl symbol layer as a chunk, Bepo and Qwerty -#define ___SYMB_BEAKL_BP_3x12___ ___12_SYM_BKL_1_BP___, \ - ___12_SYM_BKL_2_BP___, \ - ___12_SYM_BKL_3_BP___ - -#define ___SYMB_BEAKL_3x12___ ___12_SYM_BKL_1___, \ - ___12_SYM_BKL_2___, \ - ___12_SYM_BKL_3___ - -// Alternate Beakle symbol layer with additional corner symbols. -#define ___SYMB_BEAKLA_BP_3x12___ ___12_SYM_BKL_A1_BP___, \ - ___12_SYM_BKL_A2_BP___, \ - ___12_SYM_BKL_A3_BP___ - -#define ___SYMB_BEAKLA_3x12___ ___12_SYM_BKL_A1___, \ - ___12_SYM_BKL_A2___, \ - ___12_SYM_BKL_A3___ - -#define ___SYMB_BEAKLB_BP_3x12___ ___12_SYM_BKL_B1_BP___, \ - ___12_SYM_BKL_B2_BP___, \ - ___12_SYM_BKL_B3_BP___ - -#define ___SYMB_BEAKLB_3x12___ ___12_SYM_BKL_B1___, \ - ___12_SYM_BKL_B2___, \ - ___12_SYM_BKL_B3___ - -/********************************************************************************/ -/* NAVIGATION - MOUSE, Scroll, Buttons, Arrows, Tab, Home, page up/down, End */ -/* Navigation layers: */ -/* 3 row Layer */ -/* 4 Row Layer with repeated and swapped VI arrows, and Scroll wheel. */ -/********************************************************************************/ -/* */ -/* Navigation layer with optional 4th Row.... */ -/* */ -/* M = Mouse */ -/* B = Button */ -/* W = Wheel */ -/* AC = Acceleration */ -/* CCCV = Tap -> Ctrl-C, hold for double tap duration -> Ctrl-V */ -/* CTCN = Tap -> Ctrl-T, hold for double tap duration -> Ctrl-N */ -/* CWCQ = Tap -> Ctrl-W, hold for double tap duration -> Ctrl-Q */ -/* TAB = Tap -> Tab, Double-tap -> Back Tab */ -/* HOME = Tap -> Home, Double-tap -> End */ -/* */ -/* MB5 MB4 MB3 MB2 MB1 MAC0 | CTCN MB1 MB2 MB3 MB4 MB5 */ -/* TAB MLeft MDown MUp MRight MAC1 | CCCV Left Down UP Right TAB */ -/* WLeft WDown WUp WRight MAC2 | CWCQ HOME PGDN PGUP END */ -/* */ -/* Left Down Up Right CCCV | CCCV MLeft MDown MUp MRight */ -/* */ -/********************************************************************************/ - -#define ___MOUSE_LDUR___ KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R -#define ___MWHEEL_LDUR___ KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R -// really BTN 1, 2, 3, 8, 9 - according to xev. -#define ___MOUSE_BTNS_R___ KC_BTN1, KC_BTN3, KC_BTN2, KC_BTN4, KC_BTN5 -// really BTN 9, 8, 3, 2, 1 - according to xev -#define ___MOUSE_BTNS_L___ KC_BTN5, KC_BTN4, KC_BTN2, KC_BTN3, KC_BTN1 -#define ___MOUSE_ACCL_012___ KC_ACL0, KC_ACL1, KC_ACL2 -#define ___MACCL___ ___MOUSE_ACCL_012___ - - -#define ___VI_ARROWS___ KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT -#define ___HOME_PGDN_PGUP_END___ KC_HOME, KC_PGDN, KC_PGUP, KC_END - -#define ___6NAV_L_1___ ___MOUSE_BTNS_L___, KC_ACL0 -#define ___6NAV_L_2___ TAB_BKTAB, ___MOUSE_LDUR___, KC_ACL1 -#define ___6NAV_L_3___ ___, ___MWHEEL_LDUR___, KC_ACL2 -#define ___6NAV_L_4___ ___, ___VI_ARROWS___, KC_CCCV - -#define ___6NAV_R_1___ KC_CTCN, ___MOUSE_BTNS_R___ -#define ___6NAV_R_2___ KC_CCCV, ___VI_ARROWS___, TAB_BKTAB -#define ___6NAV_R_3___ KC_CWCQ, ___HOME_PGDN_PGUP_END___, ___ -#define ___6NAV_R_4___ KC_CCCV, ___MOUSE_LDUR___, ___ - - // compact. Initially for corne. So 3x12 per layer. -#define ___12_NAV_1___ ___6NAV_L_1___, ___6NAV_R_1___ -#define ___12_NAV_2___ ___6NAV_L_2___, ___6NAV_R_2___ -#define ___12_NAV_3___ ___6NAV_L_3___, ___6NAV_R_3___ - -#define ___12_NAV_4___ ___6NAV_L_4___, ___6NAV_R_4___ - -/********************************************************************************/ -/* The Navigation LAYER Chunks */ -/********************************************************************************/ -// A Navigation Layer -#define ___NAV_3x12___ ___12_NAV_1___, ___12_NAV_2___, ___12_NAV_3___ -#define ___NAV_4x12___ ___NAV_3x12___, ___12_NAV_4___ - - -/********************************************************************************/ -/* MEDIA - Mute, Vol, play, pause, stop, next, prev, etc. */ -/********************************************************************************/ -#define ___PRV_PLAY_NXT_STOP___ KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP -#define ___VDN_MUTE_VUP___ KC_VOLD, KC_MUTE, KC_VOLU - -#define ___MUTE_PRV_PLAY_NXT_STOP___ KC_MUTE, KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP -#define ___MUTE_PLAY_STOP___ KC_MUTE, KC_MPLY, KC_MSTP - - -/********************************************************************************/ -/* RGB - Control those lights. */ - -/* ___, HUE SAT_INT MOD (UP), | */ -/* ___, HUE SAT INT MOD (DOWN), RGB_TOG | P_B_R_SW_SN___, ___ */ -/* ___6___, | ___, ___RGB_KXGT___, ___ */ -/********************************************************************************/ -// RGB FUNCTION Keysets -// RGB row for the _FN layer from the redo of the default keymap.c -#define ___RGB_HUE_SAT_INT_UP___ RGB_HUI, RGB_SAI, RGB_VAI, RGB_RMOD -#define ___RGB_HUE_SAT_INT_DN___ RGB_HUD, RGB_SAD, RGB_VAD, RGB_MOD -#define ___RGB_MODE_PRV_NXT___ RGB_RMOD, RGB_MOD -#define ___RGB_TOGGLE___ RGB_TOG -#define ___RGB_P_B_R_SW_SN___ RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN -#define ___RGB_KXGT___ RGB_M_K, RGB_M_X, RGB_M_G, RGB_M_T - -/// An RGB Layer -#define ___12_RGB_1___ ___, ___RGB_HUE_SAT_INT_UP___, ___, ___6___ -#define ___12_RGB_2___ ___, ___RGB_HUE_SAT_INT_DN___, RGB_TOG, ___RGB_P_B_R_SW_SN___, ___ -#define ___12_RGB_3___ ___6___, ___, ___RGB_KXGT___, ___ - -/********************************************************************************/ -/* The RGB LAYER Chunk */ -/********************************************************************************/ -#define ___RGB_3x12___ ___12_RGB_1___, ___12_RGB_2___, ___12_RGB_3___ - - -/********************************************************************************/ -/* ADJUST - Miscellaneous Melange. */ -/********************************************************************************/ -// For an Adjust layer. Like RBB with audio, flash, etc. -#define ___6_ADJUST_L1___ KC_MAKE, ___RGB_HUE_SAT_INT_UP___, RGB_TOG -#define ___6_ADJUST_L2___ VRSN, MU_TOG, CK_TOGG, AU_ON, AU_OFF, CG_NORM -#define ___6_ADJUST_L3___ MG_NKRO, ___RGB_HUE_SAT_INT_DN___, KC_RGB_T - -#define ___6_ADJUST_R1___ ___5___, KC_RESET -#define ___6_ADJUST_R2___ ___, ___PRV_PLAY_NXT_STOP___, EE_CLR -#define ___6_ADJUST_R3___ MG_NKRO, ___VDN_MUTE_VUP___, ___, RGB_IDL - -/********************************************************************************/ -/* The Adjust LAYER Chunks */ -/********************************************************************************/ -#define ___ADJUST_3x12___ ___6_ADJUST_L1___, ___6_ADJUST_R1___, \ - ___6_ADJUST_L2___, ___6_ADJUST_R2___, \ - ___6_ADJUST_L3___, ___6_ADJUST_R3___ - - -/********************************************************************************/ -/* LAYERS - Define a base layer, switch to any layer. Get around. Experiment. */ -/* */ -/* Base Layers on the left hand, */ -/* transient layers on the right. Centered on the home region. */ -/* A good place to attach an experimental layer. */ -/* */ -/********************************************************************************/ -// Base Layers -#define ___5_LAYERS_B1___ ___, KC_BEPO, KC_DVORAK_BP, KC_BEAKL_BP, ___ -#define ___5_LAYERS_B2___ KC_QWERTY, KC_COLEMAK, KC_DVORAK, KC_BEAKL, ___ - -#define ___5_LAYERS_B3___ ___, KC_QWERTY, KC_NORMAN, KC_WORKMAN, ___ -#define ___5_LAYERS_B4___ ___, DF(_MALTRON), DF(_EUCALYN), DF(_CARPLAX), ___ - -#define ___5_LAYERS_B1b___ DF(_NORMAN), DF(_MALTRON), DF(_CARPLAX), DF(_COLEMAK), ___ -#define ___5_LAYERS_B2b___ DF(_EUCALYN), DF(_WORKMAN), DF(_QWERTY), DF(_DVORAK), ___ -#define ___5_LAYERS_B3b___ ___, DF(_BEAKL), DF(_BEPO), DF(_DVORAK_BP), ___ - -// transient layers. -#define ___5_LAYERS_T___ ___, MO(_NAV), MO(_SYMB), MO(_KEYPAD), MO(_TOPROWS) -#define ___5_LAYERS_T_BP___ ___, MO(_NAV), MO(_SYMB_BP), MO(_KEYPAD_BP), MO(_TOPROWS_BP) -#define ___5_LAYERS_T_CTL___ ___, MO(_RGB), ___, ___, MO(_ADJUST) - - -/// A Layers Layer -#define ___12_LAYERS_1___ ___, ___5_LAYERS_B1___, ___5_LAYERS_T_BP___, ___ -#define ___12_LAYERS_2___ ___, ___5_LAYERS_B2___, ___5_LAYERS_T___, ___ -#define ___12_LAYERS_3___ KC_SPACETEST, ___5___, ___5_LAYERS_T_CTL___, ___ - -/********************************************************************************/ -/* The LAYERS LAYER Chunk */ -/********************************************************************************/ -#define ___LAYERS_3x12___ ___12_LAYERS_1___, ___12_LAYERS_2___, ___12_LAYERS_3___ diff --git a/users/ericgebhart/layers/edge_keys.h b/users/ericgebhart/layers/edge_keys.h new file mode 100644 index 00000000000..0794b91a023 --- /dev/null +++ b/users/ericgebhart/layers/edge_keys.h @@ -0,0 +1,420 @@ +#pragma once +/* + Copyright 2018 Eric Gebhart + + 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 . +*/ + +/******************************************************************/ +/* This is where I put my Keyboard layouts, Everything on the */ +/* edges, the functions on keys like LT() and SFT_T() */ +/* can be applied here. The physical shape of the keyboard is */ +/* also accounted for here. This makes it very simple to add a */ +/* new keyboard and reuse all of my layouts and layers */ +/* */ +/* The particular pieces we define here (as needed) are: */ +/* * Edge pinky keys, */ +/* * Middle section keys */ +/* * Bottom/5th row */ +/* * Thumbkeys */ +/* * Any functional additions to wrap the keys. ie. LT() */ +/* */ +/* With all of that in hand, we then create a LAYOUT wrapper */ +/* macro that takes a list of keys, to create a keyboard matrix */ +/* that fits the keyboard. Simple. */ +/* */ +/* The thumb keys, the bottom rows, etc. */ +/* */ +/* An attempt has been made to adapt the kinesis and ergodox */ +/* Thumb keys to the rectangular shapes of the xd75 and viterbi. */ +/* which are 15x and 14x matrices respectively. */ +/* The Corne was a perfect fit */ +/******************************************************************/ + +/******************************************************************/ +/* * The XD75 is a 5x15 Ortholinear matrix which means it has 3 */ +/* keys inbetween the usual left and right hand keys */ +/* * The Viterbi is a split 5x14 Ortholinear with 2 middle keys. */ +/* * The Ergodox is a split 5x14 Ortholinear with 2 middle keys, */ +/* thumbkeys. It is missing middle keys on (home) row 3. */ +/* * The Corne is a split 3x12 with 6 thumb keys. It has no */ +/* extra middle keys */ +/* */ +/******************************************************************/ + + +/******************************************************************/ +/* In all cases these keyboards are defined in a matrix which is */ +/* a set of rows. Maybe like so, or not. */ +/* */ +/* -------------------------|------------------------ */ +/* | Left0 | Numbers L | mid|dle0 | numbers R | Right0 | */ +/* | Left1 | keys0-5 | mid|dle1 | Keys6-10 | Right1 | */ +/* | Left2 | keys11-15 | mid|dle2 | Keys16-20 | Right2 | */ +/* | Left3 | keys20-25 | mid|dle3 | Keys25-30 | Right3 | */ +/* | Row5L | Row5R | */ +/* | ThumbsL | ThumbsR | */ +/* -------------------------|------------------------ */ + +/* Generally speaking, the keys on the right and left don't change. */ +/* Neither does the bottom row or the thumbs. Frequently the numbers */ +/* row is identical across layers. Mostly, we want our Base layers to */ +/* be predctable. */ + +// Edge columns. N rows by 6 columns per side. +// Outside pinky keys are 'yes' +// Should be undef/def'd by the keyboard's keymap if no. +//#define EDGE_COLS yes + +// BEPO or EN. Used in map.h +//#define LANG_IS EN + + +#define CONCATENATEE(a, ...) a ## __VA_ARGS__ +#define CATE(a, ...) CONCATENATEE(a, __VA_ARGS__) +// EDGES +// outside pinky keys row 0-3. +// Qwerty and Bepo, - Applies +// to foreign layouts on bepo. dvorak_bp, beakl_bp. +// Use by Wrapping the root like so. LANG_N(LEFT0) +// Add more languages by adding more definitions. +#define EDGE_KEY(KNAME) CATE(LANG_N(KNAME), EDGE_KEY_SFX) +#define LEFT_0 EDGE_KEY(LEFT0) +#define LEFT_1 EDGE_KEY(LEFT1) +#define LEFT_2 EDGE_KEY(LEFT2) +#define LEFT_3 EDGE_KEY(LEFT3) +#define RIGHT_0 EDGE_KEY(RIGHT0) +#define RIGHT_1 EDGE_KEY(RIGHT1) +#define RIGHT_2 EDGE_KEY(RIGHT2) +#define RIGHT_3 EDGE_KEY(RIGHT3) + + +#define EDGE_KEY_SFX CATE(CATE(EDGE_KEY_SET_IS, _), SFX) +#define SML_SFX _sml +#define NOKC_SFX _nokc +#define NORM_SFX _norm +#define TEST_SFX _test +#define REF1_SFX _ref1 +#define REF2_SFX _ref2 + +// Edge key sets +// a mostly normalish set of edge keys. +#define LEFT0_EN_norm KC_GRV +#define LEFT1_EN_norm KC_GRV +#define LEFT2_EN_norm KC_TAB +#define LEFT3_EN_norm KC_BSLS + +#define RIGHT0_EN_norm KC_EQL +#define RIGHT1_EN_norm KC_EQL +#define RIGHT2_EN_norm KC_MINS +#define RIGHT3_EN_norm KC_SLSH + +// smart lock edges mostly +#define LEFT0_EN_sml SML_NAV +#define LEFT1_EN_sml SML_NAV +#define LEFT2_EN_sml KC_TAB +#ifdef ACCENTS_MORTE_LAYER_ENABLE +#define LEFT3_EN_sml TT(_ACCENTS_MORTE_EN) +#else +#define LEFT3_EN_sml ___ +#endif + +#define RIGHT0_EN_sml SML_KEYPAD +#define RIGHT1_EN_sml SML_KEYPAD +#define RIGHT2_EN_sml KC_MINS +#define RIGHT3_EN_sml TT(_LAYERS) + +// empty no kc edges +#define LEFT0_EN_nokc KC_NO +#define LEFT1_EN_nokc KC_NO +#define LEFT2_EN_nokc KC_NO +#define LEFT3_EN_nokc KC_NO + +#define RIGHT0_EN_nokc KC_NO +#define RIGHT1_EN_nokc KC_NO +#define RIGHT2_EN_nokc KC_NO +#define RIGHT3_EN_nokc KC_NO + +//test edge keys +#define LEFT0_EN_test KC_NO +#define LEFT1_EN_test KC_NO +#define LEFT2_EN_test KC_NO +#define LEFT3_EN_test KC_NO + +#define RIGHT0_EN_test KC_NO +#define RIGHT1_EN_test KC_NO +#define RIGHT2_EN_test KC_NO +#define RIGHT3_EN_test KC_NO + +// bepo +// mostly normal expected things +#define LEFT0_BP_norm BP_GRV +#define LEFT1_BP_norm BP_GRV +#define LEFT2_BP_norm BP_TAB +#define LEFT3_BP_norm BP_BSLS + +#define RIGHT0_BP_norm BP_EQL +#define RIGHT1_BP_norm BP_EQL +#define RIGHT2_BP_norm BP_DV_MINS +#define RIGHT3_BP_norm BP_SLSH + +// smart locks mostly, tab, mins +#define LEFT0_BP_sml SML_NAV +#define LEFT1_BP_sml SML_NAV +#define LEFT2_BP_sml KC_TAB +#define LEFT3_BP_sml TT(_ACCENTS_MORTE_BP) + +#define RIGHT0_BP_sml SML_KEYPAD_BP +#define RIGHT1_BP_sml SML_KEYPAD_BP +#define RIGHT2_BP_sml BP_MINS +#define RIGHT3_BP_sml TT(_LAYERS) + +// empty nokc edges +#define LEFT0_BP_nokc KC_NO +#define LEFT1_BP_nokc KC_NO +#define LEFT2_BP_nokc KC_NO +#define LEFT3_BP_nokc KC_NO + +#define RIGHT0_BP_nokc KC_NO +#define RIGHT1_BP_nokc KC_NO +#define RIGHT2_BP_nokc KC_NO +#define RIGHT3_BP_nokc KC_NO + +// test edges +#define LEFT0_BP_test KC_NO +#define LEFT1_BP_test KC_NO +#define LEFT2_BP_test KC_NO +#define LEFT3_BP_test KC_NO + +#define RIGHT0_BP_test KC_NO +#define RIGHT1_BP_test KC_NO +#define RIGHT2_BP_test KC_NO +#define RIGHT3_BP_test KC_NO + + +// Edges for the combo reference layers. +#define LEFT0_CB_ref1 L0_CB +#define LEFT1_CB_ref1 L1_CB +#define LEFT2_CB_ref1 L2_CB +#define LEFT3_CB_ref1 L3_CB + +#define RIGHT0_CB_ref1 R0_CB +#define RIGHT1_CB_ref1 R1_CB +#define RIGHT2_CB_ref1 R2_CB +#define RIGHT3_CB_ref1 R3_CB + +#define LEFT0_CB_ref2 L0_CB2 +#define LEFT1_CB_ref2 L1_CB2 +#define LEFT2_CB_ref2 L2_CB2 +#define LEFT3_CB_ref2 L3_CB2 + +#define RIGHT0_CB_ref2 R0_CB2 +#define RIGHT1_CB_ref2 R1_CB2 +#define RIGHT2_CB_ref2 R2_CB2 +#define RIGHT3_CB_ref2 R3_CB2 + +/******************************************************************/ +/* Middle Keysets for various keyboards */ +// MIDDLES +/// Middle left and right keys. +/******************************************************************/ +#define ___MIDDLE_LT___ OSL(_LAYERS) +#define ___MIDDLE_L1___ LANG_KC(_CCCV) +#define ___MIDDLE_L2___ TO(LN_SYMB) +#define ___MIDDLE_L3___ TO(_NAV) + +#define ___MIDDLE_RT___ _X_ +#define ___MIDDLE_R1___ LANG_KC(_CCCV) +#define ___MIDDLE_R2___ TO(LN_TOPROWS) +#define ___MIDDLE_R3___ ___ + +// 3 keys in the middle of a 15x matrix +#define ___3_MIDDLE_T___ ___MIDDLE_LT___, LCTL(LANG_KC(_A)), ___MIDDLE_RT___ +#define ___3_MIDDLE_1___ ___MIDDLE_L1___, LCTL(LANG_KC(_X)), ___MIDDLE_R1___ +#define ___3_MIDDLE_2___ ___MIDDLE_L2___, TO_RGB, ___MIDDLE_R2___ +#define ___3_MIDDLE_3___ ___MIDDLE_L3___, TO(LN_SYMB), ___MIDDLE_R3___ + +// 2 keys in the middle of a 14x matrix - For viterbi and ergodox. +#define ___2_MIDDLE_T___ ___MIDDLE_LT___, ___MIDDLE_RT___ +#define ___2_MIDDLE_1___ ___MIDDLE_L1___, ___MIDDLE_R1___ +#define ___2_MIDDLE_2___ ___MIDDLE_L2___, ___MIDDLE_R2___ +#define ___2_MIDDLE_3___ ___MIDDLE_L3___, ___MIDDLE_R3___ + +// 2 keys in the middle of a 14x matrix - For viterbi and ergodox. +#define ___3_MIDDLE_T_EN___ ___3_MIDDLE_T___ +#define ___3_MIDDLE_1_EN___ ___3_MIDDLE_1___ +#define ___3_MIDDLE_2_EN___ ___3_MIDDLE_2___ +#define ___3_MIDDLE_3_EN___ ___3_MIDDLE_3___ + +#define ___2_MIDDLE_T_EN___ ___2_MIDDLE_T___ +#define ___2_MIDDLE_1_EN___ ___2_MIDDLE_1___ +#define ___2_MIDDLE_2_EN___ ___2_MIDDLE_2___ +#define ___2_MIDDLE_3_EN___ ___2_MIDDLE_3___ + +#define ___3_MIDDLE_T_BP___ ___3_MIDDLE_T___ +#define ___3_MIDDLE_1_BP___ ___3_MIDDLE_1___ +#define ___3_MIDDLE_2_BP___ ___3_MIDDLE_2___ +#define ___3_MIDDLE_3_BP___ ___3_MIDDLE_3___ + +#define ___2_MIDDLE_T_BP___ ___2_MIDDLE_T___ +#define ___2_MIDDLE_1_BP___ ___2_MIDDLE_1___ +#define ___2_MIDDLE_2_BP___ ___2_MIDDLE_2___ +#define ___2_MIDDLE_3_BP___ ___2_MIDDLE_3___ + +#define ___2_MIDDLE_T_CB___ CB_0M1, CB_0M2 +#define ___2_MIDDLE_1_CB___ CB_1M1, CB_1M2 +#define ___2_MIDDLE_2_CB___ CB_2M1, CB_2M2 +#define ___2_MIDDLE_3_CB___ CB_3M1, CB_3M2 +#define ___2_MIDDLE_4_CB___ CB_4M1, CB_4M2 + +#define ___3_MIDDLE_T_CB___ CB_0M1, CB_0M2, CB_0M3 +#define ___3_MIDDLE_1_CB___ CB_1M1, CB_1M2, CB_1M3 +#define ___3_MIDDLE_2_CB___ CB_2M1, CB_2M2, CB_2M3 +#define ___3_MIDDLE_3_CB___ CB_3M1, CB_3M2, CB_3M3 +#define ___3_MIDDLE_4_CB___ CB_4M1, CB_4M2, CB_4M3 + +#define ___4_MIDDLE_4_CB___ CB_4M1, CB_4M2, CB_4M3, CB_4M4 +#define ___5_MIDDLE_4_CB___ CB_4M1, CB_4M2, CB_4M3, CB_4M4, CB_4M5 + +#define ___2_MIDDLE_T_CB2___ CB2_0M1, CB2_0M2 +#define ___2_MIDDLE_1_CB2___ CB2_1M1, CB2_1M2 +#define ___2_MIDDLE_2_CB2___ CB2_2M1, CB2_2M2 +#define ___2_MIDDLE_3_CB2___ CB2_3M1, CB2_3M2 +#define ___2_MIDDLE_4_CB2___ CB2_4M1, CB2_4M2 + +#define ___3_MIDDLE_T_CB2___ CB2_0M1, CB2_0M2, CB2_0M3 +#define ___3_MIDDLE_1_CB2___ CB2_1M1, CB2_1M2, CB2_1M3 +#define ___3_MIDDLE_2_CB2___ CB2_2M1, CB2_2M2, CB2_2M3 +#define ___3_MIDDLE_3_CB2___ CB2_3M1, CB2_3M2, CB2_3M3 +#define ___3_MIDDLE_4_CB2___ CB2_4M1, CB2_4M2, CB2_4M3 + +#define ___4_MIDDLE_4_CB2___ CB2_4M1, CB2_4M2, CB2_4M3, CB2_4M4 +#define ___5_MIDDLE_4_CB2___ CB2_4M1, CB2_4M2, CB2_4M3, CB2_4M4, CB2_4M5 + +#define ___4_LEFT_4_CB___ CB_4L1, CB_4L2, CB_4L3, CB_4L4 +#define ___4_RIGHT_4_CB___ CB_4R1, CB_4R2, CB_4R3, CB_4R4 + +#define ___4_LEFT_4_CB2___ CB2_4L1, CB2_4L2, CB2_4L3, CB2_4L4 +#define ___4_RIGHT_4_CB2___ CB2_4R1, CB2_4R2, CB2_4R3, CB2_4R4 + +#define ___5_LEFT_4_CB___ CB_4L1, CB_4L2, CB_4L3, CB_4L4, CB_4L5 +#define ___5_RIGHT_4_CB___ CB_4R1, CB_4R2, CB_4R3, CB_4R4, CB_4R5 + +#define ___5_LEFT_4_CB2___ CB2_4L1, CB2_4L2, CB2_4L3, CB2_4L4, CB2_4L5 +#define ___5_RIGHT_4_CB2___ CB2_4R1, CB2_4R2, CB2_4R3, CB2_4R4, CB2_4R5 + +#define ___13_BOTTOM_CB___ ___5_LEFT_4_CB___, \ + ___3_MIDDLE_4_CB___, \ + ___5_RIGHT_4_CB___ + +#define ___12_BOTTOM_CB___ ___5_LEFT_4_CB___, \ + ___2_MIDDLE_4_CB___, \ + ___5_RIGHT_4_CB___ + +#define ___13_BOTTOM_CB2___ ___5_LEFT_4_CB2___, \ + ___3_MIDDLE_4_CB2___, \ + ___5_RIGHT_4_CB2___ + +#define ___12_BOTTOM_CB2___ ___5_LEFT_4_CB2___, \ + ___2_MIDDLE_4_CB2___, \ + ___5_RIGHT_4_CB2___ + +/* BOTTOMS, sorta like THUMBS */ +/********************************************************************/ +// for xd75 or other layouts with a center column. +// #define ___5_MIDDLE_THUMBS___ CTL_BSPC, ALT_DEL, XMONAD_ESC, ALT_ENT, CTL_SPC +#define ___5_MIDDLE_THUMBS___ ALT_DEL, BSPC_TOPR, ESC_SYMB, ENT_NAV, SPC_TOPR + + // for a last, 4th thumb row. for rebound. + // backtab, home end, ----, pgup, pgdn, tab ? +#define ___13_BOTTOM___ \ + KC_BKTAB, HOME_END, KC_TAB, TT(_NAV), BSPC_SYMB, ESC_TOPR, \ + OSL(_LAYERS), \ + ENT_NAV, SPC_TOPR, KC_LEFT, KC_PGUP, KC_PGDN, KC_RIGHT + +#define ___13_BOTTOM_EN___ ___13_BOTTOM___ +#define ___13_BOTTOM_BP___ ___13_BOTTOM___ + +#define ___12_BOTTOM___ \ + KC_BKTAB, HOME_END, KC_TAB, TT(_NAV), BSPC_SYMB, ESC_TOPR, \ + ENT_NAV, SPC_TOPR, KC_LEFT, KC_PGUP, KC_PGDN, KC_RIGHT + +#define ___12_BOTTOM_EN___ ___12_BOTTOM___ +#define ___12_BOTTOM_BP___ ___12_BOTTOM___ + +// becomes the upper thumbs, the real 4th row if we throw away +// the number row at the top. +// this is the 4th row on the viterbi above the thumbrow if the number +// row is not used for numbers. +#define ___4_MIDDLE_4___ LSFT(KC_TAB), HOME_END, KC_PGDN, KC_TAB +#define ___4_MIDDLE_4b___ TAB_BKTAB, HOME_END, KC_PGDN, KC_PGUP + +/********************************************************************/ +/* The bottom row and thumbs as needed. */ +/********************************************************************/ +// Only the 14 and 15 wide bottom rows have bepo versions. +// all others are handled through macros. + +#define ___5_BOTTOM_LEFT___ ___X2___, KC_INS, KC_LEFT, KC_RIGHT +#define ___5_BOTTOM_RIGHT___ KC_UP, KC_DOWN, KC_BSLASH, ___X2___ + +#define ___5_BOTTOM_LEFT_EN___ ___5_BOTTOM_LEFT___ +#define ___5_BOTTOM_RIGHT_EN___ ___5_BOTTOM_RIGHT___ + +#define ___4_BOTTOM_LEFT___ LCTL(KC_V), KC_INS, KC_LEFT, KC_RIGHT +#define ___4_BOTTOM_RIGHT___ KC_UP, KC_DOWN, KC_BSLASH, LCTL(KC_C) + +#define ___4_BOTTOM_LEFT_EN___ ___4___ //___4_BOTTOM_LEFT___ +#define ___4_BOTTOM_RIGHT_EN___ ___4___ //___4_BOTTOM_RIGHT___ + +// the bottom rows for keyboards on bepo. +// bepo on bepo - not enough space to go around.... +#define ___5_BOTTOM_LEFT_BP___ _X_, BP_EACU, _X_, KC_LEFT, KC_RIGHT +#define ___5_BOTTOM_RIGHT_BP___ KC_UP, KC_DOWN, BP_BSLS, BP_CCED, BP_PERC + +#define ___4_BOTTOM_LEFT_BP___ LCTL(BP_C), BP_EACU, KC_LEFT, KC_RIGHT +#define ___4_BOTTOM_RIGHT_BP___ KC_UP, KC_DOWN, BP_BSLS, BP_CCED + +// for combo ref layers for kinesis, dactyl and kinesis. +#define ___5_BOTTOM_LEFT_FR___ ___X3___, KC_LEFT, KC_RIGHT +#define ___5_BOTTOM_RIGHT_FR___ KC_UP, KC_DOWN, BP_BSLS, ___X2___ + +#define ___4_BOTTOM_LEFT_CB___ ___4_LEFT_4_CB___ +#define ___4_BOTTOM_RIGHT_CB___ ___4_RIGHT_4_CB___ + +#define ___4_BOTTOM_LEFT_CB2___ ___4_LEFT_4_CB2___ +#define ___4_BOTTOM_RIGHT_CB2___ ___4_RIGHT_4_CB2___ + +#define ___5_BOTTOM_LEFT_CB___ ___5_LEFT_4_CB___ +#define ___5_BOTTOM_RIGHT_CB___ ___5_RIGHT_4_CB___ + +#define ___5_BOTTOM_LEFT_CB2___ ___5_LEFT_4_CB2___ +#define ___5_BOTTOM_RIGHT_CB2___ ___5_RIGHT_4_CB2___ + +// basically a 5th row in a 5x matrix. but maybe a 4th if there isnt a number row. +// need an en, because we a have a BP and we used it directly in the layout. +#define ___15_BOTTOM_EN___ ___5_BOTTOM_LEFT___, ___5_MIDDLE_THUMBS___, ___5_BOTTOM_RIGHT___ +#define ___15_BOTTOM_FR___ ___5_BOTTOM_LEFT_FR___, ___5_MIDDLE_THUMBS___, ___5_BOTTOM_RIGHT_FR___ +#define ___15_BOTTOM_BP___ ___5_BOTTOM_LEFT_BP___, ___5_MIDDLE_THUMBS___, ___5_BOTTOM_RIGHT_BP___ +#define ___15_BOTTOM_CB___ ___5_LEFT_4_CB___, ___5_MIDDLE_4_CB___, ___5_RIGHT_4_CB___ +#define ___15_BOTTOM_CB2___ ___5_LEFT_4_CB2___, ___5_MIDDLE_4_CB2___, ___5_RIGHT_4_CB2___ + +// need an en, because we a have a BP and we used it directly in the layout. +#define ___14_BOTTOM_EN___ ___5_BOTTOM_LEFT___, ___4_MIDDLE_4b___, ___5_BOTTOM_RIGHT___ +#define ___14_BOTTOM_FR___ ___5_BOTTOM_LEFT_FR___, ___4_MIDDLE_4b___, ___5_BOTTOM_RIGHT_FR___ +#define ___14_BOTTOM_BP___ ___5_BOTTOM_LEFT_BP___, ___4_MIDDLE_4b___, ___5_BOTTOM_RIGHT_BP___ +#define ___14_BOTTOM_CB___ ___5_LEFT_4_CB___, ___4_MIDDLE_4_CB___, ___5_RIGHT_4_CB___ +#define ___14_BOTTOM_CB2___ ___5_LEFT_4_CB2___, ___4_MIDDLE_4_CB2___, ___5_RIGHT_4_CB2___ + +#define ___14_THUMBS_BOTTOM___ ___X4___, ___6_ERGO_THUMBS___, ___X4___ diff --git a/users/ericgebhart/layers/keypads.h b/users/ericgebhart/layers/keypads.h new file mode 100644 index 00000000000..ab4100594d3 --- /dev/null +++ b/users/ericgebhart/layers/keypads.h @@ -0,0 +1,236 @@ +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ +/**********************************************_**********************************/ +/* KEYPADS. Mostly all in Bepo and Qwerty versions */ +/* 4 row Pads: */ +/* * The BEAKL 15,19 Number pad, for the left hand. */ +/* * The BEAKL Wi hex pad, Number pad. */ +/* * Regular Number pad, for the right hand. */ +/* * 12 Function pad. */ +/* 3 row pads: */ +/* keypad */ +/* function pad - 3x4, 12 function keys. */ +/* */ +/* LAYERS: */ +/* 4 Row: */ +/* * BEAKL with a compact FuncPad on the right. */ +/* * Funcpad on the left, keypad on the right. */ +/* 3 Row: */ +/* * Funcpad on the left, keypad on the right. */ +/* * BEAKL with a compact FuncPad on the right. */ +/* */ +/********************************************************************************/ + +// BEAKL 15 (numpad layer): +/* +=* ^%~ */ +/* ↹523: */ +/* - 7.104 */ +/* /698, */ + +/* BEAKL27 (numpad layer): */ +/* ↹+/\*= yxz */ +/* -523: ~FED */ +/* 7.104 {CBA} */ +/* ,698⏎ []% */ + +// Keypads +#define ___KEYPAD_BEAKL_L1___ ___, _PLUS, _SLSH, _ASTR, _EQL +#define ___KEYPAD_BEAKL_L2___ _MINS, _5, _2, _3, _COLN +#define ___KEYPAD_BEAKL_L3___ _7, _DOT, _1, _0, _4 +#define ___KEYPAD_BEAKL_L4___ _COMM, _6, _9, _8, _COMM + +#define ___6KEYPAD_BEAKL_L1___ ___, KEYPAD_BEAKL_L1 +#define ___6KEYPAD_BEAKL_L2___ ___, KEYPAD_BEAKL_L2 +#define ___6KEYPAD_BEAKL_L3___ KC_MINS, KEYPAD_BEAKL_L3 +#define ___6KEYPAD_BEAKL_L4___ ___, KEYPAD_BEAKL_L4 + +// if there's room. the top row on the right. +#define ___KEYPAD_BEAKL_R1___ ___, KC_CIRC, KC_PERC, KC_TILD, ___ + + + +/// parts is parts. + +#define ___KP_BKL_WI_L1___ _X_, HEX_A, HEX_B, HEX_C, _X_ +#define ___KP_BKL_WI_L2___ _X_, HEX_D, HEX_E, HEX_F, _X_ +#define ___KP_BKL_WI_L3___ _X_, L_BRKT, R_BRKT, DELIM, _X_ + +#define ___KP_BKL_WI_R1___ _SLSH, _4, _5, _9, _ASTR +#define ___KP_BKL_WI_R2___ _DOT , _1, _2, _3, _MINS +#define ___KP_BKL_WI_R3___ _COMM, _8, _6, _7, _PLUS + +#define ___KEYPAD_1___ ___, _7, _8, _9, _PSLS +#define ___KEYPAD_2___ _DOT, _4, _5, _6, _PAST +#define ___KEYPAD_3___ _0, _1, _2, _3, _PMNS + +#define ___KEYPAD_miryoku_1___ _LBRC, _7, _8, _9, _RBRC, ____5_ +#define ___KEYPAD_miryoku_2___ _SCLN, _4, _5, _6, _EQUAL, ____5_ +#define ___KEYPAD_miryoku_3___ _GRV, _1, _2, _3, _BSLS, ____5_ + +// 4 Row keypads +#define ___5KEYPAD_1___ _X_, ___KEYPAD_1___ +#define ___5KEYPAD_2___ _X_, ___KEYPAD_2___ +#define ___5KEYPAD_3___ _X_, ___KEYPAD_3___ +#define ___5KEYPAD_4___ _X_, _0, _DOT, _PEQL, _PPLS + +// Function pad. Same idea as above, but for function keys. + +// Funcpads are a bit weird. THey are KC values, so for +// this to work, there are BP_ versions of the F keys. +// I don't really use this, so maybe it'll go away in favor +// of something more useful. +// 4x3 and 3x4 funcpads. +// Only 4 columns, so the fifth can be added to either end. +#define ___4_FUNCPAD_1___ _F9, _F10, _F11, _F12 +#define ___4_FUNCPAD_2___ _F5, _F6, _F7, _F8 +#define ___4_FUNCPAD_3___ _F1, _F2, _F3, _F4 + +#define ___FUNCPAD_miryoku_1___ KC_F12, KC_F7, KC_F8, KC_F9, KC_PRINT_SCREEN +#define ___FUNCPAD_miryoku_2___ KC_F11, KC_F4, KC_F5, KC_F6, KC_SCROLL_LOCK +#define ___FUNCPAD_miryoku_3___ KC_F10, KC_F1, KC_F2, KC_F3, KC_PAUSE + +// For the left or right side. +#define ___5x4_FUNCPAD_T___ _TRNS, _F10, _F11, _F12, _TRNS +#define ___5x4_FUNCPAD_1___ _TRNS, _F7, _F8, _F9, _TRNS +#define ___5x4_FUNCPAD_2___ _TRNS, _F4, _F5, _F6, _TRNS +#define ___5x4_FUNCPAD_3___ _TRNS, _F1, _F2, _F3, _TRNS + + +/********************************************************************************/ +/* FUNCPAD and Keypad Layer chunks */ +/********************************************************************************/ +// beakl wi is a hexpad numpad. +/* Beakle Wi, Hexpad and keypad - needs a zero somewhere.*/ +#define CARTE_KP_BKL_WI \ + carte_de_map( " ABC /459* ", \ + " DEF .123- ", \ + " {}| ,867+ ") + +#define ___KP_BKL_WI_3x10___ \ + CHUNK_LANG_MAP(___KP_BKL_WI_L1___, ___KP_BKL_WI_R1___, \ + ___KP_BKL_WI_L2___, ___KP_BKL_WI_R2___, \ + ___KP_BKL_WI_L3___, ___KP_BKL_WI_R3___) + + +// BEAKL 15 and a f1-f12 funcpad +#define CARTE_KP_BKL_FUNC \ + carte_de_map(" 523: F9-12", \ + " -7.104 F5-8", \ + " /798, F1-4") + +#define ___KP_BKL_FUNC_3x10___ \ + CHUNK_LANG_MAP(___KEYPAD_BEAKL_L2___, _TRNS, ___4_FUNCPAD_1___, \ + ___KEYPAD_BEAKL_L3___, _TRNS, ___4_FUNCPAD_2___, \ + ___KEYPAD_BEAKL_L4___, _TRNS, ___4_FUNCPAD_3___) + +// BEAKL 15 and mods. +#define CARTE_KP_BKL_MODS \ + carte_de_map(" 523: SL Mods", \ + " -7.104 OS Mods", \ + " /798, Enter") + + +#define ___KP_BKL_MODS_3x10___ \ + CHUNK_LANG_MAP(___KEYPAD_BEAKL_L2___, _TRNS, ___SML_MODS_R___, \ + ___KEYPAD_BEAKL_L3___, ___OS_MODS_R___, \ + ___KEYPAD_BEAKL_L4___, _TRNS, _ENT, _ENT, _ENT, _TRNS) + +// 4 rows, BEAKL 15 and a f1-f12 funcpad +#define ___KP_BKL_FUNC_4x10___ \ + CHUNK_LANG_ROW(___KEYPAD_BEAKL_L1___, ___KEYPAD_BEAKL_R1___), \ + CHUNK_LANG_MAP(___KP_BKL_FUNC_3x10___) + +// 4 rows, funcpad, regular keypad on right. +#define ___FP_KP_4x10___ \ + CHUNK_LANG_ROW(___5x4_FUNCPAD_T___, ___5KEYPAD_1___), \ + CHUNK_LANG_MAP(___5x4_FUNCPAD_1___, ___5KEYPAD_2___, \ + ___5x4_FUNCPAD_2___, ___5KEYPAD_3___, \ + ___5x4_FUNCPAD_3___, ___5KEYPAD_4___) + +#define CARTE_FP_KP \ + carte_de_map(" F9-12 789+", \ + " F5-8 .456*", \ + " F1-4 0123-") + +// funcpad, regular keypad on right. +#define ___FP_KP_3x10___ \ + CHUNK_LANG_MAP(___4_FUNCPAD_1___, ___, ___5KEYPAD_1___, \ + ___4_FUNCPAD_2___, ___, ___5KEYPAD_2___, \ + ___4_FUNCPAD_3___, ___, ___5KEYPAD_3___) + +#define CARTE_KP_FP \ + carte_de_map(" 789+ F9-12", \ + " .456* F5-8", \ + " 0123- F1-4") +// regular keypad on left. +#define ___KP_FP_3x10___ \ + CHUNK_LANG_MAP(___5KEYPAD_1___, ___, ___4_FUNCPAD_1___, \ + ___5KEYPAD_2___, ___, ___4_FUNCPAD_2___, \ + ___5KEYPAD_3___, ___, ___4_FUNCPAD_3___) + +#define CARTE_MODS_KP \ + carte_de_map(" SMods 789+", \ + " OSMods .456*", \ + " F1-4 0123-") + +// funcpad, regular keypad on right. +#define ___MODS_KP_3x10___ \ + CHUNK_LANG_MAP(___SML_MODS_L___, ___, ___5KEYPAD_1___, \ + ___OS_MODS_L___, ___5KEYPAD_2___, \ + ___5___, ___5KEYPAD_3___) + +#define CARTE_KP_MODS \ + carte_de_map(" 789+ SMods", \ + " .456* OSMods", \ + " 0123- ") + +// regular keypad on left. +#define ___KP_MODS_3x10___ \ + CHUNK_LANG_MAP(___5KEYPAD_1___, ___, ___SML_MODS_R___, \ + ___5KEYPAD_2___, ___OS_MODS_L___, \ + ___5KEYPAD_3___, ___, ___4___) + +#define CARTE_FUN \ + carte_de_map(" F9-F12 SMods", \ + " F5-F8 OSMods", \ + " F1-F4 ") + +#define ___FUN_3x10___ \ + CHUNK_LANG_MAP(___4_FUNCPAD_1___, ___, ___, ___SML_MODS_R___, \ + ___4_FUNCPAD_2___, ___, ___OS_MODS_R___, \ + ___4_FUNCPAD_3___, ___, ___5___) + +#define CARTE_FUN_MIRYOKU \ + carte_de_map("F12 F7-F9 prt SMods", \ + "F11 F4-F6 scr OSMods", \ + "F10 F1-F3 pse ") + +#define ___FP_MIRYOKU_3x10___ \ + ___FUNCPAD_miryoku_1___, ___, ___SML_MODS_R___, \ + ___FUNCPAD_miryoku_2___, ___OS_MODS_R___, \ + ___FUNCPAD_miryoku_3___, ___5___ + +// wants . and 0 on left thumb. +#define CARTE_KP_MIRYOKU \ + carte_de_map(" [789]", \ + " ;456=", \ + " `123\\") + +#define ___KP_MIRYOKU_3x10___ \ + CHUNK_LANG_MAP(___KEYPAD_miryoku_1___, \ + ___KEYPAD_miryoku_2___, \ + ___KEYPAD_miryoku_3___) diff --git a/users/ericgebhart/layers/layers.h b/users/ericgebhart/layers/layers.h new file mode 100755 index 00000000000..0f09d0cfc3e --- /dev/null +++ b/users/ericgebhart/layers/layers.h @@ -0,0 +1,112 @@ +#pragma once +/* + Copyright 2018 Eric Gebhart + + 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 + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include "keycodes.h" +/*********************************************************************/ +/* Non-Base Layer Definitions. */ +/* */ +/* Keypads, sympads, funcpads, symbols, RGB, Layers, Controls, etc. */ +/* Qwerty and Bepo versions exist as needed. */ +/* */ +/* This file defines every auxillary layer I use on every keyboard */ +/* Ergodox, keebio/viterbi, xd75, rebound, crkbd, morpho, dactyl,.. */ +/*********************************************************************/ +/********************************************************************************/ +/* The following Transient/Non-Base Layers are provided within. */ +/* Each layer is named with the size of Keymatrix it has entries for. */ +/* 3x10 are usual for these. I had 3x12's but I didn't need the edges really. */ +/* It was an attempt to accommodate Bepo which is 13 columns wide. */ +/* Even in a 3x12 Bepo is wonky. So I gave up on it. I also gave up on 4 row */ +/* layers, I really want my keys in that 3x5 space. Everything on the edges can */ +/* stay as it is. Splitting is managed in the macros as */ +/* needed. BP indicates the Bepo equivalent to the Qwerty layer when needed. */ +/********************************************************************************/ +/* */ +/* Explore below to see what they all are. */ +/* Naming gives the sizes of things, a prefix number is the length. */ +/* BP is the bepo version of things. */ +/* BKL is the beakl 15 version of a layout or chunk. */ +/* C on the end of a name means its a compact version of something. */ +/* Compact meaning for use on a 3 row layout. */ +/* */ +/* TOPROWS - numbers, symbols, functions, all on one layer. */ +/* ___TOPROWS_3x10___ */ +/* ___TOPROWS_BP_3x10___ */ +/* */ +/* KEYPADS/FUNCPADS. */ +/* ___KP_C_3x10___ */ +/* ___KP_C_BP_3x10___ */ +/* ___KP_C_BKL_FUNC_3x10___ -- BEAKL key/func pads. */ +/* ___KP_C_BKL_FUNC_BP_3x10___ */ +/* */ +/* SYMBOLS -Beakl or Beakl extended */ +/* ___SYMB_BEAKL_3x10___ */ +/* ___SYMB_BEAKL_BP_3x10___ */ +/* */ +/* Beakl extended symbol layer with additional corner symbols. */ +/* For use with non-beakl base layers. */ +/* ___SYMB_BEAKLA_3x10___ */ +/* ___SYMB_BEAKLA_BP_3x10___ */ +/* For use with vi bindings optimized */ +/* ___SYMB_BEAKLB_3x10___ */ +/* ___SYMB_BEAKLB_BP_3x10___ */ +/* */ +/* NAVIGATION */ +/* ___NAV_3x10___ */ +/* */ +/* CONTROLS */ +/* ___RGB_3x10___ */ +/* ___ADJUST_3x10___ */ + /* ___LAYERS_3x10___ */ + /********************************************************************************/ + /*********************************************************************/ + /* XXXXXX Layer chunk -- These are the final layers. */ + /* */ +/* Each section defines the necessary pieces to create a layer. */ +/* It builds them up into consistently shaped lists for the layout */ +/* wrapper. */ +/* */ +/* Each Section ends with a _Layer Chunk_. This is so the */ +/* layer can be easily given to the Layout Wrapper macros which */ +/* takes a list of keys in lengths of 2x3x5, 2x3x6, 2x4x5, or 2x4x6. */ +/* */ +/* All of my keyboard definitions use these same chunks with similar */ +/* macros. The differences between keyboards are all managed in the */ +/* macro. Here we just have nice rectangular sets of keys to */ +/* complete a layout. */ +/*********************************************************************/ + +// these are needed so that groups of defined keys will unravel +// into their values. The Base layers don't need them becuse the +// keys are explicit in their passing. Here, chunks are made for +// convenience and reuse. They don't unravel unless we wrap these +// in var args. +#define CHUNK_LANG_MAP(...) LANG_MAP(__VA_ARGS__) +#define CHUNK_LANG_ROW(...) LANG_ROW(__VA_ARGS__) + +// 5 wide, with the two shot control. +#define ___OS_MODS_L___ OS_LGUI, OS_LALT, OS_LCTL, OS_LSFT, TS_LCTL +#define ___OS_MODS_R___ TS_RCTL, OS_RSFT, OS_RCTL, OS_RALT, OS_RGUI +// 4 wide. +#define ___SML_MODS_L___ SMLM_LGUI, SMLM_LALT, SMLM_LCTL, SMLM_LSFT +#define ___SML_MODS_R___ SMLM_RSFT, SMLM_RCTL, SMLM_RALT, SMLM_RGUI + +#include "keypads.h" +#include "nav.h" +#include "symbols.h" +#include "toprows.h" +#include "utility.h" diff --git a/users/ericgebhart/layers/nav.h b/users/ericgebhart/layers/nav.h new file mode 100644 index 00000000000..97243872e27 --- /dev/null +++ b/users/ericgebhart/layers/nav.h @@ -0,0 +1,199 @@ +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ +/********************************************************************************/ +/* NAVIGATION - MOUSE, Scroll, Buttons, Arrows, Tab, Home, page up/down, End */ +/* Navigation layers: */ +/* 3 row Layer */ +/* 4 Row Layer with repeated and swapped VI arrows, and Scroll wheel. */ +/********************************************************************************/ +/* */ +/* Navigation layer with optional 4th Row.... */ +/* */ +/* M = Mouse */ +/* B = Button */ +/* W = Wheel */ +/* AC = Acceleration */ +/* CCCV = Tap -> Ctrl-C, hold for double tap duration -> Ctrl-V */ +/* CTCN = Tap -> Ctrl-T, hold for double tap duration -> Ctrl-N */ +/* CWCQ = Tap -> Ctrl-W, hold for double tap duration -> Ctrl-Q */ +/* HOME = TAB & PGDN */ +/* END = BKTAB & PGUP -- See combos. */ +/* */ +/* MB5 MB4 MB3 MB2 MB1 MAC0 | CTCN MB1 MB2 MB3 MB4 MB5 */ +/* TAB MLeft MDown MUp MRight MAC1 | CCCV Left Down UP Right TAB */ +/* WLeft WDown WUp WRight MAC2 | CWCQ TAB PGDN PGUP BKTAB */ +/* */ +/* Left Down Up Right CCCV | CCCV MLeft MDown MUp MRight */ +/* */ +/********************************************************************************/ + +#ifdef MOUSEKEY_ENABLE +#define ___MOUSE_LDUR___ KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R +#define ___MWHEEL_LDUR___ KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R +// really BTN 1, 2, 3, 8, 9 - according to xev. +#define ___MOUSE_BTNS_R___ KC_BTN1, KC_BTN3, KC_BTN2, KC_BTN4, KC_BTN5 +#define ___4MOUSE_BTNS_R___ KC_BTN1, KC_BTN3, KC_BTN2, KC_BTN4 +#define ___3MOUSE_BTNS_R___ KC_BTN1, KC_BTN3, KC_BTN2 +// really BTN 9, 8, 3, 2, 1 - according to xev +#define ___4MOUSE_BTNS_L___ KC_BTN4, KC_BTN2, KC_BTN3, KC_BTN1 +#define ___MOUSE_BTNS_L___ KC_BTN5, KC_BTN4, KC_BTN2, KC_BTN3, KC_BTN1 +#define ___MOUSE_ACCL_012___ KC_ACL0, KC_ACL1, KC_ACL2 +#define ___MACCL___ ___MOUSE_ACCL_012___ +#endif + +#define ___VI_ARROWS___ KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT +#define ___HOME_PGDN_PGUP_END___ KC_HOME, KC_PGDN, KC_PGUP, KC_END +#define ___TAB_PGDN_PGUP_BKTAB___ KC_TAB, KC_PGDN, KC_PGUP, KC_BKTAB +// home and end are combos. tab/pgdn = home, bktab/pgup = end. + +#define ___REDO_CUT_COPY_PASTE_UNDO___ S_REDO, S_CUT, S_COPY, S_PASTE, S_UNDO + +#ifdef MOUSEKEY_ENABLE +#define ___NAV_La_1___ ___SML_MODS_L___, KC_ACL0 +#define ___NAV_L_1___ ___4MOUSE_BTNS_L___, KC_ACL0 +#define ___NAV_L_2___ ___MOUSE_LDUR___, KC_ACL1 +#define ___NAV_L_3___ ___MWHEEL_LDUR___, KC_ACL2 +#define ___NAV_L_4___ ___VI_ARROWS___, KC_CCCV + +#define ___NAV_R_1___ KC_CTCN, ___4MOUSE_BTNS_R___ +#define ___NAV_R_4___ KC_CCCV, ___MOUSE_LDUR___ + +#else + +#define ___NAV_La_1___ ___NAV_L_1___ +#define ___NAV_L_1___ ___OS_MODS_L___ +#define ___NAV_L_2___ ___SML_MODS_L___, ___ +#define ___NAV_L_3___ ___5___ +#define ___NAV_L_4___ ___VI_ARROWS___, KC_CCCV + +#define ___NAV_R_1___ KC_CTCN, ___SML_MODS_R___ +#define ___NAV_R_4___ KC_CCCV, ___4___ + +#endif // end mousekey + +#define ___NAV_R_2___ KC_CCCV, ___VI_ARROWS___ +#define ___NAV_R_3___ KC_CWCQ, ___HOME_PGDN_PGUP_END___ +#define ___NAV_Ra_3___ KC_CWCQ, ___TAB_PGDN_PGUP_BKTAB___ + +#ifdef MOUSEKEY_ENABLE + +#define ___6NAV_L_1___ ___MOUSE_BTNS_L___, KC_ACL0 +#define ___6NAV_L_2___ TAB_BKTAB, ___MOUSE_LDUR___, KC_ACL1 +#define ___6NAV_L_3___ ___, ___MWHEEL_LDUR___, KC_ACL2 +#define ___6NAV_L_4___ ___, ___VI_ARROWS___, KC_CCCV + +#define ___6NAV_R_1___ KC_CTCN, ___MOUSE_BTNS_R___ +#define ___6NAV_R_4___ KC_CCCV, ___MOUSE_LDUR___, ___ + +#else + +#define ___6NAV_L_1___ ___6___ +#define ___6NAV_L_2___ TAB_BKTAB, ___SML_MODS_L___, ___ + +#define ___6NAV_L_3___ ___, ___5___ +#define ___6NAV_L_4___ ___, ___VI_ARROWS___, KC_CCCV + +#define ___6NAV_R_1___ KC_CTCN, ___SML_MODS_R___ +#define ___6NAV_R_4___ KC_CCCV, ___4___, ___ + +#endif // end mousekey + +#define ___6NAV_R_2___ KC_CCCV, ___VI_ARROWS___, TAB_BKTAB +#define ___6NAV_R_3___ KC_CWCQ, ___HOME_PGDN_PGUP_END___, ___ + +// compact. 3x10 per layer. +#define ___10_NAV_1a___ ___NAV_La_1___, ___NAV_R_1___ +#define ___10_NAV_1___ ___NAV_L_1___, ___NAV_R_1___ +#define ___10_NAV_2___ ___NAV_L_2___, ___NAV_R_2___ +#define ___10_NAV_3___ ___NAV_L_3___, ___NAV_Ra_3___ + +// designed without mouse, mods on left. +#define ___NAVnm_La_1___ ___NAV_L_1___ +#define ___NAVnm_L_1___ ___SML_MODS_L___ +#define ___NAVnm_L_2___ ___OS_MODS_L___, ___ +#ifdef MOUSEKEY_ENABLE +#define ___NAVnm_L_3___ ___2___, SML_NAVm, ___2___ // get to mouse layer if enabled. +#else +#define ___NAVnm_L_3___ ___5___ +#endif + +#define ___10_NAVnm_1___ ___SML_MODS_L___, ___, ___NAV_R_1___ +#define ___10_NAVnm_2___ ___OS_MODS_L___, ___NAV_R_2___ +#define ___10_NAVnm_3___ ___NAVnm_L_3___, ___NAV_R_3___ + +#ifdef MOUSEKEY_ENABLE +// Mouse layer only. mods on right. +#define ___10_NAVm_1___ ___NAV_L_1___, ___NAV_R_1___ +#define ___10_NAVm_2___ ___NAV_L_2___, ___NAV_R_2___ +#define ___10_NAVm_3___ ___NAV_L_3___, ___NAV_R_3___ +#endif + +/********************************************************************************/ +/* The Navigation LAYER Chunks */ +/********************************************************************************/ +// A Navigation Layer +#define CARTE_NAV \ + carte_de_map("54321 0 ctn 12345", \ + " ldur 1 ccv ldur", \ + " ldur 2 cwq tdubt") + +#define CARTE_NAVA \ + carte_de_map(" gacs 0 ctn 12345", \ + " ldur 1 ccv ldur", \ + " ldur 2 cwq tdubt") + +#define CARTE_NAVnm \ + carte_de_map(" gacsc2 ctn cscag ", \ + " gacs ccv ldur", \ + " __M_ cwq tdubt") + +// currently the same as NAVA +#define CARTE_NAVm \ + carte_de_map(" gacs 0 ctn 12345", \ + " ldur 1 ccv ldur", \ + " ldur 2 cwq tdubt") + +#define CARTE_NAV_miryoku \ + carte_de_map(" rdo ccp undo", \ + " Caps ldur", \ + " Ins HDUE") + +#define CARTE_NAVm_miryoku \ + carte_de_map(" rdo ccp undo", \ + " ldur", \ + " ldur") + + +#ifdef MOUSEKEY_ENABLE +#define ___NAVm_3x10___ ___10_NAVm_1___, ___10_NAVm_2___, ___10_NAVm_3___ +#endif + +#define ___NAVnm_3x10___ ___10_NAVnm_1___, ___10_NAVnm_2___, ___10_NAVnm_3___ +#define ___NAVA_3x10___ ___10_NAV_1a___, ___10_NAV_2___, ___10_NAV_3___ +#define ___NAV_3x10___ ___10_NAV_1___, ___10_NAV_2___, ___10_NAV_3___ +#define ___NAV_3x12___ ___12_NAV_1___, ___12_NAV_2___, ___12_NAV_3___ +#define ___NAV_miryoku___ \ + ___5___, ___redo_cut_copy_paste_undo___, \ + ___5___, KC_CAPS, ___VI_ARROWS___, \ + ___5___, KC_INSERT, ___HOME_PGDN_PGUP_END___ + +#ifdef MOUSEKEY_ENABLE +#define ___NAVm_miryoku___ \ + ___5___, ___redo_cut_copy_paste_undo___, \ + ___5___, ___, ___MOUSE_LDUR___, \ + ___5___, ___, ___MWHEEL_LDUR___, +#endif diff --git a/users/ericgebhart/layers/symbols.h b/users/ericgebhart/layers/symbols.h new file mode 100644 index 00000000000..272bd9b850b --- /dev/null +++ b/users/ericgebhart/layers/symbols.h @@ -0,0 +1,225 @@ +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ +/******************************************************************/ +/* */ +/* Symbol layers: */ +/* */ +/* The BEAKL15 Symbol layer with or without additions. */ +/* */ +/* There is the offical beakl symbol layer, an extended symbol */ +/* layer which is expanded with: !?@`'/-;. */ +/* */ +/* Placing these 8 keys in the pinky and index corners */ +/* at the edges of the, 3x3, BEAKL home Region. */ +/* */ +/* Beakl has these keys in it's base layer which isn't the case */ +/* for other layouts like dvorak, colemak, etc. */ +/* */ +/* The third layer moves /:? to more accessible places. */ +/* to make vi keybindings more accessible. */ +/* */ +/* Note that there are 2 widths. 12 and 10. The wider layer adds */ +/* - and ; to the middle row edges. */ +/* */ +/* Official: */ +/* <$> [_] */ +/* - \(")# %{=}| ; */ +/* :*+ &^~ */ +/* */ +/* not yet implemented */ +/* BEAKL27 (punctuation layer): */ +/* ↹@$#↹ ~^` */ +/* ↹<=> [_] */ +/* \(-)+ %{;}! */ +/* *:/⏎ |~& */ +/* */ +/* */ +/* BEAKL Extended symbol layer */ +/* Expanded with: !?@`'/-; */ +/* */ +/* A: */ +/* `<$>' ?[_]- */ +/* - \(")# %{=}| ; */ +/* @:*+; !&^~/ */ +/* */ +/* Optimized for Vi. */ +/* B: */ +/* */ +/* `<$>' ?[_]- */ +/* - \(")# !{:}/ ; */ +/* @=*+; %&^~| */ +/* */ +/* C: */ +/* */ +/* `<$>' ?[_-] */ +/* - \("#) !{:/} ; */ +/* @=*+; %&^~| */ +/* */ +/* */ +/* Both ; and ' could have found their dvorak positions. Analysis showed */ +/* that only caused pinky overuse. Rotating the symbols around Put better */ +/* keys on the index finger which showed a huge improvement in efficiency. */ +/* The same is true of the exclamation point. */ +/* */ + +/* Beakl Wi */ + +/* This Symbol layer does not improve on the above extended symbol */ +/* layers in my opinon, for my usage. */ + +/* The original symbol was the Left side with defined/but/transparent */ +/* right. The regex layer was the opposite. I combined them into one, I am */ +/* not sure of the functionality that might be lost due to that, but they */ +/* are defined as original sans extra tap dance functions. It would be easy to */ +/* make two layers with transparent right and left. There is duplication */ +/* of | and *. */ + +/* Symbols on the left */ +/* .*&+ */ +/* ?!/| */ +/* <>%@ */ + +// regex on the right +/* *[^] */ +/* ?($) */ +/* |{#} */ + +// Altogether +/* .*&+ *[^] */ +/* ?!/| ?($) */ +/* <>%@ |{#} */ +/******************************************************************/ + +// Left +#define ___SB_L1___ _OCLTGT, _DLR, _GT +#define ___SB_L2___ _BSLS, _OCPRN, _OCDQUO, _RPRN, _HASH +#define ___SB_L2c___ _BSLS, _OCPRN, _OCDQUO, _HASH, _RPRN +#define ___SB_L3___ _COLN, _ASTR, _PLUS + +// Right +#define ___SB_R1___ _OCBRC, _UNDS, _RBRC +#define ___SB_R1c___ _OCBRC, _UNDS, _MINS +#define ___SB_R2___ _PERC, _OCCBR, _EQL, _RCBR, _PIPE +#define ___SB_R3___ _AMPR, _CIRC_ND, _TILD_ND + +// a and b... left and right. +#define ___SB_L3b___ _EQL, _ASTR, _PLUS + +#define ___SB_R2a___ _PERC, _OCCBR, _EXLM, _RCBR, _PIPE +#define ___SB_R2b___ _EXLM, _OCCBR, _COLN, _RCBR, _SLSH +#define ___SB_R2c___ _EXLM, _OCCBR, _COLN, _SLSH, _RCBR + +// --------------------------- +// --------------------------- +#define CARTE_SYMB_BEAKL \ + carte_de_map(" <$> [_] ", \ + "-\\(\")# %{=}|;", \ + " :*+ &^~ ") + +#define ___SYMB_BEAKL_3x10___ \ + CHUNK_LANG_MAP(_TRNS, ___SB_L1___, _TRNS, _TRNS, ___SB_R1___, _TRNS, \ + ___SB_L2___, ___SB_R2___, \ + _TRNS, ___SB_L3___, _TRNS, _TRNS, ___SB_R3___, _TRNS) + +// --------------------------- +// A: Extended. +#define CARTE_SYMB_BEAKLA \ + carte_de_map(" `<$>' ?[_]-", \ + " -\\(\")# %{:}|;", \ + " @=*+; !&^~/") + +#define ___SYMB_BEAKLA_3x10___ \ + CHUNK_LANG_MAP(_OCGRV, ___SB_L1___, _OCQUOT, _QUES, ___SB_R1___, _MINS, \ + ___SB_L2___, ___SB_R2a___, \ + _AT, ___SB_L3___, _SCLN, _EXLM, ___SB_R3___, _SLSH) + +// --------------------------- +// B: Extended & Vi +#define CARTE_SYMB_BEAKLB \ + carte_de_map(" `<$>' ?[_]-", \ + " -\\(\")# !{:}/;", \ + " @=*+; %&^~|") + +#define ___SYMB_BEAKLB_3x10___ \ + CHUNK_LANG_MAP(_OCGRV, ___SB_L1___, _OCQUOT, _QUES, ___SB_R1___, _MINS, \ + ___SB_L2___, ___SB_R2b___, \ + _AT, ___SB_L3b___, _SCLN, _PERC, ___SB_R3___, _PIPE) + +// --------------------------- +// C: Extended & Vi, move closing braces to pinky, seldom used. +// because of tap hold - open_openclose feature. +// Also emacs which mostly closes them. +#define CARTE_SYMB_BEAKLC \ + carte_de_map(" `<$>' ?[_-]", \ + " -\\(\"#) !{:/};", \ + " @=*+; %&^~|") + +#define ___SYMB_BEAKLC_3x10___ \ + CHUNK_LANG_MAP(_OCGRV, ___SB_L1___, _OCQUOT, _QUES, ___SB_R1c___, _RBRC, \ + ___SB_L2c___, ___SB_R2c___, \ + _AT, ___SB_L3b___, _SCLN, _PERC, ___SB_R3___, _PIPE) + +// wants ( and ) on the left thumb. +#define CARTE_SYMB_MIRYOKU \ + carte_de_map(" {&.(} ", \ + " :$%^+ ", \ + " ~!@#| ") + +#define ___SYMB_MIRYOKU_3x10___ \ + CHUNK_LANG_MAP(_OCCBR, _AMPR, _DOT, _OCPRN, _RCBR, ____5_, \ + _COLN, _DLR, _PERC, _CIRC_ND, _PLUS, ____5_, \ + _TILD_ND, _EXLM, _AT, _HASH, _PIPE, ____5_) + +// --------------------------- +// WI: the Beakl Wi definition. +#define ___SYMB_BKL_WI_L1___ ___, _DOT, _ASTR, _AMPR, _PLUS +#define ___SYMB_BKL_WI_L2___ ___, _QUES, _EXLM, _SLSH, _PIPE +#define ___SYMB_BKL_WI_L3___ ___, _LT, _GT, _PERC, _AT + +#define ___SYMB_BKL_WI_R1___ _ASTR, _OCBRC, _CIRC_ND, _RBRC, ___ +#define ___SYMB_BKL_WI_R2___ _QUES, _OCPRN, _DLR , _RPRN, ___ +#define ___SYMB_BKL_WI_R3___ _PIPE, _OCCBR, _HASH, _RCBR, ___ + +#define CARTE_SYMB_BEAKLWI \ + carte_de_map(" .*&+ *[^] ", \ + " ?!/| ?($) ", \ + " <>%@ |{#} ") + +#define ___SYMB_BEAKL_WI_3x10___ \ + CHUNK_LANG_MAP(___SYMB_BKL_WI_L1___, ___SYMB_BKL_WI_R1___, \ + ___SYMB_BKL_WI_L2___, ___SYMB_BKL_WI_R2___, \ + ___SYMB_BKL_WI_L3___, ___SYMB_BKL_WI_R3___) + +// --------------------------- +// Neo symbol layer +#define ___SYMB_NEO_L1___ ___, _OCDQUOT, _UNDS, _OCLBRC, _RBRC, _CIRC_ND +#define ___SYMB_NEO_L2___ ___, _SLSH, _MINS, _OCLCBR, _RCBR, _ASTR +#define ___SYMB_NEO_L3___ ___, _HASH, _DLR, _PIPE, _TILD_ND, _OCGRV + +#define ___SYMB_NEO_R1___ _EXLM, _LT, _GT, _EQL, _AMPR +#define ___SYMB_NEO_R2___ _QUES, _OCPRN, _RPRN , _QUOT, _COLN +#define ___SYMB_NEO_R3___ _PLUS, _PERC, _BSLS, _AT, ___ + +#define CARTE_SYMB_NEO \ + carte_de_map("\"_[]^ !<>=&", \ + "/-{}* ?()':", \ + "#$|~` +%\@") + +#define ___SYMB_NEO_3x10___ \ + CHUNK_LANG_MAP(___SYMB_NEO_L1___, ___SYMB_NEO_R1___, \ + ___SYMB_NEO_L2___, ___SYMB_NEO_R2___, \ + ___SYMB_NEO_L3___, ___SYMB_NEO_R3___) diff --git a/users/ericgebhart/layers/thumbs.h b/users/ericgebhart/layers/thumbs.h new file mode 100644 index 00000000000..a78b3a95329 --- /dev/null +++ b/users/ericgebhart/layers/thumbs.h @@ -0,0 +1,276 @@ +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ + +// Split thumbs. + +// Split these down the middle to think in left and right hand. +// Top row on kinesis, ergodox, etc. +#define ___THUMBS_1___ \ + ___X___ , MO_ADJUST, MO_LAYERS, OSL(LN_TOPROWS) + +// Middle row on kinesis, ergodox, etc. +#define ___THUMBS_2___ HOME_END, KC_PGUP + +#define ___4_THUMBS_1___ ___X___, KC_HOME, KC_PGUP, OSL(LN_TOPROWS) +#define ___6_THUMBS_2___ KC_LSFT, KC_BKTAB, KC_END, KC_PGDN, KC_TAB, KC_RSFT +#define ___6_THUMBS_2_CB___ KC_LSFT, KC_BKTAB, KC_END, KC_PGDN, KC_TAB, KC_RSFT + +#define ___6_THUMBS_2a___ BSPC_SYMB, ESC_TOPR, ESC_TOPR, ENT_NAV, ENT_NAV, SPC_TOPR +#define ___6_THUMBS_2a_CB___ BSPC_SYMB, ESC_TOPR, ESC_TOPR, ENT_NAV, ENT_NAV, SPC_TOPR + + +// This has become the default center group of thumbs for all +// So here's the beakl wi thumbs adapted to this combined layer system. +// +#define ___6_ERGO_THUMBS_WI___ \ + ESC_TOPR, I_SYMB, TAB_NUM, ENT_NAV, SPC_SYMB, BSPC_NAV + +// Like my other thumb rows. With an I. +#define ___6_ERGO_THUMBS_WIa___ \ + BSPC_NAV, I_SYMB, ESC_TOPR, ENT_NAV, SPC_TOPR, TAB_NUM + +#define ___6_ERGO_THUMBS_layers___ \ + SML_NAV, BSPC_SYMB, ESC_TOPR, ENT_NAV, SPC_TOPR, ACCCENTS_RALT + +#define ___6_ERGO_THUMBS_COMBO___ CB_TH1, CB_TH2, CB_TH3, CB_TH4, CB_TH5, CB_TH6 +#define ___6_ERGO_THUMBS_COMBO2___ CB2_TH1, CB2_TH2, CB2_TH3, CB2_TH4, CB2_TH5, CB2_TH6 + +// Transparent. +#define ___6_ERGO_THUMBS_trns___ ___6___ + +// A place to test stuff. +#define ___6_ERGO_THUMBS_tst___ \ + TT_KEYPAD, BSPC_SYMB, ESC_TOPR, ENT_NAV, SPC_TOPR, KC_XM_PORD + +#define ___6_ERGO_THUMBS_mods___ \ + ALT_DEL, CTL_BSPC, GUI_ESC, ALT_ENT, CTL_SPC, XC_XM_PORD + +#define ___6_ERGO_THUMBS_mod_layers___ \ + ALT_DEL, BSPC_SYMB, GUI_ESC, CTL_ENT, SPC_TOPR, ACCENTS_RALT + +#define ___6_ERGO_THUMBS_mod_layers_nav___ \ + ALT_DEL, BSPC_SYMB, GUI_ESC, ENT_NAV, SPC_TOPR, ACCENTS_RALT + +// for keymaps that need a letter on the thumb. +#define ___6_ERGO_THUMBS_left_letter___ \ + BSPC_ALT, TH_LTR_SYM, GUI_ESC, ENT_NAV, SPC_TOPR, KC_TAB + +// an attempt at an approximation of the HD thumbs as they are on the site. +// really should be expected to be a starting point that doesnt strand you. +#define ___6_ERGO_THUMBS_hd___ \ + BSPC_ALT, TH_LTR_SYM, GUI_ESC, ENT_NAV, SPC_TOPR, ACCENTS_CTL +#define ___6_ERGO_THUMBS_hd_a___ \ + OS_LSHIFT, TH_LTR_SYM, GUI_ESC, BSPC_ALT, SPC_TOPR, ACCENTS_CTL +#define ___6_ERGO_THUMBS_hd_simple___ \ + MO_SYMB, THUMB_LETTER, KC_ENT, KC_BSPC, KC_SPC, MO_TOPROWS +/* HD dash has thumbs of ,; and .: */ +#define ___6_ERGO_THUMBS_hd_dash___ \ + LANG_KC(TL_COMM), TL_DOT_SYMB, GUI_ESC, ENT_NAV, SPC_TOPR, BSPC_NUM + +#define ___6_ERGO_THUMBS_media___ ___3___, ___STOP_PLAY_MUTE___ +#define ___6_ERGO_THUMBS_mouse___ ___3___, ___3MOUSE_BTNS_R___ +#define ___6_ERGO_THUMBS_keypad___ \ + LANG_KC(_DOT), LANG_KC(_0), LANG_KC(_MINS), ___3___ +#define ___6_ERGO_THUMBS_symb___ \ + LANG_KC(_OCPRN), LANG_KC(_RPRN), LANG_KC(_UNDS), ___3___ + +// miryoku thumbs, either its toprows or keypad for numbers. +#define ___6_ERGO_THUMBS_miryoku_tr___ \ + ESC_MEDIA, SPACE_NAV, TAB_NAVM, ENT_SYM, BSPC_TOPR, DEL_FUN +#define ___6_ERGO_THUMBS_miryoku___ \ + ESC_MEDIA, SPACE_NAV, TAB_NAVM, ENT_SYM, BSPC_NUM, DEL_FUN +// lose the tab key, put a letter where space was. +// move space to the right side, put backspace where tab was. +#define ___6_ERGO_THUMBS_miryoku_ltr___ \ + ESC_MEDIA, TH_LTR_NAV, BSPC_NAVm, ENT_SYM, SPC_NUM, DEL_FUN +#define ___6_ERGO_THUMBS_miryoku_tr_ltr___ \ + ESC_MEDIA, TH_LTR_NAV, BSPC_NAVm, ENT_SYM, SPC_TOPR, DEL_FUN + +#define ___6_ERGO_THUMBS_miryoku_ltr_tab___ \ + BSPC_MEDIA, TH_LTR_NAV, TAB_NAVM, ENT_SYM, SPC_NUM, DEL_FUN + +#define ___6_ERGO_THUMBS_miryoku_tr_ltr_tab___ \ + BSPC_MEDIA, TH_LTR_NAV, TAB_NAVM, ENT_SYM, SPC_TOPR, DEL_FUN + +// Give the right symbol suffix by the value of THUMBS_ARE +// Basically we choose the right cluster here, so the layout +// level doesn't know or care. +// +// ___foo --> ___foo_WI___, or ___foo_WIa___, or ___foo_def___. +// THUMBS_ARE = WI, or WIa, or DEFAULT, TEST, TRNS, MOD_LAYERS, etc. +// the value of THUMB_LETTER is the key used when needed. +#define THUMB_EXT CAT(THUMBS_ARE, _EXT) +#define WI_EXT _WI___ +#define WIa_EXT _WIa___ +#define DEFAULT_EXT _mod_layers_nav___ //change this to change the default. +#define TEST_EXT _tst___ +#define TRNS_EXT _trns___ +#define MODS_EXT _mods___ +#define LAYERS_EXT _layers___ +#define MODS_LAYERS_EXT _mod_layers___ +#define MODS_LAYERS_NAV_EXT _mod_layers_nav___ +#define MIRYOKU_EXT _miryoku___ +#define MIRYOKU_TR_EXT _miryoku_tr___ +#define MIRYOKU_LTR_EXT _miryoku_ltr___ // miryoku versions with a letter +#define MIRYOKU_LTR_TAB_EXT _miryoku_ltr_tab___ +#define MIRYOKU_TR_LTR_EXT _miryoku_tr_ltr___ +#define MIRYOKU_TR_LTR_TAB_EXT _miryoku_tr_ltr_tab___ +#define TH_LTR_EXT _left_letter___ // takes a letter for the left thumb. +#define HD_DASH_EXT _hd_dash___ +#define HD_EXT _hd___ // takes a letter for the left thumb. +#define HDA_EXT _hd_a___ // relocate backspace +#define HD_SIMPLE_EXT _hd_simple___ // no LTs or MT´s. +// for the function layers +#define COMBO_EXT _COMBO___ +#define COMBO2_EXT _COMBO2___ +#define MEDIA_THUMBS_EXT _media___ +#define MOUSE_THUMBS_EXT _mouse___ +#define KEYPAD_THUMBS_EXT _keypad___ +#define SYMB_THUMBS_EXT _symb___ + +#define ___6_ERGO_THUMBS___ CAT2(___6_ERGO_THUMBS, THUMB_EXT) +// for the kyria, mostly for the combo reference layers. +#define ___10_ERGO_THUMBS___ CATR(___10_ERGO_THUMBS, EXP_THUMB_EXT) +#define ___4_THUMBS___ CAT2(___4_THUMBS, EXP_THUMB_EXT) + +/* #define ___6_ERGO_THUMBS___ ___6_ERGO_THUMBS_def___ */ + +/* #define ___ERGODOX_THUMB_LEFT___ \ */ +/* OSL(SYMB), OSM(KC_LGUI), \ */ +/* HOME_END, \ */ +/* CTL_BSPC, ALT_DEL, XMONAD_ESC */ + +/* #define ___ERGODOX_THUMB_RIGHT___ \ */ +/* XXX, OSL(KEYPAD), \ */ +/* KC_PGUP, \ */ +/* KC_PGDN, ALT_ENT, CTL_SPC */ + +// Translation of LT thumb keys from beakl wi where function layers +// have separate left and right to here, where I'm defining left and right in +// one layer and using it that way. I don't feel that having both halves +// on one layer hurts, if I invoke a layer, I'm not trying to use a non +// layer part of the keyboard. I don't have an edit layer, might be a good idea. +// have most of it on the Navigation layer. +// use the keycodes on that original layer, so It's not defined here. +// The wi keypad has a hexpad instead of a funcpad. All the other keypads +// have a funcpad on the opposite side. + +// translation of the original wi layers to those here. +// BSPC_NAV +// SPC_SYMB +// TAB_NUM +// ESC_func -> ESC_TOPR +// I_regex -> I_SYMB +// ENT_edit -> ENT_NAV + +/* // consolidated for kinesis, ergodox, and dactyl */ +/* //for the ergodox and kinesis. */ +/* #define ___12_DOX_ALL_THUMBS___ \ */ +/* ___4___, \ */ +/* ___2___, \ */ +/* ___6___ */ + +#define ___12_DOX_ALL_THUMBS___ ___12___ + +/* ___THUMBS_1___, \ */ +/* ___xTHUMBS_2___, \ */ +/* ___6_ERGO_THUMBS___ */ + +#define ___12_DOX_ALL_THUMBS_EN___ ___12_DOX_ALL_THUMBS___ +#define ___12_DOX_ALL_THUMBS_BP___ ___12_DOX_ALL_THUMBS___ + +#define ___16_ALL_THUMBS___ \ + ___4_THUMBS_1___, \ + ___6_THUMBS_2___, \ + ___6_ERGO_THUMBS___ + +#define ___16_ALL_THUMBS_EN___ ___16_ALL_THUMBS___ +#define ___16_ALL_THUMBS_BP___ ___16_ALL_THUMBS___ +#define ___16_ALL_THUMBSa___ \ + ___4_THUMBS_1___, \ + ___6_THUMBS_2a___, \ + ___6_ERGO_THUMBS___ + +#define ___16_ALL_THUMBSa_EN___ ___16_ALL_THUMBSa___ +#define ___16_ALL_THUMBSa_BP___ ___16_ALL_THUMBSa___ + + +// For the Kyria +#define ___4_THUMBS_def___ OS_LALT, OS_LCTL, SML_NAV, OS_LSFT +#define ___10_ERGO_THUMBS_def___ _X_, _X_, ___6_ERGO_THUMBS___, _X_, _X_ + +#define ___4_THUMBS_EN___ ___4_THUMBS_def___ +#define ___4_THUMBS_BP___ ___4_THUMBS_def___ +#define ___10_ERGO_THUMBS_EN___ ___10_ERGO_THUMBS_def___ +#define ___10_ERGO_THUMBS_BP___ ___10_ERGO_THUMBS_def___ + +// combo reference layer thumbs for the kyria. +// for the kyria, note the odd numbering...a 0 row, and a,b,c,d for the extras +// on either side of the central 6 thumbs. +#define ___2_THUMBS_CB___ CB_1TH1, CB_1TH2 +#define ___4_THUMBS_CB___ CB_0TH1, CB_0TH2, CB_0TH3, CB_0TH4 +#define ___6_THUMBS_CB___ CB_1TH1, CB_1TH2, CB_1TH3, CB_1TH4, CB_1TH5, CB_1TH6 +#define ___10_ERGO_THUMBS_CB___ CB_THA, CB_THB, \ + ___6_ERGO_THUMBS___, CB_THC, CB_THD +#define ___12_ERGO_THUMBS_CB___ ___2_THUMBS_CB___, \ + CB_THA, CB_THB, ___6_ERGO_THUMBS___, CB_THC, CB_THD +#define ___12_DOX_ALL_THUMBS_CB___ ___4_THUMBS_CB___, ___2_THUMBS_CB___, ___6_ERGO_THUMBS___ +#define ___16_DOX_ALL_THUMBS_CB___ ___4_THUMBS_CB___, ___6_THUMBS_2_CB___, ___6_ERGO_THUMBS___ +#define ___16_DOX_ALL_THUMBSa_CB___ ___4_THUMBS_CB___, ___6_THUMBS_2a_CB___, ___6_ERGO_THUMBS___ + + +#define ___2_THUMBS_CB2___ CB2_1TH1, CB2_1TH2 +#define ___4_THUMBS_CB2___ CB2_0TH1, CB2_0TH2, CB2_0TH3, CB2_0TH4 +#define ___6_THUMBS_CB2___ CB2_1TH1, CB2_1TH2, CB2_1TH3, CB2_1TH4, CB2_1TH5, CB2_1TH6 +#define ___10_ERGO_THUMBS_CB2___ CB2_THA, CB2_THB, \ + ___6_ERGO_THUMBS___, CB2_THC, CB2_THD +#define ___12_ERGO_THUMBS_CB2___ ___2_THUMBS_CB2___, \ + CB2_THA, CB2_THB, ___6_ERGO_THUMBS___, CB2_THC, CB2_THD +#define ___12_DOX_ALL_THUMBS_CB2___ ___4_THUMBS_CB2___, ___2_THUMBS_CB2___, ___6_ERGO_THUMBS___ +#define ___16_DOX_ALL_THUMBS_CB2___ ___4_THUMBS_CB2___, ___6_THUMBS_2_CB2___, ___6_ERGO_THUMBS___ +#define ___16_DOX_ALL_THUMBSa_CB2___ ___4_THUMBS_CB2___, ___6_THUMBS_2a_CB2___, ___6_ERGO_THUMBS___ + +// Basically give the same 4 top thumbs and bottom outer 4 thumbs for everyone. +// Could be different for every one, but the core 6 is enough for now I think. +// Everyone is the same except the combo reference layers. +// Let 6 ERGO_THUMBS do it´s thing inside. +#define EXP_THUMB_EXT CAT(THUMBS_ARE, _EXP_EXT) +#define WI_EXP_EXT _def___ +#define WIa_EXP_EXT _def___ +#define DEFAULT_EXP_EXT _def___ +#define TEST_EXP_EXT _def___ +#define TRNS_EXP_EXT _def___ +#define MODS_EXP_EXT _def___ +#define LAYERS_EXP_EXT _def___ +#define MODS_LAYERS_EXP_EXT _def___ +#define MODS_LAYERS_NAV_EXP_EXT _def___ +#define MIRYOKU_EXP_EXT _def___ +#define MIRYOKU_TR_EXP_EXT _def___ +#define MIRYOKU_LTR_EXP_EXT _def___ +#define MIRYOKU_TR_LTR_EXP_EXT _def___ +#define TH_LTR_EXP_EXT _def___ +#define HD_DASH_EXP_EXT _def___ +#define HD_EXP_EXT _def___ +#define HDA_EXP_EXT _def___ +#define HD_SIMPLE_EXP_EXT _def___ +// for the function layers +#define COMBO_EXP_EXT _COMBO___ +#define COMBO2_EXT _COMBO2___ +#define MEDIA_THUMBS_EXP_EXT _def___ +#define MOUSE_THUMBS_EXP_EXT _def___ +#define KEYPAD_THUMBS_EXP_EXT _def___ +#define SYMB_THUMBS_EXP_EXT _def___ diff --git a/users/ericgebhart/layers/toprows.h b/users/ericgebhart/layers/toprows.h new file mode 100644 index 00000000000..351df442ed7 --- /dev/null +++ b/users/ericgebhart/layers/toprows.h @@ -0,0 +1,80 @@ +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ +#include "keycodes.h" +/*******************************************************************/ +/* A Top Rows layer. Pick your parts. Bepo and Qwerty */ +/* */ +/* This is, to me, a stop gap layer. If I need symbols, numbers or */ +/* function keys these rows are nicely predictable to most people. */ +/* I currently use the beakl number row with regular symbols. */ +/* I never use function keys for anything. */ +/*******************************************************************/ +// Kinesis function key row. I don't use them. but might as well define them. +#define ___KINTFUNC_L___ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8 +// #define ___KINTFUNC_RIGHT___ KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, KC_FN0, RESET +#define ___KINTFUNC_R___ KC_F9, KC_F10, KC_F11, KC_F12, XXX, XXX, XXX, XXX, RESET + +// A TOPROWS Layer. +// set it how you like it, if you like it. + + +//#define ___MODS_ROW___ ___OS_MODS_L___, ___, ___SML_MODS_R___ +#define ___MODS_ROW___ ___SML_MODS_L___, ___, ___OS_MODS_R___ +/********************************************************************************/ +/* TOPROWS Layer chunk */ +/********************************************************************************/ +// These rows have already been langed, at their creation. +// altogether in a chunk. +#define CARTE_TOPROWS \ + carte_de_map(" !@#$% ^&*()", \ + " 40123 76598", \ + " F1- -- -F12") + +#define ___TOPROWS_3x10___ \ + ___10_SYMBOLS___, \ + ___10_NUMBERS_BEAKL15___, \ + ___10_FUNCS___ + +#define CARTE_TOPROWS_MOD \ + carte_de_map(" !@#$% ^&*()", \ + " 40123 76598", \ + " SLMods OSMods") + +#define ___TOPROWS_MOD_3x10___ \ + ___10_SYMBOLS___, \ + ___10_NUMBERS_BEAKL15___, \ + ___MODS_ROW___ + +#define CARTE_TOPROWS_BKL19 \ + carte_de_map(" !@#$% ^&*()", \ + " 32104 76598", \ + " F1- -- -F12") + +#define ___TOPROWS_BKL19_3x10___ \ + ___10_SYMBOLS___, \ + ___10_NUMBERS_BEAKL19___, \ + ___10_FUNCS___ + +#define CARTE_RAISE \ + carte_de_map(" !@#$% ^&*()", \ + " 12345 67890", \ + " F1- -- -F12") + +#define ___RAISE_3x10___ \ + ___10_SYMBOLS___, \ + ___10_NUMBERS___, \ + ___10_FUNCS___ diff --git a/users/ericgebhart/layers/utility.h b/users/ericgebhart/layers/utility.h new file mode 100644 index 00000000000..a688f8196d9 --- /dev/null +++ b/users/ericgebhart/layers/utility.h @@ -0,0 +1,125 @@ +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ +/********************************************************************************/ +/* MEDIA - Mute, Vol, play, pause, stop, next, prev, etc. */ +/********************************************************************************/ +#define ___PRV_PLAY_NXT_STOP___ KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP +#define ___VDN_MUTE_VUP___ KC_VOLD, KC_MUTE, KC_VOLU + +#define ___PRV_VDN_VUP_NXT___ KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT +#define ___STOP_PLAY_MUTE___ KC_MSTP, KC_MPLY, KC_MUTE + +#define ___MUTE_PRV_PLAY_NXT_STOP___ KC_MUTE, KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP +#define ___MUTE_PLAY_STOP___ KC_MUTE, KC_MPLY, KC_MSTP + +#define CARTE_MEDIA \ + carte_de_map(" ", \ + " < vdn vup >", \ + " stp play mute") + +// miryoku, to be used with stop play mute on thumbs. - MEDIA thumbs. +#define ___MEDIA_3x10___ \ + ___5___, ___5___, \ + ___5___, ___, ___PRV_VDN_VUP_NXT___, \ + ___5___, ___5___ + + +/********************************************************************************/ +/* RGB - Control those lights. */ + +/* ___, HUE SAT_INT MOD (UP), | */ +/* ___, HUE SAT INT MOD (DOWN), RGB_TOG | P_B_R_SW_SN___, ___ */ +/* ___6___, | ___, ___RGB_KXGT___, ___ */ +/********************************************************************************/ +// RGB FUNCTION Keysets +// RGB row for the _FN layer from the redo of the default keymap.c +#define ___RGB_HUE_SAT_INT_UP___ RGB_HUI, RGB_SAI, RGB_VAI, RGB_RMOD +#define ___RGB_HUE_SAT_INT_DN___ RGB_HUD, RGB_SAD, RGB_VAD, RGB_MOD +#define ___RGB_MODE_PRV_NXT___ RGB_RMOD, RGB_MOD +#define ___RGB_TOGGLE___ RGB_TOG +#define ___RGB_P_B_R_SW_SN___ RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN +#define ___RGB_KXGT___ RGB_M_K, RGB_M_X, RGB_M_G, RGB_M_T + +/// An RGB Layer +#define ___10_RGB_1___ ___RGB_HUE_SAT_INT_UP___, ___, ___5___ +#define ___10_RGB_2___ ___RGB_HUE_SAT_INT_DN___, RGB_TOG, ___RGB_P_B_R_SW_SN___ +#define ___10_RGB_3___ ___5___, ___, ___RGB_KXGT___ + +/********************************************************************************/ +/* The RGB LAYER Chunk */ +/********************************************************************************/ +#define ___RGB_3x10___ ___10_RGB_1___, ___10_RGB_2___, ___10_RGB_3___ + + +/********************************************************************************/ +/* ADJUST - Miscellaneous Melange. */ +/********************************************************************************/ +// For an Adjust layer. Like RBB with audio, flash, etc. +#define ___ADJUST_L1___ ___RGB_HUE_SAT_INT_UP___, RGB_TOG +#define ___ADJUST_L2___ MU_TOG, CK_TOGG, AU_ON, AU_OFF, CG_NORM +#define ___ADJUST_L3___ ___RGB_HUE_SAT_INT_DN___, KC_RGB_T + +#define ___ADJUST_R1___ ___, KC_MAKE, VRSN, MG_NKRO, KC_RESET +#define ___ADJUST_R2___ EEP_RST, ___PRV_PLAY_NXT_STOP___, +#define ___ADJUST_R3___ MG_NKRO, ___VDN_MUTE_VUP___, RGB_IDL +/********************************************************************************/ +/* The Adjust LAYER Chunks */ +/********************************************************************************/ +#define ___ADJUST_3x10___ ___ADJUST_L1___, ___ADJUST_R1___, \ + ___ADJUST_L2___, ___ADJUST_R2___, \ + ___ADJUST_L3___, ___ADJUST_R3___ + + +/********************************************************************************/ +/* LAYERS - Define a base layer, switch to any layer. Get around. Experiment. */ +/* */ +/* Base Layers on the left hand, */ +/* transient layers on the right. Centered on the home region. */ +/* A good place to attach an experimental layer. */ +/* */ +/********************************************************************************/ +// Base Layers +// this was kc_dvorak et al. But since its configurable as to who would be here +// that no longer makes sense. So next keys for locale and base layer. and a set to +// make it permanent. Cycling of layers is based on current locale. +#define ___BASE_LAYERS___ ___, KC_SET_BASE, KC_NEXT_BASE_LAYER, KC_NEXT_LOCALE, ___ + +// transient layers. +#define ___5_LAYERS_T___ ___, MO(_NAV), MO_SYMB, MO_KEYPAD, MO_TOPROWS +#ifdef SECOND_LOCALE +#undef LANG_IS +#define LANG_IS SECOND_LOCALE +#define ___5_LAYERS_T_BP___ ___, MO(_NAV), MO_SYMB, MO_KEYPAD, MO_TOPROWS +#undef LANG_IS +#define LANG_IS DEFAULT_LANG +#else +#define ___5_LAYERS_T_BP___ ___, MO(_NAV), ___3___ +#endif + +#define ___5_LAYERS_T_CTL___ ___, MO_RGB, ___, ___, MO_ADJUST + + +#define CARTE_LAYERS \ + carte_de_map(" |Nv S K TR", \ + " EE Bs Ln|Nv S K TR", \ + " ") + +/// A Layers Layer +#define ___LAYERS_3x10___ \ + ___5___, ___5_LAYERS_T_BP___, \ + ___BASE_LAYERS___, ___5_LAYERS_T___, \ + ___5___, ___5_LAYERS_T_CTL___ diff --git a/users/ericgebhart/layouts.h b/users/ericgebhart/layouts.h deleted file mode 100644 index 5ca9b00e6e9..00000000000 --- a/users/ericgebhart/layouts.h +++ /dev/null @@ -1,720 +0,0 @@ -#pragma once -/* - Copyright 2018 Eric Gebhart - - 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 . -*/ - -#include "core_keysets.h" -#include "mod_layer.h" -#include "edge_keys.h" - -/******************************************************************/ -/* This is where I put my Keyboard layouts. */ -/* The mod layer can be modified in mod_layer.h */ -/* can be applied here. The physical shape of the keyboard is */ -/* also accounted for here. This makes it very simple to add a */ -/* new keyboard and reuse all of my layouts and layers */ -/* */ -/* With all of that in hand, we then create a LAYOUT wrapper */ -/* macro that takes a list of keys, to create a keyboard matrix */ -/* that fits the keyboard. Simple. */ -/* */ -/* The thumb keys, the bottom rows, etc. */ -/* */ -/* An attempt has been made to adapt the kinesis and ergodox */ -/* Thumb keys to the rectangular shapes of the xd75, viterbi, */ -/* and rebound. */ -/******************************************************************/ - -/******************************************************************/ -/* * The XD75 is a 5x15 Ortholinear matrix which means it has 3 */ -/* keys inbetween the usual left and right hand keys */ -/* * The Viterbi is a split 5x14 Ortholinear with 2 middle keys. */ -/* * The Ergodox is a split 5x14 Ortholinear with 2 middle keys, */ -/* thumbkeys. It is missing middle keys on (home) row 3. */ -/* * The Corne is a split 3x12 with 6 thumb keys. It has no */ -/* extra middle keys */ -/* */ -/******************************************************************/ - - -/******************************************************************/ -/* In all cases these keyboards are defined in a matrix which is */ -/* a set of rows. Maybe like so, or not. */ -/* */ -/* -------------------------|------------------------ */ -/* | Left0 | Numbers L | mid|dle0 | numbers R | Right0 | */ -/* | Left1 | keys0-5 | mid|dle1 | Keys6-10 | Right1 | */ -/* | Left2 | keys11-15 | mid|dle2 | Keys16-20 | Right2 | */ -/* | Left3 | keys20-25 | mid|dle3 | Keys25-30 | Right3 | */ -/* | Row5L | Row5R | */ -/* | ThumbsL | ThumbsR | */ -/* -------------------------|------------------------ */ - -/* Generally speaking, the keys on the right and left don't change. */ -/* Neither does the bottom row or the thumbs. Frequently the numbers */ -/* row is identical across layers. Mostly, we want our Base layers to */ -/* be predctable. */ - - -// Since our quirky block definitions are basically a list of comma separated -// arguments, we need a wrapper in order for these definitions to be -// expanded before being used as arguments to the LAYOUT_xxx macro. -#if (!defined(LAYOUT) && defined(KEYMAP)) -#define LAYOUT KEYMAP -#endif - -// every keyboard has it's Layout. We start there and make a var args -// out of it. - -#define LVARG_ergodox(...) LAYOUT_ergodox(__VA_ARGS__) -#define LVARG_edox(...) LAYOUT_ergodox_pretty(__VA_ARGS__) -#define LAYOUT_VARG(...) LAYOUT(__VA_ARGS__) -#define LAYOUT_PVARG(...) LAYOUT_pretty(__VA_ARGS__) - -#define LVARG_4x12(...) LAYOUT_ortho_4x12(__VA_ARGS__) -#define LVARG_5x12(...) LAYOUT_ortho_5x12(__VA_ARGS__) -#define LVARG_5x14(...) LAYOUT_ortho_5x14(__VA_ARGS__) -#define LVARG_5x15(...) LAYOUT_ortho_5x15(__VA_ARGS__) - -/* - | Left | Numbers L | middle | numbers R | Right | - | Left | keys0-5 | middle | Keys6-10 | Right | - | Left | keys11-15 | middle | Keys16-20 | Right | - | Left | keys20-25 | middle | Keys25-30 | Right | - |Row5L Row5R | - |ThumbsL ThumbsR | -*/ - -/* Assuming that left, midddle, right, row5, and thumbs stay the same, */ -/* numbers, no numbers, numbers never change, whatever. */ -/* we can have a layout macro that takes a nice rectangle of keys. */ - -/* Actually, because of Bepo, each keyboard currently requires four of */ -/* these macros. One for Qwerty, One for foreign layouts on bepo like */ -/* dvorak and beakl on bepo instead of on Qwerty. Then another for the Bepo */ -/* layout because unlike the rest of the layouts Bepo doesn't fit in */ -/* 3x10. It wants 3x12. So there are potentially 4 macros per keyboard here. */ -/* XXXX_base, XXXX_base_bepo, XXXX_base_bepo6, The 4th macro */ -/* is XXXXX_transient and generally works for all other */ -/* non base layers. */ -/* The base and transient versions are all that is necessary, if bepo is */ -/* not needed. */ - - -/* All layouts are relatively simple to make. */ -/* The ROW macros add a universal mod layer so that mods can be defined once */ -/* and used everywhere. No matter the keymap or layer. this allows actual maps */ -/* like dvorak, qwerty, colemak, beakl, etc., to be defined simply. */ - - -/* Additional, more complicated layouts can be found here.*/ -/* examples can be found in crkbd/keymaps/ericgebhart */ -/* examples can be found in kinesis/keymaps/ericgebhart */ -/* examples can be found in ergodox/keymaps/ericgebhart */ -/* examples can be found in montsinger/rebound/rev4/keymaps/ericgebhart */ - - - -/********************************************************************/ -/* xiudi/xd75 - Ortholinear 5x15 */ -/********************************************************************/ -/// These first two base layout templates take sets of 5 keys, left and right. -// Using 4 sets allows for changing the number row if you have one. -// if you never change the number row, then use 3 sets of left and right. -// and define the number row here. -#define LAYOUT_5x15_base( \ - K01, K02, K03, K04, K05, \ - K06, K07, K08, K09, K0A, \ - K11, K12, K13, K14, K15, \ - K16, K17, K18, K19, K1A, \ - K21, K22, K23, K24, K25, \ - K26, K27, K28, K29, K2A, \ - K31, K32, K33, K34, K35, \ - K36, K37, K38, K39, K3A) \ - LVARG_5x15( \ - ROW0_LEFT(K01, K02, K03, K04, K05), \ - ___3_MIDDLE_T___, \ - ROW0_RIGHT(K06, K07, K08, K09, K0A), \ - \ - ROW1_LEFT(K11, K12, K13, K14, K15), \ - ___3_MIDDLE_1___, \ - ROW1_RIGHT(K16, K17, K18, K19, K1A), \ - \ - ROW2_LEFT(K21, K22, K23, K24, K25), \ - ___3_MIDDLE_2___, \ - ROW2_RIGHT(K26, K27, K28, K29, K2A), \ - \ - ROW3_LEFT(K31, K32, K33, K34, K35), \ - ___3_MIDDLE_3___, \ - ROW3_RIGHT(K36, K37, K38, K39, K3A), \ - ___15_BOTTOM___ \ - ) - -#define LAYOUT_5x15_base_bepo( \ - K01, K02, K03, K04, K05, \ - K06, K07, K08, K09, K0A, \ - K11, K12, K13, K14, K15, \ - K16, K17, K18, K19, K1A, \ - K21, K22, K23, K24, K25, \ - K26, K27, K28, K29, K2A, \ - K31, K32, K33, K34, K35, \ - K36, K37, K38, K39, K3A) \ - LVARG_5x15( \ - ROW0_LEFT_BP(K01, K02, K03, K04, K05), \ - ___3_MIDDLE_T___, \ - ROW0_RIGHT_BP(K06, K07, K08, K09, K0A), \ - \ - ROW1_LEFT_BP(K11, K12, K13, K14, K15), \ - ___3_MIDDLE_1_BP___, \ - ROW1_RIGHT_BP(K16, K17, K18, K19, K1A), \ - \ - ROW2_LEFT_BP(K21, K22, K23, K24, K25), \ - ___3_MIDDLE_2_BP___, \ - ROW2_RIGHT_BP(K26, K27, K28, K29, K2A), \ - \ - ROW3_LEFT_BP(K31, K32, K33, K34, K35), \ - ___3_MIDDLE_3_BP___, \ - ROW3_RIGHT_BP(K36, K37, K38, K39, K3A), \ - ___15_BOTTOM_BP___ \ - ) - -// Just for bepo because it's a 3x6 matrix on each side. -// So 3 pairs of 6 keys, left and right. -#define Layout_5x15_base_bepo6( \ - K01, K02, K03, K04, K05, K06, \ - K07, K08, K09, K0A, K0B, K0C, \ - K11, K12, K13, K14, K15, K16, \ - K17, K18, K19, K1A, K1B, K1C, \ - K21, K22, K23, K24, K25, K26, \ - K27, K28, K29, K2A, K2B, K2C \ - ) \ - LVARG_5x15( \ - ___15_B_SYMB___, \ - ROW1_LEFT_BP6(K01, K02, K03, K04, K05, K06), \ - ___3_MIDDLE_1_BP___, \ - ROW1_RIGHT_BP6(K07, K08, K09, K0A, K0B, K0C), \ - \ - ROW2_LEFT_BP6(K11, K12, K13, K14, K15, K16), \ - ___3_MIDDLE_2___, \ - ROW2_RIGHT_BP6(K17, K18, K19, K1A, K1B, K1C), \ - \ - ROW3_LEFT_BP6(K21, K22, K23, K24, K25, K26), \ - ___3_MIDDLE_3___, \ - ROW3_RIGHT_BP6(K27, K28, K29, K2A, K2B, K2C), \ - ___15_BOTTOM_BP___ \ - ) - - // 4 rows of 12. 3 columns transparent in the middle. -#define LAYOUT_5x15_transient( \ - K01, K02, K03, K04, K05, K06, \ - K07, K08, K09, K0A, K0B, K0C, \ - K11, K12, K13, K14, K15, K16, \ - K17, K18, K19, K1A, K1B, K1C, \ - K21, K22, K23, K24, K25, K26, \ - K27, K28, K29, K2A, K2B, K2C, \ - K31, K32, K33, K34, K35, K36, \ - K37, K38, K39, K3A, K3B, K3C \ - ) \ - LVARG_5x15( \ - K01, K02, K03, K04, K05, K06, \ - ___3___, \ - K07, K08, K09, K0A, K0B, K0C, \ - K11, K12, K13, K14, K15, K16, \ - ___3___, \ - K17, K18, K19, K1A, K1B, K1C, \ - K21, K22, K23, K24, K25, K26, \ - ___3___, \ - K27, K28, K29, K2A, K2B, K2C, \ - K31, K32, K33, K34, K35, K36, \ - ___3___, \ - K37, K38, K39, K3A, K3B, K3C, \ - ___15___) \ - -#define BASE_5x15(...) LAYOUT_5x15_base(__VA_ARGS__) -#define BASE_5x15_bepo(...) LAYOUT_5x15_base_bepo(__VA_ARGS__) -#define BASE_5x15_bepo6(...) LAYOUT_5x15_base_bepo6(__VA_ARGS__) -#define TRANSIENT_5x15(...) LAYOUT_5x15_transient(__VA_ARGS__) - -/********************************************************************/ - - -/********************************************************************/ -/* viterbi - Ortholinear 5x14 */ -/********************************************************************/ -#define LAYOUT_5x14_base( \ - K01, K02, K03, K04, K05, \ - K06, K07, K08, K09, K0A, \ - K11, K12, K13, K14, K15, \ - K16, K17, K18, K19, K1A, \ - K21, K22, K23, K24, K25, \ - K26, K27, K28, K29, K2A, \ - K31, K32, K33, K34, K35, \ - K36, K37, K38, K39, K3A) \ - LVARG_5x14( \ - ROW0_LEFT(K01, K02, K03, K04, K05), \ - ___2_MIDDLE_T___, \ - ROW0_RIGHT(K06, K07, K08, K09, K0A), \ - \ - ROW1_LEFT(K11, K12, K13, K14, K15), \ - ___2_MIDDLE_1___, \ - ROW1_RIGHT(K16, K17, K18, K19, K1A), \ - \ - ROW2_LEFT(K21, K22, K23, K24, K25), \ - ___2_MIDDLE_2___, \ - ROW2_RIGHT(K26, K27, K28, K29, K2A), \ - \ - ROW3_LEFT(K31, K32, K33, K34, K35), \ - ___2_MIDDLE_3___, \ - ROW3_RIGHT(K36, K37, K38, K39, K3A), \ - ___14_BOTTOM___ \ - ) - -#define LAYOUT_5x14_base_bepo( \ - K01, K02, K03, K04, K05, \ - K06, K07, K08, K09, K0A, \ - K11, K12, K13, K14, K15, \ - K16, K17, K18, K19, K1A, \ - K21, K22, K23, K24, K25, \ - K26, K27, K28, K29, K2A, \ - K31, K32, K33, K34, K35, \ - K36, K37, K38, K39, K3A) \ - LVARG_5x14( \ - ROW0_LEFT_BP(K01, K02, K03, K04, K05), \ - ___2_MIDDLE_T___, \ - ROW0_RIGHT_BP(K06, K07, K08, K09, K0A), \ - \ - ROW1_LEFT_BP(K11, K12, K13, K14, K15), \ - ___2_MIDDLE_1_BP___, \ - ROW1_RIGHT_BP(K16, K17, K18, K19, K1A), \ - \ - ROW2_LEFT_BP(K21, K22, K23, K24, K25), \ - ___2_MIDDLE_2_BP___, \ - ROW2_RIGHT_BP(K26, K27, K28, K29, K2A), \ - \ - ROW3_LEFT_BP(K31, K32, K33, K34, K35), \ - ___2_MIDDLE_3_BP___, \ - ROW3_RIGHT_BP(K36, K37, K38, K39, K3A), \ - ___14_BOTTOM_BP___ \ - ) - - // Just for bepo because it's a 3x6 matrix on each side. -// So 3 pairs of 6 keys, left and right. -#define LAYOUT_5x14_base_bepo6( \ - K01, K02, K03, K04, K05, K06, \ - K07, K08, K09, K0A, K0B, K0C, \ - K11, K12, K13, K14, K15, K16, \ - K17, K18, K19, K1A, K1B, K1C, \ - K21, K22, K23, K24, K25, K26, \ - K27, K28, K29, K2A, K2B, K2C \ - ) \ - LVARG_5x14( \ - ___14_B_SYMB___, \ - ROW1_LEFT_BP6(K01, K02, K03, K04, K05, K06), \ - ___2_MIDDLE_1_BP___, \ - ROW1_RIGHT_BP6(K07, K08, K09, K0A, K0B, K0C), \ - \ - ROW2_LEFT_BP6(K11, K12, K13, K14, K15, K16), \ - ___2_MIDDLE_2___, \ - ROW2_RIGHT_BP6(K17, K18, K19, K1A, K1B, K1C), \ - \ - ROW3_LEFT_BP6(K21, K22, K23, K24, K25, K26), \ - ___2_MIDDLE_3___, \ - ROW3_RIGHT_BP6(K27, K28, K29, K2A, K2B, K2C), \ - ___14_BOTTOM_BP___ \ - ) - -// 4 rows of 12. 2 columns transparent in the middle. -#define LAYOUT_5x14_transient( \ - K01, K02, K03, K04, K05, K06, \ - K07, K08, K09, K0A, K0B, K0C, \ - K11, K12, K13, K14, K15, K16, \ - K17, K18, K19, K1A, K1B, K1C, \ - K21, K22, K23, K24, K25, K26, \ - K27, K28, K29, K2A, K2B, K2C, \ - K31, K32, K33, K34, K35, K36, \ - K37, K38, K39, K3A, K3B, K3C \ - ) \ - LVARG_5x14( \ - K01, K02, K03, K04, K05, K06, \ - ___2___, \ - K07, K08, K09, K0A, K0B, K0C, \ - K11, K12, K13, K14, K15, K16, \ - ___2___, \ - K17, K18, K19, K1A, K1B, K1C, \ - K21, K22, K23, K24, K25, K26, \ - ___2___, \ - K27, K28, K29, K2A, K2B, K2C, \ - K31, K32, K33, K34, K35, K36, \ - ___2___, \ - K37, K38, K39, K3A, K3B, K3C, \ - ___14___ \ - ) \ - -#define BASE_5x14(...) LAYOUT_5x14_base(__VA_ARGS__) -#define BASE_5x14_bepo(...) LAYOUT_5x14_base_bepo(__VA_ARGS__) -#define BASE_5x14_bepo6(...) LAYOUT_5x14_base_bepo6(__VA_ARGS__) -#define TRANSIENT_5x14(...) LAYOUT_5x14_transient(__VA_ARGS__) - -/********************************************************************/ -/* Ortholinear 4x12 */ -/********************************************************************/ -#define LAYOUT_4x12_base( \ - K01, K02, K03, K04, K05, \ - K06, K07, K08, K09, K0A, \ - K11, K12, K13, K14, K15, \ - K16, K17, K18, K19, K1A, \ - K21, K22, K23, K24, K25, \ - K26, K27, K28, K29, K2A \ - ) \ - LVARG_4x12( \ - ROW1_LEFT(K01, K02, K03, K04, K05), \ - ROW1_RIGHT(K06, K07, K08, K09, K0A), \ - \ - ROW2_LEFT(K11, K12, K13, K14, K15), \ - ROW2_RIGHT(K16, K17, K18, K19, K1A), \ - \ - ROW3_LEFT(K21, K22, K23, K24, K25), \ - ROW3_RIGHT(K26, K27, K28, K29, K2A), \ - \ - ___12_BOTTOM___ \ - ) - -#define LAYOUT_4x12_base_bepo( \ - K01, K02, K03, K04, K05, \ - K06, K07, K08, K09, K0A, \ - K11, K12, K13, K14, K15, \ - K16, K17, K18, K19, K1A, \ - K21, K22, K23, K24, K25, \ - K26, K27, K28, K29, K2A \ - ) \ - LVARG_4x12( \ - ROW1_LEFT_BP(K01, K02, K03, K04, K05), \ - ROW1_RIGHT_BP(K06, K07, K08, K09, K0A), \ - \ - ROW2_LEFT_BP(K11, K12, K13, K14, K15), \ - ROW2_RIGHT_BP(K16, K17, K18, K19, K1A), \ - \ - ROW3_LEFT_BP(K21, K22, K23, K24, K25), \ - ROW3_RIGHT_BP(K26, K27, K28, K29, K2A), \ - \ - ___12_BOTTOM_BP___ \ - ) - - // Just for bepo because it's a 3x6 matrix on each side. - // So 3 pairs of 6 keys, left and right. -#define Layout_4x12_base_bepo6( \ - K01, K02, K03, K04, K05, K06, \ - K07, K08, K09, K0A, K0B, K0C, \ - K11, K12, K13, K14, K15, K16, \ - K17, K18, K19, K1A, K1B, K1C, \ - K21, K22, K23, K24, K25, K26, \ - K27, K28, K29, K2A, K2B, K2C \ - ) \ - LVARG_4x12( \ - ROW1_LEFT_BP6(K01, K02, K03, K04, K05, K06), \ - ROW1_RIGHT_BP6(K07, K08, K09, K0A, K0B, K0C), \ - \ - ROW2_LEFT_BP6(K11, K12, K13, K14, K15, K16), \ - ROW2_RIGHT_BP6(K17, K18, K19, K1A, K1B, K1C), \ - \ - ROW3_LEFT_BP6(K21, K22, K23, K24, K25, K26), \ - ROW3_RIGHT_BP6(K27, K28, K29, K2A, K2B, K2C), \ - ___12_BOTTOM_BP___ \ - ) - -// takes 3 makes 4 rows of 12. -#define LAYOUT_4x12_transient( \ - K01, K02, K03, K04, K05, K06, \ - K07, K08, K09, K0A, K0B, K0C, \ - K11, K12, K13, K14, K15, K16, \ - K17, K18, K19, K1A, K1B, K1C, \ - K21, K22, K23, K24, K25, K26, \ - K27, K28, K29, K2A, K2B, K2C \ - ) \ - LVARG_4x12( \ - K01, K02, K03, K04, K05, K06, \ - K07, K08, K09, K0A, K0B, K0C, \ - K11, K12, K13, K14, K15, K16, \ - K17, K18, K19, K1A, K1B, K1C, \ - K21, K22, K23, K24, K25, K26, \ - K27, K28, K29, K2A, K2B, K2C, \ - ___12___) \ - -#define BASE_4x12(...) LAYOUT_4x12_base(__VA_ARGS__) -#define BASE_4x12_bepo(...) LAYOUT_4x12_base_bepo(__VA_ARGS__) -#define BASE_4x12_bepo6(...) LAYOUT_4x12_base_bepo6(__VA_ARGS__) -#define TRANSIENT_4x12(...) LAYOUT_4x12_transient(__VA_ARGS__) - -/********************************************************************/ -/* CRKBD Corne */ -/* The Corne has 3x6 matrix on both sides with 6 thumbs total */ -/* This Macro takes 2x3x5 and gives it pinkies, and thumbs. */ -/* Arg chunks are in the middle with the passthrough modifiers as */ -/* needed. Sama Sama apres cette fois. */ -/********************************************************************/ -#define Base_3x6_3( \ - K01, K02, K03, K04, K05, \ - K06, K07, K08, K09, K0A, \ - K11, K12, K13, K14, K15, \ - K16, K17, K18, K19, K1A, \ - K21, K22, K23, K24, K25, \ - K26, K27, K28, K29, K2A) \ - LAYOUT_VARG( \ - ROW1_LEFT(K01, K02, K03, K04, K05), \ - ROW1_RIGHT(K06, K07, K08, K09, K0A), \ - \ - ROW2_LEFT(K11, K12, K13, K14, K15), \ - ROW2_RIGHT(K16, K17, K18, K19, K1A), \ - \ - ROW3_LEFT(K21, K22, K23, K24, K25), \ - ROW3_RIGHT(K26, K27, K28, K29, K2A), \ - ___6_ERGO_THUMBS___ \ - ) - -// So we can have different transient layers for symbols and numbers on bepo. -// for layouts like dvorak on bepo. -#define Base_bepo_3x6_3( \ - K01, K02, K03, K04, K05, \ - K06, K07, K08, K09, K0A, \ - K11, K12, K13, K14, K15, \ - K16, K17, K18, K19, K1A, \ - K21, K22, K23, K24, K25, \ - K26, K27, K28, K29, K2A \ - ) \ - LAYOUT_VARG( \ - ROW1_LEFT_BP(K01, K02, K03, K04, K05), \ - ROW1_RIGHT_BP(K06, K07, K08, K09, K0A), \ - \ - ROW2_LEFT_BP(K11, K12, K13, K14, K15), \ - ROW2_RIGHT_BP(K16, K17, K18, K19, K1A), \ - \ - ROW3_LEFT_BP(K21, K22, K23, K24, K25), \ - ROW3_RIGHT_BP(K26, K27, K28, K29, K2A), \ - ___6_ERGO_THUMBS_BP___ \ - ) - -// No room for pinkies. -// Just for bepo because it's a 3x6 matrix on each side. -// So 3 pairs of 6 keys, And we lose our left and right. -// Except it keeps the layer toggles along with the keycode -// on the bottom. -#define Base_bepo6_3x6_3( \ - K01, K02, K03, K04, K05, K06, \ - K07, K08, K09, K0A, K0B, K0C, \ - K11, K12, K13, K14, K15, K16, \ - K17, K18, K19, K1A, K1B, K1C, \ - K21, K22, K23, K24, K25, K26, \ - K27, K28, K29, K2A, K2B, K2C \ - ) \ - LAYOUT_VARG( \ - ROW1_LEFT_BP6(K01, K02, K03, K04, K05, K06), \ - ROW1_RIGHT_BP6(K07, K08, K09, K0A, K0B, K0C), \ - \ - ROW2_LEFT_BP6(K11, K12, K13, K14, K15, K16), \ - ROW2_RIGHT_BP6(K17, K18, K19, K1A, K1B, K1C), \ - \ - ROW3_LEFT_BP6(K21, K22, K23, K24, K25, K26), \ - ROW3_RIGHT_BP6(K27, K28, K29, K2A, K2B, K2C), \ - ___6_ERGO_THUMBS_BP___ \ - ) - -// All we really need is to add the see through thumbs to the end. -#define Transient6_3x6_3( \ - K01, K02, K03, K04, K05, K06, \ - K07, K08, K09, K0A, K0B, K0C, \ - K11, K12, K13, K14, K15, K16, \ - K17, K18, K19, K1A, K1B, K1C, \ - K21, K22, K23, K24, K25, K26, \ - K27, K28, K29, K2A, K2B, K2C \ - ) \ - LAYOUT_VARG( \ - K01, K02, K03, K04, K05, K06, \ - K07, K08, K09, K0A, K0B, K0C, \ - K11, K12, K13, K14, K15, K16, \ - K17, K18, K19, K1A, K1B, K1C, \ - K21, K22, K23, K24, K25, K26, \ - K27, K28, K29, K2A, K2B, K2C, \ - ___6___) - -//--------------------------------------------------------- -// 3x5 -#define Base_3x5_3( \ - K01, K02, K03, K04, K05, \ - K06, K07, K08, K09, K0A, \ - K11, K12, K13, K14, K15, \ - K16, K17, K18, K19, K1A, \ - K21, K22, K23, K24, K25, \ - K26, K27, K28, K29, K2A) \ - LAYOUT_VARG( \ - ROW1_LEFT5(K01, K02, K03, K04, K05), \ - ROW1_RIGHT5(K06, K07, K08, K09, K0A), \ - \ - ROW2_LEFT5(K11, K12, K13, K14, K15), \ - ROW2_RIGHT5(K16, K17, K18, K19, K1A), \ - \ - ROW3_LEFT5(K21, K22, K23, K24, K25), \ - ROW3_RIGHT5(K26, K27, K28, K29, K2A), \ - ___6_ERGO_THUMBS___ \ - ) - -// So we can have different transient layers for symbols and numbers on bepo. -// for layouts like dvorak on bepo. -#define Base_bepo_3x5_3( \ - K01, K02, K03, K04, K05, \ - K06, K07, K08, K09, K0A, \ - K11, K12, K13, K14, K15, \ - K16, K17, K18, K19, K1A, \ - K21, K22, K23, K24, K25, \ - K26, K27, K28, K29, K2A \ - ) \ - LAYOUT_VARG( \ - ROW1_LEFT5_BP(K01, K02, K03, K04, K05), \ - ROW1_RIGHT5_BP(K06, K07, K08, K09, K0A), \ - \ - ROW2_LEFT5_BP(K11, K12, K13, K14, K15), \ - ROW2_RIGHT5_BP(K16, K17, K18, K19, K1A), \ - \ - ROW3_LEFT5_BP(K21, K22, K23, K24, K25), \ - ROW3_RIGHT5_BP(K26, K27, K28, K29, K2A), \ - ___6_ERGO_THUMBS_BP___ \ - ) - -// All we really need is to add the see through thumbs to the end. -#define Transient5_3x5_3( \ - K01, K02, K03, K04, K05, \ - K07, K08, K09, K0A, K0B, \ - K11, K12, K13, K14, K15, \ - K17, K18, K19, K1A, K1B, \ - K21, K22, K23, K24, K25, \ - K27, K28, K29, K2A, K2B \ - ) \ - LAYOUT_VARG( \ - K01, K02, K03, K04, K05, \ - K07, K08, K09, K0A, K0B, \ - K11, K12, K13, K14, K15, \ - K17, K18, K19, K1A, K1B, \ - K21, K22, K23, K24, K25, \ - K27, K28, K29, K2A, K2B, \ - ___6___) - -/********************************************************************/ -/* Kinesis*/ -/********************************************************************/ -// Basically an ergodox ez without the 3 pairs of middle keys. -// Left, right, bottom, and thumbs all stay the same. -#define Base_4x6_4_6( \ - K01, K02, K03, K04, K05, \ - K06, K07, K08, K09, K0A, \ - K11, K12, K13, K14, K15, \ - K16, K17, K18, K19, K1A, \ - K21, K22, K23, K24, K25, \ - K26, K27, K28, K29, K2A, \ - K31, K32, K33, K34, K35, \ - K36, K37, K38, K39, K3A \ - ) \ - LAYOUT_PVARG( \ - ___KINTFUNC_L___, ___KINTFUNC_R___, \ - ROW0_LEFT(K01, K02, K03, K04, K05), \ - ROW0_RIGHT(K06, K07, K08, K09, K0A), \ - \ - ROW1_LEFT(K11, K12, K13, K14, K15), \ - ROW1_RIGHT(K16, K17, K18, K19, K1A), \ - \ - ROW2_LEFT(K21, K22, K23, K24, K25), \ - ROW2_RIGHT(K26, K27, K28, K29, K2A), \ - \ - ROW3_LEFT(K31, K32, K33, K34, K35), \ - ROW3_RIGHT(K36, K37, K38, K39, K3A), \ - ___4_BOTTOM_LEFT___, ___4_BOTTOM_RIGHT___, \ - ___12_DOX_ALL_THUMBS___ \ - ) - -#define Base_bepo_4x6_4_6( \ - K01, K02, K03, K04, K05, \ - K06, K07, K08, K09, K0A, \ - K11, K12, K13, K14, K15, \ - K16, K17, K18, K19, K1A, \ - K21, K22, K23, K24, K25, \ - K26, K27, K28, K29, K2A, \ - K31, K32, K33, K34, K35, \ - K36, K37, K38, K39, K3A \ - ) \ - LAYOUT_PVARG( \ - ___KINTFUNC_L___, ___KINTFUNC_R___, \ - ROW0_LEFT(K01, K02, K03, K04, K05), \ - ROW0_RIGHT(K06, K07, K08, K09, K0A), \ - \ - ROW1_LEFT(K11, K12, K13, K14, K15), \ - ROW1_RIGHT(K16, K17, K18, K19, K1A), \ - \ - ROW2_LEFT(K21, K22, K23, K24, K25), \ - ROW2_RIGHT(K26, K27, K28, K29, K2A), \ - \ - ROW3_LEFT(K31, K32, K33, K34, K35), \ - ROW3_RIGHT(K36, K37, K38, K39, K3A), \ - ___4_BOTTOM_LEFT___, ___4_BOTTOM_RIGHT___, \ - ___12_DOX_ALL_THUMBS_BP___ \ - ) - - -// So 3 pairs of 6 keys, left and right. -#define Base_bepo6_4x6_4_6( \ - K01, K02, K03, K04, K05, K06, \ - K07, K08, K09, K0A, K0B, K0C, \ - K11, K12, K13, K14, K15, K16, \ - K17, K18, K19, K1A, K1B, K1C, \ - K21, K22, K23, K24, K25, K26, \ - K27, K28, K29, K2A, K2B, K2C \ - ) \ - LAYOUT_PVARG( \ - ___KINTFUNC_L___, ___KINTFUNC_R___, \ - ___6SYMBOL_BEPO_L___, \ - ___6SYMBOL_BEPO_R___, \ - ROW1_LEFT_BP6(K01, K02, K03, K04, K05, K06), \ - ROW1_RIGHT_BP6(K07, K08, K09, K0A, K0B, K0C), \ - \ - ROW2_LEFT_BP6(K11, K12, K13, K14, K15, K16), \ - ROW2_RIGHT_BP6(K17, K18, K19, K1A, K1B, K1C), \ - \ - ROW3_LEFT_BP6(K21, K22, K23, K24, K25, K26), \ - ROW3_RIGHT_BP6(K27, K28, K29, K2A, K2B, K2C), \ - ___4_BOTTOM_LEFT_BP___, ___4_BOTTOM_RIGHT_BP___, \ - ___12_DOX_ALL_THUMBS_BP___ \ - ) - -#define Transient6_4x6_4_6( \ - K01, K02, K03, K04, K05, K06, \ - K07, K08, K09, K0A, K0B, K0C, \ - K11, K12, K13, K14, K15, K16, \ - K17, K18, K19, K1A, K1B, K1C, \ - K21, K22, K23, K24, K25, K26, \ - K27, K28, K29, K2A, K2B, K2C, \ - K31, K32, K33, K34, K35, K36, \ - K37, K38, K39, K3A, K3B, K3C \ - ) \ - LAYOUT_PVARG( \ - ___KINTFUNC_L___, ___KINTFUNC_R___, \ - K01, K02, K03, K04, K05, K06, \ - K07, K08, K09, K0A, K0B, K0C, \ - K11, K12, K13, K14, K15, K16, \ - K17, K18, K19, K1A, K1B, K1C, \ - K21, K22, K23, K24, K25, K26, \ - K27, K28, K29, K2A, K2B, K2C, \ - K31, K32, K33, K34, K35, K36, \ - K37, K38, K39, K3A, K3B, K3C, \ - ___4___, ___4___, \ - ___12___ \ - ) diff --git a/users/ericgebhart/listen_keylogger.sh b/users/ericgebhart/listen_keylogger.sh new file mode 100755 index 00000000000..71773d19af0 --- /dev/null +++ b/users/ericgebhart/listen_keylogger.sh @@ -0,0 +1 @@ +sudo ./hid_listen | egrep --line-buffered "(0x[A-F0-9]+,)?(NA|[0-9]+),(NA|[0-9]+),[0-9]{1,2}" | tee -a keylog.csv diff --git a/users/ericgebhart/miryoku_hd_gold_config.h b/users/ericgebhart/miryoku_hd_gold_config.h new file mode 100644 index 00000000000..8b5d06da3a0 --- /dev/null +++ b/users/ericgebhart/miryoku_hd_gold_config.h @@ -0,0 +1,325 @@ +/* + Copyright 2018 Eric Gebhart + + 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 . +*/ + + +/* This configuration creates a miryoku system with */ +/* Qwerty and Hands Down Gold. as base layers. */ + +/* It also usess layers which are the same or very closely resemble */ +/* the layers of miryoku. These can be swapped out for other choices */ +/* as desired. */ + +/* The language is set to EN, so KC_ keycodes are used. */ +/* The oled is on, rgb is off, see below. */ + + +#ifndef USERSPACE_CONFIG_H +#define USERSPACE_CONFIG_H + +// pro-micro v3's don't always detect otherwise. +/* #define SPLIT_USB_DETECT */ + +#define NO_ACTION_MACRO +#define NO_ACTION_FUNCTION +// Sets good default for the speed of the mouse. +#undef MOUSEKEY_INTERVAL +#undef MOUSEKEY_DELAY +#undef MOUSEKEY_TIME_TO_MAX +#undef MOUSEKEY_MAX_SPEED + +#define MOUSEKEY_INTERVAL 20 +#define MOUSEKEY_DELAY 100 +#define MOUSEKEY_TIME_TO_MAX 60 +#define MOUSEKEY_MAX_SPEED 7 + +#undef MOUSEKEY_WHEEL_MAX_SPEED +#undef MOUSEKEY_WHEEL_TIME_TO_MAX +#undef MOUSEKEY_WHEEL_DELAY + +#define MOUSEKEY_WHEEL_MAX_SPEED 5 +#define MOUSEKEY_WHEEL_TIME_TO_MAX 60 +#define MOUSEKEY_WHEEL_DELAY 100 + +#undef TAPPING_TOGGLE +#undef TAPPING_TERM +#undef IGNORE_MOD_TAP_INTERRUPT + +#define TAPPING_TOGGLE 2 +#define TAPPING_TERM 200 +#define IGNORE_MOD_TAP_INTERRUPT + + +#define TAP_HOLD_TERM 200 +#define COMBO_MUST_HOLD_MODS +#define COMBO_HOLD_TERM 150 +#define TAP_CODE_DELAY 5 // for send string with delay + + +/* Control switches for my keymaps. */ +/* if needed, this goes in the keyboard's config.h */ +/* Alternately, fix the number row in the layout template. */ +/* #define BASE_NUMBER_ROW // turn on 4 row base templates. */ + +// Extensions, turn them on and off. +#define USERSPACE_H "ericgebhart.h" + +// Layout definitions, which language, thumb cluster, mod layer. +// Columns in and out. + +// the default. set it, use it, set it back. +// US_INT // EN, BEPO, US_INT +#define LANG_IS EN +#define DEFAULT_LANG EN +#define DEFAULT_LANG_NAME " en" + +// Enable a second locale, for another set of layers. +// This will add bepo versions of all layers chosen. +/* #define SECOND_LOCALE BEPO */ +/* #define SECOND_LOCALE_NAME " bepo" */ + +// Choose a mod layer. Can be changed per layer. +// TRNS, ALT, HRS_NAV HRM_GACS, HRM_SCAG, HRM_GASC, MIRYOKU_HRM_GASC +#define MODS_ARE MIRYOKU_HRM_GACS +#define DEFAULT_MODS MODS_ARE + +// Choose a thumb cluster. +// WI, WIa, DEFAULT, TEST, TRNS, MODS, LAYERS, MODS_LAYERS, +// MIRYOKU, MIRYOKU_TR, MODS_LAYERS_NAV, +// The following use THUMB_LETTER to place a letter on the Thumbs. +// for use with the hands down metals, maltron, and rsthd. +// HD, HDA, HD_SIMPLE, TH_LTR, HD_DASH, +// MIRYOKU_TR_LTR, MIRYOKU_LTR +// MIRYOKU_TR_LTR_TAB, MIRYOKU_LTR_TAB +#define THUMBS_ARE DEFAULT +#define DEFAULT_THUMBS DEFAULT + +// pick the edge key set. normie, no kc, smart locks or test. +// NORM, NOKC, SML, TEST +#define EDGE_KEY_SET_IS SML +#define DEFAULT_EDGE_SET SML + +// for the base layers which need a thumb cluster which takes a letter. +#define HANDS_DOWN_LTR_THUMBS_ARE MIRYOKU_LTR_TAB +#define MALTRON_LTR_THUMBS_ARE TH_LTR +#define RSTHD_LTR_THUMBS_ARE TH_LTR + +// layout io, matrix size. +// a reasonable default for most keyboards. +// give a 3x10 and get a 3x12, managed in keyboards/keyboards.h +#define BASE_COLS_IN_OUT 5_6 // 5, 5_6, 6 + +// OLED STUFF. +#define OLED_CUSTOM_ENABLE // custom oled here. +//#define OLED_LOGO_ENABLE // turn on/off the logo. +//#define KEYLOGGER_ENABLE // 1500 bytes, track and print keypress info to oled. +//#define SPLIT_LAYER_STATE_ENABLE // to sync state between sides. + +// EXTENSIONS + +// Combos +#define COMBO_REF_LAYER_ENABLE +// #define COMBO_REF_LAYER_TWO_ENABLE +// works if you know the number of your layer. +// otherwise set and use them later. +// #define COMBO_ONLY_FROM_LAYER 2 +// #define COMBO_REF_DEFAULT 2 + + +// Console key logging for creation of heatmaps, etc. +// CONSOLE must be enabled for this to work. +// To create Precondition's heat maps, from console key logging +// with hid_listen or qmk console +//#define CONSOLE_KEY_LOGGER_ENABLE // turn on keylogging for heat maps. + +#define ALT_LOCAL_ENABLE // alternate key combinations, with mods as needed. +//#define ACCENTED_KEYS_ENABLE // direct access to altgr keys. + +#define SMART_LOCK_ENABLE // smart lock layers and mods. +//#define MOD_LOCK_ENABLE // smart lock mods, similar/overlapping with Smart lock. +#define NSHOT_ENABLE // smart n-shot for count. +//#define ONESHOT_MOD_ENABLE // oneshot mods, similar/overlapping with nshots + +#define CAPS_WORD_ENABLE // caps word. both shifts to caps a word. +#define TAP_HOLD_ENABLE // tap for one thing, hold for tapping term to get another. +//#define SWAPPER_ENABLE // enable swapper keys. +#define NOT_DEAD_ENABLE // make undead versions (US_DQUO_ND) of dead keys. +//#define ALT_SHIFT_ENABLE // alternate shift behaviors for existing keys. +//#define SEND_STRING_ENABLE // Turn on send string keys +//#define SEND_UNICODE_ENABLE // Unicode must be enabled for this to work. + + +// Turn on the base layers do not exceed 4 if doing two locales. +// That will likely push a layer past 15 and then it will +// no longer work with the LT macro. + +// dvorak and relatives +//#define DVORAK_LAYER_ENABLE +//#define CAPEWELL_DVORAK_LAYER_ENABLE +//#define AHEI_LAYER_ENABLE +//#define BOO_LAYER_ENABLE + +// qwerty and derivitives +#define QWERTY_LAYER_ENABLE +//#define AZERTY_LAYER_ENABLE +//#define WORKMAN_LAYER_ENABLE +//#define NORMAN_LAYER_ENABLE + +// COLEMAK and relatives +//#define COLEMAK_LAYER_ENABLE +//#define COLEMAK_DH_LAYER_ENABLE +//#define HALMAK_LAYER_ENABLE +//#define MINIMAK_LAYER_ENABLE +//#define MINIMAK_8_LAYER_ENABLE +//#define MINIMAK_12_LAYER_ENABLE + +// BEAKL +// #define BEAKL15_LAYER_ENABLE +//#define BEAKL19_LAYER_ENABLE +//#define BEAKL27_LAYER_ENABLE +//#define BEAKLWI_LAYER_ENABLE + +// carpalx layouts +//#define CARPALX_QFMLWY_LAYER_ENABLE +//#define CARPALX_QGMLWB_LAYER_ENABLE +//#define CARPALX_QGMLWY_LAYER_ENABLE + +// alternate layouts +//#define MALTRON_LAYER_ENABLE +//#define EUCALYN_LAYER_ENABLE +//#define HANDS_UP_LAYER_ENABLE +//#define RSTHD_LAYER_ENABLE +//#define HANDS_UP_LAYER_ENABLE +//#define WHITE_LAYER_ENABLE +//#define ISRT_LAYER_ENABLE +//#define SOUL_LAYER_ENABLE +//#define NIRO_LAYER_ENABLE +//#define ASSET_LAYER_ENABLE +//#define WHORF_LAYER_ENABLE +//#define WHORF6_LAYER_ENABLE + +// mtgap and relatives +//#define MTGAP_LAYER_ENABLE +//#define CTGAP_LAYER_ENABLE +//#define APT_LAYER_ENABLE + +// Hands down +//#define HD_NEU_NARROW_LAYER_ENABLE +//#define HD_REF_LAYER_ENABLE +//#define HD_DASH_LAYER_ENABLE +//#define HD_ELAN_LAYER_ENABLE +//#define HD_BRONZE_LAYER_ENABLE +//#define HD_SILVER_LAYER_ENABLE +//#define HD_PLATINUM_LAYER_ENABLE +#define HD_GOLD_LAYER_ENABLE + +// 3x12 sized base layers +//-------------------------- +//#define HD_NEU_LAYER_ENABLE + +// additionally all these have accent characters on base layer. +//#define BEPO_LAYER_ENABLE +//#define OPTIMOT_LAYER_ENABLE +//#define BEAKL19bis_LAYER_ENABLE + + +// enable transient function layers. +#define SYMBOL_LAYER_ENABLE +#define NAV_LAYER_ENABLE +// #define MOUSE_LAYER_ENABLE +//#define TOPROWS_LAYER_ENABLE +// #define LAYERS_LAYER_ENABLE - defunct. always on. +#define KEYPAD_LAYER_ENABLE +//#define ADJUST_LAYER_ENABLE +//#define RGB_LAYER_ENABLE +#define MEDIA_LAYER_ENABLE +#define FUNC_LAYER_ENABLE + + +// define alternate thumb definitions for the transient layers. +#define MEDIA_LAYER_THUMBS MEDIA_THUMBS +#define MOUSE_LAYER_THUMBS MOUSE_THUMBS +#define NAV_LAYER_THUMBS TRNS_THUMBS +#define KEYPAD_LAYER_THUMBS KEYPAD_THUMBS +#define SYMB_LAYER_THUMBS SYMB_THUMBS +#define TOPROWS_LAYER_THUMBS DEFAULT + +// Extra character layers. +// Bepo has dead keys (altgr) and accented keycodes +// A layer of accented keys +// #define ACCENTS_LAYER_ENABLE +// A layer of dead keys +// #define MORTE_LAYER_ENABLE +// A layer of the most popular accented keys and dead keys +// #define ACCENTS_MORTE_LAYER_ENABLE + +// Functional layer choices. +/* configure the function layers. */ +/* They have to be turned on above. */ +/* Choose one of each as desired. */ +/* There are reasonable defaults */ +/* for each if nothing is defined. */ + +/* nav */ +//#define NAV_FULL // monolithic, two sided nav with mouse and arrows. +//#define NAV_FULL_LOCK_MODS // Replace left mouse buttons with lockmods. + +// Just the non mouse bits, with lock mods, n-shot mods on the left. +// if mousekeys enabled, adds a mouse layer accessible via smart lock. +// #define NAV_NO_MOUSE +#define NAV_MIRYOKU +#define NAV_MOUSE_MIRYOKU + + +/* keypads */ +// beakl keypads are usual, if not chosen, regular keypads will be used. +// left side is the default. +// Beakl, except for WI, is only on the left side. +// Miryoku is on the left also. + +//#define KEYPAD_RIGHT +//#define KEYPAD_BEAKL // beakl doesn't have a rightside, swap hands? +//#define KEYPAD_MODS // give mods on the other side instead of funcs. +//#define KEYPAD_BEAKL_WI // right side with hexpad on left. +#define KEYPAD_MIRYOKU // use the miryoku keypad +// the default if nothing chosen, +// is a functionpad on the left and normal keypad on the right. + +// funcpad from miryoku +#define FUNCPAD_MIRYOKU + + +/* symbols */ +// pick one of these or get the default. +//#define SYMBOL_BEAKL // original - the default if nothing else. +//#define SYMBOL_BEAKL_EXT // extended for non beakl base layers. +//#define SYMBOL_BEAKL_EXT_VI // extended with vi keybinding in mind. +//#define SYMBOL_BEAKL_C // more alterations by frequency +// #define SYMBOL_NEO // The symbol layer from the Neo layout. +#define SYMBOL_MIRYOKU // minimalist symbols after miryoku +//#define SYMBOL_BEAKL_WI // original wi + + +/* toprows. */ +// The default, if not defined, is a standard qwerty set of rows. +// symbols, numbers, function keys. Numbers on the home row. + +// #define TOPROWS_BKL_15_NUMS // center row with Beakl15 order. 40123 76598. +// #define TOPROWS_BKL_19_NUMS // Beakl 19 order: 32104 76598 +//#define TOPROWS_MOD // beakl 15 nums, oneshot and smart lock mods. no Fkeys. + + +#endif diff --git a/users/ericgebhart/mod_layer.h b/users/ericgebhart/mod_layer.h deleted file mode 100644 index a3c64b0bf75..00000000000 --- a/users/ericgebhart/mod_layer.h +++ /dev/null @@ -1,178 +0,0 @@ -#pragma once - -/* - Copyright 2018 Eric Gebhart - - 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 . -*/ -// define our rows for the mod layer -// takes 5 keycodes, adds mods, and left and right -// so we get keycodes in groups of 6. -// There are 3 sets of 4 rows. -// 1 for normal 6 columns, qwerty, dvorak etc. -// 1 for bepo/normal 6 columns, qwerty, dvorak etc. on bepo. -// 1 for bepo 6 columns provided instead of a 5, for bepo which needs 3x12. -// A 5 column keyboard would need another set of MACROS. - -// These macros are used in the layout wrapper macros to introduce a mod -// layer. HomeRow mods and other things like that go here. - - -#include "core_keys.h" - -//number row. -#define ROW0_LEFT(K01, K02, K03, K04, K05) \ - LEFT0, K01, K02, K03, K04, K05 - -#define ROW0_RIGHT(K01, K02, K03, K04, K05) \ - K01, K02, K03, K04, K05, RIGHT0 - -#define ROW1_LEFT(K01, K02, K03, K04, K05) \ - LEFT1, K01, K02, K03, LT(_NAV, K04), K05 - -#define ROW1_RIGHT(K01, K02, K03, K04, K05) \ - K01, K02, K03, K04, K05, RIGHT1 - -// home row, shift, alt, ctl, gui - gui, ctl, alt, shift. -// using MT so we can specify left and right. -// caps_word needs left and right shift. -#define ROW2_LEFT(K01, K02, K03, K04, K05) \ - LEFT2, MT(MOD_LSFT, K01), MT(MOD_LALT, K02), MT(MOD_LCTL, K03), MT(MOD_LGUI, K04), K05 - -#define ROW2_RIGHT(K01, K02, K03, K04, K05) \ - K01, MT(MOD_RGUI, K02), MT(MOD_RCTL, K03), MT(MOD_RALT, K04), MT(MOD_RSFT, K05), RIGHT2 \ - -#define ROW3_LEFT(K01, K02, K03, K04, K05) \ - LEFT3, K01, LT(_TOPROWS, K02), K03, LT(_SYMB, K04), K05 - -#define ROW3_RIGHT(K01, K02, K03, K04, K05) \ - K01, LT(_SYMB, K02), LT(_NAV, K03), LT(_TOPROWS, K04), K05, RIGHT3 - - -//-----------------------------------------------y -// For a 5 column keyboard - no edges added. -//number row. -#define ROW0_LEFT5(K01, K02, K03, K04, K05) \ - K01, K02, K03, K04, K05 - -#define ROW0_RIGHT5(K01, K02, K03, K04, K05) \ - K01, K02, K03, K04, K05 - -#define ROW1_LEFT5(K01, K02, K03, K04, K05) \ - LT(_LAYERS, K01), K02, LT(_KEYPAD, K03), K04, K05 - -#define ROW1_RIGHT5(K01, K02, K03, K04, K05) \ - K01, K02, LT(_KEYPAD, K03), K04, LT(_LAYERS, K05) - -// home row, shift, alt, ctl, gui - gui, ctl, alt, shift. -// using MT so we can specify left and right. -// caps_word needs left and right shift. -#define ROW2_LEFT5(K01, K02, K03, K04, K05) \ - MT(MOD_LSFT, K01), MT(MOD_LALT, K02), MT(MOD_LCTL, K03), MT(MOD_LGUI, K04), K05 - -#define ROW2_RIGHT5(K01, K02, K03, K04, K05) \ - K01, MT(MOD_RGUI, K02), MT(MOD_RCTL, K03), MT(MOD_RALT, K04), MT(MOD_RSFT, K05) - -#define ROW3_LEFT5(K01, K02, K03, K04, K05) \ - K01, LT(_TOPROWS, K02), LT(_NAV, K03), LT(_SYMB, K04), K05 - -#define ROW3_RIGHT5(K01, K02, K03, K04, K05) \ - K01, LT(_SYMB, K02), LT(_NAV, K03), LT(_TOPROWS, K04), K05 - - -//-------------------------------------------- -//bepo -#define ROW0_LEFT_BP(K01, K02, K03, K04, K05) \ - LEFT0_BP, K01, K02, K03, K04, K05 - -#define ROW0_RIGHT_BP(K01, K02, K03, K04, K05) \ - K01, K02, K03, K04, K05, RIGHT0_BP - -#define ROW1_LEFT_BP(K01, K02, K03, K04, K05) \ - LEFT1_BP, K01, K02, K03, LT(_KEYPAD, K04), K05 - -#define ROW1_RIGHT_BP(K01, K02, K03, K04, K05) \ - K01, K02, LT(_KEYPAD, K03), K04, K05, RIGHT1_BP - -#define ROW2_LEFT_BP(K01, K02, K03, K04, K05) \ - LEFT2_BP, MT(MOD_RSFT, K01), MT(MOD_LALT,K02), MT(MOD_RCTL, K03), \ - MT(MOD_LGUI, K04), K05 - -#define ROW2_RIGHT_BP(K01, K02, K03, K04, K05) \ - K01, MT(MOD_RGUI, K02), MT(MOD_RCTL, K03), MT(MOD_RALT, K04), \ - MT(MOD_RSFT, K05), RIGHT2_BP \ - -#define ROW3_LEFT_BP(K01, K02, K03, K04, K05) \ - LEFT3_BP, K01, LT(_SYMB_BP, K02), LT(_NAV, K03), LT(_TOPROWS_BP, K04), K05 - -#define ROW3_RIGHT_BP(K01, K02, K03, K04, K05) \ - K01, LT(_SYMB_BP, K02), LT(_NAV, K03), LT(_TOPROWS_BP, K04), K05, RIGHT3_BP - - -//------------------------------------------------- -//bepo - 6 args, no left or right added. -#define ROW0_LEFT_BP6(K01, K02, K03, K04, K05, K06) \ - K01, K02, K03, K04, K05, K06 - -#define ROW0_RIGHT_BP6(K01, K02, K03, K04, K05, K06 ) \ - K01, K02, K03, K04, K05, K06 - -#define ROW1_LEFT_BP6(K01, K02, K03, K04, K05, K06) \ - K01, K02, K03, K04, K05, K06 - -#define ROW1_RIGHT_BP6(K01, K02, K03, K04, K05, K06 ) \ - K01, K02, K03, K04, K05, K06 - -#define ROW2_LEFT_BP6(K01, K02, K03, K04, K05, K06) \ - K01, SFT_T(K02), ALT_T(K03), CTL_T(K04), GUI_T(K05), K06 - -#define ROW2_RIGHT_BP6(K01, K02, K03, K04, K05, K06) \ - K01, GUI_T(K02), RCTL_T(K03), RALT_T(K04), RSFT_T(K05), K06 - -#define ROW3_LEFT_BP6(K01, K02, K03, K04, K05, K06) \ - K01, K02, K03, K04, K05, K06 - -#define ROW3_RIGHT_BP6(K01, K02, K03, K04, K05, K06 ) \ - K01, K02, K03, K04, K05, K06 - - -//------------------------------------------------- -// For a 5 column keyboard - no edges added. -//number row. -#define ROW0_LEFT5_BP(K01, K02, K03, K04, K05) \ - K01, K02, K03, K04, K05 - -#define ROW0_RIGHT5_BP(K01, K02, K03, K04, K05) \ - K01, K02, K03, K04, K05 - -#define ROW1_LEFT5_BP(K01, K02, K03, K04, K05) \ - LT(_LAYERS, K01), K02, K03, LT(_KEYPAD_BP, K04), K05 - -#define ROW1_RIGHT5_BP(K01, K02, K03, K04, K05) \ - K01, LT(_KEYPAD_BP, K02), K03, K04, K05 - -// home row, shift, alt, ctl, gui - gui, ctl, alt, shift. -// using MT so we can specify left and right. -// caps_word needs left and right shift. -#define ROW2_LEFT5_BP(K01, K02, K03, K04, K05) \ - MT(MOD_LSFT, K01), MT(MOD_LALT, K02), MT(MOD_LCTL, K03), MT(MOD_LGUI, K04), K05 - -#define ROW2_RIGHT5_BP(K01, K02, K03, K04, K05) \ - K01, MT(MOD_RGUI, K02), MT(MOD_RCTL, K03), MT(MOD_RALT, K04), MT(MOD_RSFT, K05) - -#define ROW3_LEFT5_BP(K01, K02, K03, K04, K05) \ - K01, LT(_TOPROWS_BP, K02), LT(_NAV, K03), LT(_SYMB_BP, K04), K05 - -#define ROW3_RIGHT5_BP(K01, K02, K03, K04, K05) \ - K01, LT(_SYMB_BP, K02), LT(_NAV, K03), LT(_TOPROWS_BP, K04), K05 diff --git a/users/ericgebhart/mod_layers/alt_mods.h b/users/ericgebhart/mod_layers/alt_mods.h new file mode 100644 index 00000000000..db13ee041d7 --- /dev/null +++ b/users/ericgebhart/mod_layers/alt_mods.h @@ -0,0 +1,129 @@ +#pragma once +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ +// +// non Home row mods, mod layer. + +// MOD_ROW variants. +// input 5 get six, left and right language specific outer edge keys. + +// no edge keys. +// input 5 get 5 with mods applied. + +// input 6 get 6 with mods applied. + +// base cols in out. 5, 5_6, 6. +// input column count, output column count, if different. + +// L_5 Left R_5 Right. +// K01, K02, K03, K04, K05 - K01, K02, K03, K04, K05 +// pky, rng, mdl, idx, idx - idx, idx, mdl, rng, pnky + +// ROW0 - Number row. +// LEFT. +#define ROW0L_5_alt(K01, K02, K03, K04, K05) \ + K01, K02, K03, K04, K05 +// take and put an extra column in front. Mod K01 how you want it. +#define ROW0L_6_alt(K01, K02, K03, K04, K05, K06) K01, \ + ROW0L_5_alt(K02, K03, K04, K05, K06) + +// 5 into 6, derivitive of the first two. +#define ROW0L_5_6_alt(K01, K02, K03, K04, K05) \ + ROW0L_6_alt(LEFT_0, K01, K02, K03, K04, K05) + +// RIGHT. +#define ROW0R_5_alt(K01, K02, K03, K04, K05) \ + K01, K02, K03, K04, K05 +// take and put an extra column in front. Mod K01 how you want it. +#define ROW0R_6_alt(K01, K02, K03, K04, K05, K06) \ + ROW0R_5_alt(K01, K02, K03, K04, K05), K06 + +// 5 into 6, derivitive of the first two. +#define ROW0R_5_6_alt(K01, K02, K03, K04, K05) \ + ROW0R_6_alt(K01, K02, K03, K04, K05, RIGHT_0) + + +// ROW1 +// LEFT. +#define ROW1L_5_alt(K01, K02, K03, K04, K05) \ + K01, K02, K03, K04, K05 +// take and put an extra column in front. Mod K01 how you want it. +#define ROW1L_6_alt(K01, K02, K03, K04, K05, K06) K01, \ + ROW1L_5_alt(K02, K03, K04, K05, K06) + +// 5 into 6, derivitive of the first two. +#define ROW1L_5_6_alt(K01, K02, K03, K04, K05) \ + ROW1L_6_alt(LEFT_1, K01, K02, K03, K04, K05) + +// RIGHT. +#define ROW1R_5_alt(K01, K02, K03, K04, K05) \ + K01, K02, K03, K04, K05 \ + // take and put an extra column in front. Mod K01 how you want it. +#define ROW1R_6_alt(K01, K02, K03, K04, K05, K06) \ + ROW1R_5_alt(K01, K02, K03, K04, K05), K06 + +// 5 into 6, derivitive of the first two. +#define ROW1R_5_6_alt(K01, K02, K03, K04, K05) \ + ROW1R_6_alt(K01, K02, K03, K04, K05, RIGHT_1) + + +// HOME ROW - ROW2 +// LEFT. +#define ROW2L_5_alt(K01, K02, K03, K04, K05) \ + K01, K02, LT(_NAV, K03), MT(MOD_LSFT, K04), K05 +// take and put an extra column in front. Mod K01 how you want it. +#define ROW2L_6_alt(K01, K02, K03, K04, K05, K06) K01, \ + ROW2L_5_alt(K02, K03, K04, K05, K06) + +// 5 into 6, derivitive of the first two. +#define ROW2L_5_6_alt(K01, K02, K03, K04, K05) \ + ROW2L_6_alt(LEFT_2, K01, K02, K03, K04, K05) + +// RIGHT. +#define ROW2R_5_alt(K01, K02, K03, K04, K05) \ + K01, MT(MOD_LSFT, K02), LT(_NAV, K03), K04, K05 \ + // take and put an extra column in front. Mod K01 how you want it. +#define ROW2R_6_alt(K01, K02, K03, K04, K05, K06) \ + ROW2R_5_alt(K01, K02, K03, K04, K05), K06 + +// 5 into 6, derivitive of the first two. +#define ROW2R_5_6_alt(K01, K02, K03, K04, K05) \ + ROW2R_6_alt(K01, K02, K03, K04, K05, RIGHT_2) + + +// ROW 3 +// LEFT. +#define ROW3L_5_alt(K01, K02, K03, K04, K05) \ + K01, K02, LT(_NAV, K03), K04, MT(MOD_LSFT, K05) +// take and put an extra column in front. Mod K01 how you want it. +#define ROW3L_6_alt(K01, K02, K03, K04, K05, K06) K01, \ + ROW3L_5_alt(K02, K03, K04, K05, K06) + +// 5 into 6, derivitive of the first two. +#define ROW3L_5_6_alt(K01, K02, K03, K04, K05) \ + ROW3L_6_alt(LEFT_3, K01, K02, K03, K04, K05) + +// RIGHT. +#define ROW3R_5_alt(K01, K02, K03, K04, K05) \ + K01, K02, K03, K04, K05 +// take and put an extra column in front. Mod K01 how you want it. +#define ROW3R_6_alt(K01, K02, K03, K04, K05, K06) K01, \ + ROW3R_5_alt(K02, K03, K04, K05, K06) + +// 5 into 6, derivitive of the first two. +#define ROW3R_5_6_alt(K01, K02, K03, K04, K05) \ + ROW3R_6_alt(K01, K02, K03, K04, K05, RIGHT_3) diff --git a/users/ericgebhart/mod_layers/hrm_gacs.h b/users/ericgebhart/mod_layers/hrm_gacs.h new file mode 100644 index 00000000000..4bcf092732a --- /dev/null +++ b/users/ericgebhart/mod_layers/hrm_gacs.h @@ -0,0 +1,130 @@ +#pragma once +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ +// Home row mods variant of mod layers. + +// MOD_ROW +// variants. +// input 5 get six, left and right language specific outer edge keys. + +// no edge keys. +// input 5 get 5 with mods applied. + +// input 6 get 6 with mods applied. + +// base cols in out. 5, 5_6, 6. +// input column count, output column count, if different. + +// ROW0 - Number row. +// LEFT. +#define ROW0L_5_hrm_gacs(K01, K02, K03, K04, K05) \ + K01, K02, K03, K04, K05 +// take and put an extra column in front. Mod K01 how you want it. +#define ROW0L_6_hrm_gacs(K01, K02, K03, K04, K05, K06) K01, \ + ROW0L_5_hrm_gacs(K02, K03, K04, K05, K06) + +// 5 into 6, derivitive of the first two. +#define ROW0L_5_6_hrm_gacs(K01, K02, K03, K04, K05) \ + ROW0L_6_hrm_gacs(LEFT_0, K01, K02, K03, K04, K05) + +// RIGHT. +#define ROW0R_5_hrm_gacs(K01, K02, K03, K04, K05) \ + K01, K02, K03, K04, K05 +// take and put an extra column in front. Mod K01 how you want it. +#define ROW0R_6_hrm_gacs(K01, K02, K03, K04, K05, K06) \ + ROW0R_5_hrm_gacs(K01, K02, K03, K04, K05), K06 + +// 5 into 6, derivitive of the first two. +#define ROW0R_5_6_hrm_gacs(K01, K02, K03, K04, K05) \ + ROW0R_6_hrm_gacs(K01, K02, K03, K04, K05, RIGHT_0) + + +// ROW1 +// LEFT. +#define ROW1L_5_hrm_gacs(K01, K02, K03, K04, K05) \ + K01, K02, K03, LT(_NAV, K04), K05 +// take and put an extra column in front. Mod K01 how you want it. +#define ROW1L_6_hrm_gacs(K01, K02, K03, K04, K05, K06) K01, \ + ROW1L_5_hrm_gacs(K02, K03, K04, K05, K06) + +// 5 into 6, derivitive of the first two. +#define ROW1L_5_6_hrm_gacs(K01, K02, K03, K04, K05) \ + ROW1L_6_hrm_gacs(LEFT_1, K01, K02, K03, K04, K05) + +// RIGHT. +#define ROW1R_5_hrm_gacs(K01, K02, K03, K04, K05) \ + K01, K02, K03, K04, LT(_LAYERS, K05) \ + // take and put an extra column in front. Mod K01 how you want it. +#define ROW1R_6_hrm_gacs(K01, K02, K03, K04, K05, K06) \ + ROW1R_5_hrm_gacs(K01, K02, K03, K04, K05), K06 + +// 5 into 6, derivitive of the first two. +#define ROW1R_5_6_hrm_gacs(K01, K02, K03, K04, K05) \ + ROW1R_6_hrm_gacs(K01, K02, K03, K04, K05, RIGHT_1) + + + +// HOME ROW - ROW2 +// home row, shift, alt, ctl, gui - gui, ctl, alt, shift. +// using MT so we can specify left and right. +// caps_word needs left and right shift. + +// LEFT. +#define ROW2L_5_hrm_gacs(K01, K02, K03, K04, K05) \ + MT(MOD_LGUI, K01), MT(MOD_LALT, K02), MT(MOD_LCTL, K03), MT(MOD_LSFT, K04), K05 +// take and put an extra column in front. Mod K01 how you want it. +#define ROW2L_6_hrm_gacs(K01, K02, K03, K04, K05, K06) K01, \ + ROW2L_5_hrm_gacs(K02, K03, K04, K05, K06) + +// 5 into 6, derivitive of the first two. +#define ROW2L_5_6_hrm_gacs(K01, K02, K03, K04, K05) \ + ROW2L_6_hrm_gacs(LEFT_2, K01, K02, K03, K04, K05) + +// RIGHT. +#define ROW2R_5_hrm_gacs(K01, K02, K03, K04, K05) \ + K01, MT(MOD_RSFT, K02), MT(MOD_RCTL, K03), MT(MOD_RALT, K04), MT(MOD_RGUI, K05) \ + // take and put an extra column in front. Mod K01 how you want it. +#define ROW2R_6_hrm_gacs(K01, K02, K03, K04, K05, K06) \ + ROW2R_5_hrm_gacs(K01, K02, K03, K04, K05), K06 + +// 5 into 6, derivitive of the first two. +#define ROW2R_5_6_hrm_gacs(K01, K02, K03, K04, K05) \ + ROW2R_6_hrm_gacs(K01, K02, K03, K04, K05, RIGHT_2) + + +// ROW 3 +// LEFT. +#define ROW3L_5_hrm_gacs(K01, K02, K03, K04, K05) \ + K01, K02, K03, K04, K05 +// take and put an extra column in front. Mod K01 how you want it. +#define ROW3L_6_hrm_gacs(K01, K02, K03, K04, K05, K06) K01, \ + ROW3L_5_hrm_gacs(K02, K03, K04, K05, K06) + +// 5 into 6, derivitive of the first two. +#define ROW3L_5_6_hrm_gacs(K01, K02, K03, K04, K05) \ + ROW3L_6_hrm_gacs(LEFT_3, K01, K02, K03, K04, K05) + +// RIGHT. +#define ROW3R_5_hrm_gacs(K01, K02, K03, K04, K05) \ + K01, LT(_NAV, K02), K03, LT(LANG_N(_SYMB), K04), K05 +// take and put an extra column in front. Mod K01 how you want it. +#define ROW3R_6_hrm_gacs(K01, K02, K03, K04, K05, K06) K01, \ + ROW3R_5_hrm_gacs(K02, K03, K04, K05, K06) + +// 5 into 6, derivitive of the first two. +#define ROW3R_5_6_hrm_gacs(K01, K02, K03, K04, K05) \ + ROW3R_6_hrm_gacs(K01, K02, K03, K04, K05, RIGHT_3) diff --git a/users/ericgebhart/mod_layers/hrm_gacs_miryoku.h b/users/ericgebhart/mod_layers/hrm_gacs_miryoku.h new file mode 100644 index 00000000000..0238e9a567f --- /dev/null +++ b/users/ericgebhart/mod_layers/hrm_gacs_miryoku.h @@ -0,0 +1,130 @@ +#pragma once +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ +// Home row mods variant of mod layers. + +// MOD_ROW +// variants. +// input 5 get six, left and right language specific outer edge keys. + +// no edge keys. +// input 5 get 5 with mods applied. + +// input 6 get 6 with mods applied. + +// base cols in out. 5, 5_6, 6. +// input column count, output column count, if different. + +// ROW0 - Number row. +// LEFT. +#define ROW0L_5_miryoku_hrm_gacs(K01, K02, K03, K04, K05) \ + K01, K02, K03, K04, K05 +// take and put an extra column in front. Mod K01 how you want it. +#define ROW0L_6_miryoku_hrm_gacs(K01, K02, K03, K04, K05, K06) K01, \ + ROW0L_5_miryoku_hrm_gacs(K02, K03, K04, K05, K06) + +// 5 into 6, derivitive of the first two. +#define ROW0L_5_6_miryoku_hrm_gacs(K01, K02, K03, K04, K05) \ + ROW0L_6_miryoku_hrm_gacs(LEFT_0, K01, K02, K03, K04, K05) + +// RIGHT. +#define ROW0R_5_miryoku_hrm_gacs(K01, K02, K03, K04, K05) \ + K01, K02, K03, K04, K05 +// take and put an extra column in front. Mod K01 how you want it. +#define ROW0R_6_miryoku_hrm_gacs(K01, K02, K03, K04, K05, K06) \ + ROW0R_5_miryoku_hrm_gacs(K01, K02, K03, K04, K05), K06 + +// 5 into 6, derivitive of the first two. +#define ROW0R_5_6_miryoku_hrm_gacs(K01, K02, K03, K04, K05) \ + ROW0R_6_miryoku_hrm_gacs(K01, K02, K03, K04, K05, RIGHT_0) + + +// ROW1 +// LEFT. +#define ROW1L_5_miryoku_hrm_gacs(K01, K02, K03, K04, K05) \ + K01, K02, K03, LT(_NAV, K04), K05 +// take and put an extra column in front. Mod K01 how you want it. +#define ROW1L_6_miryoku_hrm_gacs(K01, K02, K03, K04, K05, K06) K01, \ + ROW1L_5_miryoku_hrm_gacs(K02, K03, K04, K05, K06) + +// 5 into 6, derivitive of the first two. +#define ROW1L_5_6_miryoku_hrm_gacs(K01, K02, K03, K04, K05) \ + ROW1L_6_miryoku_hrm_gacs(LEFT_1, K01, K02, K03, K04, K05) + +// RIGHT. +#define ROW1R_5_miryoku_hrm_gacs(K01, K02, K03, K04, K05) \ + K01, K02, K03, K04, LT(_LAYERS, K05) \ + // take and put an extra column in front. Mod K01 how you want it. +#define ROW1R_6_miryoku_hrm_gacs(K01, K02, K03, K04, K05, K06) \ + ROW1R_5_miryoku_hrm_gacs(K01, K02, K03, K04, K05), K06 + +// 5 into 6, derivitive of the first two. +#define ROW1R_5_6_miryoku_hrm_gacs(K01, K02, K03, K04, K05) \ + ROW1R_6_miryoku_hrm_gacs(K01, K02, K03, K04, K05, RIGHT_1) + + + +// HOME ROW - ROW2 +// home row, shift, alt, ctl, gui - gui, ctl, alt, shift. +// using MT so we can specify left and right. +// caps_word needs left and right shift. + +// LEFT. +#define ROW2L_5_miryoku_hrm_gacs(K01, K02, K03, K04, K05) \ + MT(MOD_LGUI, K01), MT(MOD_LALT, K02), MT(MOD_LCTL, K03), MT(MOD_LSFT, K04), K05 +// take and put an extra column in front. Mod K01 how you want it. +#define ROW2L_6_miryoku_hrm_gacs(K01, K02, K03, K04, K05, K06) K01, \ + ROW2L_5_miryoku_hrm_gacs(K02, K03, K04, K05, K06) + +// 5 into 6, derivitive of the first two. +#define ROW2L_5_6_miryoku_hrm_gacs(K01, K02, K03, K04, K05) \ + ROW2L_6_miryoku_hrm_gacs(LEFT_2, K01, K02, K03, K04, K05) + +// RIGHT. +#define ROW2R_5_miryoku_hrm_gacs(K01, K02, K03, K04, K05) \ + K01, MT(MOD_RSFT, K02), MT(MOD_RCTL, K03), MT(MOD_LALT, K04), MT(MOD_RGUI, K05) \ + // take and put an extra column in front. Mod K01 how you want it. +#define ROW2R_6_miryoku_hrm_gacs(K01, K02, K03, K04, K05, K06) \ + ROW2R_5_miryoku_hrm_gacs(K01, K02, K03, K04, K05), K06 + +// 5 into 6, derivitive of the first two. +#define ROW2R_5_6_miryoku_hrm_gacs(K01, K02, K03, K04, K05) \ + ROW2R_6_miryoku_hrm_gacs(K01, K02, K03, K04, K05, RIGHT_2) + + +// ROW 3 +// LEFT. +#define ROW3L_5_miryoku_hrm_gacs(K01, K02, K03, K04, K05) \ + K01, MT(MOD_RALT, K02), K03, K04, K05 +// take and put an extra column in front. Mod K01 how you want it. +#define ROW3L_6_miryoku_hrm_gacs(K01, K02, K03, K04, K05, K06) K01, \ + ROW3L_5_miryoku_hrm_gacs(K02, K03, K04, K05, K06) + +// 5 into 6, derivitive of the first two. +#define ROW3L_5_6_miryoku_hrm_gacs(K01, K02, K03, K04, K05) \ + ROW3L_6_miryoku_hrm_gacs(LEFT_3, K01, K02, K03, K04, K05) + +// RIGHT. +#define ROW3R_5_miryoku_hrm_gacs(K01, K02, K03, K04, K05) \ + K01, K02, K03, MT(MOD_RALT, K04), K05 +// take and put an extra column in front. Mod K01 how you want it. +#define ROW3R_6_miryoku_hrm_gacs(K01, K02, K03, K04, K05, K06) K01, \ + ROW3R_5_miryoku_hrm_gacs(K02, K03, K04, K05, K06) + +// 5 into 6, derivitive of the first two. +#define ROW3R_5_6_miryoku_hrm_gacs(K01, K02, K03, K04, K05) \ + ROW3R_6_miryoku_hrm_gacs(K01, K02, K03, K04, K05, RIGHT_3) diff --git a/users/ericgebhart/mod_layers/hrm_gasc.h b/users/ericgebhart/mod_layers/hrm_gasc.h new file mode 100644 index 00000000000..6eacb13ad67 --- /dev/null +++ b/users/ericgebhart/mod_layers/hrm_gasc.h @@ -0,0 +1,130 @@ +#pragma once +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ +// Home row mods variant of mod layers. + +// MOD_ROW +// variants. +// input 5 get six, left and right language specific outer edge keys. + +// no edge keys. +// input 5 get 5 with mods applied. + +// input 6 get 6 with mods applied. + +// base cols in out. 5, 5_6, 6. +// input column count, output column count, if different. + +// ROW0 - Number row. +// LEFT. +#define ROW0L_5_hrm_gasc(K01, K02, K03, K04, K05) \ + K01, K02, K03, K04, K05 +// take and put an extra column in front. Mod K01 how you want it. +#define ROW0L_6_hrm_gasc(K01, K02, K03, K04, K05, K06) K01, \ + ROW0L_5_hrm_gasc(K02, K03, K04, K05, K06) + +// 5 into 6, derivitive of the first two. +#define ROW0L_5_6_hrm_gasc(K01, K02, K03, K04, K05) \ + ROW0L_6_hrm_gasc(LEFT_0, K01, K02, K03, K04, K05) + +// RIGHT. +#define ROW0R_5_hrm_gasc(K01, K02, K03, K04, K05) \ + K01, K02, K03, K04, K05 +// take and put an extra column in front. Mod K01 how you want it. +#define ROW0R_6_hrm_gasc(K01, K02, K03, K04, K05, K06) \ + ROW0R_5_hrm_gasc(K01, K02, K03, K04, K05), K06 + +// 5 into 6, derivitive of the first two. +#define ROW0R_5_6_hrm_gasc(K01, K02, K03, K04, K05) \ + ROW0R_6_hrm_gasc(K01, K02, K03, K04, K05, RIGHT_0) + + +// ROW1 +// LEFT. +#define ROW1L_5_hrm_gasc(K01, K02, K03, K04, K05) \ + K01, K02, K03, LT(_NAV, K04), K05 +// take and put an extra column in front. Mod K01 how you want it. +#define ROW1L_6_hrm_gasc(K01, K02, K03, K04, K05, K06) K01, \ + ROW1L_5_hrm_gasc(K02, K03, K04, K05, K06) + +// 5 into 6, derivitive of the first two. +#define ROW1L_5_6_hrm_gasc(K01, K02, K03, K04, K05) \ + ROW1L_6_hrm_gasc(LEFT_1, K01, K02, K03, K04, K05) + +// RIGHT. +#define ROW1R_5_hrm_gasc(K01, K02, K03, K04, K05) \ + K01, K02, K03, K04, LT(_LAYERS, K05) \ + // take and put an extra column in front. Mod K01 how you want it. +#define ROW1R_6_hrm_gasc(K01, K02, K03, K04, K05, K06) \ + ROW1R_5_hrm_gasc(K01, K02, K03, K04, K05), K06 + +// 5 into 6, derivitive of the first two. +#define ROW1R_5_6_hrm_gasc(K01, K02, K03, K04, K05) \ + ROW1R_6_hrm_gasc(K01, K02, K03, K04, K05, RIGHT_1) + + + +// HOME ROW - ROW2 +// home row, shift, alt, ctl, gui - gui, ctl, alt, shift. +// using MT so we can specify left and right. +// caps_word needs left and right shift. + +// LEFT. +#define ROW2L_5_hrm_gasc(K01, K02, K03, K04, K05) \ + MT(MOD_LGUI, K01), MT(MOD_LALT, K02), MT(MOD_LSFT, K03), MT(MOD_LCTL, K04), K05 +// take and put an extra column in front. Mod K01 how you want it. +#define ROW2L_6_hrm_gasc(K01, K02, K03, K04, K05, K06) K01, \ + ROW2L_5_hrm_gasc(K02, K03, K04, K05, K06) + +// 5 into 6, derivitive of the first two. +#define ROW2L_5_6_hrm_gasc(K01, K02, K03, K04, K05) \ + ROW2L_6_hrm_gasc(LEFT_2, K01, K02, K03, K04, K05) + +// RIGHT. +#define ROW2R_5_hrm_gasc(K01, K02, K03, K04, K05) \ + K01, MT(MOD_RCTL, K02), MT(MOD_RSFT, K03), MT(MOD_RALT, K04), MT(MOD_RGUI, K05) \ + // take and put an extra column in front. Mod K01 how you want it. +#define ROW2R_6_hrm_gasc(K01, K02, K03, K04, K05, K06) \ + ROW2R_5_hrm_gasc(K01, K02, K03, K04, K05), K06 + +// 5 into 6, derivitive of the first two. +#define ROW2R_5_6_hrm_gasc(K01, K02, K03, K04, K05) \ + ROW2R_6_hrm_gasc(K01, K02, K03, K04, K05, RIGHT_2) + + +// ROW 3 +// LEFT. +#define ROW3L_5_hrm_gasc(K01, K02, K03, K04, K05) \ + K01, K02, K03, K04, K05 +// take and put an extra column in front. Mod K01 how you want it. +#define ROW3L_6_hrm_gasc(K01, K02, K03, K04, K05, K06) K01, \ + ROW3L_5_hrm_gasc(K02, K03, K04, K05, K06) + +// 5 into 6, derivitive of the first two. +#define ROW3L_5_6_hrm_gasc(K01, K02, K03, K04, K05) \ + ROW3L_6_hrm_gasc(LEFT_3, K01, K02, K03, K04, K05) + +// RIGHT. +#define ROW3R_5_hrm_gasc(K01, K02, K03, K04, K05) \ + K01, LT(_NAV, K02), K03, LT(LANG_N(_SYMB), K04), K05 +// take and put an extra column in front. Mod K01 how you want it. +#define ROW3R_6_hrm_gasc(K01, K02, K03, K04, K05, K06) K01, \ + ROW3R_5_hrm_gasc(K02, K03, K04, K05, K06) + +// 5 into 6, derivitive of the first two. +#define ROW3R_5_6_hrm_gasc(K01, K02, K03, K04, K05) \ + ROW3R_6_hrm_gasc(K01, K02, K03, K04, K05, RIGHT_3) diff --git a/users/ericgebhart/mod_layers/hrm_sacg.h b/users/ericgebhart/mod_layers/hrm_sacg.h new file mode 100644 index 00000000000..f4408f78fb1 --- /dev/null +++ b/users/ericgebhart/mod_layers/hrm_sacg.h @@ -0,0 +1,130 @@ +#pragma once +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ +// Home row mods variant of mod layers. + +// MOD_ROW +// variants. +// input 5 get six, left and right language specific outer edge keys. + +// no edge keys. +// input 5 get 5 with mods applied. + +// input 6 get 6 with mods applied. + +// base cols in out. 5, 5_6, 6. +// input column count, output column count, if different. + +// ROW0 - Number row. +// LEFT. +#define ROW0L_5_hrm_sacg(K01, K02, K03, K04, K05) \ + K01, K02, K03, K04, K05 +// take and put an extra column in front. Mod K01 how you want it. +#define ROW0L_6_hrm_sacg(K01, K02, K03, K04, K05, K06) K01, \ + ROW0L_5_hrm_sacg(K02, K03, K04, K05, K06) + +// 5 into 6, derivitive of the first two. +#define ROW0L_5_6_hrm_sacg(K01, K02, K03, K04, K05) \ + ROW0L_6_hrm_sacg(LEFT_0, K01, K02, K03, K04, K05) + +// RIGHT. +#define ROW0R_5_hrm_sacg(K01, K02, K03, K04, K05) \ + K01, K02, K03, K04, K05 +// take and put an extra column in front. Mod K01 how you want it. +#define ROW0R_6_hrm_sacg(K01, K02, K03, K04, K05, K06) \ + ROW0R_5_hrm_sacg(K01, K02, K03, K04, K05), K06 + +// 5 into 6, derivitive of the first two. +#define ROW0R_5_6_hrm_sacg(K01, K02, K03, K04, K05) \ + ROW0R_6_hrm_sacg(K01, K02, K03, K04, K05, RIGHT_0) + + +// ROW1 +// LEFT. +#define ROW1L_5_hrm_sacg(K01, K02, K03, K04, K05) \ + K01, K02, K03, LT(_NAV, K04), K05 +// take and put an extra column in front. Mod K01 how you want it. +#define ROW1L_6_hrm_sacg(K01, K02, K03, K04, K05, K06) K01, \ + ROW1L_5_hrm_sacg(K02, K03, K04, K05, K06) + +// 5 into 6, derivitive of the first two. +#define ROW1L_5_6_hrm_sacg(K01, K02, K03, K04, K05) \ + ROW1L_6_hrm_sacg(LEFT_1, K01, K02, K03, K04, K05) + +// RIGHT. +#define ROW1R_5_hrm_sacg(K01, K02, K03, K04, K05) \ + K01, K02, K03, K04, LT(_LAYERS, K05) \ + // take and put an extra column in front. Mod K01 how you want it. +#define ROW1R_6_hrm_sacg(K01, K02, K03, K04, K05, K06) \ + ROW1R_5_hrm_sacg(K01, K02, K03, K04, K05), K06 + +// 5 into 6, derivitive of the first two. +#define ROW1R_5_6_hrm_sacg(K01, K02, K03, K04, K05) \ + ROW1R_6_hrm_sacg(K01, K02, K03, K04, K05, RIGHT_1) + + + +// HOME ROW - ROW2 +// home row, shift, alt, ctl, gui - gui, ctl, alt, shift. +// using MT so we can specify left and right. +// caps_word needs left and right shift. + +// LEFT. +#define ROW2L_5_hrm_sacg(K01, K02, K03, K04, K05) \ + MT(MOD_LSFT, K01), MT(MOD_LALT, K02), MT(MOD_LCTL, K03), MT(MOD_LGUI, K04), K05 +// take and put an extra column in front. Mod K01 how you want it. +#define ROW2L_6_hrm_sacg(K01, K02, K03, K04, K05, K06) K01, \ + ROW2L_5_hrm_sacg(K02, K03, K04, K05, K06) + +// 5 into 6, derivitive of the first two. +#define ROW2L_5_6_hrm_sacg(K01, K02, K03, K04, K05) \ + ROW2L_6_hrm_sacg(LEFT_2, K01, K02, K03, K04, K05) + +// RIGHT. +#define ROW2R_5_hrm_sacg(K01, K02, K03, K04, K05) \ + K01, MT(MOD_RGUI, K02), MT(MOD_RCTL, K03), MT(MOD_RALT, K04), MT(MOD_RSFT, K05) \ + // take and put an extra column in front. Mod K01 how you want it. +#define ROW2R_6_hrm_sacg(K01, K02, K03, K04, K05, K06) \ + ROW2R_5_hrm_sacg(K01, K02, K03, K04, K05), K06 + +// 5 into 6, derivitive of the first two. +#define ROW2R_5_6_hrm_sacg(K01, K02, K03, K04, K05) \ + ROW2R_6_hrm_sacg(K01, K02, K03, K04, K05, RIGHT_2) + + +// ROW 3 +// LEFT. +#define ROW3L_5_hrm_sacg(K01, K02, K03, K04, K05) \ + K01, K02, K03, K04, K05 +// take and put an extra column in front. Mod K01 how you want it. +#define ROW3L_6_hrm_sacg(K01, K02, K03, K04, K05, K06) K01, \ + ROW3L_5_hrm_sacg(K02, K03, K04, K05, K06) + +// 5 into 6, derivitive of the first two. +#define ROW3L_5_6_hrm_sacg(K01, K02, K03, K04, K05) \ + ROW3L_6_hrm_sacg(LEFT_3, K01, K02, K03, K04, K05) + +// RIGHT. +#define ROW3R_5_hrm_sacg(K01, K02, K03, K04, K05) \ + K01, LT(_NAV, K02), K03, LT(LANG_N(_SYMB), K04), K05 +// take and put an extra column in front. Mod K01 how you want it. +#define ROW3R_6_hrm_sacg(K01, K02, K03, K04, K05, K06) K01, \ + ROW3R_5_hrm_sacg(K02, K03, K04, K05, K06) + +// 5 into 6, derivitive of the first two. +#define ROW3R_5_6_hrm_sacg(K01, K02, K03, K04, K05) \ + ROW3R_6_hrm_sacg(K01, K02, K03, K04, K05, RIGHT_3) diff --git a/users/ericgebhart/mod_layers/hrs_nav.h b/users/ericgebhart/mod_layers/hrs_nav.h new file mode 100644 index 00000000000..3075a377688 --- /dev/null +++ b/users/ericgebhart/mod_layers/hrs_nav.h @@ -0,0 +1,126 @@ +#pragma once +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ +// +// shift on home row pinkies, nav on home row middle finger. + +// no edge keys. +// input 5 get 5 with mods applied. + +// input 6 get 6 with mods applied. + +// base cols in out. 5, 5_6, 6. +// input column count, output column count, if different. + +// L_5 Left R_5 Right. +// K01, K02, K03, K04, K05 - K01, K02, K03, K04, K05 +// pky, rng, mdl, idx, idx - idx, idx, mdl, rng, pnky + +// ROW0 - Number row. +// LEFT. +#define ROW0L_5_hrs_nav(K01, K02, K03, K04, K05) \ + K01, K02, K03, K04, K05 +// take and put an extra column in front. Mod K01 how you want it. +#define ROW0L_6_hrs_nav(K01, K02, K03, K04, K05, K06) K01, \ + ROW0L_5_hrs_nav(K02, K03, K04, K05, K06) + +// 5 into 6, derivitive of the first two. +#define ROW0L_5_6_hrs_nav(K01, K02, K03, K04, K05) \ + ROW0L_6_hrs_nav(LEFT_0, K01, K02, K03, K04, K05) + +// RIGHT. +#define ROW0R_5_hrs_nav(K01, K02, K03, K04, K05) \ + K01, K02, K03, K04, K05 +// take and put an extra column in front. Mod K01 how you want it. +#define ROW0R_6_hrs_nav(K01, K02, K03, K04, K05, K06) \ + ROW0R_5_hrs_nav(K01, K02, K03, K04, K05), K06 + +// 5 into 6, derivitive of the first two. +#define ROW0R_5_6_hrs_nav(K01, K02, K03, K04, K05) \ + ROW0R_6_hrs_nav(K01, K02, K03, K04, K05, RIGHT_0) + + +// ROW1 +// LEFT. +#define ROW1L_5_hrs_nav(K01, K02, K03, K04, K05) \ + K01, K02, K03, K04, K05 +// take and put an extra column in front. Mod K01 how you want it. +#define ROW1L_6_hrs_nav(K01, K02, K03, K04, K05, K06) K01, \ + ROW1L_5_hrs_nav(K02, K03, K04, K05, K06) + +// 5 into 6, derivitive of the first two. +#define ROW1L_5_6_hrs_nav(K01, K02, K03, K04, K05) \ + ROW1L_6_hrs_nav(LEFT_1, K01, K02, K03, K04, K05) + +// RIGHT. +#define ROW1R_5_hrs_nav(K01, K02, K03, K04, K05) \ + K01, K02, K03, K04, K05 \ + // take and put an extra column in front. Mod K01 how you want it. +#define ROW1R_6_hrs_nav(K01, K02, K03, K04, K05, K06) \ + ROW1R_5_hrs_nav(K01, K02, K03, K04, K05), K06 + +// 5 into 6, derivitive of the first two. +#define ROW1R_5_6_hrs_nav(K01, K02, K03, K04, K05) \ + ROW1R_6_hrs_nav(K01, K02, K03, K04, K05, RIGHT_1) + + +// HOME ROW - ROW2 +// LEFT. +#define ROW2L_5_hrs_nav(K01, K02, K03, K04, K05) \ + MT(MOD_LSFT, K01), K02, LT(_NAV, K03), K04, K05 +// take and put an extra column in front. Mod K01 how you want it. +#define ROW2L_6_hrs_nav(K01, K02, K03, K04, K05, K06) K01, \ + ROW2L_5_hrs_nav(K02, K03, K04, K05, K06) + +// 5 into 6, derivitive of the first two. +#define ROW2L_5_6_hrs_nav(K01, K02, K03, K04, K05) \ + ROW2L_6_hrs_nav(LEFT_2, K01, K02, K03, K04, K05) + +// RIGHT. +#define ROW2R_5_hrs_nav(K01, K02, K03, K04, K05) \ + K01, K02, LT(_NAV, K03), K04, MT(MOD_LSFT, K05) \ + // take and put an extra column in front. Mod K01 how you want it. +#define ROW2R_6_hrs_nav(K01, K02, K03, K04, K05, K06) \ + ROW2R_5_hrs_nav(K01, K02, K03, K04, K05), K06 + +// 5 into 6, derivitive of the first two. +#define ROW2R_5_6_hrs_nav(K01, K02, K03, K04, K05) \ + ROW2R_6_hrs_nav(K01, K02, K03, K04, K05, RIGHT_2) + + +// ROW 3 +// LEFT. +#define ROW3L_5_hrs_nav(K01, K02, K03, K04, K05) \ + K01, K02, LT(_NAV, K03), K04, MT(MOD_LSFT, K05) +// take and put an extra column in front. Mod K01 how you want it. +#define ROW3L_6_hrs_nav(K01, K02, K03, K04, K05, K06) K01, \ + ROW3L_5_hrs_nav(K02, K03, K04, K05, K06) + +// 5 into 6, derivitive of the first two. +#define ROW3L_5_6_hrs_nav(K01, K02, K03, K04, K05) \ + ROW3L_6_hrs_nav(LEFT_3, K01, K02, K03, K04, K05) + +// RIGHT. +#define ROW3R_5_hrs_nav(K01, K02, K03, K04, K05) \ + K01, K02, K03, K04, K05 +// take and put an extra column in front. Mod K01 how you want it. +#define ROW3R_6_hrs_nav(K01, K02, K03, K04, K05, K06) K01, \ + ROW3R_5_hrs_nav(K02, K03, K04, K05, K06) + +// 5 into 6, derivitive of the first two. +#define ROW3R_5_6_hrs_nav(K01, K02, K03, K04, K05) \ + ROW3R_6_hrs_nav(K01, K02, K03, K04, K05, RIGHT_3) diff --git a/users/ericgebhart/mod_layers/mod_layer.h b/users/ericgebhart/mod_layers/mod_layer.h new file mode 100644 index 00000000000..2345d30c5b9 --- /dev/null +++ b/users/ericgebhart/mod_layers/mod_layer.h @@ -0,0 +1,155 @@ +#pragma once + +/* + Copyright 2018 Eric Gebhart + + 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 . +*/ + +// define our rows for the mod layer +// takes 5 keycodes, adds mods, and left and right edge keys. +// So we get keycodes in groups of 6. +// +// #define LANG_IS BEPO // to get Bepo substititions for keys and LTs. +// #define NO_EDGE_COL // for 5 column keyboards with no sixth column. +// +// wrap layers that have alternates for other locales with LANG_N +// this will change the name, from _SYMB to _SYMB_BP as needed. +// +// Home Row mods and other things like that go here. + +#include "keycodes.h" +#include "alt_mods.h" +#include "hrm_sacg.h" +#include "hrm_gacs.h" +#include "hrm_gacs_miryoku.h" +#include "hrm_gasc.h" +#include "hrs_nav.h" +#include "trns_mods.h" + +// redefined by the map as needed. +//#base_cols_in_out 5_6 // 5, 5_6, 6 +// MOD_ROW +// variants. +// input 5 get six, left and right language specific outer edge keys. + +// no edge keys. +// input 5 get 5 with mods applied. + +// input 6 get 6 with mods applied. + +// base cols in out. 5, 5_6, 6. +// input column count, output column count, if different. + +#define CONCATENATER(a, ...) a ## __VA_ARGS__ +#define CATR(a, ...) CONCATENATER(a, __VA_ARGS__) +#define CONCATENATER2(a, ...) a ## __VA_ARGS__ +#define CATR2(a, ...) CONCATENATER2(a, __VA_ARGS__) +#define CONCATENATER3(a, ...) a ## __VA_ARGS__ +#define CATR3(a, ...) CONCATENATER3(a, __VA_ARGS__) + +// mod layer name construction. add new layer extensions here. +// TRNS, ALT, HRM_GACS, HRM_SCAG, HRM_GASC, MIRYOKU_HRM_GASC +#define MOD_EXT CATR3(MODS_ARE, _MOD) +#define TRNS_MOD _trns +#define HRM_SCAG_MOD _hrm_scag +#define HRM_GACS_MOD _hrm_gacs +#define HRM_GASC_MOD _hrm_gasc +#define MIRYOKU_HRM_GACS_MOD _miryoku_hrm_gacs +#define ALT_MOD _alt +#define HRS_NAV_MOD _hrs_nav + +// MOD_COL_NAME(ROW0L) -- > ROW0L_5, ROW0L_6, ROW0L_5_6 +#define MOD_COL_NAME(NAME) CATR2(CATR(NAME, _), BASE_COLS_IN_OUT) +// MOD_ROW(ROW0L) -- > ROW0L_5_alt, ROW0L_6_alt, ROW0L_5_6_alt +#define MOD_ROW(NAME) CATR3(MOD_COL_NAME(NAME), MOD_EXT) + +// change the columns in/out according to the map and the keyboard. +//#define BASE_COLS_IN_OUT 5_6 // 5, 5_6, 6 + + +// These make it easier to create base layer layouts. +// They take 3x10, or 3x12 and make a 3x12 with mods. +// this isnt always useful, sometimes rows need to be +// specified explicitly in the layout. ie. layouts with +// extra keys in the middle. + + +#define MOD_CORE_3x5( \ + K01, K02, K03, K04, K05, \ + K06, K07, K08, K09, K0A, \ + K11, K12, K13, K14, K15, \ + K16, K17, K18, K19, K1A, \ + K21, K22, K23, K24, K25, \ + K26, K27, K28, K29, K2A) \ + MOD_ROW(ROW1L)(K01, K02, K03, K04, K05), \ + MOD_ROW(ROW1R)(K06, K07, K08, K09, K0A), \ + MOD_ROW(ROW2L)(K11, K12, K13, K14, K15), \ + MOD_ROW(ROW2R)(K16, K17, K18, K19, K1A), \ + MOD_ROW(ROW3L)(K21, K22, K23, K24, K25), \ + MOD_ROW(ROW3R)(K26, K27, K28, K29, K2A) + + +#define MOD_CORE_3x6(K01, K02, K03, K04, K05, K06, \ + K07, K08, K09, K0A, K0B, K0C, \ + K11, K12, K13, K14, K15, K16, \ + K17, K18, K19, K1A, K1B, K1C, \ + K21, K22, K23, K24, K25, K26, \ + K27, K28, K29, K2A, K2B, K2C) \ + MOD_ROW(ROW1L)(K01, K02, K03, K04, K05, K06), \ + MOD_ROW(ROW1R)(K07, K08, K09, K0A, K0B, K0C), \ + MOD_ROW(ROW2L)(K11, K12, K13, K14, K15, K16), \ + MOD_ROW(ROW2R)(K17, K18, K19, K1A, K1B, K1C), \ + MOD_ROW(ROW3L)(K21, K22, K23, K24, K25, K26), \ + MOD_ROW(ROW3R)(K27, K28, K29, K2A, K2B, K2C) + + +/// 4 rows for keyboards with number rows. +#define MOD_CORE_4x5( \ + K01, K02, K03, K04, K05, \ + K06, K07, K08, K09, K0A, \ + K11, K12, K13, K14, K15, \ + K16, K17, K18, K19, K1A, \ + K21, K22, K23, K24, K25, \ + K26, K27, K28, K29, K2A, \ + K31, K32, K33, K34, K35, \ + K36, K37, K38, K39, K3A) \ + MOD_ROW(ROW0L)(K01, K02, K03, K04, K05), \ + MOD_ROW(ROW0R)(K06, K07, K08, K09, K0A), \ + MOD_CORE_3x5(K11, K12, K13, K14, K15, \ + K16, K17, K18, K19, K1A, \ + K21, K22, K23, K24, K25, \ + K26, K27, K28, K29, K2A, \ + K31, K32, K33, K34, K35, \ + K36, K37, K38, K39, K3A) + + + +#define MOD_CORE_4x6(K01, K02, K03, K04, K05, K06, \ + K07, K08, K09, K0A, K0B, K0C, \ + K11, K12, K13, K14, K15, K16, \ + K17, K18, K19, K1A, K1B, K1C, \ + K21, K22, K23, K24, K25, K26, \ + K27, K28, K29, K2A, K2B, K2C, \ + K31, K32, K33, K34, K35, K36, \ + K37, K38, K39, K3A, K3B, K3C \ + ) \ + MOD_ROW(ROW0L)(K01, K02, K03, K04, K05, K06), \ + MOD_ROW(ROW0R)(K07, K08, K09, K0A, K0B, K0C), \ + MOD_CORE_3x6(K11, K12, K13, K14, K15, K16, \ + K17, K18, K19, K1A, K1B, K1C, \ + K21, K22, K23, K24, K25, K26, \ + K27, K28, K29, K2A, K2B, K2C, \ + K31, K32, K33, K34, K35, K36, \ + K37, K38, K39, K3A, K3B, K3C) diff --git a/users/ericgebhart/mod_layers/trns_mods.h b/users/ericgebhart/mod_layers/trns_mods.h new file mode 100644 index 00000000000..06dfb06edd9 --- /dev/null +++ b/users/ericgebhart/mod_layers/trns_mods.h @@ -0,0 +1,129 @@ +#pragma once +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ +// +// non Home row mods, mod layer. + +// MOD_ROW variants. +// input 5 get six, left and right language specific outer edge keys. + +// no edge keys. +// input 5 get 5 with mods applied. + +// input 6 get 6 with mods applied. + +// base cols in out. 5, 5_6, 6. +// input column count, output column count, if different. + +// L_5 Left R_5 Right. +// K01, K02, K03, K04, K05 - K01, K02, K03, K04, K05 +// pky, rng, mdl, idx, idx - idx, idx, mdl, rng, pnky + +// ROW0 - Number row. +// LEFT. +#define ROW0L_5_trns(K01, K02, K03, K04, K05) \ + K01, K02, K03, K04, K05 +// take and put an extra column in front. Mod K01 how you want it. +#define ROW0L_6_trns(K01, K02, K03, K04, K05, K06) K01, \ + ROW0L_5_trns(K02, K03, K04, K05, K06) + +// 5 into 6, derivitive of the first two. +#define ROW0L_5_6_trns(K01, K02, K03, K04, K05) \ + ROW0L_6_trns(LEFT_0, K01, K02, K03, K04, K05) + +// RIGHT. +#define ROW0R_5_trns(K01, K02, K03, K04, K05) \ + K01, K02, K03, K04, K05 +// take and put an extra column in front. Mod K01 how you want it. +#define ROW0R_6_trns(K01, K02, K03, K04, K05, K06) \ + ROW0R_5_trns(K01, K02, K03, K04, K05), K06 + +// 5 into 6, derivitive of the first two. +#define ROW0R_5_6_trns(K01, K02, K03, K04, K05) \ + ROW0R_6_trns(K01, K02, K03, K04, K05, RIGHT_0) + + +// ROW1 +// LEFT. +#define ROW1L_5_trns(K01, K02, K03, K04, K05) \ + K01, K02, K03, K04, K05 +// take and put an extra column in front. Mod K01 how you want it. +#define ROW1L_6_trns(K01, K02, K03, K04, K05, K06) K01, \ + ROW1L_5_trns(K02, K03, K04, K05, K06) + +// 5 into 6, derivitive of the first two. +#define ROW1L_5_6_trns(K01, K02, K03, K04, K05) \ + ROW1L_6_trns(LEFT_1, K01, K02, K03, K04, K05) + +// RIGHT. +#define ROW1R_5_trns(K01, K02, K03, K04, K05) \ + K01, K02, K03, K04, K05 \ + // take and put an extra column in front. Mod K01 how you want it. +#define ROW1R_6_trns(K01, K02, K03, K04, K05, K06) \ + ROW1R_5_trns(K01, K02, K03, K04, K05), K06 + +// 5 into 6, derivitive of the first two. +#define ROW1R_5_6_trns(K01, K02, K03, K04, K05) \ + ROW1R_6_trns(K01, K02, K03, K04, K05, RIGHT_1) + + +// HOME ROW - ROW2 +// LEFT. +#define ROW2L_5_trns(K01, K02, K03, K04, K05) \ + K01, K02, K03, K04, K05 +// take and put an extra column in front. Mod K01 how you want it. +#define ROW2L_6_trns(K01, K02, K03, K04, K05, K06) K01, \ + ROW2L_5_trns(K02, K03, K04, K05, K06) + +// 5 into 6, derivitive of the first two. +#define ROW2L_5_6_trns(K01, K02, K03, K04, K05) \ + ROW2L_6_trns(LEFT_2, K01, K02, K03, K04, K05) + +// RIGHT. +#define ROW2R_5_trns(K01, K02, K03, K04, K05) \ + K01, K02, K03, K04, K05 \ + // take and put an extra column in front. Mod K01 how you want it. +#define ROW2R_6_trns(K01, K02, K03, K04, K05, K06) \ + ROW2R_5_trns(K01, K02, K03, K04, K05), K06 + +// 5 into 6, derivitive of the first two. +#define ROW2R_5_6_trns(K01, K02, K03, K04, K05) \ + ROW2R_6_trns(K01, K02, K03, K04, K05, RIGHT_2) + + +// ROW 3 +// LEFT. +#define ROW3L_5_trns(K01, K02, K03, K04, K05) \ + K01, K02, K03, K04, K05 +// take and put an extra column in front. Mod K01 how you want it. +#define ROW3L_6_trns(K01, K02, K03, K04, K05, K06) K01, \ + ROW3L_5_trns(K02, K03, K04, K05, K06) + +// 5 into 6, derivitive of the first two. +#define ROW3L_5_6_trns(K01, K02, K03, K04, K05) \ + ROW3L_6_trns(LEFT_3, K01, K02, K03, K04, K05) + +// RIGHT. +#define ROW3R_5_trns(K01, K02, K03, K04, K05) \ + K01, K02, K03, K04, K05 +// take and put an extra column in front. Mod K01 how you want it. +#define ROW3R_6_trns(K01, K02, K03, K04, K05, K06) K01, \ + ROW3R_5_trns(K02, K03, K04, K05, K06) + +// 5 into 6, derivitive of the first two. +#define ROW3R_5_6_trns(K01, K02, K03, K04, K05) \ + ROW3R_6_trns(K01, K02, K03, K04, K05, RIGHT_3) diff --git a/users/ericgebhart/oled/oled_cartes.c b/users/ericgebhart/oled/oled_cartes.c new file mode 100644 index 00000000000..8ab88e969e1 --- /dev/null +++ b/users/ericgebhart/oled/oled_cartes.c @@ -0,0 +1,325 @@ +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ +#ifdef OLED_CUSTOM_ENABLE + +#include "ericgebhart.h" + +void oled_render_layer_map(void) { + uint8_t lyr = get_highest_layer(layer_state); + if (lyr < _LAYERS) { + switch (get_highest_layer(default_layer_state)) { + +#ifdef QWERTY_LAYER_ENABLE + SHOW_MAP(_QWERTY) +#endif + +#ifdef COLEMAK_DH_LAYER_ENABLE + SHOW_MAP(_COLEMAK_DH) +#endif + +#ifdef COLEMAK_LAYER_ENABLE + SHOW_MAP(_COLEMAK) +#endif +#ifdef HALMAK_LAYER_ENABLE + SHOW_MAP(_HALMAK) +#endif +#ifdef MINIMAK_LAYER_ENABLE + SHOW_MAP(_MINIMAK) +#endif +#ifdef MINIMAK_8_LAYER_ENABLE + SHOW_MAP(_MINIMAK_8) +#endif +#ifdef MINIMAK_12_LAYER_ENABLE + SHOW_MAP(_MINIMAK_12) +#endif + +#ifdef DVORAK_LAYER_ENABLE + SHOW_MAP(_DVORAK) +#endif +#ifdef DVORAK_RLC_IU_LAYER_ENABLE + SHOW_MAP(_DVORAK_RLC_IU) +#endif +#ifdef BOO_LAYER_ENABLE + SHOW_MAP(_BOO) +#endif +#ifdef CAPEWELL_DVORAK_LAYER_ENABLE + SHOW_MAP(_CAPEWELL_DVORAK) +#endif +#ifdef AHEI_LAYER_ENABLE + SHOW_MAP(_AHEI) +#endif + +#ifdef BEAKL27_LAYER_ENABLE + SHOW_MAP(_BEAKL27) +#endif + +#ifdef BEAKL15_LAYER_ENABLE + SHOW_MAP(_BEAKL15) +#endif + +#ifdef BEAKL19_LAYER_ENABLE + SHOW_MAP(_BEAKL19) +#endif + +#ifdef BEAKLWI_LAYER_ENABLE + SHOW_MAP(_BEAKLWI) +#endif + +#ifdef CARPALX_QFMLWY_LAYER_ENABLE + SHOW_MAP(_CARPALX_QFMLWY) +#endif + +#ifdef CARPALX_QGMLWB_LAYER_ENABLE + SHOW_MAP(_CARPALX_QGMLWB) +#endif + +#ifdef CARPALX_QGMLWY_LAYER_ENABLE + SHOW_MAP(_CARPALX_QGMLWY) +#endif + +#ifdef MTGAP_LAYER_ENABLE + SHOW_MAP(_MTGAP) +#endif + +#ifdef CTGAP_LAYER_ENABLE + SHOW_MAP(_CTGAP) +#endif + +#ifdef APT_LAYER_ENABLE + SHOW_MAP(_APT) +#endif + +#ifdef CANARY_LAYER_ENABLE + SHOW_MAP(_CANARY) +#endif + + +#ifdef HD_NEU_LAYER_ENABLE + SHOW_MAP(_HD_NEU) +#endif + +#ifdef HD_NEU_NARROW_LAYER_ENABLE + SHOW_MAP(_HD_NEU_NARROW) +#endif + +#ifdef HD_TITANIUM_LAYER_ENABLE + SHOW_MAP(_HD_TITANIUM) +#endif + +#ifdef HD_GOLD_LAYER_ENABLE + SHOW_MAP(_HD_GOLD) +#endif + +#ifdef HD_PLATINUM_LAYER_ENABLE + SHOW_MAP(_HD_PLATINUM) +#endif + +#ifdef HD_SILVER_LAYER_ENABLE + SHOW_MAP(_HD_SILVER) +#endif + +#ifdef HD_BRONZE_LAYER_ENABLE + SHOW_MAP(_HD_BRONZE) +#endif + +#ifdef HD_ELAN_LAYER_ENABLE + SHOW_MAP(_HD_ELAN) +#endif + +#ifdef HD_DASH_LAYER_ENABLE + SHOW_MAP(_HD_DASH) +#endif + +#ifdef HD_REF_LAYER_ENABLE + SHOW_MAP(_HD_REF) +#endif + +#ifdef RSTHD_LAYER_ENABLE + SHOW_MAP(_RSTHD) +#endif + +#ifdef HANDS_UP_LAYER_ENABLE + SHOW_MAP(_HANDS_UP) +#endif +#ifdef WHITE_LAYER_ENABLE + SHOW_MAP(_WHITE) +#endif +#ifdef ISRT_LAYER_ENABLE + SHOW_MAP(_ISRT) +#endif +#ifdef SOUL_LAYER_ENABLE + SHOW_MAP(_SOUL) +#endif +#ifdef NIRO_LAYER_ENABLE + SHOW_MAP(_NIRO) +#endif +#ifdef ASSET_LAYER_ENABLE + SHOW_MAP(_ASSET) +#endif +#ifdef WHORF_LAYER_ENABLE + SHOW_MAP(_WHORF) +#endif +#ifdef WHORF6_LAYER_ENABLE + SHOW_MAP(_WHORF6) +#endif + +#ifdef BEPO_LAYER_ENABLE + SHOW_MAP(_BEPO) +#endif + +#ifdef OPTIMOT_LAYER_ENABLE + SHOW_MAP(_OPTIMOT) +#endif + +#ifdef OPTIMOT_COMPACT_LAYER_ENABLE + SHOW_MAP(_OPTIMOT_COMPACT) +#endif + +#ifdef BEAKL19bis_LAYER_ENABLE + SHOW_MAP(_BEAKL19bis) +#endif + + } + + } else { + + switch (lyr) { +#ifdef TOPROWS_LAYER_ENABLE + LCASE(_TOPROWS) +# ifdef TOPROWS_BKL_NUMS +# ifdef TOPROWS_MOD + CARTE_TOPROWS_MOD +# else +# ifdef TOPROWS_BKL_19_NUMS + CARTE_TOPROWS_BKL19 +# else + CARTE_TOPROWS +# endif +# endif +# else // not beakl nums. + CARTE_RAISE +# endif + break; +#endif + + + case _NAV: +#ifdef NAV_FULL_LOCK_MODS + CARTE_NAVA +#endif +#ifdef NAV_FULL + CARTE_NAV +#endif +#ifdef NAV_NO_MOUSE + CARTE_NAVnm +#endif +#ifdef NAV_MIRYOKU + CARTE_NAV_miryoku +#endif + break; + +#ifdef MOUSE_LAYER_ENABLE + case _NAVm: +# ifdef NAV_MOUSE_MIRYOKU + CARTE_NAVm_miryoku +# else + CARTE_NAVm +# endif + break; +#endif + +#ifdef MEDIA_LAYER_ENABLE + SHOW_MAP_S(_MEDIA) +#endif + SHOW_MAP_S(_LAYERS) + +#ifdef SYMBOL_LAYER_ENABLE + LCASE(_SYMB) +# ifdef SYMBOL_BEAKL + CARTE_SYMB_BEAKL +# endif +# ifdef SYMBOL_BEAKL_EXT + CARTE_SYMB_BEAKLA +# endif +# ifdef SYMBOL_BEAKL_EXT_VI + CARTE_SYMB_BEAKLB +# endif +# ifdef SYMBOL_BEAKL_C + CARTE_SYMB_BEAKLC +# endif +# ifdef SYMBOL_MIRYOKU + CARTE_SYMB_MIRYOKU +# endif +# ifdef SYMBOL_BEAKL_WI + CARTE_SYMB_BEAKL_WI +# endif +# ifdef SYMBOL_BEAKL_WI + CARTE_SYMB_NEO +# endif + break; +#endif + +#ifdef KEYAD_LAYER_ENABLE + LCASE(_KEYPAD) +#ifdef KEYPAD_BEAKL +#ifdef KEYPAD_BEAKL_WI + CARTE_KP_BKL_WI +#endif +#ifdef KEYPAD_MODS + CARTE_KP_BKL_MODS +#endif +#if !defined(KEYPAD_MODS) && !defined(KEYPAD_BEAKL_WI) + CARTE_KP_BKL_FUNC +#endif +#ifdef KEYPAD_MIRYOKU + CARTE_KP_MIRYOKU +#endif + +#else // not beakl. +#ifdef KEYPAD_RIGHT +#ifdef KEYPAD_MODS + CARTE_MODS_KP +#else + CARTE_FP_KP +#endif + +#else // not keypad right. +#ifdef KEYPAD_MODS + CARTE_KP_MODS +#else + CARTE_KP_FP // the final default. +#endif +#endif // end not keypad right. +#endif // end not beakl + break; +#endif // end keypad. + +#ifdef MORTE_LAYER_ENABLE + SHOW_MAP(_MORTE) +#endif + +#ifdef ACCENTS_MORTE_LAYER_ENABLE + SHOW_MAP(_ACCENTS_MORTE) +#endif + +#ifdef ACCENTS_LAYER_ENABLE + SHOW_MAP(_CARTE_ACCENTS) +#endif + } + } +} +#endif diff --git a/users/ericgebhart/oled/oled_layers.c b/users/ericgebhart/oled/oled_layers.c new file mode 100644 index 00000000000..57424d1d6c1 --- /dev/null +++ b/users/ericgebhart/oled/oled_layers.c @@ -0,0 +1,252 @@ +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ +#include "ericgebhart.h" +#include + +#ifdef OLED_CUSTOM_ENABLE + +void oled_render_default_layer_state(void) { + //oled_write_P(PSTR("Layout: "), false); + uint16_t layer = get_highest_layer(default_layer_state); + char layer_str[8]; + snprintf(layer_str, sizeof(layer_str), "%u ",layer); + oled_write(layer_str , false); + switch (layer) { +#ifdef DVORAK_LAYER_ENABLE + WRITE_STR_LAYER(_DVORAK, "Dvorak") +#endif +#ifdef DVORAK_RLC_IU_LAYER_ENABLE + WRITE_STR_LAYER(_DVORAK_RLC_IU_, "Dvorak-rlc") +#endif +#ifdef BOO_LAYER_ENABLE + WRITE_STR_LAYER(_BOO, "Boo") +#endif +#ifdef CAPEWELL_DVORAK_LAYER_ENABLE + WRITE_STR_LAYER(_CAPEWELL_DVORAK, "Capewell Dvorak") +#endif +#ifdef AHEI_LAYER_ENABLE + WRITE_STR_LAYER(_AHEI, "Ahei") +#endif + +#ifdef QWERTY_LAYER_ENABLE + WRITE_STR_LAYER(_QWERTY, "Qwerty") +#endif +#ifdef WORKMAN_LAYER_ENABLE + WRITE_STR_LAYER(_WORKMAN, "Workman") +#endif +#ifdef NORMAN_LAYER_ENABLE + WRITE_STR_LAYER(_NORMAN, "Norman") +#endif + +#ifdef COLEMAK_LAYER_ENABLE + WRITE_STR_LAYER(_COLEMAK, "Colemak") +#endif +#ifdef COLEMAK_DH_LAYER_ENABLE + WRITE_STR_LAYER(_COLEMAK_DH, "Colemak") +#endif +#ifdef HALMAK_LAYER_ENABLE + WRITE_STR_LAYER(_HALMAK, "Halmak") +#endif +#ifdef MINIMAK_LAYER_ENABLE + WRITE_STR_LAYER(_MINIMAK, "Minimak") +#endif +#ifdef MINIMAK_8_LAYER_ENABLE + WRITE_STR_LAYER(_MINIMAK_8, "Minimak 8") +#endif +#ifdef MINIMAK_12_LAYER_ENABLE + WRITE_STR_LAYER(_MINIMAK_12, "Minimak 12") +#endif + +#ifdef BEAKL15_LAYER_ENABLE + WRITE_STR_LAYER(_BEAKL15, "Beakl") +#endif +#ifdef BEAKL19_LAYER_ENABLE + WRITE_STR_LAYER(_BEAKL19, "Beakl19") +#endif +#ifdef BEAKL27_LAYER_ENABLE + WRITE_STR_LAYER(_BEAKL27, "Beakl27") +#endif +#ifdef BEAKLWI_LAYER_ENABLE + WRITE_STR_LAYER(_BEAKLWI, "BeaklWi") +#endif + +#ifdef CARPALX_QFMLWY_LAYER_ENABLE + WRITE_STR_LAYER(_CARPALX_QFMLWY, "Carpalx qfmlwy") +#endif + +#ifdef CARPALX_QGMLWB_LAYER_ENABLE + WRITE_STR_LAYER(_CARPALX_QGMLWB, "Carpalx qgmlwb") +#endif + +#ifdef CARPALX_QGMLWY_LAYER_ENABLE + WRITE_STR_LAYER(_CARPALX_QGMLWY, "Carpalx qgmlwy") +#endif + +#ifdef HD_NEU_LAYER_ENABLE + WRITE_STR_LAYER(_HD_NEU, "HD Neu") +#endif +#ifdef HD_NEU_NARROW_LAYER_ENABLE + WRITE_STR_LAYER(_HD_NEU_NARROW, "HD Neu N") +#endif +#ifdef HD_TITANIUM_LAYER_ENABLE + WRITE_STR_LAYER(_HD_TITANIUM, "HD Titanium") +#endif +#ifdef HD_GOLD_LAYER_ENABLE + WRITE_STR_LAYER(_HD_GOLD, "HD Gold") +#endif +#ifdef HD_SILVER_LAYER_ENABLE + WRITE_STR_LAYER(_HD_SILVER, "HD Silver") +#endif +#ifdef HD_PLATINUM_LAYER_ENABLE + WRITE_STR_LAYER(_HD_PLATINUM, "HD Platinum") +#endif +#ifdef HD_BRONZE_LAYER_ENABLE + WRITE_STR_LAYER(_HD_BRONZE, "HD Bronze") +#endif +#ifdef HD_ELAN_LAYER_ENABLE + WRITE_STR_LAYER(_HD_ELAN, "HD Elan") +#endif +#ifdef HD_DASH_LAYER_ENABLE + WRITE_STR_LAYER(_HD_DASH, "HD Dash") +#endif +#ifdef HD_REF_LAYER_ENABLE + WRITE_STR_LAYER(_HD_REF, "HD Ref") +#endif + +#ifdef MTGAP_LAYER_ENABLE + WRITE_STR_LAYER(_MTGAP, "Mtgap") +#endif +#ifdef CTGAP_LAYER_ENABLE + WRITE_STR_LAYER(_CTGAP, "Ctgap") +#endif +#ifdef APT_LAYER_ENABLE + WRITE_STR_LAYER(_APT, "Apt") +#endif +#ifdef CANARY_LAYER_ENABLE + WRITE_STR_LAYER(_CANARY, "Canary") +#endif + +#ifdef MALTRON_LAYER_ENABLE + WRITE_STR_LAYER(_MALTRON, "Maltron") +#endif +#ifdef EUCALYN_LAYER_ENABLE + WRITE_STR_LAYER(_EUCALYN, "Eucalyn") +#endif +#ifdef RSTHD_LAYER_ENABLE + WRITE_STR_LAYER(_RSTHD, "Rsthd") +#endif +#ifdef HAND_UP_LAYER_ENABLE + WRITE_STR_LAYER(_HANDS_UP, "Hands up") +#endif +#ifdef WHITE_LAYER_ENABLE + WRITE_STR_LAYER(_WHITE, "White") +#endif +#ifdef ISRT_LAYER_ENABLE + WRITE_STR_LAYER(_ISRT, "Isrt") +#endif +#ifdef SOUL_LAYER_ENABLE + WRITE_STR_LAYER(_SOUL, "Soul") +#endif +#ifdef NIRO_LAYER_ENABLE + WRITE_STR_LAYER(_NIRO, "Niro") +#endif +#ifdef ASSET_LAYER_ENABLE + WRITE_STR_LAYER(_ASSET, "Asset") +#endif +#ifdef WHORF_LAYER_ENABLE + WRITE_STR_LAYER(_WHORF, "Whorf") +#endif +#ifdef WHORF6_LAYER_ENABLE + WRITE_STR_LAYER(_WHORF6, "Whorf 6") +#endif + +#ifdef OPTIMOT_LAYER_ENABLE + WRITE_STR_LAYER(_OPTIMOT, "Optimot") +#endif +#ifdef OPTIMOT_COMPACT_LAYER_ENABLE + WRITE_STR_LAYER(_OPTIMOT_COMPACT, "Optimot") +#endif +#ifdef BEAKL19bis_LAYER_ENABLE + WRITE_STR_LAYER(_BEAKL19bis, "Beakl19bis") +#endif +#ifdef BEPO_LAYER_ENABLE // Bepo only works on bepo. + WRITE_STR_LAYER(_BEPO, "Bepo") +#endif + } +} + +void oled_render_layer_state(void) { + uint16_t layer = get_highest_layer(layer_state); + char layer_str[8]; + snprintf(layer_str, sizeof(layer_str), "%u ",layer); + oled_write_P(PSTR(""), false); + if (layer > 0) + oled_write(layer_str , false); + + switch (layer) { + // language variant layers. +#ifdef TOPROWS_LAYER_ENABLE + WRITE_STR_LAYER(_TOPROWS, "TopRows"); +#endif + +#ifdef SYMBOL_LAYER_ENABLE + WRITE_STR_LAYER(_SYMB, "Symbols"); +#endif + +#ifdef KEYPAD_LAYER_ENABLE + WRITE_STR_LAYER(_KEYPAD, "Keypad"); +#endif + + // single case, BP or no suffix. +#ifdef ACCENTS_MORTE_LAYER_ENABLE + WRITE_STR_LAYER(_ACCENTS_MORTE, "Accents Morte"); +#endif +#ifdef ACCENTS_LAYER_ENABLE + WRITE_STR_LAYER(_ACCENTS, "Accents"); +#endif +#ifdef MORTE_LAYER_ENABLE + WRITE_STR_LAYER(_MORTE, "Morte"); +#endif + + + // language agnostic layers. +#ifdef NAV_LAYER_ENABLE + WRITE_STR_CASE(_NAV, "Navigation"); + WRITE_STR_CASE(_NAVm, "Mouse"); +#endif +#ifdef MEDIA_LAYER_ENABLE + WRITE_STR_CASE(_MEDIA, "Media"); +#endif +#ifdef FUNC_LAYER_ENABLE + WRITE_STR_CASE(_FUN, "Func"); +#endif + + WRITE_STR_CASE(_LAYERS, "Layers"); + +#ifdef RGB_LAYER_ENABLE + WRITE_STR_CASE(_RGB, "RGB"); +#endif +#ifdef ADJUST_LAYER_ENABLE + WRITE_STR_CASE(_ADJUST, "Adjust"); +#endif +#ifdef COMBO_REF_LAYER_ENABLE + WRITE_STR_CASE(_COMBO_REF, "COMBO Ref"); +#endif + + } +} +#endif diff --git a/users/ericgebhart/oled/oled_stuff.c b/users/ericgebhart/oled/oled_stuff.c new file mode 100755 index 00000000000..a73b5b174d7 --- /dev/null +++ b/users/ericgebhart/oled/oled_stuff.c @@ -0,0 +1,192 @@ +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ +#include "ericgebhart.h" +#include +#include + +#ifdef OLED_CUSTOM_ENABLE + +extern uint32_t current_locale; + +void oled_render_locale(void) { + // oled_write_P(PSTR("Layout: "), false); + switch (current_locale) { + WRITE_STR_CASE(LOCALE_DEFAULT, DEFAULT_LANG_NAME) +#ifdef SECOND_LOCALE + WRITE_STR_CASE(LOCALE_TWO, SECOND_LOCALE_NAME) +#endif + } +} + +void oled_render_keylock_status(uint8_t led_usb_state) { + oled_write_P(PSTR(" Lock:"), false); + oled_write_P(PSTR("N"), led_usb_state & (1 << USB_LED_NUM_LOCK)); + oled_write_P(PSTR("C"), led_usb_state & (1 << USB_LED_CAPS_LOCK)); + oled_write_P(PSTR("S"), led_usb_state & (1 << USB_LED_SCROLL_LOCK)); +} + +void oled_render_mod_status(uint8_t modifiers) { + oled_write_P(PSTR("Mods:"), false); + oled_write_P(PSTR("S"), (modifiers & MOD_MASK_SHIFT)); + oled_write_P(PSTR("C"), (modifiers & MOD_MASK_CTRL)); + oled_write_P(PSTR("A"), (modifiers & MOD_MASK_ALT)); + oled_write_P(PSTR("G"), (modifiers & MOD_MASK_GUI)); +} + +void oled_render_mod_lock_status(){ + oled_render_mod_status(get_mods() | get_oneshot_mods()); + oled_render_keylock_status(host_keyboard_leds()); +} + + +#ifdef KEYLOGGER_ENABLE +char mkeylog_str[22] = {}; + +const char mcode_to_name[60] = { + ' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f', + 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', + 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', + '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', + 'R', 'E', 'B', 'T', '_', '-', '=', '[', ']', '\\', + '#', ';', '\'', '`', ',', '.', '/', ' ', ' ', ' '}; + + +void oled_render_keylog(void) { + oled_write_ln(mkeylog_str, false); +} + + +void add_keylog(uint16_t keycode, keyrecord_t *record) { + char name = ' '; + if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) || + (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX)) { + keycode = keycode & 0xFF; + } + if (keycode < 60) { + name = mcode_to_name[keycode]; + } + + // update keylog + memset(mkeylog_str, ' ', sizeof(mkeylog_str) - 1); + snprintf(mkeylog_str, sizeof(mkeylog_str), "%dx%d, k%2d : %c", + record->event.key.row, record->event.key.col, + keycode, name); +} +#endif + +__attribute__((weak)) oled_rotation_t oled_init_keymap(oled_rotation_t rotation) { return rotation; } + +oled_rotation_t oled_init_user(oled_rotation_t rotation) { + + // for the big screen. +#ifdef OLED_DISPLAY_128X64 + return OLED_ROTATION_180; +#endif + // rotate the slave side of the corne to be bottom side in. + if (!is_keyboard_master()) { + return OLED_ROTATION_180; + } + + return oled_init_keymap(rotation); +} + +/* oled_rotation_t oled_init_user(oled_rotation_t rotation) { */ +/* memset(mkeylog_str, ' ', sizeof(mkeylog_str) - 1); */ +/* if (is_keyboard_master()) { */ +/* return OLED_ROTATION_270; */ +/* } else { */ +/* return OLED_ROTATION_180; */ +/* } */ +/* } */ + + +void render_bootmagic_status(bool status) { + /* Show Ctrl-Gui Swap options */ + static const char PROGMEM logo[][2][3] = { + {{0x97, 0x98, 0}, {0xb7, 0xb8, 0}}, + {{0x95, 0x96, 0}, {0xb5, 0xb6, 0}}, + }; + if (status) { + oled_write_ln_P(logo[0][0], false); + oled_write_ln_P(logo[0][1], false); + } else { + oled_write_ln_P(logo[1][0], false); + oled_write_ln_P(logo[1][1], false); + } +} + + +__attribute__((weak)) void oled_render_logo(void) { + // clang-format off + static const char PROGMEM qmk_logo[] = { + 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94, + 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4, + 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,0}; + // clang-format on + oled_write_P(qmk_logo, false); +} + + +bool process_record_user_oled(uint16_t keycode, keyrecord_t *record) { +#ifdef KEYLOGGER_ENABLE + if (record->event.pressed) { + //oled_timer = timer_read32(); + add_keylog(keycode, record); + //add_keylog(keycode); + } +#endif + return true; +} + +bool oled_task_user(void) { + //oled_clear(); + if (is_keyboard_master()) { + oled_render_mod_lock_status(); + oled_advance_page(false); + oled_render_default_layer_state(); + oled_render_locale(); + oled_write_ln_P(PSTR(" "), false); + oled_render_layer_state(); + oled_write_ln_P(PSTR(" "), false); +#ifdef OLED_DISPLAY_128X64 + oled_render_layer_map(); +#endif +#ifdef KEYLOGGER_ENABLE + oled_render_keylog(); +#endif + + // slave side display. + } else { + oled_clear(); +#ifdef OLED_LOGO_ENABLE + oled_render_logo(); +#endif + oled_render_default_layer_state(); + oled_render_locale(); + oled_write_ln_P(PSTR(" "), false); +#ifdef SPLIT_LAYER_STATE_ENABLE + oled_render_layer_state(); + oled_render_layer_map(); +#endif + } + return(false); + +} +#endif + +/* oled_render_keylock_status(host_keyboard_leds()); */ +/* oled_render_mod_status(get_mods() | get_oneshot_mods()); */ diff --git a/users/ericgebhart/oled/oled_stuff.h b/users/ericgebhart/oled/oled_stuff.h new file mode 100755 index 00000000000..7824ec7d84a --- /dev/null +++ b/users/ericgebhart/oled/oled_stuff.h @@ -0,0 +1,61 @@ +#pragma once +/* + Copyright 2018-2022 Eric Gebhart + + 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 . +*/ + +#ifdef OLED_CUSTOM_ENABLE + +#include "quantum.h" +//#include "oled_driver.h" + +void oled_render_mod_lock_status(void); +void oled_driver_render_logo(void); +bool process_record_user_oled(uint16_t keycode, keyrecord_t *record); +void oled_render_layer_map(void); +void oled_render_default_layer_state(void); +void oled_render_layer_state(void); + +#define WRITE_STR_CASE(CASE, STRING) \ + case CASE: \ + oled_write_P(PSTR(STRING), false); \ + break; \ + +// kinda hacky for the moment. +// assume bepo is enabled. +#define WRITE_STR_LAYER(CASE, STRING) \ + LCASE(CASE) \ + oled_write_P(PSTR(STRING), false); \ + break; + +// make maps for the oled. code doc. +#define carte_de_map(ROW1, ROW2, ROW3) \ + oled_write_ln_P(PSTR(ROW1), false); \ + oled_write_ln_P(PSTR(ROW2), false); \ + oled_write_ln_P(PSTR(ROW3), false); + +// generate Case for all locales for this map. +#define SHOW_MAP(LAYER) \ + LCASE(LAYER) \ + CAT(CARTE, LAYER) \ + break; + +// a single case, for single locale layers. +#define SHOW_MAP_S(LAYER) \ + case LAYER: \ + CAT(CARTE, LAYER) \ + break; + +#endif diff --git a/users/ericgebhart/oled_stuff.c b/users/ericgebhart/oled_stuff.c deleted file mode 100755 index 99a752ec2fc..00000000000 --- a/users/ericgebhart/oled_stuff.c +++ /dev/null @@ -1,303 +0,0 @@ -/* - Copyright 2018 Eric Gebhart - - 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 . -*/ -#include "ericgebhart.h" -#include -#include - -void oled_render_default_layer_state(void) { - oled_write_P(PSTR("Layout: "), false); - switch (get_highest_layer(default_layer_state)) { - case _QWERTY: - oled_write_ln_P(PSTR("Qwerty"), false); - break; - case _COLEMAK: - oled_write_ln_P(PSTR("Colemak"), false); - break; - case _DVORAK_BP: - case _DVORAK: - oled_write_ln_P(PSTR("Dvorak"), false); - break; - - - /* case _WORKMAN: */ - // oled_write_ln_P(PSTR("Workman\n"), false); - /* break; */ - /* case _NORMAN: */ - // oled_write_ln_P(PSTR("Norman\n"), false); - /* break; */ - /* case _MALTRON: */ - // oled_write_ln_P(PSTR("Maltron\n"), false); - /* break; */ - - /* case _EUCALYN: */ - // oled_write_ln_P(PSTR("Eucalyn\n"), false); - /* break; */ - /* case _CARPLAX: */ - // oled_write_ln_P(PSTR("Carplax\n"), false); - /* break; */ - - case _BEAKL: - case _BEAKL_BP: - oled_write_ln_P(PSTR("Beakl"), false); - break; - case _BEPO: - oled_write_ln_P(PSTR("Bepo"), false); - break; - } -} - -void oled_render_layer_state(void) { - oled_write_P(PSTR("Layer: "), false); - switch (get_highest_layer(layer_state)) { - case _NAV: - oled_write_P(PSTR("Navigation"), false); - break; - case _LAYERS: - oled_write_P(PSTR("Layers"), false); - break; - case _RGB: - oled_write_P(PSTR("RGB"), false); - break; - case _TOPROWS: - case _TOPROWS_BP: - oled_write_P(PSTR("TopRows"), false); - break; - case _SYMB: - case _SYMB_BP: - oled_write_P(PSTR("Symbols"), false); - break; - case _KEYPAD: - case _KEYPAD_BP: - oled_write_P(PSTR("Keypad"), false); - break; - case _ADJUST: - oled_write_P(PSTR("Adjust"), false); - break; - } - oled_write_ln_P(PSTR(" "), false); -} - -// this is part of my answer to a challenge. -// My friend Ross thinks that the only use of an oled -// is to say which layer. -// I think there is more. this is just a beginning. -void oled_render_layer_map(void) { - uint8_t lyr = get_highest_layer(layer_state); - if (lyr <= _BEPO) { - switch (get_highest_layer(default_layer_state)) { - case _QWERTY: - oled_write_ln_P(PSTR(" qwert yuiop"), false); - oled_write_ln_P(PSTR(" asdfg hjkl;"), false); - oled_write_ln_P(PSTR(" zxcvb nm,./"), false); - break; - case _COLEMAK: - oled_write_ln_P(PSTR(" qwfpb jluy;"), false); - oled_write_ln_P(PSTR(" arstg mneio"), false); - oled_write_ln_P(PSTR(" zxcdv kh,./"), false); - break; - case _DVORAK_BP: - case _DVORAK: - oled_write_ln_P(PSTR(" \",.py fgcrl"), false); - oled_write_ln_P(PSTR(" aoeui dhtns"), false); - oled_write_ln_P(PSTR(" ;qjkx bmwvz "), false); - break; - - case _BEAKL: - case _BEAKL_BP: - oled_write_ln_P(PSTR(" qhoux gcrfz"), false); - oled_write_ln_P(PSTR(" yiea. dstnb"), false); - oled_write_ln_P(PSTR(" j/,k' wmlpv"), false); - break; - - case _BEPO: - oled_write_P(PSTR(" cbe'po`e vdljz %"), false); - oled_write_P(PSTR(" auie, tsrnmc"), false); - oled_write_P(PSTR(" e^a'yx.k 'qghfw"), false); - break; - } - - } else { - - switch (lyr) { - case _TOPROWS: - case _TOPROWS_BP: - oled_write_ln_P(PSTR(" !@#$% ^&*()"), false); - oled_write_ln_P(PSTR(" 40123 76598"), false); - oled_write_ln_P(PSTR(" F1- -- -F12"), false); - break; - - case _SYMB: - case _SYMB_BP: - oled_write_ln_P(PSTR(" `<$>' ?[_]-"), false); - oled_write_ln_P(PSTR(" -\\(\")# !{:}/;"), false); - oled_write_ln_P(PSTR(" @=*+; %&^~|"), false); - break; - - case _NAV: - oled_write_ln_P(PSTR("54321 0 ctn 12345"), false); - oled_write_ln_P(PSTR(" ldur 1 ccv ldur"), false); - oled_write_ln_P(PSTR(" ldur 2 cwq hdue"), false); - break; - - case _KEYPAD: - oled_write_ln_P(PSTR(" 523: F9-F12"), false); - oled_write_ln_P(PSTR(" -7.104 F5-F8"), false); - oled_write_ln_P(PSTR(" /698, F1-F4"), false); - break; - - case _LAYERS: - oled_write_ln_P(PSTR(" Bp Dv Bk|Nv S K TR"), false); - oled_write_ln_P(PSTR("Q Cl Dv Bk|Nv S K TR"), false); - oled_write_P(PSTR(" "), false); - //oled_write_ln_P(PSTR("Ctrls?-> RGB ___ ___ Adjust"), false); - break; - } - } -} - -void oled_render_keylock_status(uint8_t led_usb_state) { - oled_write_P(PSTR(" Lock:"), false); - oled_write_P(PSTR(" "), false); - oled_write_P(PSTR("N"), led_usb_state & (1 << USB_LED_NUM_LOCK)); - oled_write_P(PSTR("C"), led_usb_state & (1 << USB_LED_CAPS_LOCK)); - oled_write_ln_P(PSTR("S"), led_usb_state & (1 << USB_LED_SCROLL_LOCK)); -} - -void oled_render_mod_status(uint8_t modifiers) { - oled_write_P(PSTR("Mods:"), false); - oled_write_P(PSTR("S"), (modifiers & MOD_MASK_SHIFT)); - oled_write_P(PSTR("C"), (modifiers & MOD_MASK_CTRL)); - oled_write_P(PSTR("A"), (modifiers & MOD_MASK_ALT)); - oled_write_P(PSTR("G"), (modifiers & MOD_MASK_GUI)); -} - -void oled_render_mod_lock_status(){ - oled_render_mod_status(get_mods() | get_oneshot_mods()); - oled_render_keylock_status(host_keyboard_leds()); -} - - -char mkeylog_str[22] = {}; - -const char mcode_to_name[60] = { - ' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f', - 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', - 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', - '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', - 'R', 'E', 'B', 'T', '_', '-', '=', '[', ']', '\\', - '#', ';', '\'', '`', ',', '.', '/', ' ', ' ', ' '}; - - -void oled_render_keylog(void) { - oled_write_ln(mkeylog_str, false); - // sometimes there's an extra row. this is because sometimes it drops - // to the last line. and this clears it. - oled_write_ln_P(PSTR(" "), false); -} - - -void add_keylog(uint16_t keycode, keyrecord_t *record) { - char name = ' '; - if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) || - (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX)) { - keycode = keycode & 0xFF; - } - if (keycode < 60) { - name = mcode_to_name[keycode]; - } - - // update keylog - memset(mkeylog_str, ' ', sizeof(mkeylog_str) - 1); - snprintf(mkeylog_str, sizeof(mkeylog_str), "%dx%d, k%2d : %c", - record->event.key.row, record->event.key.col, - keycode, name); -} - -__attribute__((weak)) oled_rotation_t oled_init_keymap(oled_rotation_t rotation) { return rotation; } - -oled_rotation_t oled_init_user(oled_rotation_t rotation) { - - // for the big screen. -#ifdef OLED_DISPLAY_128X64 - return OLED_ROTATION_180; -#endif - - return oled_init_keymap(rotation); -} - -/* oled_rotation_t oled_init_user(oled_rotation_t rotation) { */ -/* memset(mkeylog_str, ' ', sizeof(mkeylog_str) - 1); */ -/* if (is_keyboard_master()) { */ -/* return OLED_ROTATION_270; */ -/* } else { */ -/* return OLED_ROTATION_180; */ -/* } */ -/* } */ - -bool process_record_user_oled(uint16_t keycode, keyrecord_t *record) { - if (record->event.pressed) { - //oled_timer = timer_read32(); - add_keylog(keycode, record); - //add_keylog(keycode); - } - return true; -} - -void render_bootmagic_status(bool status) { - /* Show Ctrl-Gui Swap options */ - static const char PROGMEM logo[][2][3] = { - {{0x97, 0x98, 0}, {0xb7, 0xb8, 0}}, - {{0x95, 0x96, 0}, {0xb5, 0xb6, 0}}, - }; - if (status) { - oled_write_ln_P(logo[0][0], false); - oled_write_ln_P(logo[0][1], false); - } else { - oled_write_ln_P(logo[1][0], false); - oled_write_ln_P(logo[1][1], false); - } -} - - -__attribute__((weak)) void oled_render_logo(void) { - // clang-format off - static const char PROGMEM qmk_logo[] = { - 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94, - 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4, - 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,0}; - // clang-format on - oled_write_P(qmk_logo, false); -} - -bool oled_task_user(void) { - if (is_keyboard_master()) { - oled_render_mod_lock_status(); - oled_render_default_layer_state(); - oled_render_layer_state(); -#ifdef OLED_DISPLAY_128X64 - oled_render_layer_map(); -#endif - oled_render_keylog(); - } else { - oled_render_logo(); - oled_render_default_layer_state(); - } - return(true); - -} -/* oled_render_keylock_status(host_keyboard_leds()); */ -/* oled_render_mod_status(get_mods() | get_oneshot_mods()); */ diff --git a/users/ericgebhart/process_records.c b/users/ericgebhart/process_records.c index c1036c7f072..bb4bc2563ba 100755 --- a/users/ericgebhart/process_records.c +++ b/users/ericgebhart/process_records.c @@ -1,5 +1,5 @@ /* - Copyright 2018 Eric Gebhart + Copyright 2018-2022 Eric Gebhart 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 @@ -15,80 +15,26 @@ along with this program. If not, see . */ #include "ericgebhart.h" -#include "caps_word.h" -#include "g/keymap_combo.h" +#include "extensions.h" __attribute__((weak)) bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { return true; } __attribute__((weak)) bool process_record_secrets(uint16_t keycode, keyrecord_t *record) { return true; } - -uint16_t tap_taplong_timer; - -inline void tap_taplong(uint16_t kc1, uint16_t kc2, keyrecord_t *record) { - if (record->event.pressed) { - tap_taplong_timer = timer_read(); - } else { - if (timer_elapsed(tap_taplong_timer) > TAPPING_TERM) { - tap_code16(kc2); - } else { - tap_code16(kc1); - } - } -} - -/* for (){}[]""''<>``. tap for open. Hold for open and close, ending inbetween. */ -/* Assumes a one character length. */ -inline void open_openclose(uint16_t kc1, uint16_t kc2, keyrecord_t *record) { - if (record->event.pressed) { - tap_taplong_timer = timer_read(); - }else{ - if (timer_elapsed(tap_taplong_timer) > TAPPING_TERM) { - tap_code16(kc1); - tap_code16(kc2); - tap_code16(KC_LEFT); - } else { - tap_code16(kc1); - } - } -} - // Defines actions for my global custom keycodes. Defined in ericgebhart.h file // Then runs the _keymap's record handier if not processed here bool process_record_user(uint16_t keycode, keyrecord_t *record) { - // If console is enabled, it will print the matrix position and status of each key pressed -#ifdef OLED_ENABLE +#ifdef OLED_CUSTOM_ENABLE process_record_user_oled(keycode, record); -#endif // OLED +#endif - if (!process_caps_word(keycode, record)) { return false; } + PROCESS_EXTENSIONS if (process_record_keymap(keycode, record) && process_record_secrets(keycode, record)) { switch (keycode) { - // Handle the key translations for Dvorak on bepo. It's best if these are the first - // enums after SAFE_RANGE. - case DB_1 ... BB_QUOT: - if(record->event.pressed) - send_keycode(keycode); - unregister_code(keycode); - break; - - // Set the default layer. eeprom if shifted. - case KC_DVORAK ... KC_BEPO: - if (record->event.pressed) { - uint8_t mods = mod_config(get_mods() | get_oneshot_mods()); - if (!mods) { - default_layer_set(1UL << (keycode - KC_DVORAK)); - } else if (mods & MOD_MASK_SHIFT) { - set_single_persistent_default_layer(1UL << (keycode - KC_DVORAK)); - } - } - break; - - - case KC_RESET: // Custom RESET code + case KC_RESET: if (!record->event.pressed) { reset_keyboard(); } @@ -99,156 +45,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { // default_layer_set(1UL << _BEAKL); // tap_code16(LSFT(KC_SPACE)); break; - - - // tap or long tap for different key. - case KC_CCCV: // One key copy/paste - tap_taplong(LCTL(KC_C), LCTL(KC_V), record); - break; - - case BP_CCCV: // One key copy/paste - tap_taplong(LCTL(BP_C), LCTL(BP_V), record); - break; - - case KC_CTCN: // New TaB/Window - tap_taplong(LCTL(KC_T), LCTL(KC_N), record); - break; - - case BP_CTCN: // New TaB/Window - tap_taplong(LCTL(BP_T), LCTL(BP_N), record); - break; - - case KC_CWCQ: // Close Tab-window/Quit - tap_taplong(LCTL(KC_W), LCTL(KC_Q), record); - break; - - case BP_CWCQ: // Close Tab-window/Quit - tap_taplong(LCTL(BP_W), LCTL(BP_Q), record); - break; - - case KC_XM_PORD: // Xmonad scratch pads or desktop - tap_taplong(LGUI(KC_E), LGUI(KC_T), record); - break; - - case BP_XM_PORD: // Xmonad scratch pads or desktop - tap_taplong(LGUI(BP_E), LGUI(BP_T), record); - break; - - - // Open on tap and Open with close and back arrow on hold. - case KC_OCPRN: - open_openclose(KC_LPRN, KC_RPRN, record); - break; - - case BP_OCPRN: - open_openclose(DB_LPRN, DB_RPRN, record); - break; - - case KC_OCBRC: - open_openclose(KC_LBRC, KC_RBRC, record); - break; - - case BP_OCBRC: - open_openclose(KC_RBRC, KC_LBRC, record); - break; - - case KC_OCCBR: - open_openclose(KC_LCBR, KC_RCBR, record); - break; - - case BP_OCCBR: - open_openclose(BP_LCBR, BP_RCBR, record); - break; - - case KC_OCDQUO: - open_openclose(KC_DQUO, KC_DQUO, record); - break; - - case BP_OCDQUO: - open_openclose(BP_DQUO, BP_DQUO, record); - break; - - case KC_OCQUOT: - open_openclose(KC_QUOT, KC_QUOT, record); - break; - - case BP_OCQUOT: - open_openclose(BP_QUOT, BP_QUOT, record); - break; - - case KC_OCGRV: - open_openclose(KC_GRAVE, KC_GRAVE, record); - break; - - case BP_OCGRV: - open_openclose(BP_GRV, BP_GRV, record); - break; - - case KC_OCLTGT: - open_openclose(KC_LT, KC_GT, record); - break; - - case BP_OCLTGT: - open_openclose(BP_LDAQ, BP_RDAQ, record); - break; - - - //Turn shift backspace into delete. - /* case KC_BSPC: */ - /* { */ - /* // Initialize a boolean variable that keeps track */ - /* // of the delete key status: registered or not? */ - /* static bool delkey_registered; */ - /* if (record->event.pressed) { */ - /* uint8_t mod_state = get_mods(); */ - /* // Detect the activation of either shift keys */ - /* if (mod_state & MOD_MASK_SHIFT) { */ - /* // First temporarily canceling both shifts so that */ - /* // shift isn't applied to the KC_DEL keycode */ - /* del_mods(MOD_MASK_SHIFT); */ - /* register_code(KC_DEL); */ - /* // Update the boolean variable to reflect the status of KC_DEL */ - /* delkey_registered = true; */ - /* // Reapplying modifier state so that the held shift key(s) */ - /* // still work even after having tapped the Backspace/Delete key. */ - /* set_mods(mod_state); */ - /* return false; */ - /* } */ - /* } else { // on release of KC_BSPC */ - /* // In case KC_DEL is still being sent even after the release of KC_BSPC */ - /* if (delkey_registered) { */ - /* unregister_code(KC_DEL); */ - /* delkey_registered = false; */ - /* return false; */ - /* } */ - /* } */ - /* // Let QMK process the KC_BSPC keycode as usual outside of shift */ - /* return true; */ - /* } */ - - -#ifdef UNICODE_ENABLE - case UC_FLIP: // (ノಠ痊ಠ)ノ彡┻━┻ - if (record->event.pressed) { - send_unicode_string("(ノಠ痊ಠ)ノ彡┻━┻"); - } - break; - case UC_TABL: // ┬─┬ノ( º _ ºノ) - if (record->event.pressed) { - send_unicode_string("┬─┬ノ( º _ ºノ)"); - } - break; - case UC_SHRG: // ¯\_(ツ)_/¯ - if (record->event.pressed) { - send_unicode_string("¯\\_(ツ)_/¯"); - } - break; - case UC_DISA: // ಠ_ಠ - if (record->event.pressed) { - send_unicode_string("ಠ_ಠ"); - } - break; -#endif } } return true; diff --git a/users/ericgebhart/readme.md b/users/ericgebhart/readme.md index 4a081bd3449..446a1411b40 100755 --- a/users/ericgebhart/readme.md +++ b/users/ericgebhart/readme.md @@ -1,212 +1,1584 @@ Overview ======== -Warning: dvorak touch typist, that uses qwerty and bepo locales on my -computer. 40+ years of vi, 30 years of vi in Emacs. +This is as much a keymap framework as it is a keymap. It can take many +shapes with just a few configuration choices. Base layers, Mods, thumb clusters, +edge_keys, all can be changed with just a configuration option. +There are over 50 base layouts to choose from, as well as multiple +choices of navigation, mouse, media, +symbols, and keypads. Home row mods come in a few flavors or none, +in a mod layer which is easily understandable and can be turned on +or off, or switched. There are Miryoku options for everything if +that is your thing. -Recent years I have gone minimal, I don't use most of the keys on my ergodox, -or original edition dactyl. These maps work great on large and small keyboards, -my preference seems to be 40% split ergo keyboards like the corne. +If there is a oled of 64x128 the maps of each layer will be displayed, which +helps a lot in remembering and learning. -I think that what is special here is the layouts. I don't worry too -much about leds, or RGB, although I do like oled. But really its mod_layer.h, -all the simple layer chunks and definitions, and the ability to apply that -to any keyboard with minimal effort. The other thing is the example it -provides for defining keymaps based on different OS locales. I use both -dvorak on Qwerty, and bepo/dvorak on bepo. That means I must change my -locale on my OS to match my keyboard which can do qwerty or bepo locales. +This is an easily configurable keymap for keymap exploration. It is for +primarily for minimalist, ortho split keyboards but does support some rectangles. +It´s first keyboard was an Ergodox-ez many years ago. My daily driver +is now a Kyria or a Corne, but I still use an original dactyl, rebound +and ergodox-ez regularly although most of the love goes to the Kyria and Corne. -It is possible, as I do, to send a keycode invoking xmonad, to execute my -qwerty - bepo switch on my computer. +The framework is Language +agnostic, it supports having layers for different locales which can be +cycled through. +There are multiple mods layers to choose or +not, home row mods or not, a variety of thumb layouts, mouse/no mouse, +smart lock layers and mods, N-Shot mods like callum's, swapper. Combos, +tap_hold, accented keys, alternate shifted keys, automatic custom +keys, key overrides. Minimal or no C-code required for most things. +Language, mods, layouts and extensions are encapsulated, so that they +do not interact in the configuration which makes it much easier to modify +and grow. Mods and combos are by key location rather than specific key codes. -Besides using dvorak, another thing that colors my keyboard code is that I -have used the kinesis -advantage for for more than 2 decades. I have used the ergodox ez for several years -as well, so the evolution of my keymaps starts there with space, enter, backspace -and delete keys on the thumbs. +Quick start +------------- -Layouts ------------ -This evolved from the old layout...wrapper code. Calling everything a wrapper seems -silly. So I took a step back. +Everything is encapsulated here. Base layers, functional layers, mods, +or no mods, even the language. This means that anything can change +independently and easily. -Also, with all these layers it was a real pain to apply mods consistently and -easily. So I changed the way I use keymap macro wrappers and added in my own -mod layer. The only thing it has is the mods to apply. No more editing keymaps -to apply mods. I do it once, and it works everywhere I want. +If you don't mind dvorak, beakl or hands down, you can probably +just use what is configured. Or just change it to a base layer +of your choice. The fastest way to get started is to just change +the base layers to the ones you want, compile and flash. -All layouts, almost, boil down to a 3x5 x 2 matrix. Bepo is 3x6. Mostly, I want -my controls to stay the same. As we have been conditioned, these are the keys on -the edges, or middle. Not that they can't change but I don't usually change them -much, except the side edges, - the extra pinky columns. -the F keys, the columns to the left and right and the row on the bottom. -Thumb keys if you have them. Even the number row is practically the same. +Edit _config.h_, + * Set the lang_is, probably to EN. + * US international and BEPO are also supported out of the box. + * Uncomment the base layers you wish to have. + * comment the ones you don't. + * keep the number below 5 if you enable a second locale. + * Set the thumb clusters + * Choose a mod layer + * Choose an edge key set if you need one. + * Choose the layer flavors that you want. + * For Miryoku, copy the `miryoku_hd_gold_config.h` over `config.h` + It is a complete config with miryoku choices. Choose the base + layers you wish if Hands Down Gold and Qwerty is not your thing. + + ** do not turn off extensions until you know them ** + It will likely cause a stream of errors for the keycodes that + go missing when something is turned off. There are known + interactions between combos, smart locks, not_dead, and alt local keys. + Turning encoders or oled on and off certainly won´t break + anything. + + There are other interactions between your choices. + Edge keys, thumbs, combos, other extensions, + may use the extensions that are enabled. + +### Look here to see the parts + * Everything can be turned on and off in *config.h* + * Base layers are in *base_layers/* + * Edge keys are in *layers/edge_keys.h* + * Thumbs can be reviewed in *layers/thumbs.h* + * Mods are in *mod_layers/* + * All other layers are also in *layers/* -With that in mind, reducing my layouts to 3x10 or 12 matrices would be great. -At the same time extracting my mods so they are easy to apply to any matrix. -So that's what is here. -At the bottom is the LAYOUT, needed by the keeb you have. Then I have my Layouts -to feed it with my ROWS macros which are my MOD layer. At the end of it all, -I give a 3x10 or 12 to a layout and I have a complete keyboard definition. -Creating a new keyboard map is super simple. +The long version +----------------- - * mod_layer.h is the place for home row mods or any other mods. - * layouts.h is where I define a new matrix using the ROW macros when I need one. - * core_keys.h - where I define my custom keys. Ya know, the big enum. - * altlocal_keys.c - Alternate key/shift keys for emulation on other locales. - * core_keysets.h - Base layers; qwerty, dvorak, beakl, colemak, norman, carplax... - * edge_keys.h - defines the edges and bottom/thumb keys of a keyboard. - * layers.h - defines actual layers for navigation, symbols, keypad, layers, top rows, etc. +All can be turned on or off in the config. +supports en-us and fr-bepo Support for other languages is easily added. -Process_records.c --------------------- -This is where the keycodes are processed... +Layouts are human readable, all extensions are defined with def files. +If an 128x64 oled is available, a map of the current layer is shown if enabled. -Custom keys -------------------- -I have a lot of custom keys because of bepo. It is somewhat confusing this interaction -between a keyboard and the software that receives it. +I'm an Xmonad, emacs in vi emulation programmer, that +just means that _Gui, Esc, :/?!% and ._ are all easy access and I like my +arrow and mouse keys in a 4 column row. -A lot of my pain is invoked by my desire to have dvorak on bepo. Which works just fine, -although an english/cyrillic situation may not work so well. Currently I have -dvorak and beakl on bepo in addition to bepo it's self. +I have also become minimalist in my keyboard choices. I don't use +number rows, not even on my kinesis, dactyl, or ergodox_ez, which have them. +Although my maps do reasonably support these bigger keyboards as that is where +it all started for me and I do still use them. My preference for keyboards +is more in line with the Kyria and Corne. I still use 6 columns, but have been +looking to use only 5. -Alternate keycodes for emulating a layout on another locale/language. ------------------------------ -Because of wanting dvorak and beakl on bepo there was the necessity to create keys -from keycodes which were not combined. For this I have a special function that -takes a keycode and gives a proper shifted character for it. It is only a 2 keycode -definition, but it does the basic non-shifted and shifted characters as you define them. +Note: Combos at QMK master do not currently support multiple reference layers which this +configuration uses. Combos still work as always, but do not support all the features +found here. To get fully functioning multi-reference combos, see my *ericgebhart_dev* +branch and pull request below. -Combos/Chords ----------------------------- -This is recently new to me. I'm using them on my thumb keys which are all LT's. -the combos allow for layer locking for the Nav layer, and a oneshot for symbols -among other things. +Actually, at the moment, the fix is in my ericgebhart branch, since I accidently +pushed it. I'll remedy that soon. -I followed the simple example at the end of the doc than uses the -combos.def file to define the combos. +A more current version of my QMK user can be found here in +A sparse tree [of my QMK User Space ](https://github.com/EricGebhart/MyQMK/users/ericgebhart) -Tap-mods +For full multi-lingual combo functionality you will need my [pull request for fully functioning multi-reference combos which can found here.](https://github.com/qmk/qmk_firmware/pull/16699) + +Things which effect the thinking. + * No mouse. + * Preference for 3x10 layouts. Corne, Kyria, etc. + * Still works with bigger keyboards like xd75, kinesis, dactyl, ergodox, viterbi. + * Change mods without changing any maps. + * No number row preference. - all layouts have them if needed. + * Xmonad window manager, GUI key is the entrance to the Xmonad world. + * Typing in other languages. + * Curious about keyboard layouts and experimenting. + * Must be easy to maintain, extend and modify. + * Minimize digging in code to add new things, or change old ones. + * Minimize process record user. + * Easy to add enums for keys and layers, as well as oled display. + * Easy to support multiple languages regardless of maps. + * Minimize the need to write C code. + * Encapsulate C code, so that it is extensible through data. + + +Features: + * Everything is configurable from config.h and .def files. + * Def files for most things. + * Custom key codes are mostly defined automatically. + * Everything is chosen or turned on and off in config.h + * Lots of macros to make it easy to redefine things without a refactor. + * Multiple edge/outer pinky column sets. + * Multiple thumb clusters to choose from. + * Thumb clusters and mods can be changed on a map by map basis. + * Easily define thumb clusters with an alpha letter. + * Easily define thumb clusters for non-base layer. + * Multiple base layers to choose from. + * Several variations of function layers to choose from + * Miryoku layers, thumbs and mods if desired + * Miryoku hands down gold config can be swapped with config.h + * Navigation and mouse layers + * A selection of symbol, keypads, and other layers. + * Regular and Beakl keypad and number rows + * Multi language support, (locales in the code). + * Multiple mod layers to choose from. Easy to add more. + * home row mods - a selection + * no mods + * alt mods + * miryoku mods + * Extensions are easily defined in def files. + * N-shot mods + * One-shot mods + * swapper + * Smart lock mods + * Smart lock layers. + * Accent keys + * Alternate shift keys + * Alternate local keys + * key overrides + * Tap hold + * Not dead keys + * Send unicode + * Send string + * Encoders + * Display a map of the current layer on the oled. + * Adding a new layer is painless. + * Adding or changing most things, is not difficult. + * Console key logging for [heatmap analysis.](https://precondition.github.io/qmk-heatmap) + + +Layout shape and keyboard choices. ------------------------------------- -I had been using MT on my thumbs for GUI,CTRL,ALT on hold along with -Escape, Enter, space and backspace, my thumb keys. I then added shift to my home row pinky key. -I had layer shifts to symbols, numbers, navigation all on the home row of both hands. -It worked nicely but choppy I think, switching hands for the holder of the layer is -a little like having no caps lock. It was a lot of work adding them to all my maps. -This is what prompted my mod_layer. So much easier. No maps to modify. -Then I moved to all home row mods with layers on my thumb keys. + In all cases these keyboards are defined in a matrix which is + a set of rows. Maybe like so, or less. Kinesis has one more row. + +``` + -------------------------|------------------------ */ + | Left0 | Numbers L | mid|dle0 | numbers R | Right0 | + | Left1 | keys0-5 | mid|dle1 | Keys6-10 | Right1 | + | Left2 | keys11-15 | mid|dle2 | Keys16-20 | Right2 | + | Left3 | keys20-25 | mid|dle3 | Keys25-30 | Right3 | + | Row5L | Row5R | + | ThumbsL | ThumbsR | + -------------------------|------------------------ +``` -This does allow for more rolls, and I have found chord/rolls simply from having my -xmonad controls be GUI-some-home-row-key-or-close. When Gui is your index finger, -everything gets easier. +Generally speaking, the keys on the right and left and middle don't change. +Neither do the bottom row or the thumbs, unless asked. Frequently the numbers +row is identical across layers. -Somewhere along the way I got a corne, and everything had to be small. and I realized -that everything really was small. My layers are blending back, with LTs near the -home row, and all the thumbs. On my dactyl I currently have 8 thumb keys per thumb, -I don't know what to do with them all. Remembering a time I thought that would be -awesome. +For automatic edge columns set EDGE_COLS. +Outside pinky keys are 'yes'. This is on by default. +N rows by 6 columns per side. +Should be undef/def'd by the keyboard's keymap if no. +#define EDGE_COLS yes. this is all taken care of for supported keyboards. -### tap_taplong and open_openclose -In process_records.c I have a nice couple of functions, -tap_taplong(), and open_openclose() for my non MT/LT functionality. +Thumbs and Edge keys are grouped into sets so that different sets can be chosen in +the config. - * I have home row mods for Shift, Ctrl, Alt, and Gui on both hands. - * I have a number of LT mods to raise layers nearby. Nav, toprows, symbol, keypad - are on both hands on the first and third rows around home row. - * Xmonad tap_taplong to pull up desktops or terminals with tap or hold. - * C-c/C-v, C-t/C-n, C-w/C-q are all on my Navigation layer as custom keys with tap_taplong. - * My thumbs are Enter/space and Esc/backspace which are also Navigation and toprows and symbol layers. They used to be GUI,CTRL,ALT,SFT. but all that's on the home row now. - * All of the paired characters on my symbol layer have a hold which closes them, and moves the cursor back between. +All layer macros take 3x10 or 3x12 as needed. Edge columns are +added as needed, and middle keys fill up the gap. +Thumb keys are added as asked. -### caps word -Holding both pinkies on home row for double tapping term, is effectively -right-shift and left-shift, invokes caps-word. The next word will be capitalized. -It continues until it shouldn't. +keyboard shapes: +Matrix size + 5th row + thumbs. +Matrix size + thumbs. -BEPO vs Qwerty Locale/language/Layers + * kinesis + 4x6 + 4 + 6 - 18 func keys. + * dactyl - Morpho handwire + 4x6 + 5 + 6 + * ergodox_ez + 4x6 + 5 + 6 & 3 pairs of center keys. + * crkbd - corne + 3x6 + 3 or 3x5 + 3 + * xiudi/xd75 + 5x15 + * keebio/viterbi + 5x14 + * montsinger/rebound/rev4 + 4x12 + 3 center keys. + * -- 4x12 + * splitkb/kyria + 3x6 + 7 or 3x5 + 7 + +The parts of a keymap --------------------- -Essentially they are different keycode sets. So anything that needs them, causes a layer. + + * keymap + * defined in _keymap/keymap.c_. + * Completely configurable from config.h + * Separated into logical chunks. + * Uses a language setting to create all maps. + * Creates the same maps in multiple languages. + * More than one language simultaneously on one keyboard. + * Currently provides these languag settings and keycodes. + * US - US-intl (US_) + * EN - US-en (KC_), + * BEPO - fr-bepo (BP_). + * Choosing dvorak, and enabling bepo as the second locale, + will produce two base layers to choose from on the keyboard. + Dvorak on US and BEPO. + + * Base layers + * Simple and compact definitions. + * Base layers are pure. + * Mods are defined separately. + * OLED Maps for 128x64 sized oleds. + * Language agnostic. + * Core layer chunks are 3x10. + * Except for few exceptions which are 3x12 + * More than 50 base layers to choose from. + + **Caution: Choosing too many base layers will result in toprows or keypad layer LT's + to stop working. If bepo is enabled, all base layers are doubled so it's + easy to hit the 16 layer limit for LT.** + + * Locales + * Locales, defines a set of layers for a locale. + * Layer definitions are language agnostic. - see lang.h. + + * Extensions - Defs. + * Can be selected in config.h + * Defined in easy to read .def files. + * Correspondance between *extensions/* and *defs/* + + * accented_keys.def - direct access to altgr keys + * altlocal_keys.def - alternate un/shifted pairs. + * alt_shift.def - alternate shifting behaviors for existing keycodes. + * not_dead.def - definitions for non-dead dead keys. + * caps_word - no def file. + * combos.def - + * custom_keys.def - list of custom keys. + * encoders.def - encoder behaviors by mod/layer. + * key_overrides.def - Bigger more complex alt keys. + * mod_lock.def - smart locking mods with a set of ignore keys. + * nshot.def - N-shot locking mods + * oneshot.def - One-shot locking mods + * smart_lock.def - Smart lock layers and mods. + * swapper.def - key substitution, reverser. + * eg. toggle between tab, backtab on a key, with a reverse key. + * tap_hold.def - Define key for tap and hold for tapping term for qqc autre. + * unicode.def - keycodes to send unicode strings. + * send_string.def - keycodes to send strings. + + + * Layers + * Multiple selections of the Transient layers. + * Layer chunks are 3x10, with some options. + * Full Navigation layer - stable and well used. + * Mouse keys or without. + * 1 or 2 layer nav, 2nd for mouse. or all on one. - choices. + * Multiple choices of an easy to use _top rows_ layer similar + to `raise` and `lower`. + * A fully complete symbol layer, Used for coding and writing. + * Accented letters and dead key layers. + * Keypads and function pads. + * Beakl keypads and symbol layers. + * Control layers. + * Layers + * Adjust + * RGB + + * OLED A simple, configurable implementation. + * Current base layer + * Current locale + * Current transient layer + * Last key, matrix location and value. + * Mods and locks + * Map of the current layer. (Oled 128x64) + * key logger + + * Keyboards + * nothing is needed in keymaps/*/keymap.c + * Layouts - keyboard matrix adaptation. + * Adaptive. Usually taking 3x10 maps and filling the edges and thumbs. + * 4x10 or whatever is possible. + * 3 versions, thinking in a split kb, way. + * 5 columns in, 5 out. + * 5 columns in, 6 out. + * 6 columns in, 6 out. + * per keyboard shape. + * There are layouts per keyboard. + * Base layout with mods and thumbs and edges added. + * Transient layout which can be KC_TRANS, in those same places. + * The number row addition can be turned on and off as needed by the layout. + * Layouts can hard code the number row, negating the need for giving one. + + * Multiple edge key sets + + * Multiple Thumb clusters - see config or thumbs.h for up to date choices. + * Support for multiple definitions. + * mods + * layers + * mods_layers + * mods_layers_nav + * beakl wi + * beakl wi - official. + * test - to play with. + * trans - transparent, could be used in the transient layout to allow alternates. + * miryoku with keypad + * miryoku with toprows + * mods_layers with left thumb letter + * hands down approximation with left thumb letter + * miryoku with keypad, letter on left, space on right. - no tab. + * miryoku with toprows, letter on left, space on right. - no tab. + + * Mod Layers + * Completely independent of any layer or base layer definition. + * Easy to create a new one by copying the transparent version. + * Can be changed on a layer per layer basis. + * Based on position in the matrix. + * Chosen in config. + * Multiple choices. + * Home Row Mods. sacg, gacs, gasc + Left and right mods on left and right. + * Transparent - the default if not chosen. + * Alt - Non home row mod variant. + * miryoku HRMS is sacg plus right alt/altgr on third row. + + * Alternate language/locale support + * Happens at the lowest level + * All maps work with any of the [keymap extras.](https://docs.qmk.fm/#/reference_keymap_extras) + * Language support is simple to add with just a new, very simple macro. + +The language keycodes can be found +[here.](https://github.com/qmk/qmk_firmware/tree/master/quantum/keymap_extras) + + +Architecture +----------------- +The idea here is that most things don't change, and the things that do are +easy to understand and change. The defs directory is where all the extras are, +tap_hold, alternate shift keys, combos, keycodes, smart lock, one shot mods,etc. + +If layers exist that you want and like, then all other behaviors are defined in +def files which are much nicer than working directly with C code. If there is +need there is always the copy pasta way too. + +Things that are likely to be changed when adapting a layout to personal preferences +are *layers/thumbs.h* and *mod_layers/*. The function layers are all in the +layers folder and should be easy to understand. Once added, it is only necessary to +add the appropriate defines in _config.h_ + +Adding new layers requires changes in layer_names, *oled/oled_layers.h* and *oled/oled_cartes.h* and the appropriate *keymap/ .h* file. + +Adding a new keyboard is done in keyboards and should be fairly obvious. +``` +. +├── base_layers +│   ├── accents.h +│   ├── alt.h +│   ├── base_layers.h +│   ├── beakl.h +│   ├── bepo.h +│   ├── carpalx.h +│   ├── dvorak.h +│   ├── gap.h +│   ├── hands_down.h +│   ├── keymaps.txt +│   ├── maks.h +│   ├── qwerty.h +│   └── toprows.h +├── config.h +├── defs +│   ├── accented_keys.def +│   ├── altlocal_keys.def +│   ├── alt_shift.def +│   ├── combos.def +│   ├── custom_keys.def +│   ├── encoders.def +│   ├── key_overrides.def +│   ├── mod_lock.def +│   ├── not_dead.def +│   ├── nshot.def +│   ├── oneshot.def +│   ├── send_string.def +│   ├── smart_lock.def +│   ├── swapper.def +│   ├── tap_hold.def +│   └── unicode.def +├── ericgebhart.c +├── ericgebhart.h +├── extensions +│   ├── accented_keys.c +│   ├── accented_keys.h +│   ├── altlocal_keys.c +│   ├── altlocal_keys.h +│   ├── alt_shift.c +│   ├── caps_word.c +│   ├── caps_word.h +│   ├── console_key_logger.c +│   ├── console_key_logger.h +│   ├── encoders.c +│   ├── encoders.h +│   ├── extensions.h +│   ├── keycodes.h +│   ├── keymap_combo.h +│   ├── key_overrides.h +│   ├── mod_lock.c +│   ├── mod_lock.h +│   ├── not_dead.c +│   ├── nshot_mod.c +│   ├── nshot_mod.h +│   ├── oneshot.c +│   ├── oneshot.h +│   ├── process_locales.h +│   ├── process_nshot.h +│   ├── process_smart_lock.h +│   ├── send_string.c +│   ├── smart_lock.c +│   ├── smart_lock.h +│   ├── swapper.c +│   ├── swapper.h +│   ├── tap_dances.c +│   ├── tap_dances.h +│   ├── tap_hold.c +│   ├── tap_hold.h +│   ├── unicode.c +│   └── unicode.h +├── keyboards +│   ├── keyboards.h +│   └── layouts.h +├── keymap +│   ├── keymap.c +│   ├── map_accented.h +│   ├── map_alt.h +│   ├── map_beakl.h +│   ├── map_bepo.h +│   ├── map_carpalx.h +│   ├── map_dvorak.h +│   ├── map_funcs.h +│   ├── map_gap.h +│   ├── map_hd.h +│   ├── map_keypads.h +│   ├── map_maks.h +│   ├── map_qwerty.h +│   ├── map_symbols.h +│   └── map_toprows.h +├── lang +│   ├── lang.h +│   ├── lang_map.h +│   ├── locale_layers.h +│   ├── locales.c +│   └── locales.h +├── layer_names +│   ├── base_names.h +│   ├── func_names.h +│   ├── layer_names.h +│   └── util_names.h +├── layers +│   ├── edge_keys.h +│   ├── keypads.h +│   ├── layers.h +│   ├── nav.h +│   ├── symbols.h +│   ├── thumbs.h +│   ├── toprows.h +│   └── utility.h +├── listen_keylogger.sh +├── mod_layers +│   ├── alt_mods.h +│   ├── hrm_gacs.h +│   ├── hrm_gacs_miryoku.h +│   ├── hrm_gasc.h +│   ├── hrm_sacg.h +│   ├── hrs_nav.h +│   ├── mod_layer.h +│   └── trns_mods.h +├── oled +│   ├── oled_cartes.c +│   ├── oled_layers.c +│   ├── oled_stuff.c +│   └── oled_stuff.h +├── process_records.c +├── readme.md +└── rules.mk + +10 directories, 118 files +``` + +Locales +------------------- +There are currently three locales. LANG_IS defines the one in use. +The map changes this value as it goes, to get the maps that are asked for. +I have recently renamed some variables, such that it seems that only 2 locales +are possible. It seems more than two might be too many. And keeping at 2 is +a little easier. + + * EN - en-us, **KC_** keycodes. + * US-INT - us-international variant, **US_** keycodes. + * BEPO - bepo-fr, **BP_** keycodes. + +Switching LANG_IS before adding a new map will cause that map to +use LANG keycodes and keymap chunks when building the map. + +Enabling a second locale to bepo, will cause bepo versions of the chosen layers to +be added to the keymap. + +### defining a locale. + +This is to manage BEPO and Qwerty Locale/language/Layers +Each locale is defined with a start and end layer from the layers enum. + +This is only necessary to give contextual base layer choices based on +the current locale setting, which the keyboard tracks. + +The first and last defines are all done with the magic of defines in +ericgebhart.h where the layers enum is defined. + +This could potentially hold multiple locales, The map turns on off the layers +and their enums if they are not enabled so that the layer array does not +fill up with too many base layers, or other layers because LT only works +up to layer 15. + +What this does is allow the keyboard to know which locales it has, and which +layers go with them. + +If you have an oled, the locale will be displayed after the layout name. Currently +en-us and bepo-fr are there. + +Locales are tracked, as to the layer ranges which belong to them in the layers enum. +This allows for a `KC_NEXT_LOCALE` key and a `KC_NEXT_BASE_LAYER` key, on the _layers_ +layer. +`KC_SET_BASE` sets the default layer in the eeprom. + +When cycling through layers only the layers for the chosen local will appear. + +The layers are different keycode sets. So there are two symbol layers, two toprows layers, two keypad layers. -One for Qwerty and one for bepo. The Navigation layer is not affected. +One for Qwerty and one for bepo. The Navigation layer is not affected because +it has only control keycodes which are independent of locale. -I only have bepo, dvorak and beakl on bepo. There are a bunch for Qwerty. -I have a ton of basic layers. I'm most interested in beakl at the moment, but I've used Dvorak for more than 20 years. There is also qwerty, colemak, norman, carplax, etc. -The navigation/mouse layer is not affected by bepo/qwerty, but symbols and numbers are. -There are bepo versions of everything that needs it. +### Locales, how they work in layouts. -Navigation Layer ------------------------ +This is done through consistent naming patterns and macros. +Here are the macros that support creation of layout parts by locale. +All are defined in **lang.h** + + * Keycode Prefix - KC or BP, etc. + `LANG_KC(_A) -> KC_A or BP_A` + + * Defined key/layer Suffix - SYMB_EN, SYMB_BP, ... + `LANG_N(NAME) -> NAME_EN, NAME_BP` + + * Map chunk Suffix - _EN, SYMB_BP, etc. + `MAP_CHUNK(15_BOTTOM) --> ___15_BOTTOM_EN___ or ___15_BOTTOM_BP___` + +_lang.h_ has the macro definitions used in the keymap resolution, +A new locale, will need a new set of macros that match the others. +They use LANG_IS, Follow the patterns. It should be reasonably obvious. + +It is only necessary to create new base level macros that are used by these +macros. All of them are similar. + +**LANG_KC** uses these macros to resolve it's values. +``` + // Give the right keycode prefix by LANG_IS + #define LANG_PFX CAT(LANG_IS_, KC) + #define BEPO_KC BP_ + #define EN_KC KC_ +``` + +Adding a new one is just a matter of adding the a macro named with +this format. `LANG_IS _Keycode prefix`. +for Slovak, if the **LANG_IS** value is `SK` that would be, + + `#define SK_KC SK_` + +LANG_N macro uses these similar macros for it's resolution. + +``` + // Give the right symbol suffix by LANG_IS + #define LANG_SFX CAT(CAT(LANG_IS, _), SFX) + #define BEPO_SFX _BP + #define EN_SFX _EN +``` +Adding Slovak support to the LANG_N macro looks like this. + + `#define SK_SFX _SK` + + +### Thumb clusters. + +Thumb clusters can be chosen by layer with the value of **THUMBS_ARE**. + +The easiest way to see them is to look in *layers/thumbs.h*. + +At the core of the thumb clusters are a set of six keys which +can be changed to a one of a set of keys, with settings in the config. +Supporting a 4 key thumb cluster would just need a similar set. + +The newer Hands down variants also have need of thumb clusters which +can take a letter. A default can be given in config.h. +Each keymap layer entry can give it's letter to change the thumb cluster. +This is needed for hands down, maltron, rsthd, and beakl wi. + +These layouts use a special thumb cluster variant which will use the value +of *THUMB_LETTER* to place a letter on one of the thumb keys. + +It is reasonably easy to add a new thumb cluster and use it. Add it to +thumbs.h, add to the list of macros for it's suffix, and turn it on +by setting it to *THUMBS_ARE* in config.h + +Additionally a thumb cluster can be set for the various function layers as +well. The transparent thumbs can be used, or something else. The nav and +mouse layers have the mouse buttons if mouse keys are enabled. + +It is also possible to use a Miryoku thumb cluster and layers +or mix the other layers in as desired. + +The language of thumb clusters is managed at the lowest level. +These keys are mostly not language specific. + +Here is the definition for my space and symbol layer key. +This changes the name of the layer given like this. + +_SYMB becomes *_SYMB_EN* or *_SYMB_BP*. Depending on the value of *LANG_IS* + + `#define SPC_SYMB LT(LANG_N(_SYMB), KC_SPC)` + + +Edge key sets +---------------- +Edge keys, or the 6th, and outer pinky column are often not specified +in base keymaps and are not strictly necessary. There are a few sets +to choose from here. A NOKC set with no keys, NORM which is sorta normal +with grave, equal, tab, -, and \/. There is also a smart lock set +which gives access to smart lock layers tab and -. Last there is +test, so its easy to try new things. Edge keys are defined in +*layers/edge_keys.h*. + + +Base Layers +----------------- +I like to experiment with layouts. So I have a few. +They can be turned on in config.h. + +To switch base layers there is a combo to raise the layers layer. +Hold both pinkies on their lower row keys to get the layer. +Tap the home row left middle finger to change layers. +Tap the ring finger to set it to eeprom if you want it to stick. + +The left index finger will cycle through locales if you have them. + +Here is a list of some of the base layers.. + + * Dvorakish + * Dvorak + * Capewell-Dvorak + * Ahei + * Boo + * Dvorak RLC-UI + * Beakl + * 15 + * 19 + * 27 + * WI + * Qwertyish + * Qwerty + * Azerty + * Workman + * Norman + * Maks + * Colemak + * Colemak_DH + * Halmak + * Minimak + * Minimak 8 + * Minimak 12 + * Carpalx + * QFMLWY + * QGMLWB + * QGMLWY + * Hands Down + * Neu + * Neu narrow + * Titanium + * Gold + * Platinum + * Silver + * Bronze + * Elan + * Dash + * Ref + * MTGAP + * Mtgap + * Ctgap + * Apt + * Canary + * Others + * Maltron + * Eucalyn + * Rsthd + * Isrt + * Hands Up + * White + * Soul + * Niro + * Asset + * Whorf + * Whorf6 + * Bepo, layers with accented letters. + * Bepo + * Optimot + * Optimot compact + * Beakl19bis + +### Adding a new base layer, or any layer + +Adding a new base layer is easy. They all live in *base_layers/*. A base layer +entry looks like this. There is an empty template in *base_layers.h* which collects +all the other maps. The name of the carte de map, should be **CARTE** followed by +the layer name that will be used. Layer names are usually an underscore followed by +the name. For dvorak, that is *_DVORAK*, which because of the language layer ultimately +and magically becomes *_DVORAK_EN*, *_DVORAK_US*, *_DVORAK_BP* as needed. + +``` +#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) +``` + +#### TL_ keycodes + +Use TL_ keycodes for any punctuation, this allows for targeting +of these keys by language and by target layout as needed. +for instance *TL_COMM* -> TLKC(_COMM). The *Target-Language-comma*, +becomes BP_BK_COMM, or KC_DV_COMM, US_HD_COMM, or whatever it +needs to be based on current language and target layout. If your layer has special +puncuation needs, + + * Add key entries to *altlocal_keys.def* + * Edit to *lang/lang_map.h* to add the new *TARGET_PFX* entry. + * Set the appropriate value to *ALT_TARGET_IS* in the layer's keymap entry. + +#### Integration + +Integrating the new map into the rest of the framework is just a simple entry +in a few places. + * *layer_names* needs to know about the new name so we can use it, + * The oled needs to know about it so it can display it. + * The config needs to know about it so we can turn it on. + +Follow these steps. Everything is very simple, and just one to 3 lines. +Just follow the same patterns as all the rest. + + * Add the layer definition and map of the definition in *base_layers/.h*. + * Add the layer name to *layer_names/base_names.h* + * Add the layer name to *keymap/.h* + * Add the layer entry to *oled/oled_layers.c* + * Add the layer map entry to *oled/oled_cartes.c* + * Add the define for the layer enable to *config.h* + +Adding a new functional layer follows the same patterns, although their +keymap and oled entries may be more complex, since it is usually trying +to pick one from a set of choices. + +### Adding a new thumb cluster configuration + +Adding a new thumb keys definition is done in *layers/thumbs.h*. +The keys that change are just 6 and they all have the name of *___6_ERGO_THUMBS_...*. + + * Define a new thumb definition with a nice suffix like all the rest. + * Add an entry to the *THUMB_EXT* list with the nice new suffix. + * Set the appropriate *THUMBS_ARE* defines in config.h to it's + new thumb extension name. + +### Adding a new mod layer + +This is also easy. Mod layers live in the mod_layers folder. Each file +there is a separate mod layer, which is tracked in *mod_layers.h* +The file, *trns_mods.h* is the transparent mods layer and by definition has +no modifiers applied, providing a clean slate. + +The steps are these: + * Make a new copy of an existing mod layer. + * Edit the new file and change the names to your new name. + * ie. *_trns* changes to *_my_new_mods* + * Add the mods you want. MT's and LT's, tap holds, etc. + * Edit *mod_layers/mod_layer.h* + * Add the include for the new mods file* + * Add the *MOD_EXT* entry for the new name + * Define *MODS_ARE* in _config.h_ to use the new name. + + +Keymaps +----------- +I only have one. It's in keymap/keymap.c. +My config.h has all the current usable settings. +Turn on the layers by enabling and choosing them in config.h. +Most keyboards don't need a keymap.c. + +There are corresponding Bepo layers, as needed, which will arrive if *SECOND_LOCALE* is +set to _BEPO_. +This essentially doubles the number of keymaps. +Nav, mouse, media, layers, RGB, and Adjust are not duplicated as there is no +current need. + +## Mods, home row and otherwise. +With all these layers it was a real pain to apply mods consistently and +easily with the old wrapper code. So I changed the way I use keymap macro +wrappers and added in my own mod layer. The only thing it has is the mods +to apply. No more editing keymaps to apply mods. I do it once, and it +works everywhere I want by location. + +Multiple versions are possible. Just copy the trns_mod_layer.h to a new +name and modify it with a new extension name, (replace '_trns'). Then add it's include to mod_layer.h, to be used when the config says. + +The defines for *MODS_ARE* and *DEFAULT_MODS* determine which mods are applied +to a given keymap layer. + +Keyboard matrix Layouts +----------- +This is where the keymap of the +keyboard meets the mods and all the edge, middle and thumb keys, and makes +it easy to give just a 3x10 definition for most layers regardless of which +keyboard it is going to. + +To use an existing layout for a different keyboard, simply make an entry +in *keyboards.h* to assign the proper layouts that fit that keyboard. +So a planck could use the 4x12 layout out of the box. In the keyboards +keymap there is only a need for config.h or rules.mk if something needs +changing. For the keyboard an empty keymap.c will do. + +The base layout can be anything really. +The base layer sets the thumbs and anything outside of the 3x10. +The mod layer is wrapped in the base layout and adds the mods, and a 6th +outer pinky column as needed. + +Some layouts take an extra number row. +Layouts can be any shape, all of these take a 3x10, 3x12, 4x10 or 4x12, +and make it fit the keyboard. + +The layouts defined in _layouts.h_ take a list of keys. and give them +to the keyboard's layout. The Corne (crkbd), uses a layout called + `LAYOUT_split_3x6_3`. So for the corne, I have a `Base_3x6_6` that + is the same shape, in its resolution. + +There are layouts for Corne, ergodox, kinesis, dactyl, viterbi, xd75, rebound. + +Currently, 3 layouts are needed per keyboard. + * A Base layout, for default/base layers, + * A transient layout for the function layers. + * A version which takes 3x12 for the larger bepo base layers. + +The base layouts can take 3 or 4 rows by 10 columns as desired. +They add in the mods, and any pieces of matrix outside of +the 3x10 center, function, numbers, lower rows, outside pinky keys, +and thumb clusters. + + +Functional layers +-------------------- +There are quite a few of these to choose from. The easiest way to see +them all is to go look at them in _layers/_. They are logically divided +into files, and their cartes/maps are easy to look at. There are +minimalist Miryoku versions as needed. + +## Navigation Layer I do not use a mouse. I use Xmonad as my window manager, and I have practically no use for one. They are necessary however. So I have a Navigation layer which is all mouse, arrows, home, end, tab, page up, down, 5 mouse buttons and so on. -This layer is not affected by bepo/qwerty, but symbols and numbers are. -There are bepo versions of everything that needs it. -Arrow combos work just fine, in emacs I use SFT(arrows) to move between windows. -To do this; shift is my left pinky home, Nav is right thumb Enter, and one of the four -home keys of my left hand are the arrows. Home row mods allow this to work well. +There are a growing number of choices, left and right sided mouse layers +right side arrows etc, and some monolithic nav layers like the one shown +below. -I don't use the arrows on the dactyl and kinesis, even though they are there. +There is also a split layer, with arrows etc on the right, and smart mods +and N-shots on the other. A left side mouse layer is accessible from +the first nav layer. There are various choices at this point. It is +best to look at the config.h for clues. + +The miryoku nav and mouse layers are somewhat but not terribly different. + + +#### One of the Navigation layers. + +``` +M = Mouse +B = Button +W = Wheel +AC = Acceleration +CCCV = Tap -> Ctrl-C, hold for double tap duration -> Ctrl-V +CTCN = Tap -> Ctrl-T, hold for double tap duration -> Ctrl-N +CWCQ = Tap -> Ctrl-W, hold for double tap duration -> Ctrl-Q +HOME = TAB & PGDN +END = BKTAB & PGUP +Lock/Unlock LAYER = PGDN & PGUP + +MB5 MB4 MB3 MB2 MB1 MAC0 | CTCN MB1 MB2 MB3 MB4 MB5 +TAB MLeft MDown MUp MRight MAC1 | CCCV Left Down UP Right TAB + WLeft WDown WUp WRight MAC2 | CWCQ TAB PGDN PGUP BKTAB + + Left Down Up Right CCCV | CCCV MLeft MDown MUp MRight + + +``` + + +## Symbol Layer + +The symbol layer is based on the Beakl15 symbol layer. It was very similar to a symbol +layer that I had before beakl, but this felt better, and has been through a few +iterations at this point. Vi likes using :/?! a lot. The = is not that important to +me, as the : for the vi ex: command. The ! is very satisfying in this location. + +For US-intl and Bepo which have dead keys, the symbol layer uses the *not_dead* extension +to give _'`"^~_ which are not dead. -Symbol Layer -------------------- -The symbol layer is based on the Beakl15 symbol layer. The beakl symbol layer is intuitive and fairly easy to remember. There are 3 versions. -The original, an extended called A, and an extended and enhanced for vi, called B. +The original, an extended, and an extended and enhanced for vi. The primary purpose of the extension was to provide keys which might not be available -elsewhere on the default layer. B, takes this further and moves :/? to better places. +elsewhere on the default layer. The vi version takes this further and moves :/? +to better places. -TopRows Layer --------------------- +I prefer a modified beakl15 symbol layer. here it is, left and right. +This layer has some extra characters so it works with non-beakl base layouts. +The beakl wi symbol layer is not an improvement on this IMO. +Miryoku symbols layer is only left sided, and minimalist as well. +This might be a little vi centric, with the : in the middle. ymmv. + +There are a few choices, this is one. + +``` + `<$>' ?[_-] + - \("#) !{:/} ; + @=*+; %&^~| +``` + + +## TopRows Layer + +The toprows layer is a nice way to transition to small keyboards. I think, truly this is the layer that makes tiny keyboards accessible in the beginning. -This is basically the number row, the shifted number row and the function key row. -I have them so it is numbers on the home row, shifted keys above and functions below. -There are multiple choices, I currently use the beakl number row, with everything -else as you would expect. +Everything can remain familiar. I use this one with a beakl number row. +The default, if no choices are made, aside from enabling toprows, will +have a normal qwerty number row, as in the second map. -Keypad Layer --------------- -There are several variations of keypads and function key pads in various sizes. -Currently I am using a Beakl Keypad on the left hand and 3x4 funcpad on the right. +I do not use F keys, The latest addition has _smart_ and _nshot mods_ in the third row. +There is a miryoku thumb cluster which uses this layer instead of a keypad. + + ``` + !@#$% ^&*() + 40123 76598 + F1 --- F10 + ``` + or + + ``` + !@#$% ^&*() + 12345 67890 + F1 --- F10 + ``` + +## Keypad and Funcpad Layers + +There are several variations of keypads and function key pads in various sizes, +and left and right. +There are also versions with smart and nshot mods instead of F-keys. +There are monolithic, left and right, and also half keyboard left mostly... +A miryoku version also exists. +The keypad can be chosen in config.h. + +``` + 523: F9-12 + 7.104 F5-8 + /698, F1-4 +``` +## Media Layer + +A simple Miryoku, media layer, controls on the right. OLED -------------------- -It shows the basic stuff I could find in most places. The -default layer, the current layer, the mods, the locks, the last key pressed, and -a map of the current layer as simply as possible. I'm sure there is more that could -be done. @Drashna has some fancy stuff. If the display is big enough, there is even -a display of the current layer's keymap. +The oled shows the basic stuff I could find in most places. +* Default layer +* Current layer +* Locale +* Mods +* Locks +* Last key pressed +* Map of the current layer as simply as possible. (128x64) -XMonad +Process_records.c +-------------------- +This is where the keycodes are processed... +It tends to be where cruft gathers. Mostly I try to keep it empty +and do all my processing with the extensions. The file, _extensions.h_ +takes care of inserting them in process_records with it's macro. + + +Extensions --------------------- -I use xmonad. Gui is my hot key for that. With home row mods I have home -row chords which give me access to my desktops, my scratchpads/terminals, -custom key KC_XM_PORD, among others. It sometimes feels that I am playing -an instrument when I invoke xmonad to do something. +Extensions are all in the extensions directory and have a single +entry point via extensions.h which provides a macro to place in **process_record_user**. +The intention is that they are easy to copy and use as is without digging around +in the C code. Custom keys are also defined there. Any keycodes defined by +an extension are automatically added to the custom keys enumeration so there is no need to define them manually. -I had an xmonad layer at one time, it was basically dvorak, I would invoke it -with a GUI mod, so that even on bepo, or colemak, my xmonad commands remain the same. +A new extension can be added with a process record entry in +extensions.h. Just follow the same code pattern. If an extension defines keycodes, +add it's include entry in *keycodes.h* so that they are automatically added to the enum. +Keycodes.h is also where all the miscellaneous short cut key defines are done. -I'm going to need to revisit that, as things are, all the commands move when I change -to a different default layer from dvorak. +To copy all the extensions, + * Copy the extensions and defs folders, + * Copy process_records.c file or adapt yours. + * Adapt your custom keycodes to custom_keys.def. + * Copy the pertinant parts of config.h so that everything can be enabled. + * Define _USERSPACE_H such that all the extensions can find your stuff. -Combo's can alleviate some of this pain. More to play with. +To adapt to your own process_record_user do this; +Include extensions.h in your process_record_user,then add this +above the switch. +``` +PROCESS_EXTENSIONS +``` +This will cause process records to use whatever extensions are turned on. +Many extensions have a _.def_ file in _/defs_ for any data that is needed. + +Because many of them use custom keycodes or layers in their definitions, +it is necessary to include your userspace .h such that keycodes and layer +codes can be found. To simplify this, simply add a define to config.h +to point at your .h or wherever your custom codes can be found. + +In my case; +```c +#define USERSPACE_H "ericgebhart.h" +``` + + +Custom keys +------------------- +The Custom keys are in __custom_keys.def__. + +__keycodes.h__ is an extension of sorts. It is the custom keys enumeration. +The __custom_keys.def__ has a few random keycodes in it. + +All other keys are automatically generated from the other def files. + +For the extensions that have key definitions those keys are enumerated +automatically. The keys are defined in the def files so there is no need +to add them to the enumeration manually. + +It will complain as usual if there are duplicates. + +Mostly, __keycodes.h__ is key defines to make shortcuts, since the enumeration +is done almost completely automatically. When adding a new extension +which defines keycodes, that extension will also need an entry in +keycodes.h in order to automatically define the new key enumerations +it´s def file creates. + + +Accent keys +----------------- +This is a way to create keycodes which access keys +which are normally only accessible with an Altgr/Ralt and a dead key. + +Each definition takes a keycode, the key to modify, and the dead key +to apply to it. + +``` +ACCENTED(BP_OCIR, BP_O, BP_DCIR) +ACCENTED(BP_ACIR, BP_A, BP_DCIR) +``` + + +Alternate keycodes +----------------------------- +Normally, a keycode has unshifted and shifted key values. These are defined +by the OS and it's locale, not the keyboard. This feature allows a keycode +to be defined that uses arbitrary unshifted and shifted keycodes and their modifiers. +This is necessary, because, for instance, qwerty has , and ; paired. Other +locales may not. Bepo, and Beakl both have different pairings as do many other +layouts. + +Because of wanting dvorak and beakl on bepo there was the necessity to create keys +from keycodes which were not combined. key overrides were not +sufficient because some keys are not actually keys that can be accessed +without modifiers. Each keycode for the new key specifies it's own +modifiers making any character available as an unshifted or shifted key. + +Alternate keys for a locale, are defined in **altlocal_keys.def**. +These are to emulate a key, from 2 keycodes. + +This is for emulating keys on another locale/language. +Dvorak on Bepo-fr, or Qwerty on sk-SK, or de_DE. + +It is also good for alternate shifted and unshifted pairs like +what is needed for beakl or hands down on en-us/qwerty. + +This feature is usually only needed for punctuation keys +and the top row number keys. Where the unshifted and shifted keys +are not the same character as the keyboard local on the OS. + +It has turned out that most of these keys have a destination language, +and a target language/layout. +The target is to emulate something on some language. QMK uses keycode prefixes, +so this works pretty well and the names stay consistent with all the others, +but with a middle name. + +The pattern is Language prefix, target language prefix, name. +The target prefix is made up. BK -> beakl, DV -> dvorak, HD -> hands down, etc. + +The naming pattern is only important in that it works with all of the Lang +macros elsewhere in this userspace. A macro is provided on a per key +basis, which can be used at the base layer definition, such that *TL_COMM*; +target-language-comma, becomes BP_BK_COMM, or KC_BK_COMM, or whatever it +needs to be based on +current language and target layout. + +Here is a def entry to create the 1/! keycode for dvorak in the Bepo-fr locale +in *altlocal_keys.def*. +``` + MK_KEY(BP_DV_1, BP_DQUO, MOD_LSFT, BP_DCIR, MOD_LSFT) +``` + +Here is what some Beakl keys look like for en-us/qwerty. +Beakl has dot with @, comma with ! and " with `. + +In *altlocal_keys.def*. +``` + // Keys for BEAKL on Qwerty + MK_KEY(KC_BK_DOT, KC_DOT, MOD_NONE, KC_2, MOD_LSFT) + MK_KEY(KC_BK_COMM, KC_COMMA, MOD_NONE, KC_1, MOD_LSFT) + MK_KEY(KC_BK_QUOT, KC_QUOT, MOD_NONE, KC_GRV, MOD_NONE) +``` + +Not Dead keys +-------------------- +As a writer dead keys give me access to accented letters in other languages, +As a programmer they are a pain, especially for a vi user. This problem is +limited to a few characters; "'`^ and ~. This extension helps to fix these +characters and make them accessible as non-dead keys. It does this by adding +a space afterward. The space is eaten by the OS keyboard driver and the letter +emerges as needed. Here are some non dead keys for US-Intl. +In use, I put these on the symbol layer, and let all the others remain dead. + +``` +NOT_DEAD(US_DQUO_ND, US_DQUO) +NOT_DEAD(US_GRV_ND, US_GRV) +NOT_DEAD(US_QUOT_ND, US_QUOT) +NOT_DEAD(US_CIRC_ND, US_CIRC) +NOT_DEAD(US_TILD_ND, US_TILD) +``` + +Alternate shifts +--------------------- +The alt shift extension is very simple, it uses a usual keycode, it does +not define custom keys. It allows for an existing key like dot or semi-colon +to have a different letter on its shifted value. + +There are currently three types of shift mods. + * Give a different character than usual on shift. + * Give two of the usual character instead of one. + * Give three of the usual character instead of one. + +They are all defined in *defs/alt_shift.def*. +Here are some silly examples. + +``` +ALT_SHIFT(US_EXLM, US_PERC) +SHIFT_FOR_2(US_AT) +SHIFT_FOR_3(US_DLR) +``` + + +Key Overrides +------------------- +These are the standard QMK key overrides. For un/shifted pair keys *altlocal_keys* is +much, +3x, smaller and direct in that it makes keycodes that can be placed anywhere. +However, if ko's are desired, this extension is an easy place to start. + +There are nice macros which take care of defining everything that is possible +with the ?_ko() functions + +This first example is better done with **altlocal_keys**. + +``` +// KOL(slash_pipe, MOD_MASK_SHIFT, KC_SLSH, KC_PIPE, _DVORAK_EN) +``` + +Other key overrides can be defined with these. + +``` +KO(name, mods, key, replacement) + +KOL(name, mods, modded_key, replacement, layer) + +KOLN(name, mods, key, replacement, layer, neg_mods) + +KOLNO(name, mods, key, replacement, layer, neg_mods, options) +``` + +Combos/Chords +---------------------------- + +The combos here use multiple reference layers which is a pending +pull request in the dev branch of QMK. The combos here will still work +to an extent if *COMBO_ONLY_FROM_LAYER* is set to the correct layer number. + +[See my pull request to enhance combos here](https://github.com/qmk/qmk_firmware/pull/16699) + +This pull request defines a hook function for combos to determine the +reference layer for the current layer. This allows for multiple reference +layers to be used depending on the situation. + +Reference layers will be created and used according to the following +defines. +If the reference layer is enabled, it will automatically be assigned to +COMBO_REF_DEFAULT and that will be the default reference if none +is specified. If not specified, the reference will be the current layer. + + * #define COMBO_REF_LAYER_ENABLE // enable a reference layer. + * #define COMBO_REF_LAYER_TWO_ENABLE // enable a second reference layer + * #define COMBO_ONLY_FROM_LAYER 2 + * #define COMBO_REF_DEFAULT 2 + Works in config.h if you know the number of your layer. + Automatically set if ref layer is enabled. + +Defining layer specific combo reference layers by layer in combos.def +In this case, the default will be _COMBO_REF, the NAV layer will +reference it's self, while bepo dvorak will reference the second +combo reference layer. Keys start or end with CB or CB2. + +``` +COMBO_REF_LAYER(_DVORAK_BP, _COMBO_REF2) +COMBO_REF_LAYER(_NAV, _NAV) +``` + +The combo reference layers follow an easy to remember keycode naming +convention so that it is easy to define combos based on position. +Keycodes are prefixed by CB or CB2, the first number is the row, +followed by L or R for left and right, then the column number, +for each hand left to right. + +Row 0 is the number row, there are 4 rows possible. + +`CB_1L1` is the left pinky, `CB_1R1` is the inside right hand index column. + +``` + _1L1, _1L2, _1L3, _1L4, _1L5, _1R1, _1R2, _1R3, _1R4, _1R5, +``` + +If there are edge keys, they are named accordingly, left and right. + +``` +L0_CB, L1_CB, L2_CB, L3_CB +R0_CB, R1_CB, R2_CB, R3_CB +``` + +Thumb keys use the COMBO and COMBO2 thumb settings which give keycodes +like this. + +``` +#define ___6_ERGO_THUMBS_COMBO___ CB_TH1, CB_TH2, CB_TH3, CB_TH4, CB_TH5, CB_TH6 +#define ___6_ERGO_THUMBS_COMBO2___ CB2_TH1, CB2_TH2, CB2_TH3, CB2_TH4, CB2_TH5, CB2_TH6 +``` + +Tap-Hold +----------------------- + +Tap hold currently has *tap_taplong* and *open_openclose* functions. +These are in *tap_hold.c*, *tap_hold.h* and *tap_hold.defs*. +Both use **TAP_HOLD_TERM** as the hold duration. + +Tap_taplong sends one keycode on tap, and another after a hold of tapping term. +Open_openclose, sends one keycode on tap, hold sends that, plus the second, +followed by a back arrow. + +Additionally, open_openclose will send a triple of the open keycode when tapped with +the shift modifier on. + +There as also a __not dead__ version of open_openclose that accomodates using +dead keys like quote so that the functionalty behaves as if the key were not +a dead key, giving a quote, a pair of quotes or a triple of quotes. + +The file _tap_hold.defs_ contains all the definitions. Like combos, +these entries are processed with a function call from **process_user_record** +`process_tap_hold_user(keycode, record);` + +Define your keys in *tap_hold.defs*. + +Here is Ctrl-C, Ctrl-V, as tap and long tap. +``` +TP_TPL(KC_CCCV, LCTL(KC_C), LCTL(KC_V)) +``` + +For tap open, hold for open and close then a back arrow. +Here is __(__ or __()__ with tap and long tap. + +``` +OPEN_OCL(KC_OCPRN, KC_LPRN, KC_RPRN) + +OPEN_OCL(KC_OCQUOT, KC_QUOT, KC_QUOT) +// non dead version of quote. +OPEN_OCL_ND(BP_OCQUOT, BP_QUOT, BP_QUOT) +OPEN_OCL_ND(US_OCQUOT, US_QUOT, US_QUOT) +``` + +It is also possible to trigger a smart lock with a hold. +This example creates a keycode, `ENTNAV` which can be used +to type enter, or smart lock the nav layer. +Note that `SML_NAV` should be defined in `smart_lock.defs`. + +__Caveat:__ +This does have the unfortunate behavior of delaying the action +until key up. So it may not be that useful. I did not like it +for this particular example. + +``` +TP_SML(ENTNAV, KC_ENTER, SML_NAV) +``` + +Caps Word +------------- +This is a slightly modified version of caps word which adds a *CAPS_WORD_ON* keycode +which can be used to turn caps word on explicitly. This is useful for mapping a +single key or creating a combo. + +[As documented in here.](https://getreuer.info/posts/keyboards/caps-word/index.html) +Holding both pinkies on home row for double tapping term, is effectively +right-shift and left-shift, invokes caps-word. The next word will be capitalized. +It continues until it shouldn't. + +Smart lock +---------------- +They are defined in *smart_lock.def*. They need +a custom keycode, and a layer or mods, not mod keycode, to apply, +followed by a list of keycodes to ignore and stay active. +This allows popping to layer which will stick until it doesn't. +Or to apply mods until it shouldn't. Each definition has it's +own list of key codes to ignore. Derived from _smart_layers_ +by @possumvibes. + +Add a keycode to custom_keys.def then assign it to it's action in smart_lock.def. +``` +// SMLL = smart lock layer. +// SMLM = smart lock mod. + +// Keycode, layer/mod. +// list of keycodes to ignore. + +SMLM(SMLM_LSFT, MOD_LSFT, + ___VI_ARROWS___, + ___HOME_PGDN_PGUP_END___, + ___TAB_PGDN_PGUP_BKTAB___, + ___SML_MODS_L___) + +SMLL(SML_NAV, _NAV, ___NAVA_3x10___) + +``` + +Mod lock +---------------- +Mod lock is originally from @possumvibes, it has ignore keys as well, +but these keys apply to all locks defined. which gives a slightly smaller +memory footprint than smart locks. The mods, are keycodes, rather than mod codes. + +The behavior is the same as smart lock mods, but less flexible, and smaller. +First create a keycode in custom_keys.def, then assign it to the mod you want. + +Ignore keys are universal for all mod locks. + +``` +// mod lock keys. takes keymods not mods. +// keycode should be defined in custom_keys.def. +// custom key, modkey to activate +MODL(ML_LSFT, KC_LSFT) +MODL(ML_LCTL, KC_LCTL) +MODL(ML_LALT, KC_LALT) +MODL(ML_LGUI, KC_LGUI) + +// Keycodes which will NOT cancel mod lock mode. +IGNORE_KC( KC_LEFT) +IGNORE_KC( KC_RGHT) +``` + +N-shot mods +---------------- +I simply modified N-shots to use a def file. This is essentially @possumvibes +fancier version of @callum's one shot mods. It has ignore and cancel keys, +and there are one shot mods or N shot mods. Ignore and cancel keys apply +to all oneshot and n-shots. + +``` +// Define keycodes in custom keys. +// KEYCode, mod keycode, to set for n-shot. +// ONESHOT is for one. +// NSHOT takes a count. + +// oneshots +ONESHOT(OS_LSFT, KC_LSFT) + +// N-Shots +NSHOT(TS_LCTL, KC_LCTL, 2) + +// Keys which will cancel the n-shots. +CANCEL_KEY( PANIC) + +// Keys which will be ignored by n-shots. +IGNORE_KEY( SML_NAV) +``` + +One-shot mods +---------------- +This code came by way of @jurgen-kluft, I encapsulated the code and made +the user functions definable with a .def file. This is similar to N-shots. +This one keeps track of the last key consumed which helps it's decision making. +It also has cancel and ignore keys like N-shots. + +Essentially the same as n-shots, but with less elegant C code. Choose one or +the other. + +In evaluation. The code for nshots is better. + +``` +// custom-key, Oneshot name. +ONESHOT( OS_LSFT, ONESHOT_LSFT) + +// keys to cancel +CANCEL_KEY( KC_ESC) + +// keys to ignore. +IGNORE_KEY( SPC_NAV) +``` + +Swapper +---------------- +I added the defs code so they are easy to define. This is a way to +alternate between 2 keycodes for a key by sending another keycode. An +example is tab or backtab on one key, which reverses when you press a +second key. It also allows for mods to be applied. The following defines +SW_WIN, which sends left alt-tab and shift- left alt- tab, when reversed +by SW_REV. + +``` +SWAPPER_KEY(SW_WIN, SW_REV, KC_TAB, S(KC_TAB), KC_LALT) +``` +Note: The switch key is not automatically defined in the custom keys enum in +_keycodes.h_. It is convenient to use the same one which causes problems +for automatically adding it. Add it to *custom_keys.def* + +Encoders +---------------- +This is basic encoder stuff, modified to use a def file which makes it a lot easier +to define and use. It can switch the encoder functions based on layers and mods. +Give it a layer name and/or mods to match on, and the clockwise and counter +clockwise keycodes to send. + +I used LEFT and RIGHT, but really it's just 0-N, but I happen to have one +on the left and one on the right. If you have one, use 0 or LEFT. + +The code scans the entries for matches on layer first, checking for a match for +mods. If an encoder entry is not found it then scans for entries with +layer set to LAYER_NONE. + +RGB light controls require calling the functions directly, for this +there is a special macro and function that does this. The functions +should take no arguments. + +``` +// Layer/none, encoder index 0/1, CW_KC, CCW_KC, Qualifying mod or none +// LAYER_NONE and MOD_NONE for a single use. +// LEFT and RIGHT for index. they go on from there, 2, 3, etc +// if one encoder, LEFT/0, is the first one, on the master side. + +// default encoders, all layers no mods. +ENCODER_ACTION(LAYER_NONE, RIGHT, KC_PGDN, KC_PGUP, MOD_NONE) +ENCODER_ACTION(LAYER_NONE, LEFT, KC_DOWN, KC_UP, MOD_NONE) +ENCODER_ACTION(LAYER_NONE, LEFT, KC_PGDN, KC_PGUP, MOD_LSFT) + +// Symbol layer encoders. +ENCODER_ACTION(_SYMB, LEFT, KC_LEFT, KC_RIGHT, MOD_NONE) + +// RGB function encoders +ENCODER_FUNCTION(_RGB, LEFT, + rgb_matrix_increase_speed_noeeprom, + rgb_matrix_decrease_speed_noeeprom, MOD_NONE) +``` + + +Unicode +---------------- +This is just the basic unicode example everyone seems to have. +Add your keys to send unicode strings like so. + +``` + UC_STR(UC_DISA, "ಠ_ಠ") +``` + +Send_string +-------------- +This is just basic send string functionality using *SEND_STRING* and +*SEND_STRING_DELAY*. Each entry defines a key to send a string. + +``` +SEND_STR(MYKEY, "this is a test") +SEND_STR_DELAY(VRSN, QMK_KEYBOARD ":" QMK_KEYMAP " @ " QMK_VERSION ", Built on: " QMK_BUILDDATE) +``` + +Console key logging - for heat maps. +---------------------- +Both CONSOLE_ENABLE and CONSOLE_KEY_LOGGER_ENABLE must be enabled for this to work. + +This is a console key logger which can save keys typed for analysis of keymaps +using Vlad/Precondition's heat map tool. The code for the logger came from +[here](https://precondition.github.io/qmk-heatmap#how-to-collect-the-required-data) +The explanation and use of the heatmap is [here](https://precondition.github.io/qmk-heatmap) + +There is a script ```listen_keylogger.sh``` which should be run to collect +the keylogger data. + +This does require **hid_listen** to be installed on the computer. +On Arch linux this can by installed from the AUR with ```yay -S hid_listen``` + +The output can also be seen just by using ```qmk console```. + +Note: _print.h_ is automatically included when CONSOLE_ENABLE is set. This allows +for debug messages anwhere in the code base as needed to see what might be going +on. Tap Dance -------------------- -I have a lot of tap dance, It's turned off. It's big. tap-hold works pretty well most of the time, instead. +I had a lot of tap dance, It's turned off. It's big. tap-hold works pretty well most of the time, instead. My favorites were tab-backtab, home-end. -Switching the OS keyboard -------------------------- -This varies from system to system. I use Arch Linux, so I use ```setxkbmap```. -I've included a helper script which makes it easy to switch between EN and FR Bepo, -called switch-kbd. In xmonad I invoke this with a keystroke. so, same deal. just map -the keystroke to a key. - diff --git a/users/ericgebhart/rules.mk b/users/ericgebhart/rules.mk index a5d5e2c1ca8..a6eddc2d874 100755 --- a/users/ericgebhart/rules.mk +++ b/users/ericgebhart/rules.mk @@ -1,26 +1,73 @@ +INTROSPECTION_KEYMAP_C = keymap/keymap.c # keymaps SRC += ericgebhart.c -SRC += tap_dances.c SRC += process_records.c -SRC += caps_word.c -SRC += altlocal_keys.c +SRC += $(USER_PATH)/lang/locales.c +SRC += $(USER_PATH)/extensions/extensions.c +SRC += $(USER_PATH)/extensions/tap_hold.c +SRC += $(USER_PATH)/extensions/accented_keys.c +SRC += $(USER_PATH)/extensions/altlocal_keys.c +SRC += $(USER_PATH)/extensions/tap_dances.c +SRC += $(USER_PATH)/extensions/encoders.c +SRC += $(USER_PATH)/extensions/swapper.c +SRC += $(USER_PATH)/extensions/mod_lock.c +SRC += $(USER_PATH)/extensions/smart_lock.c +SRC += $(USER_PATH)/extensions/nshot_mod.c +SRC += $(USER_PATH)/extensions/oneshot.c +SRC += $(USER_PATH)/extensions/unicode.c +SRC += $(USER_PATH)/extensions/send_string.c +SRC += $(USER_PATH)/extensions/console_key_logger.c +SRC += $(USER_PATH)/extensions/not_dead.c +SRC += $(USER_PATH)/extensions/alt_shift.c +SRC += $(USER_PATH)/extensions/quick_tap.c +SRC += $(USER_PATH)/oled/oled_stuff.c +SRC += $(USER_PATH)/oled/oled_cartes.c +SRC += $(USER_PATH)/oled/oled_layers.c -VPATH += keyboards/gboards +VPATH += $(USER_PATH)/layer_names +VPATH += $(USER_PATH)/oled +VPATH += $(USER_PATH)/extensions +VPATH += $(USER_PATH)/base_layers +VPATH += $(USER_PATH)/defs +VPATH += $(USER_PATH)/keyboards +VPATH += $(USER_PATH)/keymap +VPATH += $(USER_PATH)/lang +VPATH += $(USER_PATH)/layers +VPATH += $(USER_PATH)/mod_layers +VPATH += $(USER_PATH)/oled +# MCU=STM32F411 +# BOARD=QMK_PROTON_C +# SOFT_SERIAL_PIN=D2 +# # Bootloader selection +# BOOTLOADER = stm32-dfu + +# WS2812_DRIVER = pwm +# SERIAL_DRIVER = usart +# AUDIO_ENABLE = no +# LTO_ENABLE = no +# CONVERT_TO_PROTON_C = yes + +# so the keyboard's code doesn't add stuff we don't need. +# when we use our own oled renders. +# oled_custom_enable should also be set in config.h. OLED_ENABLE = yes +OLED_CUSTOM_ENABLE = yes -ifeq ($(strip $(OLED_ENABLE)), yes) - SRC += $(USER_PATH)/oled_stuff.c +ifeq ($(strip $(OLED_CUSTOM_ENABLE)), yes) + SRC += $(USER_PATH)/oled/oled_stuff.c endif MOUSEKEY_ENABLE = yes # Mouse keys -EXTRAKEY_ENABLE = yes # Audio control and System control +EXTRAKEY_ENABLE = no # Audio control and System control COMMAND_ENABLE = no # Commands for debug and configuration NKRO_ENABLE = no # Enable N-Key Rollover SWAP_HANDS_ENABLE= no # Allow swapping hands of keyboard KEY_LOCK_ENABLE = no TAP_DANCE_ENABLE = no # Enable the tap dance feature. -CONSOLE_ENABLE = no # Console for debug +KEY_OVERRIDE_ENABLE = no +CONSOLE_ENABLE = no # Console for debug or keylogging. + BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite UNICODE_ENABLE = no @@ -32,3 +79,9 @@ SPACE_CADET_ENABLE = no GRAVE_ESC_ENABLE = no MAGIC_ENABLE = no COMBO_ENABLE = yes +CAPS_WORD_ENABLE = yes + +ENCODER_ENABLE = no +RGBLIGHT_ENABLE = no +BACKLIGHT_ENABLE = no +RGB_MATRIX_ENABLE = no diff --git a/users/ericgebhart/switch-kbd b/users/ericgebhart/switch-kbd deleted file mode 100755 index 4401967a0f7..00000000000 --- a/users/ericgebhart/switch-kbd +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env zsh - -# Switch the keyboard to en-us by default, bepo, or en-dvorak. - -help(){ - print 'switch-kbd - helper for setxkbmap' - print ' ' - print 'Change the keyboard to en-us, fr-bepo, or en-dvorak.' - print 'Uses setxkbmap, so the change only affects the current' - print 'session. This mainly to avoid using a toggle key.' - print ' ' - print ' -b Bepo' - print ' -d Dvorak' - print ' -n do not execute' - print ' -h help text.' - print ' ' - print ' The default is to set the keyboard to en-us.' - exit -} - -layout="-layout us" -variant="" -let "execute = 1" -let "verose = 0" - -# $opt will hold the current option -local opt -while getopts bdnvh opt; do - # loop continues till options finished - # see which pattern $opt matches... - case $opt in - (b) - layout="-layout fr" - variant="-variant bepo" - ;; - - (d) - layout="-layout en" - variant="-variant dvorak" - ;; - (n) - let "execute = 0" - ;; - (v) - let "verbose = 1" - ;; - (h) - help - ;; - # matches a question mark - # (and nothing else, see text) - (\?) - print "Bad option:" $* - print " " - help - return 1 - ;; - esac -done -(( OPTIND > 1 )) && shift $(( OPTIND - 1 )) -##print Remaining arguments are: $* - -mycommand='setxkbmap '${layout}' '${variant} - -if [[ ( $verbose -ne 0 ) ]]; then; - print "setxkbmap Command:" $mycommand -fi - -if [[ ( $execute -ne 0 ) ]] -then; - eval $mycommand -else; - print "did not execute" -fi diff --git a/users/rmeli/.gitignore b/users/rmeli/.gitignore new file mode 100644 index 00000000000..799fc4adc10 --- /dev/null +++ b/users/rmeli/.gitignore @@ -0,0 +1,2 @@ +# Ignore symlinks to keymaps +km_* \ No newline at end of file diff --git a/users/rmeli/config.h b/users/rmeli/config.h new file mode 100644 index 00000000000..1a6db91d1b4 --- /dev/null +++ b/users/rmeli/config.h @@ -0,0 +1,44 @@ +/* +Copyright 2021-2022 Rocco Meli <@RMeli> + +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 . +*/ + +#pragma once + +#define TAPPING_TERM 200 + +#ifdef UNICODEMAP_ENABLE +# define UNICODE_SELECTED_MODES UC_MAC, UC_LNX +#endif + +#ifdef AUTO_SHIFT_ENABLED +# define AUTO_SHIFT_REPEAT +#endif + +#ifdef HOME_ROW_MODS_ENABLED +# define IGNORE_MOD_TAP_INTERRUPT +#endif + +#ifdef CAPS_WORD_ENABLE +# define BOTH_SHIFTS_TURNS_ON_CAPS_WORD +//#define DOUBLE_TAP_SHIFT_TURNS_ON_CAPS_WORD +#endif + +#ifdef RGBLIGHT_ENABLE +# define RGBLIGHT_LIMIT_VAL 120 +# define RGBLIGHT_HUE_STEP 10 +# define RGBLIGHT_SAT_STEP 17 +# define RGBLIGHT_VAL_STEP 17 +#endif diff --git a/users/rmeli/keyrecords/tap_dances.h b/users/rmeli/keyrecords/tap_dances.h index fa749a17f49..1d3018441e5 100644 --- a/users/rmeli/keyrecords/tap_dances.h +++ b/users/rmeli/keyrecords/tap_dances.h @@ -16,6 +16,7 @@ along with this program. If not, see . */ #pragma once + #include QMK_KEYBOARD_H // https://beta.docs.qmk.fm/using-qmk/software-features/feature_tap_dance#example-4-quad-function-tap-dance-id-example-4 @@ -26,9 +27,9 @@ along with this program. If not, see . // Tap dance enums enum { - TD_LSPO_CAPS, // Tap once for (, hold once for LSFT, tap twice for CAPS - TD_RSPC_CAPS, // Tap once for ), hold once for RSFT, tap twice for CAPS - TD_ESC_DEL, // Tap once for KC_ESC, twice for KC_DEL + TD_LSPO_CAPS, // Tap once for (, hold once for LSFT, tap twice for CAPS + TD_RSPC_CAPS, // Tap once for ), hold once for RSFT, tap twice for CAPS + TD_ESC_DEL, // Tap once for KC_ESC, twice for KC_DEL }; // Rename tap dances for keymap with shortcuts diff --git a/users/rmeli/keyrecords/unicode.h b/users/rmeli/keyrecords/unicode.h index 8e0c02d2789..d818af02eea 100644 --- a/users/rmeli/keyrecords/unicode.h +++ b/users/rmeli/keyrecords/unicode.h @@ -16,6 +16,7 @@ along with this program. If not, see . */ #pragma once + #include QMK_KEYBOARD_H // Needs to be active on the OS side as well @@ -46,30 +47,30 @@ enum unicode_names { const uint32_t PROGMEM unicode_map[] = { // KC_A - [aGRV] = 0x00E0, // à - [AGRV] = 0x00C0, // À - [aUML] = 0x00E4, // ä - [AUML] = 0x00C4, // Ä + [aGRV] = 0x00E0, // à + [AGRV] = 0x00C0, // À + [aUML] = 0x00E4, // ä + [AUML] = 0x00C4, // Ä // KC_E - [eGRV] = 0x00E8, // è - [EGRV] = 0x00C8, // È - [eACT] = 0x00E9, // é - [EACT] = 0x00C9, // É + [eGRV] = 0x00E8, // è + [EGRV] = 0x00C8, // È + [eACT] = 0x00E9, // é + [EACT] = 0x00C9, // É // KC_I - [iGRV] = 0x00EC, // ì - [IGRV] = 0x00CC, // Ì - [iCIR] = 0x00EE, // î - [ICIR] = 0x00CE, // Î + [iGRV] = 0x00EC, // ì + [IGRV] = 0x00CC, // Ì + [iCIR] = 0x00EE, // î + [ICIR] = 0x00CE, // Î // KC_O - [oGRV] = 0x00F2, // ò - [OGRV] = 0x00D2, // Ò - [oUML] = 0x00F6, // ö - [OUML] = 0x00D6, // Ö + [oGRV] = 0x00F2, // ò + [OGRV] = 0x00D2, // Ò + [oUML] = 0x00F6, // ö + [OUML] = 0x00D6, // Ö // KC_U - [uGRV] = 0x00F9, // ù - [UGRV] = 0x00D9, // Ù - [uUML] = 0x00FC, // ü - [UUML] = 0x00DC, // Ü + [uGRV] = 0x00F9, // ù + [UGRV] = 0x00D9, // Ù + [uUML] = 0x00FC, // ü + [UUML] = 0x00DC, // Ü }; // Accents diff --git a/users/rmeli/keyrecords/wrappers.h b/users/rmeli/keyrecords/wrappers.h new file mode 100644 index 00000000000..70ec4878bf3 --- /dev/null +++ b/users/rmeli/keyrecords/wrappers.h @@ -0,0 +1,178 @@ +/* +Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) +Copyright 2020 @jola5 +Copyright 2021-2022 Rocco Meli <@RMeli> + +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 . +*/ + +#pragma once + +#ifdef UNICODEMAP_ENABLE +# include "keyrecords/unicode.h" +#endif + +// + ------------- + +// + HOME ROW MODS | +// + ------------- + + +// https://precondition.github.io/home-row-mods + +// Left, QWERTY +#define HM_A LCTL_T(KC_A) +#define HM_S LALT_T(KC_S) +#define HM_D LGUI_T(KC_D) +#define HM_F LSFT_T(KC_F) + +// Left, COLEMAK +#define HMCMK_A LCTL_T(KC_A) +#define HMCMK_R LALT_T(KC_R) +#define HMCMK_S LGUI_T(KC_S) +#define HMCMK_T LSFT_T(KC_T) + +// Right, QWERTY +#define HM_J RSFT_T(KC_J) +#define HM_K RGUI_T(KC_K) +#define HM_L LALT_T(KC_L) // LALT, not RALT +#define HM_SCLN RCTL_T(KC_SCLN) + +// Right, COLEMAK +#define HMCMK_N RSFT_T(KC_N) +#define HMCMK_E RGUI_T(KC_E) +#define HMCMK_I LALT_T(KC_I) // LALT, not RALT +#define HMCMK_O RCTL_T(KC_O) + +// clang-format off + +// + ------ + +// + QWERTY | +// + ------ + + +#define _________QWERTY_HRM_LEFT__________ HM_A, HM_S, HM_D, HM_F +#define _________QWERTY_HRM_RIGHT_________ HM_J, HM_K, HM_L, HM_SCLN + +#define _______________QWERTY_L1_x5________________ KC_Q, KC_W, KC_E, KC_R, KC_T +#ifdef HOME_ROW_MODS_ENABLED +#define _______________QWERTY_L2_x5________________ _________QWERTY_HRM_LEFT__________, KC_G +#else +#define _______________QWERTY_L2_x5________________ KC_A, KC_S, KC_D, KC_F, KC_G +#endif +#define _______________QWERTY_L3_x5________________ KC_Z, KC_X, KC_C, KC_V, KC_B + +#define _______________QWERTY_R1_x5________________ KC_Y, KC_U, KC_I, KC_O, KC_P +#ifdef HOME_ROW_MODS_ENABLED +#define _______________QWERTY_R2_x5________________ KC_H, _________QWERTY_HRM_RIGHT_________ +#else +#define _______________QWERTY_R2_x5________________ KC_H, KC_J, KC_K, KC_L, KC_SCLN +#endif +#define _______________QWERTY_R3_x5________________ KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH + +// + ------ + + +#define ___________________QWERTY_L1_x6_____________________ KC_TAB, _______________QWERTY_L1_x5________________ +#define ___________________QWERTY_L2_x6_____________________ TD_ED, _______________QWERTY_L2_x5________________ +#define ___________________QWERTY_L3_x6_____________________ TD_LSPC, _______________QWERTY_L3_x5________________ +#define ___________________QWERTY_R1_x6_____________________ _______________QWERTY_R1_x5________________, KC_BSPC +#define ___________________QWERTY_R2_x6_____________________ _______________QWERTY_R2_x5________________, KC_QUOT +#define ___________________QWERTY_R3_x6_____________________ _______________QWERTY_R3_x5________________, TD_RSPC + +// + -------------- + +// + COLEMAK_MOD_DH | +// + -------------- + + +#define _____COLEMAK_MOD_DH_HRM_LEFT______ HMCMK_A, HMCMK_R, HMCMK_S, HMCMK_T +#define _____COLEMAK_MOD_DH_HMR_RIGHT_____ HMCMK_N, HMCMK_E, HMCMK_I, HMCMK_O + +#define ____________COLEMAK_MOD_DH_L1_x5___________ KC_Q, KC_W, KC_F, KC_P, KC_B +#ifdef HOME_ROW_MODS_ENABLED +#define ____________COLEMAK_MOD_DH_L2_x5___________ _____COLEMAK_MOD_DH_HRM_LEFT______, KC_G +#else +#define ____________COLEMAK_MOD_DH_L2_x5___________ KC_A, KC_R, KC_S, KC_T, KC_G +#endif +#define ____________COLEMAK_MOD_DH_L3_x5___________ KC_Z, KC_X, KC_C, KC_D, KC_V + +#define ____________COLEMAK_MOD_DH_R1_x5___________ KC_J, KC_L, KC_U, KC_Y, KC_SCLN +#ifdef HOME_ROW_MODS_ENABLED +#define ____________COLEMAK_MOD_DH_R2_x5___________ KC_M, _____COLEMAK_MOD_DH_HMR_RIGHT_____ +#else +#define ____________COLEMAK_MOD_DH_R2_x5___________ KC_M, KC_N, KC_E, KC_I, KC_O +#endif +#define ____________COLEMAK_MOD_DH_R3_x5___________ KC_K, KC_H, KC_COMM, KC_DOT,KC_SLASH + +// + ------- + + +#define ________________COLEMAK_MOD_DH_L1_x6________________ KC_TAB, ____________COLEMAK_MOD_DH_L1_x5___________ +#define ________________COLEMAK_MOD_DH_L2_x6________________ TD_ED, ____________COLEMAK_MOD_DH_L2_x5___________ +#define ________________COLEMAK_MOD_DH_L3_x6________________ TD_LSPC, ____________COLEMAK_MOD_DH_L3_x5___________ +#define ________________COLEMAK_MOD_DH_R1_x6________________ ____________COLEMAK_MOD_DH_R1_x5___________, KC_BSPC +#define ________________COLEMAK_MOD_DH_R2_x6________________ ____________COLEMAK_MOD_DH_R2_x5___________, KC_QUOT +#define ________________COLEMAK_MOD_DH_R3_x6________________ ____________COLEMAK_MOD_DH_R3_x5___________, TD_RSPC + +// + --------------- + +// + NUMBERS/SYMBOLS | +// + --------------- + + +#define ______________NUMBER_LEFT_x5_______________ KC_1, KC_2, KC_3, KC_4, KC_5 +#define ______________NUMBER_RIGHT_x5______________ KC_6, KC_7, KC_8, KC_9, KC_0 +#define ___________________NUMBER_LEFT_x6___________________ KC_GRV, ______________NUMBER_LEFT_x5_______________ +#define ___________________NUMBER_RIGHT_x6__________________ ______________NUMBER_RIGHT_x5______________, KC_MINS + +#define ______________SYMBOL_LEFT_x5_______________ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC +#define ______________SYMBOL_RIGHT_x5______________ KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN +#define ___________________SYMBOL_LEFT_x6___________________ KC_GRV, ______________SYMBOL_LEFT_x5_______________ +#define ___________________SYMBOL_RIGHT_x6__________________ ______________SYMBOL_RIGHT_x5______________, KC_TILD + +#define ____________________SYMBOL_R2_x6____________________ KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, KC_GRV +#define ____________________SYMBOL_R3_x6____________________ KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, KC_TILD + +// + ------- + +// + UNICODE | +// + ------- + + +#ifdef UNICODEMAP_ENABLE +#define ______________UNICODE_L2_x5________________ A_GRV, E_GRV, I_GRV, O_GRV, U_GRV +#define ______________UNICODE_L3_x5________________ A_UML, E_ACT, I_CIR, O_UML, U_UML +#endif + +// + ---- + +// + FUNC | +// + ---- + + +#define ______________FUNC_LEFT_5x_________________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5 +#define ______________FUNC_RIGHT_5x________________ KC_F6, KC_F7, KC_F8, KC_F9, KC_F10 +#define ____________________FUNC_LEFT_x6____________________ ______________FUNC_LEFT_5x_________________, KC_F6 +#define ____________________FUNC_RIGHT_x6___________________ KC_F7, ______________FUNC_RIGHT_5x________________ + +// + ---- + +// + MISC | +// + ---- + + +#define _________________BLANK_5x__________________ _______, _______, _______, _______, _______ +#define ______________________BLANK_6x______________________ _________________BLANK_5x__________________, _______ + +#define _________________NONE_5x___________________ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX +#define ______________________NONE_6x_______________________ _________________NONE_5x___________________, XXXXXXX + +#define ________________NAV_R2_x5__________________ XXXXXXX, XXXXXXX, KC_UP, XXXXXXX, KC_PGUP +#define ________________NAV_R3_x5__________________ XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN +#define ____________NAV_VIM_x4____________ KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT + +#define _______________CONFIG_R1_x5________________ UC_MOD, KC_ASUP, NK_ON, XXXXXXX, XXXXXXX +#define _______________CONFIG_R2_x5________________ XXXXXXX, KC_ASTG, NK_TOGG, CG_TOGG, XXXXXXX +#define _______________CONFIG_R3_x5________________ UC_RMOD, KC_ASDN, NK_OFF, CG_NORM, XXXXXXX + +#define ________________RGB_L2_x5__________________ RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI +#define ________________RGB_L3_x5__________________ RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD + +// clang-format on diff --git a/users/rmeli/oled/oled.c b/users/rmeli/oled/oled.c index d6d4b2c43cc..27c1e9c600b 100644 --- a/users/rmeli/oled/oled.c +++ b/users/rmeli/oled/oled.c @@ -18,6 +18,7 @@ along with this program. If not, see . #include "oled/oled.h" void oled_render_rocco(void) { + // clang-format off static const char PROGMEM rocco[] = { // 'rocco', 128x32px 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf8, 0xf8, 0xf8, 0x18, @@ -53,10 +54,13 @@ void oled_render_rocco(void) { 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x0f, 0x0e, 0x1c, 0x1c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1c, 0x0e, 0x0f, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; + // clang-format on + oled_write_raw_P(rocco, sizeof(rocco)); } void oled_render_meli(void) { + // clang-format off static const char PROGMEM meli[] = { // 'meli', 128x32px 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -92,5 +96,7 @@ void oled_render_meli(void) { 0x18, 0x1f, 0x1f, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; + // clang-format on + oled_write_raw_P(meli, sizeof(meli)); } diff --git a/users/rmeli/rmeli.h b/users/rmeli/rmeli.h index e6f51d4908f..d3533db7c39 100644 --- a/users/rmeli/rmeli.h +++ b/users/rmeli/rmeli.h @@ -15,6 +15,10 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ +#pragma once + +#include "keyrecords/wrappers.h" + #ifdef UNICODEMAP_ENABLE # include "keyrecords/unicode.h" #endif @@ -25,4 +29,4 @@ along with this program. If not, see . #ifdef TAP_DANCE_ENABLE # include "keyrecords/tap_dances.h" -#endif \ No newline at end of file +#endif diff --git a/users/rmeli/rules.mk b/users/rmeli/rules.mk index 293685e08be..db68d6326ca 100644 --- a/users/rmeli/rules.mk +++ b/users/rmeli/rules.mk @@ -1,11 +1,12 @@ # https://github.com/qmk/qmk_firmware/blob/develop/docs/squeezing_avr.md CONSOLE_ENABLE = no -COMMAND_ENABLE = no # Needed for Space Cadet Shift +COMMAND_ENABLE = no # Turned off for Space Cadet Shift and Caps Word MOUSEKEY_ENABLE = no SPACE_CADET_ENABLE = no # Implemented with tap dance GRAVE_ESC_ENABLE = no -MAGIC_ENABLE = no MUSIC_ENABLE = no +CAPS_WORD_ENABLE = yes +HOME_ROW_MODS_ENABLE = yes # VIA only support 4 layers by default # Use "#define DYNAMIC_KEYMAP_LAYER_COUNT" in config.h to change the limit @@ -17,4 +18,9 @@ endif ifeq ($(strip $(TAP_DANCE_ENABLE)), yes) SRC += $(USER_PATH)/keyrecords/tap_dances.c +endif + +ifeq ($(strip $(HOME_ROW_MODS_ENABLE)), yes) + # Define custom variable + OPT_DEFS += -DHOME_ROW_MODS_ENABLED endif \ No newline at end of file