Skip to content

Instantly share code, notes, and snippets.

@aerickt
Created March 3, 2021 16:31
Show Gist options
  • Save aerickt/dad517a87efc10713a703d5f5576d283 to your computer and use it in GitHub Desktop.
Save aerickt/dad517a87efc10713a703d5f5576d283 to your computer and use it in GitHub Desktop.
Splitography With Gemini PR
/* Copyright 2017 REPLACE_WITH_YOUR_NAME
*
* 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 the canonical layout file for the Quantum project. If you want to add another keyboard,
// this is the style you want to emulate.
//
// To flash steno firmware
// ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
// Reset keyboard or press hw reset button on base (hole)
//
// cd qmk_firmware/keyboards/steno
// sudo make KEYMAP=sdothum dfu
//
// sudo make clean (good practice before flashing)
// sudo make KEYMAP=<...> (to compile check)
//
// Package requirements (for arch linux)
// ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
// avr-gcc-atmel
// avr-libc-atmel
// dfu-programmer
//
// Code
// ▔▔▔▔
// This source is shamelessly based on the "default" steno layout
//
// #ifdef/#endif block structures are not indented, as syntax highlighting
// in vim is sufficient for identification
//
// c++ commenting style is used throughout
#include "config.h"
#include "splitography.h"
#include "action_layer.h"
#include "keymap_steno.h"
#include "eeconfig.h"
extern keymap_config_t keymap_config;
enum splitography_layers {
_QWERTY = 0
,_GEMINI
,_PLOVER
,_BLUE
,_ORANGE
,_GREEN
,_NUM
,_END_LAYERS
};
enum splitography_keycodes {
QWERTY = SAFE_RANGE
,QWERTY1
,QWERTY2
,GEMINI
,PLOVER
,BLUE
,ORANGE
};
// keycodes
#define ___x___ KC_TRNS
#ifdef _______
#undef _______
#endif
#define _______ KC_NO
#define ST_BOLT QK_STENO_BOLT
#define COPY LCTL(KC_C)
#define CUT LCTL(KC_X)
#define PASTE LCTL(KC_V)
#define UNDO LCTL(KC_Z)
#define TG_NUM TG(_NUM)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// ...................................................................... Qwerty
//
// http://www.keyboard-layout-editor.com/#/gists/1b04ce6be0cee6e5d2998b2a8efb8b09
// ,-----------------------------------------------------------------------------------.
// | Esc | Q | W | E | R | T | Y | U | I | O | P | Bksp |
// -------|------+------+------+------+------+------+------+------+------+-------------|
// | Alt | A | S | D | F | G | H | J | K | L | ; | Enter|
// -------|------+------+------+------+------+------+------+------+------+-------------|
// | Shift| Z | X | C | V | B | N | M | , | . | / | GUI |
// |------+------+------+------+------+------+------+------+------+------+------+------|
// | |Orange| Blue | Space| Ctrl | |
// `-----------------------------------------------------------------------------------'
[_QWERTY] = {
{KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
{KC_LALT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, 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_LGUI},
{_______, _______, _______, _______, ORANGE, BLUE, KC_SPC, KC_LCTL, _______, _______, _______, _______},
},
// .................................................................. Blue Layer
//_______,
// http://www.keyboard-layout-editor.com/#/gists/054b8bc0e31971bb962ea1c781232e0b
// .-----------------------------------------------------------------------------------.
// | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | |
// |-----------------------------------------------------------------------------------|
// | Alt | Stop | Prev | Play | Next | +Vol | | | | [ | ] | ' |
// |-----------------------------------------------------------------------------------|
// | Shift| Undo | Cut | Copy | Paste| -Vol | Mute | | | - | = | GUI |
// |-----------------------------------------------------------------------------------|
// | |Orange| f() | Del | Ctrl | |
// '-----------------------------------------------------------------------------------'
[_BLUE] = {
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______},
{KC_LALT, KC_MSTP, KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLU, _______, _______, _______, KC_LBRC, KC_RBRC, KC_QUOT},
{KC_LSFT, UNDO, CUT, COPY, PASTE, KC_VOLD, KC_MUTE, _______, _______, KC_MINS, KC_EQL, KC_LGUI},
{_______, _______, _______, _______, ORANGE, ___x___, KC_DEL, KC_LCTL, _______, _______, _______, _______},
},
// ................................................................ Orange Layer
//
// http://www.keyboard-layout-editor.com/#/gists/83ccc7c3faa78b1f67f6fef65063a248
// .-----------------------------------------------------------------------------------.
// |Plover| F1 | F2 | F3 | F4 | | App | PrScr|ScrLck| Pause| | |
// |-----------------------------------------------------------------------------------|
// | Alt | F5 | F6 | F7 | F8 | | |Insert| Home | PgUp | | |
// |-----------------------------------------------------------------------------------|
// | Shift| F9 | F10 | F11 | F12 | | | Del | End | PgDn | \ | GUI |
// |-----------------------------------------------------------------------------------|
// | | f() | Blue | Tab | Ctrl | |
// '-----------------------------------------------------------------------------------'
[_ORANGE] = {
{PLOVER, KC_F1, KC_F2, KC_F3, KC_F4, _______, KC_APP, KC_PSCR, KC_SLCK, KC_PAUS, _______, _______},
{KC_LALT, KC_F5, KC_F6, KC_F7, KC_F8, _______, _______, KC_INS, KC_HOME, KC_PGUP, _______, _______},
{KC_LSFT, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, KC_DEL, KC_END, KC_PGDN, KC_BSLS, KC_LGUI},
{_______, _______, _______, _______, ___x___, BLUE, KC_TAB, KC_LCTL, _______, _______, _______, _______},
},
// ................................................................. Green Layer
//
// http://www.keyboard-layout-editor.com/#/gists/bc7902f1eada4d7d34d3445aa1eccdab
// .-----------------------------------------------------------------------------------.
// |TxBolt| | | | |Scroll| / | 7 | 8 | 9 | - | |
// |-----------------------------------------------------------------------------------|
// | Alt | Home | Up | End | PgUp | Caps | * | 4 | 5 | 6 | + | Enter|
// |-----------------------------------------------------------------------------------|
// | Shift| Left | Down | Right| PgDn | Num | 0 | 1 | 2 | 3 | | GUI |
// |-----------------------------------------------------------------------------------|
// | | f() | f() | -- | Ctrl | |
// '-----------------------------------------------------------------------------------'
[_GREEN] = {
{GEMINI, _______, _______, _______, _______, KC_SLCK, KC_PSLS, KC_P7, KC_P8, KC_P9, KC_MINS, _______},
{KC_LALT, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_CAPS, KC_PAST, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_ENT },
{KC_LSFT, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, TG_NUM, KC_P0, KC_P1, KC_P2, KC_P3, _______, KC_LGUI},
{_______, _______, _______, _______, ___x___, ___x___, _______, KC_LCTL, _______, _______, _______, _______},
},
// ................................................................... Num Layer
//
// http://www.keyboard-layout-editor.com/#/gists/bc7902f1eada4d7d34d3445aa1eccdab
// .-----------------------------------------------------------------------------------.
// | | | | | | | / | 7 | 8 | 9 | - | |
// |-----------------------------------------------------------------------------------|
// | Alt | Home | Up | End | PgUp | | * | 4 | 5 | 6 | + | Enter|
// |-----------------------------------------------------------------------------------|
// | Shift| Left | Down | Right| PgDn | f() | 0 | 1 | 2 | 3 | | GUI |
// |-----------------------------------------------------------------------------------|
// | | -- | -- | -- | Ctrl | |
// '-----------------------------------------------------------------------------------'
[_NUM] = {
{_______, _______, _______, _______, _______, _______, KC_PSLS, KC_P7, KC_P8, KC_P9, KC_PMNS, _______},
{KC_LALT, KC_HOME, KC_UP, KC_END, KC_PGUP, _______, KC_PAST, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_ENT },
{KC_LSFT, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, QWERTY, KC_P0, KC_P1, KC_P2, KC_P3, _______, KC_LGUI},
{_______, _______, _______, _______, _______, _______, _______, KC_LCTL, _______, _______, _______, _______},
},
// ...................................................................... Plover
//
// http://www.keyboard-layout-editor.com/#/gists/27b8f8649393a8ba4071ba946a9306f4
// ,-----------------------------------------------------------------------------------.
// | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
// +-------------+------+------+------+------+------+------+------+------+------+------|
// |Qwerty| S | T | P | H | * | * | F | P | L | T | D |
// +------|------+------+------+------+------+------+------+------+------+------+------|
// |Qwerty| S | K | W | R | * | * | R | B | G | S | Z |
// +------+------+------+------+------+------+------+------+------+------+------+------|
// | | A | O | E | U | |
// `-----------------------------------------------------------------------------------'
[_PLOVER] = {
{KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 },
{QWERTY1, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC},
{QWERTY2, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
{_______, _______, _______, _______, KC_C, KC_V, KC_N, KC_M, _______, _______, _______, _______},
},
// ...................................................................... Gemini
//
// http://www.keyboard-layout-editor.com/#/gists/27b8f8649393a8ba4071ba946a9306f4
// ,-----------------------------------------------------------------------------------.
// | # | # | # | # | # | # | # | # | # | # | # | # |
// |------+------+------+------+------+-------------+------+------+------+------+------|
// |Qwerty| S | T | P | H | * | * | F | P | L | T | D |
// |------+------+------+------+------+------|------+------+------+------+------+------|
// |Qwerty| S | K | W | R | * | * | R | B | G | S | Z |
// |------+------+------+------+------+------+------+------+------+------+------+------|
// | | A | O | E | U | |
// `-----------------------------------------------------------------------------------'
[_GEMINI] = {
{STN_N1, STN_N2, STN_N3, STN_N4, STN_N5, STN_N6, STN_N7, STN_N8, STN_N9, STN_NA, STN_NB, STN_NC },
{QWERTY1, STN_S1, STN_TL, STN_PL, STN_HL, STN_ST1, STN_ST3, STN_FR, STN_PR, STN_LR, STN_TR, STN_DR },
{QWERTY2, STN_S2, STN_KL, STN_WL, STN_RL, STN_ST2, STN_ST4, STN_RR, STN_BR, STN_GR, STN_SR, STN_ZR },
{_______, _______, _______, _______, STN_A, STN_O, STN_E, STN_U, _______, _______, _______, _______},
},
};
// ..................................................................... Keymaps
void clear_layers(void)
{
uint8_t layer;
for (layer = 0; layer < _END_LAYERS; layer++) {
layer_off(layer);
}
}
#define QWERTY_1 1
#define QWERTY_2 2
#define QWERTY_12 3
static uint8_t qwerty_n = 0;
void qwerty(void)
{
qwerty_n = 0;
clear_layers();
set_single_persistent_default_layer(_QWERTY);
}
void plover(keyrecord_t *record)
{
if (record->event.pressed) {
clear_layers();
layer_on(_PLOVER);
if (!eeconfig_is_enabled()) {
eeconfig_init();
}
keymap_config.raw = eeconfig_read_keymap();
keymap_config.nkro = 1;
eeconfig_update_keymap(keymap_config.raw);
}
}
void txbolt(void)
{
clear_layers();
layer_on(_GEMINI);
}
// ........................................................... User Keycode Trap
bool process_record_user(uint16_t keycode, keyrecord_t *record)
{
switch (keycode) {
case QWERTY:
if (record->event.pressed) {
qwerty();
}
return false;
case QWERTY1:
if (record->event.pressed) {
qwerty_n = qwerty_n | QWERTY_1;
if (qwerty_n == QWERTY_12) {
qwerty();
}
} else {
qwerty_n = qwerty_n & ~QWERTY_1;
}
return false;
case QWERTY2:
if (record->event.pressed) {
qwerty_n = qwerty_n | QWERTY_2;
if (qwerty_n == QWERTY_12) {
qwerty();
}
} else {
qwerty_n = qwerty_n & ~QWERTY_2;
}
return false;
case BLUE:
if (record->event.pressed) {
layer_on (_BLUE);
update_tri_layer(_BLUE, _ORANGE, _GREEN);
} else {
layer_off (_BLUE);
update_tri_layer(_BLUE, _ORANGE, _GREEN);
}
return false;
case ORANGE:
if (record->event.pressed) {
layer_on (_ORANGE);
update_tri_layer(_BLUE, _ORANGE, _GREEN);
} else {
layer_off (_ORANGE);
update_tri_layer(_BLUE, _ORANGE, _GREEN);
}
return false;
case PLOVER:
plover(record);
return false;
case GEMINI:
if (record->event.pressed) {
txbolt();
}
return false;
}
return true;
}
// initialize steno protocol
void matrix_init_user(void)
{
steno_set_mode(STENO_MODE_BOLT);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment