From 30843f8329315426ff433a40095f1de2b2669e57 Mon Sep 17 00:00:00 2001
From: Jacob Jerrell <86279411+jjerrell@users.noreply.github.com>
Date: Thu, 12 Aug 2021 09:44:15 -0500
Subject: [Keymap] JJerrell - Add Userspace and ZSA Keyboard Keymaps (#13548)
---
layouts/community/ortho_4x12/jjerrell/config.h | 57 ++++++
layouts/community/ortho_4x12/jjerrell/keymap.c | 227 ++++++++++++++++++++++++
layouts/community/ortho_4x12/jjerrell/readme.md | 7 +
layouts/community/ortho_4x12/jjerrell/rules.mk | 8 +
4 files changed, 299 insertions(+)
create mode 100644 layouts/community/ortho_4x12/jjerrell/config.h
create mode 100644 layouts/community/ortho_4x12/jjerrell/keymap.c
create mode 100644 layouts/community/ortho_4x12/jjerrell/readme.md
create mode 100644 layouts/community/ortho_4x12/jjerrell/rules.mk
(limited to 'layouts/community/ortho_4x12/jjerrell')
diff --git a/layouts/community/ortho_4x12/jjerrell/config.h b/layouts/community/ortho_4x12/jjerrell/config.h
new file mode 100644
index 0000000000..aee885b8d0
--- /dev/null
+++ b/layouts/community/ortho_4x12/jjerrell/config.h
@@ -0,0 +1,57 @@
+// Copyright (C) 2021 Jerrell, Jacob <@jjerrell>
+//
+// This file is part of qmk_firmware.
+//
+// qmk_firmware 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 3 of the License, or
+// (at your option) any later version.
+//
+// qmk_firmware 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 qmk_firmware. If not, see .
+
+#pragma once
+
+// Allows time for repositioning hands due to awkward key placement
+#define LEADER_NO_TIMEOUT
+
+#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
+
+#ifdef KEYBOARD_planck_ez_glow
+#undef PRODUCT
+#define PRODUCT Planck EZ Glow - Modified by <@jjerrell>
+#endif
+
+/*
+ * MIDI options
+ */
+
+/* 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
+
+// Most tactile encoders have detents every 4 stages
+#define ENCODER_RESOLUTION 4
diff --git a/layouts/community/ortho_4x12/jjerrell/keymap.c b/layouts/community/ortho_4x12/jjerrell/keymap.c
new file mode 100644
index 0000000000..d873907e91
--- /dev/null
+++ b/layouts/community/ortho_4x12/jjerrell/keymap.c
@@ -0,0 +1,227 @@
+/* Copyright 2015-2017 Jack Humbert
+ * Copyright 2021 Jacob Jerrell <@jjerrell>
+ *
+ * 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 .
+ */
+
+#include "jjerrell.h"
+
+enum planck_layers {
+ _GAME_LOWER = LAYER_SAFE_RANGE,
+ // _GAME_RAISE,
+};
+
+#define LAYOUT_planck_plain(...) WRAPPER_ortho_4x12(__VA_ARGS__)
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_WORKMAN] = LAYOUT_planck_base(
+ __________________WORKMN_L1__________________, __________________WORKMN_R1__________________,
+ __________________WORKMN_L2__________________, __________________WORKMN_R2__________________,
+ __________________WORKMN_L3__________________, __________________WORKMN_R3__________________
+ ),
+ /* Lower - Nav/Select/Nums
+ * ,-----------------------------------------------------------------------------------.
+ * | PGUP | BSPC | UP | DEL | PGDN | | | | 7 | 8 | 9 | * |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | HOME | LEFT | DOWN | RGHT | END | | | | 4 | 5 | 6 | / |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | ESC | TAB | | ENTR | | | | | 1 | 2 | 3 | - |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | held | SPACE | ENTR | 0 | . | , | + |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [_LOWER] = LAYOUT_planck_mods(
+ __________________LOWER_L1___________________, XXXXXXX, XXXXXXX, __________________LOWER_R1___________________,
+ __________________LOWER_L2___________________, XXXXXXX, XXXXXXX, __________________LOWER_R2___________________,
+ __________________LOWER_L3___________________, XXXXXXX, XXXXXXX, __________________LOWER_R3___________________,
+ _________________________________________PLANCK_LOWER_BOTTOM_ROW_________________________________________
+ ),
+ /* Raise - Symbols
+ * ,-----------------------------------------------------------------------------------.
+ * | % | _ | [ | ] | ^ | | | ! | < | > | = | : |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | \ | / | { | } | * | | | ? | ( | ) | - | ; |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | # | $ | | | ~ | ` | | | @ | " | ' | + | & |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | LEAD | | | BSPC | SPACE | held | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [_RAISE] = LAYOUT_planck_common(
+ __________________RAISE_L1___________________, __________________RAISE_R1___________________,
+ __________________RAISE_L2___________________, __________________RAISE_R2___________________,
+ __________________RAISE_L3___________________, __________________RAISE_R3___________________
+ ),
+ /* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | Make | Debug|Reset |TermOn|TrmOff| | |MusMod|Mus On|MusOff|MidiOn|MidOff|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Mute | Vol- | Vol+ | Play | Skip | | |Voice-| HUE+ | HUE- | SAT+ | SAT- |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Vrsn | AudOn|AudOff|CGswap|CGnorm| | |Voice+|RGBTog|RGBMod|BRGHT+|BRGHT-|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | held | | held | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [_ADJUST] = LAYOUT_planck_common(
+ __________________ADJUST_L1__________________, __________________ADJUST_R1__________________,
+ __________________ADJUST_L2__________________, __________________ADJUST_R2__________________,
+ __________________ADJUST_L3__________________, __________________ADJUST_R3__________________
+ ),
+ [_GAME] = LAYOUT_planck_plain(
+ __________________QWERTY_L1__________________, _______, _______, XXXXXXX, KC_9, KC_0, KC_MINS, KC_EQL,
+ __________________QWERTY_L2__________________, XXXXXXX, XXXXXXX, XXXXXXX, KC_5, KC_6, KC_7, KC_8,
+ __________________QWERTY_L3__________________, XXXXXXX, XXXXXXX, XXXXXXX, KC_1, KC_2, KC_3, KC_4,
+ KC_LSFT, KC_LGUI, KC_LALT, KC_LCTL, LT(_LOWER, KC_BSPC), KC_SPC, XXXXXXX, LT(_WORKMAN, KC_ENT), MACRO_1, MACRO_2, MACRO_3, MACRO_4
+ ),
+ [_GAME_LOWER] = LAYOUT_planck_plain(
+ _______, _______, _______, _______, _______, _______, _______, _______, C(_______), C(_______), C(_______), C(_______),
+ _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, _______, C(_______), C(_______), C(_______), C(_______),
+ _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, _______, C(_______), C(_______), C(_______), C(_______),
+ MACRO_1, MACRO_2, MACRO_3, MACRO_4, _______, _______, XXXXXXX, _______, MACRO_5, MACRO_6, MACRO_7, MACRO_8
+ )
+
+};
+// clang-format on
+
+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;
+
+#ifdef KEYBOARD_planck_ez
+void planck_ez_teeth_set(layer_state_t state) {
+ switch (get_highest_layer(state)) {
+ case _LOWER:
+ planck_ez_left_led_level(40);
+ break;
+ case _RAISE:
+ planck_ez_right_led_level(40);
+ break;
+ case _ADJUST:
+ planck_ez_left_led_level(40);
+ planck_ez_right_led_level(40);
+ break;
+ case _GAME_LOWER:
+ planck_ez_left_led_level(20);
+ break;
+// todo case _GAME_RAISE:
+ // planck_ez_right_led_level(20);
+ // break;
+ case _WORKMAN:
+ if (IS_LAYER_ON(_GAME)) {
+ planck_ez_left_led_level(60);
+ planck_ez_right_led_level(60);
+ break;
+ }
+ default:
+ planck_ez_left_led_off();
+ planck_ez_right_led_off();
+ break;
+ }
+}
+
+layer_state_t layer_state_set_keymap(layer_state_t state) {
+ planck_ez_left_led_off();
+ planck_ez_right_led_off();
+ state = update_tri_layer_state(state, _GAME, _LOWER, _GAME_LOWER);
+ planck_ez_teeth_set(state);
+ return state;
+}
+#endif
+
+bool 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
+ }
+ }
+ return true;
+}
+
+void dip_switch_update_keymap(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;
+ }
+ }
+}
+
+#ifdef AUDIO_ENABLE
+void matrix_scan_keymap(void) {
+ 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_keymap(uint16_t keycode) {
+ switch (keycode) {
+ case _RAISE:
+ case _LOWER:
+ return false;
+ default:
+ return true;
+ }
+}
diff --git a/layouts/community/ortho_4x12/jjerrell/readme.md b/layouts/community/ortho_4x12/jjerrell/readme.md
new file mode 100644
index 0000000000..ec947ea353
--- /dev/null
+++ b/layouts/community/ortho_4x12/jjerrell/readme.md
@@ -0,0 +1,7 @@
+# JJerrell's Planck EZ Layout
+
+As with my other keymaps, this layout is a close adaptation of the Neo keyboard. Obvious differences are that the alpha keymap is Workman and if you're already used to the secondary layers of the Neo keymap, this might be very uncomfortable for you because of slight variations.
+
+The keymap has been setup to pretty much remove the center columns above the spacebar and limit use of the bottom row by supplying paths to removed functionality that are simpler to process mentally and require less finger acrobatics.
+
+My ownership of this keyboard could not have been easily predicted because my original justification of this hobby was health related. I found QMK through the Ergodox EZ and this keyboard is a result of that discovery -- I could not live without some QMK features. As you can see, my problem has come full circle... now I use this keyboard when I'm not at a desk and it's tiny. This is offset by eliminating use of the center columns, relying on a symbol layer almost exclusively, and relying on a navigation layer instead of getting by with the minimum on the alpha layers which became uncomfortable even with the thumbs doing the heavy lifting and mods being comfortably placed on the home row.
diff --git a/layouts/community/ortho_4x12/jjerrell/rules.mk b/layouts/community/ortho_4x12/jjerrell/rules.mk
new file mode 100644
index 0000000000..39f31a266e
--- /dev/null
+++ b/layouts/community/ortho_4x12/jjerrell/rules.mk
@@ -0,0 +1,8 @@
+SRC += muse.c
+
+BOOTMAGIC_ENABLE = lite
+MOUSEKEY_ENABLE = no
+EXTRAKEY_ENABLE = yes
+TAP_DANCE_ENABLE = no
+SPACE_CADET_ENABLE = no
+NKRO_ENABLE = no
--
cgit v1.2.3