commit
8a645aa9ad
@ -0,0 +1,3 @@ |
||||
ifndef QUANTUM_DIR |
||||
include ../../../../Makefile
|
||||
endif |
@ -0,0 +1,247 @@ |
||||
#include "preonic.h" |
||||
#include "action_layer.h" |
||||
#include "eeconfig.h" |
||||
#ifdef AUDIO_ENABLE |
||||
#include "audio.h" |
||||
#endif |
||||
|
||||
// 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 _DVORAK 0 |
||||
#define _QWERTY 1 |
||||
#define _LOWER 2 |
||||
#define _RAISE 3 |
||||
#define _ADJUST 16 |
||||
|
||||
enum preonic_keycodes { |
||||
DVORAK = SAFE_RANGE, |
||||
QWERTY, |
||||
LOWER, |
||||
RAISE, |
||||
BACKLIT |
||||
}; |
||||
|
||||
// Fillers to make layering more clear
|
||||
#define _______ KC_TRNS |
||||
#define XXXXXXX KC_NO |
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |
||||
|
||||
/* Dvorak
|
||||
* ,-----------------------------------------------------------------------------------. |
||||
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | |
||||
* |------+------+------+------+------+------+------+------+------+------+------+------| |
||||
* | Tab | " | , | . | P | Y | F | G | C | R | L | / | |
||||
* |------+------+------+------+------+-------------+------+------+------+------+------| |
||||
* | Esc | A | O | E | U | I | D | H | T | N | S | - | |
||||
* |------+------+------+------+------+------|------+------+------+------+------+------| |
||||
* | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | |
||||
* |------+------+------+------+------+------+------+------+------+------+------+------| |
||||
* | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | |
||||
* `-----------------------------------------------------------------------------------' |
||||
*/ |
||||
[_DVORAK] = { |
||||
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, |
||||
{KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH}, |
||||
{KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS}, |
||||
{KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_T(KC_ENT)}, |
||||
{BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} |
||||
}, |
||||
|
||||
/* Qwerty
|
||||
* ,-----------------------------------------------------------------------------------. |
||||
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | |
||||
* |------+------+------+------+------+------+------+------+------+------+------+------| |
||||
* | Tab | Q | W | E | R | T | Y | U | I | O | P | Del | |
||||
* |------+------+------+------+------+-------------+------+------+------+------+------| |
||||
* | Esc | A | S | D | F | G | H | J | K | L | ; | " | |
||||
* |------+------+------+------+------+------|------+------+------+------+------+------| |
||||
* | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | |
||||
* |------+------+------+------+------+------+------+------+------+------+------+------| |
||||
* | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | |
||||
* `-----------------------------------------------------------------------------------' |
||||
*/ |
||||
[_QWERTY] = { |
||||
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, |
||||
{_______, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL}, |
||||
{_______, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, |
||||
{_______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______}, |
||||
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} |
||||
}, |
||||
|
||||
/* Lower
|
||||
* ,-----------------------------------------------------------------------------------. |
||||
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del | |
||||
* |------+------+------+------+------+------+------+------+------+------+------+------| |
||||
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del | |
||||
* |------+------+------+------+------+-------------+------+------+------+------+------| |
||||
* | | F1 | F2 | F3 | F4 | F5 | F6 | 4 | 5 | 6 | Home |PageUp| |
||||
* |------+------+------+------+------+------|------+------+------+------+------+------| |
||||
* | | F7 | F8 | F9 | F10 | F11 | F12 | 1 | 2 | 3 | End |PageDn| |
||||
* |------+------+------+------+------+------+------+------+------+------+------+------| |
||||
* | | | | | | | | Next | Vol- | Vol+ | Play | |
||||
* `-----------------------------------------------------------------------------------' |
||||
*/ |
||||
[_LOWER] = { |
||||
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, 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_DEL}, |
||||
{_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_4, KC_5, KC_6, KC_HOME, KC_PGUP}, |
||||
{_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_1, KC_2, KC_3, KC_END, KC_PGDN}, |
||||
{_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} |
||||
}, |
||||
|
||||
/* Raise
|
||||
* ,-----------------------------------------------------------------------------------. |
||||
* | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | |
||||
* |------+------+------+------+------+-------------+------+------+------+------+------| |
||||
* | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | |
||||
* |------+------+------+------+------+-------------+------+------+------+------+------| |
||||
* | | | | | | | | _ | + | { | } | | | |
||||
* |------+------+------+------+------+------|------+------+------+------+------+------| |
||||
* | | | | | | | | - | = | [ | ] | \ | |
||||
* |------+------+------+------+------+------+------+------+------+------+------+------| |
||||
* | | | | | | | | Next | Vol- | Vol+ | Play | |
||||
* `-----------------------------------------------------------------------------------' |
||||
*/ |
||||
[_RAISE] = { |
||||
{KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL}, |
||||
{KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL}, |
||||
{_______, _______, _______, _______, _______, _______, _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, |
||||
{_______, _______, _______, _______, _______, _______, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, |
||||
{_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} |
||||
}, |
||||
|
||||
/* Adjust (Lower + Raise)
|
||||
* ,-----------------------------------------------------------------------------------. |
||||
* | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | |
||||
* |------+------+------+------+------+------+------+------+------+------+------+------| |
||||
* | | Reset| | | | | | | | | | Del | |
||||
* |------+------+------+------+------+-------------+------+------+------+------+------| |
||||
* | | | |Aud on|AudOff|AGnorm|AGswap|Dvorak|Qwerty| | | | |
||||
* |------+------+------+------+------+------|------+------+------+------+------+------| |
||||
* | |Voice-|Voice+|Mus on|MusOff|MidiOn|MidOff| | | | | | |
||||
* |------+------+------+------+------+------+------+------+------+------+------+------| |
||||
* | | | | | | | | | | | | |
||||
* `-----------------------------------------------------------------------------------' |
||||
*/ |
||||
[_ADJUST] = { |
||||
{KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12}, |
||||
{_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL}, |
||||
{_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, DVORAK, QWERTY, _______, _______, _______}, |
||||
{_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______}, |
||||
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} |
||||
} |
||||
|
||||
|
||||
}; |
||||
|
||||
#ifdef AUDIO_ENABLE |
||||
float tone_startup[][2] = { |
||||
{NOTE_B5, 20}, |
||||
{NOTE_B6, 8}, |
||||
{NOTE_DS6, 20}, |
||||
{NOTE_B6, 8} |
||||
}; |
||||
|
||||
float tone_dvorak[][2] = SONG(DVORAK_SOUND); |
||||
float tone_qwerty[][2] = SONG(QWERTY_SOUND); |
||||
|
||||
float tone_goodbye[][2] = SONG(GOODBYE_SOUND); |
||||
|
||||
float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); |
||||
#endif |
||||
|
||||
void persistant_default_layer_set(uint16_t default_layer) { |
||||
eeconfig_update_default_layer(default_layer); |
||||
default_layer_set(default_layer); |
||||
} |
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) { |
||||
switch (keycode) { |
||||
case DVORAK: |
||||
if (record->event.pressed) { |
||||
#ifdef AUDIO_ENABLE |
||||
PLAY_NOTE_ARRAY(tone_dvorak, false, 0); |
||||
#endif |
||||
persistant_default_layer_set(1UL<<_DVORAK); |
||||
} |
||||
return false; |
||||
break; |
||||
case QWERTY: |
||||
if (record->event.pressed) { |
||||
#ifdef AUDIO_ENABLE |
||||
PLAY_NOTE_ARRAY(tone_qwerty, false, 0); |
||||
#endif |
||||
persistant_default_layer_set(1UL<<_QWERTY); |
||||
} |
||||
return false; |
||||
break; |
||||
case LOWER: |
||||
if (record->event.pressed) { |
||||
layer_on(_LOWER); |
||||
update_tri_layer(_LOWER, _RAISE, _ADJUST); |
||||
} else { |
||||
layer_off(_LOWER); |
||||
update_tri_layer(_LOWER, _RAISE, _ADJUST); |
||||
} |
||||
return false; |
||||
break; |
||||
case RAISE: |
||||
if (record->event.pressed) { |
||||
layer_on(_RAISE); |
||||
update_tri_layer(_LOWER, _RAISE, _ADJUST); |
||||
} else { |
||||
layer_off(_RAISE); |
||||
update_tri_layer(_LOWER, _RAISE, _ADJUST); |
||||
} |
||||
return false; |
||||
break; |
||||
case BACKLIT: |
||||
if (record->event.pressed) { |
||||
register_code(KC_RSFT); |
||||
#ifdef BACKLIGHT_ENABLE |
||||
backlight_step(); |
||||
#endif |
||||
} else { |
||||
unregister_code(KC_RSFT); |
||||
} |
||||
return false; |
||||
break; |
||||
} |
||||
return true; |
||||
}; |
||||
|
||||
void matrix_init_user(void) { |
||||
#ifdef AUDIO_ENABLE |
||||
startup_user(); |
||||
#endif |
||||
} |
||||
|
||||
#ifdef AUDIO_ENABLE |
||||
|
||||
void startup_user() |
||||
{ |
||||
_delay_ms(20); // gets rid of tick
|
||||
PLAY_NOTE_ARRAY(tone_startup, false, 0); |
||||
} |
||||
|
||||
void shutdown_user() |
||||
{ |
||||
PLAY_NOTE_ARRAY(tone_goodbye, false, 0); |
||||
_delay_ms(150); |
||||
stop_all_notes(); |
||||
} |
||||
|
||||
void music_on_user(void) |
||||
{ |
||||
music_scale_user(); |
||||
} |
||||
|
||||
void music_scale_user(void) |
||||
{ |
||||
PLAY_NOTE_ARRAY(music_scale, false, 0); |
||||
} |
||||
|
||||
#endif |
@ -0,0 +1,85 @@ |
||||
# smt's Preonic keymap |
||||
|
||||
This keymap is primarily based on the default Preonic keymap, which in turn is derived from Planck's default. |
||||
|
||||
Notable differences from the default are: |
||||
|
||||
1. **Dvorak by default** |
||||
|
||||
I happen to type in Dvorak, and prefer that layer to be the default on my keyboard. This is easy enough to switch around with Qwerty, Colemak, or whatever. |
||||
|
||||
2. **Right Shift** |
||||
|
||||
I use both the left and right shift keys when I type. When I want to modify a key with shift, I hold shift with the hand opposite the one typing the key. In the default keymap, Enter is where shift would be on a standard keyboard layout. Oh, muscle memory. |
||||
|
||||
Thankfully, QMK supports [mod-tap](https://github.com/jackhumbert/qmk_firmware/wiki#fun-with-modifier-keys) keys, and this allows me to set the Enter key to send a modifier (MOD_LSFT) when held, and KC_ENT when tapped. Awesome! |
||||
|
||||
## Dvorak (default) |
||||
|
||||
``` |
||||
,-----------------------------------------------------------------------------------. |
||||
| ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | |
||||
|------+------+------+------+------+------+------+------+------+------+------+------| |
||||
| Tab | " | , | . | P | Y | F | G | C | R | L | / | |
||||
|------+------+------+------+------+-------------+------+------+------+------+------| |
||||
| Esc | A | O | E | U | I | D | H | T | N | S | - | |
||||
|------+------+------+------+------+------|------+------+------+------+------+------| |
||||
| Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | |
||||
|------+------+------+------+------+------+------+------+------+------+------+------| |
||||
| Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | |
||||
`-----------------------------------------------------------------------------------' |
||||
``` |
||||
|
||||
## Qwerty (same as default) |
||||
|
||||
``` |
||||
,-----------------------------------------------------------------------------------. |
||||
| ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | |
||||
|------+------+------+------+------+------+------+------+------+------+------+------| |
||||
| Tab | Q | W | E | R | T | Y | U | I | O | P | Del | |
||||
|------+------+------+------+------+-------------+------+------+------+------+------| |
||||
| Esc | A | S | D | F | G | H | J | K | L | ; | " | |
||||
|------+------+------+------+------+------|------+------+------+------+------+------| |
||||
| Shift| Z | X | C | V | B | N | M | , | . | / |Enter | |
||||
|------+------+------+------+------+------+------+------+------+------+------+------| |
||||
| Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | |
||||
`-----------------------------------------------------------------------------------' |
||||
``` |
||||
|
||||
## Lower |
||||
|
||||
This is where I put the number row, a numpad cluster, function keys, and some light navigation via Home/End/PageUp/PageDn. Like the "Raise" layer, the top row is redundant to help with Planck compatibility. |
||||
|
||||
``` |
||||
,-----------------------------------------------------------------------------------. |
||||
| ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del | |
||||
|------+------+------+------+------+------+------+------+------+------+------+------| |
||||
| ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del | |
||||
|------+------+------+------+------+-------------+------+------+------+------+------| |
||||
| | F1 | F2 | F3 | F4 | F5 | F6 | 4 | 5 | 6 | Home |PageUp| |
||||
|------+------+------+------+------+------|------+------+------+------+------+------| |
||||
| | F7 | F8 | F9 | F10 | F11 | F12 | 1 | 2 | 3 | End |PageDn| |
||||
|------+------+------+------+------+------+------+------+------+------+------+------| |
||||
| | | | | | | | Next | Vol- | Vol+ | Play | |
||||
`-----------------------------------------------------------------------------------' |
||||
``` |
||||
|
||||
## Raise |
||||
|
||||
As a developer, it makes the most sense for me to group all the commonly-used symbols that don't fit on the main layer. In particular, having the dual-column of parens-braces-brackets really helps a lot. |
||||
|
||||
I haven't completely filled this layer, which leaves room for future mappings and macros. |
||||
|
||||
``` |
||||
,-----------------------------------------------------------------------------------. |
||||
| ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | |
||||
|------+------+------+------+------+-------------+------+------+------+------+------| |
||||
| ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | |
||||
|------+------+------+------+------+-------------+------+------+------+------+------| |
||||
| | | | | | | | _ | + | { | } | | | |
||||
|------+------+------+------+------+------|------+------+------+------+------+------| |
||||
| | | | | | | | - | = | [ | ] | \ | |
||||
|------+------+------+------+------+------+------+------+------+------+------+------| |
||||
| | | | | | | | Next | Vol- | Vol+ | Play | |
||||
`-----------------------------------------------------------------------------------' |
||||
``` |
Loading…
Reference in new issue