Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add personal keymap #18836

Merged
merged 13 commits into from
Jan 15, 2023
54 changes: 54 additions & 0 deletions keyboards/sofle/keymaps/bastien-baloup_fr/config.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
/* Copyright 2022 Bastien Baloup
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

#pragma once

// More lighting options in quantum/rgblight/rgblight.h
#ifdef RGBLIGHT_ENABLE

// Disabling some of these is a good way to save flash space.
// #define RGBLIGHT_EFFECT_ALTERNATING
// #define RGBLIGHT_EFFECT_RGB_TEST
// #define RGBLIGHT_EFFECT_RAINBOW_MOOD
// #define RGBLIGHT_EFFECT_STATIC_GRADIENT
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
// #define RGBLIGHT_EFFECT_BREATHING
// #define RGBLIGHT_EFFECT_KNIGHT
// #define RGBLIGHT_EFFECT_SNAKE
// #define RGBLIGHT_EFFECT_CHRISTMAS
// #define RGBLIGHT_EFFECT_TWINKLE

// Set default lighting option
#define RGBLIGHT_DEFAULT_MODE RGBLIGHT_MODE_RAINBOW_SWIRL+2
// Allow use of LEDs as modifier/layer indicators without disrupting animations.
#define RGBLIGHT_LAYERS

// Allow compiling to work on sofle/rev1
#if defined(KEYBOARD_sofle_rev1)
#define RGBLED_NUM 70
// D3 for ws2812 RGB LED
#define RGB_DI_PIN D3
#endif
#endif

// Disabled to save space
#define NO_ACTION_ONESHOT
#define NO_MUSIC_MODE
#undef LOCKING_SUPPORT_ENABLE
#undef LOCKING_RESYNC_ENABLE

// Limit the number of layers that the firmware can use to save space
#define LAYER_STATE_8BIT
211 changes: 211 additions & 0 deletions keyboards/sofle/keymaps/bastien-baloup_fr/keymap.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,211 @@
/* Copyright 2022 Bastien Baloup
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

#include QMK_KEYBOARD_H

enum custom_keycodes {
// CL_ keycodes are here for charaters that need capslock on to be inputed.
CL_AGRV = SAFE_RANGE, // À
CL_EACU, // É
CL_EGRV, // È
// UC_ keycodes uses (ctrl+shift+u)+code+enter to input unicode.
// I do not use the qmk unicode implementation because it does not uses the right keycodes to input numbers in a french layout.
UC_PI , // π
UC_ELIP // …
};

// Following keymaps are made for the french ISO keyboard layout

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
* LOWERcase
* ,-----------------------------------------. ,-----------------------------------------.
* | ² | & | é | " | ' | ^ | | ¨ | è | % | ç | à | TG3 |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | ESC | a | z | e | r | t | | y | u | i | o | p | Bspc |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | Tab | q | s | d | f | g |-------. ,-------| h | j | k | l | m | ù |
* |------+------+------+------+------+------| | | Mute |------+------+------+------+------+------|
* | MO1 | w | x | c | v | b |-------| |-------| n | , | ; | : | ! | MO1 |
* `-----------------------------------------/ / \ \-----------------------------------------'
* | LGUI | LAlt | LCTR | MO2 | /Enter / \Space \ | MO3 | RCTR | RAlt | HYPER|
* | | | | |/ / \ \ | | | | |
* `-----------------------------------' '------''---------------------------'
*/

[0] = LAYOUT(
KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_LBRC, S(KC_LBRC), KC_7 , S(KC_QUOT), KC_9 , KC_0 , TG(3) ,
KC_ESC , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_BSPC,
KC_TAB , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT,
MO(1) , KC_Z , KC_X , KC_C , KC_V , KC_B , XXXXXXX, KC_MUTE, KC_N , KC_M , KC_COMM , KC_DOT , KC_SLSH, MO(1) ,
KC_LGUI, KC_LALT, KC_LCTL, MO(2) , KC_ENT, KC_SPC, MO(3) , KC_RCTL, KC_RALT, KC_HYPR
),
// I use a uppercase layer instead of using the Shift key because I find it easier to change the effect of shift+key chords this way.
/*
* UPPERcase
* ,-----------------------------------------. ,-----------------------------------------.
* | | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | TG3 |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | ESC | A | Z | E | R | T | | Y | U | I | O | P | Bspc |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | TAB | Q | S | D | F | G |-------. ,-------| H | J | K | L | M | µ |
* |------+------+------+------+------+------| | | Mute |------+------+------+------+------+------|
* | MO1 | W | X | C | V | B |-------| |-------| N | ? | . | / | § | MO1 |
* `-----------------------------------------/ / \ \-----------------------------------------'
* | LGUI | LAlt | LCTR | MO2 | /Enter / \Space \ | MO3 | RCTR | RAlt | HYPER|
* | | | | |/ / \ \ | | | | |
* `-----------------------------------' '------''---------------------------'
*/
[1] = LAYOUT(
_______, S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6) , S(KC_7), S(KC_8) , S(KC_9) , S(KC_0) , _______ ,
_______, S(KC_Q), S(KC_W), S(KC_E), S(KC_R), S(KC_T), S(KC_Y) , S(KC_U), S(KC_I) , S(KC_O) , S(KC_P) , _______ ,
_______, S(KC_A), S(KC_S), S(KC_D), S(KC_F), S(KC_G), S(KC_H) , S(KC_J), S(KC_K) , S(KC_L) , S(KC_SCLN), S(KC_NUHS),
_______, S(KC_Z), S(KC_X), S(KC_C), S(KC_V), S(KC_B), _______, _______, S(KC_N) , S(KC_M), S(KC_COMM), S(KC_DOT), S(KC_SLSH), _______ ,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),

// I replaced MO1 with the Shift key in the next layers to be able to use it for some shortcuts.

/* SYMBOLS
* ,-----------------------------------------. ,-----------------------------------------.
* | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | ESC | À | È | É | ( | ) | | = | | | \ | · | @ | Bspc |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | Tab | ` | ~ | # | < | > |-------. ,-------| + | - | / | * | ° | … |
* |------+------+------+------+------+------| | | Play |------+------+------+------+------+------|
* | Shift| ¤ | [ | ] | { | } |-------| |-------| π | _ | € | $ | £ | Shift|
* `-----------------------------------------/ / \ \-----------------------------------------'
* | LGUI | LAlt | LCTR | MO2 | /Enter / \Space \ | MO3 | RCTR | RAlt | HYPER|~
* | | | | |/ / \ \ | | | | |
* `-----------------------------------' '------''---------------------------'
*/
[2] = LAYOUT(
KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 ,
_______, CL_AGRV , CL_EGRV , CL_EACU , KC_5 , KC_MINS , KC_EQL , ALGR(KC_6), ALGR(KC_8), ALGR(KC_COMM), ALGR(KC_0), _______,
_______, ALGR(KC_7) , ALGR(KC_2), ALGR(KC_3) , KC_NUBS , S(KC_NUBS) , S(KC_EQL), KC_6 , S(KC_DOT) , KC_NUHS , S(KC_MINS), UC_ELIP,
KC_LSFT, ALGR(KC_RBRC), ALGR(KC_5), ALGR(KC_MINS), ALGR(KC_4), ALGR(KC_EQL), _______, KC_MPLY, UC_PI , KC_8 , ALGR(KC_E), KC_RBRC , S(KC_RBRC), KC_RSFT,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
/* UTILS
* ,----------------------------------------. ,-----------------------------------------.
* | | & | é | " | ( | ^ | | CLock|PScr |ScLock| Pause| Ins | TG3 |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | Esc | a | z | e | r | t | | PgUp | Home | Up | End | Del | Bspc |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | Tab | q | s | d | f | g |-------. ,-------| PgDo | Left | Down | Rigth|CALeft|CARigt|
* |------+------+------+------+------+------| | | Play |------+------+------+------+------+------|
* |Shift | w | x | c | v | b |-------| |-------| | PWrd | | NWrd | Menu | Shift|
* `-----------------------------------------/ / \ \-----------------------------------------'
* | LGUI | LAlt | LCTR | MO2 | /Enter / \Space \ | MO3 | RCTR | RAlt | HYPER|
* | | | | |/ / \ \ | | | | |
* `----------------------------------' '------''---------------------------'
*/
[3] = LAYOUT(
_______, _______, _______, _______, _______, _______, KC_CAPS, KC_PSCR , KC_SCRL, KC_PAUS , KC_INS , _______ ,
_______, _______, _______, _______, _______, _______, KC_PGUP, KC_HOME , KC_UP , KC_END , KC_DEL , _______ ,
_______, _______, _______, _______, _______, _______, KC_PGDN, KC_LEFT , KC_DOWN, KC_RGHT , C(A(KC_LEFT)), C(A(KC_RGHT)),
KC_LSFT, _______, _______, _______, _______, _______, _______, KC_MPLY, XXXXXXX, C(KC_LEFT), XXXXXXX, C(KC_RGHT), KC_MENU , KC_RSFT ,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
)
};

// Custom keycode handling.
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
// handling this once instead of in each keycode uses less program memory.
if (record->event.pressed) {
switch (keycode) {
case CL_AGRV:
// capsLockOn à capsLockOff
SEND_STRING(SS_TAP(X_CAPS)"0"SS_TAP(X_CAPS));
break;
case CL_EACU:
// capsLockOn é capsLockOff
SEND_STRING(SS_TAP(X_CAPS)"2"SS_TAP(X_CAPS));
break;
case CL_EGRV:
// capsLockOn è capsLockOff
SEND_STRING(SS_TAP(X_CAPS)"7"SS_TAP(X_CAPS));
break;
case UC_PI:
// Ctrl+Shift+u 3CO Enter
tap_code16(LCTL(LSFT(KC_U)));
tap_code16(S(KC_3));
tap_code16(KC_C);
tap_code16(S(KC_0));
tap_code16(KC_ENT);
break;
case UC_ELIP:
// Ctrl+Shift+u 2026 Enter
tap_code16(LCTL(LSFT(KC_U)));
tap_code16(S(KC_2));
tap_code16(S(KC_0));
tap_code16(S(KC_2));
tap_code16(S(KC_6));
tap_code16(KC_ENT);
break;
}
}
// this uses less memory than returning in each case.
return keycode < SAFE_RANGE;
};

#if defined(ENCODER_ENABLE) && defined(ENCODER_MAP_ENABLE)
// This section is like the keymap matrix, but for rotary encoders
// My left encoder is currently not working, so I'm using Layers instead
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
[0] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(KC_VOLU, KC_VOLD)},
[1] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(KC_VOLU, KC_VOLD)},
[2] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(KC_MNXT, KC_MPRV)},
[3] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(KC_MNXT, KC_MPRV)},
};
#endif

#ifdef RGBLIGHT_ENABLE
// This section define RGB_Lighting overrides by layers

const rgblight_segment_t PROGMEM rgb_layer_1[] = RGBLIGHT_LAYER_SEGMENTS(
{30, 6, HSV_TURQUOISE},
{38, 6, HSV_TURQUOISE}
);
const rgblight_segment_t PROGMEM rgb_layer_2[] = RGBLIGHT_LAYER_SEGMENTS(
{30, 6, HSV_TEAL},
{38, 6, HSV_TEAL}
);
const rgblight_segment_t PROGMEM rgb_layer_3[] = RGBLIGHT_LAYER_SEGMENTS(
{38, 6, HSV_PURPLE}
);

const rgblight_segment_t* const PROGMEM rgb_layers[] = RGBLIGHT_LAYERS_LIST(
rgb_layer_1, // Overrides for layer 1
rgb_layer_2, // Overrides for layer 2
rgb_layer_3 // Overrides for layer 3
);

// Enable the LED layers
void keyboard_post_init_user(void) {
rgblight_layers = rgb_layers;
}

// Set activation conditions for each LED layers
layer_state_t layer_state_set_user(layer_state_t state) {
rgblight_set_layer_state(0, layer_state_cmp(state, 1));
rgblight_set_layer_state(1, layer_state_cmp(state, 2));
rgblight_set_layer_state(2, layer_state_cmp(state, 3));
return state;
}

#endif
5 changes: 5 additions & 0 deletions keyboards/sofle/keymaps/bastien-baloup_fr/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
![Bastien-Baloup_FR keymap for sofle keyboard](https://i.imgur.com/Zlv1dj1h.jpg)

# Bastien-Baloup's French keymap for sofle keyboard

Keymap based on the french azerty keyboard layout.
9 changes: 9 additions & 0 deletions keyboards/sofle/keymaps/bastien-baloup_fr/rules.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
RGBLIGHT_ENABLE = yes
EXTRAKEY_ENABLE = yes
LTO_ENABLE = yes
ENCODER_ENABLE = yes
ENCODER_MAP_ENABLE = yes
OLED_ENABLE = no
SPACE_CADET_ENABLE = no
GRAVE_ESC_ENABLE = no
MAGIC_ENABLE = no