mirror of
https://github.com/firewalkwithm3/qmk_firmware.git
synced 2024-11-22 11:30:30 +08:00
Remove obvious user keymaps, keyboards/{v,x,y,z}* edition. (#23083)
This commit is contained in:
parent
4a128c6062
commit
f8123c27ad
|
@ -1,15 +0,0 @@
|
||||||
#include "../../config.h"
|
|
||||||
|
|
||||||
// Backlight configuration
|
|
||||||
#undef BACKLIGHT_LEVELS
|
|
||||||
#define BACKLIGHT_LEVELS 3
|
|
||||||
|
|
||||||
// Underlight configuration
|
|
||||||
#undef RGBLED_NUM
|
|
||||||
#define RGBLED_NUM 6 // Number of LEDs
|
|
||||||
#undef RGBLIGHT_HUE_STEP
|
|
||||||
#define RGBLIGHT_HUE_STEP 8
|
|
||||||
#undef RGBLIGHT_SAT_STEP
|
|
||||||
#define RGBLIGHT_SAT_STEP 8
|
|
||||||
#undef RGBLIGHT_VAL_STEP
|
|
||||||
#define RGBLIGHT_VAL_STEP 8
|
|
|
@ -1,50 +0,0 @@
|
||||||
#include QMK_KEYBOARD_H
|
|
||||||
|
|
||||||
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
|
||||||
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
|
||||||
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
|
||||||
// entirely and just use numbers.
|
|
||||||
#define _BL 0
|
|
||||||
#define _FL 1
|
|
||||||
#define _RGBL 2
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
|
|
||||||
// See base_layer.png and rgb_layer.png for layout reference
|
|
||||||
|
|
||||||
// Base Default Layer
|
|
||||||
// Mac Modifier Layout. Use BootMagic to toggle GUI and ALT positions.
|
|
||||||
[_BL] = LAYOUT_60_ansi_split_bs_rshift(
|
|
||||||
QK_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, XXXXXXX,
|
|
||||||
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,
|
|
||||||
LT(_FL, 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, MO(_FL),
|
|
||||||
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_LEFT, KC_DOWN, KC_RGHT
|
|
||||||
),
|
|
||||||
|
|
||||||
// Function layer
|
|
||||||
[_FL] = LAYOUT_60_ansi_split_bs_rshift(
|
|
||||||
KC_GRV, 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_DEL, XXXXXXX,
|
|
||||||
XXXXXXX, KC_MPRV, KC_UP, KC_MNXT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PSCR, KC_SCRL, KC_PAUS, KC_INS,
|
|
||||||
_______, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
|
||||||
_______, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LT(_RGBL, KC_PGUP), _______,
|
|
||||||
_______, _______, _______, KC_MPLY, _______, KC_HOME, KC_PGDN, KC_END
|
|
||||||
),
|
|
||||||
|
|
||||||
// RGB Layer
|
|
||||||
[_RGBL] = LAYOUT_60_ansi_split_bs_rshift(
|
|
||||||
#ifdef RGBLIGHT_ENABLE
|
|
||||||
QK_BOOT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
|
||||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
|
||||||
XXXXXXX, BL_TOGG, BL_STEP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
|
||||||
_______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, XXXXXXX, XXXXXXX, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______
|
|
||||||
#else
|
|
||||||
QK_BOOT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
|
||||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
|
||||||
XXXXXXX, BL_TOGG, BL_STEP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
|
||||||
_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______
|
|
||||||
#endif
|
|
||||||
),
|
|
||||||
};
|
|
|
@ -1,22 +0,0 @@
|
||||||
/* Copyright 2018 MechMerlin
|
|
||||||
*
|
|
||||||
* 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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
// Enable cmd-option-escape on mac.
|
|
||||||
#define GRAVE_ESC_ALT_OVERRIDE
|
|
||||||
|
|
||||||
// place overrides here
|
|
|
@ -1,165 +0,0 @@
|
||||||
/* Copyright 2019 Yonatan Zunger
|
|
||||||
*
|
|
||||||
* 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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
#include QMK_KEYBOARD_H
|
|
||||||
|
|
||||||
enum custom_keycodes {
|
|
||||||
// Use this instead of RALT, so we can use it to switch layers but not trigger other alt-related
|
|
||||||
// behavior (like GRAVE_ESC_ALT_OVERRIDE).
|
|
||||||
MAGIC = SAFE_RANGE,
|
|
||||||
};
|
|
||||||
|
|
||||||
enum layers_keymap {
|
|
||||||
_QWERTY = 0,
|
|
||||||
_FUNCTION,
|
|
||||||
|
|
||||||
_MAGIC,
|
|
||||||
_SHIFTMAGIC,
|
|
||||||
};
|
|
||||||
|
|
||||||
// This is so that H(xxxx) has the same width as _______, which makes the grids more legible.
|
|
||||||
#define H(x) UC(0x##x)
|
|
||||||
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
/* Keymap (Base Layer) Default Layer
|
|
||||||
* ,----------------------------------------------------------------.
|
|
||||||
* |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Del|Brk|Home|
|
|
||||||
* |----------------------------------------------------------------|
|
|
||||||
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ |End |
|
|
||||||
* |----------------------------------------------------------------|
|
|
||||||
* |Ctrl | A| S| D| F| G| H| J| K| L| ;| '|Return |PgUp|
|
|
||||||
* |----------------------------------------------------------------|
|
|
||||||
* |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | Up|PgDn|
|
|
||||||
* |----------------------------------------------------------------|
|
|
||||||
* |Ctrl|Alt |Win | Space |Alt| FN |||||Lef|Dow|Rig |
|
|
||||||
* `----------------------------------------------------------------'
|
|
||||||
*/
|
|
||||||
[_QWERTY] = LAYOUT(
|
|
||||||
QK_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_BRK, KC_HOME,
|
|
||||||
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_END,
|
|
||||||
KC_LCTL, 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_PGUP,
|
|
||||||
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_PGDN,
|
|
||||||
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, MAGIC, MO(_FUNCTION), KC_LEFT, KC_DOWN, KC_RGHT),
|
|
||||||
|
|
||||||
/* Keymap Fn Layer. Blank keys are deliberately NO, not TRNS.
|
|
||||||
* ,----------------------------------------------------------------.
|
|
||||||
* |Rst |F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|F13|PSc|PAUS|
|
|
||||||
* |----------------------------------------------------------------|
|
|
||||||
* |Debug| | | | | | | | | | | | | | |
|
|
||||||
* |----------------------------------------------------------------|
|
|
||||||
* |Ctrl | |Vo+| | | | | | | | | | | |
|
|
||||||
* |----------------------------------------------------------------|
|
|
||||||
* |Shift |REV|Vo-|FWD| | | | | | | | McL|MsU|McR |
|
|
||||||
* |----------------------------------------------------------------|
|
|
||||||
* |Ctrl|Alt |Win | |Alt| |||||MsL|MsD|MsR |
|
|
||||||
* `----------------------------------------------------------------'
|
|
||||||
*/
|
|
||||||
[_FUNCTION] = LAYOUT(
|
|
||||||
QK_BOOT, 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_F13, KC_PSCR, KC_MPLY,
|
|
||||||
DB_TOGG, 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_VOLU, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
|
||||||
_______, KC_MRWD, KC_VOLD, KC_MFFD, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_BTN1, KC_MS_U, KC_BTN2,
|
|
||||||
_______, _______, _______, KC_NO, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R),
|
|
||||||
|
|
||||||
/* Mathematical lower layer. Blank keys are TRNS.
|
|
||||||
* Note that escape turns into grave here. This doesn't just generalize GRAVE_ESC; it means that
|
|
||||||
* magic+esc is a way to create backticks without a dedicated key.
|
|
||||||
* ,----------------------------------------------------------------.
|
|
||||||
* | ` | ¹| ² | ³ | ⁴ | ⁵ | ⁶ | ⁷ | ⁸ | ⁹ | ⁰ | ⁻ | ⁺ | ⊕ | ≠ | √ |
|
|
||||||
* |----------------------------------------------------------------|
|
|
||||||
* | | ± | ω | ε | ρ | τ | θ | υ | ι | ο | π | ∃ | ∀ | ℚ | ℝ |
|
|
||||||
* |----------------------------------------------------------------|
|
|
||||||
* | | α | σ | δ | φ | γ | η | ∅ | κ | λ | ∨ | ∧ | | ℕ |
|
|
||||||
* |----------------------------------------------------------------|
|
|
||||||
* | | ζ | ξ | χ | ψ | β | ν | μ | ≲ | ≳ | ∈ | | ↑ | ↔ |
|
|
||||||
* |----------------------------------------------------------------|
|
|
||||||
* | | | | | | ||||| ← | ↓ | → |
|
|
||||||
* `----------------------------------------------------------------'
|
|
||||||
*/
|
|
||||||
[_MAGIC] = LAYOUT(
|
|
||||||
KC_GRV, H(00b9), H(00b2), H(00b3), H(2074), H(2075), H(2076), H(2077), H(2078), H(2079), H(2070), H(207b), H(207a), H(2295), H(2260), H(221a),
|
|
||||||
_______, H(00b1), H(03c9), H(03b5), H(03c1), H(03c4), H(03b8), H(03c5), H(03b9), H(03bf), H(03c0), H(2203), H(2200), H(211a), H(211d),
|
|
||||||
_______, H(03b1), H(03c3), H(03b4), H(03c6), H(03b3), H(03b7), H(2205), H(03ba), H(03bb), H(2228), H(2227), _______, H(2115),
|
|
||||||
_______, H(03b6), H(03be), H(03c7), H(03c8), H(03b2), H(03bd), H(03bc), H(2272), H(2273), H(2208), _______, H(2191), H(2194),
|
|
||||||
_______, _______, _______, _______, _______, _______, H(2190), H(2193), H(2192)),
|
|
||||||
|
|
||||||
/* Mathematical upper layer. Blank keys are TRNS.
|
|
||||||
* ,----------------------------------------------------------------.
|
|
||||||
* | ` | ₁| ₂ | ₃ | ₄ | ₅ | ₆ | ₇ | ₈ | ₉ | ₀ | ₋ | ₊ | ⊗ | ≈ | ∂ |
|
|
||||||
* |----------------------------------------------------------------|
|
|
||||||
* | | ∓ | Ω | Ε | Ρ | Τ | Θ | Υ | Ι | Ο | Π | ∄ | ∞ | ⊙ | ℂ |
|
|
||||||
* |----------------------------------------------------------------|
|
|
||||||
* | | Α | Σ | Δ | Φ | Γ | Η | ¬ | Κ | Λ | ∪ | ∩ | | ℤ |
|
|
||||||
* |----------------------------------------------------------------|
|
|
||||||
* | | Ζ | Ξ | Χ | Ψ | Β | Ν | Μ | ⊆ | ⊇ | ∉ | | ⇑ | ⇔ |
|
|
||||||
* |----------------------------------------------------------------|
|
|
||||||
* | | | | | | ||||| ⇐ | ⇓ | ⇒ |
|
|
||||||
* `----------------------------------------------------------------'
|
|
||||||
*/
|
|
||||||
[_SHIFTMAGIC] = LAYOUT(
|
|
||||||
KC_GRV, H(2081), H(2082), H(2083), H(2084), H(2085), H(2086), H(2087), H(2088), H(2089), H(2080), H(208b), H(208a), H(2297), H(2248), H(2202),
|
|
||||||
_______, H(2213), H(03a9), H(0395), H(03a1), H(03a4), H(0398), H(03a5), H(0399), H(039f), H(03a0), H(2204), H(221e), H(2299), H(2102),
|
|
||||||
_______, H(0391), H(03a3), H(0394), H(03a6), H(0393), H(0397), H(00ac), H(039a), H(039b), H(222a), H(2229), _______, H(2124),
|
|
||||||
_______, H(0396), H(039e), H(03a7), H(03a8), H(0392), H(039d), H(039c), H(2286), H(2287), H(2209), _______, H(21d1), H(21d4),
|
|
||||||
_______, _______, _______, _______, _______, _______, H(21d0), H(21d3), H(21d2)),
|
|
||||||
};
|
|
||||||
|
|
||||||
// Layer bitfields.
|
|
||||||
#define MAGIC_LAYER (1UL << _MAGIC)
|
|
||||||
#define SHIFTMAGIC_LAYER (1UL << _SHIFTMAGIC)
|
|
||||||
// The layers we don't touch.
|
|
||||||
#define LAYER_MASK ~(MAGIC_LAYER|SHIFTMAGIC_LAYER)
|
|
||||||
|
|
||||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
|
||||||
// Activate the appropriate magic layer:
|
|
||||||
// User is holding AltGr+Shift => _SHIFTMAGIC
|
|
||||||
// User is holding AltGr => _MAGIC
|
|
||||||
// Not holding AltGr => None
|
|
||||||
// We do this the efficient way, by grabbing the non-magic bits from the current layer bitmap,
|
|
||||||
// setting the appropriate magic or shiftmagic bit, and doing an absolute layer set. (Layer
|
|
||||||
// sets are nontrivial, so we don't want to do extras!)
|
|
||||||
|
|
||||||
// We track shift and AltGr state on our own, because this function is called before get_mods is
|
|
||||||
// updated!
|
|
||||||
static bool shifted = false;
|
|
||||||
static bool magic = false;
|
|
||||||
|
|
||||||
if (keycode == KC_LSFT || keycode == KC_RSFT) {
|
|
||||||
shifted = record->event.pressed;
|
|
||||||
} else if (keycode == MAGIC) {
|
|
||||||
magic = record->event.pressed;
|
|
||||||
} else if (keycode == QK_BOOT) {
|
|
||||||
// Safe reset: Only actually let this keycode through if shift is held as well. Since there's no
|
|
||||||
// right-shift in the function layer, this means that reset is Fn+LShift+Esc, something you're
|
|
||||||
// not likely to hit by accident. (Especially since AltGr+Esc is backtick!)
|
|
||||||
return (record->event.pressed && shifted);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update the layer.
|
|
||||||
uint32_t new_layer_state = layer_state & LAYER_MASK;
|
|
||||||
if (magic) {
|
|
||||||
new_layer_state |= (shifted ? SHIFTMAGIC_LAYER : MAGIC_LAYER);
|
|
||||||
}
|
|
||||||
if (layer_state != new_layer_state) {
|
|
||||||
layer_state_set(new_layer_state);
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void eeconfig_init_user(void) {
|
|
||||||
set_unicode_input_mode(UNICODE_MODE_MACOS);
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
* Custom keymap for kbd67, for those who need to both code and type math.
|
|
||||||
* Author: Yonatan Zunger (zunger@gmail.com)
|
|
||||||
|
|
||||||
This keymap is presently rather Mac-centric, as it uses Mac media keys in its function layer and the
|
|
||||||
OS X Unicode input mode for the "magic" layers.
|
|
||||||
|
|
||||||
*Layer 0 (Base QWERTY):* The layout has a few minor quirks: grave escape, Home/End/PgUp/PgDn in the
|
|
||||||
right-hand column (rather than the more common Home/PgUp/PgDn/End), and a pause key between
|
|
||||||
backspace and home -- this being something I use for screen lock, a necessity when one works with
|
|
||||||
and sits next to security engineers. (Using a heavier switch on the pause key greatly reduces the
|
|
||||||
risk of accidental triggering) In OS X style, alt and win are swapped on the left-hand side.
|
|
||||||
|
|
||||||
The right-hand alt and gui keys take on a different meaning: right-alt lives up to its old name of
|
|
||||||
AltGr by invoking Greek (the "magic" layers, 2 and 3), and right-gui invokes the function layer.
|
|
||||||
|
|
||||||
*Layer 1 (Functions):* This layer deliberately sets KC_NO for the keys it doesn't use. I realize
|
|
||||||
this isn't common, but I like to keep my functions quite distinct from all other layers.
|
|
||||||
|
|
||||||
RESET can be accessed at Fn+Left Shift+Escape.
|
|
||||||
|
|
||||||
*Layers 2 and 3*: These are invoked by the "magic" key (AltGr) and by magic+shift. The
|
|
||||||
letters mostly produce Greek; the numbers, superscripts (magic) and subscripts (magic+shift); and
|
|
||||||
the various other keys, mathematical symbols. There unfortunately aren't nearly enough keys for all
|
|
||||||
the symbols I'd like, so magic+alt and magic+alt+shift may end up existing as well, giving this a
|
|
||||||
proper Space Cadet effect; but that said, it's going to be hard to remember where all these symbols
|
|
||||||
are without some extremely custom keycaps. In the limit of arbitrarily complex layers, the keyboard
|
|
||||||
will probably start running LISP and turn into EMACS.
|
|
|
@ -1,2 +0,0 @@
|
||||||
# You need Unicode for this map.
|
|
||||||
UNICODE_ENABLE = yes # Unicode
|
|
|
@ -1,51 +0,0 @@
|
||||||
|
|
||||||
#include QMK_KEYBOARD_H
|
|
||||||
|
|
||||||
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
|
||||||
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
|
||||||
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
|
||||||
// entirely and just use numbers.
|
|
||||||
enum layer_names {
|
|
||||||
_BL,
|
|
||||||
_FL,
|
|
||||||
_RGBL
|
|
||||||
};
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
|
|
||||||
// See base_layer.png and rgb_layer.png for layout reference
|
|
||||||
|
|
||||||
// Base Default Layer
|
|
||||||
// Mac Modifier Layout. Use BootMagic to toggle GUI and ALT positions.
|
|
||||||
[_BL] = LAYOUT_all(
|
|
||||||
QK_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_NO,
|
|
||||||
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,
|
|
||||||
LT(_FL, 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_NO, KC_ENT,
|
|
||||||
KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, MO(_FL),
|
|
||||||
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_LEFT, KC_DOWN, KC_RGHT),
|
|
||||||
|
|
||||||
// Function layer
|
|
||||||
[_FL] = LAYOUT_all(
|
|
||||||
KC_GRV, 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_DEL, KC_NO,
|
|
||||||
KC_NO, KC_MPRV, KC_UP, KC_MNXT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PSCR, KC_SCRL, KC_PAUS, KC_INS,
|
|
||||||
KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
|
||||||
KC_TRNS, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, LT(_RGBL, KC_PGUP), KC_TRNS,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_TRNS, KC_HOME, KC_PGDN, KC_END),
|
|
||||||
|
|
||||||
// RGB Layer
|
|
||||||
[_RGBL] = LAYOUT_all(
|
|
||||||
#ifdef RGBLIGHT_ENABLE
|
|
||||||
QK_BOOT, 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_TRNS, KC_NO, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, BL_STEP, BL_TOGG, KC_TRNS, KC_TRNS,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
|
||||||
#else
|
|
||||||
QK_BOOT, 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_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, BL_STEP, BL_TOGG, KC_TRNS, KC_TRNS,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
|
||||||
#endif
|
|
||||||
),
|
|
||||||
};
|
|
|
@ -1,24 +0,0 @@
|
||||||
Stanley Lai's Split Right Shift with Dedicated Arrow Keys
|
|
||||||
======================
|
|
||||||
|
|
||||||
## Quantum MK Firmware
|
|
||||||
For the full Quantum feature list, see [the parent readme.md](/readme.md).
|
|
||||||
|
|
||||||
## Keymap Notes
|
|
||||||
- Keymap setup with split Right Shift in mind.
|
|
||||||
- Right-side modifiers are setup as dedicated arrow keys
|
|
||||||
|
|
||||||
### Base Layer Reference
|
|
||||||
- Fn Layer indicated on keycap front legends.
|
|
||||||
- Tapping Caps Lock key toggles Caps. Holding it down momentarily switches us to the Fn Layer.
|
|
||||||
- Holding down "Fn" and "Page Down" momentarily switches us to the RGB Layer. Tapping "Page Down" behaves as expected.
|
|
||||||
![Base Layer](http://imgur.com/aAi6lDe)
|
|
||||||
|
|
||||||
### RGB Layer Reference
|
|
||||||
![RGB Layer](http://imgur.com/ZWIfuPM)
|
|
||||||
|
|
||||||
## WS2812 Support
|
|
||||||
By default, it is now setup for 16 LEDs on the PF5 breakout pin.
|
|
||||||
|
|
||||||
### Build
|
|
||||||
To build this keymap, simply run `make KEYMAP=stanleylai`.
|
|
|
@ -1,20 +0,0 @@
|
||||||
|
|
||||||
|
|
||||||
# Build Options
|
|
||||||
# change yes to no to disable
|
|
||||||
#
|
|
||||||
BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
|
|
||||||
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
|
|
||||||
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
|
||||||
CONSOLE_ENABLE = no # Console for debug(+400)
|
|
||||||
COMMAND_ENABLE = no # Commands for debug and configuration
|
|
||||||
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
|
|
||||||
RGBLIGHT_ENABLE = yes # Enable WS2812 underglow RGB strip
|
|
||||||
MIDI_ENABLE = no # MIDI controls
|
|
||||||
UNICODE_ENABLE = no # Unicode
|
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
|
||||||
AUDIO_ENABLE = no # Audio output on port C6
|
|
||||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
|
||||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
|
||||||
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
|
||||||
NKRO_ENABLE = yes # USB Nkey Rollover
|
|
|
@ -1,26 +0,0 @@
|
||||||
/* Copyright 2018 Andrew Heaston
|
|
||||||
*
|
|
||||||
* 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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef CONFIG_USER_H
|
|
||||||
#define CONFIG_USER_H
|
|
||||||
|
|
||||||
|
|
||||||
// place overrides here
|
|
||||||
|
|
||||||
#define DISABLE_SPACE_CADET_ROLLOVER
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,197 +0,0 @@
|
||||||
/* Copyright 2018 Andrew Heaston @rooski15
|
|
||||||
*
|
|
||||||
* Developed by /u/holtenc at www.primekb.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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/// Prime_R Rev 1.0
|
|
||||||
|
|
||||||
#include QMK_KEYBOARD_H
|
|
||||||
|
|
||||||
//Arrow Cluster Toggle
|
|
||||||
static bool arrow_toggle = false;
|
|
||||||
|
|
||||||
//Arrow Keys
|
|
||||||
enum custom_keycodes{
|
|
||||||
AR_TOG = SAFE_RANGE, //Toggle Arrow Keys
|
|
||||||
AR_LT, //Num0 or Left Arrow
|
|
||||||
AR_RT, //NumEnt or Right Arrow
|
|
||||||
AR_DN, //NumDot or Down Arrow
|
|
||||||
AR_UP, //Num2 or Up Arrow
|
|
||||||
};
|
|
||||||
|
|
||||||
// Tap/Hold Space Layer
|
|
||||||
#define SPC_LT LT(1, KC_SPC)
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
/* (Base Layer) Default Layer
|
|
||||||
* ,---------------------------------------------------------------.
|
|
||||||
* |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -|BSP|DEL|HOM|END|
|
|
||||||
* |---------------------------------------------------------------|
|
|
||||||
* |Grv| Q| W| E| R| T| Y| U| I| O| P| [| ]| 7| 8| 9|
|
|
||||||
* |---------------------------------------------------------------|
|
|
||||||
* |Tab | A| S| D| F| G| H| J| K| L| '|Return| 4| 5| 6|
|
|
||||||
* |---------------------------------------------------------------|
|
|
||||||
* |Shift| Z| X| C| V| B| N| M| ,| .| ?|Shift| 1|ARU| 3| AR - U/D/L/R & Toggle
|
|
||||||
* |---------------------------------------------------------------|
|
|
||||||
* |Ctrl|Gui |Alt|TO1| 1/SP | 1/SP |ART|App|Alt|Ctrl |ARL|ARD|ARR| Arrow keys operate on AR Toggle to be numpad keys
|
|
||||||
* `---------------------------------------------------------------'
|
|
||||||
*/
|
|
||||||
// 0: Base Layer
|
|
||||||
[0] = LAYOUT(
|
|
||||||
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_BSPC, KC_DEL, KC_HOME, KC_END,
|
|
||||||
KC_GRV, 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_P7, KC_P8, KC_P9,
|
|
||||||
KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, KC_P4, KC_P5, KC_P6,
|
|
||||||
SC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SC_RSPC, KC_P1, AR_UP, KC_P3,
|
|
||||||
KC_LCTL, KC_LGUI, KC_LALT, TO(1), SPC_LT, SPC_LT, AR_TOG, KC_APP, KC_RALT, KC_RCTL, AR_LT, AR_DN, AR_RT
|
|
||||||
),
|
|
||||||
|
|
||||||
/* (Function Layer)
|
|
||||||
* ,---------------------------------------------------------------.
|
|
||||||
* |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9| F0| =|BSP|HOM|END|DEL|
|
|
||||||
* |---------------------------------------------------------------|
|
|
||||||
* |Grv| Q| W| E| R| T| Y| U| I| O| P| [| \| 7| 8| 9|
|
|
||||||
* |---------------------------------------------------------------|
|
|
||||||
* |BL | A| S| D| F| G| H| J| K| L| '|Return| 4| 5| 6|
|
|
||||||
* |---------------------------------------------------------------|
|
|
||||||
* |Shift| Z| X| C| V| B| N| M| ,| .| ?|Shift| 1|VUP| 3|
|
|
||||||
* |---------------------------------------------------------------|
|
|
||||||
* |Ctrl|Gui |Alt|TO0| 1/SP | 1/SP |ART|TO2|Alt|Ctrl |MUT|VDN|STP|
|
|
||||||
* `---------------------------------------------------------------'
|
|
||||||
*/
|
|
||||||
// 1: Function Layer
|
|
||||||
[1] = LAYOUT(
|
|
||||||
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_EQL, _______, KC_PSLS, KC_PAST, KC_PPLS,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BSLS, _______, _______, _______,
|
|
||||||
BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_QUOT, _______, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, _______,
|
|
||||||
_______, _______, _______, TO(0), _______, _______, _______, TO(2), _______, _______, KC_MUTE, KC_VOLD, KC_MSTP
|
|
||||||
),
|
|
||||||
|
|
||||||
/* (Numpad Mods)
|
|
||||||
* ,---------------------------------------------------------------.
|
|
||||||
* |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -|BSP| /| *| +| Mirrors base layer, but with numpad mods
|
|
||||||
* |---------------------------------------------------------------|
|
|
||||||
* |Grv| Q| W| E| R| T| Y| U| I| O| P| [| ]| 7| 8| 9|
|
|
||||||
* |---------------------------------------------------------------|
|
|
||||||
* |Tab | A| S| D| F| G| H| J| K| L| ;|Return| 4| 5| 6|
|
|
||||||
* |---------------------------------------------------------------|
|
|
||||||
* |Shift| Z| X| C| V| B| N| M| ,| .| ?|Shift| 1|ARU| 3|
|
|
||||||
* |---------------------------------------------------------------|
|
|
||||||
* |Ctrl|Gui |Alt|TO0| 1/SP | 1/SP |ART|App|Alt|Ctrl |ARL|ARD|ARR|
|
|
||||||
* `---------------------------------------------------------------'
|
|
||||||
*/
|
|
||||||
// 2: Numpad Mods
|
|
||||||
[2] = LAYOUT(
|
|
||||||
_______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, _______, KC_PSLS, KC_PAST, KC_PPLS,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_RBRC, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_SCLN, _______, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, AR_UP, _______,
|
|
||||||
_______, _______, _______, TO(0), _______, _______, _______, KC_APP, _______, _______, AR_LT, AR_DN, AR_RT
|
|
||||||
),
|
|
||||||
|
|
||||||
// 3: Extra
|
|
||||||
[3] = LAYOUT(
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
|
||||||
),
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
void matrix_init_user(void) {
|
|
||||||
if (get_backlight_level() != 0){
|
|
||||||
backlight_toggle();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
void matrix_scan_user(void) {
|
|
||||||
};
|
|
||||||
|
|
||||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
|
||||||
if(record->event.pressed){
|
|
||||||
switch(keycode) {
|
|
||||||
case AR_TOG:
|
|
||||||
arrow_toggle = !arrow_toggle;
|
|
||||||
backlight_toggle();
|
|
||||||
return false; break;
|
|
||||||
|
|
||||||
case AR_UP:
|
|
||||||
if(arrow_toggle == 1){
|
|
||||||
SEND_STRING(SS_DOWN(X_UP));
|
|
||||||
} else {
|
|
||||||
SEND_STRING(SS_DOWN(X_KP_2));
|
|
||||||
}
|
|
||||||
return false; break;
|
|
||||||
|
|
||||||
case AR_DN:
|
|
||||||
if(arrow_toggle == 1){
|
|
||||||
SEND_STRING(SS_DOWN(X_DOWN));
|
|
||||||
} else {
|
|
||||||
SEND_STRING(SS_DOWN(X_KP_DOT));
|
|
||||||
}
|
|
||||||
return false; break;
|
|
||||||
|
|
||||||
case AR_LT:
|
|
||||||
if(arrow_toggle == 1){
|
|
||||||
SEND_STRING(SS_DOWN(X_LEFT));
|
|
||||||
} else {
|
|
||||||
SEND_STRING(SS_DOWN(X_KP_0));
|
|
||||||
}
|
|
||||||
return false; break;
|
|
||||||
|
|
||||||
case AR_RT:
|
|
||||||
if(arrow_toggle == 1){
|
|
||||||
SEND_STRING(SS_DOWN(X_RIGHT));
|
|
||||||
} else {
|
|
||||||
SEND_STRING(SS_DOWN(X_KP_ENTER));
|
|
||||||
}
|
|
||||||
return false; break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(!record->event.pressed){
|
|
||||||
switch(keycode) {
|
|
||||||
case AR_UP:
|
|
||||||
if(arrow_toggle == 1){
|
|
||||||
SEND_STRING(SS_UP(X_UP));
|
|
||||||
} else {
|
|
||||||
SEND_STRING(SS_UP(X_KP_2));
|
|
||||||
}
|
|
||||||
return false; break;
|
|
||||||
case AR_DN:
|
|
||||||
if(arrow_toggle == 1){
|
|
||||||
SEND_STRING(SS_UP(X_DOWN));
|
|
||||||
} else {
|
|
||||||
SEND_STRING(SS_UP(X_KP_DOT));
|
|
||||||
}
|
|
||||||
return false; break;
|
|
||||||
case AR_LT:
|
|
||||||
if(arrow_toggle == 1){
|
|
||||||
SEND_STRING(SS_UP(X_LEFT));
|
|
||||||
} else {
|
|
||||||
SEND_STRING(SS_UP(X_KP_0));
|
|
||||||
}
|
|
||||||
return false; break;
|
|
||||||
case AR_RT:
|
|
||||||
if(arrow_toggle == 1){
|
|
||||||
SEND_STRING(SS_UP(X_RIGHT));
|
|
||||||
} else {
|
|
||||||
SEND_STRING(SS_UP(X_KP_ENTER));
|
|
||||||
}
|
|
||||||
return false; break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
};
|
|
|
@ -1,3 +0,0 @@
|
||||||
# /u/rooski15 layout
|
|
||||||
|
|
||||||
Changes include numpad codes, layer additions, and a toggle-able arrow cluster that is non layer dependant.
|
|
|
@ -1,2 +0,0 @@
|
||||||
|
|
||||||
COMMAND_ENABLE = no # Commands for debug and configuration
|
|
|
@ -1,42 +0,0 @@
|
||||||
/* Copyright 2021 Chase Nordengren
|
|
||||||
*
|
|
||||||
* 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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include QMK_KEYBOARD_H
|
|
||||||
|
|
||||||
|
|
||||||
enum custom_keycodes {
|
|
||||||
QMKPASS = SAFE_RANGE,
|
|
||||||
};
|
|
||||||
|
|
||||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
|
||||||
switch (keycode) {
|
|
||||||
case QMKPASS:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
// when keycode QMKPASS is pressed
|
|
||||||
SEND_STRING("Sample string");
|
|
||||||
} else {
|
|
||||||
// when keycode QMKPASS is released
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
[0] = LAYOUT(KC_ESC, SGUI(KC_R), SGUI(KC_S), QMKPASS, SGUI(KC_A), SGUI(KC_V))
|
|
||||||
};
|
|
||||||
|
|
|
@ -1,29 +0,0 @@
|
||||||
Techkeys SixKeyBoard
|
|
||||||
===
|
|
||||||
|
|
||||||
Keyboard Maintainer: QMK Community
|
|
||||||
Hardware Supported: Techkeys SixKeyBoard PCB
|
|
||||||
Hardware Availability: [Techkeys](http://techkeys.us/collections/accessories/products/sixkeyboard)
|
|
||||||
|
|
||||||
Make example for this keyboard (after setting up your build environment):
|
|
||||||
|
|
||||||
make sixkeyboard:semicolonsnet
|
|
||||||
|
|
||||||
See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
|
|
||||||
|
|
||||||
## Hardware Info
|
|
||||||
|
|
||||||
The schematic is like this:
|
|
||||||
|
|
||||||
```
|
|
||||||
switches leds
|
|
||||||
,--+--+--. ,--+--+--.
|
|
||||||
|C7|B7|B5| |C6|B6|B4|
|
|
||||||
+--+--+--+ +--+--+--+
|
|
||||||
|D6|D1|D4| |D5|D2|D3|
|
|
||||||
`--+--+--' `--+--+--'
|
|
||||||
```
|
|
||||||
|
|
||||||
The LED on the bottom is `C4`. All 7 of the leds are turned on when the keyboard boots-up in the `sixkeyboard.c` file - backlight_enable is not required. The MCU is an Atmega16u2, so the flash memory is limited to 0x3000 bytes - the current setup uses just about all of that! I'm sure things can be opitimised a bit.
|
|
||||||
|
|
||||||
There is a jumper on the bottom of the board (next to the USB port) that serves as a reset button - I drilled a hole in my case to allow for quick access via a screwdriver/metal object.
|
|
|
@ -1,18 +0,0 @@
|
||||||
/* Copyright 2018 Ben Lewis (FollowingGhosts)
|
|
||||||
*
|
|
||||||
* 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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
#pragma once
|
|
||||||
#define V60_POLESTAR
|
|
||||||
#define RGBLIGHT_EFFECT_BREATHING
|
|
|
@ -1,110 +0,0 @@
|
||||||
/* Copyright 2018 Ben Lewis (FollowingGhosts)
|
|
||||||
*
|
|
||||||
* 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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* This is adapted from the official ANSI layout provided by the KBP V60 Type R
|
|
||||||
* as depicted in their manual and on the stock keycaps.
|
|
||||||
*/
|
|
||||||
#include QMK_KEYBOARD_H
|
|
||||||
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
/* Keymap 0: Default Layer (Qwerty)
|
|
||||||
* CAPS opens Layer 1 if held, acts normally if tapped
|
|
||||||
* Tab is used for Mouse Layer (2)
|
|
||||||
* ,-----------------------------------------------------------.
|
|
||||||
* |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| Bs |
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* |L2/Tab| Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* |L1/Caps| A| S| D| F| G| H| J| K| L| ;| '|Return |
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* |LShift( | Z| X| C| V| B| N| M| ,| .| /| RShift) |
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* |Ctrl|Gui |Alt | Space |Fn0 |Gui |App|Ctrl|
|
|
||||||
* `-----------------------------------------------------------'
|
|
||||||
*/
|
|
||||||
[0] = LAYOUT_60_ansi(
|
|
||||||
KC_ESC, 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,
|
|
||||||
LT(2, 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,
|
|
||||||
LT(1, 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,
|
|
||||||
SC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SC_RSPC,
|
|
||||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RGUI, KC_APP, KC_RCTL),
|
|
||||||
|
|
||||||
/*
|
|
||||||
Keymap 1: FN Layer
|
|
||||||
AGSW swaps Alt and OS keys for Windows/Mac
|
|
||||||
RGB enabled
|
|
||||||
Backlight keys are swapped as firmware is backwards?
|
|
||||||
* ,-----------------------------------------------------------.
|
|
||||||
* |` | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| Del |
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* | | |Up |RGB|HUI|SAI|VAI| |Prt|Scl|Pau|Up| | Ins |
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* | |Lft|Dwn|Rig|HUD|SAD|VAD| |Hme|PgU|Lef|Rig| |
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* | |BLD|BLT|BLI| |VolD|VolU|Mut|End|PgD|Dwn| QK_BOOT |
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* | | | | | |AGSW| | |
|
|
||||||
* `-----------------------------------------------------------'
|
|
||||||
*/
|
|
||||||
|
|
||||||
[1] = LAYOUT_60_ansi(
|
|
||||||
KC_GRV, 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_DEL,
|
|
||||||
KC_TRNS, KC_TRNS, KC_UP, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, KC_TRNS, KC_PSCR, KC_SCRL, KC_PAUS, KC_UP, KC_TRNS, KC_INS,
|
|
||||||
KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, RGB_HUD, RGB_SAD, RGB_VAD, KC_TRNS, KC_HOME, KC_PGUP, KC_LEFT, KC_RIGHT, KC_TRNS,
|
|
||||||
KC_TRNS, BL_UP, BL_STEP, BL_DOWN, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_END, KC_PGDN, KC_DOWN, QK_BOOT,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, AG_SWAP, KC_TRNS, KC_TRNS),
|
|
||||||
|
|
||||||
/*
|
|
||||||
Mouse Layer
|
|
||||||
M1 = Mouse Button 1
|
|
||||||
M2 = Mouse Button 2
|
|
||||||
WASD are Up Left Right Down respectively
|
|
||||||
* ,-----------------------------------------------------------.
|
|
||||||
* | | | | | | | | | | | | | | |
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* | | M1|MUP|M2 | | | | | | | |MPLY| | |
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* | |ML |MDN|MR | | | | | | |MPRV|MNXT| |
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* | | | | | | | | | | | | |
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* | | | | | | | | |
|
|
||||||
* `-----------------------------------------------------------'
|
|
||||||
*/
|
|
||||||
[2] = LAYOUT_60_ansi(
|
|
||||||
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_BTN1, KC_MS_U, KC_BTN2, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_TRNS, KC_TRNS,
|
|
||||||
KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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),
|
|
||||||
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
bool led_update_user(led_t led_state) {
|
|
||||||
if (led_state.caps_lock) {
|
|
||||||
// output low
|
|
||||||
DDRE |= (1<<PE6);
|
|
||||||
PORTE &= ~(1<<PE6);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// Hi-Z
|
|
||||||
DDRE &= ~(1<<PE6);
|
|
||||||
PORTE &= ~(1<<PE6);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
|
@ -1,61 +0,0 @@
|
||||||
KB Paradise V60 Type R Customised Layout by FollowingGhosts
|
|
||||||
======================
|
|
||||||
|
|
||||||
This is my custom keymap for the Polestar Type R
|
|
||||||
|
|
||||||
## Keymap Notes
|
|
||||||
Supports Underglow lighting with RGB modifier keys and normal backlight
|
|
||||||
Selectable swap between Alt and OS keys which is stored in EEPROM
|
|
||||||
CAPSLOCK acts as FN when held/equivalent to MO1
|
|
||||||
TAB acts as FN2 when held to provide a mouse layer with WASD and Q and E as left and right click respectively
|
|
||||||
LShift and RShift have Space Cadet Shift enabled
|
|
||||||
|
|
||||||
RGB colour setting is set to HSV to bring it in line with (QMK docs)([https://beta.docs.qmk.fm/features/feature_rgblight])
|
|
||||||
R+/R- are hue, G+/G- are saturation and B+/B- are value
|
|
||||||
|
|
||||||
```
|
|
||||||
Keymap 0: Default/Windows Layer (Qwerty)
|
|
||||||
* ,-----------------------------------------------------------.
|
|
||||||
* |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| Bs |
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* |CAP/MO1| A| S| D| F| G| H| J| K| L| ;| '|Return |
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* |LShift | Z| X| C| V| B| N| M| ,| .| /| RShift |
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* |Ctrl|Gui |Alt | Space | MO1|Gui |App|Ctrl|
|
|
||||||
* -----------------------------------------------------------'
|
|
||||||
|
|
||||||
|
|
||||||
Keymap 1: FN Layer
|
|
||||||
* -----------------------------------------------------------.
|
|
||||||
* | | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| Del |
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* | | |Up |RGB|HUI|SAI|VAI| |Prt|Scl|Pau|Up| | Ins |
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* | |Lft|Dwn|Rig|HUD|SAD|VAD| |Hme|PgU|Lef|Rig| |
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* | |BLD|BLT|BLI| |VolD|VolU|Mut|End|PgD|Dwn| |
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* | | | | | |AGSW| | |
|
|
||||||
* '-----------------------------------------------------------'
|
|
||||||
|
|
||||||
Mouse Layer
|
|
||||||
M1 = Mouse Button 1
|
|
||||||
M2 = Mouse Button 2
|
|
||||||
WASD are Up Left Right Down respectively
|
|
||||||
* ,-----------------------------------------------------------.
|
|
||||||
* | | | | | | | | | | | | | | |
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* | | M1|MUP|M2 | | | | | | | |MPLY| | |
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* | |ML |MDN|MR | | | | | | |MNXT|MPRV| |
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* | | | | | | | | | | | | |
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* | | | | | | | | |
|
|
||||||
* -----------------------------------------------------------'
|
|
||||||
```
|
|
||||||
### Build
|
|
||||||
To build this keymap, simply run `make v60_type_r:followingghosts`.
|
|
|
@ -1,4 +0,0 @@
|
||||||
BACKLIGHT_ENABLE = yes
|
|
||||||
RGBLIGHT_ENABLE = yes
|
|
||||||
MOUSEKEY_ENABLE = yes
|
|
||||||
CONSOLE_ENABLE = no
|
|
|
@ -1,26 +0,0 @@
|
||||||
/* Copyright 2017 benlyall, MechMerlin
|
|
||||||
*
|
|
||||||
* 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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#define V60_POLESTAR
|
|
||||||
|
|
||||||
// place overrides here
|
|
||||||
#define MOUSEKEY_INTERVAL 20
|
|
||||||
#define MOUSEKEY_DELAY 0
|
|
||||||
#define MOUSEKEY_TIME_TO_MAX 60
|
|
||||||
#define MOUSEKEY_MAX_SPEED 7
|
|
||||||
#define MOUSEKEY_WHEEL_DELAY 0
|
|
|
@ -1,112 +0,0 @@
|
||||||
/* Copyright 2017 benlyall, MechMerlin
|
|
||||||
*
|
|
||||||
* 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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
#include QMK_KEYBOARD_H
|
|
||||||
|
|
||||||
#define _____ KC_TRNS
|
|
||||||
#define XXXXX KC_NO
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
/* Keymap 0: Default Layer
|
|
||||||
* ,-----------------------------------------------------------.
|
|
||||||
* |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| Bs |
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* |FN0 | A| S| D| F| G| H| J| K| L| ;| '|Return |
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* |LShift | Z| X| C| V| B| N| M| ,| .| /| RShift |
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* |Ctrl|Alt |Gui | Space/L3 |Gui |Alt |Ctrl|Fn1|
|
|
||||||
* `-----------------------------------------------------------'
|
|
||||||
*/
|
|
||||||
[0] = LAYOUT_all(
|
|
||||||
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, XXXXX, 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_BSLS,
|
|
||||||
LT(1, 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_LSFT, XXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, XXXXX,
|
|
||||||
KC_LCTL, KC_LALT, KC_LGUI, LT(2, KC_SPC), KC_RGUI, KC_RALT, KC_RCTL, MO(3)),
|
|
||||||
/* Keymap 1: FN Layer
|
|
||||||
* ,-----------------------------------------------------------.
|
|
||||||
* |` | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| Del |
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* | | | | | | | | | | |PSc|SLk|Pau| Ins |
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* | | | | | | | Lt| Dn| Up| Rt|Hom|PgU| |
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* | | | | | | |Mut|VDn|VUp|End|PgD| |
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* | | | | | | | | |
|
|
||||||
* `-----------------------------------------------------------'
|
|
||||||
*/
|
|
||||||
[1] = LAYOUT_all(
|
|
||||||
KC_GRV, 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_DEL,
|
|
||||||
_____, _____, _____, _____, _____, _____, _____, _____, _____, _____, KC_PSCR, KC_SCRL, KC_PAUS, KC_INS,
|
|
||||||
_____, _____, _____, _____, _____, _____, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_HOME, KC_PGUP, _____,
|
|
||||||
_____, _____, _____, _____, _____, _____, _____, KC_MUTE, KC_VOLD, KC_VOLU, KC_END, KC_PGDN, _____, _____,
|
|
||||||
_____, _____, _____, _____, _____, _____, _____, _____),
|
|
||||||
/* Keymap 2: Mouse Keys Layer
|
|
||||||
* ,-----------------------------------------------------------.
|
|
||||||
* | | | | | | | | | | | | | | |
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* | | | | | | | |MWU|MWD| | | | | |
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* | | | | | | |MLt|MDn|MUp|MRt| | | |
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* | | | | | |SPC|Ms1|Ms2|Ms3| | | |
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* | | | | | | | | |
|
|
||||||
* `-----------------------------------------------------------'
|
|
||||||
*/
|
|
||||||
[2] = LAYOUT_all(
|
|
||||||
_____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____,
|
|
||||||
_____, _____, _____, _____, _____, _____, _____, KC_MS_WH_UP, KC_MS_WH_DOWN, _____, _____, _____, _____, _____,
|
|
||||||
_____, _____, _____, _____, _____, _____, KC_MS_LEFT, KC_MS_DOWN, KC_MS_UP, KC_MS_RIGHT, _____, _____, _____,
|
|
||||||
_____, _____, _____, _____, _____, _____, KC_SPC, KC_MS_BTN1, KC_MS_BTN2, KC_MS_BTN3, _____, _____, _____, _____,
|
|
||||||
_____, _____, _____, _____, _____, _____, _____, _____),
|
|
||||||
/* Keymap 3: LED Modification Layer
|
|
||||||
* ,-----------------------------------------------------------.
|
|
||||||
* | |BLT|BLC|UGT|UGP|UGB|UGR| | | | | | | |
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* | |RD+|GN+|BL+|HU+|SA+|VA+| | | | | | | |
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* | |RD-|GN-|BL-|HU-|SA-|VA-| | | | | | |
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* | | | | | | | | | | | | |
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* | | | | | | | | |
|
|
||||||
* `-----------------------------------------------------------'
|
|
||||||
*/
|
|
||||||
[3] = LAYOUT_all(
|
|
||||||
_____, BL_TOGG, BL_STEP, RGB_TOG, RGB_M_P, RGB_M_B, RGB_M_R, _____, _____, _____, _____, _____, _____, _____, _____,
|
|
||||||
_____, RGB_RI, RGB_GI, RGB_BI, RGB_HUI, RGB_SAI, RGB_VAI, _____, _____, _____, _____, _____, _____, _____,
|
|
||||||
_____, RGB_RD, RGB_GD, RGB_BD, RGB_HUD, RGB_SAD, RGB_VAD, _____, _____, _____, _____, _____, _____,
|
|
||||||
_____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____,
|
|
||||||
_____, _____, _____, _____, _____, _____, _____, _____),
|
|
||||||
};
|
|
||||||
|
|
||||||
bool led_update_user(led_t led_state) {
|
|
||||||
if (led_state.caps_lock) {
|
|
||||||
// output low
|
|
||||||
DDRE |= (1<<PE6);
|
|
||||||
PORTE &= ~(1<<PE6);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// Hi-Z
|
|
||||||
DDRE &= ~(1<<PE6);
|
|
||||||
PORTE &= ~(1<<PE6);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
|
@ -1,2 +0,0 @@
|
||||||
BACKLIGHT_ENABLE = yes
|
|
||||||
RGBLIGHT_ENABLE = yes
|
|
|
@ -1,42 +0,0 @@
|
||||||
/*
|
|
||||||
This is the c configuration file for the keymap
|
|
||||||
|
|
||||||
Copyright 2012 Jun Wako <wakojun@gmail.com>
|
|
||||||
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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
/* Use I2C or Serial. Default is Serial */
|
|
||||||
// #define USE_I2C
|
|
||||||
|
|
||||||
/* Select hand configuration */
|
|
||||||
// Defaults:
|
|
||||||
// Rev1: EE_HANDS
|
|
||||||
// Rev2: SPLIT_HAND_PIN B4
|
|
||||||
|
|
||||||
// You can override the defaults (rev1 doesn't support SPLIT_HAND_PIN)
|
|
||||||
//#define EE_HANDS
|
|
||||||
//#define MASTER_LEFT
|
|
||||||
//#define MASTER_RIGHT
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef AUDIO_ENABLE
|
|
||||||
#define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
|
|
||||||
SONG(DVORAK_SOUND), \
|
|
||||||
SONG(COLEMAK_SOUND) \
|
|
||||||
}
|
|
||||||
#endif
|
|
|
@ -1,106 +0,0 @@
|
||||||
#include QMK_KEYBOARD_H
|
|
||||||
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
|
||||||
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
|
||||||
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
|
||||||
// entirely and just use numbers.
|
|
||||||
enum layers {
|
|
||||||
_ALPHAS,
|
|
||||||
_MODS,
|
|
||||||
_VIM,
|
|
||||||
_NUMPAD,
|
|
||||||
_CODE,
|
|
||||||
};
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
|
|
||||||
/* Alphas
|
|
||||||
* ,--------------------------------------------------------------------------------------------.
|
|
||||||
* | Tab | q | w | e | r | t | y | u | i | o | p | ins |
|
|
||||||
* |--------+------+-----+------+---------+------+------+-------+------+------+--------+--------|
|
|
||||||
* |ctl(esc)| a | s | d | f | g | h | j | k | l |LT(2,;:)|sft(ent)|
|
|
||||||
* |--------+------+-----+------+---------+------|------+-------+------+------+--------+--------|
|
|
||||||
* |LSPO | z | x | c | v | b | n | m | ,< | .> | up | RSPC |
|
|
||||||
* |--------+------+-----+------+---------+------+------+-------+------+------+--------+--------|
|
|
||||||
* | ctl | GUI | alt |MO(1) |lt(3,del)|Space |Space |bckspc |MO(4) | left | down | right |
|
|
||||||
* `--------------------------------------------------------------------------------------------'
|
|
||||||
*/
|
|
||||||
[_ALPHAS] = LAYOUT_ortho_4x12(
|
|
||||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_INS,
|
|
||||||
LCTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(2,KC_SCLN), RSFT_T(KC_ENT),
|
|
||||||
SC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, SC_RSPC,
|
|
||||||
KC_LCTL, KC_LGUI, KC_LALT, MO(1), LT(3,KC_DEL), KC_SPC, KC_SPC, KC_BSPC, MO(4), KC_LEFT, KC_DOWN, KC_RGHT
|
|
||||||
),
|
|
||||||
|
|
||||||
/* MODS
|
|
||||||
* ,-----------------------------------------------------------------------------------.
|
|
||||||
* | `~ | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 |PrtSc |
|
|
||||||
* |-------+------+------+------+------+-------------+------+------+------+------+------|
|
|
||||||
* |Meh(F7)| ! | * | # | $ | % | ^ | & | * | '" | " | \| |
|
|
||||||
* |-------+------+------+------+------+------|------+------+------+------+------+------|
|
|
||||||
* | LS/( | z | x | [{ | ] | b | -_ | =+ | /? | \| | PgUp | RS/) |
|
|
||||||
* |-------+------+------+------+------+------+------+------+------+------+------+------|
|
|
||||||
* | Ctrl | | | | | spc | _ |bckspc| | Home |PgDwn | End |
|
|
||||||
* `------------------------------------------------------------------------------------'
|
|
||||||
*/
|
|
||||||
[_MODS] = LAYOUT_ortho_4x12(
|
|
||||||
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_PSCR,
|
|
||||||
MEH(KC_F7), KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_QUOT, KC_DQUO, KC_BSLS,
|
|
||||||
LSFT_T(KC_LCBR), KC_Z, KC_X, KC_LBRC, KC_RBRC, KC_B, KC_MINS, KC_EQL, KC_SLSH, KC_BSLS, KC_PGUP, RSFT_T(KC_RCBR),
|
|
||||||
KC_LCTL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SPC, KC_UNDS, KC_BSPC, KC_NO, KC_HOME, KC_PGDN, KC_END
|
|
||||||
),
|
|
||||||
|
|
||||||
/* VIM layer that adds vim navigation by holding the ; key. Includes keys like $,^ for end/beg of line and b,w,e,d,y. Also includes
|
|
||||||
* quick keys for excel like alt(=) for sum, ctl(+) & ctl(-) to add/remove columns/rows.
|
|
||||||
* ,--------------------------------------------------------------------------------------.
|
|
||||||
* | Tab | "' | b | w | e | d | y | Vol- | Vol+ | TO(0)| TG(2) |reset |
|
|
||||||
* |--------+------+-----+-----+--------+-----+------+------+------+------+--------+------|
|
|
||||||
* |Ctl(Esc)| Home |Home |Pg Up|Pg Down | End | Left | Down | Up |Right |LT(2,;:)|Enter |
|
|
||||||
* |--------+------+-----+-----+--------+-----|------+------+------+------+--------+------|
|
|
||||||
* | sft | ;: | q | ^ | $ | x |alt(=)|ctl(+)|ctl(-)| | | |
|
|
||||||
* |--------+------+-----+-----+--------+-----+------+------+------+------+--------+------|
|
|
||||||
* | Ctl | GUI | alt | sft |sft(ctl)| spc | del | bspc | | | | |
|
|
||||||
* `--------------------------------------------------------------------------------------'
|
|
||||||
*/
|
|
||||||
[_VIM] = LAYOUT_ortho_4x12(
|
|
||||||
KC_TAB, KC_QUOT, KC_B, KC_W, KC_E, KC_D, KC_Y, KC_VOLD, KC_VOLU, TO(0), TG(2), QK_BOOT,
|
|
||||||
LCTL_T(KC_ESC), KC_HOME, KC_HOME, KC_PGUP, KC_PGDN, KC_END, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, LT(2,KC_SCLN), KC_ENT,
|
|
||||||
KC_LSFT, KC_SCLN, KC_Q, KC_CIRC, KC_DLR, KC_X, RALT(KC_EQL), RCTL(KC_PLUS), RCTL(KC_PMNS), KC_NO, KC_NO, KC_TRNS,
|
|
||||||
KC_LCTL, KC_LGUI, KC_LALT, KC_LSFT, LSFT(KC_LCTL), KC_SPC, KC_DEL, KC_BSPC, KC_NO, KC_NO, KC_NO, KC_TRNS
|
|
||||||
),
|
|
||||||
|
|
||||||
/* NUMPAD: Numpad with operators and other keys
|
|
||||||
* ,-------------------------------------------------------------------------------------.
|
|
||||||
* | [{ | ! | @ | # | $ | % | ( | 7 | 8 | 9 | ) | ]} |
|
|
||||||
* |------+------+------+------+------+-------------+------+------+------+------+--------|
|
|
||||||
* | { | / | * | - | + | | = | 4 | 5 | 6 | ;: | } |
|
|
||||||
* |------+------+------+------+------+------|------+------+------+------+------+--------|
|
|
||||||
* | sft( | | | | | | | 1 | 2 | 3 | |kc_sft()|
|
|
||||||
* |------+------+------+------+------+------+------+------+------+------+------+--------|
|
|
||||||
* | | | | | |Space |Space | 0 | | | | |
|
|
||||||
* `-------------------------------------------------------------------------------------'
|
|
||||||
*/
|
|
||||||
[_NUMPAD] = LAYOUT_ortho_4x12(
|
|
||||||
KC_LBRC, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_LPRN, KC_7, KC_8, KC_9, KC_RPRN, KC_RBRC,
|
|
||||||
KC_LCBR, KC_PSLS, KC_PAST, KC_PMNS, KC_PPLS, KC_NO, KC_EQL, KC_4, KC_5, KC_6, KC_SCLN, KC_RCBR,
|
|
||||||
SC_LSPO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_1, KC_2, KC_3, KC_PEQL, SC_RSPC,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SPC, KC_0, KC_NO, KC_NO, KC_NO, KC_NO
|
|
||||||
),
|
|
||||||
|
|
||||||
/* CODE
|
|
||||||
* ,---------------------------------------------------------------------------.
|
|
||||||
* | ~` | F11 | F12 | 3 | 4 | 5 | 6 | : | - | > | 0 | Del |
|
|
||||||
* |----+-----+-----+----+-----+-------------+------+-----+------+------+------|
|
|
||||||
* | | / | * | { | [{ | ( | ) | ]} | } | '" | ]} | \| |
|
|
||||||
* |----+-----+-----+----+-----+-----|------+------+------+------+------+------|
|
|
||||||
* | | F7 | F8 | F9 | F10 | F11 | ~ | = | \ |RGBTOG|RGBHUI|RGBHUD|
|
|
||||||
* |----+-----+-----+----+-----+-----+------+------+------+------+------+------|
|
|
||||||
* | | | | | | | | | |RGBVAD|RBGVAI|RGBMOD|
|
|
||||||
* `---------------------------------------------------------------------------'
|
|
||||||
*/
|
|
||||||
[_CODE] = LAYOUT_ortho_4x12(
|
|
||||||
KC_GRV, KC_F11, KC_F12, KC_3, KC_4, KC_5, KC_6, KC_COLN, KC_MINS, KC_GT, KC_0, KC_DEL,
|
|
||||||
KC_TRNS, KC_PSLS, KC_PAST, KC_LCBR, KC_LBRC, KC_LPRN, KC_RPRN, KC_RBRC, KC_RCBR, KC_QUOT, KC_RBRC, KC_BSLS,
|
|
||||||
KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_TILD, KC_EQL, KC_NUBS, RGB_TOG, RGB_HUI, RGB_HUD,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_VAD, RGB_VAI, RGB_MOD
|
|
||||||
)
|
|
||||||
|
|
||||||
};
|
|
|
@ -1,640 +0,0 @@
|
||||||
/* Copyright 2021 Yonatan Zunger
|
|
||||||
*
|
|
||||||
* 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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
#include QMK_KEYBOARD_H
|
|
||||||
#include <assert.h>
|
|
||||||
|
|
||||||
// This keymap is designed to make it easy to type in a wide variety of languages, as well as
|
|
||||||
// generate mathematical symbols (à la Space Cadet), without relying on the host OS to do
|
|
||||||
// key mappings or handle accents. Why? Because different OS's do this in radically different
|
|
||||||
// ways, and don't support all of the features one often needs.
|
|
||||||
//
|
|
||||||
// LAYER MAGIC (aka, typing in many alphabets)
|
|
||||||
//
|
|
||||||
// This keyboard has three sets of "polyglot" layers: GREEK, CADET, and YIDDISH. Each of these
|
|
||||||
// is actually a pair of layers, FOO and SHIFTFOO, which are full of Unicode points that let you
|
|
||||||
// type in them. (The Greek and Yiddish keymaps selected here are very canted towards use on a
|
|
||||||
// QWERTY layout, rather than the "standard" layouts often used for those languages in monolingual
|
|
||||||
// environments. This is useful if your keyboard doesn't have legends for all of them, which in
|
|
||||||
// most cases it won't. Of course, you could easily add more.)
|
|
||||||
//
|
|
||||||
// These each have their own layer select key, which can act as a held modifier key (GREEK+s to
|
|
||||||
// produce sigma, etc). There's also a "layer lock" key; layer lock + modifier switches you into
|
|
||||||
// that layer until you hit "layer lock" again to bounce back to QWERTY.
|
|
||||||
//
|
|
||||||
// ACCENT MAGIC
|
|
||||||
//
|
|
||||||
// We want to support easy typing of diacriticals, again without relying on the host OS. (On
|
|
||||||
// MacOS, if you want Unicode to work you have to lose all the normal accent combining keys, and
|
|
||||||
// if you're in a multi-OS world, each OS has a totally different input method)
|
|
||||||
//
|
|
||||||
// The real nuance comes from the three different ways Unicode represents these. Many common
|
|
||||||
// accent + letter combinations like é have their own dedicated code points (the combined
|
|
||||||
// normal form). One can also place a "combining accent mark" after the letter's code point to
|
|
||||||
// form the decomposed normal form (NFKD); this often renders the same as the combined form, but
|
|
||||||
// many less-sophisticated apps won't realize it's the same thing as the combined form (thus messing
|
|
||||||
// up string matching), and if you backspace you need to backspace *twice* to remove the character,
|
|
||||||
// because it's literally two characters. Finally, if you want to render just the accent mark as a
|
|
||||||
// symbol of its own, that's a *third* code point. If you're simply typing, you don't want to think
|
|
||||||
// about any of this!
|
|
||||||
//
|
|
||||||
// We thus have a bunch of special keycodes for "accent requests," which live on the FUNCTION
|
|
||||||
// layer. Accent requests don't do anything immediate, but when the *next* non-modifier key is hit,
|
|
||||||
// we generate a combined code point (if possible), two uncombined points (in cases where combined
|
|
||||||
// points don't exist), or the isolated accent followed by the next character typed (in cases where
|
|
||||||
// what you typed next isn't a letterform at all, e.g. you hit the space bar). You can also hit
|
|
||||||
// shift-<accent request> to just generate the uncombined accent on its own.
|
|
||||||
//
|
|
||||||
// The current accent request codes are modeled on the ones in MacOS.
|
|
||||||
//
|
|
||||||
// fn+` Grave accent (`)
|
|
||||||
// fn+e Acute accent (´)
|
|
||||||
// fn+i Circumflex (^)
|
|
||||||
// fn+u Diaresis / umlaut / trema (¨)
|
|
||||||
// fn+c Cedilla (¸)
|
|
||||||
// fn+n Tilde (˜)
|
|
||||||
//
|
|
||||||
// Together, these functions make for a nice "polyglot" keyboard: one that can easily type in a wide
|
|
||||||
// variety of languages, which is very useful for people who, well, need to type in a bunch of
|
|
||||||
// languages.
|
|
||||||
//
|
|
||||||
// The major TODOs are:
|
|
||||||
// - Add accent support for Hebrew accents.
|
|
||||||
// - Factor the code below so that the data layers are more clearly separated from the code logic,
|
|
||||||
// so that other users of this keymap can easily add whichever alphabets they need without
|
|
||||||
// having to deeply understand the implementation. Probably something similar to
|
|
||||||
// users/drashna/keyrecords/unicode.c, but I want to see if I can do some preprocessor magic
|
|
||||||
// so that we can actually have the rendered *character* sitting in the code instead of just the
|
|
||||||
// hex code point!
|
|
||||||
//
|
|
||||||
// PLATFORM MAGIC (aka, working well on both Mac and Windows)
|
|
||||||
//
|
|
||||||
// Finally, this keyboard can switch between Mac and Windows modes, changing various macro
|
|
||||||
// combinations, the Unicode mode, and the position of the ALT and GUI keys.
|
|
||||||
|
|
||||||
|
|
||||||
enum custom_keycodes {
|
|
||||||
// We provide special layer management keys:
|
|
||||||
// GREEK triggers the Greek (aka "Front") layer, or the SHIFTGREEK layer when shift is held.
|
|
||||||
// (Because we use Unicode, we need to implement shift-handling at the firmware level,
|
|
||||||
// rather than the OS level like we do in the QWERTY layer)
|
|
||||||
// CADET or GREEK+ALT triggers the Cadet (aka "Top") layer, or the SHIFTCADET layer when
|
|
||||||
// shift is held.
|
|
||||||
// YIDDISH triggers a keymap designed for easy Hebrew and Yiddish, based loosely on QWERTY
|
|
||||||
// layouts.
|
|
||||||
// LAYER_LOCK locks the "base" layer (i.e., QWERTY, GREEK, or CADET) to the value which is
|
|
||||||
// pressed at the moment that it is being released. When a layer lock is set, the
|
|
||||||
// analogous layer modifier key is reversed; e.g., if you lock the GREEK layer, then the
|
|
||||||
// GREEK button bounces you back to QWERTY.
|
|
||||||
//
|
|
||||||
// We also parse the shift, alt, and caps lock keys to provide management of those which is
|
|
||||||
// compatible with these various layers.
|
|
||||||
KC_GREEK = SAFE_RANGE,
|
|
||||||
KC_CADET,
|
|
||||||
KC_YIDDISH,
|
|
||||||
KC_LAYER_LOCK,
|
|
||||||
KC_PLATFORM, // Platform select
|
|
||||||
|
|
||||||
// OS-dependent macros
|
|
||||||
KC_VC_MUTE, // Video conference mute
|
|
||||||
KC_VC_HAND, // Video conference hand-raise
|
|
||||||
KC_SCRNSHT, // Screenshot (gui-shift-S on Windows, gui-shift-4 on Mac)
|
|
||||||
|
|
||||||
// These are the keycodes generated by the various "accent request" keystrokes.
|
|
||||||
KC_ACCENT_START,
|
|
||||||
KC_CGRV = KC_ACCENT_START, // Grave accent
|
|
||||||
KC_CAGU, // Acute accent
|
|
||||||
KC_CDIA, // Diaresis / umlaut / trema
|
|
||||||
KC_CCIR, // Circumflex
|
|
||||||
KC_CCED, // Cedilla
|
|
||||||
KC_CTIL, // Tilde
|
|
||||||
KC_ACCENT_END,
|
|
||||||
};
|
|
||||||
|
|
||||||
enum layers_keymap {
|
|
||||||
_QWERTY = 0,
|
|
||||||
|
|
||||||
_FIRST_LANGUAGE_LAYER,
|
|
||||||
_YIDDISH = _FIRST_LANGUAGE_LAYER,
|
|
||||||
_SHIFTYIDDISH,
|
|
||||||
_GREEK,
|
|
||||||
_SHIFTGREEK,
|
|
||||||
_CADET,
|
|
||||||
_SHIFTCADET,
|
|
||||||
_LAST_LANGUAGE_LAYER,
|
|
||||||
|
|
||||||
// Function goes last.
|
|
||||||
_FUNCTION = _LAST_LANGUAGE_LAYER,
|
|
||||||
};
|
|
||||||
|
|
||||||
// We manage our OS mode internally, and store it in a static, rather than EEPROM, bit. That's
|
|
||||||
// because it changes as we flip machines, and there's no good reason to wear out the memory.
|
|
||||||
enum os_modes {
|
|
||||||
_WINDOWS = 0,
|
|
||||||
_MAC = 1,
|
|
||||||
_OS_MODES_MAX = 2,
|
|
||||||
};
|
|
||||||
static uint8_t os_mode = _MAC;
|
|
||||||
|
|
||||||
// Key types matter for accent handling. If there's a pending accent request and another key is
|
|
||||||
// pressed:
|
|
||||||
// - If it's a normal key, we trigger all our magic accent handling.
|
|
||||||
// - If it's a modifier key, we do nothing and let the accent request hold until the next keypress.
|
|
||||||
// - If it's a special key, we drop the accent request but don't handle it.
|
|
||||||
enum key_types {
|
|
||||||
_NORMAL_KEY,
|
|
||||||
_MODIFIER_KEY,
|
|
||||||
_SPECIAL_KEY,
|
|
||||||
};
|
|
||||||
|
|
||||||
// msec to hold the platform key to trigger a switch
|
|
||||||
#define PLATFORM_HOLD_DURATION 750
|
|
||||||
|
|
||||||
// This is so that H(xxxx) has the same width as _______, which makes the grids more legible.
|
|
||||||
#define H(x) UC(0x##x)
|
|
||||||
#define MO_FN MO(_FUNCTION)
|
|
||||||
#define KC_LLCK KC_LAYER_LOCK
|
|
||||||
|
|
||||||
// Values for our OS-dependent keys, as arrays keyed by OS mode. Use Meet shortcuts on Mac, Teams on Windows
|
|
||||||
const char *VC_MUTE_VALUES[_OS_MODES_MAX] = {SS_LCTL(SS_LSFT("m")), SS_LCMD("d")};
|
|
||||||
const char *VC_HAND_VALUES[_OS_MODES_MAX] = {SS_LCTL(SS_LSFT("k")), SS_LCTL(SS_LCMD("h"))};
|
|
||||||
const char *SCRNSHT_VALUES[_OS_MODES_MAX] = {SS_LGUI(SS_LSFT("s")), SS_LCMD(SS_LSFT("4"))};
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
[_QWERTY] = LAYOUT_65_xt_ansi_blocker_tsangan(
|
|
||||||
KC_ESC, KC_LLCK, KC_GRAVE,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_HOME,
|
|
||||||
KC_PLATFORM, KC_MPLY, 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_PGUP,
|
|
||||||
KC_SCRNSHT, KC_YIDDISH, KC_LCTL, 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_PGDN,
|
|
||||||
KC_GREEK, KC_CADET, 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_END,
|
|
||||||
KC_VC_HAND, KC_VC_MUTE, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO_FN, KC_LEFT, KC_DOWN, KC_RGHT),
|
|
||||||
|
|
||||||
/* The Greek and Cadet layers. Tab, backspace, the nav and modifier keys, and the control block
|
|
||||||
* are always transparent.
|
|
||||||
*
|
|
||||||
* QWERTY GREEK SGREEK CADET SCADET YID SYID
|
|
||||||
* ` ׳ 05f3 ״ 05f4
|
|
||||||
* 1 ₁ 2081 ¹ 00b9 ¡ 00a1 ¿ 00bf [transparent]
|
|
||||||
* 2 ₂ 2082 ² 00b2 « 00ab » 00bb [transparent]
|
|
||||||
* 3 ₃ 2083 ³ 00b3 £ 00a3 € 20ac [transparent]
|
|
||||||
* 4 ₄ 2084 ⁴ 2074 [transparent]
|
|
||||||
* 5 ₅ 2085 ⁵ 2075 [transparent]
|
|
||||||
* 6 ₆ 2086 ⁶ 2076 [transparent]
|
|
||||||
* 7 ₇ 2087 ⁷ 2077 [transparent]
|
|
||||||
* 8 ₈ 2088 ⁸ 2078 ° 00b0 ⊗ 2297 [transparent]
|
|
||||||
* 9 ₉ 2089 ⁹ 2079 [transparent]
|
|
||||||
* 0 ₀ 2080 ⁰ 2070 ∅ 2205 [transparent]
|
|
||||||
* - ₋ 208b ⁻ 207b ¬ 00ac ⊖ 2296 [transparent]
|
|
||||||
* = ₊ 208a ₋ 208b ≠ 2260 ⊕ 2295 [transparent]
|
|
||||||
* q θ 03b8 Θ 0398 ℚ 211a ק 05e7
|
|
||||||
* w ω 03c9 Ω 03a9 ש 05e9
|
|
||||||
* e ε 03b5 Ε 0395 ∃ 2203 ∄ 2204 ע 05e2
|
|
||||||
* r ρ 03c1 Ρ 03a1 ℝ 211d ר 05e8
|
|
||||||
* t τ 03c4 Τ 03a4 ט 05d8 תּ fb4a
|
|
||||||
* y ψ 03c8 Ψ 03a8 ∨ 2228 ∧ 2227 ײ 05f2 ײַ fb1f
|
|
||||||
* u υ 03c5 Υ 03a5 ∪ 222a ∩ 2229 ו 05d5 ױ 05f1
|
|
||||||
* i ι 03b9 Ι 0399 ∞ 221e ℵ 2135 י 05d9
|
|
||||||
* o ο 03bf Ο 039f ו 05d5 אָ fb2f
|
|
||||||
* p π 03c0 Π 03a0 ≡ 2261 ≢ 2262 פ 05e4 ף 05e3
|
|
||||||
* [ ± 00b1 ∓ 2213
|
|
||||||
* ] ≈ 2248 ≉ 2249
|
|
||||||
* \ ∼ 223c ≁ 2241
|
|
||||||
* a α 03b1 Α 0391 ∀ 2200 Å 212b א 05d0 אַ fb2e
|
|
||||||
* s σ 03c3 Σ 03a3 ∈ 2208 ∉ 2209 ס 05e1 ת 05ea
|
|
||||||
* d δ 03b4 Δ 0394 ⊂ 2282 ⊄ 2284 ד 05d3
|
|
||||||
* f φ 03c6 Φ 03a6 ⊆ 2286 ⊈ 2288 פֿ fb4e
|
|
||||||
* g γ 03b3 Γ 0393 ⊇ 2287 ⊉ 2289 ג 05d2
|
|
||||||
* h η 03b7 Η 0397 ← 2190 ⇐ 21d0 ה 05d4
|
|
||||||
* j ϑ 03d1 ↓ 2193 ⇓ 21d3 ח 05d7 כֿ fb4d
|
|
||||||
* k κ 03ba Κ 039a ↑ 2191 ⇑ 21d1 כ 05db ך 05da
|
|
||||||
* l λ 03bb Λ 039b → 2192 ⇒ 21d2 ל 05dc
|
|
||||||
* ; … 2026 ⋯ 22ef ↔ 2194 ⇔ 21d4
|
|
||||||
* ' · 00b7 • 2022 ∴ 2234 ⊙ 2299
|
|
||||||
* z ζ 03b6 Ζ 0396 ℤ 2124 ז 05d6
|
|
||||||
* x ξ 03be Ξ 039e ✘ 2718 צ 05e6 ץ 05e5
|
|
||||||
* c χ 03c7 Χ 03a7 ℂ 2102 כ 05db ך 05da
|
|
||||||
* v ς 03c2 ✔ 2714 √ 221a װ 05f0 בֿ fb4c
|
|
||||||
* b β 03b2 Β 0392 ב 05d1
|
|
||||||
* n ν 03bd Ν 039d ℕ 2115 נ 05e0 ן 05df
|
|
||||||
* m μ 03bc Μ 039c מ 05de ם 05dd
|
|
||||||
* , ≪ 226a ≫ 226b ∂ 2202 ∫ 222b
|
|
||||||
* . ≲ 2272 ≳ 2273 ≰ 2270 ≱ 2271
|
|
||||||
* / ⊘ 2298
|
|
||||||
*/
|
|
||||||
[_YIDDISH] = LAYOUT_65_xt_ansi_blocker_tsangan(
|
|
||||||
KC_TRNS, KC_TRNS, H(05f3), 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, H(05e7), H(05e9), H(05e2), H(05e8), H(05d8), H(05f2), H(05d5), H(05d9), H(05d5), H(05e4), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, H(05d0), H(05e1), H(05d3), H(fb4e), H(05d2), H(05d4), H(05d7), H(05db), H(05dc), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, H(05d6), H(05e6), H(05db), H(05f0), H(05d1), H(05e0), H(05de), 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),
|
|
||||||
[_SHIFTYIDDISH] = LAYOUT_65_xt_ansi_blocker_tsangan(
|
|
||||||
KC_TRNS, KC_TRNS, H(05f4), 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, H(fb4a), H(fb1f), H(05f1), KC_TRNS, H(fb2f), H(05e3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, H(fb2e), H(05ea), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, H(fb4d), H(05da), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, H(05e5), H(05da), H(fb4c), KC_TRNS, H(05df), H(05dd), 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),
|
|
||||||
[_GREEK] = LAYOUT_65_xt_ansi_blocker_tsangan(
|
|
||||||
KC_TRNS, KC_TRNS, XXXXXXX, H(2081), H(2082), H(2083), H(2084), H(2085), H(2086), H(2087), H(2088), H(2089), H(2080), H(208b), H(208a), KC_TRNS, KC_TRNS,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, H(03b8), H(03c9), H(03b5), H(03c1), H(03c4), H(03c8), H(03c5), H(03b9), H(03bf), H(03c0), XXXXXXX, XXXXXXX, XXXXXXX, KC_TRNS,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, H(03b1), H(03c3), H(03b4), H(03c6), H(03b3), H(03b7), XXXXXXX, H(03ba), H(03bb), H(2026), H(00b7), KC_TRNS, KC_TRNS,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, H(03b6), H(03be), H(03c7), XXXXXXX, H(03b2), H(03bd), H(03bc), H(226a), H(2272), XXXXXXX, 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),
|
|
||||||
[_SHIFTGREEK] = LAYOUT_65_xt_ansi_blocker_tsangan(
|
|
||||||
KC_TRNS, KC_TRNS, XXXXXXX, H(00b9), H(00b2), H(00b3), H(2074), H(2075), H(2076), H(2077), H(2078), H(2079), H(2070), H(207b), H(208b), KC_TRNS, KC_TRNS,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, H(0398), H(03a9), H(0395), H(03a1), H(03a4), H(03a8), H(03a5), H(0399), H(039f), H(03a0), XXXXXXX, XXXXXXX, XXXXXXX, KC_TRNS,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, H(0391), H(03a3), H(0394), H(03a6), H(0393), H(0397), H(03d1), H(039a), H(039b), H(22ef), H(2022), KC_TRNS, KC_TRNS,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, H(0396), H(039e), H(03a7), H(03c2), H(0392), H(039d), H(039c), H(226b), H(2273), XXXXXXX, 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),
|
|
||||||
[_CADET] = LAYOUT_65_xt_ansi_blocker_tsangan(
|
|
||||||
KC_TRNS, KC_TRNS, XXXXXXX, H(00a1), H(00ab), H(00a3), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, H(00b0), XXXXXXX, H(2205), H(00ac), H(2260), KC_TRNS, KC_TRNS,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, H(211a), XXXXXXX, H(2203), H(211d), XXXXXXX, H(2228), H(222a), H(221e), XXXXXXX, H(2261), H(00b1), H(2248), H(223c), KC_TRNS,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, H(2200), H(2208), H(2282), H(2286), H(2287), H(2190), H(2193), H(2191), H(2192), H(2194), H(2234), KC_TRNS, KC_TRNS,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, H(2124), H(2718), H(2102), H(2714), XXXXXXX, H(2115), XXXXXXX, H(2202), H(2270), XXXXXXX, 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),
|
|
||||||
[_SHIFTCADET] = LAYOUT_65_xt_ansi_blocker_tsangan(
|
|
||||||
KC_TRNS, KC_TRNS, XXXXXXX, H(00bf), H(00bb), H(20ac), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, H(2297), XXXXXXX, XXXXXXX, H(2296), H(2295), KC_TRNS, KC_TRNS,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, XXXXXXX, XXXXXXX, H(2204), XXXXXXX, XXXXXXX, H(2227), H(2229), H(2135), XXXXXXX, H(2262), H(2213), H(2249), H(2241), KC_TRNS,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, H(212b), H(2209), H(2284), H(2288), H(2289), H(21d0), H(21d3), H(21d1), H(21d2), H(21d4), H(2299), KC_TRNS, KC_TRNS,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, XXXXXXX, XXXXXXX, XXXXXXX, H(221a), XXXXXXX, XXXXXXX, XXXXXXX, H(222b), H(2271), H(2298), 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),
|
|
||||||
// The function layer mostly contains the accent marks, but also has a few meta-control
|
|
||||||
// operations. The accent marks are placed by analogy with Mac OS.
|
|
||||||
[_FUNCTION] = LAYOUT_65_xt_ansi_blocker_tsangan(
|
|
||||||
QK_BOOT, KC_TRNS, KC_CGRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, XXXXXXX, XXXXXXX, KC_CAGU, XXXXXXX, XXXXXXX, XXXXXXX, KC_CDIA, KC_CCIR, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, XXXXXXX, XXXXXXX, KC_CCED, XXXXXXX, XXXXXXX, KC_CTIL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_TRNS, XXXXXXX, XXXXXXX,
|
|
||||||
KC_TRNS, KC_TRNS, KC_RCTL, KC_RGUI, KC_RALT, KC_TRNS, KC_TRNS, XXXXXXX, XXXXXXX, XXXXXXX),
|
|
||||||
};
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
// Accent implementation
|
|
||||||
//
|
|
||||||
// In the body of process_record_user, we store an "accent_request", which is the accent keycode if
|
|
||||||
// one was just selected, or zero otherwise. When the *next* key is hit, we look up whether the
|
|
||||||
// accent request plus that next keycode (plus the state of the shift key) together amount to an
|
|
||||||
// interesting combined (NFKC) character, and if so, emit it; otherwise, we emit the accent as a
|
|
||||||
// separate character and then process the next key normally. The resulting UI behavior is similar
|
|
||||||
// to that of the combining accent keys in MacOS.
|
|
||||||
//
|
|
||||||
// We store two arrays, depending on whether shift is or isn't held. Each is two-dimensional, with
|
|
||||||
// its outer key by the next keycode struck, and the inner key by the accent requested. The outer
|
|
||||||
// array has KC_Z + 1 as its upper bound, so that we can save memory by only coding alphabetic keys.
|
|
||||||
// The contents are either Unicode code points, or zero to indicate that we don't have a point for
|
|
||||||
// this combination.
|
|
||||||
|
|
||||||
#define KC_NUM_ACCENTS (KC_ACCENT_END - KC_ACCENT_START)
|
|
||||||
#define KC_NUM_SLOTS (KC_Z + 1)
|
|
||||||
|
|
||||||
const uint16_t PROGMEM unshifted_accents[KC_NUM_SLOTS][KC_NUM_ACCENTS] = {
|
|
||||||
// KC_CGRV, KC_CAGU, KC_CDIA, KC_CCIR, KC_CCED, KC_CTIL
|
|
||||||
[KC_A] = { 0x00e0, 0x00e1, 0x00e4, 0x00e2, 0, 0x00e3 },
|
|
||||||
[KC_E] = { 0x00e8, 0x00e9, 0x00eb, 0x00ea, 0, 0 },
|
|
||||||
[KC_I] = { 0x00ec, 0x00ed, 0x00ef, 0x00ee, 0, 0 },
|
|
||||||
[KC_O] = { 0x00f2, 0x00f3, 0x00f6, 0x00f4, 0, 0x00f5 },
|
|
||||||
[KC_U] = { 0x00f9, 0x00fa, 0x00fc, 0x00fb, 0, 0 },
|
|
||||||
[KC_Y] = { 0, 0, 0x00ff, 0, 0, 0 },
|
|
||||||
[KC_N] = { 0, 0, 0, 0, 0, 0x00f1 },
|
|
||||||
[KC_C] = { 0, 0, 0, 0, 0x00e7, 0 },
|
|
||||||
};
|
|
||||||
|
|
||||||
const uint16_t PROGMEM shifted_accents[KC_NUM_SLOTS][KC_NUM_ACCENTS] = {
|
|
||||||
// KC_CGRV, KC_CAGU, KC_CDIA, KC_CCIR, KC_CCED, KC_CTIL
|
|
||||||
[KC_A] = { 0x00c0, 0x00c1, 0x00c4, 0x00c2, 0, 0x00c3 },
|
|
||||||
[KC_E] = { 0x00c8, 0x00c9, 0x00cb, 0x00ca, 0, 0 },
|
|
||||||
[KC_I] = { 0x00cc, 0x00cd, 0x00cf, 0x00ce, 0, 0 },
|
|
||||||
[KC_O] = { 0x00d2, 0x00d3, 0x00d6, 0x00d4, 0, 0x00d5 },
|
|
||||||
[KC_U] = { 0x00d9, 0x00da, 0x00dc, 0x00db, 0, 0 },
|
|
||||||
[KC_Y] = { 0, 0, 0x00df, 0, 0, 0 },
|
|
||||||
[KC_N] = { 0, 0, 0, 0, 0, 0x00d1 },
|
|
||||||
[KC_C] = { 0, 0, 0, 0, 0x00c7, 0 },
|
|
||||||
};
|
|
||||||
|
|
||||||
// The uncombined and combined forms of the accents, for when we want to emit them as single
|
|
||||||
// characters.
|
|
||||||
const uint16_t PROGMEM uncombined_accents[KC_NUM_ACCENTS] = {
|
|
||||||
[KC_CGRV - KC_ACCENT_START] = 0x0060,
|
|
||||||
[KC_CAGU - KC_ACCENT_START] = 0x00b4,
|
|
||||||
[KC_CDIA - KC_ACCENT_START] = 0x00a8,
|
|
||||||
[KC_CCIR - KC_ACCENT_START] = 0x005e,
|
|
||||||
[KC_CCED - KC_ACCENT_START] = 0x00b8,
|
|
||||||
[KC_CTIL - KC_ACCENT_START] = 0x02dc,
|
|
||||||
};
|
|
||||||
|
|
||||||
const uint16_t PROGMEM combined_accents[KC_NUM_ACCENTS] = {
|
|
||||||
[KC_CGRV - KC_ACCENT_START] = 0x0300,
|
|
||||||
[KC_CAGU - KC_ACCENT_START] = 0x0301,
|
|
||||||
[KC_CDIA - KC_ACCENT_START] = 0x0308,
|
|
||||||
[KC_CCIR - KC_ACCENT_START] = 0x0302,
|
|
||||||
[KC_CCED - KC_ACCENT_START] = 0x0327,
|
|
||||||
[KC_CTIL - KC_ACCENT_START] = 0x0303,
|
|
||||||
};
|
|
||||||
|
|
||||||
// This function manages keypresses that happen after an accent has been selected by an earlier
|
|
||||||
// keypress.
|
|
||||||
// Args:
|
|
||||||
// accent_key: The accent key which was earlier selected. This must be in the range
|
|
||||||
// [KC_ACCENT_START, KC_ACCENT_END).
|
|
||||||
// keycode: The keycode which was just pressed.
|
|
||||||
// is_shifted: The current shift state (as set by a combination of shift and caps lock)
|
|
||||||
//
|
|
||||||
// Returns true if the keycode has been completely handled by this function (and so should not be
|
|
||||||
// processed further by process_record_user) or false otherwise.
|
|
||||||
bool process_key_after_accent(
|
|
||||||
uint16_t accent_key,
|
|
||||||
uint16_t keycode,
|
|
||||||
bool is_shifted
|
|
||||||
) {
|
|
||||||
assert(accent_key >= KC_ACCENT_START);
|
|
||||||
assert(accent_key < KC_ACCENT_END);
|
|
||||||
const int accent_index = accent_key - KC_ACCENT_START;
|
|
||||||
|
|
||||||
// If the keycode is outside A..Z, we know we shouldn't even bother with a table lookup.
|
|
||||||
if (keycode <= KC_Z) {
|
|
||||||
// Pick the correct array. Because this is progmem, we're going to need to do the
|
|
||||||
// two-dimensional array indexing by hand, and so we just cast it to a single-dimensional array.
|
|
||||||
const uint16_t *points = (const uint16_t*)(is_shifted ? shifted_accents : unshifted_accents);
|
|
||||||
const uint16_t code_point = pgm_read_word(points + KC_NUM_ACCENTS * keycode + accent_index);
|
|
||||||
if (code_point) {
|
|
||||||
register_unicode(code_point);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// If we get here, there was no accent match. Emit the accent as its own character (i.e. a
|
|
||||||
// Unicode combining accent mark) and return false so that process_record_user also registers
|
|
||||||
// whatever is appropriate for the keycode after that. The host can figure out what to do with
|
|
||||||
// combining Unicode.
|
|
||||||
register_unicode(pgm_read_word(uncombined_accents + accent_index));
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// This is a bitmask which selects the activation bits for layers *other* than our language
|
|
||||||
// selectors.
|
|
||||||
#define NON_LANGUAGE_LAYERS ~(((1UL << _LAST_LANGUAGE_LAYER) - 1) - ((1UL << _FIRST_LANGUAGE_LAYER) - 1))
|
|
||||||
|
|
||||||
// Update the current layer state and return the layer we're in.
|
|
||||||
uint8_t update_layer(
|
|
||||||
uint8_t layer_lock,
|
|
||||||
uint8_t layer_select_held,
|
|
||||||
bool shifted
|
|
||||||
) {
|
|
||||||
uint8_t current_layer = layer_lock;
|
|
||||||
layer_state_t language_layers = 0;
|
|
||||||
|
|
||||||
// If there's a layer select being held right now, then it updates the current layer.
|
|
||||||
// (If it's the layer select for the currently locked layer, then instead it's a toggle
|
|
||||||
// back to _QWERTY!)
|
|
||||||
if (layer_select_held != _QWERTY) {
|
|
||||||
current_layer = (layer_lock == layer_select_held ? _QWERTY : layer_select_held);
|
|
||||||
}
|
|
||||||
|
|
||||||
language_layers |= (1UL << current_layer);
|
|
||||||
|
|
||||||
// If we're shifted (with either shift or caps lock), and we're in one of our special
|
|
||||||
// layers, bump up to the SHIFTED version of that layer. We don't do this for QWERTY;
|
|
||||||
// there we just emit USB HID codes and let the host deal with shift.
|
|
||||||
if (shifted && current_layer != _QWERTY) {
|
|
||||||
++current_layer;
|
|
||||||
language_layers |= (1UL << current_layer);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update the QMK layer state by stomping just the language layer bits.
|
|
||||||
const layer_state_t new_layer_state = (layer_state & NON_LANGUAGE_LAYERS) | language_layers;
|
|
||||||
if (new_layer_state != layer_state) {
|
|
||||||
layer_state_set(new_layer_state);
|
|
||||||
}
|
|
||||||
|
|
||||||
return current_layer;
|
|
||||||
}
|
|
||||||
|
|
||||||
void set_os_mode(uint8_t new_mode) {
|
|
||||||
os_mode = new_mode;
|
|
||||||
// NB: We set unicode_config.input_mode directly, rather than calling
|
|
||||||
// set_unicode_input_mode, because we don't want to persist this and so we shouldn't put
|
|
||||||
// extra load on the EEPROMs.
|
|
||||||
unicode_config.input_mode = (os_mode == _MAC ? UNICODE_MODE_MACOS : UNICODE_MODE_WINCOMPOSE);
|
|
||||||
// Swap LALT and LGUI depending on Mac/Windows.
|
|
||||||
keymap_config.swap_lalt_lgui = (os_mode == _MAC);
|
|
||||||
// This would be a great moment for some auditory or visual feedback, but this keyboard
|
|
||||||
// doesn't support it. :(
|
|
||||||
}
|
|
||||||
|
|
||||||
void toggle_os_mode(void) {
|
|
||||||
set_os_mode((os_mode + 1) % _OS_MODES_MAX);
|
|
||||||
}
|
|
||||||
|
|
||||||
void keyboard_post_init_user(void) {
|
|
||||||
set_os_mode(_WINDOWS);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
|
||||||
// We track these persistent globals and manage them on our own, rather than trying to rely on
|
|
||||||
// get_mods or the like, because this function is called *before* that's updated!
|
|
||||||
static bool shift_held = false;
|
|
||||||
static bool alt_held = false;
|
|
||||||
static bool ctrl_held = false;
|
|
||||||
static bool super_held = false;
|
|
||||||
|
|
||||||
// These are where we remember the values of lock states.
|
|
||||||
static bool shift_lock = false;
|
|
||||||
static uint8_t layer_lock = _QWERTY; // The currently locked layer
|
|
||||||
static uint8_t next_layer_lock = _QWERTY; // Used when layer_lock is held
|
|
||||||
// Which layer select key is currently being held down. _QWERTY is equivalent to "none."
|
|
||||||
static uint8_t layer_select_held = _QWERTY;
|
|
||||||
|
|
||||||
// When the hold on the platform key started
|
|
||||||
static uint16_t platform_hold_start = 0;
|
|
||||||
|
|
||||||
// The accent request, or zero if there isn't one.
|
|
||||||
static uint16_t accent_request = 0;
|
|
||||||
|
|
||||||
// What kind of key we're striking right now, so that we know what to do if any accent requests
|
|
||||||
// are hanging around.
|
|
||||||
uint8_t key_type = _NORMAL_KEY;
|
|
||||||
|
|
||||||
// The layer selection and locking logic is:
|
|
||||||
// * By default, the current layer is given by saved value layer_lock.
|
|
||||||
// * If a layer select key is held down, we update the current layer to that value.
|
|
||||||
// (But special thing: If the current layer lock is <layer> and you hit the select key
|
|
||||||
// for <layer>, it instead toggles the current layer back to _QWERTY! That way you can
|
|
||||||
// insert some QWERTY keys in the midst of other-layer text.)
|
|
||||||
// * If the KC_LAYER_LOCK key is held down and a layer select key gets pressed, we update
|
|
||||||
// next_layer_lock to that selected layer. When KC_LAYER_LOCK is released, we update
|
|
||||||
// layer_lock to next_layer_lock. Note that that simply tapping KC_LAYER_LOCK resets
|
|
||||||
// layer_lock to _QWERTY.
|
|
||||||
// * After all of this is done, we check if shift is held (via either shift or caps lock);
|
|
||||||
// if it is, and our current layer isn't _QWERTY, then we bump the current layer ID by 1
|
|
||||||
// to get the shifted layer.
|
|
||||||
|
|
||||||
// Step 1: Process various interesting keycodes, especially ones that update our running
|
|
||||||
// state variables.
|
|
||||||
switch (keycode) {
|
|
||||||
// Monitoring the modifier keys, because we'll need them for our logic!
|
|
||||||
case KC_LSFT:
|
|
||||||
case KC_RSFT:
|
|
||||||
shift_held = record->event.pressed;
|
|
||||||
key_type = _MODIFIER_KEY;
|
|
||||||
break;
|
|
||||||
case KC_CAPS:
|
|
||||||
// If we're in QWERTY mode, caps lock is already going to be managed by the host OS, but by
|
|
||||||
// tracking it ourselves we can also usefully apply it to the GREEK and CADET layers.
|
|
||||||
shift_lock = !shift_lock;
|
|
||||||
key_type = _MODIFIER_KEY;
|
|
||||||
break;
|
|
||||||
case KC_LALT:
|
|
||||||
case KC_RALT:
|
|
||||||
alt_held = record->event.pressed;
|
|
||||||
key_type = _MODIFIER_KEY;
|
|
||||||
break;
|
|
||||||
case KC_LCTL:
|
|
||||||
case KC_RCTL:
|
|
||||||
ctrl_held = record->event.pressed;
|
|
||||||
key_type = _MODIFIER_KEY;
|
|
||||||
break;
|
|
||||||
case KC_LGUI:
|
|
||||||
case KC_RGUI:
|
|
||||||
super_held = record->event.pressed;
|
|
||||||
key_type = _MODIFIER_KEY;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case KC_LAYER_LOCK:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
// On press, get ready for a layer selection.
|
|
||||||
next_layer_lock = _QWERTY;
|
|
||||||
} else {
|
|
||||||
// On release, propagate next_layer_lock to layer_lock.
|
|
||||||
layer_lock = next_layer_lock;
|
|
||||||
}
|
|
||||||
key_type = _MODIFIER_KEY;
|
|
||||||
break;
|
|
||||||
|
|
||||||
// Layer selectors
|
|
||||||
case KC_GREEK:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
layer_select_held = _GREEK;
|
|
||||||
next_layer_lock = _GREEK;
|
|
||||||
} else {
|
|
||||||
layer_select_held = _QWERTY;
|
|
||||||
}
|
|
||||||
key_type = _MODIFIER_KEY;
|
|
||||||
break;
|
|
||||||
case KC_CADET:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
layer_select_held = _CADET;
|
|
||||||
next_layer_lock = _CADET;
|
|
||||||
} else {
|
|
||||||
layer_select_held = _QWERTY;
|
|
||||||
}
|
|
||||||
key_type = _MODIFIER_KEY;
|
|
||||||
break;
|
|
||||||
case KC_YIDDISH:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
layer_select_held = _YIDDISH;
|
|
||||||
next_layer_lock = _YIDDISH;
|
|
||||||
} else {
|
|
||||||
layer_select_held = _QWERTY;
|
|
||||||
}
|
|
||||||
key_type = _MODIFIER_KEY;
|
|
||||||
break;
|
|
||||||
|
|
||||||
// Accent selectors
|
|
||||||
case KC_CGRV:
|
|
||||||
case KC_CAGU:
|
|
||||||
case KC_CDIA:
|
|
||||||
case KC_CCIR:
|
|
||||||
case KC_CCED:
|
|
||||||
case KC_CTIL:
|
|
||||||
// The accent request keys normally update accent_request (whose effect will trigger the next
|
|
||||||
// time we see a "normal" key pressed). However, shift+accent request will instead immediately
|
|
||||||
// generate the Unicode combining accent symbol instead.
|
|
||||||
if (shift_held) {
|
|
||||||
register_unicode(pgm_read_word(combined_accents + keycode - KC_ACCENT_START));
|
|
||||||
return false;
|
|
||||||
} else {
|
|
||||||
accent_request = keycode;
|
|
||||||
}
|
|
||||||
key_type = _MODIFIER_KEY;
|
|
||||||
break;
|
|
||||||
|
|
||||||
// Our special keycodes
|
|
||||||
case KC_PLATFORM:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
platform_hold_start = record->event.time;
|
|
||||||
} else if (platform_hold_start != 0 && record->event.time - platform_hold_start > PLATFORM_HOLD_DURATION) {
|
|
||||||
toggle_os_mode();
|
|
||||||
}
|
|
||||||
key_type = _SPECIAL_KEY;
|
|
||||||
return true;
|
|
||||||
|
|
||||||
case KC_VC_MUTE:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
send_string(VC_MUTE_VALUES[os_mode]);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
key_type = _SPECIAL_KEY;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case KC_VC_HAND:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
send_string(VC_HAND_VALUES[os_mode]);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
key_type = _SPECIAL_KEY;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case KC_SCRNSHT:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
send_string(SCRNSHT_VALUES[os_mode]);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
key_type = _SPECIAL_KEY;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case QK_BOOT:
|
|
||||||
key_type = _SPECIAL_KEY;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Step 2: Finalize current_layer and update the QMK layer state.
|
|
||||||
const bool shifted = (shift_held != shift_lock);
|
|
||||||
const uint8_t current_layer = update_layer(layer_lock, layer_select_held, shifted);
|
|
||||||
|
|
||||||
// Step 3: Handle accents.
|
|
||||||
bool handled = false;
|
|
||||||
if (accent_request && record->event.pressed) {
|
|
||||||
// If we're in any layer other than _QWERTY, or a modifier key is being held down,
|
|
||||||
// then we're actually generating a special key, not a normal one.
|
|
||||||
if (key_type == _NORMAL_KEY &&
|
|
||||||
(current_layer != _QWERTY || ctrl_held || super_held || alt_held)) {
|
|
||||||
key_type = _SPECIAL_KEY;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (key_type) {
|
|
||||||
case _NORMAL_KEY:
|
|
||||||
handled = process_key_after_accent(accent_request, keycode, shifted);
|
|
||||||
accent_request = 0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case _SPECIAL_KEY:
|
|
||||||
accent_request = 0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case _MODIFIER_KEY:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return !handled;
|
|
||||||
}
|
|
|
@ -1,9 +0,0 @@
|
||||||
* A polyglot keymap for the RamaWorks Zenith
|
|
||||||
* Author: Yonatan Zunger (zunger@gmail.com)
|
|
||||||
|
|
||||||
This keyboard is designed to make it easy to type a wide range of symbols and a wide range of
|
|
||||||
alphabets, without relying on the host OS, because... host OS's aren't fantastic at a lot of
|
|
||||||
things.
|
|
||||||
|
|
||||||
See the keymap file for most of the documentation, in the form of comments; this is still in
|
|
||||||
development!
|
|
|
@ -1,2 +0,0 @@
|
||||||
# You need Unicode for this map.
|
|
||||||
UNICODE_ENABLE = yes # Unicode
|
|
|
@ -1,59 +0,0 @@
|
||||||
#include QMK_KEYBOARD_H
|
|
||||||
|
|
||||||
#define _BASE 0 // Base layer
|
|
||||||
#define _SYSTEM 1 // System actions
|
|
||||||
#define _VOLUME 2 // Volume actions
|
|
||||||
|
|
||||||
#define SUPER_ALT_F4_TIMER 300 // Timeout on the super alt-f4 key
|
|
||||||
|
|
||||||
/*
|
|
||||||
The idea of this is pretty simple: base layer has four action, two of which (the outermost)
|
|
||||||
are regular keystrokes on tap, and a momentary layer switch on hold, sending you to layers 1 and 2.
|
|
||||||
|
|
||||||
The other bit of customization here is the 'Super Alt F4' which does Alt-F4, and then Enter if tapped
|
|
||||||
again SUPER_ALT_F4_TIMER miliseconds after. This lets you Alt-F4 applications, and finally quickly
|
|
||||||
double-tap it to Alt-F4+Enter to shut down the PC.
|
|
||||||
*/
|
|
||||||
|
|
||||||
bool is_alt_f4_active = false;
|
|
||||||
uint16_t alt_f4_timer = 0;
|
|
||||||
|
|
||||||
enum custom_keycodes { // Make sure have the awesome keycode ready
|
|
||||||
SUPER_ALT_F4 = SAFE_RANGE,
|
|
||||||
};
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
|
|
||||||
// 0: Base Layer
|
|
||||||
[_BASE] = LAYOUT_ortho_1x4(LT(_SYSTEM, KC_F5), C(G(KC_LEFT)), C(G(KC_RIGHT)), LT(_VOLUME, KC_F7)),
|
|
||||||
|
|
||||||
// 1: System actions
|
|
||||||
[_SYSTEM] = LAYOUT_ortho_1x4(_______, SUPER_ALT_F4, G(KC_D), G(KC_L)),
|
|
||||||
|
|
||||||
// 2: Volume actions
|
|
||||||
[_VOLUME] = LAYOUT_ortho_1x4(KC_MEDIA_NEXT_TRACK, KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP, _______),
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
|
||||||
switch (keycode) { // This will do most of the grunt work with the keycodes.
|
|
||||||
case SUPER_ALT_F4:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
if (!is_alt_f4_active) {
|
|
||||||
is_alt_f4_active = true;
|
|
||||||
tap_code16(LALT(KC_F4)); // Alt-F4
|
|
||||||
} else {
|
|
||||||
tap_code(KC_ENTER); // Tap enter
|
|
||||||
}
|
|
||||||
}
|
|
||||||
alt_f4_timer = timer_read();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void matrix_scan_user(void) {
|
|
||||||
if (is_alt_f4_active && timer_elapsed(alt_f4_timer) > SUPER_ALT_F4_TIMER) {
|
|
||||||
is_alt_f4_active = false;
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,9 +0,0 @@
|
||||||
# Slightly more advanced keymap for XD004 PCB
|
|
||||||
|
|
||||||
A somehow more useful keymap, allowing one to move across virtual desktops on Windows, etc.
|
|
||||||
|
|
||||||
It also has a 'Super Alt-F4' key for Windows that, when tapped does Alt-F4, unless two consecutive taps are less than 300ms apart, in which case the second tap becomes Enter. This allows you to close all apps doing taps, and then when the System shutdown window arrives you do a second quick tap and it will type enter, thus shutting down the computer.
|
|
||||||
|
|
||||||
## Build
|
|
||||||
|
|
||||||
To build the keymap, simply run `make xiudi/xd004:system_and_media`.
|
|
|
@ -1,22 +0,0 @@
|
||||||
# Jos's Layout
|
|
||||||
|
|
||||||
Custom layout with various options. Designed to be used with the Canadian Multilingual software layout.
|
|
||||||
|
|
||||||
## Layout
|
|
||||||
This is the physical layout of my xd60, for reference. See the keymap file for actual software layout.
|
|
||||||
![Keyboard Layout (Physical appearence)](https://i.imgur.com/qzOmqyq.png "Physical Layout")
|
|
||||||
|
|
||||||
## Features
|
|
||||||
**Caps Lock** is **Escape** and the **Window key** is a **Function** key that still acts like the **Window** key in conjuction with `w`, `s`, `d`, `l`, `t`, `e`, `h`, and `SPACE`.
|
|
||||||
|
|
||||||
There are a few `#define` lines at the beginning of the keymap file that enable the following options if not commented:
|
|
||||||
- `ISOLIKE_ALT_ENTER`: `RALT` + `ENT` is the same as `RALT`+`BSLS`. For logical placement of `{` and `}` (the former being `RALT`+`BSLS`) with ANSI enter on a ISO-based layout.
|
|
||||||
- `TWO_SFT_CAPS`: Both shifts together → Caps Lock.
|
|
||||||
- `APP_IS_RALT_RCTRL`: Menu would be between `RCTRL` and `RALT`, so now `RALT` + `RCTRL` → `APP`.
|
|
||||||
- `HELD_ESC_IS_SHIFT`: Holding `ESC` → `SHIFT`. It always register shift when pressing `ESC`. Useful for VIM.
|
|
||||||
- `BSPC_BLOCKS_DEL`: If `BSPC` is held, we disable `DEL`. To avoid acidental presses of `DEL` with split backspace key.
|
|
||||||
- `ALT_MINSEQL_IS_ALT_78`: Pressing `ALT+MINS/EQL` will act like `ALT+7/8`. Will yield `{}` instead of `½¬` in Canadian Multilingual Layout. Diminished finger stretching.
|
|
||||||
|
|
||||||
|
|
||||||
# Build
|
|
||||||
To build, simply run `make xiudi/xd60:Jos`
|
|
|
@ -1,2 +0,0 @@
|
||||||
/* Delay for tap/hold for tap dance commands */
|
|
||||||
#define TAPPING_TERM 150
|
|
|
@ -1,202 +0,0 @@
|
||||||
#include QMK_KEYBOARD_H
|
|
||||||
#include "action_layer.h"
|
|
||||||
|
|
||||||
// TODO: THOSE ARE IDEAS:
|
|
||||||
// TODO:
|
|
||||||
// TODO: - Proper support for "GUI+TAB" application switching, with the GUI holding and shift, etc.
|
|
||||||
// TODO: - Maybe implement a process_record instead of a tap-dance, or complex tap dance?
|
|
||||||
// TODO: - Media keys on Fn1 layer, *hjklm,.* or arrow cluster?
|
|
||||||
// TODO: - What more than NumPad + RGB on the Fn3 toggled layer?
|
|
||||||
// TODO: - Add an in-keymap way to toggle LGUI/F(0) key, HELD_ESC_IS_SHIFT and BSPC_BLOCKS_DEL.
|
|
||||||
// TODO:
|
|
||||||
// TODO: THOSE ARE BUGS TO FIX:
|
|
||||||
// TODO: - None (found so far)
|
|
||||||
|
|
||||||
// Adjusting process_record_user functionnalities, comment to disable.
|
|
||||||
#define ISOLIKE_ALT_ENTER
|
|
||||||
#define TWO_SFT_CAPS
|
|
||||||
#define APP_IS_RALT_RCTRL
|
|
||||||
#define HELD_ESC_IS_SHIFT
|
|
||||||
#define BSPC_BLOCKS_DEL
|
|
||||||
#define ALT_MINSEQL_IS_ALT_78
|
|
||||||
|
|
||||||
// Cases where the GUI key will actually do what the GUI key normally does.
|
|
||||||
#define AC_G_W LGUI(KC_W) // Ubuntu: Shows windows on current desktop
|
|
||||||
#define AC_G_S LGUI(KC_S) // Ubuntu: Overview of all desktops
|
|
||||||
#define AC_G_D LGUI(KC_D) // Windows: Show/Toggle desktop
|
|
||||||
#define AC_G_L LGUI(KC_L) // Ubuntu/Windows: Lock session
|
|
||||||
#define AC_G_T LGUI(KC_T) // Ubuntu: Shows Trash // elementary: Opens terminal
|
|
||||||
#define AC_G_E LGUI(KC_E) // Windows: Opens file explorer
|
|
||||||
#define AC_G_H LGUI(KC_H) // Windows: Show/Hide hidden files
|
|
||||||
#define AC_G_SPC LGUI(KC_SPC) // elementary: Shows application launcher
|
|
||||||
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
|
|
||||||
// 0: Base Layer
|
|
||||||
LAYOUT_all(
|
|
||||||
KC_GRAVE, 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_DEL,
|
|
||||||
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_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT,
|
|
||||||
KC_LSFT, KC_LGUI, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, MO(1),
|
|
||||||
KC_LCTL, TD(0), KC_LALT, KC_SPC , KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
|
|
||||||
|
|
||||||
// 1: Function 1 Layers
|
|
||||||
LAYOUT_all(
|
|
||||||
QK_BOOT, 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_PAUS, KC_PSCR,
|
|
||||||
KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
|
||||||
KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_MPRV, KC_MNXT, KC_MSTP, KC_TRNS, KC_NO, KC_TRNS,
|
|
||||||
KC_TRNS, TG(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, KC_PGUP, KC_TRNS,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END),
|
|
||||||
|
|
||||||
// 2: GUI/Function 2 Layer
|
|
||||||
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_PAUS, KC_PSCR,
|
|
||||||
KC_TRNS, KC_TRNS, AC_G_W, AC_G_E, KC_TRNS, AC_G_T, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
|
||||||
KC_TRNS, KC_TRNS, AC_G_S, AC_G_D, KC_TRNS, KC_TRNS, AC_G_H, KC_TRNS, KC_TRNS, AC_G_L, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_TRNS,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, AC_G_SPC, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END),
|
|
||||||
|
|
||||||
// 3: NumPad/Function 3 Toggle Layer
|
|
||||||
LAYOUT_all(
|
|
||||||
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_7, KC_8, KC_9, KC_PSLS, KC_PMNS, KC_PPLS, KC_TRNS, KC_TRNS,
|
|
||||||
KC_TRNS, KC_NO, KC_NO, RGB_HUI, RGB_SAI, RGB_VAI, KC_NO, KC_4, KC_5, KC_6, KC_PAST, KC_NO, KC_NO, KC_NO,
|
|
||||||
KC_TRNS, KC_NO, KC_NO, RGB_HUD, RGB_SAD, RGB_VAD, KC_NO, KC_1, KC_2, KC_3, KC_PMNS, KC_PENT, KC_NO, KC_TRNS,
|
|
||||||
KC_NO, KC_TRNS, KC_NO, KC_NO, RGB_TOG, RGB_MOD, KC_NO, KC_NO, KC_0, KC_COMM, KC_DOT, KC_PPLS, KC_NO, KC_TRNS, KC_TRNS,
|
|
||||||
KC_NO, KC_TRNS, KC_NO, KC_TRNS, KC_PENT, KC_PENT, KC_TRNS, KC_TRNS, KC_TRNS) ,
|
|
||||||
|
|
||||||
// TRaNSparent layer for reference
|
|
||||||
/* 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_NO, 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), */
|
|
||||||
};
|
|
||||||
|
|
||||||
// LGUI acts as F(1) if held or as a tapped LGUI if tapped. Adapted from https://goo.gl/WnqGNS
|
|
||||||
// Commented lines are for the "sticky" layer on two presses. Left it here for reference.
|
|
||||||
static const int GUILAY = 2; // GUI Layer is layer #2
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
bool layer_toggle;
|
|
||||||
bool sticky;
|
|
||||||
} td_ta_state_t;
|
|
||||||
|
|
||||||
static void ang_tap_dance_ta_finished (tap_dance_state_t *state, void *user_data) {
|
|
||||||
td_ta_state_t *td_ta = (td_ta_state_t *) user_data;
|
|
||||||
|
|
||||||
// if (td_ta->sticky) {
|
|
||||||
// td_ta->sticky = false;
|
|
||||||
// td_ta->layer_toggle = false;
|
|
||||||
// layer_off (GUILAY);
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
if (state->count == 1 && !state->pressed) {
|
|
||||||
register_code (KC_LGUI);
|
|
||||||
// td_ta->sticky = false;
|
|
||||||
td_ta->layer_toggle = false;
|
|
||||||
} else {
|
|
||||||
td_ta->layer_toggle = true;
|
|
||||||
layer_on(GUILAY);
|
|
||||||
// td_ta->sticky = (state->count == 2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Added this one to make it more reactive on keyup
|
|
||||||
static void ang_tap_dance_ta_each (tap_dance_state_t *state, void *user_data) {
|
|
||||||
td_ta_state_t *td_ta = (td_ta_state_t *) user_data;
|
|
||||||
|
|
||||||
if (!td_ta->layer_toggle) { // Braces added for clarity
|
|
||||||
unregister_code (KC_LGUI);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void ang_tap_dance_ta_reset (tap_dance_state_t *state, void *user_data) {
|
|
||||||
td_ta_state_t *td_ta = (td_ta_state_t *) user_data;
|
|
||||||
|
|
||||||
if (!td_ta->layer_toggle) { // Braces added for clarity
|
|
||||||
unregister_code (KC_LGUI);
|
|
||||||
}
|
|
||||||
// if (!td_ta->sticky)
|
|
||||||
layer_off (GUILAY); // We don't verify it was swithed on, switching off regardless
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
tap_dance_action_t tap_dance_actions[] = {
|
|
||||||
[0] = {
|
|
||||||
.fn = { ang_tap_dance_ta_each, ang_tap_dance_ta_finished, ang_tap_dance_ta_reset },
|
|
||||||
.user_data = (void *)&((td_ta_state_t) { false, false })
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
#if defined ISOLIKE_ALT_ENTER || defined TWO_SFT_CAPS || defined APP_IS_RALT_RCTRL || defined ALT_MINSEQL_IS_ALT_78
|
|
||||||
// Function for the special modifiers actions below, makes it cleaner and yields smaller firmware.
|
|
||||||
static bool special_mods(uint16_t keycode, keyrecord_t *record, uint16_t modifier) {
|
|
||||||
if (record->event.pressed && (keyboard_report->mods & MOD_BIT(modifier))) {
|
|
||||||
register_code(keycode);
|
|
||||||
return false;
|
|
||||||
} else {
|
|
||||||
unregister_code(keycode);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef BSPC_BLOCKS_DEL
|
|
||||||
static bool del_blocked = false; // Static as to not be defined elsewhere
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// This function is processed before the key events on each key press/release.
|
|
||||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
|
||||||
switch (keycode){
|
|
||||||
#ifdef ISOLIKE_ALT_ENTER
|
|
||||||
// RALT + ENT is the same as RALT+BSLS.
|
|
||||||
// For logical placement of *{* and *}* (the former being RALT+BSLS) with ANSI enter on
|
|
||||||
// ISO-based Canadian Multilingual layout (or any other ISO layout on ANSI keyboards).
|
|
||||||
case KC_ENT: return special_mods(KC_BSLS, record, KC_RALT); // RALT + ENT -> RALT + BSLS // See comment above
|
|
||||||
#endif
|
|
||||||
#ifdef TWO_SFT_CAPS
|
|
||||||
case KC_LSFT: return special_mods(KC_CAPS, record, KC_RSFT); // Both shifts together -> Caps Lock // RSFT pressed first case
|
|
||||||
case KC_RSFT: return special_mods(KC_CAPS, record, KC_LSFT); // Both shifts together -> Caps Lock // LSFT pressed first case
|
|
||||||
#endif
|
|
||||||
#ifdef APP_IS_RALT_RCTRL
|
|
||||||
case KC_RCTL: return special_mods(KC_APP, record, KC_RALT); // RALT + RCTRL -> APP // RCTRL pressed first case
|
|
||||||
case KC_RALT: return special_mods(KC_APP, record, KC_RCTL); // RALT + RCTRL -> APP // RALT pressed first case
|
|
||||||
#endif
|
|
||||||
#ifdef ALT_MINSEQL_IS_ALT_78
|
|
||||||
case KC_MINS: return special_mods(KC_7, record, KC_RALT); // RALT + MINS -> RALT+7 // {} in CAN Mult. softawre layout
|
|
||||||
case KC_EQL: return special_mods(KC_8, record, KC_RALT); // RALT + EQL -> RALT+8 // ½¬ normally... Less finger stretch.
|
|
||||||
#endif
|
|
||||||
#ifdef HELD_ESC_IS_SHIFT
|
|
||||||
case KC_ESC: // Physically *ESC* is *CAPS* // Holding ESC -> SHIFT (0 delay) // Less awkward *<ESC>:wq* in vim
|
|
||||||
if (record->event.pressed) {
|
|
||||||
register_code(KC_ESC); // Tapping ESC
|
|
||||||
unregister_code(KC_ESC);
|
|
||||||
register_code(KC_LSFT); // Holding LSFT
|
|
||||||
return false;
|
|
||||||
} else {
|
|
||||||
unregister_code(KC_LSFT); // Releasing LSFT
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#ifdef BSPC_BLOCKS_DEL
|
|
||||||
// If BSPC is held, we flag DEL as disabled. To avoids acidental presses of DEL with split backspace key.
|
|
||||||
case KC_BSPC:
|
|
||||||
del_blocked = record->event.pressed;
|
|
||||||
return true;
|
|
||||||
// We don't handle DEL if it is pressed and flagged as disabled
|
|
||||||
case KC_DEL:
|
|
||||||
if (del_blocked && record->event.pressed) {
|
|
||||||
return false;
|
|
||||||
} else {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
default: return true; // Let QMK handle the rest as usual
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
TAP_DANCE_ENABLE = yes # Enables Tap Dance
|
|
|
@ -1,66 +0,0 @@
|
||||||
#include QMK_KEYBOARD_H
|
|
||||||
#include "action_layer.h"
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
|
|
||||||
// 0: Base Layer
|
|
||||||
LAYOUT_all(
|
|
||||||
KC_ESC, 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_GRV,
|
|
||||||
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_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT,
|
|
||||||
KC_LSFT, KC_SLSH, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_NO, KC_RSFT, KC_UP, TG(2),
|
|
||||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RGUI, MO(1), KC_LEFT, KC_DOWN, KC_RIGHT
|
|
||||||
),
|
|
||||||
|
|
||||||
// 1: Function Layer
|
|
||||||
LAYOUT_all(
|
|
||||||
KC_GRAVE, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, BL_DOWN, BL_UP, KC_F13, KC_F14,
|
|
||||||
KC_NO, KC_WH_U, KC_UP, KC_WH_D, KC_BSPC,KC_HOME,KC_CALC,KC_NO, KC_INS, KC_NO, KC_PSCR, KC_SCRL, KC_PAUS, KC_DEL,
|
|
||||||
KC_NO, KC_LEFT, KC_DOWN, KC_RIGHT,KC_DEL, KC_END, KC_PGDN,KC_NO, KC_NO, KC_NO, KC_HOME, KC_PGUP, KC_NO, KC_ENT,
|
|
||||||
KC_LSFT, KC_NO, KC_NO, KC_APP, BL_STEP,KC_NO, KC_NO, KC_VOLD,KC_VOLU,KC_MUTE, KC_END, KC_PGDN, KC_RSFT, KC_PGUP, TG(2),
|
|
||||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RGUI, MO(1), KC_HOME, KC_PGDN, KC_END
|
|
||||||
),
|
|
||||||
|
|
||||||
// 2: Cool Layer
|
|
||||||
LAYOUT_all(
|
|
||||||
QK_BOOT, BL_DOWN, BL_UP, BL_ON, BL_OFF, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, RGB_MODE_PLAIN, KC_TRNS,
|
|
||||||
KC_NO, KC_WH_U, KC_UP, KC_WH_D, KC_BSPC,KC_HOME,KC_CALC,KC_NO, KC_INS, KC_NO, KC_PSCR, KC_SCRL, KC_PAUS, KC_DEL,
|
|
||||||
KC_NO, KC_LEFT, KC_DOWN, KC_RIGHT,KC_DEL, KC_END, KC_PGDN,KC_NO, KC_NO, KC_NO, KC_HOME, KC_PGUP, KC_NO, KC_ENT,
|
|
||||||
KC_LSFT, KC_NO, KC_NO, KC_APP, BL_STEP,KC_NO, KC_NO, KC_VOLD,KC_VOLU,KC_MUTE, KC_END, KC_PGDN, KC_RSFT, KC_PGUP, TG(2),
|
|
||||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RGUI, MO(1), KC_HOME, KC_PGDN, KC_END
|
|
||||||
)
|
|
||||||
};
|
|
||||||
|
|
||||||
bool edit = false;
|
|
||||||
uint32_t mode;
|
|
||||||
uint16_t hue;
|
|
||||||
uint8_t sat;
|
|
||||||
uint8_t val;
|
|
||||||
|
|
||||||
layer_state_t layer_state_set_user(layer_state_t state) {
|
|
||||||
|
|
||||||
if (state == 0 && edit == true) {
|
|
||||||
mode = rgblight_get_mode();
|
|
||||||
hue = rgblight_get_hue();
|
|
||||||
sat = rgblight_get_sat();
|
|
||||||
val = rgblight_get_val();
|
|
||||||
edit = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (get_highest_layer(state)) {
|
|
||||||
case 1:
|
|
||||||
rgblight_mode(1);
|
|
||||||
rgblight_setrgb(0xD3, 0x7F, 0xED);
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
rgblight_mode(1);
|
|
||||||
rgblight_setrgb(0xFF, 0x00, 0x00);
|
|
||||||
edit = true;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
rgblight_mode(mode);
|
|
||||||
rgblight_sethsv(hue, sat, val);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return state;
|
|
||||||
}
|
|
|
@ -1,45 +0,0 @@
|
||||||
# Birkir's Keymap for XIUDI's 60% XD60 PCB
|
|
||||||
|
|
||||||
Custom layout with some custom layers. Mac friendly.
|
|
||||||
|
|
||||||
## Layout
|
|
||||||
![Birkir's Layout](https://i.imgur.com/I69AYG1.png)
|
|
||||||
|
|
||||||
### Layer 0
|
|
||||||
Base layer as shown on layout above
|
|
||||||
|
|
||||||
### Layer 1
|
|
||||||
Active while pressing and holding `MENU`
|
|
||||||
|
|
||||||
RGB is purple while active
|
|
||||||
|
|
||||||
- `ESC` is `~`
|
|
||||||
|
|
||||||
### Layer 2
|
|
||||||
Toggled on and off with `FN`
|
|
||||||
|
|
||||||
RGB is red while active
|
|
||||||
|
|
||||||
RGB settings are persisted for layer 0 when done.
|
|
||||||
|
|
||||||
- `1` Backlight DEC
|
|
||||||
- `2` Backlight INC
|
|
||||||
- `3` Backlight OFF
|
|
||||||
- `4` Backlight ON
|
|
||||||
- `5` RGB Toggle
|
|
||||||
- `6` RGB Mode
|
|
||||||
- `7` RGB Hue DEC (-)
|
|
||||||
- `8` RGB Hue INC (+)
|
|
||||||
- `9` RGB Saturation DEC (-)
|
|
||||||
- `0` RGB Saturation INC (+)
|
|
||||||
- `-/_` RGB Brightness DEC (-)
|
|
||||||
- `+/=` RGB Brightness INC (+)
|
|
||||||
- `BACKSPACE` RGB Mode set to PLAIN
|
|
||||||
|
|
||||||
## TODO
|
|
||||||
|
|
||||||
- Mac shortcuts on Layer 1
|
|
||||||
- More dynamic keyboard configuration on Layer 2
|
|
||||||
|
|
||||||
## Build
|
|
||||||
To build the default keymap, simply run `make xiudi/xd60:birkir`.
|
|
|
@ -1,22 +0,0 @@
|
||||||
#include QMK_KEYBOARD_H
|
|
||||||
#include "action_layer.h"
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
|
|
||||||
// 0: Base Layer
|
|
||||||
LAYOUT_all(
|
|
||||||
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_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_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT,
|
|
||||||
KC_LSFT, KC_NO, 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_DEL,
|
|
||||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
|
|
||||||
|
|
||||||
// 1: Function Layer
|
|
||||||
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_BSPC, KC_BSPC,
|
|
||||||
KC_TAB, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PSCR,KC_SCRL,KC_PAUS, RGB_RMOD,RGB_MOD, RGB_VAD, RGB_VAI,
|
|
||||||
KC_CAPS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_INS, KC_HOME,KC_PGUP, RGB_HUD, RGB_HUI, KC_NO, KC_ENT,
|
|
||||||
KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_END, KC_PGDN, KC_NO, KC_RSFT, KC_UP, KC_DEL,
|
|
||||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
|
|
||||||
|
|
||||||
};
|
|
|
@ -1,9 +0,0 @@
|
||||||
# Edulpn64 Keymap for XIUDI's 60% XD60 PCB
|
|
||||||
|
|
||||||
![Edulpn64 Keymap for XD60](https://dl2.pushbulletusercontent.com/K6bdlBlP5ix7jdMAr8QKes4johmpUfPI/image.png)
|
|
||||||
|
|
||||||
## Additional Notes
|
|
||||||
This keymap uses the Default XD60 base layer, but follows the GK64 function layer (one of my XD60 boards use GK64 keycaps).
|
|
||||||
|
|
||||||
## Build
|
|
||||||
To build the default keymap, simply run `make xiudi/xd60:edulpn64`.
|
|
|
@ -1,25 +0,0 @@
|
||||||
// Copyright 2021 Minna Pallari (@pallarim)
|
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
||||||
|
|
||||||
#include QMK_KEYBOARD_H
|
|
||||||
#include "keymap_finnish.h"
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
|
|
||||||
// 0: Base Layer
|
|
||||||
LAYOUT_all(
|
|
||||||
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, FI_PLUS, FI_ACUT, MO(1), KC_BSPC,
|
|
||||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, FI_ARNG, FI_DIAE, KC_NO,
|
|
||||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, FI_ODIA, FI_ADIA, FI_QUOT, KC_ENT,
|
|
||||||
KC_LSFT, FI_LABK, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, FI_MINS,
|
|
||||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
|
|
||||||
|
|
||||||
// 1: Function Layer
|
|
||||||
LAYOUT_all(
|
|
||||||
QK_BOOT, 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_F13, KC_F14,
|
|
||||||
KC_NO, KC_WH_U, KC_UP, KC_WH_D, KC_BSPC,KC_HOME,KC_CALC,KC_NO, KC_INS, KC_NO, KC_PSCR, KC_SCRL, KC_PAUS, KC_DEL,
|
|
||||||
KC_NO, KC_LEFT, KC_DOWN, KC_RIGHT,KC_DEL, KC_END, KC_PGDN,KC_NO, KC_NO, KC_NO, KC_HOME, KC_PGUP, KC_NO, KC_ENT,
|
|
||||||
KC_LSFT, KC_NO, KC_NO, KC_APP, BL_STEP,KC_NO, KC_NO, KC_VOLD,KC_VOLU,KC_MUTE, KC_END, KC_PGDN, KC_RSFT, KC_PGUP, KC_INS,
|
|
||||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RGUI, MO(1), KC_HOME, KC_PGDN, KC_END),
|
|
||||||
|
|
||||||
};
|
|
|
@ -1,20 +0,0 @@
|
||||||
# Finnish/Swedish iso Keymap for XIUDI's XD60 PCB
|
|
||||||
|
|
||||||
FI/SV iso Keymap for XD60.
|
|
||||||
|
|
||||||
## Keymap
|
|
||||||
|
|
||||||
### Base Layer
|
|
||||||
|
|
||||||
![Base layer](https://i.imgur.com/TrChS0N.png)
|
|
||||||
|
|
||||||
### Function Layer
|
|
||||||
|
|
||||||
![Default Keymap layer 2](https://img.alicdn.com/imgextra/i1/1713761720/TB2K0gTalPxQeBjy1XcXXXHzVXa_!!1713761720.png)
|
|
||||||
|
|
||||||
## Build
|
|
||||||
|
|
||||||
To build the default keymap, simply run:
|
|
||||||
|
|
||||||
make xiudi/xd60/rev2:finnish # XD60 rev2
|
|
||||||
make xiudi/xd60/rev3:finnish # XD60 rev3
|
|
|
@ -1,10 +0,0 @@
|
||||||
#pragma once
|
|
||||||
|
|
||||||
/* Changes the number of taps required for layer toggle*/
|
|
||||||
#define TAPPING_TOGGLE 3
|
|
||||||
|
|
||||||
/* The RGB lighting will be switched off when the host goes to sleep */
|
|
||||||
#define RGBLIGHT_SLEEP
|
|
||||||
|
|
||||||
// lighting layers
|
|
||||||
#define RGBLIGHT_LAYERS
|
|
|
@ -1,78 +0,0 @@
|
||||||
#include QMK_KEYBOARD_H
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
[0] = LAYOUT_all(
|
|
||||||
QK_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_GRV, 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_NO,
|
|
||||||
MO(1), 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_NO, KC_RSFT, KC_PSCR,
|
|
||||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_APP, KC_NO, TT(1), KC_RCTL),
|
|
||||||
|
|
||||||
[1] = 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_NO, KC_DEL,
|
|
||||||
KC_TAB, KC_INS, KC_DEL, KC_UP, KC_PGUP, KC_PGDN, KC_NO, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2, KC_NO, KC_NO, KC_NO, KC_NO,
|
|
||||||
KC_TRNS, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_NO, KC_NO, KC_NO, KC_ENT,
|
|
||||||
KC_LSFT, KC_PSCR, KC_NO, KC_HOME, KC_END, KC_NO, KC_NO, KC_NO, KC_MS_BTN3, KC_NO, KC_NO, KC_NO, KC_NO, KC_RSFT, MO(2),
|
|
||||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_APP, KC_NO, KC_TRNS, KC_RCTL),
|
|
||||||
|
|
||||||
[2] = LAYOUT_all(
|
|
||||||
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, QK_BOOT,
|
|
||||||
KC_NO, BL_TOGG, BL_STEP, BL_ON, BL_OFF, BL_UP, BL_DOWN, BL_BRTG, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
|
||||||
KC_NO, RGB_TOG, RGB_MOD, RGB_RMOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, RGB_SPI, RGB_SPD, KC_NO, KC_NO,
|
|
||||||
KC_NO, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, RGB_M_K, RGB_M_X, RGB_M_G, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
|
|
||||||
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO)
|
|
||||||
};
|
|
||||||
|
|
||||||
const rgblight_segment_t PROGMEM my_0_layer[] = RGBLIGHT_LAYER_SEGMENTS(
|
|
||||||
{0, 6, HSV_CYAN},
|
|
||||||
{6, 6, HSV_BLUE}
|
|
||||||
);
|
|
||||||
|
|
||||||
const rgblight_segment_t PROGMEM my_1_layer[] = RGBLIGHT_LAYER_SEGMENTS(
|
|
||||||
{1, 4, HSV_GREEN},
|
|
||||||
{7, 4, HSV_GREEN}
|
|
||||||
);
|
|
||||||
const rgblight_segment_t PROGMEM my_2_layer[] = RGBLIGHT_LAYER_SEGMENTS(
|
|
||||||
{1, 4, HSV_PURPLE},
|
|
||||||
{7, 4, HSV_PURPLE}
|
|
||||||
);
|
|
||||||
|
|
||||||
const rgblight_segment_t PROGMEM my_caps_layer[] = RGBLIGHT_LAYER_SEGMENTS(
|
|
||||||
{0, 1, HSV_RED},
|
|
||||||
{5, 1, HSV_RED},
|
|
||||||
{6, 1, HSV_RED},
|
|
||||||
{11, 1, HSV_RED}
|
|
||||||
);
|
|
||||||
|
|
||||||
// Now define the array of layers. Later layers take precedence
|
|
||||||
const rgblight_segment_t* const PROGMEM my_layers[] = RGBLIGHT_LAYERS_LIST(
|
|
||||||
my_0_layer,
|
|
||||||
my_1_layer,
|
|
||||||
my_2_layer,
|
|
||||||
my_caps_layer
|
|
||||||
);
|
|
||||||
|
|
||||||
void keyboard_post_init_user(void) {
|
|
||||||
// Enable the LED layers
|
|
||||||
rgblight_layers = my_layers;
|
|
||||||
layer_state_set_user(layer_state);
|
|
||||||
};
|
|
||||||
|
|
||||||
layer_state_t layer_state_set_user(layer_state_t state) {
|
|
||||||
rgblight_set_layer_state(0, layer_state_cmp(state, 0));
|
|
||||||
rgblight_set_layer_state(1, layer_state_cmp(state, 1));
|
|
||||||
rgblight_set_layer_state(2, layer_state_cmp(state, 2));
|
|
||||||
return state;
|
|
||||||
};
|
|
||||||
|
|
||||||
bool led_update_user(led_t led_state) {
|
|
||||||
rgblight_set_layer_state(3, led_state.caps_lock);
|
|
||||||
return true;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* // EEPROM Reset Function
|
|
||||||
void eeconfig_init_user(void) {
|
|
||||||
backlight_enable(); // Enable backlight by default
|
|
||||||
rgblight_enable(); // Enable RGB by default
|
|
||||||
rgblight_sethsv(HSV_BLUE); // Set it to orange by default
|
|
||||||
}; */
|
|
|
@ -1,33 +0,0 @@
|
||||||
# fvolpe83's keymap for XIUDI's 60% XD60 PCB rev3
|
|
||||||
|
|
||||||
3 layers in ISO:
|
|
||||||
|
|
||||||
- 0 for ISO querty with split backspace and split right shift
|
|
||||||
- 1 for arrows and mouse
|
|
||||||
- 2 for backlight
|
|
||||||
|
|
||||||
|
|
||||||
![Keyboard Layout (Physical appearence)](https://i.imgur.com/Zgc4Fv6.jpg "physical layout")
|
|
||||||
|
|
||||||
|
|
||||||
## Additional Notes
|
|
||||||
|
|
||||||
RGB lighting enabled and goes to sleep with the host, each layer has its own color, caps layer is still there (can be enabled via software) but acts as FN
|
|
||||||
|
|
||||||
- 0 = cyan/blue
|
|
||||||
- caps = red
|
|
||||||
- 1 = green
|
|
||||||
- 2 = purple
|
|
||||||
|
|
||||||
tapping toggle has been defined to 3 in the separate config.h
|
|
||||||
|
|
||||||
via has been enabled
|
|
||||||
|
|
||||||
## Build
|
|
||||||
|
|
||||||
To build the keymap, simply run:
|
|
||||||
|
|
||||||
make xiudi/xd60/rev3:fvolpe83 # XD60 rev3
|
|
||||||
|
|
||||||
|
|
||||||
![Keyboard Layout (Physical appearence)](https://i.imgur.com/CSRPjbX.png "physical layout")
|
|
|
@ -1 +0,0 @@
|
||||||
VIA_ENABLE = yes
|
|
|
@ -1 +0,0 @@
|
||||||
passwd.h
|
|
|
@ -1,20 +0,0 @@
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#if __GNUC__ > 5
|
|
||||||
# if __has_include("passwd.h")
|
|
||||||
# include "passwd.h"
|
|
||||||
# endif // if file exists
|
|
||||||
#endif // __GNUC__
|
|
||||||
|
|
||||||
#ifndef PASSWORD_A
|
|
||||||
#define PASSWORD_A "1234567890"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef PASSWORD_B
|
|
||||||
#define PASSWORD_B "pass123"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define RGBLIGHT_LAYERS
|
|
||||||
|
|
||||||
#define LSPO_KEYS KC_LSFT, KC_TRNS, KC_5
|
|
||||||
#define RSPC_KEYS KC_RSFT, KC_TRNS, KC_MINS
|
|
|
@ -1,165 +0,0 @@
|
||||||
#include QMK_KEYBOARD_H
|
|
||||||
|
|
||||||
/*
|
|
||||||
Security Note: While it is possible to use macros to send passwords, credit card numbers,
|
|
||||||
and other sensitive information it is a supremely bad idea to do so. Anyone who gets a hold
|
|
||||||
of your keyboard will be able to access that information by opening a text editor.
|
|
||||||
*/
|
|
||||||
enum custom_keycodes
|
|
||||||
{
|
|
||||||
PASS_A = SAFE_RANGE,
|
|
||||||
PASS_B
|
|
||||||
};
|
|
||||||
|
|
||||||
#define ___ KC_NO
|
|
||||||
|
|
||||||
#define LAYOUT_melka( \
|
|
||||||
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, \
|
|
||||||
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
|
|
||||||
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \
|
|
||||||
K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
|
|
||||||
K40, K41, K42, K43, K44, K45, K46, K47, K48) \
|
|
||||||
{ \
|
|
||||||
{K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D}, \
|
|
||||||
{K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, ___}, \
|
|
||||||
{K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K1D}, \
|
|
||||||
{K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3E, K3D}, \
|
|
||||||
{K40, K41, K42, ___, ___, K43, ___, K3C, K46, K0E, K44, K45, K47, K48} \
|
|
||||||
}
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
// 0: Base Layer
|
|
||||||
LAYOUT_melka(
|
|
||||||
KC_NUBS, 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_DEL, 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_ENT,
|
|
||||||
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,
|
|
||||||
MT(KC_LSFT, KC_5), KC_GRV, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MT(KC_RSFT, KC_MINS), KC_UP, MO(1),
|
|
||||||
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, KC_LEFT, KC_DOWN, KC_RIGHT),
|
|
||||||
|
|
||||||
// 1: Function Layer
|
|
||||||
LAYOUT_melka(
|
|
||||||
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_WH_U, KC_UP, KC_WH_D, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
_______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, _______,
|
|
||||||
TO(2), TO(3), _______, KC_APP, BL_STEP, _______, _______, _______, _______, _______, _______, KC_END, KC_PGDN, KC_VOLU, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_MUTE),
|
|
||||||
|
|
||||||
// 2: RGB Layer
|
|
||||||
LAYOUT_melka(
|
|
||||||
RGB_TOG, RGB_M_P, RGB_RMOD, RGB_MOD, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, RGB_M_K, RGB_M_X, RGB_M_G, RGB_M_T, _______, _______, QK_BOOT,
|
|
||||||
_______, RGB_HUD, RGB_HUI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
_______, RGB_SAD, RGB_SAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
TO(0), _______, RGB_VAD, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, PASS_A, PASS_B, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______),
|
|
||||||
|
|
||||||
// 3: Keypad Layer
|
|
||||||
LAYOUT_melka(
|
|
||||||
KC_ESC, _______, _______, _______, _______, _______, _______, _______, _______, KC_NUM, KC_PEQL, KC_PSLS, KC_PAST, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, KC_PMNS, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6, KC_PPLS,
|
|
||||||
TO(0), _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, KC_PENT, TO(0),
|
|
||||||
_______, _______, _______, _______, KC_P0, KC_P0, KC_PDOT, KC_PENT, _______)
|
|
||||||
};
|
|
||||||
|
|
||||||
// Light LEDs 6 to 9 and 12 to 15 red when caps lock is active. Hard to ignore!
|
|
||||||
const rgblight_segment_t PROGMEM rgb_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS(
|
|
||||||
{2, 4, HSV_RED}, // Light 4 LEDs, starting with LED 6
|
|
||||||
{6, 4, HSV_RED} // Light 4 LEDs, starting with LED 12
|
|
||||||
);
|
|
||||||
// Light LEDs 9 & 10 in cyan when keyboard layer 1 is active
|
|
||||||
const rgblight_segment_t PROGMEM rgb_function_layer[] = RGBLIGHT_LAYER_SEGMENTS(
|
|
||||||
{9, 2, HSV_CYAN}
|
|
||||||
);
|
|
||||||
// Light LEDs 11 & 12 in purple when keyboard layer 2 is active
|
|
||||||
const rgblight_segment_t PROGMEM rgb_backlight_layer[] = RGBLIGHT_LAYER_SEGMENTS(
|
|
||||||
{10, 2, HSV_PURPLE}
|
|
||||||
);
|
|
||||||
const rgblight_segment_t PROGMEM rgb_keypad_layer[] = RGBLIGHT_LAYER_SEGMENTS(
|
|
||||||
{4, 4, HSV_RED}
|
|
||||||
);
|
|
||||||
// Now define the array of layers. Later layers take precedence
|
|
||||||
const rgblight_segment_t* const PROGMEM rgb_layers[] = RGBLIGHT_LAYERS_LIST(
|
|
||||||
rgb_capslock_layer,
|
|
||||||
rgb_function_layer,
|
|
||||||
rgb_backlight_layer, // Overrides caps lock layer
|
|
||||||
rgb_keypad_layer // Overrides other layers
|
|
||||||
);
|
|
||||||
|
|
||||||
layer_state_t layer_state_set_user(layer_state_t state) {
|
|
||||||
// Both layers will light up if both kb layers are active
|
|
||||||
rgblight_set_layer_state(1, layer_state_cmp(state, 1));
|
|
||||||
rgblight_set_layer_state(2, layer_state_cmp(state, 2));
|
|
||||||
return state;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool led_update_user(led_t led_state) {
|
|
||||||
rgblight_set_layer_state(0, led_state.caps_lock);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void keyboard_post_init_user(void) {
|
|
||||||
// Enable the LED layers
|
|
||||||
rgblight_layers = rgb_layers;
|
|
||||||
}
|
|
||||||
// Loop
|
|
||||||
void matrix_scan_user(void) {
|
|
||||||
// Empty
|
|
||||||
};
|
|
||||||
|
|
||||||
static bool control_disabled = false;
|
|
||||||
static bool delete_pressed = false;
|
|
||||||
|
|
||||||
bool process_record_user(uint16_t keycode, keyrecord_t *record)
|
|
||||||
{
|
|
||||||
if (keycode == KC_BSPC)
|
|
||||||
{
|
|
||||||
if (record->event.pressed)
|
|
||||||
{
|
|
||||||
if (keyboard_report->mods & MOD_BIT(KC_LCTL))
|
|
||||||
{
|
|
||||||
delete_pressed = true;
|
|
||||||
control_disabled = true;
|
|
||||||
unregister_code(KC_LCTL);
|
|
||||||
register_code(KC_DEL);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (delete_pressed)
|
|
||||||
{
|
|
||||||
delete_pressed = false;
|
|
||||||
unregister_code(KC_DEL);
|
|
||||||
|
|
||||||
if (control_disabled)
|
|
||||||
{
|
|
||||||
control_disabled = false;
|
|
||||||
register_code(KC_LCTL);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (keycode == KC_LCTL && !record->event.pressed && delete_pressed)
|
|
||||||
{
|
|
||||||
delete_pressed = false;
|
|
||||||
control_disabled = false;
|
|
||||||
unregister_code(KC_DEL);
|
|
||||||
register_code(KC_BSPC);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (keycode)
|
|
||||||
{
|
|
||||||
case PASS_A:
|
|
||||||
if (record->event.pressed)
|
|
||||||
{
|
|
||||||
SEND_STRING(PASSWORD_A "\n");
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case PASS_B:
|
|
||||||
if (record->event.pressed)
|
|
||||||
{
|
|
||||||
SEND_STRING(PASSWORD_B "\n");
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
|
@ -1,10 +0,0 @@
|
||||||
/*
|
|
||||||
To define your password, rename this file to passwd.h and edit the defines below.
|
|
||||||
|
|
||||||
Security Note: While it is possible to use macros to send passwords, credit card numbers,
|
|
||||||
and other sensitive information it is a supremely bad idea to do so. Anyone who gets a hold
|
|
||||||
of your keyboard will be able to access that information by opening a text editor.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define PASSWORD_A "enter your first password here"
|
|
||||||
#define PASSWORD_B "second password if you need"
|
|
|
@ -1,21 +0,0 @@
|
||||||
# melka's keymap for XIUDI's 60% XD60 rev3 PCB
|
|
||||||
|
|
||||||
## Additional Notes
|
|
||||||
Custom Keymap for XD60 rev3. French Mac layout.
|
|
||||||
|
|
||||||
## Security Note
|
|
||||||
This keymap includes macros for entering passwords.
|
|
||||||
|
|
||||||
While it is possible to use macros to send passwords, credit card numbers,
|
|
||||||
and other sensitive information it is a supremely bad idea to do so. Anyone who gets a hold
|
|
||||||
of your keyboard will be able to access that information by opening a text editor.
|
|
||||||
|
|
||||||
Use this functionnality at your own risk.
|
|
||||||
|
|
||||||
To define your password, rename passwd_template.h file to passwd.h and edit the defines inside.
|
|
||||||
|
|
||||||
## Build
|
|
||||||
|
|
||||||
To build this keymap, simply run:
|
|
||||||
|
|
||||||
make xiudi/xd60/rev3:melka # XD60 rev3
|
|
|
@ -1,26 +0,0 @@
|
||||||
# pete's mom Layout
|
|
||||||
|
|
||||||
Customized xd60 keymap based on yuuki's but a step sideways with Mac support. For Pete on his 40th
|
|
||||||
|
|
||||||
## Programming Instructions
|
|
||||||
|
|
||||||
Change the layout in `keymap.c` then run `make xiudi/xd60:petesmom`. The compiled file will be located in `.build/xiudi_xd60_petesmom.hex` relative to the project root. To flash it onto your keyboard, use whatever program works on your OS. I personally use `dfu-programmer`, and run:
|
|
||||||
|
|
||||||
* `sudo dfu-programmer atmega32u4 erase`
|
|
||||||
* `sudo dfu-programmer atmega32u4 flash .build/xiudi_xd60-petesmom.hex`
|
|
||||||
* `sudo dfu-programmer atmega32u4 start`
|
|
||||||
|
|
||||||
## Layout
|
|
||||||
|
|
||||||
See `keymap.c` for the details, but here are the important features:
|
|
||||||
|
|
||||||
| Key | Function |
|
|
||||||
| -------------------------- | ---------------------------------- |
|
|
||||||
| ESC | ESC when pressed alone but acts as ~ when pressed with Shift or LGUI down |
|
|
||||||
| FN + ESC | Grave |
|
|
||||||
| Right Shift | When tapped generates / |
|
|
||||||
| FN + HJKL | Arrow Keys |
|
|
||||||
| FN + C | ^ |
|
|
||||||
| FN + V | & |
|
|
||||||
| FN + , . RShift | Mac Vol - + Mute |
|
|
||||||
| FN + P [ ] \ | Mac Play/Pause, Prev Track, Next Track, Stop |
|
|
|
@ -1,28 +0,0 @@
|
||||||
#include QMK_KEYBOARD_H
|
|
||||||
#include "action_layer.h"
|
|
||||||
|
|
||||||
#define BASE 0
|
|
||||||
#define FN 1
|
|
||||||
|
|
||||||
#define CTL_SLSH CTL_T(KC_SLSH)
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
|
|
||||||
// 0: Base Layer
|
|
||||||
[BASE] = LAYOUT_all(
|
|
||||||
QK_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_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_BSLS,
|
|
||||||
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_NO, KC_ENT,
|
|
||||||
KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_NO, RSFT_T(KC_SLASH), KC_UP, KC_RCTL,
|
|
||||||
CTL_SLSH, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(FN), KC_LEFT, KC_DOWN, KC_RIGHT
|
|
||||||
),
|
|
||||||
// 1: Function Layer
|
|
||||||
[FN] = LAYOUT_all(
|
|
||||||
KC_GRV, 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_DEL, KC_DEL,
|
|
||||||
KC_TRNS, RGB_MOD, RGB_VAI, KC_TRNS, KC_TRNS, KC_HOME, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_MRWD, KC_MFFD, KC_MSTP,
|
|
||||||
KC_TRNS, RGB_TOG, RGB_VAD, KC_MUTE, KC_VOLU, KC_VOLD, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_TRNS, KC_NO, KC_ENT,
|
|
||||||
KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_CIRC, KC_AMPR, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_NO, KC_MUTE,KC_PGUP, QK_BOOT,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_SPC, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN,KC_END
|
|
||||||
),
|
|
||||||
|
|
||||||
};
|
|
|
@ -1,2 +0,0 @@
|
||||||
cd c:/QMK
|
|
||||||
make xd60 / / / / / / / /
|
|
|
@ -1,57 +0,0 @@
|
||||||
// XD60 Rev 2.0
|
|
||||||
|
|
||||||
#include QMK_KEYBOARD_H
|
|
||||||
#include "action_layer.h"
|
|
||||||
//#include "action_tapping.h"
|
|
||||||
#include "backlight.h"
|
|
||||||
|
|
||||||
// Define tapping term
|
|
||||||
#define TAPPING_TERM 150
|
|
||||||
|
|
||||||
// Layer definitions~
|
|
||||||
#define _BL 0
|
|
||||||
#define _FL 1
|
|
||||||
#define _LK 2
|
|
||||||
|
|
||||||
// RShift TapHold
|
|
||||||
#define RSTT MT(MOD_RSFT, KC_SLSH)
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
/* (Base Layer) Default Layer
|
|
||||||
* ,-----------------------------------------------------------.
|
|
||||||
* |Esc~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ |
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* | Caps | A| S| D| F| G| H| J| K| L| ;| '| Return |
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* |Shift | Z| X| C| V| B| N| M| ,| .|Shift| Up |Del |
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* |Ctrl|Gui |Alt | Space |Ctrl|Fn| LT| DN | RT |
|
|
||||||
* `-----------------------------------------------------------'
|
|
||||||
*/
|
|
||||||
// 0: Base Layer
|
|
||||||
[_BL] = LAYOUT_all(
|
|
||||||
QK_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_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_BSLS,
|
|
||||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, XXXXXXX, KC_ENT,
|
|
||||||
KC_LSFT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, XXXXXXX, RSTT, KC_UP, KC_DEL,
|
|
||||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RIGHT),
|
|
||||||
|
|
||||||
// 1: Function Layer
|
|
||||||
[_FL] = LAYOUT_all(
|
|
||||||
KC_GRV, 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_DEL, KC_DEL,
|
|
||||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PSCR, XXXXXXX, XXXXXXX, XXXXXXX,
|
|
||||||
XXXXXXX, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
|
||||||
XXXXXXX, XXXXXXX, KC_VOLD, KC_VOLU, KC_MUTE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______,
|
|
||||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TG(_LK), _______, KC_HOME, _______, KC_END),
|
|
||||||
|
|
||||||
// 2: Lighting Keys
|
|
||||||
[_LK] = LAYOUT_all(
|
|
||||||
TO(_BL), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, QK_BOOT, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL,
|
|
||||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PSCR, XXXXXXX, XXXXXXX, XXXXXXX,
|
|
||||||
QK_BOOT, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
|
||||||
XXXXXXX, XXXXXXX, KC_VOLD, KC_VOLU, KC_MUTE, XXXXXXX, XXXXXXX, RGB_SAD, RGB_SAI, RGB_HUD, RGB_HUI, XXXXXXX, XXXXXXX, RGB_VAI, BL_STEP,
|
|
||||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TO(_BL), XXXXXXX, RGB_TOG, RGB_VAD, RGB_MOD),
|
|
||||||
|
|
||||||
};
|
|
|
@ -1,24 +0,0 @@
|
||||||
/* Copyright 2021 Chase Nordengren
|
|
||||||
*
|
|
||||||
* 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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include QMK_KEYBOARD_H
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
[0] = LAYOUT_all(KC_ESC, 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_GRV, 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, MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, RSFT_T(KC_SLSH), KC_UP, KC_DEL, KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT),
|
|
||||||
[1] = LAYOUT_all(KC_GRV, 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_F13, KC_F14, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_VOLU, KC_VOLD, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, LCAG(KC_SCLN), LCAG(KC_QUOT), KC_NO, KC_TRNS, KC_TRNS, KC_NO, LCAG(KC_Z), LCAG(KC_X), LCAG(KC_ASTR), LCAG(KC_V), LCAG(KC_B), LCAG(KC_N), LCAG(KC_M), LCAG(KC_COMM), KC_INS, KC_DEL, KC_TRNS, KC_PGUP, KC_INS, KC_TRNS, KC_TRNS, KC_TRNS, LCAG(KC_SPC), KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END)
|
|
||||||
};
|
|
||||||
|
|
||||||
// Loop
|
|
|
@ -1,13 +0,0 @@
|
||||||
# Semicolonsnet Keymap for XIUDI's 60% XD60 PCB
|
|
||||||
|
|
||||||
![Semicolonsnet Keymap for XD60](https://i.imgur.com/VZygOqK.png)
|
|
||||||
|
|
||||||
## Additional Notes
|
|
||||||
Custom Keymap for XD60 - uses a META key and lots of shortcut keys that are later software controlled
|
|
||||||
|
|
||||||
## Build
|
|
||||||
|
|
||||||
To build the default keymap, simply run:
|
|
||||||
|
|
||||||
make xiudi/xd60/rev2:default # XD60 rev2
|
|
||||||
make xiudi/xd60/rev3:default # XD60 rev3
|
|
|
@ -1,30 +0,0 @@
|
||||||
#include QMK_KEYBOARD_H
|
|
||||||
#include "action_layer.h"
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
|
|
||||||
// 0: Base Layer
|
|
||||||
LAYOUT_all(
|
|
||||||
KC_ESC, 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_BSLS, KC_GRV,
|
|
||||||
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,
|
|
||||||
MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT,
|
|
||||||
KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(2), KC_UP, KC_DEL,
|
|
||||||
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, KC_LEFT, KC_DOWN, KC_RIGHT),
|
|
||||||
|
|
||||||
// 1: Function Layer
|
|
||||||
LAYOUT_all(
|
|
||||||
QK_BOOT, 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_F13, KC_F14,
|
|
||||||
KC_CAPS, KC_MPRV, KC_UP, KC_MNXT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_DEL,
|
|
||||||
MO(1), KC_LEFT, KC_DOWN, KC_RIGHT,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_ENT,
|
|
||||||
KC_LSFT, KC_NO, KC_VOLD, KC_MUTE, KC_VOLU,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PGUP, KC_INS,
|
|
||||||
KC_LCTL, KC_LALT, KC_LGUI, KC_MPLY, KC_RGUI, KC_RALT, KC_HOME, KC_PGDN, KC_END),
|
|
||||||
|
|
||||||
// 2: RGB Layer
|
|
||||||
LAYOUT_all(
|
|
||||||
KC_NO, BL_TOGG, BL_STEP, 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, RGB_TOG, RGB_MOD, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
|
||||||
KC_NO, RGB_HUI, RGB_SAI, RGB_VAI, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
|
||||||
KC_NO, KC_NO, RGB_HUD, RGB_SAD, RGB_VAD,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, MO(2), KC_NO, KC_NO,
|
|
||||||
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO),
|
|
||||||
|
|
||||||
};
|
|
|
@ -1,56 +0,0 @@
|
||||||
#include QMK_KEYBOARD_H
|
|
||||||
|
|
||||||
#define _BL 0
|
|
||||||
#define _FL 1
|
|
||||||
#define _LL 2
|
|
||||||
|
|
||||||
enum custom_keycodes {
|
|
||||||
MACRO_STRING
|
|
||||||
};
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
|
|
||||||
// 0: Base Layer
|
|
||||||
[_BL] = LAYOUT_all(
|
|
||||||
KC_ESC, 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_GRV, 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_BSLS,
|
|
||||||
MO(_LL), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT,
|
|
||||||
KC_LSFT, XXXXXXX, 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_DEL,
|
|
||||||
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, MO(_FL), KC_RALT, KC_LEFT, KC_DOWN, KC_RIGHT),
|
|
||||||
|
|
||||||
// 1: Function Layer
|
|
||||||
[_FL] = LAYOUT_all(
|
|
||||||
XXXXXXX, 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_F13, KC_F14,
|
|
||||||
XXXXXXX, RGB_TOG, RGB_MOD, RGB_RMOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI, RGB_HUD, XXXXXXX, RGB_VAI, RGB_VAD, XXXXXXX,
|
|
||||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
|
||||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2,
|
|
||||||
XXXXXXX, XXXXXXX, XXXXXXX, MACRO_STRING, XXXXXXX, F(0), KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT),
|
|
||||||
|
|
||||||
[_LL] = LAYOUT_all(
|
|
||||||
XXXXXXX, 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_F13, KC_F14,
|
|
||||||
XXXXXXX, RGB_TOG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
|
||||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE,
|
|
||||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLU, KC_MPLY,
|
|
||||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, F(0), KC_MRWD, KC_VOLD, KC_MFFD),
|
|
||||||
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
// Macros
|
|
||||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
|
||||||
switch (keycode) {
|
|
||||||
case MACRO_STRING:
|
|
||||||
if(record->event.pressed){
|
|
||||||
SEND_STRING("My Custom String");
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Loop
|
|
||||||
void matrix_scan_user(void) {
|
|
||||||
// Empty
|
|
||||||
};
|
|
|
@ -1,7 +0,0 @@
|
||||||
# Keyboard Layout by Styr
|
|
||||||
|
|
||||||
## Additional Notes
|
|
||||||
Default Keymap for XD60 as indicated on the original sale page.
|
|
||||||
|
|
||||||
## Build
|
|
||||||
To build the default keymap, simply run `make xiudi/xd60/rev3:styr`.
|
|
|
@ -1,22 +0,0 @@
|
||||||
#include QMK_KEYBOARD_H
|
|
||||||
#include "action_layer.h"
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
|
|
||||||
// 0: Base Layer
|
|
||||||
LAYOUT_all(
|
|
||||||
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_NO,
|
|
||||||
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_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT,
|
|
||||||
KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_RSFT, KC_NO,
|
|
||||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RALT, KC_NO, KC_RGUI, KC_RCTL),
|
|
||||||
|
|
||||||
// 1: Function Layer
|
|
||||||
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_F13, KC_F14,
|
|
||||||
KC_NO, KC_NO, KC_UP, KC_END, KC_NO, KC_NO, KC_CALC, KC_PGUP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_DEL,
|
|
||||||
KC_NO, KC_LEFT, KC_DOWN, KC_RIGHT,KC_NO, KC_NO, KC_HOME, KC_PGDN, KC_NO, KC_NO, KC_NO, KC_PGUP, KC_NO, KC_ENT,
|
|
||||||
KC_LSFT, KC_NO, KC_NO, KC_DEL, BL_STEP,KC_NO, KC_NO, KC_VOLD, KC_VOLU,KC_MUTE, KC_NO, KC_PGDN, KC_RSFT, KC_NO, KC_NO,
|
|
||||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RALT, KC_NO, KC_RGUI, KC_RCTL),
|
|
||||||
|
|
||||||
};
|
|
|
@ -1,9 +0,0 @@
|
||||||
# Supercoffee Keymap for DeskCandy 60% XD60 PCB
|
|
||||||
|
|
||||||
![Supercoffee Keymap for XD60](https://i.imgur.com/SPg4wXw.jpg)
|
|
||||||
|
|
||||||
## Additional Notes
|
|
||||||
60% Keymap for XD60 with GH60 ANSI layout. Arrow keys mapped to WASD in function layer.
|
|
||||||
|
|
||||||
## Build
|
|
||||||
To build the default keymap, simply run `make xiudi/xd60:supercoffee`.
|
|
|
@ -1,16 +0,0 @@
|
||||||
# suryanisaac's layout
|
|
||||||
|
|
||||||
Just my custom layout, works really well for me so hopefully you guys like it.
|
|
||||||
|
|
||||||
## Features:
|
|
||||||
|
|
||||||
- Arrow keys on IJKL on Layer 1
|
|
||||||
- Layer 1 toggle is the Caps Lock (No one likes caps lock)
|
|
||||||
- Nav keys close to arrow keys, good for programming
|
|
||||||
- Non-convoluted media control
|
|
||||||
- For Mac or Linux with Kinto
|
|
||||||
- Left and Right brackets on left shift and right shift
|
|
||||||
- Layer 1 has F1 to F12 on number keys
|
|
||||||
|
|
||||||
|
|
||||||
Pictures Available Here: https://imgur.com/a/7UzkhOu
|
|
|
@ -1,29 +0,0 @@
|
||||||
/* Copyright 2021 Suryan Isaac
|
|
||||||
*
|
|
||||||
* 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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include QMK_KEYBOARD_H
|
|
||||||
|
|
||||||
/* THIS FILE WAS GENERATED!
|
|
||||||
*
|
|
||||||
* This file was generated by qmk json2c. You may or may not want to
|
|
||||||
* edit it directly.
|
|
||||||
*/
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
[0] = LAYOUT_60_ansi(QK_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_BSLS, MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, SC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SC_RSPC, KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, KC_RCTL, TG(1)),
|
|
||||||
[1] = LAYOUT_60_ansi(QK_BOOT, 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_DEL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_UP, KC_PGDN, KC_END, KC_TRNS, KC_TRNS, KC_PSCR, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, 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)
|
|
||||||
};
|
|
||||||
|
|
|
@ -1,31 +0,0 @@
|
||||||
# yuuki's Layout
|
|
||||||
|
|
||||||
Customized xd60 keymap with inspirations from HHKB and the layout I used on my Vortex Core (a 40% keyboard).
|
|
||||||
|
|
||||||
## Programming Instructions
|
|
||||||
|
|
||||||
Change the layout in `keymap.c` then run `make xiudi/xd60:yuuki`. The compiled file will be located in `.build/xiudi_xd60_yuuki.hex` relative to the project root. To flash it onto your keyboard, use whatever program works on your OS. I personally use `dfu-programmer`, and run:
|
|
||||||
|
|
||||||
* reset keyboard by pressing the reset button on the back of the PCB
|
|
||||||
* `sudo dfu-programmer atmega32u4 erase`
|
|
||||||
* `sudo dfu-programmer atmega32u4 flash .build/xiudi_xd60_yuuki.hex`
|
|
||||||
* `sudo dfu-programmer atmega32u4 start`
|
|
||||||
|
|
||||||
## Layout
|
|
||||||
|
|
||||||
![Keyboard Layout](https://github.com/cideM/cidem.github.io/blob/master/keyboard-layout.png "Layout")
|
|
||||||
|
|
||||||
Upper row is default layer, bottom row is function layer. I Didn't include the symbols, such as @,# or $, as their placement is just as you'd expect it.
|
|
||||||
|
|
||||||
## Summary of Changes
|
|
||||||
|
|
||||||
| Key | Function |
|
|
||||||
| -------------------------- | ---------------------------------- |
|
|
||||||
| Capslock | Forward Slash when tapped and Left Control when held |
|
|
||||||
| Left Control | Temporarily activate function layer |
|
|
||||||
| FN + ESC | Grave |
|
|
||||||
| Space Cadet Shift | Left Shift tapped writes ( and Right Shift tapped writes ) |
|
|
||||||
| FN + HJKL | Arrow Keys |
|
|
||||||
| Rightmost key in second row from bottom | Temporarily activate function layer |
|
|
||||||
| FN + C | ^ |
|
|
||||||
| FN + V | & (both for convenience as I use these keys a lot with VIM navigation and I find them hard reach) |
|
|
|
@ -1,28 +0,0 @@
|
||||||
#include QMK_KEYBOARD_H
|
|
||||||
#include "action_layer.h"
|
|
||||||
|
|
||||||
#define BASE 0
|
|
||||||
#define FN 1
|
|
||||||
|
|
||||||
#define CTL_SLSH CTL_T(KC_SLSH)
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
|
|
||||||
// 0: Base Layer
|
|
||||||
[BASE] = LAYOUT_all(
|
|
||||||
KC_ESC, 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_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,
|
|
||||||
CTL_SLSH, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT,
|
|
||||||
SC_LSPO, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_NO, SC_RSPC, KC_UP, MO(FN),
|
|
||||||
MO(FN), KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
|
|
||||||
),
|
|
||||||
// 1: Function Layer
|
|
||||||
[FN] = LAYOUT_all(
|
|
||||||
KC_GRV, 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_DEL, KC_DEL,
|
|
||||||
KC_TRNS, RGB_MOD, RGB_VAI, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL,
|
|
||||||
KC_TRNS, RGB_TOG, RGB_VAD, KC_MUTE, KC_VOLU, KC_VOLD, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_TRNS, KC_NO, KC_ENT,
|
|
||||||
KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_CIRC, KC_AMPR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_TRNS,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_SPC, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END
|
|
||||||
),
|
|
||||||
|
|
||||||
};
|
|
|
@ -1,35 +0,0 @@
|
||||||
/* Copyright 2020 Tomasz Adamczyk <siano@sianecki.pl>
|
|
||||||
*
|
|
||||||
* 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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
#include QMK_KEYBOARD_H
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
[0] = LAYOUT_tkl_ansi(
|
|
||||||
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_F13, KC_F14, KC_F15,
|
|
||||||
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_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_ENT,
|
|
||||||
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_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, MO(1),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
|
||||||
),
|
|
||||||
|
|
||||||
[1] = LAYOUT_tkl_ansi(
|
|
||||||
QK_BOOT, EE_CLR, DB_TOGG, 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, BL_TOGG, BL_UP,
|
|
||||||
KC_TRNS, RGB_TOG, RGB_VAI, RGB_MOD, RGB_HUI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BL_BRTG, BL_DOWN,
|
|
||||||
KC_TRNS, KC_TRNS, RGB_VAD, RGB_RMOD,RGB_HUD, 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 )
|
|
||||||
};
|
|
|
@ -1,13 +0,0 @@
|
||||||
# The Mac OS layout for xd87
|
|
||||||
|
|
||||||
With underglow and backlight support.
|
|
||||||
|
|
||||||
## Keymap
|
|
||||||
|
|
||||||
### Layer 0
|
|
||||||
|
|
||||||
![XD87 - mac_underglow keymap - layer 0](https://i.imgur.com/LXq8phy.png)
|
|
||||||
|
|
||||||
### Layer 1
|
|
||||||
|
|
||||||
![XD87 - mac_underglow_keymap - layer 1](https://i.imgur.com/swqwVaO.png)
|
|
|
@ -1,3 +0,0 @@
|
||||||
BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
|
|
||||||
COMMAND_ENABLE = no
|
|
||||||
RGBLIGHT_ENABLE = yes
|
|
|
@ -1,71 +0,0 @@
|
||||||
/* Copyright 2020 Jonathan Souter
|
|
||||||
*
|
|
||||||
* 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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include QMK_KEYBOARD_H
|
|
||||||
|
|
||||||
#define LT_ENT2 LT(2,KC_ENT)
|
|
||||||
|
|
||||||
#ifdef RGBLIGHT_ENABLE
|
|
||||||
void matrix_init_user(void) {
|
|
||||||
rgblight_disable();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
enum custom_keycodes {
|
|
||||||
ZEROZER,
|
|
||||||
};
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
|
|
||||||
[0] = 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_CALC, KC_PSCR, KC_HOME, KC_END, KC_PGUP, KC_PGDN,
|
|
||||||
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_BSLS, KC_DEL, KC_NUM, _______, KC_PMNS, KC_PSLS,
|
|
||||||
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_P7, KC_P8, KC_P9, KC_PAST,
|
|
||||||
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, _______, LT_ENT2, KC_P4, KC_P5, KC_P6, KC_PPLS,
|
|
||||||
KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_P1, KC_P2, KC_P3, KC_EQL,
|
|
||||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_P0, ZEROZER, KC_PDOT, KC_PENT
|
|
||||||
),
|
|
||||||
|
|
||||||
[1] = LAYOUT_all(
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, QK_BOOT, _______, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
_______, KC_MPLY, KC_VOLU, _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, KC_PSCR, _______, _______, _______, _______, _______,
|
|
||||||
_______, KC_MPRV, KC_MNXT, _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_RGHT, _______, _______, _______, _______, _______, _______,
|
|
||||||
_______, _______, KC_VOLD, _______, _______, _______, _______, _______, _______, _______, _______, KC_DOWN, _______, _______, _______, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
|
||||||
),
|
|
||||||
|
|
||||||
[2] = LAYOUT_all(
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______, _______, _______, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_END, _______, _______, _______, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGDN, _______, _______, _______, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
|
||||||
),
|
|
||||||
};
|
|
||||||
|
|
||||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
|
||||||
switch (keycode) {
|
|
||||||
case ZEROZER:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
SEND_STRING("00");
|
|
||||||
} else {
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
|
@ -1,30 +0,0 @@
|
||||||
#include QMK_KEYBOARD_H
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
|
|
||||||
/* 0: default */
|
|
||||||
LAYOUT_pingjunior(
|
|
||||||
KC_ESC, 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_GRV, 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_BSLS,
|
|
||||||
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_PENT, KC_ENT,
|
|
||||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(2),
|
|
||||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
|
|
||||||
),
|
|
||||||
/* 1: hhkb */
|
|
||||||
LAYOUT_pingjunior(
|
|
||||||
KC_ESC, 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_BSLS, KC_GRV,
|
|
||||||
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_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_PENT, KC_ENT,
|
|
||||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(2),
|
|
||||||
KC_NO, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, KC_NO
|
|
||||||
),
|
|
||||||
/* 2: fn */
|
|
||||||
LAYOUT_pingjunior(
|
|
||||||
_______, 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_INS, KC_DEL,
|
|
||||||
KC_CAPS, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______, KC_DEL,
|
|
||||||
_______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_RGHT, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, HF_TOGG, HF_DWLU, HF_DWLD, _______, _______, KC_DOWN, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______
|
|
||||||
),
|
|
||||||
|
|
||||||
};
|
|
|
@ -1,44 +0,0 @@
|
||||||
# The default keymap for pingjunior
|
|
||||||
|
|
||||||
### layer 0 - default
|
|
||||||
```
|
|
||||||
.--------------------------------------------------------------------------.
|
|
||||||
| esc| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | ` |bksp|
|
|
||||||
|--------------------------------------------------------------------------|
|
|
||||||
| tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ |
|
|
||||||
|--------------------------------------------------------------------------|
|
|
||||||
| caps | A | S | D | F | G | H | J | K | L | ; | ' |pent|enter|
|
|
||||||
|--------------------------------------------------------------------------|
|
|
||||||
| shift | Z | X | C | V | B | N | M | , | . | / | shift | fn |
|
|
||||||
|--------------------------------------------------------------------------|
|
|
||||||
| ctrl | gui| alt | space | alt | gui/ ctrl |
|
|
||||||
'--------------------------------------------------------------------------'
|
|
||||||
```
|
|
||||||
### layer 1 - hhkb
|
|
||||||
```
|
|
||||||
.--------------------------------------------------------------------------.
|
|
||||||
| esc| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
|
|
||||||
|--------------------------------------------------------------------------|
|
|
||||||
| tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | bksp |
|
|
||||||
|--------------------------------------------------------------------------|
|
|
||||||
| ctrl | A | S | D | F | G | H | J | K | L | ; | ' |pent|enter|
|
|
||||||
|--------------------------------------------------------------------------|
|
|
||||||
| shift | Z | X | C | V | B | N | M | , | . | / | shift | fn |
|
|
||||||
'--------------------------------------------------------------------------'
|
|
||||||
| alt| gui | space | gui | alt|
|
|
||||||
'------------------------------------------------------------'
|
|
||||||
```
|
|
||||||
### layer 2 - fn
|
|
||||||
```
|
|
||||||
,--------------------------------------------------------------------------.
|
|
||||||
| | f1 | f2 | f3 | f4 | f5 | f6 | f7 | f8 | f9 | f10| f11| f12| ins| del|
|
|
||||||
|--------------------------------------------------------------------------|
|
|
||||||
| caps | | up | | | | | | | | | up | | del |
|
|
||||||
|--------------------------------------------------------------------------|
|
|
||||||
| |left|down|rght| | | | | | |left|rght| | |
|
|
||||||
|--------------------------------------------------------------------------|
|
|
||||||
| | | | | |buzz| + | - | | |down| | |
|
|
||||||
|--------------------------------------------------------------------------|
|
|
||||||
| | | | | | | |
|
|
||||||
'--------------------------------------------------------------------------'
|
|
||||||
```
|
|
|
@ -1,165 +0,0 @@
|
||||||
/* MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2020 Richard Davey (Daveyr)
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include QMK_KEYBOARD_H
|
|
||||||
|
|
||||||
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
|
||||||
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
|
||||||
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
|
||||||
// entirely and just use numbers.
|
|
||||||
enum layers {
|
|
||||||
_BL = 0,
|
|
||||||
_NV,
|
|
||||||
_FN
|
|
||||||
};
|
|
||||||
|
|
||||||
enum custom_keycodes {
|
|
||||||
KC_DBL0 = SAFE_RANGE,
|
|
||||||
};
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
/* Keymap _BL: (Base Layer) Default Layer
|
|
||||||
* ,-------------------.
|
|
||||||
* | NV | / | * |-/FN|
|
|
||||||
* |----|----|----|----|
|
|
||||||
* | 7 | 8 | 9 | |
|
|
||||||
* |----|----|----| + |
|
|
||||||
* | 4 | 5 | 6 | |
|
|
||||||
* |----|----|----|----|
|
|
||||||
* | 1 | 2 | 3 | |
|
|
||||||
* |----|----|----| En |
|
|
||||||
* | 0 | 00 | . | |
|
|
||||||
* `-------------------'
|
|
||||||
*/
|
|
||||||
[_BL] = LAYOUT(
|
|
||||||
TG(_NV), KC_PSLS, KC_PAST, LT(_FN, KC_PMNS),
|
|
||||||
KC_P7, KC_P8, KC_P9,
|
|
||||||
KC_P4, KC_P5, KC_P6, KC_PPLS,
|
|
||||||
KC_P1, KC_P2, KC_P3,
|
|
||||||
KC_P0, KC_DBL0, KC_PDOT, KC_PENT
|
|
||||||
),
|
|
||||||
|
|
||||||
/* Keymap _NV: Navigation layer
|
|
||||||
* ,-------------------.
|
|
||||||
* |INS |BSPC| | |
|
|
||||||
* |----|----|----|----|
|
|
||||||
* |HOME| UP |PGUP| |
|
|
||||||
* |----|----|----| |
|
|
||||||
* |LEFT|DEL |RGHT| |
|
|
||||||
* |----|----|----|----|
|
|
||||||
* |END |DOWN|PGDN| |
|
|
||||||
* |----|----|----| |
|
|
||||||
* | | | | |
|
|
||||||
* `-------------------'
|
|
||||||
*/
|
|
||||||
[_NV] = LAYOUT(
|
|
||||||
KC_INS, KC_BSPC, XXXXXXX, TG(_NV),
|
|
||||||
KC_HOME, KC_UP, KC_PGUP,
|
|
||||||
KC_LEFT, KC_DEL, KC_RGHT, XXXXXXX,
|
|
||||||
KC_END, KC_DOWN, KC_PGDN,
|
|
||||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
|
|
||||||
),
|
|
||||||
|
|
||||||
/* Keymap _FN: RGB Function Layer
|
|
||||||
* ,-------------------.
|
|
||||||
* |RMOD|RGBP|RTOG| FN |
|
|
||||||
* |----|----|----|----|
|
|
||||||
* |HUD |HUI | | |
|
|
||||||
* |----|----|----| |
|
|
||||||
* |SAD |SAI | | |
|
|
||||||
* |----|----|----|----|
|
|
||||||
* |VAD |VAS | | |
|
|
||||||
* |----|----|----| |
|
|
||||||
* |RST | | | |
|
|
||||||
* `-------------------'
|
|
||||||
*/
|
|
||||||
[_FN] = LAYOUT(
|
|
||||||
RGB_MOD, RGB_M_P, RGB_TOG, _______,
|
|
||||||
RGB_HUD, RGB_HUI, XXXXXXX,
|
|
||||||
RGB_SAD, RGB_SAI, XXXXXXX, XXXXXXX,
|
|
||||||
RGB_VAD, RGB_VAI, XXXXXXX,
|
|
||||||
QK_BOOT, XXXXXXX, XXXXXXX, XXXXXXX
|
|
||||||
),
|
|
||||||
};
|
|
||||||
|
|
||||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
|
||||||
switch (keycode) {
|
|
||||||
case KC_DBL0:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
SEND_STRING("00");
|
|
||||||
} else {
|
|
||||||
// when keycode KC_DBL0 is released
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
};
|
|
||||||
|
|
||||||
#ifdef OLED_ENABLE
|
|
||||||
|
|
||||||
oled_rotation_t oled_init_user(oled_rotation_t rotation) {
|
|
||||||
return OLED_ROTATION_270; // flips the display 270 degrees
|
|
||||||
}
|
|
||||||
|
|
||||||
bool oled_task_user(void) {
|
|
||||||
// Host Keyboard Layer Status
|
|
||||||
oled_write_P(PSTR("Layer"), false);
|
|
||||||
switch (get_highest_layer(layer_state)) {
|
|
||||||
case _BL:
|
|
||||||
oled_write_ln_P(PSTR(" BAS"), false);
|
|
||||||
break;
|
|
||||||
case _NV:
|
|
||||||
oled_write_ln_P(PSTR(" NAV"), false);
|
|
||||||
break;
|
|
||||||
case _FN:
|
|
||||||
oled_write_ln_P(PSTR(" RGB"), false);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
// Or use the write_ln shortcut over adding '\n' to the end of your string
|
|
||||||
oled_write_ln_P(PSTR(" UND"), false);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Host Keyboard LED Status
|
|
||||||
led_t led_state = host_keyboard_led_state();
|
|
||||||
oled_write_P(PSTR("-----"), false);
|
|
||||||
oled_write_P(PSTR("Stats"), false);
|
|
||||||
oled_write_P(led_state.num_lock ? PSTR("num:*") : PSTR("num:."), false);
|
|
||||||
oled_write_P(led_state.caps_lock ? PSTR("cap:*") : PSTR("cap:."), false);
|
|
||||||
oled_write_P(led_state.scroll_lock ? PSTR("scr:*") : PSTR("scr:."), false);
|
|
||||||
|
|
||||||
// Host Keyboard RGB backlight status
|
|
||||||
oled_write_P(PSTR("-----"), false);
|
|
||||||
oled_write_P(PSTR("Light"), false);
|
|
||||||
|
|
||||||
static char led_buf[30];
|
|
||||||
snprintf(led_buf, sizeof(led_buf) - 1, "RGB:%cM: %2d\nh: %2ds: %2dv: %2d\n",
|
|
||||||
rgblight_is_enabled() ? '*' : '.', (uint8_t)rgblight_get_mode(),
|
|
||||||
(uint8_t)(rgblight_get_hue() / RGBLIGHT_HUE_STEP),
|
|
||||||
(uint8_t)(rgblight_get_sat() / RGBLIGHT_SAT_STEP),
|
|
||||||
(uint8_t)(rgblight_get_val() / RGBLIGHT_VAL_STEP));
|
|
||||||
oled_write(led_buf, false);
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
#endif
|
|
|
@ -1,10 +0,0 @@
|
||||||
#include QMK_KEYBOARD_H
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
[0] = LAYOUT(
|
|
||||||
LSFT(KC_O),
|
|
||||||
LSFT(KC_R),
|
|
||||||
LSFT(KC_U),
|
|
||||||
LSFT(KC_SLSH)
|
|
||||||
)
|
|
||||||
};
|
|
|
@ -1,9 +0,0 @@
|
||||||
# Drink Me - Caterpillar layout
|
|
||||||
|
|
||||||
> ‘Who are you?’ said the Caterpillar.
|
|
||||||
|
|
||||||
![Drink Me - Default layout](https://i.imgur.com/BHWNATB.png)
|
|
||||||
|
|
||||||
```
|
|
||||||
O, R, U, ?
|
|
||||||
```
|
|
|
@ -1,10 +0,0 @@
|
||||||
#include QMK_KEYBOARD_H
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
[0] = LAYOUT(
|
|
||||||
KC_LEFT,
|
|
||||||
KC_DOWN,
|
|
||||||
KC_UP,
|
|
||||||
KC_RIGHT
|
|
||||||
)
|
|
||||||
};
|
|
|
@ -1,13 +0,0 @@
|
||||||
# Drink Me - Cheshire Cat layout
|
|
||||||
|
|
||||||
> ‘Would you tell me, please, which way I ought to go from here?’
|
|
||||||
>
|
|
||||||
> ‘That depends a good deal on where you want to get to,’ said the Cat.
|
|
||||||
|
|
||||||
Cursor keys in VI layout.
|
|
||||||
|
|
||||||
![Drink Me - Default layout](https://i.imgur.com/E4cScrK.png)
|
|
||||||
|
|
||||||
```
|
|
||||||
Left, Down, Up, Right
|
|
||||||
```
|
|
|
@ -1,10 +0,0 @@
|
||||||
#include QMK_KEYBOARD_H
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
[0] = LAYOUT(
|
|
||||||
KC_SLEP,
|
|
||||||
KC_MUTE,
|
|
||||||
KC_VOLD,
|
|
||||||
KC_VOLU
|
|
||||||
)
|
|
||||||
};
|
|
|
@ -1,11 +0,0 @@
|
||||||
# Drink Me - Dormouse layout
|
|
||||||
|
|
||||||
> The Dormouse slowly opened his eyes. ‘I wasn’t asleep,’ he said in a hoarse, feeble voice: ‘I heard every word you fellows were saying.’
|
|
||||||
|
|
||||||
Sleep and volume control.
|
|
||||||
|
|
||||||
![Drink Me - Default layout](https://i.imgur.com/VQXH512.png)
|
|
||||||
|
|
||||||
```
|
|
||||||
Sleep, Mute, Volume down, Volume up
|
|
||||||
```
|
|
|
@ -1 +0,0 @@
|
||||||
EXTRAKEY_ENABLE = yes
|
|
|
@ -1 +0,0 @@
|
||||||
#define UNICODE_SELECTED_MODES UNICODE_MODE_LINUX, UNICODE_MODE_MACOS, UNICODE_MODE_WINDOWS, UNICODE_MODE_WINCOMPOSE
|
|
|
@ -1,67 +0,0 @@
|
||||||
#include QMK_KEYBOARD_H
|
|
||||||
|
|
||||||
|
|
||||||
enum td_keys {
|
|
||||||
TD_K0,
|
|
||||||
TD_K1,
|
|
||||||
TD_K2,
|
|
||||||
TD_K3
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
void td_spade_lnx (tap_dance_state_t *state, void *user_data) {
|
|
||||||
if (state->count == 1) {
|
|
||||||
register_unicode(0x2660); // ♠
|
|
||||||
} else {
|
|
||||||
set_unicode_input_mode(UNICODE_MODE_LINUX);
|
|
||||||
}
|
|
||||||
reset_tap_dance(state);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void td_diamond_osx (tap_dance_state_t *state, void *user_data) {
|
|
||||||
if (state->count == 1) {
|
|
||||||
register_unicode(0x2666); // ♦
|
|
||||||
} else {
|
|
||||||
set_unicode_input_mode(UNICODE_MODE_MACOS);
|
|
||||||
}
|
|
||||||
reset_tap_dance(state);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void td_club_win (tap_dance_state_t *state, void *user_data) {
|
|
||||||
if (state->count == 1) {
|
|
||||||
register_unicode(0x2663); // ♣
|
|
||||||
} else {
|
|
||||||
set_unicode_input_mode(UNICODE_MODE_WINDOWS);
|
|
||||||
}
|
|
||||||
reset_tap_dance(state);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void td_heart_winc (tap_dance_state_t *state, void *user_data) {
|
|
||||||
if (state->count == 1) {
|
|
||||||
register_unicode(0x2665); // ♥
|
|
||||||
} else {
|
|
||||||
set_unicode_input_mode(UNICODE_MODE_WINCOMPOSE);
|
|
||||||
}
|
|
||||||
reset_tap_dance(state);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
tap_dance_action_t tap_dance_actions[] = {
|
|
||||||
[TD_K0] = ACTION_TAP_DANCE_FN(td_spade_lnx),
|
|
||||||
[TD_K1] = ACTION_TAP_DANCE_FN(td_diamond_osx),
|
|
||||||
[TD_K2] = ACTION_TAP_DANCE_FN(td_club_win),
|
|
||||||
[TD_K3] = ACTION_TAP_DANCE_FN(td_heart_winc)
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
[0] = LAYOUT(
|
|
||||||
TD(TD_K0),
|
|
||||||
TD(TD_K1),
|
|
||||||
TD(TD_K2),
|
|
||||||
TD(TD_K3)
|
|
||||||
)
|
|
||||||
};
|
|
|
@ -1,20 +0,0 @@
|
||||||
# Drink Me - Queen layout
|
|
||||||
|
|
||||||
> ‘Off with her head!’ the Queen shouted at the top of her voice. Nobody moved.
|
|
||||||
>
|
|
||||||
> ‘Who cares for you?’ said Alice, (she had grown to her full size by this time.) ‘You’re nothing but a pack of cards!’
|
|
||||||
|
|
||||||
Single tap for unicode symbols for playing card suits:
|
|
||||||
|
|
||||||
![Drink Me - Queen layout single tap](https://i.imgur.com/xwHicLJ.png)
|
|
||||||
|
|
||||||
```
|
|
||||||
Spade, Diamond, Club, Heart
|
|
||||||
```
|
|
||||||
|
|
||||||
Double tap to change operating system unicode input method:
|
|
||||||
|
|
||||||
![Drink Me - Queen layout double tap](https://i.imgur.com/fBbzq55.png)
|
|
||||||
```
|
|
||||||
Linux, OSX, Windows, Wincompose
|
|
||||||
```
|
|
|
@ -1,2 +0,0 @@
|
||||||
UNICODE_ENABLE = yes
|
|
||||||
TAP_DANCE_ENABLE = yes
|
|
|
@ -1,50 +0,0 @@
|
||||||
/* Copyright 2019 Jianfei Wang
|
|
||||||
*
|
|
||||||
* 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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
#include QMK_KEYBOARD_H
|
|
||||||
|
|
||||||
// Defines names for use in layer keycodes and the keymap
|
|
||||||
enum layer_names {
|
|
||||||
_BASE,
|
|
||||||
_FN,
|
|
||||||
_COMMAND
|
|
||||||
};
|
|
||||||
|
|
||||||
#define FN_SPC LT(_FN, KC_SPC)
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
/* Base */
|
|
||||||
[_BASE] = LAYOUT(
|
|
||||||
QK_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_BSLS,
|
|
||||||
MO(_FN), 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
|
|
||||||
KC_LCTL, KC_LALT, KC_LGUI, FN_SPC, KC_SPC, KC_RGUI, KC_RALT, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
|
|
||||||
),
|
|
||||||
[_FN] = LAYOUT(
|
|
||||||
KC_GRV, 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_CAPS, KC_HOME, KC_UP, KC_END, KC_PGUP, _______, _______, _______, _______, _______, _______, KC_INS, KC_DEL, _______,
|
|
||||||
_______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, MO(_COMMAND),
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
|
|
||||||
),
|
|
||||||
[_COMMAND] = LAYOUT(
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, EE_CLR, QK_BOOT,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
|
||||||
)
|
|
||||||
};
|
|
|
@ -1,19 +0,0 @@
|
||||||
# thinxer keymap for Just60
|
|
||||||
|
|
||||||
This is a duplicate of the default keymap, but for a Just60 with the QMK DFU bootloader.
|
|
||||||
|
|
||||||
This layout is an ANSI layout with a Minila spacebar row.
|
|
||||||
|
|
||||||
```
|
|
||||||
+-------------------------------------------------------------------------+
|
|
||||||
| ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BACKSP |
|
|
||||||
+-------------------------------------------------------------------------+
|
|
||||||
| TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ |
|
|
||||||
+-------------------------------------------------------------------------+
|
|
||||||
| FN | A | S | D | F | G | H | J | K | L | ; | ' | RETURN |
|
|
||||||
+-------------------------------------------------------------------------+
|
|
||||||
| LSHIFT | Z | X | C | V | B | N | M | , | . | / | RSHIFT |
|
|
||||||
+-------------------------------------------------------------------------+
|
|
||||||
| LCMD | LALT | LGUI | FN | SPACE | RGUI | RALT | LEFT | DOWN | UP | RGHT |
|
|
||||||
+-------------------------------------------------------------------------+
|
|
||||||
```
|
|
|
@ -1 +0,0 @@
|
||||||
BOOTLOADER = qmk-dfu
|
|
|
@ -1,42 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright 2019 Ethan Durrant (emdarcher)
|
|
||||||
|
|
||||||
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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include QMK_KEYBOARD_H
|
|
||||||
|
|
||||||
enum layer_names {
|
|
||||||
_BL,
|
|
||||||
_FL
|
|
||||||
};
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
//Base Layer
|
|
||||||
[_BL] = LAYOUT_all(
|
|
||||||
KC_ESC, 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_GRV, 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_BSLS,
|
|
||||||
LT(_FL, 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_NO, MT(MOD_RCTL, KC_ENT),
|
|
||||||
SC_LSPO, SC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SC_RSPC, KC_UP, KC_DEL,
|
|
||||||
KC_LCTL, KC_LGUI, KC_LALT, MO(_FL), KC_SPC, MO(_FL), KC_RALT, KC_APP, KC_LEFT, KC_DOWN, KC_RGHT
|
|
||||||
),
|
|
||||||
//FN Layer
|
|
||||||
[_FL] = LAYOUT_all(
|
|
||||||
KC_TILD, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, QK_BOOT,
|
|
||||||
_______, _______, KC_HOME, KC_UP, KC_END, KC_PGUP, _______, NK_TOGG, KC_PSCR, KC_SCRL, KC_PAUS, _______, BL_STEP, BL_TOGG,
|
|
||||||
_______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______, KC_INS, KC_HOME, KC_PGUP, KC_BSPC, _______, _______, _______,
|
|
||||||
_______, _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_VAD, RGB_VAI, _______, KC_DEL, KC_END, KC_PGDN, _______, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______, KC_ENT, _______, _______, _______, _______, _______, _______
|
|
||||||
),
|
|
||||||
};
|
|
|
@ -1,11 +0,0 @@
|
||||||
Basically layout like on Filco Minila board, found here: https://geekboards.ru/product/filco-minila
|
|
||||||
|
|
||||||
There is one single function layer that can be accessed by holding either FN key or Caps Lock. Enter is also a Right Control when held down. Shifts are also '(' and ')' respectively when tapped.
|
|
||||||
|
|
||||||
You can control underglow RGBs:
|
|
||||||
|
|
||||||
* FN+Z - Toggle
|
|
||||||
* FN+X - Effect
|
|
||||||
* FN+C - Color
|
|
||||||
* FN+V - Brightness lower
|
|
||||||
* FN+B - Brightness higher
|
|
|
@ -1,22 +0,0 @@
|
||||||
/* Copyright 2018 MechMerlin
|
|
||||||
*
|
|
||||||
* 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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
// Enable cmd-option-escape on mac.
|
|
||||||
#define GRAVE_ESC_ALT_OVERRIDE
|
|
||||||
|
|
||||||
// place overrides here
|
|
|
@ -1,489 +0,0 @@
|
||||||
/* Copyright 2019 Yonatan Zunger
|
|
||||||
*
|
|
||||||
* 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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
#include QMK_KEYBOARD_H
|
|
||||||
#include <assert.h>
|
|
||||||
|
|
||||||
// This keymap is designed to make it easy to type in a wide variety of languages, as well as
|
|
||||||
// generate mathematical symbols (à la Space Cadet).
|
|
||||||
//
|
|
||||||
// LAYER MAGIC (aka, typing in many alphabets)
|
|
||||||
// This keyboard has three "base" layers: QWERTY, GREEK, and CADET. The GREEK and CADET layers
|
|
||||||
// are actually full of Unicode points, and so which point they generate depends on things like
|
|
||||||
// whether the shift key is down. To handle this, each of those layers is actually *two* layers, one
|
|
||||||
// with and one without shift. In our main loop, we manage modifier state detection, as well as
|
|
||||||
// layer switch detection, and pick the right layer on the fly.
|
|
||||||
// Layers are selected with a combination of three keys. The "Greek" and "Cadet" keys act like
|
|
||||||
// modifiers: When held down, they transiently select the indicated base layer. The "Layer Lock" key
|
|
||||||
// locks the value of the base layer at whatever is currently held; so e.g., if you hold Greek +
|
|
||||||
// Layer Lock, you'll stay in Greek mode until you hit Layer Lock again without any of the mods
|
|
||||||
// held.
|
|
||||||
// TODO: This system of layer selection is nice for math, but it's not very nice for actually
|
|
||||||
// typing in multiple languages. It seems like a better plan will be to reserve one key for each
|
|
||||||
// base layer -- maybe fn + F(n) -- which can either be held as a modifier or tapped to switch
|
|
||||||
// layers. That will open up adding some more languages, like Yiddish, but to do this effectively
|
|
||||||
// we'll need to find a good UI with which to show the currently selected layer. Need to check what
|
|
||||||
// the melody96 has in the way of outputs (LEDs, sound, etc).
|
|
||||||
//
|
|
||||||
// ACCENT MAGIC (aka, typing conveniently in Romance languages)
|
|
||||||
// We want to support easy typing of diacritical marks. We can't rely on the host OS for this,
|
|
||||||
// because (e.g.) on MacOS, to make any of the other stuff work, we need to be using the Unicode
|
|
||||||
// input method at the OS level, which breaks all the normal accent stuff on that end. So we do it
|
|
||||||
// ourselves. Accents can actually be invoked in two different ways: one fast and very compatible,
|
|
||||||
// one very versatile but with occasional compatibility problems.
|
|
||||||
//
|
|
||||||
// THE MAIN WAY: You can hit one of the "accent request" key patterns immediately *before* typing
|
|
||||||
// a letter to be accented. It will emit the corresponding accented Unicode. For example, you can
|
|
||||||
// hit fn-e to request an acute accent, followed by i, and it will output í, U+00ED LATIN SMALL
|
|
||||||
// LETTER I WITH ACUTE. These "combined characters" are in Unicode normal form C (NFKC), which is
|
|
||||||
// important because many European websites and apps, in particular, tend to behave very badly
|
|
||||||
// (misunderstanding and/or crashing) when presented with characters in other forms! The catch is
|
|
||||||
// that this only works for the various combinations of letters and accents found in the Latin-1
|
|
||||||
// supplement block of Unicode -- basically, things you need for Western European languages.
|
|
||||||
//
|
|
||||||
// (NB: If you make an accent request followed by a letter which can't take the corresponding
|
|
||||||
// accent, it will output the uncombined form of the accent followed by whatever you typed; so
|
|
||||||
// e.g., if you hit fn-e followed by f, it will output ´f, U+00B4 ACUTE ACCENT followed by an
|
|
||||||
// ordinary f. This is very similar to the default behavior of MacOS.)
|
|
||||||
//
|
|
||||||
// THE FLEXIBLE WAY: If you hit the accent request with a shift -- e.g., fn-shift-e -- it will
|
|
||||||
// instead immediately output the corresponding *combining* Unicode accent mark, which will modify
|
|
||||||
// the *previous* character you typed. For example, if you type i followed by fn-shift-e, it will
|
|
||||||
// generate í. But don't be fooled by visual similarity: unlike the previous example, this one is
|
|
||||||
// an ordinary i followed by U+0301 COMBINING ACUTE ACCENT. It's actually *two symbols*, and this
|
|
||||||
// is Unicode normal form D (NFKD). Unlike NFKC, there are NFKD representations of far more
|
|
||||||
// combinations of letters and accents, and it's easy to add more of these if you need. (The NFKC
|
|
||||||
// representation of such combinations is identical to their NFKD representation)
|
|
||||||
//
|
|
||||||
// Programs that try to compare Unicode strings *should* first normalize them by converting them
|
|
||||||
// all into one normal form or another, and there are functions in every programming language to
|
|
||||||
// do this -- e.g., JavaScript's string.normalize() -- but lots of programmers fail to understand
|
|
||||||
// this, and so write code that massively freaks out when it encounters the wrong form.
|
|
||||||
//
|
|
||||||
// The current accent request codes are modeled on the ones in MacOS.
|
|
||||||
//
|
|
||||||
// fn+` Grave accent (`)
|
|
||||||
// fn+e Acute accent (´)
|
|
||||||
// fn+i Circumflex (^)
|
|
||||||
// fn+u Diaresis / umlaut / trema (¨)
|
|
||||||
// fn+c Cedilla (¸)
|
|
||||||
// fn+n Tilde (˜)
|
|
||||||
//
|
|
||||||
// Together, these functions make for a nice "polyglot" keyboard: one that can easily type in a wide
|
|
||||||
// variety of languages, which is very useful for people who, well, need to type in a bunch of
|
|
||||||
// languages.
|
|
||||||
//
|
|
||||||
// The major TODOs are:
|
|
||||||
// - Update the layer selection logic (and add visible layer cues);
|
|
||||||
// - Factor the code below so that the data layers are more clearly separated from the code logic,
|
|
||||||
// so that other users of this keymap can easily add whichever alphabets they need without
|
|
||||||
// having to deeply understand the implementation.
|
|
||||||
|
|
||||||
|
|
||||||
enum custom_keycodes {
|
|
||||||
// We provide special layer management keys:
|
|
||||||
// GREEK triggers the Greek (aka "Front") layer, or the SHIFTGREEK layer when shift is held.
|
|
||||||
// (Because we use Unicode, we need to implement shift-handling at the firmware level,
|
|
||||||
// rather than the OS level like we do in the QWERTY layer)
|
|
||||||
// CADET or GREEK+ALT triggers the Cadet (aka "Top") layer, or the SHIFTCADET layer when
|
|
||||||
// shift is held.
|
|
||||||
// LAYER_LOCK locks the "base" layer (i.e., QWERTY, GREEK, or CADET) to the value which is
|
|
||||||
// pressed at the moment that it is being released. When a layer lock is set, the
|
|
||||||
// analogous layer modifier key is reversed; e.g., if you lock the GREEK layer, then the
|
|
||||||
// GREEK button bounces you back to QWERTY.
|
|
||||||
//
|
|
||||||
// We also parse the shift, alt, and caps lock keys to provide management of those which is
|
|
||||||
// compatible with these various layers.
|
|
||||||
KC_GREEK = SAFE_RANGE,
|
|
||||||
KC_CADET,
|
|
||||||
KC_LAYER_LOCK,
|
|
||||||
|
|
||||||
// These are the keycodes generated by the various "accent request" keystrokes.
|
|
||||||
KC_ACCENT_START,
|
|
||||||
KC_CGRV = KC_ACCENT_START, // Grave accent
|
|
||||||
KC_CAGU, // Acute accent
|
|
||||||
KC_CDIA, // Diaresis / umlaut / trema
|
|
||||||
KC_CCIR, // Circumflex
|
|
||||||
KC_CCED, // Cedilla
|
|
||||||
KC_CTIL, // Tilde
|
|
||||||
KC_ACCENT_END,
|
|
||||||
};
|
|
||||||
|
|
||||||
enum layers_keymap {
|
|
||||||
_QWERTY = 0,
|
|
||||||
_FUNCTION,
|
|
||||||
|
|
||||||
_GREEK,
|
|
||||||
_SHIFTGREEK,
|
|
||||||
_CADET,
|
|
||||||
_SHIFTCADET,
|
|
||||||
};
|
|
||||||
|
|
||||||
// This is so that H(xxxx) has the same width as _______, which makes the grids more legible.
|
|
||||||
#define H(x) UC(0x##x)
|
|
||||||
#define MO_FN MO(_FUNCTION)
|
|
||||||
#define KC_LLCK KC_LAYER_LOCK
|
|
||||||
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
// NB: Using GESC for escape in the QWERTY layer as a temporary hack because I messed up the
|
|
||||||
// switch on the KC_GRV key; change back to KC_ESC once this is fixed.
|
|
||||||
[_QWERTY] = LAYOUT_96_ansi(
|
|
||||||
QK_GESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME, KC_END, KC_PGUP, KC_PGDN, KC_MPLY, KC_BRK,
|
|
||||||
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_LLCK, 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_P7, KC_P8, KC_P9,
|
|
||||||
KC_LCTL, 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_LALT, KC_LGUI, KC_SPC, MO_FN, KC_GREEK,KC_CADET,KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT),
|
|
||||||
/* The Greek layers. Shown here are the QWERTY layer (for visual reference) and the two Greek
|
|
||||||
* layers.
|
|
||||||
* ,----------------------------------------------------------------------------
|
|
||||||
* | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|HOM|END|PGU|PGD|MUT|BRK| QWERTY
|
|
||||||
* | ` | ₁ | ₂ | ₃ | ₄ | ₅ | ₆ | ₇ | ₈ | ₉ | ₀ | ₋ | ₊ | ₍ | ₎ | | | | | SHIFTGREEK
|
|
||||||
* | ` | ¹ | ² | ³ | ⁴ | ⁵ | ⁶ | ⁷ | ⁸ | ⁹ | ⁰ | ⁻ | ⁺ | ⁽ | ⁾ | | | | | GREEK
|
|
||||||
* |---------------------------------------------------------------------------|
|
|
||||||
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | + | BKSPC |LCK| / | * | - |
|
|
||||||
* | ` | ¿ | | € | | | | | | | | | ≁ | BKSPC |LCK| | ⊗ | |
|
|
||||||
* | | | | | | | | | | | | ∝ | ∼ | BKSPC |LCK| ⊘ | ⊙ | ⊖ |
|
|
||||||
* |---------------------------------------------------------------------------|
|
|
||||||
* | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | 7 | 8 | 9 | |
|
|
||||||
* | | Θ | Ω | Ε | Ρ | Τ | Ψ | Υ | Ι | Ο | Π | | | | | | | |
|
|
||||||
* | | θ | ω | ε | ρ | τ | ψ | υ | ι | ο | π | | | | | | | |
|
|
||||||
* |-----------------------------------------------------------------------| + |
|
|
||||||
* | CTRL | A | S | D | F | G | H | J | K | L | ; | ' | RET | 4 | 5 | 6 | ⊕ |
|
|
||||||
* | CTRL | Α | Σ | Δ | Φ | Γ | Η | | Κ | Λ | … | ∴ | RET | | | | |
|
|
||||||
* | CTRL | α | σ | δ | φ | γ | η | ϑ | κ | λ | ⋯ | ⋅ | RET | | | | |
|
|
||||||
* |-----------------------------------------------------------------------|---|
|
|
||||||
* | SHIFT | Z | X | C | V | B | N | M | , | . | / |SHFT | ↑ | 1 | 2 | 3 | |
|
|
||||||
* | SHIFT | Ζ | Ξ | Χ | ✔ | Β | Ν | Μ | ≲ | ≳ | |SHFT | | | | | |
|
|
||||||
* | SHIFT | ζ | ξ | χ | ς | β | ν | μ | ≪ | ≫ | ∫ |SHFT | | | | | |
|
|
||||||
* |-----------------------------------------------------------------------|ENT|
|
|
||||||
* | CTL | ALT| CMD| SPACE | α | β | γ | ← | ↓ | → | 0 | . | |
|
|
||||||
* | CTL | ALT| CMD| SPACE | α | β | γ | | | | | | |
|
|
||||||
* | CTL | ALT| CMD| SPACE | α | β | γ | | | | | | |
|
|
||||||
* `---------------------------------------------------------------------------'
|
|
||||||
*/
|
|
||||||
[_GREEK] = LAYOUT_96_ansi(
|
|
||||||
KC_GRV, H(00b9), H(00b2), H(00b3), H(2074), H(2075), H(2076), H(2077), H(2078), H(2079), H(2070), H(207b), H(207a), H(207d), H(207e), XXXXXXX, XXXXXXX, XXXXXXX, _______,
|
|
||||||
KC_GRV, _______, _______, _______, _______, _______, _______, _______, H(00b0), _______, _______, H(221d), H(223c), _______, _______, H(2298), H(2299), H(2296),
|
|
||||||
_______, H(03b8), H(03c9), H(03b5), H(03c1), H(03c4), H(03c8), H(03c5), H(03b9), H(03bf), H(03c0), KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9,
|
|
||||||
_______, H(03b1), H(03c3), H(03b4), H(03c6), H(03b3), H(03b7), H(03d1), H(03ba), H(03bb), H(22ef), H(22c5), _______, KC_P4, KC_P5, KC_P6, H(2295),
|
|
||||||
_______, H(03b6), H(03be), H(03c7), H(03c2), H(03b2), H(03bd), H(03bc), H(226a), H(226b), H(222b), _______, _______, KC_P1, KC_P2, KC_P3,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_P0, KC_PDOT, KC_PENT),
|
|
||||||
[_SHIFTGREEK] = LAYOUT_96_ansi(
|
|
||||||
KC_GRV, H(2081), H(2082), H(2083), H(2084), H(2085), H(2086), H(2087), H(2088), H(2089), H(2080), H(208b), H(208a), H(208d), H(208e), XXXXXXX, XXXXXXX, XXXXXXX, _______,
|
|
||||||
KC_GRV, H(00bf), _______, H(20ac), _______, _______, _______, _______, _______, _______, _______, XXXXXXX, H(2241), _______, _______, XXXXXXX, H(2297), XXXXXXX,
|
|
||||||
_______, H(0398), H(03a9), H(0395), H(03a1), H(03a4), H(03a8), H(03a5), H(0399), H(039f), H(03a0), KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9,
|
|
||||||
_______, H(0391), H(03a3), H(0394), H(03a6), H(0393), H(0397), XXXXXXX, H(039a), H(039b), H(2026), H(2234), _______, KC_P4, KC_P5, KC_P6, H(2295),
|
|
||||||
_______, H(0396), H(039e), H(03a7), H(2714), H(0392), H(039d), H(039c), H(2272), H(2273), XXXXXXX, _______, _______, KC_P1, KC_P2, KC_P3,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_P0, KC_PDOT, KC_PENT),
|
|
||||||
/* The Cadet layers. Again, we show the QWERTY layer and the two cadet layers.
|
|
||||||
* ,----------------------------------------------------------------------------
|
|
||||||
* | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|HOM|END|PGU|PGD|MUT|BRK| QWERTY
|
|
||||||
* | ∅ | | | | | | | | | | | | | | | | | | | SHIFTCADET
|
|
||||||
* | ¬ | | | | | | | | | | | | | | | | | | | CADET
|
|
||||||
* |---------------------------------------------------------------------------|
|
|
||||||
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | + | BKSPC |LCK| / | * | - |
|
|
||||||
* | ` | ¡ | | £ | | | | | ° | | | * | ∓ | BKSPC |LCK| | | |
|
|
||||||
* | | | | | | | | | | | | | ± | BKSPC |LCK| | × | |
|
|
||||||
* |---------------------------------------------------------------------------|
|
|
||||||
* | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | 7 | 8 | 9 | |
|
|
||||||
* | | ℚ | | | ℝ | ⊆ | ⊇ | | ℵ | ∄ | | ∉ | | | * | * | * | |
|
|
||||||
* | | ∧ | ∨ | ∩ | ∪ | ⊂ | ⊃ | ∀ | ∞ | ∃ | ∂ | ∈ | | | * | * | * | | [1]
|
|
||||||
* |-----------------------------------------------------------------------| + |
|
|
||||||
* | CTRL | A | S | D | F | G | H | J | K | L | ; | ' | RET | 4 | 5 | 6 | ⊕ |
|
|
||||||
* | CTRL | Å | | ∇ | | ⇑ | ⇓ | ⇐ | ⇒ | ⇔ | | | RET | * | * | * | |
|
|
||||||
* | CTRL | ⟘ | ⊤ | ⊢ | ⊣ | ↑ | ↓ | ← | → | ↔ | | | RET | * | * | * | | [1]
|
|
||||||
* |-----------------------------------------------------------------------|---|
|
|
||||||
* | SHIFT | Z | X | C | V | B | N | M | , | . | / |SHFT | ↑ | 1 | 2 | 3 | |
|
|
||||||
* | SHIFT | ℤ | ℂ | | ≉ | ≢ | ℕ | | | | |SHFT | | * | * | * | |
|
|
||||||
* | SHIFT | | ≠ | | ≈ | ≡ | ≤ | ≥ | | | ÷ |SHFT | | * | * | * | | [1]
|
|
||||||
* |-----------------------------------------------------------------------|ENT|
|
|
||||||
* | CTL | ALT| CMD| SPACE | α | β | γ | ← | ↓ | → | 0 | . | |
|
|
||||||
* | CTL | ALT| CMD| SPACE | α | β | γ | | | | | | |
|
|
||||||
* | CTL | ALT| CMD| SPACE | α | β | γ | | | | | | |
|
|
||||||
* `---------------------------------------------------------------------------'
|
|
||||||
* [1] CADET + numpad moves the mouse. SHIFT+CADET+NUMPAD moves it more quickly. CADET+5
|
|
||||||
* clicks the mouse, and SHIFT+CADET+FIVE right-clicks.
|
|
||||||
*/
|
|
||||||
[_CADET] = LAYOUT_96_ansi(
|
|
||||||
H(00AC), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
|
|
||||||
KC_GRV, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, H(00b1), _______, _______, XXXXXXX, H(00d7), XXXXXXX,
|
|
||||||
_______, H(2227), H(2228), H(2229), H(222a), H(2282), H(2283), H(2200), H(221e), H(2203), H(2202), H(2208), XXXXXXX, XXXXXXX, KC_P7, KC_P8, KC_P9,
|
|
||||||
_______, H(22a5), H(22a4), H(22a2), H(22a3), H(2191), H(2193), H(2190), H(2192), H(2194), XXXXXXX, XXXXXXX, _______, KC_P4, KC_P5, KC_P6, XXXXXXX,
|
|
||||||
_______, XXXXXXX, H(2260), XXXXXXX, H(2248), H(2261), H(2264), H(2265), XXXXXXX, XXXXXXX, H(00f7), _______, _______, KC_P1, KC_P2, KC_P3,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_P0, KC_PDOT, KC_PENT),
|
|
||||||
[_SHIFTCADET] = LAYOUT_96_ansi(
|
|
||||||
H(2205), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
|
|
||||||
KC_GRV, H(00a1), XXXXXXX, H(00a3), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, H(2213), _______, _______, XXXXXXX, XXXXXXX, XXXXXXX,
|
|
||||||
_______, H(211a), XXXXXXX, XXXXXXX, H(211d), H(2286), H(2287), XXXXXXX, H(2135), H(2204), XXXXXXX, H(2209), XXXXXXX, XXXXXXX, KC_P7, KC_P8, KC_P9,
|
|
||||||
_______, H(212b), XXXXXXX, H(2207), XXXXXXX, H(21d1), H(21d3), H(21d0), H(21d2), H(21d4), XXXXXXX, XXXXXXX, _______, KC_P4, KC_P5, KC_P6, XXXXXXX,
|
|
||||||
_______, H(2124), H(2102), XXXXXXX, H(2249), H(2262), H(2115), XXXXXXX, XXXXXXX, XXXXXXX, H(00f7), _______, _______, KC_P1, KC_P2, KC_P3,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_P0, KC_PDOT, KC_PENT),
|
|
||||||
|
|
||||||
// Function layer is mostly for keyboard meta-control operations, but also contains the combining
|
|
||||||
// accent marks. These are deliberately placed to match where the analogous controls go on Mac OS.
|
|
||||||
[_FUNCTION] = LAYOUT_96_ansi(
|
|
||||||
KC_CGRV, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, QK_BOOT,
|
|
||||||
KC_CGRV, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
_______, _______, _______, KC_CAGU, _______, _______, _______, KC_CDIA, KC_CCIR, _______, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
_______, _______, _______, UC_MAC, UC_LINX, UC_WIN, UC_BSD, UC_WINC, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
_______, _______, _______, KC_CCED, _______, _______, KC_CTIL, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
|
|
||||||
};
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
// Accent implementation
|
|
||||||
//
|
|
||||||
// In the body of process_record_user, we store an "accent_request", which is the accent keycode if
|
|
||||||
// one was just selected, or zero otherwise. When the *next* key is hit, we look up whether the
|
|
||||||
// accent request plus that next keycode (plus the state of the shift key) together amount to an
|
|
||||||
// interesting combined (NFKC) character, and if so, emit it; otherwise, we emit the accent as a
|
|
||||||
// separate character and then process the next key normally. The resulting UI behavior is similar
|
|
||||||
// to that of the combining accent keys in MacOS.
|
|
||||||
//
|
|
||||||
// We store two arrays, depending on whether shift is or isn't held. Each is two-dimensional, with
|
|
||||||
// its outer key by the next keycode struck, and the inner key by the accent requested. The outer
|
|
||||||
// array has KC_Z + 1 as its upper bound, so that we can save memory by only coding alphabetic keys.
|
|
||||||
// The contents are either Unicode code points, or zero to indicate that we don't have a point for
|
|
||||||
// this combination.
|
|
||||||
|
|
||||||
#define KC_NUM_ACCENTS (KC_ACCENT_END - KC_ACCENT_START)
|
|
||||||
#define KC_NUM_SLOTS (KC_Z + 1)
|
|
||||||
|
|
||||||
const uint16_t PROGMEM unshifted_accents[KC_NUM_SLOTS][KC_NUM_ACCENTS] = {
|
|
||||||
// KC_CGRV, KC_CAGU, KC_CDIA, KC_CCIR, KC_CCED, KC_CTIL
|
|
||||||
[KC_A] = { 0x00e0, 0x00e1, 0x00e4, 0x00e2, 0, 0x00e3 },
|
|
||||||
[KC_E] = { 0x00e8, 0x00e9, 0x00eb, 0x00ea, 0, 0 },
|
|
||||||
[KC_I] = { 0x00ec, 0x00ed, 0x00ef, 0x00ee, 0, 0 },
|
|
||||||
[KC_O] = { 0x00f2, 0x00f3, 0x00f6, 0x00f4, 0, 0x00f5 },
|
|
||||||
[KC_U] = { 0x00f9, 0x00fa, 0x00fc, 0x00fb, 0, 0 },
|
|
||||||
[KC_Y] = { 0, 0, 0x00ff, 0, 0, 0 },
|
|
||||||
[KC_N] = { 0, 0, 0, 0, 0, 0x00f1 },
|
|
||||||
[KC_C] = { 0, 0, 0, 0, 0x00e7, 0 },
|
|
||||||
};
|
|
||||||
|
|
||||||
const uint16_t PROGMEM shifted_accents[KC_NUM_SLOTS][KC_NUM_ACCENTS] = {
|
|
||||||
// KC_CGRV, KC_CAGU, KC_CDIA, KC_CCIR, KC_CCED, KC_CTIL
|
|
||||||
[KC_A] = { 0x00c0, 0x00c1, 0x00c4, 0x00c2, 0, 0x00c3 },
|
|
||||||
[KC_E] = { 0x00c8, 0x00c9, 0x00cb, 0x00ca, 0, 0 },
|
|
||||||
[KC_I] = { 0x00cc, 0x00cd, 0x00cf, 0x00ce, 0, 0 },
|
|
||||||
[KC_O] = { 0x00d2, 0x00d3, 0x00d6, 0x00d4, 0, 0x00d5 },
|
|
||||||
[KC_U] = { 0x00d9, 0x00da, 0x00dc, 0x00db, 0, 0 },
|
|
||||||
[KC_Y] = { 0, 0, 0x00df, 0, 0, 0 },
|
|
||||||
[KC_N] = { 0, 0, 0, 0, 0, 0x00d1 },
|
|
||||||
[KC_C] = { 0, 0, 0, 0, 0x00c7, 0 },
|
|
||||||
};
|
|
||||||
|
|
||||||
// The uncombined and combined forms of the accents, for when we want to emit them as single
|
|
||||||
// characters.
|
|
||||||
const uint16_t PROGMEM uncombined_accents[KC_NUM_ACCENTS] = {
|
|
||||||
[KC_CGRV - KC_ACCENT_START] = 0x0060,
|
|
||||||
[KC_CAGU - KC_ACCENT_START] = 0x00b4,
|
|
||||||
[KC_CDIA - KC_ACCENT_START] = 0x00a8,
|
|
||||||
[KC_CCIR - KC_ACCENT_START] = 0x005e,
|
|
||||||
[KC_CCED - KC_ACCENT_START] = 0x00b8,
|
|
||||||
[KC_CTIL - KC_ACCENT_START] = 0x02dc,
|
|
||||||
};
|
|
||||||
|
|
||||||
const uint16_t PROGMEM combined_accents[KC_NUM_ACCENTS] = {
|
|
||||||
[KC_CGRV - KC_ACCENT_START] = 0x0300,
|
|
||||||
[KC_CAGU - KC_ACCENT_START] = 0x0301,
|
|
||||||
[KC_CDIA - KC_ACCENT_START] = 0x0308,
|
|
||||||
[KC_CCIR - KC_ACCENT_START] = 0x0302,
|
|
||||||
[KC_CCED - KC_ACCENT_START] = 0x0327,
|
|
||||||
[KC_CTIL - KC_ACCENT_START] = 0x0303,
|
|
||||||
};
|
|
||||||
|
|
||||||
// This function manages keypresses that happen after an accent has been selected by an earlier
|
|
||||||
// keypress.
|
|
||||||
// Args:
|
|
||||||
// accent_key: The accent key which was earlier selected. This must be in the range
|
|
||||||
// [KC_ACCENT_START, KC_ACCENT_END).
|
|
||||||
// keycode: The keycode which was just pressed.
|
|
||||||
// is_shifted: The current shift state (as set by a combination of shift and caps lock)
|
|
||||||
// force_no_accent: If true, we're in a situation where we want to force there to be no
|
|
||||||
// accent combination -- if e.g. we're in a non-QWERTY layer, or if other modifier keys
|
|
||||||
// are held.
|
|
||||||
//
|
|
||||||
// Returns true if the keycode has been completely handled by this function (and so should not be
|
|
||||||
// processed further by process_record_user) or false otherwise.
|
|
||||||
bool process_key_after_accent(
|
|
||||||
uint16_t accent_key,
|
|
||||||
uint16_t keycode,
|
|
||||||
bool is_shifted,
|
|
||||||
bool force_no_accent
|
|
||||||
) {
|
|
||||||
assert(accent_key >= KC_ACCENT_START);
|
|
||||||
assert(accent_key < KC_ACCENT_END);
|
|
||||||
const int accent_index = accent_key - KC_ACCENT_START;
|
|
||||||
|
|
||||||
// If the keycode is outside A..Z, or force_no_accent is set, we know we shouldn't even bother
|
|
||||||
// with a table lookup.
|
|
||||||
if (keycode <= KC_Z && !force_no_accent) {
|
|
||||||
// Pick the correct array. Because this is progmem, we're going to need to do the
|
|
||||||
// two-dimensional array indexing by hand, and so we just cast it to a single-dimensional array.
|
|
||||||
const uint16_t *points = (const uint16_t*)(is_shifted ? shifted_accents : unshifted_accents);
|
|
||||||
const uint16_t code_point = pgm_read_word_near(points + KC_NUM_ACCENTS * keycode + accent_index);
|
|
||||||
if (code_point) {
|
|
||||||
register_unicode(code_point);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// If we get here, there was no accent match. Emit the accent as its own character, and then let
|
|
||||||
// the caller figure out what to do next.
|
|
||||||
register_unicode(pgm_read_word_near(uncombined_accents + accent_index));
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Layer bitfields.
|
|
||||||
#define GREEK_LAYER (1UL << _GREEK)
|
|
||||||
#define SHIFTGREEK_LAYER (1UL << _SHIFTGREEK)
|
|
||||||
#define CADET_LAYER (1UL << _CADET)
|
|
||||||
#define SHIFTCADET_LAYER (1UL << _SHIFTCADET)
|
|
||||||
// The layers we don't touch.
|
|
||||||
#define LAYER_MASK ~(GREEK_LAYER|SHIFTGREEK_LAYER|CADET_LAYER|SHIFTCADET_LAYER)
|
|
||||||
|
|
||||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
|
||||||
// We track these persistent globals and manage them on our own, rather than trying to rely on
|
|
||||||
// get_mods or the like, because this function is called *before* that's updated!
|
|
||||||
static bool shift_held = false;
|
|
||||||
static bool alt_held = false;
|
|
||||||
static bool ctrl_held = false;
|
|
||||||
static bool super_held = false;
|
|
||||||
static bool greek_held = false;
|
|
||||||
static bool cadet_held = false;
|
|
||||||
|
|
||||||
// These are where we remember the values of lock states.
|
|
||||||
static bool shift_lock = false;
|
|
||||||
static int layer_lock = _QWERTY;
|
|
||||||
|
|
||||||
// The accent request, or zero if there isn't one.
|
|
||||||
static uint16_t accent_request = 0;
|
|
||||||
|
|
||||||
// If this is set to true, don't trigger any handling of pending accent requests. That's what we
|
|
||||||
// want to do if e.g. the user just hit the shift key or something.
|
|
||||||
bool ignore_accent_change = !record->event.pressed;
|
|
||||||
|
|
||||||
// Step 1: Process any modifier key state changes, so we can maintain that state.
|
|
||||||
if (keycode == KC_LSFT || keycode == KC_RSFT) {
|
|
||||||
shift_held = record->event.pressed;
|
|
||||||
ignore_accent_change = true;
|
|
||||||
} else if (keycode == KC_LALT || keycode == KC_RALT) {
|
|
||||||
alt_held = record->event.pressed;
|
|
||||||
ignore_accent_change = true;
|
|
||||||
} else if (keycode == KC_LCTL || keycode == KC_RCTL) {
|
|
||||||
ctrl_held = record->event.pressed;
|
|
||||||
ignore_accent_change = true;
|
|
||||||
} else if (keycode == KC_LGUI || keycode == KC_RGUI) {
|
|
||||||
super_held = record->event.pressed;
|
|
||||||
ignore_accent_change = true;
|
|
||||||
} else if (keycode == KC_GREEK) {
|
|
||||||
greek_held = record->event.pressed;
|
|
||||||
ignore_accent_change = true;
|
|
||||||
} else if (keycode == KC_CADET) {
|
|
||||||
cadet_held = record->event.pressed;
|
|
||||||
ignore_accent_change = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Step 2: Figure out which layer we're supposed to be in, by transforming all the prior stuff
|
|
||||||
// into layer requests.
|
|
||||||
const bool greek_request = (greek_held && !alt_held);
|
|
||||||
const bool cadet_request = (cadet_held || (greek_held && alt_held));
|
|
||||||
|
|
||||||
// Now, handle the lock keys. We store next_layer_lock in a local variable so that we can
|
|
||||||
// determine the layer to pick right now before we update layer_lock.
|
|
||||||
int next_layer_lock = layer_lock;
|
|
||||||
if (keycode == KC_CAPS) {
|
|
||||||
// If we're in QWERTY mode, caps lock is already going to be managed by the host OS, but by
|
|
||||||
// tracking it ourselves we can also usefully apply it to the GREEK and CADET layers.
|
|
||||||
if (record->event.pressed) {
|
|
||||||
shift_lock = !shift_lock;
|
|
||||||
}
|
|
||||||
} else if (keycode == KC_LAYER_LOCK) {
|
|
||||||
if (record->event.pressed) {
|
|
||||||
if (cadet_request) {
|
|
||||||
next_layer_lock = _CADET;
|
|
||||||
} else if (greek_request) {
|
|
||||||
next_layer_lock = _GREEK;
|
|
||||||
} else {
|
|
||||||
next_layer_lock = _QWERTY;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// OK! Now we know which buttons are being held, and the current and upcoming states of the locks.
|
|
||||||
// We can compute our new base layer. Remember that the CADET and GREEK keys act as their own
|
|
||||||
// antonyms if they match the layer lock -- e.g., if you have CADET locked, then CADET+X generates
|
|
||||||
// QWERTY-X.
|
|
||||||
int base_layer;
|
|
||||||
if (cadet_request) {
|
|
||||||
base_layer = (layer_lock == _CADET ? _QWERTY : _CADET);
|
|
||||||
} else if (greek_request) {
|
|
||||||
base_layer = (layer_lock == _GREEK ? _QWERTY : _GREEK);
|
|
||||||
} else {
|
|
||||||
base_layer = layer_lock;
|
|
||||||
}
|
|
||||||
|
|
||||||
const bool shifted = (shift_held != shift_lock);
|
|
||||||
int actual_layer;
|
|
||||||
if (base_layer == _CADET) {
|
|
||||||
actual_layer = (shifted ? _SHIFTCADET : _CADET);
|
|
||||||
} else if (base_layer == _GREEK) {
|
|
||||||
actual_layer = (shifted ? _SHIFTGREEK : _GREEK);
|
|
||||||
} else {
|
|
||||||
// We don't do shifting for the QWERTY layer, since for that we emit USB HID codes and shifting
|
|
||||||
// is managed by the host OS.
|
|
||||||
actual_layer = _QWERTY;
|
|
||||||
}
|
|
||||||
|
|
||||||
// And now we can update the layer lock and the actual firmware layer selector.
|
|
||||||
layer_lock = next_layer_lock;
|
|
||||||
layer_state_t new_layer_state = (layer_state & LAYER_MASK) | (1UL << actual_layer);
|
|
||||||
if (new_layer_state != layer_state) {
|
|
||||||
layer_state_set(new_layer_state);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Step 3: Handle accents. If there's a pending accent request, process it. If what the user just
|
|
||||||
// hit creates a new accent request, update the pending state for the next keypress.
|
|
||||||
if (!ignore_accent_change && accent_request && record->event.pressed) {
|
|
||||||
// Only do the accent stuff if we're in the QWERTY layer and we aren't modifying something.
|
|
||||||
const bool force_no_accent = (
|
|
||||||
actual_layer != _QWERTY ||
|
|
||||||
ctrl_held ||
|
|
||||||
super_held ||
|
|
||||||
alt_held
|
|
||||||
);
|
|
||||||
const uint16_t old_accent = accent_request;
|
|
||||||
accent_request = 0;
|
|
||||||
if (process_key_after_accent(old_accent, keycode, shifted, force_no_accent)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// And if a new accent request just arrived, update accent_request.
|
|
||||||
if (keycode >= KC_ACCENT_START && keycode < KC_ACCENT_END && record->event.pressed) {
|
|
||||||
if (shifted) {
|
|
||||||
// Shift + accent request generates the combining accent key, and leaves accent_request alone.
|
|
||||||
register_unicode(pgm_read_word_near(combined_accents + keycode - KC_ACCENT_START));
|
|
||||||
return false;
|
|
||||||
} else {
|
|
||||||
accent_request = keycode;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
|
@ -1,78 +0,0 @@
|
||||||
* The "Cadet-Style" keymap for the melody96.
|
|
||||||
* Author: Yonatan Zunger (zunger@gmail.com)
|
|
||||||
|
|
||||||
This is an experimental keymap being used both for practical reasons (as my daily driver) and to
|
|
||||||
work out the ideas of a "space-cadet-style" keyboard which can type text and mathematical symbols
|
|
||||||
with equal ease. It's designed for anyone who frequently needs to do this outside of a LaTeX
|
|
||||||
environment, or for anyone who loves the old "Space Cadet" keyboard! And it works at its best when
|
|
||||||
you have actual Cadet keycaps (like SA Symbolics) installed, because those keycaps will actually
|
|
||||||
show what you get.
|
|
||||||
|
|
||||||
The core idea of this keyboard is that, in addition to a QWERTY base layer and a function layer, it
|
|
||||||
supports two additional base layers -- the GREEK layer (the analogue of the Space Cadet "Greek," or
|
|
||||||
"Front," keys) and the CADET layer (the analogue of the Space Cadet "Top" keys). These layers use
|
|
||||||
Unicode to generate all of the mathematical symbols you can find on a traditional Space Cadet
|
|
||||||
layout, plus a bunch of extras.
|
|
||||||
|
|
||||||
Because Unicode can't be encoded using the traditional USB HID protocol, QMK does some clever but
|
|
||||||
horrifying things to fool your OS. One consequence of this is that the shift key needs to be handled
|
|
||||||
by the keyboard firmware, not the host OS. To handle this, we have two additional layers --
|
|
||||||
SHIFTGREEK and SHIFTCADET -- and handle the flipping between all of these layers here in the
|
|
||||||
firmware.
|
|
||||||
|
|
||||||
*The simple bit: Using this layout on a Melody96*
|
|
||||||
|
|
||||||
At the core of this layout are three special modifier keys and two special lock keys:
|
|
||||||
|
|
||||||
* The GREEK key, to the right of the spacebar, activates the GREEK layer. GREEK+SHIFT activates
|
|
||||||
SHIFTGREEK. These keys generate Greek letters on the letter keys (thus the name), and a few
|
|
||||||
mathematical symbols on other keys. They correspond to the notations on the front of traditional
|
|
||||||
Space Cadet keys; if your capset doesn't include those (alas, most don't), they're the "pretty
|
|
||||||
obvious" mappings.
|
|
||||||
* The CADET key, to the right of GREEK, activates the CADET layer. These are the symbols above the
|
|
||||||
letters on a Space Cadet layout. CADET+SHIFT activates the SHIFTCADET layer, with even more
|
|
||||||
symbols.
|
|
||||||
* The FUNCTION key, to the right of CADET, activates the function layer. This is where you have a
|
|
||||||
reset mechanism, a selector for which Unicode input type you want, and so on.
|
|
||||||
|
|
||||||
Additionally, GREEK+ALT is equivalent to CADET. This is handy for other keyboards where you don't
|
|
||||||
have room for this many modifiers.
|
|
||||||
|
|
||||||
The lock keys are:
|
|
||||||
|
|
||||||
* Caps lock, if you use it, will also act as a "shift lock" for the Greek and Cadet layers. Shift
|
|
||||||
lock is slightly different, in that while it is engaged shift will _dis_engage it; that's actually
|
|
||||||
pretty useful when typing math.
|
|
||||||
* An additional "layer lock" key, by default where "num lock" usually goes, will lock the choice of
|
|
||||||
base layer. To use it, hold down any invocation of the GREEK or CADET layers, or none at all, and
|
|
||||||
hit lock; it will then put you in that layer. The corresponding modifier key will then toggle you
|
|
||||||
back to the QWERTY layer. (So for example, if you hit GREEK+LAYER_LOCK and release them, you're
|
|
||||||
now typing in Greek; the GREEK modifier would cause you to type QWERTY momentarily. To go back to
|
|
||||||
ordinary QWERTY mode, you'd just hit LAYER_LOCK again with no modifiers held)
|
|
||||||
|
|
||||||
To see the full layout, check out the big comment in keymap.c.
|
|
||||||
|
|
||||||
*A less-simple bit: Adapting this to other keyboards*
|
|
||||||
|
|
||||||
This is really a canary for generic Cadet implementations. Before this can be made generic, a few
|
|
||||||
things will have to happen:
|
|
||||||
|
|
||||||
(1) Instead of a fixed keymap, this has to be refactored into some kind of array showing the
|
|
||||||
mappings of QWERTY-layer keys onto the appropriate code points in the GREEK and CADET layers, and
|
|
||||||
some preprocessor magic needs to auto-transform this plus a traditional keymap for the QWERTY layer
|
|
||||||
into keymaps for all five of the core layers. (Function layers would presumably be handled on a
|
|
||||||
per-keyboard basis)
|
|
||||||
|
|
||||||
(2) The standard mapping of those should have some #define's to control things like whether there
|
|
||||||
are physical F-keys (you would probably want to move superscript and subscripts onto the numbers if
|
|
||||||
there weren't, and figure out what to do with the non-numeric super/sub keys), whether you actually
|
|
||||||
want to enable GREEK+ALT=CADET, and so on;
|
|
||||||
|
|
||||||
(3) There should be support for controlling indicator LEDs based on the base layer selection,
|
|
||||||
caps/shift lock state, and layer lock state, as well as for triggering audio on transitions;
|
|
||||||
|
|
||||||
(4) All the core fancy logic in process_record_user which implements the layer handling should be
|
|
||||||
factored out into its own function, so that keyboards can easily reuse that, too.
|
|
||||||
|
|
||||||
This is a lovely TODO for future work, and could be particularly fun to go along with new releases
|
|
||||||
of SA Symbolics and the like. Anyone interested in such things, ping me!
|
|
|
@ -1,2 +0,0 @@
|
||||||
# You need Unicode for this map.
|
|
||||||
UNICODE_ENABLE = yes # Unicode
|
|
|
@ -1,38 +0,0 @@
|
||||||
#include QMK_KEYBOARD_H
|
|
||||||
|
|
||||||
enum custom_keycodes {
|
|
||||||
QWERTY = SAFE_RANGE,
|
|
||||||
DYNAMIC_MACRO_RANGE,
|
|
||||||
};
|
|
||||||
|
|
||||||
#include "dynamic_macro.h"
|
|
||||||
|
|
||||||
#define KC_REC DM_REC1
|
|
||||||
#define KC_DONE DM_RSTP
|
|
||||||
#define KC_PLAY DM_PLY1
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
|
|
||||||
LAYOUT(
|
|
||||||
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_HOME, KC_END, KC_PGUP, KC_PGDN, KC_DEL,
|
|
||||||
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_BSLS, KC_BSPC, 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_P7, KC_P8, KC_P9, KC_PPLS,
|
|
||||||
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_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_PENT,
|
|
||||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, TT(1), KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT),
|
|
||||||
|
|
||||||
LAYOUT(
|
|
||||||
QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_CALC, _______, _______, _______,
|
|
||||||
_______, RGB_TOG, _______, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, KC_TAB,
|
|
||||||
BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_TAB,
|
|
||||||
_______, _______, _______, _______, BL_DOWN, BL_TOGG, BL_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
_______, _______, _______, KC_PLAY, _______, KC_REC, KC_DONE, _______, _______, _______, _______, _______, _______),
|
|
||||||
};
|
|
||||||
|
|
||||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
|
||||||
if (!process_record_dynamic_macro(keycode, record)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
|
@ -1,140 +0,0 @@
|
||||||
#include QMK_KEYBOARD_H
|
|
||||||
|
|
||||||
enum layer_names {
|
|
||||||
_BASE,
|
|
||||||
_GAMER,
|
|
||||||
_FN,
|
|
||||||
_RAISE,
|
|
||||||
_MODE,
|
|
||||||
_GACROS,
|
|
||||||
};
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
/* Keymap 0: Basic layer
|
|
||||||
*
|
|
||||||
* ┌-----┬-----┬-----┬-----┬-----┬-----┬-----┐ ┌-----┬-----┬-----┬-----┬-----┬-----┬----------┐
|
|
||||||
* │ Esc │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ │ 7 │ 8 │ 9 │ 0 │ - │ = │ BkSp │
|
|
||||||
* ├-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┘ ┌--┴-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬-------┤
|
|
||||||
* │ Tab │ Q │ W │ E │ R │ T │ │ Y │ U │ I │ O │ P │ [ │ ] │ \ │
|
|
||||||
* ├--------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴-------┤
|
|
||||||
* │ Ctrl │ A │ S │ D │ F │ G │ │ H │ J │ K │ L │ ; │ ' │ Enter │
|
|
||||||
* ├---------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬-----┬-----┤
|
|
||||||
* │ LShift │ Z │ X │ C │ V │ B │ │ N │ M │ < │ > │ ? │ Sft │ Up │ _MO │
|
|
||||||
* ├------┬---┴-┬---┴--┬--┴-----┴----┬┴----┬┘ ┌┴-----┴-----┴--┬--┴----┬┴-----┼-----┼-----┼-----┤
|
|
||||||
* │ _FN │ Win │ Alt │ │ _RA │ │ │ Alt │ Win │ Lft │ Dwn │ Rgt │
|
|
||||||
* └------┴-----┴------┴-------------┴-----┘ └---------------┴-------┴------┴-----┴-----┴-----┘
|
|
||||||
*/
|
|
||||||
[_BASE] = LAYOUT(
|
|
||||||
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_EQUAL, KC_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_BSLS,
|
|
||||||
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOTE, KC_ENTER,
|
|
||||||
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, MO(_MODE),
|
|
||||||
MO(_FN), KC_LGUI, KC_LALT, KC_SPACE, MO(_RAISE), KC_SPACE, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
|
|
||||||
),
|
|
||||||
/* Keymap 1: Gamer layer
|
|
||||||
*
|
|
||||||
* ┌-----┬-----┬-----┬-----┬-----┬-----┬-----┐ ┌-----┬-----┬-----┬-----┬-----┬-----┬----------┐
|
|
||||||
* │ Esc │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ │ 7 │ 8 │ 9 │ 0 │ - │ = │ BkSp │
|
|
||||||
* ├-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┘ ┌--┴-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬-------┤
|
|
||||||
* │ Tab │ Q │ W │ E │ R │ T │ │ Y │ U │ I │ O │ P │ [ │ ] │ \ │
|
|
||||||
* ├--------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴-------┤
|
|
||||||
* │ Ctrl │ A │ S │ D │ F │ G │ │ H │ J │ K │ L │ ; │ ' │ Enter │
|
|
||||||
* ├---------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬-----┬-----┤
|
|
||||||
* │ LShift │ Z │ X │ C │ V │ B │ │ N │ M │ < │ > │ ? │ Sft │ Up │ _MO │
|
|
||||||
* ├------┬---┴-┬---┴--┬--┴-----┴----┬┴----┬┘ ┌┴-----┴-----┴--┬--┴----┬┴-----┼-----┼-----┼-----┤
|
|
||||||
* │ _FN │ F13 │ Alt │ │ _GA │ │ │ Alt │ Win │ Lft │ Dwn │ Rgt │
|
|
||||||
* └------┴-----┴------┴-------------┴-----┘ └---------------┴-------┴------┴-----┴-----┴-----┘
|
|
||||||
*/
|
|
||||||
[_GAMER] = LAYOUT(
|
|
||||||
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_EQUAL, KC_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_BSLS,
|
|
||||||
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOTE, KC_ENTER,
|
|
||||||
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, MO(_MODE),
|
|
||||||
MO(_FN), KC_F13, KC_LALT, KC_SPACE, MO(_GACROS), KC_SPACE, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
|
|
||||||
),
|
|
||||||
|
|
||||||
/* Keymap 2: Function
|
|
||||||
*
|
|
||||||
* ┌-----┬-----┬-----┬-----┬-----┬-----┬-----┐ ┌-----┬-----┬-----┬-----┬-----┬-----┬----------┐
|
|
||||||
* │ ` │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │ │
|
|
||||||
* ├-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┘ ┌--┴-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬-------┤
|
|
||||||
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
|
||||||
* ├--------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴-------┤
|
|
||||||
* │ │ │ │ │ │ │ │Left │ Up │Down │Right│ │ │ │
|
|
||||||
* ├---------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬-----┬-----┤
|
|
||||||
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
|
||||||
* ├------┬---┴-┬---┴--┬--┴-----┴----┬┴----┬┘ ┌┴-----┴-----┴--┬--┴----┬┴-----┼-----┼-----┼-----┤
|
|
||||||
* │ │ │ │ │ │ │ │ │ │ │ │ │
|
|
||||||
* └------┴-----┴------┴-------------┴-----┘ └---------------┴-------┴------┴-----┴-----┴-----┘
|
|
||||||
*/
|
|
||||||
[_FN] = LAYOUT(
|
|
||||||
KC_GRAVE, 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_DEL,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
KC_CAPS, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END
|
|
||||||
),
|
|
||||||
/* Keymap 3: Raise / Quality of life
|
|
||||||
*
|
|
||||||
* ┌-----┬-----┬-----┬-----┬-----┬-----┬-----┐ ┌-----┬-----┬-----┬-----┬-----┬-----┬----------┐
|
|
||||||
* │ ` │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │ │
|
|
||||||
* ├-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┘ ┌--┴-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬-------┤
|
|
||||||
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
|
||||||
* ├--------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴-------┤
|
|
||||||
* │ │ │ │ │ │ │ │Left │ Up │Down │Right│ │ │ │
|
|
||||||
* ├---------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬-----┬-----┤
|
|
||||||
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
|
||||||
* ├------┬---┴-┬---┴--┬--┴-----┴----┬┴----┬┘ ┌┴-----┴-----┴--┬--┴----┬┴-----┼-----┼-----┼-----┤
|
|
||||||
* │ │ │ │ │ │ │ │ │ │ │ │ │
|
|
||||||
* └------┴-----┴------┴-------------┴-----┘ └---------------┴-------┴------┴-----┴-----┴-----┘
|
|
||||||
*/
|
|
||||||
[_RAISE] = LAYOUT(
|
|
||||||
KC_GRAVE, 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_DEL,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
KC_CAPS, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END
|
|
||||||
),
|
|
||||||
/* Keymap 4: Mode switching
|
|
||||||
*
|
|
||||||
* ┌-----┬-----┬-----┬-----┬-----┬-----┬-----┐ ┌-----┬-----┬-----┬-----┬-----┬-----┬----------┐
|
|
||||||
* │ ` │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │ │
|
|
||||||
* ├-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┘ ┌--┴-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬-------┤
|
|
||||||
* │ RGB 0/1│RGBM-│RGBB+│RGBM+│ │ │ │ │ │ │ │ │ │ │ Reset │
|
|
||||||
* ├--------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴-------┤
|
|
||||||
* │ │RGBS-│RGBB-│RGBS+│ │ │ │Left │ Up │Down │Right│ │ │ │
|
|
||||||
* ├---------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬-----┬-----┤
|
|
||||||
* │ │ │ │ │ │ │ │ │ │ │ GAME| BASE│ │ │ │
|
|
||||||
* ├------┬---┴-┬---┴--┬--┴-----┴----┬┴----┬┘ ┌┴-----┴-----┴--┬--┴----┬┴-----┼-----┼-----┼-----┤
|
|
||||||
* │ │ │ │ │ │ │ │ │ │ │ │ │
|
|
||||||
* └------┴-----┴------┴-------------┴-----┘ └---------------┴-------┴------┴-----┴-----┴-----┘
|
|
||||||
*/
|
|
||||||
[_MODE] = LAYOUT(
|
|
||||||
KC_GRAVE, 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_RMOD, RGB_VAI, RGB_MOD, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT,
|
|
||||||
_______, RGB_SPD, RGB_VAD, RGB_SPI, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, TO(_GAMER), TO(_BASE), _______, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
|
||||||
),
|
|
||||||
/* Keymap 5: Gaming macros
|
|
||||||
*
|
|
||||||
* ┌-----┬-----┬-----┬-----┬-----┬-----┬-----┐ ┌-----┬-----┬-----┬-----┬-----┬-----┬----------┐
|
|
||||||
* │ ` │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │ │
|
|
||||||
* ├-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┘ ┌--┴-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬-------┤
|
|
||||||
* │ │ │ PUSH│ │ │ │ │ │ │ │ │ │ │ │ │
|
|
||||||
* ├--------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴-------┤
|
|
||||||
* │ │ │ FALL│ │ │ │ │Left │ Up │Down │Right│ │ │ │
|
|
||||||
* ├---------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬-----┬-----┤
|
|
||||||
* │ │ │ CAP │ │ │ │ │ │ │ │ GAME| BASE│ │ │ │
|
|
||||||
* ├------┬---┴-┬---┴--┬--┴-----┴----┬┴----┬┘ ┌┴-----┴-----┴--┬--┴----┬┴-----┼-----┼-----┼-----┤
|
|
||||||
* │ │ │ │ │ │ │ │ │ │ │ │ │
|
|
||||||
* └------┴-----┴------┴-------------┴-----┘ └---------------┴-------┴------┴-----┴-----┴-----┘
|
|
||||||
*/
|
|
||||||
[_GACROS] = LAYOUT(
|
|
||||||
KC_GRAVE, 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_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, TO(_GAMER), TO(_BASE), _______, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
|
||||||
),
|
|
||||||
};
|
|
|
@ -1,5 +0,0 @@
|
||||||
// Copyright 2022 Minke Zhang (@minkezhang)
|
|
||||||
// SPDX-License-Identifier: GPL-3.0-only
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#define RGBLIGHT_LAYERS
|
|
|
@ -1,149 +0,0 @@
|
||||||
// Copyright 2022 Minke Zhang (@minkezhang)
|
|
||||||
// SPDX-License-Identifier: GPL-3.0-only
|
|
||||||
#include QMK_KEYBOARD_H
|
|
||||||
|
|
||||||
/* Layer transitions diagram
|
|
||||||
*
|
|
||||||
* BASE <-> _FN [MO]
|
|
||||||
* BASE <-> _NUM [TG]
|
|
||||||
* _NUM <-> _MIRROR [MO]
|
|
||||||
*
|
|
||||||
* Direct transitions between layers not listed here are considered bugs.
|
|
||||||
*/
|
|
||||||
enum layer_names {
|
|
||||||
BASE, // default layer
|
|
||||||
_FN, // function layer
|
|
||||||
_NUM, // numpad
|
|
||||||
_MIRROR, // mirrorboard layer
|
|
||||||
};
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
/* Keymap 0: Basic layer
|
|
||||||
*
|
|
||||||
* ┌-----┬-----┬-----┬-----┬-----┬-----┬-----┐ ┌-----┬-----┬-----┬-----┬-----┬-----┬----------┐
|
|
||||||
* │ Esc │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ │ 7 │ 8 │ 9 │ 0 │ - │ = │ BkSp │
|
|
||||||
* ├-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┘ ┌--┴-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬-------┤
|
|
||||||
* │ Tab │ Q │ W │ E │ R │ T │ │ Y │ U │ I │ O │ P │ [ │ ] │ \ │
|
|
||||||
* ├--------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴-------┤
|
|
||||||
* │ Caps │ A │ S │ D │ F │ G │ │ H │ J │ K │ L │ ; │ ' │ Enter │
|
|
||||||
* ├---------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬-----┬-----┤
|
|
||||||
* │ LShift │ Z │ X │ C │ V │ B │ │ N │ M │ < │ > │ ? │Shft │ Up │ Del │
|
|
||||||
* ├------┬---┴-┬---┴--┬--┴-----┴----┬┴----┬┘ ┌┴-----┴-----┴--┬--┴----┬┴-----┼-----┼-----┼-----┤
|
|
||||||
* │ Ctrl │ Win │ Alt │ Fn │ Sp │ │ │ Alt │ Fn │ Lft │ Dwn │ Rgt │
|
|
||||||
* └------┴-----┴------┴-------------┴-----┘ └---------------┴-------┴------┴-----┴-----┴-----┘
|
|
||||||
*/
|
|
||||||
[BASE] = LAYOUT(
|
|
||||||
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_EQUAL, KC_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_BSLS,
|
|
||||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOTE, KC_ENT,
|
|
||||||
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_DEL,
|
|
||||||
KC_LCTL, KC_LGUI, KC_LALT, MO(_FN), KC_SPACE, KC_SPACE, KC_RALT, TG(_NUM), KC_LEFT, KC_DOWN, KC_RIGHT
|
|
||||||
),
|
|
||||||
|
|
||||||
/* Function
|
|
||||||
*
|
|
||||||
* Cannot access the _NUM layer directly.
|
|
||||||
*
|
|
||||||
* ┌-----┬-----┬-----┬-----┬-----┬-----┬-----┐ ┌-----┬-----┬-----┬-----┬-----┬-----┬----------┐
|
|
||||||
* │ ` │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │ │
|
|
||||||
* ├-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┘ ┌--┴-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬-------┤
|
|
||||||
* │ │ │ │ Up │ │ │ │ │ │ │ │ │ │ │ │
|
|
||||||
* ├--------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴-------┤
|
|
||||||
* │ Enter │ │ Lft │ Dwn │ Rgt │ │ │ │ │ │ │ │ │ │
|
|
||||||
* ├---------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬-----┬-----┤
|
|
||||||
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
|
||||||
* ├------┬---┴-┬---┴--┬--┴-----┴----┬┴----┬┘ ┌┴-----┴-----┴--┬--┴----┬┴-----┼-----┼-----┼-----┤
|
|
||||||
* │ │ │ │ │ │ │ │ │ NO │ │ │ │
|
|
||||||
* └------┴-----┴------┴-------------┴-----┘ └---------------┴-------┴------┴-----┴-----┴-----┘
|
|
||||||
*/
|
|
||||||
[_FN] = LAYOUT(
|
|
||||||
KC_GRV, 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_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
KC_ENT, _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, KC_NO, _______, _______, _______
|
|
||||||
),
|
|
||||||
|
|
||||||
/* Numpad
|
|
||||||
*
|
|
||||||
* ┌-----┬-----┬-----┬-----┬-----┬-----┬-----┐ ┌-----┬-----┬-----┬-----┬-----┬-----┬----------┐
|
|
||||||
* │ ` │ │ │ │ │ │ │ │ Num │ / │ * │ - │ | │ |
|
|
||||||
* ├-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┘ ┌--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬-------┤
|
|
||||||
* │ │ │ │ │ │ │ │ │ 7 │ 8 │ 9 │ + │ │ │ │
|
|
||||||
* ├--------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴-------┤
|
|
||||||
* │ │ │ │ │ │ │ │ │ 4 │ 5 │ 6 │ │ │ │
|
|
||||||
* ├---------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬-----┬-----┤
|
|
||||||
* │ │ │ │ │ │ │ │ │ 1 │ 2 │ 3 │ Ent │ │ │ │
|
|
||||||
* ├------┬---┴-┬---┴--┬--┴-----┴----┬┴----┬┘ ┌┴-----┴-----┴--┬--┴----┬┴-----┼-----┼-----┼-----┤
|
|
||||||
* │ │ │ │ Fn │ │ │ 0 │ . │ Fn │ │ │ │
|
|
||||||
* └------┴-----┴------┴-------------┴-----┘ └---------------┴-------┴------┴-----┴-----┴-----┘
|
|
||||||
*/
|
|
||||||
[_NUM] = LAYOUT(
|
|
||||||
KC_GRV, _______, _______, _______, _______, _______, _______, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, KC_PPLS, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, KC_PENT, _______, _______, _______,
|
|
||||||
_______, _______, _______, MO(_MIRROR), _______, KC_P0, KC_PDOT, TG(_NUM), _______, _______, _______
|
|
||||||
),
|
|
||||||
|
|
||||||
/* Mirrorboard
|
|
||||||
*
|
|
||||||
* Useful in some niche situations per XKCD. Cannot pass directly to BASE layer
|
|
||||||
* without releasing the _MIRROR toggle key.
|
|
||||||
*
|
|
||||||
* ┌-----┬-----┬-----┬-----┬-----┬-----┬-----┐ ┌-----┬-----┬-----┬-----┬-----┬-----┬----------┐
|
|
||||||
* │ Bk │ = │ - │ 0 │ 9 │ 8 │ 7 │ │ │ │ │ │ | │ |
|
|
||||||
* ├-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┘ ┌--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬-------┤
|
|
||||||
* │ \ │ P │ O │ I │ U │ Y │ │ │ │ │ │ │ │ │ │
|
|
||||||
* ├--------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴-------┤
|
|
||||||
* │ Enter │ ; │ L │ K │ J │ H │ │ │ │ │ │ │ │ │
|
|
||||||
* ├---------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬-----┬-----┤
|
|
||||||
* │ │ ? │ > │ < │ M │ N │ │ │ │ │ │ │ │ │ │
|
|
||||||
* ├------┬---┴-┬---┴--┬--┴-----┴----┬┴----┬┘ ┌┴-----┴-----┴--┬--┴----┬┴-----┼-----┼-----┼-----┤
|
|
||||||
* │ │ │ │ │ │ │ │ │ NO │ │ │ │
|
|
||||||
* └------┴-----┴------┴-------------┴-----┘ └---------------┴-------┴------┴-----┴-----┴-----┘
|
|
||||||
*/
|
|
||||||
[_MIRROR] = LAYOUT(
|
|
||||||
KC_BSPC, KC_EQUAL, KC_MINUS, KC_0, KC_9, KC_8, KC_7, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
KC_BSLS, KC_P, KC_O, KC_I, KC_U, KC_Y, _______, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
KC_ENT, KC_SCLN, KC_L, KC_K, KC_J, KC_H, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
_______, KC_SLSH, KC_DOT, KC_COMM, KC_M, KC_N, _______, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, KC_NO, _______, _______, _______
|
|
||||||
),
|
|
||||||
};
|
|
||||||
|
|
||||||
#if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_LAYERS)
|
|
||||||
const rgblight_segment_t PROGMEM BASE_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 12, HSV_OFF});
|
|
||||||
const rgblight_segment_t PROGMEM _FN_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 12, HSV_RED});
|
|
||||||
const rgblight_segment_t PROGMEM _NUM_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 12, HSV_YELLOW});
|
|
||||||
const rgblight_segment_t PROGMEM _MIRROR_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 12, HSV_ORANGE});
|
|
||||||
|
|
||||||
const rgblight_segment_t* const PROGMEM user_rgb_layers[] = RGBLIGHT_LAYERS_LIST(
|
|
||||||
BASE_layer,
|
|
||||||
_FN_layer,
|
|
||||||
_NUM_layer,
|
|
||||||
_MIRROR_layer
|
|
||||||
);
|
|
||||||
|
|
||||||
void keyboard_post_init_user(void) {
|
|
||||||
rgblight_layers = user_rgb_layers;
|
|
||||||
}
|
|
||||||
layer_state_t default_layer_state_set_user(layer_state_t state) {
|
|
||||||
rgblight_set_layer_state(0, layer_state_cmp(state, BASE));
|
|
||||||
|
|
||||||
return state;
|
|
||||||
}
|
|
||||||
|
|
||||||
layer_state_t layer_state_set_user(layer_state_t state) {
|
|
||||||
|
|
||||||
/* Add some indication for current function layer.
|
|
||||||
*
|
|
||||||
* N.B.: rgblight_set_layer_state calls rgblight_mode_noeeprom.
|
|
||||||
*/
|
|
||||||
rgblight_set_layer_state(1, layer_state_cmp(state, _FN));
|
|
||||||
rgblight_set_layer_state(2, layer_state_cmp(state, _NUM));
|
|
||||||
rgblight_set_layer_state(3, layer_state_cmp(state, _MIRROR));
|
|
||||||
|
|
||||||
return state;
|
|
||||||
}
|
|
||||||
#endif
|
|
|
@ -1,7 +0,0 @@
|
||||||
# YMDK Split 64
|
|
||||||
Personal Keymap for [minkezhang](https://github.com/minkezhang)
|
|
||||||
|
|
||||||
## Compile
|
|
||||||
```bash
|
|
||||||
qmk compile -kb ymdk/sp64 -km minkezhang
|
|
||||||
```
|
|
|
@ -1 +0,0 @@
|
||||||
RGBLIGHT_ENABLE = yes
|
|
|
@ -1,94 +0,0 @@
|
||||||
#include QMK_KEYBOARD_H
|
|
||||||
enum layer_names {
|
|
||||||
BASE, // default layer
|
|
||||||
_FUN, // function layer
|
|
||||||
_NUMPAD, // num-pad
|
|
||||||
_MEDIA // media keys
|
|
||||||
};
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
/* Keymap 0: Basic layer
|
|
||||||
*
|
|
||||||
* ┌-----┬-----┬-----┬-----┬-----┬-----┬-----┐ ┌-----┬-----┬-----┬-----┬-----┬-----┬----------┐
|
|
||||||
* │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ │ 7 │ 8 │ 9 │ 0 │ - │ = │ BkSp │
|
|
||||||
* ├-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┘ ┌--┴-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬-------┤
|
|
||||||
* │ Tab │ Q │ W │ E │ R │ T │ │ Y │ U │ I │ O │ P │ [ │ ] │ \ │
|
|
||||||
* ├--------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴-------┤
|
|
||||||
* │ Ctrl │ A │ S │ D │ F │ G │ │ H │ J │ K │ L │ ; │ ' │ Enter │
|
|
||||||
* ├---------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬-----┬-----┤
|
|
||||||
* │ LShift │ Z │ X │ C │ V │ B │ │ N │ M │ < │ > │ ? │ Sft │ Up │_MED │
|
|
||||||
* ├------┬---┴-┬---┴--┬--┴-----┴----┬┴----┬┘ ┌┴-----┴-----┴--┬--┴----┬┴-----┼-----┼-----┼-----┤
|
|
||||||
* │ _NUM │_MED │ Alt │ Cmd │ Spc │ │ Space │ Cmd │ Alt │ Lft │ Dwn │ Rgt │
|
|
||||||
* └------┴-----┴------┴-------------┴-----┘ └---------------┴-------┴------┴-----┴-----┴-----┘
|
|
||||||
*/
|
|
||||||
[BASE] = LAYOUT(
|
|
||||||
MT(QK_BOOT, KC_GRAVE), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_EQUAL, KC_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_BSLS,
|
|
||||||
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOTE, KC_ENTER,
|
|
||||||
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, OSL(_MEDIA),
|
|
||||||
LT(_NUMPAD, KC_CAPS), TT(_MEDIA), KC_LALT, KC_LGUI, LT(_FUN, KC_SPACE), KC_SPACE, KC_RGUI, KC_RALT, KC_LEFT, KC_DOWN, KC_RIGHT
|
|
||||||
),
|
|
||||||
/* Keymap 1: Function Layer / Vim Arrows
|
|
||||||
*
|
|
||||||
* ┌-----┬-----┬-----┬-----┬-----┬-----┬-----┐ ┌-----┬-----┬-----┬-----┬-----┬-----┬----------┐
|
|
||||||
* │ Esc │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │ │
|
|
||||||
* ├-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┘ ┌--┴-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬-------┤
|
|
||||||
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
|
||||||
* ├--------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴-------┤
|
|
||||||
* │ │ │ │ │ │ │ │ │Left │ Up │Down │Right│ │ │
|
|
||||||
* ├---------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬-----┬-----┤
|
|
||||||
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
|
||||||
* ├------┬---┴-┬---┴--┬--┴-----┴----┬┴----┬┘ ┌┴-----┴-----┴--┬--┴----┬┴-----┼-----┼-----┼-----┤
|
|
||||||
* │ │ │ │ │ │ │ │ │ │ │ │ │
|
|
||||||
* └------┴-----┴------┴-------------┴-----┘ └---------------┴-------┴------┴-----┴-----┴-----┘
|
|
||||||
*/
|
|
||||||
[_FUN] = LAYOUT(
|
|
||||||
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_LEFT, KC_UP, KC_DOWN, KC_RIGHT, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
|
||||||
),
|
|
||||||
/* Keymap 2: NumPad
|
|
||||||
*
|
|
||||||
* ┌-----┬-----┬-----┬-----┬-----┬-----┬-----┐ ┌-----┬-----┬-----┬-----┬-----┬-----┬----------┐
|
|
||||||
* │ │ │ │ │ │ │ │ │ 7 │ 8 │ 9 │ │ Vol-│ Vol+│ Mute │
|
|
||||||
* ├-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┘ ┌--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬-------┤
|
|
||||||
* │ │ │ │ │ │ │ │ │ 4 │ 5 │ 6 │ │ |<< │ >>| │ >|| │
|
|
||||||
* ├--------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴-------┤
|
|
||||||
* │ │ │ │ │ │ │ │ │ 1 │ 2 │ 3 │ │ │ │
|
|
||||||
* ├---------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬-----┬-----┤
|
|
||||||
* │ │ │ │ │ │ │ │ │ 0 │ │ │ │ │ │ │
|
|
||||||
* ├------┬---┴-┬---┴--┬--┴-----┴----┬┴----┬┘ ┌┴-----┴-----┴--┬--┴----┬┴-----┼-----┼-----┼-----┤
|
|
||||||
* │ │ │ │ │ │ │ │ │ │ │ │ │
|
|
||||||
* └------┴-----┴------┴-------------┴-----┘ └---------------┴-------┴------┴-----┴-----┴-----┘
|
|
||||||
*/
|
|
||||||
[_NUMPAD] = LAYOUT(
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, _______, KC_VOLD, KC_VOLU, KC_MUTE,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6, _______, KC_MPRV, KC_MNXT, KC_MPLY,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, KC_P0, _______, _______, _______, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
|
||||||
),
|
|
||||||
/* Keymap 3: Media
|
|
||||||
*
|
|
||||||
* ┌-----┬-----┬-----┬-----┬-----┬-----┬-----┐ ┌-----┬-----┬-----┬-----┬-----┬-----┬----------┐
|
|
||||||
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
|
||||||
* ├-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┘ ┌--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬-------┤
|
|
||||||
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
|
||||||
* ├--------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴-------┤
|
|
||||||
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
|
||||||
* ├---------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬-----┬-----┤
|
|
||||||
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
|
||||||
* ├------┬---┴-┬---┴--┬--┴-----┴----┬┴----┬┘ ┌┴-----┴-----┴--┬--┴----┬┴-----┼-----┼-----┼-----┤
|
|
||||||
* │ │ │ │ Backlight │ │ │ │ │ │ │ │ │
|
|
||||||
* └------┴-----┴------┴-------------┴-----┘ └---------------┴-------┴------┴-----┴-----┴-----┘
|
|
||||||
*/
|
|
||||||
[_MEDIA] = LAYOUT(
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
_______, _______, _______, RGB_TOG, _______, _______, _______, _______, _______, _______, _______
|
|
||||||
),
|
|
||||||
};
|
|
|
@ -1 +0,0 @@
|
||||||
COMMAND_ENABLE = no
|
|
|
@ -1,65 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright 2021 andys8 <andys8@users.noreply.github.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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
#include QMK_KEYBOARD_H
|
|
||||||
#include "sendstring_german.h"
|
|
||||||
|
|
||||||
enum custom_keycodes {
|
|
||||||
GIT_STASH = SAFE_RANGE,
|
|
||||||
GIT_STASH_POP,
|
|
||||||
GIT_COMMIT,
|
|
||||||
COPY_PASTE,
|
|
||||||
};
|
|
||||||
|
|
||||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
|
||||||
switch (keycode) {
|
|
||||||
case GIT_STASH:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
SEND_STRING("git stash\n");
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case GIT_STASH_POP:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
SEND_STRING("git stash pop\n");
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case GIT_COMMIT:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
SEND_STRING("git add -A && git commit -a\n");
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case COPY_PASTE:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
tap_code16(C(KC_C));
|
|
||||||
} else {
|
|
||||||
tap_code16(C(KC_V));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
};
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
|
|
||||||
[0] = LAYOUT(GIT_STASH, GIT_STASH_POP, GIT_COMMIT,
|
|
||||||
LCTL(KC_F4), LT(1, KC_SPACE), LCTL(KC_F6),
|
|
||||||
COPY_PASTE, LCTL(KC_F2), LCTL(KC_F3)),
|
|
||||||
|
|
||||||
[1] = LAYOUT(RGB_RMOD, RGB_TOG, RGB_MOD,
|
|
||||||
RGB_HUI, KC_TRNS, RGB_SAI,
|
|
||||||
RGB_HUD, RGB_M_P, RGB_SAD),
|
|
||||||
|
|
||||||
};
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue