From 2acb2e696aff1365449d2d7b928a84d23c6223a1 Mon Sep 17 00:00:00 2001 From: Ryan Anderson Date: Tue, 8 Nov 2022 08:21:35 -0800 Subject: [PATCH] [Keymap] Add model01 and doio/kb16 keymaps (#18681) --- .../doio/kb16/rev1/keymaps/pugmajere/keymap.c | 135 ++++++++++++ .../kb16/rev1/keymaps/pugmajere/readme.md | 10 + .../doio/kb16/rev1/keymaps/pugmajere/rules.mk | 2 + .../model01/keymaps/pugmajere/config.h | 54 +++++ .../model01/keymaps/pugmajere/keymap.c | 192 ++++++++++++++++++ .../model01/keymaps/pugmajere/readme.md | 20 ++ .../model01/keymaps/pugmajere/rules.mk | 1 + 7 files changed, 414 insertions(+) create mode 100644 keyboards/doio/kb16/rev1/keymaps/pugmajere/keymap.c create mode 100644 keyboards/doio/kb16/rev1/keymaps/pugmajere/readme.md create mode 100644 keyboards/doio/kb16/rev1/keymaps/pugmajere/rules.mk create mode 100644 keyboards/keyboardio/model01/keymaps/pugmajere/config.h create mode 100644 keyboards/keyboardio/model01/keymaps/pugmajere/keymap.c create mode 100644 keyboards/keyboardio/model01/keymaps/pugmajere/readme.md create mode 100644 keyboards/keyboardio/model01/keymaps/pugmajere/rules.mk diff --git a/keyboards/doio/kb16/rev1/keymaps/pugmajere/keymap.c b/keyboards/doio/kb16/rev1/keymaps/pugmajere/keymap.c new file mode 100644 index 0000000000..6206e6860c --- /dev/null +++ b/keyboards/doio/kb16/rev1/keymaps/pugmajere/keymap.c @@ -0,0 +1,135 @@ +/* Copyright 2022 DOIO + * Copyright 2022 HorrorTroll + * Copyright 2022 Ryan Anderson + * + * 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 QMK_KEYBOARD_H + +// OLED animation +#include "lib/layer_status/layer_status.h" + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. + +enum layer_names { + _BASE = 0, + _FN, + _FN1, + _FN2, +}; + +// enum layer_keycodes { }; + +// clang-format off +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* + ┌───┬───┬───┬───┐ ┌───┐ ┌───┐ + │C-D│C-E│M-D│M-E│ │Ply│ │TO1│ + ├───┼───┼───┼───┤ └───┘ └───┘ + │ 5 │ 6 │ 7 │ 8 │ + ├───┼───┼───┼───┤ + │ 9 │ 0 │ ↑ │Ent│ ┌───┐ + ├───┼───┼───┼───┤ │Mut│ + │Fn2│ ← │ ↓ │ → │ └───┘ + └───┴───┴───┴───┘ + ┌───┬───┬───┬───┐ ┌───┐ ┌───┐ + │ ! │ @ │ # │ $ │ │ │ │ │ + ├───┼───┼───┼───┤ └───┘ └───┘ + │ % │ ^ │ & │ * │ + ├───┼───┼───┼───┤ + │ ( │ ) │ │ │ ┌───┐ + ├───┼───┼───┼───┤ │ │ + │ │ │ │ │ └───┘ + └───┴───┴───┴───┘ + */ + /* Row: 0 1 2 3 4 5 6 */ + [_BASE] = LAYOUT(C(KC_D), C(KC_E), LCMD(KC_D), LCMD(KC_E), KC_MPLY, + KC_5, KC_6, LCTL(LCMD(KC_H)), KC_8, TO(_FN), + KC_9, KC_0, KC_UP, KC_ENT, KC_MUTE, + MO(_FN2), KC_LEFT, KC_DOWN, KC_RIGHT), + + /* + ┌───┬───┬───┬───┐ ┌───┐ ┌───┐ + │ │ │ │ │ │ │ │ │ + ├───┼───┼───┼───┤ └───┘ └───┘ + │ │ │ │ │ + ├───┼───┼───┼───┤ + │ │ │ │ │ ┌───┐ + ├───┼───┼───┼───┤ │ │ + │ │ │ │ │ └───┘ + └───┴───┴───┴───┘ + */ + /* Row: 0 1 2 3 4 5 6 */ + [_FN] = LAYOUT(_______, _______, _______, _______, _______, + _______, _______, _______, _______, TO(_FN1), + _______, _______, _______, _______, _______, + _______, _______, _______, _______), + + /* + ┌───┬───┬───┬───┐ ┌───┐ ┌───┐ + │ │ │ │ │ │ │ │ │ + ├───┼───┼───┼───┤ └───┘ └───┘ + │ │ │ │ │ + ├───┼───┼───┼───┤ + │ │ │ │ │ ┌───┐ + ├───┼───┼───┼───┤ │ │ + │ │ │ │ │ └───┘ + └───┴───┴───┴───┘ + */ + /* Row: 0 1 2 3 4 5 6 */ + [_FN1] = LAYOUT(_______, _______, _______, _______, _______, + _______, _______, _______, _______, TO(_FN2), + _______, _______, _______, _______, _______, + _______, _______, _______, _______), + + /* + ┌───┬───┬───┬───┐ ┌───┐ ┌───┐ + │Spi│Spd│ │ │ │ │ │TO0│ + ├───┼───┼───┼───┤ └───┘ └───┘ + │Sai│Sad│ │ │ + ├───┼───┼───┼───┤ + │Tog│Mod│Hui│ │ ┌───┐ + ├───┼───┼───┼───┤ │ │ + │ │Vai│Hud│Vad│ └───┘ + └───┴───┴───┴───┘ + */ + /* Row: 0 1 2 3 4 5 6 */ + [_FN2] = LAYOUT(RGB_SPI, RGB_SPD, _______, QK_BOOT, _______, + RGB_SAI, RGB_SAD, _______, _______, TO(_BASE), + RGB_TOG, RGB_MOD, RGB_HUI, _______, _______, + _______, RGB_VAI, RGB_HUD, RGB_VAD), +}; +// clang-format on + +#ifdef OLED_ENABLE +bool oled_task_user(void) { + render_layer_status(); + + return true; +} +#endif + +#ifdef ENCODER_MAP_ENABLE +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [_BASE] = {ENCODER_CCW_CW(KC_MPRV, KC_MNXT), ENCODER_CCW_CW(KC_PGDN, KC_PGUP), ENCODER_CCW_CW(KC_VOLD, KC_VOLU)}, + [_FN] = {ENCODER_CCW_CW(KC_MPRV, KC_MNXT), ENCODER_CCW_CW(KC_PGDN, KC_PGUP), ENCODER_CCW_CW(KC_VOLD, KC_VOLU)}, + [_FN2] = {ENCODER_CCW_CW(KC_MPRV, KC_MNXT), ENCODER_CCW_CW(KC_PGDN, KC_PGUP), ENCODER_CCW_CW(KC_VOLD, KC_VOLU)}, + [_BASE] = {ENCODER_CCW_CW(KC_MPRV, KC_MNXT), ENCODER_CCW_CW(KC_PGDN, KC_PGUP), ENCODER_CCW_CW(KC_VOLD, KC_VOLU)}, +}; +#endif diff --git a/keyboards/doio/kb16/rev1/keymaps/pugmajere/readme.md b/keyboards/doio/kb16/rev1/keymaps/pugmajere/readme.md new file mode 100644 index 0000000000..f88901c623 --- /dev/null +++ b/keyboards/doio/kb16/rev1/keymaps/pugmajere/readme.md @@ -0,0 +1,10 @@ +# pugmajere's Google Meet optimized version of the default keymap + +A lightly modified version of the default keymap. + +The top row is converted to keys used for muting audio and video in +Google Meet, in both Linux and MacOS. (Yes, they annoyingly have +different conventions.) + +The ASCII-art depiction uses "C-E" to mean "ctrl-e", and "M-E" to mean +CMD(GUI) and "e", roughly following Emacs naming conventions. diff --git a/keyboards/doio/kb16/rev1/keymaps/pugmajere/rules.mk b/keyboards/doio/kb16/rev1/keymaps/pugmajere/rules.mk new file mode 100644 index 0000000000..00003ba11b --- /dev/null +++ b/keyboards/doio/kb16/rev1/keymaps/pugmajere/rules.mk @@ -0,0 +1,2 @@ +# Encoder enabled +ENCODER_MAP_ENABLE = yes diff --git a/keyboards/keyboardio/model01/keymaps/pugmajere/config.h b/keyboards/keyboardio/model01/keymaps/pugmajere/config.h new file mode 100644 index 0000000000..ef75a034de --- /dev/null +++ b/keyboards/keyboardio/model01/keymaps/pugmajere/config.h @@ -0,0 +1,54 @@ +// Copyright 2022 Ryan Anderson (@pugmajere) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#define USB_MAX_POWER_CONSUMPTION 500 + +#define RGBLIGHT_LIMIT_VAL 175 + +#undef ENABLE_RGB_MATRIX_ALPHAS_MODS +#undef ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN +#undef ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT +#undef ENABLE_RGB_MATRIX_BREATHING +#undef ENABLE_RGB_MATRIX_BAND_SAT +#undef ENABLE_RGB_MATRIX_BAND_VAL +#undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT +#undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL +#undef ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT +#undef ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL +#undef ENABLE_RGB_MATRIX_CYCLE_ALL +#undef ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT +#undef ENABLE_RGB_MATRIX_CYCLE_UP_DOWN +/* #undef ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON */ +#undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN +#undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL +#undef ENABLE_RGB_MATRIX_CYCLE_PINWHEEL +#undef ENABLE_RGB_MATRIX_CYCLE_SPIRAL +/* #undef ENABLE_RGB_MATRIX_DUAL_BEACON */ +/* #undef ENABLE_RGB_MATRIX_RAINBOW_BEACON */ +/* #undef ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS */ +#undef ENABLE_RGB_MATRIX_RAINDROPS +#undef ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS +#undef ENABLE_RGB_MATRIX_HUE_BREATHING +#undef ENABLE_RGB_MATRIX_HUE_PENDULUM +#undef ENABLE_RGB_MATRIX_HUE_WAVE +#undef ENABLE_RGB_MATRIX_PIXEL_RAIN +#undef ENABLE_RGB_MATRIX_PIXEL_FLOW +#undef ENABLE_RGB_MATRIX_PIXEL_FRACTAL +// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is undefd +#undef ENABLE_RGB_MATRIX_TYPING_HEATMAP +#undef ENABLE_RGB_MATRIX_DIGITAL_RAIN +// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is undefd +#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE +#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE +#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE +#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE +#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS +#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS +#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS +#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS +#undef ENABLE_RGB_MATRIX_SPLASH +#undef ENABLE_RGB_MATRIX_MULTISPLASH +#undef ENABLE_RGB_MATRIX_SOLID_SPLASH +#undef ENABLE_RGB_MATRIX_SOLID_MULTISPLASH diff --git a/keyboards/keyboardio/model01/keymaps/pugmajere/keymap.c b/keyboards/keyboardio/model01/keymaps/pugmajere/keymap.c new file mode 100644 index 0000000000..b7043ef640 --- /dev/null +++ b/keyboards/keyboardio/model01/keymaps/pugmajere/keymap.c @@ -0,0 +1,192 @@ +/* Copyright 2022 Ryan Anderson + * + * 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 QMK_KEYBOARD_H + +/* layer constants */ +enum { + DEF = 0, + FUN, +}; + +enum custom_keycode { + MACRO_CTRL_PAGE_UP = SAFE_RANGE, + KC_MT_LCBRC, + KC_MT_RCBRC, + KC_MT_LPAR, + KC_MT_RPAR, + MACRO_KVM_1, + MACRO_KVM_2, + MACRO_KVM_3, + MACRO_KVM_4, + MACRO_KVM_TG, +}; + +// Work around limitations in mod-tapping +static uint16_t space_cadet_control_timer = 0; +static bool space_cadet_key_pressed_flag = false; + +// clang-format off +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[DEF] = LAYOUT( + QK_BOOT , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , MACRO_CTRL_PAGE_UP, + KC_GRV , KC_Q , KC_W , KC_E , KC_R , KC_T , RGB_MOD, MACRO_KVM_TG, KC_Y , KC_U , KC_I , KC_O , KC_P , KC_EQL , + LCTL_T(KC_PGUP), KC_A , KC_S , KC_D , KC_F , KC_G , KC_TAB , KC_ENT , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, + KC_PGDN, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_ESC , KC_RALT, KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_MINS, + LCTL_T(KC_LBRC), RCTL_T(KC_RBRC), + KC_BSPC, KC_SPC , + KC_MT_LCBRC, KC_MT_RCBRC, + KC_MT_LPAR, KC_MT_RPAR, + MO(FUN), MO(FUN) + ), +[FUN] = LAYOUT( + _______, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , + KC_TAB , _______, KC_MS_U, KC_WH_U, KC_BTN3, MACRO_KVM_1, RGB_TOG, KC_MPRV, KC_MNXT, KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_F12 , + KC_HOME, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN1, MACRO_KVM_2, RGB_SPI, KC_MPLY, KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, _______, _______, + KC_END , KC_PSCR, KC_INS , KC_WH_D, KC_BTN2, MACRO_KVM_4, RGB_SPD, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, KC_BSLS, KC_PIPE, + _______, _______, + KC_DEL , KC_ENT , + _______, _______, + _______, _______, + _______, _______ + ) +}; + +/* template for new layouts: +LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, + _______, _______, + _______, _______, + _______, _______, + _______, _______ + ) +*/ +// clang-format on + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + if (record->event.pressed) { + space_cadet_key_pressed_flag = true; + } + switch (keycode) { + case MACRO_CTRL_PAGE_UP: + if (record->event.pressed) { + // send some data + SEND_STRING(SS_LCTL(SS_TAP(X_PGUP))); + } else { + // when keycode MACRO_CTRL_PAGE_UP is pressed + } + break; + + // These next two cases duplicate mod-tap functionality by hand to + // work around the lack of support for shifted/modded keys as + // "tap" side of things. + case KC_MT_LCBRC: + if (record->event.pressed) { + space_cadet_control_timer = timer_read(); + space_cadet_key_pressed_flag = false; + register_mods(MOD_BIT(KC_LGUI)); + } else { + unregister_mods(MOD_BIT(KC_LGUI)); + if (timer_elapsed(space_cadet_control_timer) < TAPPING_TERM && !space_cadet_key_pressed_flag) { + tap_code16(LSFT(KC_LBRC)); + } + } + return false; + break; + case KC_MT_RCBRC: + if (record->event.pressed) { + space_cadet_control_timer = timer_read(); + space_cadet_key_pressed_flag = false; + register_mods(MOD_BIT(KC_LALT)); + } else { + unregister_mods(MOD_BIT(KC_LALT)); + if (timer_elapsed(space_cadet_control_timer) < TAPPING_TERM && !space_cadet_key_pressed_flag) { + tap_code16(LSFT(KC_RBRC)); + } + } + return false; + break; + case KC_MT_LPAR: + if (record->event.pressed) { + space_cadet_control_timer = timer_read(); + space_cadet_key_pressed_flag = false; + register_mods(MOD_BIT(KC_LSFT)); + } else { + unregister_mods(MOD_BIT(KC_LSFT)); + if (timer_elapsed(space_cadet_control_timer) < TAPPING_TERM && !space_cadet_key_pressed_flag) { + tap_code16(LSFT(KC_9)); + } + } + return false; + break; + case KC_MT_RPAR: + if (record->event.pressed) { + space_cadet_control_timer = timer_read(); + space_cadet_key_pressed_flag = false; + register_mods(MOD_BIT(KC_RSFT)); + } else { + unregister_mods(MOD_BIT(KC_RSFT)); + if (timer_elapsed(space_cadet_control_timer) < TAPPING_TERM && !space_cadet_key_pressed_flag) { + tap_code16(LSFT(KC_0)); + } + } + return false; + break; + case MACRO_KVM_1: + if (record->event.pressed) { + tap_code(KC_SCRL); + tap_code(KC_SCRL); + tap_code(KC_1); + } + break; + case MACRO_KVM_2: + if (record->event.pressed) { + tap_code(KC_SCRL); + tap_code(KC_SCRL); + tap_code(KC_2); + } + break; + case MACRO_KVM_3: + if (record->event.pressed) { + tap_code(KC_SCRL); + tap_code(KC_SCRL); + tap_code(KC_3); + } + break; + case MACRO_KVM_4: + if (record->event.pressed) { + tap_code(KC_SCRL); + tap_code(KC_SCRL); + tap_code(KC_4); + } + break; + case MACRO_KVM_TG: + if (record->event.pressed) { + register_code(KC_LSFT); + tap_code(KC_NUMLOCK); + tap_code(KC_NUMLOCK); + unregister_code(KC_LSFT); + tap_code(KC_LCTL); + } + break; + } + return true; +}; + +/* vim: set ts=2 sw=2 et: */ diff --git a/keyboards/keyboardio/model01/keymaps/pugmajere/readme.md b/keyboards/keyboardio/model01/keymaps/pugmajere/readme.md new file mode 100644 index 0000000000..a985158c5b --- /dev/null +++ b/keyboards/keyboardio/model01/keymaps/pugmajere/readme.md @@ -0,0 +1,20 @@ +# pugmajere's fairly modified version of the default keymap + +This is fairly modified, but roughly follows the original default +keymap in spirit. + +- The num lock layer is removed. +- The "any" key is replace with RALT. +- The thumb keys are converted into combo keys. +- Page-Up is a combo key with LCTRL. +- The NUMLOCK key is replaced with LCTRL-PGUP (for bouncing through + browser tabs) +- Mouse scroll keys are added. +- Some KVM control sequences are worked into a few open slots in the + keymap. (FN-[tgb]) +- QMK-standard debouncing is enabled. +- A bunch of RGB Matrix modes are turned off to save space. + +Quite possibly something else that I'm forgetting about. + + diff --git a/keyboards/keyboardio/model01/keymaps/pugmajere/rules.mk b/keyboards/keyboardio/model01/keymaps/pugmajere/rules.mk new file mode 100644 index 0000000000..4db69c92e2 --- /dev/null +++ b/keyboards/keyboardio/model01/keymaps/pugmajere/rules.mk @@ -0,0 +1 @@ +DEBOUNCE_TYPE = sym_defer_pk