* Add Planck keymap and custom keycodes to userspace * Add Preonic keymap and extract common ortho layers and keycodes * Add Leaf60 WKL keymap * Add M60-A keymap * Add Levinson keymap * Fix links in personal readmes * Use flash target * Remove duplicate definition Co-Authored-By: fauxpark <fauxpark@gmail.com> * Remove superfluous line endings * Planck and preonic encoder should have the same behavior * Use higher level API Co-Authored-By: fauxpark <fauxpark@gmail.com> * Use layouts to reduce planck/levinson duplication * Update flash instructions for levinsonpull/7066/head
@ -0,0 +1,19 @@ | |||||
/* Copyright 2019 Fox Lab | |||||
* | |||||
* 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 | |||||
// place overrides here |
@ -0,0 +1,43 @@ | |||||
/* Copyright 2019 Fox Lab | |||||
* | |||||
* 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 "mguterl.h" | |||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||||
[_QWERTY] = LAYOUT_all( | |||||
KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, | |||||
HPR_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, | |||||
ESC_CTL, 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_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(UTIL), | |||||
KC_LALT, KC_LALT, KC_LGUI, SPC_UTL, SPC_UTL, SPC_UTL, KC_RALT, MO(1), KC_RGUI, KC_RCTL), | |||||
[_GAMING] = LAYOUT_all( | |||||
KC_ESC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, | |||||
KC_TAB, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, | |||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, | |||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, | |||||
_______, _______, _______, _______, KC_SPC, _______, _______, _______, _______, _______), | |||||
[_UTIL] = LAYOUT_all( | |||||
RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, | |||||
TG_GAME, KC_MPLY, KC_MPRV, KC_MNXT, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______, _______, _______, | |||||
_______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, | |||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, | |||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______) | |||||
}; |
@ -0,0 +1,11 @@ | |||||
# Michael Guterl's Leaf60 WKL Layout | |||||
Check out my [userspace](/users/mguterl) for the custom keycodes that are used | |||||
in keymap.c. | |||||
This is a pretty standard 60% WKL layout. I add a couple of layers to add | |||||
some conveniences and add vimkeys for navigation. | |||||
```sh | |||||
make foxlab/leaf60/universal:mguterl:flash | |||||
``` |
@ -0,0 +1,37 @@ | |||||
#pragma once | |||||
#ifdef AUDIO_ENABLE | |||||
#define STARTUP_SONG SONG(PREONIC_SOUND) | |||||
// #define STARTUP_SONG SONG(NO_SOUND) | |||||
#define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \ | |||||
SONG(COLEMAK_SOUND), \ | |||||
SONG(DVORAK_SOUND) \ | |||||
} | |||||
#endif | |||||
#define MUSIC_MASK (keycode != KC_NO) | |||||
/* | |||||
* MIDI options | |||||
*/ | |||||
/* Prevent use of disabled MIDI features in the keymap */ | |||||
//#define MIDI_ENABLE_STRICT 1 | |||||
/* enable basic MIDI features: | |||||
- MIDI notes can be sent when in Music mode is on | |||||
*/ | |||||
#define MIDI_BASIC | |||||
/* enable advanced MIDI features: | |||||
- MIDI notes can be added to the keymap | |||||
- Octave shift and transpose | |||||
- Virtual sustain, portamento, and modulation wheel | |||||
- etc. | |||||
*/ | |||||
//#define MIDI_ADVANCED | |||||
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ | |||||
//#define MIDI_TONE_KEYCODE_OCTAVES 2 |
@ -0,0 +1,323 @@ | |||||
/* Copyright 2015-2017 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/>. | |||||
*/ | |||||
#include QMK_KEYBOARD_H | |||||
#include "muse.h" | |||||
#include "mguterl.h" | |||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||||
/* Qwerty | |||||
* ,-----------------------------------------------------------------------------------. | |||||
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | | |||||
* |------+------+------+------+------+------+------+------+------+------+------+------| | |||||
* |HypTab| Q | W | E | R | T | Y | U | I | O | P | Bksp | | |||||
* |------+------+------+------+------+------+------+------+------+------+------+------| | |||||
* |EscCtl| A | S | D | F | G | H | J | K | L | ; | " | | |||||
* |------+------+------+------+------+------+------+------+------+------+------+------| | |||||
* | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | | |||||
* |------+------+------+------+------+------+------+------+------+------+------+------| | |||||
* | GESC | Ctrl | Alt | GUI |Lower |SpcUtl|SpcUtl|Raise | Left | Down | Up |Right | | |||||
* `-----------------------------------------------------------------------------------' | |||||
*/ | |||||
[_QWERTY] = LAYOUT_preonic_grid( \ | |||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, | |||||
HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, | |||||
ESC_CTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, | |||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT, | |||||
KC_GESC, KC_LCTL, KC_LALT, KC_LGUI, LOWER, SPC_UTL, SPC_UTL, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT | |||||
), | |||||
/* | |||||
* Gaming is very similar to Qwerty. Certain features from Qwerty are disable | |||||
* for better gaming experience. | |||||
*/ | |||||
[_GAMING] = LAYOUT_preonic_grid( \ | |||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, | |||||
KC_TAB, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, | |||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, | |||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, | |||||
KC_ESC, _______, _______, _______, _______, KC_SPC, KC_SPC, _______, _______, _______, _______, _______ | |||||
), | |||||
/* | |||||
* Util is accessed by holding Space. The Util layer contains vimkeys and | |||||
* shortcuts that I find myself needing often. | |||||
*/ | |||||
[_UTIL] = LAYOUT_preonic_grid( \ | |||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, | |||||
_______, GUI_1, GUI_2, GUI_3, GUI_4, GUI_5, GUI_6, GUI_7, GUI_8, GUI_9, GUI_0, _______, | |||||
_______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, | |||||
_______, _______, _______, _______, _______, _______, _______, GO_BACK, GO_FWD, _______, _______, _______, | |||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ | |||||
), | |||||
/* Colemak | |||||
* ,-----------------------------------------------------------------------------------. | |||||
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | | |||||
* |------+------+------+------+------+------+------+------+------+------+------+------| | |||||
* | Tab | Q | W | F | P | G | J | L | U | Y | ; | Del | | |||||
* |------+------+------+------+------+-------------+------+------+------+------+------| | |||||
* | Esc | A | R | S | T | D | H | N | E | I | O | " | | |||||
* |------+------+------+------+------+------|------+------+------+------+------+------| | |||||
* | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | | |||||
* |------+------+------+------+------+------+------+------+------+------+------+------| | |||||
* | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | | |||||
* `-----------------------------------------------------------------------------------' | |||||
*/ | |||||
[_COLEMAK] = LAYOUT_preonic_grid( \ | |||||
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_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_DEL, | |||||
KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, | |||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, | |||||
BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT | |||||
), | |||||
/* Dvorak | |||||
* ,-----------------------------------------------------------------------------------. | |||||
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | | |||||
* |------+------+------+------+------+------+------+------+------+------+------+------| | |||||
* | Tab | " | , | . | P | Y | F | G | C | R | L | Del | | |||||
* |------+------+------+------+------+-------------+------+------+------+------+------| | |||||
* | 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] = LAYOUT_preonic_grid( \ | |||||
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_DEL, | |||||
KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, | |||||
KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT, | |||||
BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT | |||||
), | |||||
/* Lower | |||||
* ,-----------------------------------------------------------------------------------. | |||||
* | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | | |||||
* |------+------+------+------+------+-------------+------+------+------+------+------| | |||||
* | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | | |||||
* |------+------+------+------+------+------+------+------+------+------+------+------| | |||||
* | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | | |||||
* |------+------+------+------+------+------+------+------+------+------+------+------| | |||||
* | | F7 | F8 | F9 | F10 | F11 | F12 | - | = | [ | ] | | | |||||
* |------+------+------+------+------+------+------+------+------+------+------+------| | |||||
* | | | | | | | | Next | Vol- | Vol+ | Play | | |||||
* `-----------------------------------------------------------------------------------' | |||||
*/ | |||||
[_LOWER] = LAYOUT_preonic_grid( \ | |||||
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, | |||||
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, | |||||
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, | |||||
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, | |||||
_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY | |||||
), | |||||
/* Raise | |||||
* ,-----------------------------------------------------------------------------------. | |||||
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | | |||||
* |------+------+------+------+------+------+------+------+------+------+------+------| | |||||
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | | |||||
* |------+------+------+------+------+------+------+------+------+------+------+------| | |||||
* | Del | F1 | F2 | F3 | F4 | F5 | F6 | | | | | | | |||||
* |------+------+------+------+------+------+------+------+------+------+------+------| | |||||
* | | F7 | F8 | F9 | F10 | F11 | F12 | | |Pg Up |Pg Dn | | | |||||
* |------+------+------+------+------+------+------+------+------+------+------+------| | |||||
* | | | | | | | | Next | Vol- | Vol+ | Play | | |||||
* `-----------------------------------------------------------------------------------' | |||||
*/ | |||||
[_RAISE] = LAYOUT_preonic_grid( \ | |||||
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_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, | |||||
KC_DEL, 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_PGUP, KC_PGDN, _______, | |||||
_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY | |||||
), | |||||
/* Adjust (Lower + Raise) | |||||
* ,-----------------------------------------------------------------------------------. | |||||
* | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | | |||||
* |------+------+------+------+------+------+------+------+------+------+------+------| | |||||
* |ToGame| Reset| | | | | | | | | | Del | | |||||
* |------+------+------+------+------+-------------+------+------+------+------+------| | |||||
* | | | |Aud on|AudOff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | | |||||
* |------+------+------+------+------+------|------+------+------+------+------+------| | |||||
* | |Voice-|Voice+|Mus on|MusOff|MidiOn|MidOff| | | | | | | |||||
* |------+------+------+------+------+------+------+------+------+------+------+------| | |||||
* | | | | | | | | | | | | | |||||
* `-----------------------------------------------------------------------------------' | |||||
*/ | |||||
[_ADJUST] = LAYOUT_preonic_grid( \ | |||||
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, | |||||
TG_GAME, RESET, DEBUG, _______, _______, _______, _______, TERM_ON, TERM_OFF,_______, _______, KC_DEL, | |||||
_______, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, | |||||
_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______, | |||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ | |||||
) | |||||
}; | |||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) { | |||||
switch (keycode) { | |||||
case QWERTY: | |||||
if (record->event.pressed) { | |||||
set_single_persistent_default_layer(_QWERTY); | |||||
} | |||||
return false; | |||||
break; | |||||
case COLEMAK: | |||||
if (record->event.pressed) { | |||||
set_single_persistent_default_layer(_COLEMAK); | |||||
} | |||||
return false; | |||||
break; | |||||
case DVORAK: | |||||
if (record->event.pressed) { | |||||
set_single_persistent_default_layer(_DVORAK); | |||||
} | |||||
return false; | |||||
break; | |||||
case LOWER: | |||||
if (record->event.pressed) { | |||||
layer_on(_LOWER); | |||||
update_tri_layer(_LOWER, _RAISE, _ADJUST); | |||||
} else { | |||||
layer_off(_LOWER); | |||||
update_tri_layer(_LOWER, _RAISE, _ADJUST); | |||||
} | |||||
return false; | |||||
break; | |||||
case RAISE: | |||||
if (record->event.pressed) { | |||||
layer_on(_RAISE); | |||||
update_tri_layer(_LOWER, _RAISE, _ADJUST); | |||||
} else { | |||||
layer_off(_RAISE); | |||||
update_tri_layer(_LOWER, _RAISE, _ADJUST); | |||||
} | |||||
return false; | |||||
break; | |||||
case BACKLIT: | |||||
if (record->event.pressed) { | |||||
register_code(KC_RSFT); | |||||
#ifdef BACKLIGHT_ENABLE | |||||
backlight_step(); | |||||
#endif | |||||
#ifdef __AVR__ | |||||
writePinLow(E6); | |||||
#endif | |||||
} else { | |||||
unregister_code(KC_RSFT); | |||||
#ifdef __AVR__ | |||||
writePinHigh(E6); | |||||
#endif | |||||
} | |||||
return false; | |||||
break; | |||||
} | |||||
return true; | |||||
}; | |||||
bool muse_mode = false; | |||||
uint8_t last_muse_note = 0; | |||||
uint16_t muse_counter = 0; | |||||
uint8_t muse_offset = 70; | |||||
uint16_t muse_tempo = 50; | |||||
void encoder_update_user(uint8_t index, bool clockwise) { | |||||
if (muse_mode) { | |||||
if (IS_LAYER_ON(_RAISE)) { | |||||
if (clockwise) { | |||||
muse_offset++; | |||||
} else { | |||||
muse_offset--; | |||||
} | |||||
} else { | |||||
if (clockwise) { | |||||
muse_tempo+=1; | |||||
} else { | |||||
muse_tempo-=1; | |||||
} | |||||
} | |||||
} else { | |||||
if (clockwise) { | |||||
#ifdef MOUSEKEY_ENABLE | |||||
tap_code(KC_MS_WH_DOWN); | |||||
#else | |||||
tap_code(KC_PGDN); | |||||
#endif | |||||
} else { | |||||
#ifdef MOUSEKEY_ENABLE | |||||
tap_code(KC_MS_WH_UP); | |||||
#else | |||||
tap_code(KC_PGUP); | |||||
#endif | |||||
} | |||||
} | |||||
} | |||||
void dip_switch_update_user(uint8_t index, bool active) { | |||||
switch (index) { | |||||
case 0: | |||||
if (active) { | |||||
layer_on(_ADJUST); | |||||
} else { | |||||
layer_off(_ADJUST); | |||||
} | |||||
break; | |||||
case 1: | |||||
if (active) { | |||||
muse_mode = true; | |||||
} else { | |||||
muse_mode = false; | |||||
} | |||||
} | |||||
} | |||||
void matrix_scan_user(void) { | |||||
#ifdef AUDIO_ENABLE | |||||
if (muse_mode) { | |||||
if (muse_counter == 0) { | |||||
uint8_t muse_note = muse_offset + SCALE[muse_clock_pulse()]; | |||||
if (muse_note != last_muse_note) { | |||||
stop_note(compute_freq_for_midi_note(last_muse_note)); | |||||
play_note(compute_freq_for_midi_note(muse_note), 0xF); | |||||
last_muse_note = muse_note; | |||||
} | |||||
} | |||||
muse_counter = (muse_counter + 1) % muse_tempo; | |||||
} else { | |||||
if (muse_counter) { | |||||
stop_all_notes(); | |||||
muse_counter = 0; | |||||
} | |||||
} | |||||
#endif | |||||
} | |||||
bool music_mask_user(uint16_t keycode) { | |||||
switch (keycode) { | |||||
case RAISE: | |||||
case LOWER: | |||||
return false; | |||||
default: | |||||
return true; | |||||
} | |||||
} |
@ -0,0 +1,18 @@ | |||||
# Michael Guterl's Preonic Layout | |||||
I have a very similar [keymap](/keyboards/planck/keymaps/mguterl) for my | |||||
Planck. | |||||
Check out my [userspace](/users/mguterl) for the custom keycodes that are used | |||||
in keymap.c. | |||||
At a very high level I use 4 layers: | |||||
* Qwerty - Letters | |||||
* Util - Vimkeys for navigation and other convenient things | |||||
* Raise - Numbers and F keys | |||||
* Lower - Symbols | |||||
```sh | |||||
make preonic/rev3:mguterl:flash | |||||
``` |
@ -0,0 +1 @@ | |||||
SRC += muse.c |
@ -0,0 +1,82 @@ | |||||
#include QMK_KEYBOARD_H | |||||
#define QWER 0 | |||||
#define GAMING 1 | |||||
#define HHKB 2 | |||||
#define UTIL 3 | |||||
#define LIGHTING 4 | |||||
#define HPR_TAB ALL_T(KC_TAB) // Tap for Tab, hold for Hyper (Super+Ctrl+Shift+Alt) | |||||
#define TG_GAME TG(GAMING) | |||||
enum custom_keycodes { | |||||
FN_HHKB = SAFE_RANGE, | |||||
FN_UTIL | |||||
}; | |||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) | |||||
{ | |||||
switch(keycode) { | |||||
case FN_HHKB: | |||||
if (record->event.pressed) { | |||||
layer_on(2); | |||||
update_tri_layer(2, 3, 4); | |||||
} else { | |||||
layer_off(2); | |||||
update_tri_layer(2, 3, 4); | |||||
} | |||||
return false; | |||||
break; | |||||
case FN_UTIL: | |||||
if (record->event.pressed) { | |||||
layer_on(3); | |||||
update_tri_layer(2, 3, 4); | |||||
} else { | |||||
layer_off(3); | |||||
update_tri_layer(2, 3, 4); | |||||
} | |||||
return false; | |||||
break; | |||||
default: | |||||
return true; | |||||
} | |||||
} | |||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||||
[QWER] = LAYOUT_60_hhkb( | |||||
KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, | |||||
HPR_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_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, FN_HHKB, | |||||
KC_LALT, KC_LGUI, LT(UTIL, KC_SPC), KC_RGUI, FN_UTIL), | |||||
[GAMING] = LAYOUT_60_hhkb( | |||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, | |||||
KC_TAB, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, | |||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, | |||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, | |||||
_______, _______, KC_SPC, _______, _______), | |||||
[HHKB] = LAYOUT_60_hhkb( | |||||
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_INS, KC_DEL, | |||||
KC_CAPS, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, _______, _______, | |||||
_______, KC_VOLD, KC_VOLU, KC_MUTE, KC_EJCT, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, _______, | |||||
_______, _______, _______, _______, _______, _______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______, | |||||
_______, _______, _______, _______, _______), | |||||
[UTIL] = LAYOUT_60_hhkb( | |||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, | |||||
_______, KC_MPLY, KC_MPRV, KC_MNXT, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______, _______, _______, | |||||
_______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, | |||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, | |||||
_______, _______, _______, _______, _______), | |||||
[LIGHTING] = LAYOUT_60_hhkb( | |||||
RESET, EF_DEC, EF_INC, H1_DEC, H1_INC, H2_DEC, H2_INC, _______, _______, _______, _______, BR_DEC, BR_INC, _______, _______, | |||||
TG_GAME, _______, _______, S1_DEC, S1_INC, S2_DEC, S2_INC, _______, _______, _______, _______, ES_DEC, ES_INC, _______, | |||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, | |||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, | |||||
_______, _______, _______, _______, _______), | |||||
}; |
@ -0,0 +1,15 @@ | |||||
# Michael Guterl's M60-A Layout | |||||
Check out my [userspace](/users/mguterl) for the custom keycodes that are used | |||||
in keymap.c. | |||||
This is a pretty standard HHKB layout. I add a couple of layers to add | |||||
some conveniences and add vimkeys for navigation. | |||||
If you flash a layout without RESET then you can unplug the keyboard, hold | |||||
spacebar and escape, and then plug the keyboard back. This sequence of | |||||
actions will allow you to flash the keyboard. | |||||
```sh | |||||
make wilba_tech/rama_works_m60a:mguterl:flash | |||||
``` |
@ -0,0 +1 @@ | |||||
DYNAMIC_KEYMAP_ENABLE = no |
@ -0,0 +1,39 @@ | |||||
#pragma once | |||||
#ifdef AUDIO_ENABLE | |||||
#define STARTUP_SONG SONG(PLANCK_SOUND) | |||||
// #define STARTUP_SONG SONG(NO_SOUND) | |||||
#define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \ | |||||
SONG(COLEMAK_SOUND), \ | |||||
SONG(DVORAK_SOUND) \ | |||||
} | |||||
#endif | |||||
/* | |||||
* MIDI options | |||||
*/ | |||||
/* Prevent use of disabled MIDI features in the keymap */ | |||||
//#define MIDI_ENABLE_STRICT 1 | |||||
/* enable basic MIDI features: | |||||
- MIDI notes can be sent when in Music mode is on | |||||
*/ | |||||
#define MIDI_BASIC | |||||
/* enable advanced MIDI features: | |||||
- MIDI notes can be added to the keymap | |||||
- Octave shift and transpose | |||||
- Virtual sustain, portamento, and modulation wheel | |||||
- etc. | |||||
*/ | |||||
//#define MIDI_ADVANCED | |||||
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ | |||||
//#define MIDI_TONE_KEYCODE_OCTAVES 2 | |||||
// Most tactile encoders have detents every 4 stages | |||||
#define ENCODER_RESOLUTION 4 | |||||
@ -0,0 +1,352 @@ | |||||
/* Copyright 2015-2017 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/>. | |||||
*/ | |||||
#include QMK_KEYBOARD_H | |||||
#include "muse.h" | |||||
#include "mguterl.h" | |||||
extern keymap_config_t keymap_config; | |||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||||
/* Qwerty | |||||
* ,-----------------------------------------------------------------------------------. | |||||
* |HypTab| Q | W | E | R | T | Y | U | I | O | P | Bksp | | |||||
* |------+------+------+------+------+------+------+------+------+------+------+------| | |||||
* |EscCtl| A | S | D | F | G | H | J | K | L | ; | " | | |||||
* |------+------+------+------+------+------+------+------+------+------+------+------| | |||||
* | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | | |||||
* |------+------+------+------+------+------+------+------+------+------+------+------| | |||||
* | GESC | Ctrl | Alt | GUI |Lower |SpcUtl|SpcUtl|Raise | Left | Down | Up |Right | | |||||
* `-----------------------------------------------------------------------------------' | |||||
*/ | |||||
[_QWERTY] = LAYOUT_ortho_4x12( | |||||
HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, | |||||
ESC_CTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, | |||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT, | |||||
KC_GESC, KC_LCTL, KC_LALT, KC_LGUI, LOWER, SPC_UTL, SPC_UTL, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT | |||||
), | |||||
/* | |||||
* Gaming is very similar to Qwerty. Certain features from Qwerty are disable | |||||
* for better gaming experience. | |||||
*/ | |||||
[_GAMING] = LAYOUT_ortho_4x12( | |||||
KC_TAB, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, | |||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, | |||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, | |||||
KC_ESC, _______, _______, _______, _______, KC_SPC, KC_SPC, _______, _______, _______, _______, _______ | |||||
), | |||||
/* | |||||
* Util is accessed by holding Space. The Util layer contains vimkeys and | |||||
* shortcuts that I find myself needing often. | |||||
*/ | |||||
[_UTIL] = LAYOUT_ortho_4x12( \ | |||||
_______, GUI_1, GUI_2, GUI_3, GUI_4, GUI_5, GUI_6, GUI_7, GUI_8, GUI_9, GUI_0, _______, | |||||
_______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, | |||||
_______, _______, _______, _______, _______, _______, _______, GO_BACK, GO_FWD, _______, _______, _______, | |||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ | |||||
), | |||||
/* Colemak | |||||
* ,-----------------------------------------------------------------------------------. | |||||
* | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | | |||||
* |------+------+------+------+------+------+------+------+------+------+------+------| | |||||
* | Esc | A | R | S | T | D | H | N | E | I | O | " | | |||||
* |------+------+------+------+------+------+------+------+------+------+------+------| | |||||
* | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | | |||||
* |------+------+------+------+------+------+------+------+------+------+------+------| | |||||
* | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | | |||||
* `-----------------------------------------------------------------------------------' | |||||
*/ | |||||
[_COLEMAK] = LAYOUT_ortho_4x12( | |||||
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, | |||||
KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, | |||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , | |||||
BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT | |||||
), | |||||
/* Dvorak | |||||
* ,-----------------------------------------------------------------------------------. | |||||
* | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp | | |||||
* |------+------+------+------+------+------+------+------+------+------+------+------| | |||||
* | 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] = LAYOUT_ortho_4x12( | |||||
KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, | |||||
KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, | |||||
KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , | |||||
BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT | |||||
), | |||||
/* Lower | |||||
* ,-----------------------------------------------------------------------------------. | |||||
* | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | | |||||
* |------+------+------+------+------+------+------+------+------+------+------+------| | |||||
* | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | | |||||
* |------+------+------+------+------+------+------+------+------+------+------+------| | |||||
* | | F7 | F8 | F9 | F10 | F11 | F12 | - | = | [ | ] | | | |||||
* |------+------+------+------+------+------+------+------+------+------+------+------| | |||||
* | | | | | | | | Next | Vol- | Vol+ | Play | | |||||
* `-----------------------------------------------------------------------------------' | |||||
*/ | |||||
[_LOWER] = LAYOUT_ortho_4x12( | |||||
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, | |||||
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, | |||||
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, | |||||
_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY | |||||
), | |||||
/* Raise | |||||
* ,-----------------------------------------------------------------------------------. | |||||
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | | |||||
* |------+------+------+------+------+------+------+------+------+------+------+------| | |||||
* | Del | F1 | F2 | F3 | F4 | F5 | F6 | | | | | | | |||||
* |------+------+------+------+------+------+------+------+------+------+------+------| | |||||
* | | F7 | F8 | F9 | F10 | F11 | F12 | | |Pg Up |Pg Dn | | | |||||
* |------+------+------+------+------+------+------+------+------+------+------+------| | |||||
* | | | | | | | | Next | Vol- | Vol+ | Play | | |||||
* `-----------------------------------------------------------------------------------' | |||||
*/ | |||||
[_RAISE] = LAYOUT_ortho_4x12( | |||||
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_DEL, 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_PGUP, KC_PGDN, _______, | |||||
_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY | |||||
), | |||||
/* Plover layer (http://opensteno.org) | |||||
* ,-----------------------------------------------------------------------------------. | |||||
* | # | # | # | # | # | # | # | # | # | # | # | # | | |||||
* |------+------+------+------+------+------+------+------+------+------+------+------| | |||||
* | | S | T | P | H | * | * | F | P | L | T | D | | |||||
* |------+------+------+------+------+------+------+------+------+------+------+------| | |||||
* | | S | K | W | R | * | * | R | B | G | S | Z | | |||||
* |------+------+------+------+------+------+------+------+------+------+------+------| | |||||
* | Exit | | | A | O | | E | U | | | | | |||||
* `-----------------------------------------------------------------------------------' | |||||
*/ | |||||
[_PLOVER] = LAYOUT_ortho_4x12( | |||||
KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 , | |||||
XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, | |||||
XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, | |||||
EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX | |||||
), | |||||
/* Adjust (Lower + Raise) | |||||
* v------------------------RGB CONTROL--------------------v | |||||
* ,-----------------------------------------------------------------------------------. | |||||
* |ToGame| Reset|Debug | RGB |RGBMOD| HUE+ | HUE- | SAT+ | SAT- |BRGTH+|BRGTH-| Del | | |||||
* |------+------+------+------+------+------+------+------+------+------+------+------| | |||||
* | | |MUSmod|Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| | | |||||
* |------+------+------+------+------+------+------+------+------+------+------+------| | |||||
* | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof|TermOn|TermOf| | | | | |||||
* |------+------+------+------+------+------+------+------+------+------+------+------| | |||||
* | | | | | | | | | | | | | |||||
* `-----------------------------------------------------------------------------------' | |||||
*/ | |||||
[_ADJUST] = LAYOUT_ortho_4x12( | |||||
TG_GAME, RESET, DEBUG, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL , | |||||
_______, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______, | |||||
_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, TERM_ON, TERM_OFF, _______, _______, _______, | |||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ | |||||
) | |||||
}; | |||||
#ifdef AUDIO_ENABLE | |||||
float plover_song[][2] = SONG(PLOVER_SOUND); | |||||
float plover_gb_song[][2] = SONG(PLOVER_GOODBYE_SOUND); | |||||
#endif | |||||
layer_state_t layer_state_set_user(layer_state_t state) { | |||||
return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST); | |||||
} | |||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) { | |||||
switch (keycode) { | |||||
case QWERTY: | |||||
if (record->event.pressed) { | |||||
print("mode just switched to qwerty and this is a huge string\n"); | |||||
set_single_persistent_default_layer(_QWERTY); | |||||
} | |||||
return false; | |||||
break; | |||||
case COLEMAK: | |||||
if (record->event.pressed) { | |||||
set_single_persistent_default_layer(_COLEMAK); | |||||
} | |||||
return false; | |||||
break; | |||||
case DVORAK: | |||||
if (record->event.pressed) { | |||||
set_single_persistent_default_layer(_DVORAK); | |||||
} | |||||
return false; | |||||
break; | |||||
case BACKLIT: | |||||
if (record->event.pressed) { | |||||
register_code(KC_RSFT); | |||||
#ifdef BACKLIGHT_ENABLE | |||||
backlight_step(); | |||||
#endif | |||||
#ifdef KEYBOARD_planck_rev5 | |||||
writePinLow(E6); | |||||
#endif | |||||
} else { | |||||
unregister_code(KC_RSFT); | |||||
#ifdef KEYBOARD_planck_rev5 | |||||
writePinHigh(E6); | |||||
#endif | |||||
} | |||||
return false; | |||||
break; | |||||
case PLOVER: | |||||
if (record->event.pressed) { | |||||
#ifdef AUDIO_ENABLE | |||||
stop_all_notes(); | |||||
PLAY_SONG(plover_song); | |||||
#endif | |||||
layer_off(_RAISE); | |||||
layer_off(_LOWER); | |||||
layer_off(_ADJUST); | |||||
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); | |||||
} | |||||
return false; | |||||
break; | |||||
case EXT_PLV: | |||||
if (record->event.pressed) { | |||||
#ifdef AUDIO_ENABLE | |||||
PLAY_SONG(plover_gb_song); | |||||
#endif | |||||
layer_off(_PLOVER); | |||||
} | |||||
return false; | |||||
break; | |||||
} | |||||
return true; | |||||
} | |||||
bool muse_mode = false; | |||||
uint8_t last_muse_note = 0; | |||||
uint16_t muse_counter = 0; | |||||
uint8_t muse_offset = 70; | |||||
uint16_t muse_tempo = 50; | |||||
void encoder_update(bool clockwise) { | |||||
if (muse_mode) { | |||||
if (IS_LAYER_ON(_RAISE)) { | |||||
if (clockwise) { | |||||
muse_offset++; | |||||
} else { | |||||
muse_offset--; | |||||
} | |||||
} else { | |||||
if (clockwise) { | |||||
muse_tempo+=1; | |||||
} else { | |||||
muse_tempo-=1; | |||||
} | |||||
} | |||||
} else { | |||||
if (clockwise) { | |||||
#ifdef MOUSEKEY_ENABLE | |||||
tap_code(KC_MS_WH_DOWN); | |||||
#else | |||||
tap_code(KC_PGDN); | |||||
#endif | |||||
} else { | |||||
#ifdef MOUSEKEY_ENABLE | |||||
tap_code(KC_MS_WH_UP); | |||||
#else | |||||
tap_code(KC_PGUP); | |||||
#endif | |||||
} | |||||
} | |||||
} | |||||
void dip_switch_update_user(uint8_t index, bool active) { | |||||
switch (index) { | |||||
case 0: { | |||||
#ifdef AUDIO_ENABLE | |||||
static bool play_sound = false; | |||||
#endif | |||||
if (active) { | |||||
#ifdef AUDIO_ENABLE | |||||
if (play_sound) { PLAY_SONG(plover_song); } | |||||
#endif | |||||
layer_on(_ADJUST); | |||||
} else { | |||||
#ifdef AUDIO_ENABLE | |||||
if (play_sound) { PLAY_SONG(plover_gb_song); } | |||||
#endif | |||||
layer_off(_ADJUST); | |||||
} | |||||
#ifdef AUDIO_ENABLE | |||||
play_sound = true; | |||||
#endif | |||||
break; | |||||
} | |||||
case 1: | |||||
if (active) { | |||||
muse_mode = true; | |||||
} else { | |||||
muse_mode = false; | |||||
} | |||||
} | |||||
} | |||||
void matrix_scan_user(void) { | |||||
#ifdef AUDIO_ENABLE | |||||
if (muse_mode) { | |||||
if (muse_counter == 0) { | |||||
uint8_t muse_note = muse_offset + SCALE[muse_clock_pulse()]; | |||||
if (muse_note != last_muse_note) { | |||||
stop_note(compute_freq_for_midi_note(last_muse_note)); | |||||
play_note(compute_freq_for_midi_note(muse_note), 0xF); | |||||
last_muse_note = muse_note; | |||||
} | |||||
} | |||||
muse_counter = (muse_counter + 1) % muse_tempo; | |||||
} else { | |||||
if (muse_counter) { | |||||
stop_all_notes(); | |||||
muse_counter = 0; | |||||
} | |||||
} | |||||
#endif | |||||
} | |||||
bool music_mask_user(uint16_t keycode) { | |||||
switch (keycode) { | |||||
case RAISE: | |||||
case LOWER: | |||||
return false; | |||||
default: | |||||
return true; | |||||
} | |||||
} |
@ -0,0 +1,20 @@ | |||||
# Michael Guterl's Ortho 4x12 Layout | |||||
I use this layout for both my Planck and Levinson. I also have a very similar | |||||
[keymap](/keyboards/preonic/keymaps/mguterl) for my Preonic. | |||||
Check out my [userspace](/users/mguterl) for the custom keycodes that are used | |||||
in keymap.c. | |||||
At a very high level I use 4 layers: | |||||
* Qwerty - Letters | |||||
* Util - Vimkeys for navigation and other convenient things | |||||
* Raise - Numbers and F keys | |||||
* Lower - Symbols | |||||
```sh | |||||
make planck/rev5:mguterl:flash # For Planck rev5 or earlier and Planck Light | |||||
make planck/rev6:mguterl:flash # For Planck rev6 | |||||
make keebio/levinson/rev2:mguterl:dfu # For Levinson rev2 | |||||
``` |
@ -0,0 +1 @@ | |||||
SRC += muse.c |
@ -0,0 +1 @@ | |||||
#include "mguterl.h" |
@ -0,0 +1,67 @@ | |||||
#pragma once | |||||
#include "quantum.h" | |||||
#define LOWER MO(_LOWER) | |||||
#define RAISE MO(_RAISE) | |||||
/* Tap for Tab, hold for Hyper (Super+Ctrl+Shift+Alt) */ | |||||
#define HPR_TAB ALL_T(KC_TAB) | |||||
/* Shift when held, Enter when tapped */ | |||||
#define SFT_ENT MT(MOD_RSFT, KC_ENT) | |||||
/* Activate util layer while holding space */ | |||||
#define SPC_UTL LT(_UTIL, KC_SPC) | |||||
/* Control when held, Escape when tapped */ | |||||
#define ESC_CTL MT(MOD_LCTL, KC_ESC) | |||||
/* Toggle gaming layer */ | |||||
#define TG_GAME TG(_GAMING) | |||||
/* | |||||
* Make it easy to navigate back and forward in Chrome. | |||||
*/ | |||||
#define GO_BACK LGUI(KC_LBRC) | |||||
#define GO_FWD LGUI(KC_RBRC) | |||||
/* | |||||
* When using a 40% layout, these keycodes make it easy to change tabs in apps | |||||
* like Chrome and VSCode. | |||||
*/ | |||||
#define GUI_1 LGUI(KC_1) | |||||
#define GUI_2 LGUI(KC_2) | |||||
#define GUI_3 LGUI(KC_3) | |||||
#define GUI_4 LGUI(KC_4) | |||||
#define GUI_5 LGUI(KC_5) | |||||
#define GUI_6 LGUI(KC_6) | |||||
#define GUI_7 LGUI(KC_7) | |||||
#define GUI_8 LGUI(KC_8) | |||||
#define GUI_9 LGUI(KC_9) | |||||
#define GUI_0 LGUI(KC_0) | |||||
/* | |||||
* Common layers and keycodes that are shared between Planck and Preonic | |||||
*/ | |||||
enum ortho_layers { | |||||
_QWERTY, | |||||
_GAMING, | |||||
_UTIL, | |||||
_COLEMAK, | |||||
_DVORAK, | |||||
_LOWER, | |||||
_RAISE, | |||||
_PLOVER, | |||||
_ADJUST | |||||
}; | |||||
enum ortho_keycodes { | |||||
QWERTY = SAFE_RANGE, | |||||
GAMING, | |||||
UTIL, | |||||
COLEMAK, | |||||
DVORAK, | |||||
PLOVER, | |||||
BACKLIT, | |||||
EXT_PLV | |||||
}; |
@ -0,0 +1,14 @@ | |||||
Copyright 2019 Michael Guterl michael@diminishing.org @mguterl | |||||
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/>. |
@ -0,0 +1 @@ | |||||
SRC += mguterl.c |