mirror of
https://github.com/qmk/qmk_firmware.git
synced 2024-11-24 20:32:58 +00:00
Sofle pico first commit
This commit is contained in:
parent
1b7a538353
commit
f417e42250
104
keyboards/sofle_v303/info.json
Normal file
104
keyboards/sofle_v303/info.json
Normal file
@ -0,0 +1,104 @@
|
||||
{
|
||||
"manufacturer": "Ryan Neff",
|
||||
"keyboard_name": "sofle_v303",
|
||||
"url": "https://github.com/JellyTitan/sofle_v303",
|
||||
"maintainer": "JellyTitan",
|
||||
"usb": {
|
||||
"vid": "0x4413",
|
||||
"pid": "0x4A13",
|
||||
"device_version": "1.0.0"
|
||||
},
|
||||
"ws2812": {
|
||||
"pin": "GP0",
|
||||
},
|
||||
"rgb_matrix": {
|
||||
"driver": "ws2812"
|
||||
},
|
||||
"diode_direction": "COL2ROW",
|
||||
"encoder": {
|
||||
"rotary": [
|
||||
{"pin_a": "GP14", "pin_b": "GP15", "resolution": 4}
|
||||
]
|
||||
},
|
||||
"split": {
|
||||
"encoder": {
|
||||
"right": {
|
||||
"rotary": [
|
||||
{"pin_a": "GP14", "pin_b": "GP15", "resolution": 4}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"processor": "RP2040",
|
||||
"bootloader": "rp2040",
|
||||
"layouts": {
|
||||
"LAYOUT_split4x6_r1": {
|
||||
"layout": [
|
||||
{"label": "`", "matrix": [0, 0], "x": 0, "y": 0.7},
|
||||
{"label": "1", "matrix": [0, 1], "x": 1, "y": 0.7},
|
||||
{"label": "2", "matrix": [0, 2], "x": 2, "y": 0.3},
|
||||
{"label": "3", "matrix": [0, 3], "x": 3, "y": 0},
|
||||
{"label": "4", "matrix": [0, 4], "x": 4, "y": 0.3},
|
||||
{"label": "5", "matrix": [0, 5], "x": 5, "y": 0.45},
|
||||
{"label": "6", "matrix": [5, 5], "x": 9, "y": 0.45},
|
||||
{"label": "7", "matrix": [5, 4], "x": 10, "y": 0.3},
|
||||
{"label": "8", "matrix": [5, 3], "x": 11, "y": 0},
|
||||
{"label": "9", "matrix": [5, 2], "x": 12, "y": 0.3},
|
||||
{"label": "0", "matrix": [5, 1], "x": 13, "y": 0.7},
|
||||
{"label": "-", "matrix": [5, 0], "x": 14, "y": 0.7},
|
||||
|
||||
{"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1.7},
|
||||
{"label": "Q", "matrix": [1, 1], "x": 1, "y": 1.7},
|
||||
{"label": "W", "matrix": [1, 2], "x": 2, "y": 1.3},
|
||||
{"label": "E", "matrix": [1, 3], "x": 3, "y": 1},
|
||||
{"label": "R", "matrix": [1, 4], "x": 4, "y": 1.3},
|
||||
{"label": "T", "matrix": [1, 5], "x": 5, "y": 1.45},
|
||||
{"label": "Y", "matrix": [6, 5], "x": 9, "y": 1.45},
|
||||
{"label": "U", "matrix": [6, 4], "x": 10, "y": 1.3},
|
||||
{"label": "I", "matrix": [6, 3], "x": 11, "y": 1},
|
||||
{"label": "O", "matrix": [6, 2], "x": 12, "y": 1.3},
|
||||
{"label": "P", "matrix": [6, 1], "x": 13, "y": 1.7},
|
||||
{"label": "Enter", "matrix": [6, 0], "x": 14, "y": 1.7},
|
||||
|
||||
{"label": "Esc", "matrix": [2, 0], "x": 0, "y": 2.7},
|
||||
{"label": "A", "matrix": [2, 1], "x": 1, "y": 2.7},
|
||||
{"label": "S", "matrix": [2, 2], "x": 2, "y": 2.3},
|
||||
{"label": "D", "matrix": [2, 3], "x": 3, "y": 2},
|
||||
{"label": "F", "matrix": [2, 4], "x": 4, "y": 2.3},
|
||||
{"label": "G", "matrix": [2, 5], "x": 5, "y": 2.45},
|
||||
{"label": "H", "matrix": [7, 5], "x": 9, "y": 2.45},
|
||||
{"label": "J", "matrix": [7, 4], "x": 10, "y": 2.3},
|
||||
{"label": "K", "matrix": [7, 3], "x": 11, "y": 2},
|
||||
{"label": "L", "matrix": [7, 2], "x": 12, "y": 2.3},
|
||||
{"label": ";", "matrix": [7, 1], "x": 13, "y": 2.7},
|
||||
{"label": "'", "matrix": [7, 0], "x": 14, "y": 2.7},
|
||||
|
||||
{"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3.7},
|
||||
{"label": "Z", "matrix": [3, 1], "x": 1, "y": 3.7},
|
||||
{"label": "X", "matrix": [3, 2], "x": 2, "y": 3.3},
|
||||
{"label": "C", "matrix": [3, 3], "x": 3, "y": 3},
|
||||
{"label": "V", "matrix": [3, 4], "x": 4, "y": 3.3},
|
||||
{"label": "B", "matrix": [3, 5], "x": 5, "y": 3.45},
|
||||
{"label": "Mute", "matrix": [4, 5], "x": 6.2, "y": 3.45},
|
||||
{"label": "XXX", "matrix": [9, 5], "x": 7.8, "y": 3.45},
|
||||
{"label": "N", "matrix": [8, 5], "x": 9, "y": 3.45},
|
||||
{"label": "M", "matrix": [8, 4], "x": 10, "y": 3.3},
|
||||
{"label": ",", "matrix": [8, 3], "x": 11, "y": 3},
|
||||
{"label": ".", "matrix": [8, 2], "x": 12, "y": 3.3},
|
||||
{"label": "/", "matrix": [8, 1], "x": 13, "y": 3.7},
|
||||
{"label": "Shift", "matrix": [8, 0], "x": 14, "y": 3.7},
|
||||
|
||||
{"label": "Ctrl", "matrix": [4, 0], "x": 2, "y": 4.3},
|
||||
{"label": "Win", "matrix": [4, 1], "x": 3, "y": 4},
|
||||
{"label": "Alt", "matrix": [4, 2], "x": 4, "y": 4.3},
|
||||
{"label": "Del", "matrix": [4, 3], "x": 5.1, "y": 4.5, "h": 1.5},
|
||||
{"label": "Spc", "matrix": [4, 4], "x": 6.1, "y": 4.5, "h": 1.5},
|
||||
{"label": "Shift", "matrix": [9, 3], "x": 7.9, "y": 4.5, "h": 1.5},
|
||||
{"label": "Bspc", "matrix": [9, 4], "x": 8.9, "y": 4.5, "h": 1.5},
|
||||
{"label": "Alt", "matrix": [9, 2], "x": 10, "y": 4.3},
|
||||
{"label": "Win", "matrix": [9, 1], "x": 11, "y": 4},
|
||||
{"label": "Ctrl", "matrix": [9, 0], "x": 12, "y": 4.3}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
38
keyboards/sofle_v303/keymaps/default/config.h
Normal file
38
keyboards/sofle_v303/keymaps/default/config.h
Normal file
@ -0,0 +1,38 @@
|
||||
// Copyright 2022 Dane Skalski (@Daneski13)
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
/* - Encoder settings - */
|
||||
#ifdef ENCODER_ENABLE
|
||||
# define ENCODER_RESOLUTION 4
|
||||
#endif
|
||||
#ifdef ENCODER_MAP_ENABLE
|
||||
// Key delay for encoders (necessary for some keycodes)
|
||||
# define ENCODER_MAP_KEY_DELAY 10
|
||||
#endif
|
||||
|
||||
/*
|
||||
- RGB Stuff -
|
||||
All effects can be found in the QMK docs:
|
||||
https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects
|
||||
*/
|
||||
#ifdef RGB_MATRIX_ENABLE
|
||||
|
||||
// Default effect when EEPROM cleared
|
||||
# define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_RAINBOW_MOVING_CHEVRON
|
||||
|
||||
// Turns off RGB effects when there is no longer a USB connection
|
||||
# define RGB_DISABLE_WHEN_USB_SUSPENDED
|
||||
|
||||
// Key press reactive animations
|
||||
# define SPLIT_TRANSPORT_MIRROR // Necessary setting for key press animations
|
||||
# define RGB_MATRIX_KEYPRESSES // Enables key press effects
|
||||
# define ENABLE_RGB_MATRIX_MULTISPLASH
|
||||
|
||||
// Normal effects
|
||||
# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
|
||||
# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
|
||||
# define ENABLE_RGB_MATRIX_PIXEL_RAIN
|
||||
|
||||
#endif
|
161
keyboards/sofle_v303/keymaps/default/keymap.c
Normal file
161
keyboards/sofle_v303/keymaps/default/keymap.c
Normal file
@ -0,0 +1,161 @@
|
||||
// Copyright 2022 Dane Skalski (@Daneski13)
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
// Layers enum
|
||||
enum sofle_pico_layers { _QWERTY, _COLEMAK_DH, _SYMB, _EXT, _ADJUST };
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
// clang-format off
|
||||
/*
|
||||
Traditional QWERTY
|
||||
┌───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┬───┐
|
||||
│ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ │ 6 │ 7 │ 8 │ 9 │ 0 │ - │
|
||||
├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤
|
||||
│Tab│ Q │ W │ E │ R │ T │ │ Y │ U │ I │ O │ P │Ent│
|
||||
├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤
|
||||
│Esc│ A │ S │ D │ F │ G │ │ H │ J │ K │ L │ ; │ ' │
|
||||
├───┼───┼───┼───┼───┼───┼───┐ ┌───┼───┼───┼───┼───┼───┼───┤
|
||||
│Sft│ Z │ X │ C │ V │ B │Mut│ │XXX│ N │ M │ , │ . │ / │Sft│
|
||||
└───┴───┴───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┴───┴───┘
|
||||
┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐
|
||||
│Ctr│Win│Alt│Del│Spc│ │Sft│Bsp│Alt│Win│Ctr│
|
||||
└───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘
|
||||
For macOS - GUI (cmd) and Alt (opt) swapped
|
||||
*/
|
||||
[_QWERTY] = LAYOUT_split4x6_r1(
|
||||
KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_ENTER,
|
||||
KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SEMICOLON, KC_QUOTE,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MUTE, KC_NO, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, LT(_EXT, KC_DEL), KC_SPC, KC_RSFT, LT(_SYMB, KC_BSPC), KC_RALT, KC_RGUI, KC_RCTL
|
||||
),
|
||||
|
||||
/*
|
||||
Colemak-DH
|
||||
┌───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┬───┐
|
||||
│ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ │ 6 │ 7 │ 8 │ 9 │ 0 │ - │
|
||||
├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤
|
||||
│Tab│ Q │ W │ F │ P │ B │ │ J │ L │ U │ Y │ ; │Ent│
|
||||
├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤
|
||||
│Esc│ A │ R │ S │ T │ G │ │ M │ N │ E │ I │ O │ ' │
|
||||
├───┼───┼───┼───┼───┼───┼───┐ ┌───┼───┼───┼───┼───┼───┼───┤
|
||||
│Sft│ Z │ X │ C │ D │ V │Mut│ │XXX│ K │ H │ , │ . │ / │Sft│
|
||||
└───┴───┴───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┴───┴───┘
|
||||
┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐
|
||||
│Ctr│Win│Alt│Del│Spc│ │Sft│Bsp│Alt│Win│Ctr│
|
||||
└───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘
|
||||
For macOS - GUI (cmd) and Alt (opt) swapped
|
||||
*/
|
||||
[_COLEMAK_DH] = LAYOUT_split4x6_r1(
|
||||
KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS,
|
||||
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_SEMICOLON, KC_ENTER,
|
||||
KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O, KC_QUOTE,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_D, KC_V, KC_MUTE, KC_NO, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, LT(_EXT, KC_DEL), KC_SPC, KC_RSFT, LT(_SYMB, KC_BSPC), KC_RALT, KC_RGUI, KC_RCTL
|
||||
),
|
||||
|
||||
/*
|
||||
Symbols/Numpad Layer
|
||||
┌───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┬───┐
|
||||
│F1 │F2 │F3 │F4 │F5 │F6 │ │F7 │F8 │F9 │F10│F11│F12│
|
||||
├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤
|
||||
│Tab│ ! │ @ │ # │ $ │ % │ │ * │ 7 │ 8 │ 9 │ + │Ent│
|
||||
├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤
|
||||
│ \ │ _ │ [ │ { │ ( │ ^ │ │ = │ 4 │ 5 │ 6 │ 0 │NUM│
|
||||
├───┼───┼───┼───┼───┼───┼───┐ ┌───┼───┼───┼───┼───┼───┼───┤
|
||||
│___│ | │ ] │ } │ ) │ & │___│ │___│ / │ 1 │ 2 │ 3 │ - │___│
|
||||
└───┴───┴───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┴───┴───┘
|
||||
┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐
|
||||
│___│___│___│___│___│ │___│___│___│___│___│
|
||||
└───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘
|
||||
*/
|
||||
[_SYMB] = LAYOUT_split4x6_r1(
|
||||
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_TAB, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_PAST, KC_P7, KC_P8, KC_P9, KC_PPLS, KC_ENTER,
|
||||
KC_BSLS, KC_UNDS, KC_LBRC, KC_LCBR, KC_LPRN, KC_CIRC, KC_PEQL, KC_P4, KC_P5, KC_P6, KC_P0, KC_NUM,
|
||||
_______, KC_PIPE, KC_RBRC, KC_RCBR, KC_RPRN, KC_AMPR, _______, _______, KC_PSLS, KC_P1, KC_P2, KC_P3, KC_PMNS, _______,
|
||||
_______, _______, _______, MO(_ADJUST), _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
/*
|
||||
Extension/Function Layer
|
||||
┌────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────┐
|
||||
│ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ │ F7 │ F8 │ F9 │ F10│ F11│ F12│
|
||||
├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
|
||||
│ ⇤ │PGUP│End │ ↑ │Home│ │ │BRIU│ F7 │ F8 │ F9 │ F10│____│
|
||||
├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
|
||||
│Cps │PGDN│ ← │ ↓ │ → │ │ │BRID│ F4 │ F5 │ F6 │ F11│____│
|
||||
├────┼────┼────┼────┼────┼────┼────┐ ┌────┼────┼────┼────┼────┼────┼────┤
|
||||
│____│ │ │ │ │ │____│ │ ▶⏸ │ │ F1 │ F2 │ F3 │ F12│____│
|
||||
└────┴────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┴────┘
|
||||
┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐
|
||||
│___│___│___│___│___│ │___│___│___│___│___│
|
||||
└───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘
|
||||
*/
|
||||
[_EXT] = LAYOUT_split4x6_r1(
|
||||
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
|
||||
S(KC_TAB), KC_PGUP, KC_END, KC_UP, KC_HOME, _______, KC_BRIU, KC_F7, KC_F8, KC_F9, KC_F10, _______,
|
||||
KC_CAPS, KC_PGDN, KC_LEFT, KC_DOWN, KC_RIGHT, _______, KC_BRID, KC_F4, KC_F5, KC_F6, KC_F11, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, KC_MPLY, _______, KC_F1, KC_F2, KC_F3, KC_F12, _______,
|
||||
_______, _______, _______, _______, _______, _______, MO(_ADJUST), _______, _______, _______
|
||||
),
|
||||
|
||||
/*
|
||||
Adjust Layer, Keyboard Settings
|
||||
┌────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────┐
|
||||
│ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||
├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
|
||||
│SpdU│HueU│SatU│ValU│Rnxt│ │ │ │EClr│Rbt │DBUG│BOOT│ │
|
||||
├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
|
||||
│SpdD│HueD│SatD│ValD│Rprv│RTgl│ │ │QWRT│COLE│ │ │ │
|
||||
├────┼────┼────┼────┼────┼────┼────┐ ┌────┼────┼────┼────┼────┼────┼────┤
|
||||
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||
└────┴────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┴────┘
|
||||
┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐
|
||||
│___│___│___│___│___│ │___│___│___│___│___│
|
||||
└───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘
|
||||
*/
|
||||
[_ADJUST] = LAYOUT_split4x6_r1(
|
||||
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
RGB_SPI, RGB_HUI, RGB_SAI, RGB_VAI, RGB_MOD, KC_NO, KC_NO, EE_CLR, QK_RBT, DB_TOGG, QK_BOOT, KC_NO,
|
||||
RGB_SPD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_RMOD, RGB_TOG, KC_NO, DF(_QWERTY), DF(_COLEMAK_DH), KC_NO, KC_NO, KC_NO,
|
||||
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
)
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
/*
|
||||
--- Rotary Encoder Mappings ---
|
||||
|
||||
Encoder mappings go from leftmost encoder to rightmost encoder on the physical board.
|
||||
index 0 is the the optional leftmost encoder on the left half, index 1 is the right encoder
|
||||
on the left half (by the thumb keys), index 2 is the left encoder on the right half (by the
|
||||
thumb keys), and index 3 is the optional rightmost encoder on the right half.
|
||||
|
||||
If you are only using the 2 required encoders by the thumb keys, you only need to worry about
|
||||
index 1 and index 2.
|
||||
|
||||
Note that the keycode for counter-clockwise rotation (CCW) goes first and then the key for
|
||||
clockwise (CW) within ENCODER_CCW_CW.
|
||||
*/
|
||||
#ifdef ENCODER_MAP_ENABLE
|
||||
// clang-format off
|
||||
|
||||
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
|
||||
// Base layer encoder mappings:
|
||||
// index 0: mouse wheel up (CCW)/down (CW) index 1: volume down/up index 2: mouse wheel up/down index 3: mouse wheel left/right
|
||||
[_QWERTY] = { ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(KC_WH_L, KC_WH_R) },
|
||||
[_COLEMAK_DH] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
|
||||
|
||||
// Passes through to base layers
|
||||
[_SYMB] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
|
||||
// On the extension layer, the right side's left encoder by the thumb keys (mouse wheel up/down) is traded for media previous/next
|
||||
[_EXT] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_MPRV, KC_MNXT), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
|
||||
// Passes through
|
||||
[_ADJUST] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
#endif
|
57
keyboards/sofle_v303/keymaps/default/readme.md
Normal file
57
keyboards/sofle_v303/keymaps/default/readme.md
Normal file
@ -0,0 +1,57 @@
|
||||
# Default sofle_v303 Keymap
|
||||
|
||||
This is the default layout for sofle_v303. For the most part it's a normal QWERTY layout. The exceptions being the thumb keys, rotary encoders, and lack of caps lock (which is replaced by escape).
|
||||
|
||||
One of the biggest features of QMK is it brings layers into the mix which can give you access to even more keys. There are 4 layers: the default/base layer (QWERTY), a symbol layer, an extension layer, and an adjust layer.
|
||||
|
||||
Layers are very similar to Shift on a normal keyboard, where "a" becomes "A" when holding down shift. With a custom layer, you can have "j" become "4" for example and make an entire side of the keyboard become a number pad.
|
||||
|
||||
The [symbol layer](#symbol-layer) is accessed by holding down backspace, the [extension layer](#extension-layer) is accessed by holding down delete, and the [adjust layer](#adjust-layer) is accessed by holding down both delete and backspace.
|
||||
|
||||
## Default Base Layer (QWERTY)
|
||||
|
||||
Grey keys are rotary encoders (the ones on far left and far right are optional). Middle legend is pressing down the encoder, bottom left legend is counter-clockwise turn, and bottom right legend is clockwise turn of the encoder.
|
||||
|
||||
Those arrows for the bottom legends on the encoders are mouse scroll directions.
|
||||
|
||||
Red legends are the layer activated by holding down a key.
|
||||
|
||||
![sofle_v303's QWERTY Layout](https://i.imgur.com/fXGt5Jh.png)
|
||||
|
||||
## Symbol Layer
|
||||
|
||||
This layer is accessed by holding down backspace on the base layer, thus that key is blacked out.
|
||||
|
||||
On the symbol layer, the right side is a number pad, and the left side contains all the typical symbols (geared for programming).
|
||||
|
||||
Holding down delete within the symbol layer will take you to the adjust layer.
|
||||
|
||||
![sofle_v303's Symbol Layer](https://i.imgur.com/6F35Z4Wh.png)
|
||||
|
||||
## Extension Layer
|
||||
|
||||
This layer's theme is navigation/extras, its accessed by holding down delete on the base layer, thus that key is blacked out.
|
||||
|
||||
On the extension layer, the right side is the function keys in a number-pad-esque layout with screen brightness up/down, and the left side has navigation keys and caps lock. Also, the rotary on the right side encoder becomes media controls.
|
||||
|
||||
Holding down backspace within the extension layer will take you to the adjust layer.
|
||||
|
||||
![sofle_v303's Extension Layer](https://i.imgur.com/FETcqkCh.png)
|
||||
|
||||
## Adjust Layer
|
||||
|
||||
This layer's theme is adjusting the keyboard's settings, it's accessed by holding down both delete and backspace on the base layer.
|
||||
|
||||
On the adjust layer, the right side is the keyboard's settings: clear data, reboot, toggle debug mode, enter the bootloader, and change the base layer between QWERTY and [Colemak-DH](#colemak-dh). The left side adjusts the RGB lighting.
|
||||
|
||||
![sofle_v303's Adjust Layer](https://i.imgur.com/fRsdlt3h.png)
|
||||
|
||||
## Colemak-DH
|
||||
|
||||
This keymap offers Colemak-DH as an alternative base layer to QWERTY.
|
||||
|
||||
QWERTY is default when flashing your keyboard, but you can change it to Colemak-DH by selecting it's key on the adjust layer.
|
||||
|
||||
If you've never heard of it, Colemak is a keyboard layout that was designed to be a more ergonomic, modern, efficient, and comfortable replacement to QWERTY. Colemak was designed to place the most common letters in english on the home row along with many of the most common bigrams together (two letters typed in a row). Colemak-DH is a variant of Colemak that moves D and H to beneath the index fingers rather than the home row since most people find it easier and faster to reach the keys that way rather than the middle of the home row.
|
||||
|
||||
![sofle_v303's Colemak-DH Layout](https://i.imgur.com/8biZfn2h.png)
|
16
keyboards/sofle_v303/keymaps/default/rules.mk
Normal file
16
keyboards/sofle_v303/keymaps/default/rules.mk
Normal file
@ -0,0 +1,16 @@
|
||||
# Change from yes to no to disable features
|
||||
|
||||
# Enables Audio control and System control Keycodes
|
||||
EXTRAKEY_ENABLE = yes
|
||||
# Enables Mousekeys
|
||||
MOUSEKEY_ENABLE = yes
|
||||
# Encoder Support
|
||||
ENCODER_ENABLE = yes
|
||||
# Use Enocoder Mapping
|
||||
ENCODER_MAP_ENABLE = yes
|
||||
|
||||
# Enables RGB Lighting Effects
|
||||
RGB_MATRIX_ENABLE = yes
|
||||
|
||||
# Allows use of `qmk console` for debugging
|
||||
CONSOLE_ENABLE = yes
|
58
keyboards/sofle_v303/keymaps/deluxe/config.h
Normal file
58
keyboards/sofle_v303/keymaps/deluxe/config.h
Normal file
@ -0,0 +1,58 @@
|
||||
// Copyright 2022 Dane Skalski (@Daneski13)
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
/* Indicator LEDs */
|
||||
// LED index for caps lock key on the extension layer
|
||||
#define CAPS_LOCK_LED_INDEX 25
|
||||
// LED index for num lock key on the symbol layer
|
||||
#define NUM_LOCK_LED_INDEX 62
|
||||
// LED index for key that sticks the adjust layer
|
||||
#define ADJST_LED_INDEX 19
|
||||
|
||||
// Number of Layers that can be used by VIA.
|
||||
// Change this if you want more layers
|
||||
#define DYNAMIC_KEYMAP_LAYER_COUNT 6
|
||||
|
||||
/* - Encoder settings - */
|
||||
#ifdef ENCODER_ENABLE
|
||||
# define ENCODER_RESOLUTION 4
|
||||
#endif
|
||||
#ifdef ENCODER_MAP_ENABLE
|
||||
// Key delay for encoders (necessary for some keycodes)
|
||||
# define ENCODER_MAP_KEY_DELAY 10
|
||||
#endif
|
||||
|
||||
/*
|
||||
- RGB Stuff -
|
||||
All effects can be found in the QMK docs:
|
||||
https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects
|
||||
*/
|
||||
#ifdef RGB_MATRIX_ENABLE
|
||||
|
||||
// Allows the indicator LEDs to work
|
||||
# define SPLIT_LED_STATE_ENABLE
|
||||
# define SPLIT_LAYER_STATE_ENABLE
|
||||
|
||||
// Default effect when EEPROM cleared
|
||||
# define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_RAINBOW_MOVING_CHEVRON
|
||||
|
||||
// Turns off RGB effects when there is no longer a USB connection
|
||||
# define RGB_DISABLE_WHEN_USB_SUSPENDED
|
||||
|
||||
// Throttling of RGB to increase keyboard responsiveness, set to 1.5x the default limits
|
||||
# define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 6 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness)
|
||||
# define RGB_MATRIX_LED_FLUSH_LIMIT 24 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms), the default, is equivalent to limiting to 60fps
|
||||
|
||||
// Key press reactive animations
|
||||
# define SPLIT_TRANSPORT_MIRROR // Necessary setting for key press animations
|
||||
# define RGB_MATRIX_KEYPRESSES // Enables key press effects
|
||||
# define ENABLE_RGB_MATRIX_MULTISPLASH
|
||||
|
||||
// Normal effects
|
||||
# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
|
||||
# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
|
||||
# define ENABLE_RGB_MATRIX_PIXEL_RAIN
|
||||
|
||||
#endif
|
329
keyboards/sofle_v303/keymaps/deluxe/keymap.c
Normal file
329
keyboards/sofle_v303/keymaps/deluxe/keymap.c
Normal file
@ -0,0 +1,329 @@
|
||||
// Copyright 2022 Dane Skalski (@Daneski13)
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
// Layers enum
|
||||
enum sofle_pico_layers { _QWERTY, _COLEMAK_DH, _SYMB, _EXT, _ADJUST };
|
||||
|
||||
// Custom keycodes
|
||||
enum custom_keycodes {
|
||||
// Keycode for toggling between macOS and Windows key mappings
|
||||
// Actually just an alias to the GUI and Alt swap Magic keycode
|
||||
KC_OS = MAGIC_TOGGLE_ALT_GUI,
|
||||
// Keycode for swapping the base layer between QWERTY and Colemak-DH
|
||||
KC_TOGGLE_BASE = SAFE_RANGE,
|
||||
// Keycode for redo action (Ctrl + Y on windows, Ctrl + Shift + Z on macOS)
|
||||
KC_REDO,
|
||||
// Keycodes for next/previous word
|
||||
KC_WNXT,
|
||||
KC_WPRV,
|
||||
// Keycode for sticking/unsticking the adjust layer
|
||||
KC_ADJST
|
||||
};
|
||||
|
||||
/* LED indicators */
|
||||
bool is_caps_lock_enabled(void) { // Caps lock
|
||||
return (host_keyboard_led_state().caps_lock);
|
||||
}
|
||||
bool is_num_lock_enabled(void) { // Num lock
|
||||
return (host_keyboard_led_state().num_lock);
|
||||
}
|
||||
bool is_adjust_layer_sticky(layer_state_t state) { // Adjust layer sticky
|
||||
// Checks if the state is equal to just the adjust layer being active.
|
||||
// Doing it this way can leverage SPLIT_LAYER_STATE_ENABLE
|
||||
return (state == (1UL << _ADJUST)) ? true : false;
|
||||
}
|
||||
// Indicator color based on the RGB Matrix mode
|
||||
RGB indicator_color(void) {
|
||||
RGB rgb;
|
||||
// Normally the indicator color is white to stand out in the RGB rainbow.
|
||||
// When using the custom RGB mode that already is white, the indicator color
|
||||
// is green to stand out.
|
||||
if (rgb_matrix_config.mode == RGB_MATRIX_CUSTOM_WHITE_UNDERGLOW_CYCLE) {
|
||||
// Green
|
||||
rgb.r = 0;
|
||||
rgb.g = 255;
|
||||
rgb.b = 0;
|
||||
} else {
|
||||
// White
|
||||
rgb.r = 255;
|
||||
rgb.g = 255;
|
||||
rgb.b = 255;
|
||||
}
|
||||
return rgb;
|
||||
}
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
// clang-format off
|
||||
/*
|
||||
Traditional QWERTY
|
||||
┌───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┬───┐
|
||||
│ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ │ 6 │ 7 │ 8 │ 9 │ 0 │ - │
|
||||
├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤
|
||||
│Tab│ Q │ W │ E │ R │ T │ │ Y │ U │ I │ O │ P │Ent│
|
||||
├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤
|
||||
│Esc│ A │ S │ D │ F │ G │ │ H │ J │ K │ L │ ; │ ' │
|
||||
├───┼───┼───┼───┼───┼───┼───┐ ┌───┼───┼───┼───┼───┼───┼───┤
|
||||
│Sft│ Z │ X │ C │ V │ B │Mut│ │▶⏸ │ N │ M │ , │ . │ / │Sft│
|
||||
└───┴───┴───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┴───┴───┘
|
||||
┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐
|
||||
│Ctr│Win│Alt│Del│Spc│ │Sft│Bsp│Alt│Win│Ctr│
|
||||
└───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘
|
||||
For macOS - GUI (cmd) and Alt (opt) swapped
|
||||
*/
|
||||
[_QWERTY] = LAYOUT_split4x6_r1(
|
||||
KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_ENTER,
|
||||
KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SEMICOLON, KC_QUOTE,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MUTE, KC_MPLY, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, LT(_EXT, KC_DEL), KC_SPC, KC_RSFT, LT(_SYMB, KC_BSPC), KC_RALT, KC_RGUI, KC_RCTL
|
||||
),
|
||||
|
||||
/*
|
||||
Colemak-DH
|
||||
┌───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┬───┐
|
||||
│ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ │ 6 │ 7 │ 8 │ 9 │ 0 │ - │
|
||||
├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤
|
||||
│Tab│ Q │ W │ F │ P │ B │ │ J │ L │ U │ Y │ ; │Ent│
|
||||
├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤
|
||||
│Esc│ A │ R │ S │ T │ G │ │ M │ N │ E │ I │ O │ ' │
|
||||
├───┼───┼───┼───┼───┼───┼───┐ ┌───┼───┼───┼───┼───┼───┼───┤
|
||||
│Sft│ Z │ X │ C │ D │ V │Mut│ │▶⏸ │ K │ H │ , │ . │ / │Sft│
|
||||
└───┴───┴───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┴───┴───┘
|
||||
┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐
|
||||
│Ctr│Win│Alt│Del│Spc│ │Sft│Bsp│Alt│Win│Ctr│
|
||||
└───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘
|
||||
For macOS - GUI/Win (cmd) and Alt (opt) swapped
|
||||
*/
|
||||
[_COLEMAK_DH] = LAYOUT_split4x6_r1(
|
||||
KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS,
|
||||
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_SEMICOLON, KC_ENTER,
|
||||
KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O, KC_QUOTE,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_D, KC_V, KC_MUTE, KC_MPLY, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, LT(_EXT, KC_DEL), KC_SPC, KC_RSFT, LT(_SYMB, KC_BSPC), KC_RALT, KC_RGUI, KC_RCTL
|
||||
),
|
||||
|
||||
/*
|
||||
Symbols/Numpad Layer
|
||||
┌───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┬───┐
|
||||
│F1 │F2 │F3 │F4 │F5 │F6 │ │F7 │F8 │F9 │F10│F11│F12│
|
||||
├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤
|
||||
│Tab│ ! │ @ │ # │ $ │ % │ │ * │ 7 │ 8 │ 9 │ + │Ent│
|
||||
├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤
|
||||
│ \ │ _ │ [ │ { │ ( │ ^ │ │ = │ 4 │ 5 │ 6 │ 0 │NUM│
|
||||
├───┼───┼───┼───┼───┼───┼───┐ ┌───┼───┼───┼───┼───┼───┼───┤
|
||||
│___│ | │ ] │ } │ ) │ & │___│ │___│ / │ 1 │ 2 │ 3 │ - │___│
|
||||
└───┴───┴───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┴───┴───┘
|
||||
┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐
|
||||
│___│___│___│___│___│ │___│___│___│___│___│
|
||||
└───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘
|
||||
*/
|
||||
[_SYMB] = LAYOUT_split4x6_r1(
|
||||
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_TAB, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_PAST, KC_P7, KC_P8, KC_P9, KC_PPLS, KC_ENTER,
|
||||
KC_BSLS, KC_UNDS, KC_LBRC, KC_LCBR, KC_LPRN, KC_CIRC, KC_PEQL, KC_P4, KC_P5, KC_P6, KC_P0, KC_NUM,
|
||||
_______, KC_PIPE, KC_RBRC, KC_RCBR, KC_RPRN, KC_AMPR, _______, _______, KC_PSLS, KC_P1, KC_P2, KC_P3, KC_PMNS, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
/*
|
||||
Extension/Function Layer
|
||||
┌────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────┐
|
||||
│ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ │ F7 │ F8 │ F9 │ F10│ F11│ F12│
|
||||
├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
|
||||
│ ⇤ │PGUP│End │ ↑ │Home│ │ │BRIU│ F7 │ F8 │ F9 │ F10│____│
|
||||
├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
|
||||
│Cps │PGDN│ ← │ ↓ │ → │ │ │BRID│ F4 │ F5 │ F6 │ F11│____│
|
||||
├────┼────┼────┼────┼────┼────┼────┐ ┌────┼────┼────┼────┼────┼────┼────┤
|
||||
│____│ │ │ │ │ │____│ │____│ │ F1 │ F2 │ F3 │ F12│____│
|
||||
└────┴────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┴────┘
|
||||
┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐
|
||||
│___│___│___│___│___│ │___│___│___│___│___│
|
||||
└───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘
|
||||
*/
|
||||
[_EXT] = LAYOUT_split4x6_r1(
|
||||
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
|
||||
S(KC_TAB), KC_PGUP, KC_END, KC_UP, KC_HOME, _______, KC_BRIU, KC_F7, KC_F8, KC_F9, KC_F10, _______,
|
||||
KC_CAPS, KC_PGDN, KC_LEFT, KC_DOWN, KC_RIGHT, _______, KC_BRID, KC_F4, KC_F5, KC_F6, KC_F11, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_F12, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
/*
|
||||
Adjust Layer, Keyboard Settings
|
||||
┌────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────┐
|
||||
│ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||
├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
|
||||
│SpdU│HueU│SatU│ValU│Rnxt│Stck│ │ │EClr│Rbt │DBUG│BOOT│ │
|
||||
├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
|
||||
│SpdD│HueD│SatD│ValD│Rprv│RTgl│ │ │LOUT│ OS │ │ │ │
|
||||
├────┼────┼────┼────┼────┼────┼────┐ ┌────┼────┼────┼────┼────┼────┼────┤
|
||||
│ │ │ │ │ │ │RTgl│ │ │ │ │ │ │ │ │
|
||||
└────┴────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┴────┘
|
||||
┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐
|
||||
│___│___│___│___│___│ │___│___│___│___│___│
|
||||
└───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘
|
||||
*/
|
||||
[_ADJUST] = LAYOUT_split4x6_r1(
|
||||
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
RGB_SPI, RGB_HUI, RGB_SAI, RGB_VAI, RGB_MOD, KC_ADJST, KC_NO, EE_CLR, QK_RBT, DB_TOGG, QK_BOOT, KC_NO,
|
||||
RGB_SPD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_RMOD, RGB_TOG, KC_NO, KC_TOGGLE_BASE, KC_OS, KC_NO, KC_NO, KC_NO,
|
||||
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RGB_TOG, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
)
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
/*
|
||||
--- Rotary Encoder Mappings ---
|
||||
|
||||
Encoder mappings go from leftmost encoder to rightmost encoder on the physical board.
|
||||
index 0 is the the optional leftmost encoder on the left half, index 1 is the right encoder
|
||||
on the left half (by the thumb keys), index 2 is the left encoder on the right half (by the
|
||||
thumb keys), and index 3 is the optional rightmost encoder on the right half.
|
||||
|
||||
If you are only using the 2 required encoders by the thumb keys, you only need to worry about
|
||||
index 1 and index 2.
|
||||
|
||||
Note that the key to be sent for counter-clockwise rotation (CCW) goes first and then the key for
|
||||
clockwise (CW) within ENCODER_CCW_CW.
|
||||
*/
|
||||
#ifdef ENCODER_MAP_ENABLE
|
||||
// clang-format off
|
||||
|
||||
// Base layer encoder mappings:
|
||||
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
|
||||
// Base layers
|
||||
// index 0: mouse wheel up (CCW)/down (CW) index 1: volume up/down index 2: media prev/next index 3: mouse wheel left/right
|
||||
[_QWERTY] = { ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_MPRV, KC_MNXT), ENCODER_CCW_CW(KC_WH_L, KC_WH_R) },
|
||||
[_COLEMAK_DH] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
|
||||
|
||||
// Passes through to base layer
|
||||
[_SYMB] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
|
||||
// undo/redo previous word/next word
|
||||
[_EXT] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_UNDO, KC_REDO), ENCODER_CCW_CW(KC_WPRV, KC_WNXT) },
|
||||
// RGB Speed down/up RGB previous mode/next mode RGB brightness down/up
|
||||
[_ADJUST] = { ENCODER_CCW_CW(RGB_SPD, RGB_SPI), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
// Called whenever a layer is changed
|
||||
layer_state_t layer_state_set_user(layer_state_t state) {
|
||||
// Make sure the adjust layer isn't sticky
|
||||
if (is_adjust_layer_sticky(state)) return state;
|
||||
|
||||
// When both the symbol and extension layer keys are held, the Adjust layer is active.
|
||||
return update_tri_layer_state(state, _SYMB, _EXT, _ADJUST);
|
||||
}
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
switch (keycode) {
|
||||
// Toggle base layer
|
||||
case KC_TOGGLE_BASE:
|
||||
if (record->event.pressed) {
|
||||
// Toggle swapping base layers between Colemak-DH and QWERTY.
|
||||
// When base layer is QWERTY, swap to Colemak-DH and vice-versa
|
||||
if (get_highest_layer(default_layer_state) == _QWERTY) {
|
||||
default_layer_set(1UL << _COLEMAK_DH);
|
||||
} else {
|
||||
default_layer_set(1UL << _QWERTY);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
||||
// Override undo in favor of the more modern undo action
|
||||
case KC_UNDO:
|
||||
if (record->event.pressed) {
|
||||
// Use the correct modifier for macOS or Windows
|
||||
uint16_t mod = keymap_config.swap_lalt_lgui ? KC_LGUI : KC_LCTL;
|
||||
// Send Ctrl+Z/Cmd+Z
|
||||
register_code(mod);
|
||||
tap_code_delay(KC_Z, 10);
|
||||
unregister_code(mod);
|
||||
}
|
||||
return false;
|
||||
|
||||
// Redo action
|
||||
case KC_REDO:
|
||||
if (record->event.pressed) {
|
||||
// Whether or not macOS mapping is enabled
|
||||
if (keymap_config.swap_lalt_lgui) {
|
||||
// macOS - Send Cmd+Shift+Z
|
||||
register_code(KC_LGUI);
|
||||
register_code(KC_LSFT);
|
||||
tap_code_delay(KC_Z, 10);
|
||||
unregister_code(KC_LSFT);
|
||||
unregister_code(KC_LGUI);
|
||||
} else {
|
||||
// Windows - Send Ctrl+Y
|
||||
register_code(KC_LCTL);
|
||||
tap_code_delay(KC_Y, 10);
|
||||
unregister_code(KC_LCTL);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
||||
// Next word
|
||||
case KC_WNXT:
|
||||
if (record->event.pressed) {
|
||||
// Use the correct modifier for macOS or Windows
|
||||
uint16_t mod = keymap_config.swap_lalt_lgui ? KC_LALT : KC_LCTL;
|
||||
// Send Ctrl+Right/Option+Right
|
||||
register_code(mod);
|
||||
tap_code_delay(KC_RGHT, 10);
|
||||
unregister_code(mod);
|
||||
}
|
||||
return false;
|
||||
|
||||
// Previous word
|
||||
case KC_WPRV:
|
||||
if (record->event.pressed) {
|
||||
// Use the correct modifier for macOS or Windows
|
||||
uint16_t mod = keymap_config.swap_lalt_lgui ? KC_LALT : KC_LCTL;
|
||||
// Send Ctrl+Left/Option+Left
|
||||
register_code(mod);
|
||||
tap_code_delay(KC_LEFT, 10);
|
||||
unregister_code(mod);
|
||||
}
|
||||
return false;
|
||||
|
||||
// Stick / Unstick the adjust layer
|
||||
case KC_ADJST:
|
||||
if (record->event.pressed) {
|
||||
// If currently not sticky, we want only the adjust layer to be active to make it stick.
|
||||
// Otherwise we want the default layer, un-stick.
|
||||
is_adjust_layer_sticky(layer_state) ? layer_state_set(default_layer_state) : layer_move(_ADJUST);
|
||||
dprintf("Adjust layer is now %s\n", is_adjust_layer_sticky(layer_state) ? "stuck" : "un-stuck");
|
||||
}
|
||||
return false;
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/* Indicators (Caps Lock / Num Lock / Adjust Layer Sticky) */
|
||||
bool rgb_matrix_indicators_user(void) {
|
||||
layer_state_t curr_layer_state = layer_state;
|
||||
layer_state_t layer = get_highest_layer(curr_layer_state);
|
||||
RGB rgb = indicator_color();
|
||||
|
||||
/* Only show the indicator on their respective layers */
|
||||
// Caps Lock is only on the extension layer
|
||||
if (is_caps_lock_enabled() && layer == _EXT) {
|
||||
rgb_matrix_set_color(CAPS_LOCK_LED_INDEX, rgb.r, rgb.g, rgb.b);
|
||||
}
|
||||
|
||||
// Num Lock is only on the symbol layer
|
||||
if (is_num_lock_enabled() && layer == _SYMB) {
|
||||
rgb_matrix_set_color(NUM_LOCK_LED_INDEX, rgb.r, rgb.g, rgb.b);
|
||||
}
|
||||
|
||||
// If the adjust layer is stuck/sticky, light it up. Don't need to care about
|
||||
// checking the layer since it can only be active on the adjust layer anyway
|
||||
if (is_adjust_layer_sticky(curr_layer_state)) rgb_matrix_set_color(ADJST_LED_INDEX, rgb.r, rgb.g, rgb.b);
|
||||
|
||||
return false;
|
||||
}
|
43
keyboards/sofle_v303/keymaps/deluxe/readme.md
Normal file
43
keyboards/sofle_v303/keymaps/deluxe/readme.md
Normal file
@ -0,0 +1,43 @@
|
||||
# Deluxe sofle_pico Keymap
|
||||
|
||||
This is my personal keymap for sofle_pico at time of writing. It departs from the [default layout](../default/README.md) with the encoder mappings and some extra keycodes. This keymap also adds indicators when caps lock and num lock are enabled. When enabled, that key will become a static white (green on the white backlight mode) but only when the layer that respective key is on is active.
|
||||
|
||||
I wanted that classic rainbow barf RGB effect for the underglow even if the per-key lighting is something else, so I added 2 custom RGB matrix animations: white per-key lighting with rainbow underglow and pixel rain with rainbow underglow.
|
||||
|
||||
Here are some gifs of the animations:
|
||||
|
||||
![White + Underglow Animation](https://i.imgur.com/2vCiZz0.gif)
|
||||
|
||||
![Pixel Rain + Underglow Animation](https://i.imgur.com/f6t0OfD.gif)
|
||||
|
||||
## Base Layers
|
||||
|
||||
The base layers are the same as the default layout, except the right side's left encoder (by the thumb keys) is now media controls. Since I am using all 4 encoders it doesn't make sense to have 2 mouse scroll up/down, but for someone with just 2 encoders it may make sense to have media controls on a layer.
|
||||
|
||||
QWERTY:
|
||||
|
||||
![QWERTY Layer](https://i.imgur.com/vkS9Tceh.png)
|
||||
|
||||
Colemak-DH:
|
||||
|
||||
![Colemak-DH Layer](https://i.imgur.com/5YYgaUAh.png)
|
||||
|
||||
## Symbol Layer
|
||||
|
||||
Symbol layer is identical to the default layout.
|
||||
|
||||
![Symbol Layer](https://i.imgur.com/6F35Z4Wh.png)
|
||||
|
||||
## Extension Layer
|
||||
|
||||
Encoders on the right side become undo/redo and scrolling horizontally by word.
|
||||
|
||||
![Extension Layer](https://i.imgur.com/0VCStS8h.png)
|
||||
|
||||
## Adjust Layer
|
||||
|
||||
Pressing "Stick Adj Layer" will "stick" the adjust layer so you can use the rotary encoders for RGB settings rather than holding down both backspace and delete. To go back to the default layer, press that stick key again or press and release either Del or Backspace. When the adjust layer is currently "sticky" the sticky key will become the indicator color mentioned earlier.
|
||||
|
||||
"Toggle Base" will toggle between QWERTY and Colemak-DH and toggle OS will toggle between macOS and Windows key-mappings (swapping WIN/Command with Alt/Option by the thumb keys and properly mapping redo/word scrolling).
|
||||
|
||||
![Adjust layer](https://i.imgur.com/71ftNoNh.png)
|
48
keyboards/sofle_v303/keymaps/deluxe/rgb_matrix_user.inc
Normal file
48
keyboards/sofle_v303/keymaps/deluxe/rgb_matrix_user.inc
Normal file
@ -0,0 +1,48 @@
|
||||
// Copyright 2022 Dane Skalski (@Daneski13)
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
RGB_MATRIX_EFFECT(WHITE_UNDERGLOW_CYCLE)
|
||||
RGB_MATRIX_EFFECT(PIXEL_RAIN_UNDERGLOW_CYCLE)
|
||||
|
||||
#ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
|
||||
|
||||
// This is a modified version of the effect_runner_dx_dy_dist function from rgb_matrix
|
||||
// that only applies the effect to the underglow LEDs of this keyboard
|
||||
static bool underglow_effect_runner(effect_params_t* params, dx_dy_dist_f underglow_effect_func, bool backlight_white) {
|
||||
RGB_MATRIX_USE_LIMITS(led_min, led_max);
|
||||
|
||||
HSV hsv = rgb_matrix_config.hsv;
|
||||
HSV white = {0, 0, hsv.v};
|
||||
RGB rgb = rgb_matrix_hsv_to_rgb(white);
|
||||
uint8_t time = scale16by8(g_rgb_timer, rgb_matrix_config.speed / 2);
|
||||
for (uint8_t i = led_min; i < led_max; i++) {
|
||||
// Underglow LEDs are indicies 0 - 7 and 37 - 44
|
||||
if ((i <= 7) || (37 <= i && i <= 44)) {
|
||||
// Apply the maths and colors to the underglow LEDs
|
||||
RGB_MATRIX_TEST_LED_FLAGS();
|
||||
int16_t dx = g_led_config.point[i].x - k_rgb_matrix_center.x;
|
||||
int16_t dy = g_led_config.point[i].y - k_rgb_matrix_center.y;
|
||||
uint8_t dist = sqrt16(dx * dx + dy * dy);
|
||||
RGB rgb = rgb_matrix_hsv_to_rgb(underglow_effect_func(hsv, dx, dy, dist, time));
|
||||
rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
|
||||
} else {
|
||||
// Set the backlight to white if needed
|
||||
if (!backlight_white) continue;
|
||||
rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
|
||||
}
|
||||
}
|
||||
return rgb_matrix_check_finished_leds(led_max);
|
||||
}
|
||||
|
||||
// Solid white but the underglow is a rainbow spiral
|
||||
static bool WHITE_UNDERGLOW_CYCLE(effect_params_t* params) {
|
||||
return underglow_effect_runner(params, &CYCLE_SPIRAL_math, true);
|
||||
}
|
||||
|
||||
// Pixel rain effect but the underglow is a rainbow spiral
|
||||
static bool PIXEL_RAIN_UNDERGLOW_CYCLE(effect_params_t* params) {
|
||||
PIXEL_RAIN(params);
|
||||
return underglow_effect_runner(params, &CYCLE_SPIRAL_math, false);
|
||||
}
|
||||
|
||||
#endif
|
20
keyboards/sofle_v303/keymaps/deluxe/rules.mk
Normal file
20
keyboards/sofle_v303/keymaps/deluxe/rules.mk
Normal file
@ -0,0 +1,20 @@
|
||||
# Enables Audio control and System control Keycodes
|
||||
EXTRAKEY_ENABLE = yes
|
||||
# Enables Mousekeys
|
||||
MOUSEKEY_ENABLE = yes
|
||||
# Encoder Support
|
||||
ENCODER_ENABLE = yes
|
||||
# Use Enocoder Mapping
|
||||
ENCODER_MAP_ENABLE = yes
|
||||
|
||||
# Enables RGB Lighting Effects
|
||||
RGB_MATRIX_ENABLE = yes
|
||||
|
||||
# Allows use of `qmk console` for debugging
|
||||
CONSOLE_ENABLE = yes
|
||||
|
||||
# Enables VIA
|
||||
VIA_ENABLE = yes
|
||||
|
||||
# Custom RGB Matrix Effect
|
||||
RGB_MATRIX_CUSTOM_USER = yes
|
67
keyboards/sofle_v303/keymaps/jellytitan/config.h
Normal file
67
keyboards/sofle_v303/keymaps/jellytitan/config.h
Normal file
@ -0,0 +1,67 @@
|
||||
// Copyright 2023 Ryan Neff (@JellyTitan)
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
/* - Encoder settings - */
|
||||
#ifdef ENCODER_MAP_ENABLE
|
||||
// Key delay for encoders (necessary for some keycodes)
|
||||
# define ENCODER_MAP_KEY_DELAY 10
|
||||
#endif
|
||||
|
||||
#define SPLIT_HAPTIC_ENABLE
|
||||
#define SOLENOID_DEFAULT_DWELL 25
|
||||
#define SOLENOID_MAX_DWELL 100
|
||||
#define SOLENOID_MIN_DWELL 4
|
||||
#define HAPTIC_OFF_IN_LOW_POWER 1
|
||||
// Prevents thumper on mods like shift/Ctrl/Alt
|
||||
#define NO_HAPTIC_MOD
|
||||
#define SOLENOID_PIN GP21
|
||||
/* Set tapdance speed */
|
||||
#define TAPPING_TERM 210
|
||||
|
||||
/* Allows for the setting of constant mouse speed levels. */
|
||||
/* Delay between pressing a movement key and cursor movement */
|
||||
#define MOUSEKEY_DELAY 10
|
||||
/* Time between cursor movements in milliseconds */
|
||||
#define MOUSEKEY_INTERVAL 16
|
||||
/* Step size */
|
||||
#define MOUSEKEY_MOVE_DELTA 8
|
||||
/* Maximum cursor speed at which acceleration stops */
|
||||
#define MOUSEKEY_MAX_SPEED 2
|
||||
/* Time until maximum cursor speed is reached */
|
||||
#define MOUSEKEY_TIME_TO_MAX 40
|
||||
/* Maximum number of scroll steps per scroll action */
|
||||
#define MOUSEKEY_WHEEL_MAX_SPEED 42
|
||||
/* Time until maximum scroll speed is reached */
|
||||
#define MOUSEKEY_WHEEL_TIME_TO_MAX 15
|
||||
|
||||
/*
|
||||
- RGB Stuff -
|
||||
All effects can be found in the QMK docs:
|
||||
https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects
|
||||
*/
|
||||
#ifdef RGB_MATRIX_ENABLE
|
||||
|
||||
# define RGB_DISABLE_WHEN_USB_SUSPENDED
|
||||
// Decrease decay of heatmap rgb effect
|
||||
# define RGB_MATRIX_TYPING_HEATMAP_DECREASE_DELAY_MS 50
|
||||
// If you're setting colors per key, this is required.
|
||||
# define SPLIT_LAYER_STATE_ENABLE
|
||||
|
||||
// Default effect when EEPROM cleared
|
||||
# define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_RAINBOW_MOVING_CHEVRON
|
||||
|
||||
// Turns off RGB effects when there is no longer a USB connection
|
||||
# define RGB_DISABLE_WHEN_USB_SUSPENDED
|
||||
|
||||
// Key press reactive animations
|
||||
# define SPLIT_TRANSPORT_MIRROR // Necessary setting for key press animations
|
||||
# define RGB_MATRIX_KEYPRESSES // Enables key press effects
|
||||
# define ENABLE_RGB_MATRIX_MULTISPLASH
|
||||
|
||||
// Normal effects
|
||||
# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
|
||||
# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
|
||||
# define ENABLE_RGB_MATRIX_PIXEL_RAIN
|
||||
#endif
|
326
keyboards/sofle_v303/keymaps/jellytitan/keymap.c
Normal file
326
keyboards/sofle_v303/keymaps/jellytitan/keymap.c
Normal file
@ -0,0 +1,326 @@
|
||||
// Copyright 2022 Ryan Neff (@JellyTitan)
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
enum custom_layers { _QWERTY, _LOWER, _RAISE };
|
||||
|
||||
/* Defines macros for use with the configurators "Any" key. (These are non-standard macros using the "Magnet" app on Mac). */
|
||||
/* Move active application right half. */
|
||||
#define KC_CSGRA LCTL(LSFT(LGUI(KC_RGHT)))
|
||||
/* Move active application to left half. */
|
||||
#define KC_CSGLA LCTL(LSFT(LGUI(KC_LEFT)))
|
||||
/* Maximize active application. */
|
||||
#define KC_MAXIM LCTL(LSFT(LGUI(KC_UP)))
|
||||
/* Minimize active application. */
|
||||
#define KC_MINIM LCTL(LSFT(LGUI(KC_DOWN)))
|
||||
|
||||
enum custom_keycodes {
|
||||
QWERTY = SAFE_RANGE,
|
||||
LOWER,
|
||||
RAISE,
|
||||
CMD_TAB_CW,
|
||||
CMD_TAB_CCW,
|
||||
};
|
||||
|
||||
/* Rotary encoder variables used to hold down Command (GUI) key while cycling through open programs. */
|
||||
bool is_cmd_tab_active = false;
|
||||
uint16_t cmd_tab_timer = 0;
|
||||
|
||||
/**
|
||||
* Tap Dance declarations
|
||||
*/
|
||||
enum tapdances {
|
||||
_TD_FIVE_ENTER,
|
||||
};
|
||||
|
||||
/* Tapdance */
|
||||
#define TD5ENT TD(_TD_FIVE_ENTER)
|
||||
|
||||
/**
|
||||
* Tap Dance definitions
|
||||
*
|
||||
* To use this in the configurator, enter the name 'TD5ENT' in the "Any" key.
|
||||
*/
|
||||
tap_dance_action_t tap_dance_actions[] = {
|
||||
/* Tap once for 5, twice for Enter. */
|
||||
[_TD_FIVE_ENTER] = ACTION_TAP_DANCE_DOUBLE(KC_5, KC_ENT),
|
||||
};
|
||||
|
||||
/**
|
||||
* Keymap.
|
||||
* The rotary encoders are programmed manually below because the configurator does not support them yet.
|
||||
*/
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
// clang-format off
|
||||
/*
|
||||
QWERTY
|
||||
┌───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┬───┐
|
||||
│ = │ 1 │ 2 │ 3 │ 4 │ 5 │ │ 6 │ 7 │ 8 │ 9 │ 0 │ - │
|
||||
├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤
|
||||
│Tab│ Q │ W │ E │ R │ T │ │ Y │ U │ I │ O │ P │ \ │
|
||||
├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤
|
||||
│Esc│ A │ S │ D │ F │ G │ │ H │ J │ K │ L │ ; │ ' │
|
||||
├───┼───┼───┼───┼───┼───┼───┐ ┌───┼───┼───┼───┼───┼───┼───┤
|
||||
│Sft│ Z │ X │ C │ V │ B │Min│ │Max│ N │ M │ , │ . │ / │Sft│
|
||||
└───┴───┴───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┴───┴───┘
|
||||
┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐
|
||||
│ ← │ → │Esc│Spc│Bsp│ │Ent│Tab│Del│ ↓ │ ↑ │
|
||||
└───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘
|
||||
*/
|
||||
[_QWERTY] = LAYOUT_split4x6_r1(
|
||||
KC_EQL, KC_1, KC_2, KC_3, KC_4, TD5ENT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
|
||||
LT(1,KC_DEL), LT(2,KC_A), LCTL_T(KC_S), KC_D, LGUI_T(KC_F), KC_G, KC_H, RGUI_T(KC_J), KC_K, RCTL_T(KC_L), LT(2,KC_SCLN), LT(1,KC_QUOT),
|
||||
KC_LSFT, LALT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_MINIM, KC_MAXIM, KC_N, KC_M, KC_COMM, KC_DOT, RALT_T(KC_SLSH), KC_RSFT,
|
||||
KC_LEFT, KC_RGHT, QK_GESC, KC_SPC, KC_BSPC, KC_ENT, KC_TAB, KC_DEL, KC_UP, KC_DOWN
|
||||
),
|
||||
|
||||
/*
|
||||
Symbols/Numpad Layer
|
||||
┌────┬───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┬────┐
|
||||
│BOOT│F1 │F2 │F3 │F4 │F5 │ │F6 │F7 │F8 │F9 │F10│F11 │
|
||||
├────┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼────┤
|
||||
│____│ ! │ @ │ { │ } │ | │ │QMK│ 7 │ 8 │ 9 │ * │F12 │
|
||||
├────┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼────┤
|
||||
│____│ # │ $ │ ( │ ) │ ` │ │QMK│ 4 │ 5 │ 6 │ + │____│
|
||||
├────┼───┼───┼───┼───┼───┼───┐ ┌───┼───┼───┼───┼───┼───┼────┤
|
||||
│____│ # │ $ │ [ │ ] │ ~ │___│ │___│QMK│ 1 │ 2 │ 3 │ / │BOOT│
|
||||
└────┴───┴───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┴───┴────┘
|
||||
┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐
|
||||
│___│___│___│___│___│ │ 0 │ 0 │ 0 │ 0 │ 0 │
|
||||
└───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘
|
||||
*/
|
||||
|
||||
[_LOWER] = LAYOUT_split4x6_r1(
|
||||
QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
|
||||
KC_TRNS, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, DT_PRNT, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
|
||||
KC_TRNS, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV, DT_UP, KC_4, KC_5, KC_6, KC_PPLS, KC_TRNS,
|
||||
KC_TRNS, KC_HASH, KC_DLR, KC_LBRC, KC_RBRC, KC_TILD, KC_TRNS, KC_TRNS, DT_DOWN, KC_1, KC_2, KC_3, KC_PSLS, QK_BOOT,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_P0, KC_P0, KC_P0, KC_P0, KC_P0
|
||||
),
|
||||
|
||||
/*
|
||||
Navigation/Function Layer
|
||||
┌────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────┐
|
||||
│RGB │ACL0│ACL1│ACL2│____│____│ │____│____│MOD │RMOD│HUI │HUD │
|
||||
├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
|
||||
│____│____│____│MS_U│____│____│ │____│BTN1│ ↑ │BTN2│SAI │SAD │
|
||||
├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
|
||||
│____│____│MS_L│MS_D│MS_R│____│ │____│ ← │ ↓ │ → │VAI │VAD │
|
||||
├────┼────┼────┼────┼────┼────┼────┐ ┌────┼────┼────┼────┼────┼────┼────┤
|
||||
│____│____│____│____│____│____│____│ │____│____│____│____│____│SPI │SPD │
|
||||
└────┴────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┴────┘
|
||||
┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐
|
||||
│___│___│___│___│QMK│ │QMK│___│___│___│___│
|
||||
└───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘
|
||||
*/
|
||||
[_RAISE] = LAYOUT_split4x6_r1(
|
||||
RGB_TOG, KC_ACL0, KC_ACL1, KC_ACL2, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_MOD, RGB_RMOD, RGB_HUI, RGB_HUD,
|
||||
HF_TOGG, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_UP, KC_BTN2, RGB_SAI, RGB_SAD,
|
||||
HF_DWLU, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, RGB_VAI, RGB_VAD,
|
||||
HF_DWLD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_SPI, RGB_SPD,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_CSGLA, KC_CSGRA, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
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;
|
||||
case CMD_TAB_CW:
|
||||
if (record->event.pressed) {
|
||||
if (!is_cmd_tab_active) {
|
||||
is_cmd_tab_active = true;
|
||||
register_code(KC_LGUI);
|
||||
}
|
||||
cmd_tab_timer = timer_read();
|
||||
register_code(KC_TAB);
|
||||
} else {
|
||||
unregister_code(KC_TAB);
|
||||
}
|
||||
break;
|
||||
case CMD_TAB_CCW:
|
||||
if (record->event.pressed) {
|
||||
if (!is_cmd_tab_active) {
|
||||
is_cmd_tab_active = true;
|
||||
register_code(KC_LGUI);
|
||||
}
|
||||
cmd_tab_timer = timer_read();
|
||||
tap_code16(S(KC_TAB));
|
||||
} else {
|
||||
unregister_code(KC_TAB);
|
||||
}
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function for rotary encoder.
|
||||
*
|
||||
* If the timer has elapsed, the Command/Gui tab will be released.
|
||||
* You can adjust the milliseconds to speed up the CMD key release.
|
||||
*/
|
||||
void matrix_scan_user(void) {
|
||||
if (is_cmd_tab_active) {
|
||||
if (timer_elapsed(cmd_tab_timer) > 900) {
|
||||
unregister_code(KC_LGUI);
|
||||
is_cmd_tab_active = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Rotary Encoder.
|
||||
*
|
||||
* This can't be programmed through configurator. You must do it here.
|
||||
*
|
||||
* This uses the amazing "Encoder map" feature which replicates the normal keyswitch layer handling functionality, but with encoders.
|
||||
* https://docs.qmk.fm/#/feature_encoders?id=encoder-map
|
||||
*
|
||||
* Uses a variant of the Super-alt-tab macro to switch between open applications on a mac. (Command-tab)
|
||||
* https://docs.qmk.fm/#/feature_macros?id=super-alt%e2%86%aftab
|
||||
*/
|
||||
#ifdef ENCODER_MAP_ENABLE
|
||||
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
|
||||
/* Left Hand */ /* Right Hand */
|
||||
/* Switch between tabs. (Control + Tab). */ /* Switch between open apps on Mac. (Command + Tab + timer logic) */
|
||||
[_QWERTY] = {ENCODER_CCW_CW(S(C(KC_TAB)), C(KC_TAB)), ENCODER_CCW_CW(CMD_TAB_CW, CMD_TAB_CCW)},
|
||||
/* Scrolls left & right. (Shift + Mouse Wheel Up). */ /* Scrolls up and down. (Page Down & Page Up - mouse wheel scroll incraments are too small) */
|
||||
[_LOWER] = {ENCODER_CCW_CW(S(KC_MS_WH_UP), S(KC_MS_WH_DOWN)), ENCODER_CCW_CW(KC_PGDN, KC_PGUP)},
|
||||
/* Selects adjacent words. (Command + Shift + Right Arrow). */ /* Jumps to end/start of line. Hold shift to select. (Gui + arrow). */
|
||||
[_RAISE] = {ENCODER_CCW_CW(C(S(KC_LEFT)), C(S(KC_RGHT))), ENCODER_CCW_CW(G(KC_LEFT), G(KC_RGHT))}
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifdef OLED_ENABLE
|
||||
|
||||
|
||||
oled_rotation_t oled_init_user(oled_rotation_t rotation) {
|
||||
|
||||
if (is_keyboard_master()) {
|
||||
if(is_keyboard_left()){
|
||||
return OLED_ROTATION_90;
|
||||
}
|
||||
else {
|
||||
return OLED_ROTATION_270;
|
||||
}
|
||||
} else {
|
||||
return OLED_ROTATION_90;
|
||||
}
|
||||
}
|
||||
static void render_logo(void) {
|
||||
static const char PROGMEM sofle_pico_logo[] = {
|
||||
// 'sofle-pico-vector-logo-v3bw', 64x128px
|
||||
0x00, 0x00, 0xf8, 0xfc, 0xdc, 0x8e, 0x0e, 0x0e, 0x1c, 0x1c, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xfe, 0xfe, 0x87, 0x03, 0x03,
|
||||
0x9f, 0xfe, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x60, 0xe0, 0xe1, 0x83, 0x03, 0x07, 0x87, 0xce, 0xfe, 0xfc, 0x00, 0x00, 0x38, 0xfe, 0xff,
|
||||
0x87, 0x03, 0x03, 0x03, 0x83, 0xef, 0xfe, 0xfc, 0x00, 0x00, 0xff, 0xff, 0xff, 0x03, 0x03, 0x03,
|
||||
0x07, 0xff, 0xff, 0x00, 0x00, 0x30, 0xfe, 0xff, 0xbf, 0x1b, 0x1b, 0x1b, 0x9f, 0xff, 0x9e, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0xe1, 0xe3, 0x63, 0x63, 0x63, 0xe3, 0xe3, 0xc1, 0x80, 0x00, 0x40, 0xe0, 0xe0, 0x41,
|
||||
0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00,
|
||||
0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0xff, 0xff, 0x70, 0x70, 0x30, 0x38, 0x3f, 0x1f, 0x0f, 0x00, 0x00, 0xf8, 0xf8, 0x00,
|
||||
0x00, 0x00, 0xe0, 0xf0, 0x38, 0x1c, 0x1c, 0x1c, 0x1c, 0x38, 0x00, 0x00, 0xe0, 0xf0, 0x78, 0x18,
|
||||
0x1c, 0x1c, 0x1c, 0x38, 0xf8, 0xf0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x00,
|
||||
0x00, 0x00, 0x07, 0x0f, 0x1e, 0x1c, 0x18, 0x18, 0x1c, 0x1c, 0x00, 0x00, 0x07, 0x0f, 0x1e, 0x1c,
|
||||
0x18, 0x18, 0x18, 0x1c, 0x0f, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0xe0, 0xf0, 0xf0, 0xf0, 0x78, 0x38, 0x38, 0x38, 0x1c, 0x3c, 0x1c, 0x1c, 0x1c, 0x38, 0x38,
|
||||
0x38, 0x38, 0x78, 0x70, 0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xe0, 0xf0, 0x78, 0x38, 0x3c, 0x1c, 0x1c, 0x1c,
|
||||
0x1c, 0x0e, 0x0e, 0x0e, 0x1e, 0x0e, 0x1c, 0x1c, 0x1c, 0x38, 0xb8, 0xf8, 0xf8, 0xf0, 0x00, 0x00,
|
||||
0x00, 0x03, 0x3f, 0x7f, 0xff, 0xf0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x02, 0x04, 0x04, 0x08, 0x18,
|
||||
0x10, 0x30, 0x60, 0xc0, 0xc0, 0xc1, 0xff, 0x7f, 0x3e, 0x80, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
|
||||
0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, 0x9e, 0xbf, 0x7f, 0xf1, 0xe0, 0xe0, 0x30, 0x10, 0x08, 0x0c,
|
||||
0x04, 0x02, 0x02, 0x00, 0x01, 0x00, 0x00, 0x80, 0xe0, 0xf8, 0xfe, 0x7f, 0x1f, 0x03, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x07, 0x0e, 0x1e, 0x1c, 0x3c, 0x38, 0x38, 0x38, 0x38,
|
||||
0x18, 0x9c, 0xce, 0xef, 0xff, 0xfd, 0xfe, 0x1e, 0x0f, 0x07, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01,
|
||||
0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x07, 0x0f, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xce, 0x9c, 0x1c,
|
||||
0x1c, 0x1c, 0x1c, 0x1c, 0x1e, 0x0f, 0x07, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xf8, 0xfc,
|
||||
0x3f, 0x1f, 0x1f, 0x1f, 0x3f, 0x7f, 0xff, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xf0, 0xfe, 0x3f, 0x1f, 0x0f, 0x0f, 0x1f, 0x3f,
|
||||
0xfc, 0xf8, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x3f, 0x7d,
|
||||
0xf0, 0xc0, 0xc0, 0x80, 0x80, 0xc0, 0xfb, 0xff, 0x3f, 0x3f, 0x1f, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
|
||||
0x0e, 0x0e, 0x0e, 0x0e, 0x1f, 0x1f, 0x3f, 0x3f, 0x7f, 0xff, 0xc0, 0xc0, 0xc0, 0xc0, 0xe0, 0xf0,
|
||||
0x7f, 0x3f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x01, 0x03, 0x03, 0x07, 0x0f, 0x1f, 0x3e, 0x38, 0x70, 0x60, 0xe0, 0xe0, 0xc0, 0xc0, 0xc0,
|
||||
0xc0, 0xc0, 0xc0, 0xc0, 0xe0, 0xe0, 0x70, 0x78, 0x3c, 0x3f, 0x1f, 0x0f, 0x07, 0x03, 0x01, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xc0, 0x80, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x1c, 0x38, 0x0e, 0x00, 0x11, 0x30, 0x26, 0x3f, 0x19,
|
||||
0x00, 0x20, 0x20, 0x00, 0x1f, 0x30, 0x20, 0x31, 0x1f, 0x10, 0x18, 0x1e, 0x1b, 0x3f, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0xd8, 0xfc, 0x6c, 0xfc, 0xd8, 0x00, 0x80, 0x80, 0x18, 0x0c, 0xcc, 0x78, 0x10, 0x00,
|
||||
0x80, 0xe0, 0xf0, 0xf8, 0x80, 0x80, 0x80, 0x00, 0x18, 0x8c, 0xcc, 0x78, 0x10, 0x00, 0xf8, 0x0c,
|
||||
0x0c, 0x98, 0xf0, 0x00, 0x18, 0x8c, 0xcc, 0x78, 0x00, 0x00, 0x18, 0x0c, 0x6c, 0xf8, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00,
|
||||
0x00, 0x00, 0x01, 0x03, 0x02, 0xc3, 0xc1, 0x00, 0x00, 0xc0, 0x02, 0x03, 0x03, 0x02, 0x02, 0x00,
|
||||
0x01, 0xc1, 0x01, 0xc3, 0x01, 0x00, 0x00, 0x00, 0x03, 0x03, 0xc3, 0xc2, 0xc0, 0xc0, 0xc1, 0x83,
|
||||
0x83, 0x03, 0x80, 0x00, 0x03, 0x03, 0x03, 0x02, 0x00, 0x00, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xfe, 0xa2, 0xb2, 0xfe, 0x00, 0x3f, 0x07, 0x02,
|
||||
0x3e, 0x00, 0xe0, 0x38, 0x0e, 0x01, 0x00, 0x20, 0x30, 0x1f, 0x00, 0x1c, 0x3e, 0x3a, 0x3e, 0x1c,
|
||||
0x1f, 0x3f, 0x00, 0x3f, 0x00, 0x82, 0xce, 0x38, 0x0c, 0x06, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00,
|
||||
0x3e, 0x00, 0x3f, 0x02, 0x08, 0x3e, 0x22, 0x32, 0x3e, 0x00, 0x3e, 0x1e, 0x02, 0x3e, 0x00, 0x00
|
||||
};
|
||||
oled_write_raw_P(sofle_pico_logo, sizeof(sofle_pico_logo));
|
||||
}
|
||||
|
||||
static void render_status(void) {
|
||||
oled_write_P(PSTR("Sofle Pico\nv3.04\n~~~~~~~~~\n"), false);
|
||||
uint8_t n = get_current_wpm();
|
||||
char wpm_counter[4];
|
||||
wpm_counter[3] = '\0';
|
||||
wpm_counter[2] = '0' + n % 10;
|
||||
wpm_counter[1] = (n /= 10) % 10 ? '0' + (n) % 10 : (n / 10) % 10 ? '0' : ' ';
|
||||
wpm_counter[0] = n / 10 ? '0' + n / 10 : ' ';
|
||||
oled_write_P(PSTR("WPM:"), false);
|
||||
oled_write(wpm_counter, false);
|
||||
led_t led_state = host_keyboard_led_state();
|
||||
oled_write_P(PSTR("\nCaps: "), false);
|
||||
oled_write_P(led_state.caps_lock ? PSTR("on ") : PSTR("off"), false);
|
||||
oled_write_P(PSTR("\n"), false);
|
||||
switch (get_highest_layer(layer_state)) {
|
||||
case _QWERTY:
|
||||
oled_write_P(PSTR("Qwerty Base"), false);
|
||||
break;
|
||||
case _LOWER:
|
||||
oled_write_P(PSTR("Numbers &\nSymbols"), false);
|
||||
break;
|
||||
case _RAISE:
|
||||
oled_write_P(PSTR("Navigation"), false);
|
||||
break;
|
||||
default:
|
||||
oled_write_P(PSTR("Unknown"), false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
bool oled_task_user(void) {
|
||||
if (is_keyboard_master()) {
|
||||
render_status(); // Renders the current keyboard state (layer, lock, caps, scroll, etc)
|
||||
} else {
|
||||
render_logo();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
#endif
|
28
keyboards/sofle_v303/keymaps/jellytitan/readme.md
Normal file
28
keyboards/sofle_v303/keymaps/jellytitan/readme.md
Normal file
@ -0,0 +1,28 @@
|
||||
# JellyTitan sofle_v303 Keymap
|
||||
![jellytitan](https://i.imgur.com/JqGPWCn.png)
|
||||
|
||||
This keymap is derived from Ergodox layouts and is adapted for the [sofle_v303](https://github.com/daneski13/sofle_v303).
|
||||
It is notable for it's semi-complex programming examples that include the use of rotary encoders.
|
||||
|
||||
Plenty of useful examples:
|
||||
* Advanced knob programming! (Three-layer usage + clicks)
|
||||
* Macros! (Fancy key combos tied to the rotary encoders)
|
||||
* Tap Dance! (Double tap your '5' key for 'Enter')
|
||||
* Dynamic Tapping term! (Dial in the double tap speed)
|
||||
|
||||
The qwerty key layout is my adaptation of the Ergodox defaults.
|
||||
If this is your first split keyboard, you probably want a different key layout.
|
||||
|
||||
Flashing example for this keyboard:
|
||||
|
||||
```bash
|
||||
# For flashing the left half...
|
||||
make sofle_v303:jellytitan:uf2-split-left
|
||||
# or the qmk cli equivalent:
|
||||
qmk flash -kb sofle_v303 --keymap jellytitan -bl uf2-split-left
|
||||
|
||||
# For flashing the right half...
|
||||
make sofle_v303:jellytitan:uf2-split-right
|
||||
# or the qmk cli equivalent:
|
||||
qmk flash -kb sofle_v303 --keymap jellytitan -bl uf2-split-right
|
||||
```
|
26
keyboards/sofle_v303/keymaps/jellytitan/rules.mk
Normal file
26
keyboards/sofle_v303/keymaps/jellytitan/rules.mk
Normal file
@ -0,0 +1,26 @@
|
||||
# Enables Audio control and System control Keycodes
|
||||
EXTRAKEY_ENABLE = yes
|
||||
# Enables Mousekeys
|
||||
MOUSEKEY_ENABLE = yes
|
||||
# Encoder Support
|
||||
ENCODER_ENABLE = yes
|
||||
# Use Enocoder Mapping
|
||||
ENCODER_MAP_ENABLE = yes
|
||||
# Turn on tap dance:
|
||||
TAP_DANCE_ENABLE = yes
|
||||
# Enables RGB Lighting Effects
|
||||
RGB_MATRIX_ENABLE = yes
|
||||
# Dynamic Tapping Term:
|
||||
DYNAMIC_TAPPING_TERM_ENABLE = yes
|
||||
|
||||
|
||||
BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
|
||||
CONSOLE_ENABLE = no # Console for debug
|
||||
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||
AUDIO_ENABLE = no # Audio output
|
||||
|
||||
OLED_ENABLE = yes
|
||||
# OLED_DRIVER = SSD1306
|
||||
WPM_ENABLE = yes
|
||||
|
||||
LTO_ENABLE = yes
|
87
keyboards/sofle_v303/keymaps/via/config.h
Normal file
87
keyboards/sofle_v303/keymaps/via/config.h
Normal file
@ -0,0 +1,87 @@
|
||||
// Copyright 2022 Dane Skalski (@Daneski13)
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
// Number of Layers that can be used by VIA.
|
||||
// Change this if you want more layers
|
||||
#define DYNAMIC_KEYMAP_LAYER_COUNT 6
|
||||
|
||||
/* - Encoder settings - */
|
||||
#ifdef ENCODER_ENABLE
|
||||
# define ENCODER_RESOLUTION 4
|
||||
#endif
|
||||
#ifdef ENCODER_MAP_ENABLE
|
||||
// Key delay for encoders (necessary for some keycodes)
|
||||
# define ENCODER_MAP_KEY_DELAY 10
|
||||
#endif
|
||||
|
||||
/*
|
||||
- RGB -
|
||||
Defines all effects so VIA can properly select them via index
|
||||
*/
|
||||
#ifdef RGB_MATRIX_ENABLE
|
||||
|
||||
// Default effect when EEPROM cleared
|
||||
# define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_RAINBOW_MOVING_CHEVRON
|
||||
|
||||
// Turns off RGB effects when there is no longer a USB connection
|
||||
# define RGB_DISABLE_WHEN_USB_SUSPENDED
|
||||
|
||||
// Allow keypress reactive animations
|
||||
# define SPLIT_TRANSPORT_MIRROR // Necessary setting for key press animations on a split
|
||||
# define RGB_MATRIX_KEYPRESSES // Enables key press effects
|
||||
|
||||
// Allow frame buffer effects
|
||||
# define RGB_MATRIX_FRAMEBUFFER_EFFECTS // Enables frame buffer effects
|
||||
|
||||
// All effect definitions
|
||||
# define ENABLE_RGB_MATRIX_ALPHAS_MODS // Enables RGB_MATRIX_ALPHAS_MODS
|
||||
# define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN // Enables RGB_MATRIX_GRADIENT_UP_DOWN
|
||||
# define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT // Enables RGB_MATRIX_GRADIENT_LEFT_RIGHT
|
||||
# define ENABLE_RGB_MATRIX_BREATHING // Enables RGB_MATRIX_BREATHING
|
||||
# define ENABLE_RGB_MATRIX_BAND_SAT // Enables RGB_MATRIX_BAND_SAT
|
||||
# define ENABLE_RGB_MATRIX_BAND_VAL // Enables RGB_MATRIX_BAND_VAL
|
||||
# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT // Enables RGB_MATRIX_BAND_PINWHEEL_SAT
|
||||
# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL // Enables RGB_MATRIX_BAND_PINWHEEL_VAL
|
||||
# define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT // Enables RGB_MATRIX_BAND_SPIRAL_SAT
|
||||
# define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL // Enables RGB_MATRIX_BAND_SPIRAL_VAL
|
||||
# define ENABLE_RGB_MATRIX_CYCLE_ALL // Enables RGB_MATRIX_CYCLE_ALL
|
||||
# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT // Enables RGB_MATRIX_CYCLE_LEFT_RIGHT
|
||||
# define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN // Enables RGB_MATRIX_CYCLE_UP_DOWN
|
||||
# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON // Enables RGB_MATRIX_RAINBOW_MOVING_CHEVRON
|
||||
# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN // Enables RGB_MATRIX_CYCLE_OUT_IN
|
||||
# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL // Enables RGB_MATRIX_CYCLE_OUT_IN_DUAL
|
||||
# define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL // Enables RGB_MATRIX_CYCLE_PINWHEEL
|
||||
# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL // Enables RGB_MATRIX_CYCLE_SPIRAL
|
||||
# define ENABLE_RGB_MATRIX_DUAL_BEACON // Enables RGB_MATRIX_DUAL_BEACON
|
||||
# define ENABLE_RGB_MATRIX_RAINBOW_BEACON // Enables RGB_MATRIX_RAINBOW_BEACON
|
||||
# define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS // Enables RGB_MATRIX_RAINBOW_PINWHEELS
|
||||
# define ENABLE_RGB_MATRIX_RAINDROPS // Enables RGB_MATRIX_RAINDROPS
|
||||
# define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS // Enables RGB_MATRIX_JELLYBEAN_RAINDROPS
|
||||
# define ENABLE_RGB_MATRIX_HUE_BREATHING // Enables RGB_MATRIX_HUE_BREATHING
|
||||
# define ENABLE_RGB_MATRIX_HUE_PENDULUM // Enables RGB_MATRIX_HUE_PENDULUM
|
||||
# define ENABLE_RGB_MATRIX_HUE_WAVE // Enables RGB_MATRIX_HUE_WAVE
|
||||
# define ENABLE_RGB_MATRIX_PIXEL_FRACTAL // Enables RGB_MATRIX_PIXEL_FRACTAL
|
||||
# define ENABLE_RGB_MATRIX_PIXEL_FLOW // Enables RGB_MATRIX_PIXEL_FLOW
|
||||
# define ENABLE_RGB_MATRIX_PIXEL_RAIN // Enables RGB_MATRIX_PIXEL_RAIN
|
||||
|
||||
// Following need RGB_MATRIX_FRAMEBUFFER_EFFECTS
|
||||
# define ENABLE_RGB_MATRIX_TYPING_HEATMAP // Enables RGB_MATRIX_TYPING_HEATMAP
|
||||
# define ENABLE_RGB_MATRIX_DIGITAL_RAIN // Enables RGB_MATRIX_DIGITAL_RAIN
|
||||
|
||||
// Following need RGB_MATRIX_KEYPRESSES
|
||||
# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE // Enables RGB_MATRIX_SOLID_REACTIVE_SIMPLE
|
||||
# define ENABLE_RGB_MATRIX_SOLID_REACTIVE // Enables RGB_MATRIX_SOLID_REACTIVE
|
||||
# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE // Enables RGB_MATRIX_SOLID_REACTIVE_WIDE
|
||||
# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE // Enables RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
|
||||
# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS // Enables RGB_MATRIX_SOLID_REACTIVE_CROSS
|
||||
# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS // Enables RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
|
||||
# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS // Enables RGB_MATRIX_SOLID_REACTIVE_NEXUS
|
||||
# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS // Enables RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
|
||||
# define ENABLE_RGB_MATRIX_SPLASH // Enables RGB_MATRIX_SPLASH
|
||||
# define ENABLE_RGB_MATRIX_MULTISPLASH // Enables RGB_MATRIX_MULTISPLASH
|
||||
# define ENABLE_RGB_MATRIX_SOLID_SPLASH // Enables RGB_MATRIX_SOLID_SPLASH
|
||||
# define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH // Enables RGB_MATRIX_SOLID_MULTISPLASH
|
||||
|
||||
#endif
|
161
keyboards/sofle_v303/keymaps/via/keymap.c
Normal file
161
keyboards/sofle_v303/keymaps/via/keymap.c
Normal file
@ -0,0 +1,161 @@
|
||||
// Copyright 2022 Dane Skalski (@Daneski13)
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
// Layers enum
|
||||
enum sofle_pico_layers { _QWERTY, _COLEMAK_DH, _SYMB, _EXT, _ADJUST };
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
// clang-format off
|
||||
/*
|
||||
Traditional QWERTY
|
||||
┌───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┬───┐
|
||||
│ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ │ 6 │ 7 │ 8 │ 9 │ 0 │ - │
|
||||
├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤
|
||||
│Tab│ Q │ W │ E │ R │ T │ │ Y │ U │ I │ O │ P │Ent│
|
||||
├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤
|
||||
│Esc│ A │ S │ D │ F │ G │ │ H │ J │ K │ L │ ; │ ' │
|
||||
├───┼───┼───┼───┼───┼───┼───┐ ┌───┼───┼───┼───┼───┼───┼───┤
|
||||
│Sft│ Z │ X │ C │ V │ B │Mut│ │XXX│ N │ M │ , │ . │ / │Sft│
|
||||
└───┴───┴───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┴───┴───┘
|
||||
┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐
|
||||
│Ctr│Win│Alt│Del│Spc│ │Sft│Bsp│Alt│Win│Ctr│
|
||||
└───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘
|
||||
For macOS - GUI (cmd) and Alt (opt) swapped
|
||||
*/
|
||||
[_QWERTY] = LAYOUT_split4x6_r1(
|
||||
KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_ENTER,
|
||||
KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SEMICOLON, KC_QUOTE,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MUTE, KC_NO, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, LT(_EXT, KC_DEL), KC_SPC, KC_RSFT, LT(_SYMB, KC_BSPC), KC_RALT, KC_RGUI, KC_RCTL
|
||||
),
|
||||
|
||||
/*
|
||||
Colemak-DH
|
||||
┌───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┬───┐
|
||||
│ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ │ 6 │ 7 │ 8 │ 9 │ 0 │ - │
|
||||
├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤
|
||||
│Tab│ Q │ W │ F │ P │ B │ │ J │ L │ U │ Y │ ; │Ent│
|
||||
├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤
|
||||
│Esc│ A │ R │ S │ T │ G │ │ M │ N │ E │ I │ O │ ' │
|
||||
├───┼───┼───┼───┼───┼───┼───┐ ┌───┼───┼───┼───┼───┼───┼───┤
|
||||
│Sft│ Z │ X │ C │ D │ V │Mut│ │XXX│ K │ H │ , │ . │ / │Sft│
|
||||
└───┴───┴───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┴───┴───┘
|
||||
┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐
|
||||
│Ctr│Win│Alt│Del│Spc│ │Sft│Bsp│Alt│Win│Ctr│
|
||||
└───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘
|
||||
For macOS - GUI (cmd) and Alt (opt) swapped
|
||||
*/
|
||||
[_COLEMAK_DH] = LAYOUT_split4x6_r1(
|
||||
KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS,
|
||||
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_SEMICOLON, KC_ENTER,
|
||||
KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O, KC_QUOTE,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_D, KC_V, KC_MUTE, KC_NO, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, LT(_EXT, KC_DEL), KC_SPC, KC_RSFT, LT(_SYMB, KC_BSPC), KC_RALT, KC_RGUI, KC_RCTL
|
||||
),
|
||||
|
||||
/*
|
||||
Symbols/Numpad Layer
|
||||
┌───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┬───┐
|
||||
│F1 │F2 │F3 │F4 │F5 │F6 │ │F7 │F8 │F9 │F10│F11│F12│
|
||||
├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤
|
||||
│Tab│ ! │ @ │ # │ $ │ % │ │ * │ 7 │ 8 │ 9 │ + │Ent│
|
||||
├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤
|
||||
│ \ │ _ │ [ │ { │ ( │ ^ │ │ = │ 4 │ 5 │ 6 │ 0 │NUM│
|
||||
├───┼───┼───┼───┼───┼───┼───┐ ┌───┼───┼───┼───┼───┼───┼───┤
|
||||
│___│ | │ ] │ } │ ) │ & │___│ │___│ / │ 1 │ 2 │ 3 │ - │___│
|
||||
└───┴───┴───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┴───┴───┘
|
||||
┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐
|
||||
│___│___│___│___│___│ │___│___│___│___│___│
|
||||
└───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘
|
||||
*/
|
||||
[_SYMB] = LAYOUT_split4x6_r1(
|
||||
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_TAB, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_PAST, KC_P7, KC_P8, KC_P9, KC_PPLS, KC_ENTER,
|
||||
KC_BSLS, KC_UNDS, KC_LBRC, KC_LCBR, KC_LPRN, KC_CIRC, KC_PEQL, KC_P4, KC_P5, KC_P6, KC_P0, KC_NUM,
|
||||
_______, KC_PIPE, KC_RBRC, KC_RCBR, KC_RPRN, KC_AMPR, _______, _______, KC_PSLS, KC_P1, KC_P2, KC_P3, KC_PMNS, _______,
|
||||
_______, _______, _______, MO(_ADJUST), _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
/*
|
||||
Extension/Function Layer
|
||||
┌────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────┐
|
||||
│ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ │ F7 │ F8 │ F9 │ F10│ F11│ F12│
|
||||
├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
|
||||
│ ⇤ │PGUP│End │ ↑ │Home│ │ │BRIU│ F7 │ F8 │ F9 │ F10│____│
|
||||
├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
|
||||
│Cps │PGDN│ ← │ ↓ │ → │ │ │BRID│ F4 │ F5 │ F6 │ F11│____│
|
||||
├────┼────┼────┼────┼────┼────┼────┐ ┌────┼────┼────┼────┼────┼────┼────┤
|
||||
│____│ │ │ │ │ │____│ │ ▶⏸ │ │ F1 │ F2 │ F3 │ F12│____│
|
||||
└────┴────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┴────┘
|
||||
┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐
|
||||
│___│___│___│___│___│ │___│___│___│___│___│
|
||||
└───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘
|
||||
*/
|
||||
[_EXT] = LAYOUT_split4x6_r1(
|
||||
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
|
||||
S(KC_TAB), KC_PGUP, KC_END, KC_UP, KC_HOME, _______, KC_BRIU, KC_F7, KC_F8, KC_F9, KC_F10, _______,
|
||||
KC_CAPS, KC_PGDN, KC_LEFT, KC_DOWN, KC_RIGHT, _______, KC_BRID, KC_F4, KC_F5, KC_F6, KC_F11, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, KC_MPLY, _______, KC_F1, KC_F2, KC_F3, KC_F12, _______,
|
||||
_______, _______, _______, _______, _______, _______, MO(_ADJUST), _______, _______, _______
|
||||
),
|
||||
|
||||
/*
|
||||
Adjust Layer, Keyboard Settings
|
||||
┌────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────┐
|
||||
│ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||
├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
|
||||
│SpdU│HueU│SatU│ValU│Rnxt│ │ │ │EClr│Rbt │DBUG│BOOT│ │
|
||||
├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
|
||||
│SpdD│HueD│SatD│ValD│Rprv│RTgl│ │ │QWRT│COLE│ │ │ │
|
||||
├────┼────┼────┼────┼────┼────┼────┐ ┌────┼────┼────┼────┼────┼────┼────┤
|
||||
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||
└────┴────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┴────┘
|
||||
┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐
|
||||
│___│___│___│___│___│ │___│___│___│___│___│
|
||||
└───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘
|
||||
*/
|
||||
[_ADJUST] = LAYOUT_split4x6_r1(
|
||||
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
RGB_SPI, RGB_HUI, RGB_SAI, RGB_VAI, RGB_MOD, KC_NO, KC_NO, EE_CLR, QK_RBT, DB_TOGG, QK_BOOT, KC_NO,
|
||||
RGB_SPD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_RMOD, RGB_TOG, KC_NO, DF(_QWERTY), DF(_COLEMAK_DH), KC_NO, KC_NO, KC_NO,
|
||||
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
)
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
/*
|
||||
--- Rotary Encoder Mappings ---
|
||||
|
||||
Encoder mappings go from leftmost encoder to rightmost encoder on the physical board.
|
||||
index 0 is the the optional leftmost encoder on the left half, index 1 is the right encoder
|
||||
on the left half (by the thumb keys), index 2 is the left encoder on the right half (by the
|
||||
thumb keys), and index 3 is the optional rightmost encoder on the right half.
|
||||
|
||||
If you are only using the 2 required encoders by the thumb keys, you only need to worry about
|
||||
index 1 and index 2.
|
||||
|
||||
Note that the key to be sent for counter-clockwise rotation (CCW) goes first and then the key for
|
||||
clockwise (CW) within ENCODER_CCW_CW.
|
||||
*/
|
||||
#ifdef ENCODER_MAP_ENABLE
|
||||
// clang-format off
|
||||
|
||||
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
|
||||
// Base layer encoder mappings:
|
||||
// index 0: mouse wheel up (CCW)/down (CW) index 1: volume down/up index 2: mouse wheel up/down index 3: mouse wheel left/right
|
||||
[_QWERTY] = { ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(KC_WH_L, KC_WH_R) },
|
||||
[_COLEMAK_DH] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
|
||||
|
||||
// Passes through to base layers
|
||||
[_SYMB] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
|
||||
// On the extension layer, the right side's left encoder by the thumb keys (mouse wheel up/down) is traded for media previous/next
|
||||
[_EXT] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_MPRV, KC_MNXT), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
|
||||
// Passes through
|
||||
[_ADJUST] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
#endif
|
19
keyboards/sofle_v303/keymaps/via/rules.mk
Normal file
19
keyboards/sofle_v303/keymaps/via/rules.mk
Normal file
@ -0,0 +1,19 @@
|
||||
# Change from yes to no to disable features
|
||||
|
||||
# Enables Audio control and System control Keycodes
|
||||
EXTRAKEY_ENABLE = yes
|
||||
# Enables Mousekeys
|
||||
MOUSEKEY_ENABLE = yes
|
||||
# Encoder Support
|
||||
ENCODER_ENABLE = yes
|
||||
# Use Enocoder Mapping
|
||||
ENCODER_MAP_ENABLE = yes
|
||||
|
||||
# Enables RGB Matrix
|
||||
RGB_MATRIX_ENABLE = yes
|
||||
|
||||
# Allows use of `qmk console` for debugging
|
||||
# CONSOLE_ENABLE = yes
|
||||
|
||||
# Enables VIA
|
||||
VIA_ENABLE = yes
|
41
keyboards/sofle_v303/readme.md
Normal file
41
keyboards/sofle_v303/readme.md
Normal file
@ -0,0 +1,41 @@
|
||||
# sofle_v303 <!-- omit from toc -->
|
||||
|
||||
![sofle_v303](https://i.imgur.com/WzZaIgQh.jpg)
|
||||
|
||||
sofle_v303 is a 60% Raspberry Pi Pico powered split keyboard boasting a 4x6 layout with an aggressive columnar stagger. It has 5 "thumb" keys on either side, support for 2-4 rotary encoders, and per-key RGB lighting.
|
||||
|
||||
- Keyboard Maintainer: [Dane Skalski](https://github.com/Daneski13)
|
||||
- Hardware Supported: sofle_v303 PCB, Raspberry Pi Pico
|
||||
- Hardware Availability: [PCB, Case, Parts List](https://github.com/Daneski13/sofle_v303)
|
||||
|
||||
Remember you have to flash both halves of the keyboard for it to work!
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make sofle_v303:default
|
||||
|
||||
Flashing example for this keyboard:
|
||||
|
||||
```bash
|
||||
# For flashing the left half...
|
||||
make sofle_pico:default:uf2-split-left
|
||||
# or the qmk cli equivalent:
|
||||
qmk flash -kb sofle_pico --keymap default -bl uf2-split-left
|
||||
|
||||
# For flashing the right half...
|
||||
make sofle_pico:default:uf2-split-right
|
||||
# or the qmk cli equivalent:
|
||||
qmk flash -kb sofle_pico --keymap default -bl uf2-split-right
|
||||
```
|
||||
|
||||
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
|
||||
|
||||
## Bootloader <!-- omit from toc -->
|
||||
|
||||
Enter the bootloader in 3 ways:
|
||||
|
||||
- **Bootmagic reset** (works after you have flashed once): Hold down the top far corner key while plugging in the keyboard (`~` left half, `-` right half). This will also clear the EEPROM.
|
||||
- **Physical reset button**: Hold the `BOOT` button on the Pico and press the `RST` button on the Pico, release the the `RST` button before the `BOOT` button.
|
||||
- **Keycode in layout**: In the default layout, the `Bootloader` keycode is above home row pinky on the right side's adjust layer.
|
||||
|
||||
Once you enter the bootloader, the keyboard will show up as a USB device on your computer, you could drag and drop a firmware file to flash it, but I recommend using the flash commands for the respective side.
|
37
keyboards/sofle_v303/rev1/config.h
Normal file
37
keyboards/sofle_v303/rev1/config.h
Normal file
@ -0,0 +1,37 @@
|
||||
// Copyright 2022 Dane Skalski (@Daneski13)
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
// Electrical Wiring Stuff
|
||||
#define MATRIX_ROW_PINS \
|
||||
{ GP9, GP10, GP11, GP12, GP13 }
|
||||
#define MATRIX_COL_PINS \
|
||||
{ GP1, GP2, GP3, GP4, GP5, GP8 }
|
||||
// #define DIODE_DIRECTION COL2ROW
|
||||
|
||||
// Split Keyboard Stuff
|
||||
#define EE_HANDS // Sets the keyboard’s handedness using EEPROM
|
||||
#define SERIAL_USART_FULL_DUPLEX // Use full duplex communication (TRRS)
|
||||
#define SERIAL_USART_TX_PIN GP16 // USART TX pin
|
||||
#define SERIAL_USART_RX_PIN GP17 // USART RX pin
|
||||
#define SERIAL_USART_PIN_SWAP // Swap TX and RX pins if keyboard is master halve. (Only available on some MCUs)
|
||||
|
||||
/* RGB Stuff */
|
||||
#ifdef RGB_MATRIX_ENABLE
|
||||
|
||||
# define RGB_MATRIX_LED_COUNT 58
|
||||
# define RGB_MATRIX_SPLIT \
|
||||
{ 29, 29 } // 29 LEDs on each side
|
||||
|
||||
#endif
|
||||
|
||||
// I2C for OLEDs
|
||||
#define I2C_DRIVER I2CD1
|
||||
#define I2C1_SDA_PIN GP6
|
||||
#define I2C1_SCL_PIN GP7
|
||||
|
||||
#ifdef OLED_ENABLE
|
||||
#define OLED_DISPLAY_128X64
|
||||
#define OLED_TIMEOUT 30000
|
||||
#endif
|
5
keyboards/sofle_v303/rev1/halconf.h
Normal file
5
keyboards/sofle_v303/rev1/halconf.h
Normal file
@ -0,0 +1,5 @@
|
||||
// Copyright 2022 jack (@waffle87)
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
#pragma once
|
||||
#define HAL_USE_I2C TRUE
|
||||
#include_next <halconf.h>
|
15
keyboards/sofle_v303/rev1/post_config.h
Normal file
15
keyboards/sofle_v303/rev1/post_config.h
Normal file
@ -0,0 +1,15 @@
|
||||
// Copyright 2022 Dane Skalski (@Daneski13)
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
/* Default Bootmagic lite */
|
||||
// Top left for left side is default in core
|
||||
|
||||
// Top right for right side
|
||||
#ifndef BOOTMAGIC_LITE_ROW_RIGHT
|
||||
# define BOOTMAGIC_LITE_ROW_RIGHT 5
|
||||
#endif
|
||||
#ifndef BOOTMAGIC_LITE_COLUMN_RIGHT
|
||||
# define BOOTMAGIC_LITE_COLUMN_RIGHT 0
|
||||
#endif
|
82
keyboards/sofle_v303/rev1/rev1.c
Normal file
82
keyboards/sofle_v303/rev1/rev1.c
Normal file
@ -0,0 +1,82 @@
|
||||
// Copyright 2022 Dane Skalski (@Daneski13)
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include "quantum.h"
|
||||
|
||||
// Hand swap
|
||||
#ifdef SWAP_HANDS_ENABLE
|
||||
__attribute__ ((weak))
|
||||
const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
|
||||
// Left
|
||||
{{0, 5}, {1, 5}, {2, 5}, {3, 5}, {4, 5}, {5, 5}, {6, 5}},
|
||||
{{0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6}, {5, 6}, {6, 6}},
|
||||
{{0, 7}, {1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7}, {6, 7}},
|
||||
{{0, 8}, {1, 8}, {2, 8}, {3, 8}, {4, 8}, {5, 8}, {6, 8}},
|
||||
{{0, 9}, {1, 9}, {2, 9}, {3, 9}, {4, 9}, {5, 9}, {6, 9}},
|
||||
// Right
|
||||
{{0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}, {5, 0}, {6, 0}},
|
||||
{{0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1}, {5, 1}, {6, 1}},
|
||||
{{0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}, {5, 2}, {6, 2}},
|
||||
{{0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}, {5, 3}, {6, 3}},
|
||||
{{0, 4}, {1, 4}, {2, 4}, {3, 4}, {4, 4}, {5, 4}, {6, 4}}
|
||||
};
|
||||
#endif
|
||||
|
||||
/* RGB LED matrix */
|
||||
#ifdef RGB_MATRIX_ENABLE
|
||||
|
||||
// clang-format off
|
||||
led_config_t g_led_config = {
|
||||
{
|
||||
// Key Matrix to LED Index
|
||||
// Left
|
||||
{ 28, 21, 20, 11, 10, 0 },
|
||||
{ 27, 22, 19, 12, 9, 1 },
|
||||
{ 26, 23, 18, 13, 8, 2 },
|
||||
{ 25, 24, 17, 14, 7, 3 },
|
||||
{ 16, 15, 6, 5, 4, NO_LED },
|
||||
|
||||
// Right
|
||||
{ 57, 50, 49, 40, 39, 29 },
|
||||
{ 56, 51, 48, 41, 38, 30 },
|
||||
{ 55, 52, 47, 42, 37, 31 },
|
||||
{ 54, 53, 46, 43, 36, 32 },
|
||||
{ 45, 44, 35, 34, 33, NO_LED }
|
||||
}, {
|
||||
// LED Index to Physical Position
|
||||
// Left
|
||||
{ 95, 7 }, { 95, 21 }, { 95, 36 }, { 95, 50 }, { 115, 64 },
|
||||
{ 95, 64 }, { 76, 62 }, { 76, 48 }, { 76, 33 }, { 76, 19 },
|
||||
{ 76, 5 }, { 57, 3 }, { 57, 17 }, { 57, 31 }, { 57, 46 },
|
||||
{ 57, 62 }, { 38, 64 }, { 38, 48 }, { 38, 33 }, { 38, 19 },
|
||||
{ 38, 5 }, { 19, 7 }, { 19, 21 }, { 19, 36 }, { 19, 50 },
|
||||
{ 0, 50 }, { 0, 36 }, { 0, 21 }, { 0, 7 },
|
||||
|
||||
// Right
|
||||
{ 129, 7 }, { 129, 21 }, { 129, 36 }, { 129, 50 }, { 119, 64 },
|
||||
{ 129, 64 }, { 148, 62 }, { 148, 48 }, { 148, 33 }, { 148, 19 },
|
||||
{ 148, 5 }, { 167, 3 }, { 167, 17 }, { 167, 31 }, { 167, 46 },
|
||||
{ 167, 62 }, { 186, 64 }, { 186, 48 }, { 186, 33 }, { 186, 19 },
|
||||
{ 186, 5 }, { 209, 7 }, { 209, 21 }, { 209, 36 }, { 209, 50 },
|
||||
{ 224, 50 }, { 224, 36 }, { 224, 21 }, { 224, 7 }
|
||||
}, {
|
||||
// LED Index to Flag
|
||||
// Left
|
||||
1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1,
|
||||
|
||||
// Right
|
||||
1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
0
keyboards/sofle_v303/rev1/rules.mk
Normal file
0
keyboards/sofle_v303/rev1/rules.mk
Normal file
17
keyboards/sofle_v303/rules.mk
Normal file
17
keyboards/sofle_v303/rules.mk
Normal file
@ -0,0 +1,17 @@
|
||||
# Split Keyboard Stuff
|
||||
SPLIT_KEYBOARD = yes
|
||||
SERIAL_DRIVER = vendor
|
||||
|
||||
# Enable Bootmagic Lite
|
||||
BOOTMAGIC_ENABLE = yes
|
||||
|
||||
# Default Folder
|
||||
DEFAULT_FOLDER = sofle_v303/rev1
|
||||
|
||||
# @todo: Move to json
|
||||
# OLED_DRIVER = SSD1306
|
||||
OLED_TRANSPORT = i2c
|
||||
|
||||
# Solenoid
|
||||
# HAPTIC_ENABLE = yes
|
||||
# HAPTIC_DRIVER += SOLENOID
|
Loading…
Reference in New Issue
Block a user