* 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 |