153 lines
		
	
	
	
		
			7.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			153 lines
		
	
	
	
		
			7.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
// Copyright 2023 QMK
 | 
						|
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
						|
#include QMK_KEYBOARD_H
 | 
						|
 | 
						|
#include "rpw.c"
 | 
						|
 | 
						|
enum sofle_layers {
 | 
						|
    /* _M_XYZ = Mac Os, _W_XYZ = Win/Linux */
 | 
						|
    _QWR,
 | 
						|
    _SYM,
 | 
						|
    _NUM,
 | 
						|
    _NAV,
 | 
						|
    _BORK,
 | 
						|
};
 | 
						|
 | 
						|
enum custom_keycodes {
 | 
						|
    KC_PRVWD = QK_USER,
 | 
						|
    KC_NXTWD,
 | 
						|
    KC_LSTRT,
 | 
						|
    KC_LEND,
 | 
						|
    KC_RHLSC0  // right-hand layer shift/cycle
 | 
						|
};
 | 
						|
 | 
						|
#define KC_RHLSC0 LT(_NAV, 1)
 | 
						|
 | 
						|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
						|
 | 
						|
    [_QWR] = LAYOUT(
 | 
						|
        _______,  KC_1,   KC_2,    KC_3,    KC_4,    KC_5,                      KC_6,    KC_7,    KC_8,    KC_9,    KC_0,  KC_GRV,
 | 
						|
        _______,  KC_Q,   KC_W,    KC_E,    KC_R,    KC_T,                      KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,  KC_BSPC,
 | 
						|
        _______,  CTL_A,  ALT_S,   SFT_D,   GUI_F,   KC_G,                      KC_H,    GUI_J,   SFT_K,   ALT_L,  CTL_QUOT,  KC_QUOT,
 | 
						|
        _______,  KC_Z,   KC_X,    KC_C,    KC_V,    KC_B, _______,    _______, KC_N,    KC_M,    KC_COMM,  KC_DOT, KC_SLSH,  KC_RSFT,
 | 
						|
                        KC_LGUI,KC_LALT,KC_LCTL, LT(_NAV, 1), MO(_SYM),        NUM_SPC,  KC_RHLSC0, KC_RCTL, KC_RALT, KC_RGUI
 | 
						|
    ),
 | 
						|
 | 
						|
    [_SYM] = LAYOUT(
 | 
						|
        _______,  _______ , _______ , _______ , _______ , _______,                     _______ , _______ , _______ , _______ , _______,  _______,
 | 
						|
        _______,    KC_1,    KC_2,    KC_3,    KC_4,    KC_5,                          KC_6,    KC_7,    KC_8,     KC_9,     KC_0,     _______,
 | 
						|
        _______, _______ , _______ , _______ , _______ , _______,                      KC_MINS, GUI_EQL, SFT_LBRC, ALT_RBRC, CTL_BSLS, _______,
 | 
						|
        _______,  KC_EQL, KC_MINS, KC_PLUS, KC_TILD, KC_RCBR, _______,       _______,  KC_UNDS, KC_PLUS, KC_LCBR,  KC_RCBR,  KC_PIPE,  _______,
 | 
						|
                            _______, _______, _______, _______, _______,    TO(_QWR), _______, _______, _______, _______
 | 
						|
    ),
 | 
						|
 | 
						|
    [_NUM] = LAYOUT(
 | 
						|
        _______, _______ , _______ , _______ , _______ , _______,                      _______,  _______  , _______,  _______ ,  _______ ,_______,
 | 
						|
        _______, KC_1,    KC_2,    KC_3,    KC_4,    KC_5,                             KC_6,    KC_7,    KC_8,    KC_9,    KC_0,  _______,
 | 
						|
        _______, _______,  _______,  _______,  _______, _______,                       KC_TRNS, KC_RGUI, KC_RSFT, KC_RALT, CTL_SCLN, _______,
 | 
						|
        _______, C(KC_Z), C(KC_X), C(KC_C), KC_TILD, XXXXXXX,  _______,       _______,  XXXXXXX, KC_LSTRT, XXXXXXX, KC_LEND,   XXXXXXX, _______,
 | 
						|
                                _______, _______, _______, KC_TILD, KC_DEL,       _______, _______, _______, _______, _______
 | 
						|
    ),
 | 
						|
 | 
						|
    [_NAV] = LAYOUT(
 | 
						|
        _______, _______ , _______ , _______ , _______ , _______,                       _______,  _______  , _______,  _______ ,  _______ ,_______,
 | 
						|
        _______, KC_TAB  , KC_TILD,  _______,  _______,  _______,                            KC_6,    KC_7,    KC_8,    KC_DEL,   KC_BSPC,  _______,
 | 
						|
        _______, KC_ESC  , _______,  _______,  _______,  _______,                        KC_LEFT, RGUI_T(KC_DOWN), RSFT_T(KC_UP), LALT_T(KC_RIGHT), RCTL_T(KC_ENT),  KC_TRNS,
 | 
						|
        _______, C(KC_Z), C(KC_X), C(KC_C), KC_TILD, XXXXXXX,  _______,       _______,  XXXXXXX, KC_LSTRT, XXXXXXX, KC_LEND,   _______, _______,
 | 
						|
                                _______, _______, _______, KC_TILD, KC_DEL,       _______, _______, _______, _______, _______
 | 
						|
    ),
 | 
						|
 | 
						|
    [_BORK] = LAYOUT(
 | 
						|
        _______, _______ , _______ , _______ , _______ , _______,                      _______,  _______  , _______,  _______ ,  _______ ,_______,
 | 
						|
        _______, KC_TAB,    KC_2,    KC_3,    KC_4,    KC_5,                             KC_6,    KC_7,    KC_8,    KC_DEL,  KC_BSPC,  _______,
 | 
						|
        _______, QK_GESC,   KC_B,    KC_O,    KC_R,    KC_K,                       KC_Z, KC_B, KC_O, KC_R, KC_K,  KC_TRNS,
 | 
						|
        _______, C(KC_Z), C(KC_X), C(KC_C), KC_TILD, XXXXXXX,  _______,       _______,  XXXXXXX, KC_LSTRT, XXXXXXX, KC_LEND,   XXXXXXX, _______,
 | 
						|
                                _______, _______, _______, KC_TILD, TO(_QWR),       _______, _______, _______, _______, _______
 | 
						|
    )
 | 
						|
};
 | 
						|
 | 
						|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 | 
						|
    switch (keycode) {
 | 
						|
        case KC_RHLSC0:
 | 
						|
            if (record->tap.count && record->event.pressed) {
 | 
						|
                layer_on(_SYM);      // When held switch the Symbol layer
 | 
						|
                return false;        // Return false to ignore further processing of key
 | 
						|
            }
 | 
						|
            break;
 | 
						|
        case KC_PRVWD:
 | 
						|
            if (record->event.pressed) {
 | 
						|
                if (keymap_config.swap_lctl_lgui) {
 | 
						|
                    register_mods(mod_config(MOD_LALT));
 | 
						|
                    register_code(KC_LEFT);
 | 
						|
                } else {
 | 
						|
                    register_mods(mod_config(MOD_LCTL));
 | 
						|
                    register_code(KC_LEFT);
 | 
						|
                }
 | 
						|
            } else {
 | 
						|
                if (keymap_config.swap_lctl_lgui) {
 | 
						|
                    unregister_mods(mod_config(MOD_LALT));
 | 
						|
                    unregister_code(KC_LEFT);
 | 
						|
                } else {
 | 
						|
                    unregister_mods(mod_config(MOD_LCTL));
 | 
						|
                    unregister_code(KC_LEFT);
 | 
						|
                }
 | 
						|
            }
 | 
						|
            break;
 | 
						|
        case KC_NXTWD:
 | 
						|
             if (record->event.pressed) {
 | 
						|
                if (keymap_config.swap_lctl_lgui) {
 | 
						|
                    register_mods(mod_config(MOD_LALT));
 | 
						|
                    register_code(KC_RIGHT);
 | 
						|
                } else {
 | 
						|
                    register_mods(mod_config(MOD_LCTL));
 | 
						|
                    register_code(KC_RIGHT);
 | 
						|
                }
 | 
						|
            } else {
 | 
						|
                if (keymap_config.swap_lctl_lgui) {
 | 
						|
                    unregister_mods(mod_config(MOD_LALT));
 | 
						|
                    unregister_code(KC_RIGHT);
 | 
						|
                } else {
 | 
						|
                    unregister_mods(mod_config(MOD_LCTL));
 | 
						|
                    unregister_code(KC_RIGHT);
 | 
						|
                }
 | 
						|
            }
 | 
						|
            break;
 | 
						|
        case KC_LSTRT:
 | 
						|
            if (record->event.pressed) {
 | 
						|
                if (keymap_config.swap_lctl_lgui) {
 | 
						|
                     //CMD-arrow on Mac, but we have CTL and GUI swapped
 | 
						|
                    register_mods(mod_config(MOD_LCTL));
 | 
						|
                    register_code(KC_LEFT);
 | 
						|
                } else {
 | 
						|
                    register_code(KC_HOME);
 | 
						|
                }
 | 
						|
            } else {
 | 
						|
                if (keymap_config.swap_lctl_lgui) {
 | 
						|
                    unregister_mods(mod_config(MOD_LCTL));
 | 
						|
                    unregister_code(KC_LEFT);
 | 
						|
                } else {
 | 
						|
                    unregister_code(KC_HOME);
 | 
						|
                }
 | 
						|
            }
 | 
						|
            break;
 | 
						|
        case KC_LEND:
 | 
						|
            if (record->event.pressed) {
 | 
						|
                if (keymap_config.swap_lctl_lgui) {
 | 
						|
                    //CMD-arrow on Mac, but we have CTL and GUI swapped
 | 
						|
                    register_mods(mod_config(MOD_LCTL));
 | 
						|
                    register_code(KC_RIGHT);
 | 
						|
                } else {
 | 
						|
                    register_code(KC_END);
 | 
						|
                }
 | 
						|
            } else {
 | 
						|
                if (keymap_config.swap_lctl_lgui) {
 | 
						|
                    unregister_mods(mod_config(MOD_LCTL));
 | 
						|
                    unregister_code(KC_RIGHT);
 | 
						|
                } else {
 | 
						|
                    unregister_code(KC_END);
 | 
						|
                }
 | 
						|
            }
 | 
						|
            break;
 | 
						|
    }
 | 
						|
    return true;
 | 
						|
}
 |