~ruther/qmk_firmware

38ca5e95e1e857991c968cd2eb9a26cfed4e12fc — Jan Lindblom 3 years ago f2f2a7a
Adding Rev41lp keyboard (#15895)

* [keyboard] Add rev41lp

* [keymap] rev41lp: More layer, less clutter

* [keymap] rev41lp:whitespace cleanup

* [keymap] rev41lp: Remove outer shift & edit homerow timings

left-ctrl < left-shift
kc-enter < kc-sftent
lower + tab = grave
raise + tab = tilde

* Initial namnlos keymap for rev41lp.

* Updated according to PR checklist.

* Update keyboards/b_sides/rev41lp/config.h

Co-authored-by: Albert Y <76888457+filterpaper@users.noreply.github.com>

* Update keyboards/b_sides/rev41lp/rules.mk

Co-authored-by: Albert Y <76888457+filterpaper@users.noreply.github.com>

* Update keyboards/b_sides/rev41lp/keymaps/default/keymap.c

Co-authored-by: Albert Y <76888457+filterpaper@users.noreply.github.com>

* Update keyboards/b_sides/rev41lp/keymaps/default/keymap.c

Co-authored-by: Albert Y <76888457+filterpaper@users.noreply.github.com>

* Update keyboards/b_sides/rev41lp/keymaps/default/keymap.c

Co-authored-by: Albert Y <76888457+filterpaper@users.noreply.github.com>

* Update keyboards/b_sides/rev41lp/keymaps/default/keymap.c

Co-authored-by: Albert Y <76888457+filterpaper@users.noreply.github.com>

* Update keyboards/b_sides/rev41lp/keymaps/default/keymap.c

Co-authored-by: Albert Y <76888457+filterpaper@users.noreply.github.com>

* Update keyboards/b_sides/rev41lp/keymaps/default/keymap.c

Co-authored-by: Albert Y <76888457+filterpaper@users.noreply.github.com>

* Update keyboards/b_sides/rev41lp/keymaps/default/keymap.c

Co-authored-by: Albert Y <76888457+filterpaper@users.noreply.github.com>

* Update keyboards/b_sides/rev41lp/keymaps/default/keymap.c

Co-authored-by: Albert Y <76888457+filterpaper@users.noreply.github.com>

* Update keyboards/b_sides/rev41lp/keymaps/default/keymap.c

Co-authored-by: Albert Y <76888457+filterpaper@users.noreply.github.com>

* Updated to fulfill PR checklist.

* Update keyboards/b_sides/rev41lp/info.json

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/b_sides/rev41lp/config.h

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/b_sides/rev41lp/keymaps/cyril/config.h

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/b_sides/rev41lp/keymaps/cyril/keymap.c

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/b_sides/rev41lp/keymaps/namnlos/keymap.c

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/b_sides/rev41lp/keymaps/namnlos/rules.mk

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/b_sides/rev41lp/rules.mk

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/b_sides/rev41lp/rules.mk

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/b_sides/rev41lp/rules.mk

Co-authored-by: Ryan <fauxpark@gmail.com>

* Update keyboards/b_sides/rev41lp/readme.md

Co-authored-by: Ryan <fauxpark@gmail.com>

* Update keyboards/b_sides/rev41lp/readme.md

Co-authored-by: Ryan <fauxpark@gmail.com>

* Update keyboards/b_sides/rev41lp/keymaps/namnlos/keymap.c

Co-authored-by: Ryan <fauxpark@gmail.com>

* Update keyboards/b_sides/rev41lp/rules.mk

Co-authored-by: Ryan <fauxpark@gmail.com>

* Adding picture.

* Rename README.md to readme.md

* Cleaning up in rules.mk.

* Moving en- and em-dash from dedicated keys.

* Readme fixup.

There was a typo in the title, also changed the description a little.

* Update keyboards/b_sides/rev41lp/readme.md

Co-authored-by: Ryan <fauxpark@gmail.com>

* Update keyboards/b_sides/rev41lp/keymaps/namnlos/rules.mk

Co-authored-by: Ryan <fauxpark@gmail.com>

Co-authored-by: cyril279 <cyril.x9@gmail.com>
Co-authored-by: Albert Y <76888457+filterpaper@users.noreply.github.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
A keyboards/b_sides/rev41lp/config.h => keyboards/b_sides/rev41lp/config.h +45 -0
@@ 0,0 1,45 @@
/*
Copyright 2021 @cyril279

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

#include "config_common.h"

/* USB Device descriptor parameter */
#define VENDOR_ID       0xFEED
#define PRODUCT_ID      0x5F10
#define DEVICE_VER      0x0001
#define MANUFACTURER    cyril279
#define PRODUCT         rev41lp

/* key matrix size */
#define MATRIX_ROWS 7
#define MATRIX_COLS 6

#define MATRIX_ROW_PINS { F4, B2, F5, B3, F6, B1, F7 }
#define MATRIX_COL_PINS { D4, C6, D7, E6, B4, B5 }
#define UNUSED_PINS

#define DIODE_DIRECTION COL2ROW

#define BACKLIGHT_PIN B6
#define BACKLIGHT_ON_STATE 1
#define BACKLIGHT_LEVELS 7
#define BACKLIGHT_LIMIT_VAL 150

/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5

A keyboards/b_sides/rev41lp/info.json => keyboards/b_sides/rev41lp/info.json +58 -0
@@ 0,0 1,58 @@
{
    "keyboard_name": "rev41lp",
    "url": "https://github.com/cyril279/keyboards/tree/main/revlp/41_1350",
    "maintainer": "cyril279",
    "layouts": {
        "LAYOUT_rev41lp": {
            "layout": [
                {"label":"K00", "x":0, "y":0.54},
                {"label":"K01", "x":1, "y":0.36},
                {"label":"K02", "x":2, "y":0.18},
                {"label":"K03", "x":3, "y":0},
                {"label":"K04", "x":4, "y":0.18},
                {"label":"K05", "x":5, "y":0.36},

                {"label":"K10", "x":7, "y":0.36},
                {"label":"K11", "x":8, "y":0.18},
                {"label":"K12", "x":9, "y":0},
                {"label":"K13", "x":10, "y":0.18},
                {"label":"K14", "x":11, "y":0.36},
                {"label":"K15", "x":12, "y":0.54},

                {"label":"K20", "x":0, "y":1.54},
                {"label":"K21", "x":1, "y":1.36},
                {"label":"K22", "x":2, "y":1.18},
                {"label":"K23", "x":3, "y":1},
                {"label":"K24", "x":4, "y":1.18},
                {"label":"K25", "x":5, "y":1.36},

                {"label":"K30", "x":7, "y":1.36},
                {"label":"K31", "x":8, "y":1.18},
                {"label":"K32", "x":9, "y":1},
                {"label":"K33", "x":10, "y":1.18},
                {"label":"K34", "x":11, "y":1.36},
                {"label":"K35", "x":12, "y":1.54},

                {"label":"K40", "x":0, "y":2.54},
                {"label":"K41", "x":1, "y":2.36},
                {"label":"K42", "x":2, "y":2.18},
                {"label":"K43", "x":3, "y":2},
                {"label":"K44", "x":4, "y":2.18},
                {"label":"K45", "x":5, "y":2.36},

                {"label":"K50", "x":7, "y":2.36},
                {"label":"K51", "x":8, "y":2.18},
                {"label":"K52", "x":9, "y":2},
                {"label":"K53", "x":10, "y":2.18},
                {"label":"K54", "x":11, "y":2.36},
                {"label":"K55", "x":12, "y":2.54},

                {"label":"K60", "x":2.875, "y":3.54, "w":1.25},
                {"label":"K61", "x":4.125, "y":3.54, "w":1.25},
                {"label":"K62", "x":5.375, "y":3.54, "w":2.25},
                {"label":"K63", "x":7.625, "y":3.54, "w":1.25},
                {"label":"K64", "x":8.875, "y":3.54, "w":1.25}
            ]
        }
    }
}

A keyboards/b_sides/rev41lp/keymaps/cyril/config.h => keyboards/b_sides/rev41lp/keymaps/cyril/config.h +21 -0
@@ 0,0 1,21 @@
/*
Copyright 2021 @cyril279

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

#define TAPPING_TERM 150
#define TAPPING_TERM_PER_KEY
#define IGNORE_MOD_TAP_INTERRUPT

A keyboards/b_sides/rev41lp/keymaps/cyril/keymap.c => keyboards/b_sides/rev41lp/keymaps/cyril/keymap.c +105 -0
@@ 0,0 1,105 @@
/*
Copyright 2021 @cyril279

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 layer_names {
    _BASE,
    _LOWER,
    _RAISE,
    _ADJUST,
    _NAVIG,
    _FUNCTION
};

#define LOWER  MO(_LOWER)
#define RAISE  MO(_RAISE)
#define ADJUST MO(_ADJUST)
#define SPC_NAV LT(_NAVIG,KC_SPC)
#define FUNCT  MO(_FUNCTION)
#define NAVIG  MO(_NAVIG)

#define LGUI_A LGUI_T(KC_A)
#define LALT_S LALT_T(KC_S)
#define LSFT_D LSFT_T(KC_D)
#define LCTL_F LCTL_T(KC_F)
#define RCTL_J RCTL_T(KC_J)
#define RSFT_K RSFT_T(KC_K)
#define RALT_L LALT_T(KC_L)
#define RGUI_SCLN RGUI_T(KC_SCLN)

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  [_BASE] = LAYOUT_rev41lp(
    KC_TAB,     KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,             KC_Y,    KC_U,    KC_I,    KC_O,    KC_P, KC_BSPC,
    KC_ESC,     KC_A,  LALT_S,  LSFT_D,  LCTL_F,    KC_G,             KC_H,  RCTL_J,  RSFT_K,  RALT_L, KC_SCLN, KC_QUOT,
    KC_LCTL,    KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,             KC_N,    KC_M, KC_COMM,  KC_DOT, KC_SLSH,  KC_ENT,
                                        KC_LGUI,   LOWER, SPC_NAV,   RAISE,   FUNCT
  ),

  [_LOWER] = LAYOUT_rev41lp(
    KC_GRV,  KC_EXLM,   KC_AT, KC_HASH,  KC_DLR, KC_PERC,          KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN,  KC_DEL,
    _______, _______, _______, _______, _______, _______,          KC_TILD, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
    _______, _______, KC_LGUI, KC_LALT, KC_CAPS, _______,          KC_PSCR, _______, _______, _______, _______, _______,
                                        _______, _______, _______, _______, _______
  ),

  [_RAISE] = LAYOUT_rev41lp(
    KC_TILD,    KC_1,    KC_2,    KC_3,    KC_4,    KC_5,          KC_6,       KC_7,    KC_8,    KC_9,    KC_0, KC_BSPC,
    _______, _______, _______, _______, _______, _______,          KC_GRV,  KC_MINS,  KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
    _______, _______, KC_LGUI, KC_LALT, KC_CAPS, _______,          KC_PSCR, _______, _______, _______, _______, _______,
                                        _______, _______, _______, _______, _______
  ),

  [_NAVIG] = LAYOUT_rev41lp(
    KC_DEL,    KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,          KC_NO,     KC_NO,   KC_NO,   KC_NO,   KC_NO,  KC_DEL,
    _______, _______, _______, _______, _______, _______,          _______, KC_LEFT, KC_DOWN,   KC_UP, KC_RGHT,   KC_NO,
    _______, _______, KC_LGUI, KC_LALT, KC_CAPS, _______,          _______, KC_HOME, KC_PGDN, KC_PGUP,  KC_END, _______,
                                        _______, _______, _______, _______, _______
  ),

  [_FUNCTION] = LAYOUT_rev41lp(
    KC_DEL,    KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,            KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,  KC_DEL,
    _______, _______, _______, _______, _______, _______,            KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,
    _______, _______, KC_LGUI, KC_LALT, KC_CAPS, _______,            KC_F7,   KC_F8,   KC_F9,  KC_F10,  KC_F11,  KC_F12,
                                        _______, _______, _______, _______, _______
  ),

    [_ADJUST] = LAYOUT_rev41lp(
    XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,  BL_DEC, BL_TOGG,          BL_BRTG,  BL_INC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
    XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,          XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
    XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,            RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
                                        _______, _______, _______, _______, _______
  )
};

layer_state_t layer_state_set_user(layer_state_t state) {
    return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
}

uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
    switch (keycode) {
        case LGUI_A:
        case RGUI_SCLN:
        case LALT_S:
        case RALT_L:
        case LCTL_F:
        case RCTL_J:
        case SPC_NAV:
            return 225;
        default:
            return TAPPING_TERM;
    }
}

A keyboards/b_sides/rev41lp/keymaps/default/keymap.c => keyboards/b_sides/rev41lp/keymaps/default/keymap.c +48 -0
@@ 0,0 1,48 @@
/*
Copyright 2021 @cyril279

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

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  [0] = LAYOUT_rev41lp(
    KC_TAB,   KC_Q,     KC_W,     KC_E,     KC_R,      KC_T,               KC_Y,     KC_U,     KC_I,     KC_O,     KC_P,     KC_BSPC,
    KC_LCTL,  KC_A,     KC_S,     KC_D,     KC_F,      KC_G,               KC_H,     KC_J,     KC_K,     KC_L,     KC_SCLN,  KC_QUOT,
    KC_LSFT,  KC_Z,     KC_X,     KC_C,     KC_V,      KC_B,               KC_N,     KC_M,     KC_COMM,  KC_DOT,   KC_SLSH,  RSFT_T(KC_ENT),
                                            KC_LALT,   MO(1),    KC_SPC,   MO(2),    KC_LGUI
  ),

  [1] = LAYOUT_rev41lp(
    _______,  KC_EXLM,  KC_AT,    KC_HASH,  KC_DLR,    KC_PERC,            KC_CIRC,  KC_AMPR,  KC_ASTR,  KC_LPRN,  KC_RPRN,  KC_DEL,
    _______,  KC_UNDS,  KC_PLUS,  KC_LCBR,  KC_RCBR,   KC_PIPE,            KC_LEFT,  KC_DOWN,  KC_UP,    KC_RGHT,  KC_GRV,   KC_TILD,
    _______,  KC_ESC,   KC_LGUI,  KC_LALT,  KC_CAPS,   KC_DQUO,            KC_HOME,  KC_END,   KC_PGUP,  KC_PGDN,  KC_PSCR,  RSFT_T(KC_SPC),
                                            _______,   _______,  KC_ENT,   MO(3),  _______
  ),

  [2] = LAYOUT_rev41lp(
    _______,  KC_1,     KC_2,     KC_3,     KC_4,      KC_5,               KC_6,     KC_7,     KC_8,     KC_9,     KC_0,     KC_DEL,
    _______,  KC_MINS,  KC_EQL,   KC_LBRC,  KC_RBRC,   KC_BSLS,            KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,
    _______,  KC_ESC,   KC_RGUI,  KC_RALT,  KC_CAPS,   KC_QUOT,            KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,   KC_F12,
                                            _______,   MO(3),  KC_BSPC,  _______,  _______
  ),

  [3] = LAYOUT_rev41lp(
    XXXXXXX,   XXXXXXX, XXXXXXX,  XXXXXXX,   BL_DEC,   BL_TOGG,            BL_BRTG,   BL_INC,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,
    XXXXXXX,   XXXXXXX, XXXXXXX,  XXXXXXX,  XXXXXXX,   XXXXXXX,            XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,
    XXXXXXX,   XXXXXXX, XXXXXXX,  XXXXXXX,  XXXXXXX,   XXXXXXX,            RESET,    XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,
                                               _______, _______, _______,  _______,  _______
  )
};


A keyboards/b_sides/rev41lp/keymaps/namnlos/config.h => keyboards/b_sides/rev41lp/keymaps/namnlos/config.h +43 -0
@@ 0,0 1,43 @@
/* Copyright 2022 Jan Lindblom (@janlindblom)
 *
 * 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

#undef BACKLIGHT_LEVELS
#define BACKLIGHT_LEVELS 11
#undef BACKLIGHT_LIMIT_VAL
#define BACKLIGHT_LIMIT_VAL 255
#define BACKLIGHT_DEFAULT_LEVEL 3

#define COMBO_COUNT 3
#define IGNORE_MOD_TAP_INTERRUPT

#define UNICODE_SELECTED_MODES UC_WINC, UC_WIN, UC_MAC, UC_LNX

#define TAPPING_FORCE_HOLD
#define TAPPING_TERM 200
#define TAPPING_TERM_PER_KEY

#define LAYER_STATE_8BIT
#define NO_ACTION_MACRO
#define NO_ACTION_FUNCTION
#define NO_ACTION_ONESHOT

/* Bootmagic Lite key configuration */
#define BOOTMAGIC_LITE_ROW 0
#define BOOTMAGIC_LITE_COLUMN 0

/* key combination for command */
#define IS_COMMAND() (get_mods() == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL)) || get_mods() == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)))

A keyboards/b_sides/rev41lp/keymaps/namnlos/keymap.c => keyboards/b_sides/rev41lp/keymaps/namnlos/keymap.c +176 -0
@@ 0,0 1,176 @@
/* Copyright 2022 Jan Lindblom (@janlindblom)
 *
 * 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
#include "keymap_swedish.h"
#include "sendstring_swedish.h"

enum layer_names {
    _BASE,
    _LOWER,
    _RAISE,
    _ADJUST
};

enum custom_keycodes {
    SK_NOT_EQL = SAFE_RANGE,
    SK_LEQ,
    SK_GEQ,
};

// Custom send_string keys
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    switch (keycode) {
        case SK_NOT_EQL:
            if (record->event.pressed) {
                SEND_STRING("!=");
            }
            break;
        case SK_LEQ:
            if (record->event.pressed) {
                SEND_STRING("<=");
            }
            break;
        case SK_GEQ:
            if (record->event.pressed) {
                SEND_STRING(">=");
            }
            break;
    }
    return true;
}

// Combos, if enabled
#ifdef COMBO_ENABLE
enum combo_events {
    ZC_COPY,
    XV_PASTE,
    ZX_CUT,
};

const uint16_t PROGMEM copy_combo[]  = {KC_Z, KC_C, COMBO_END};
const uint16_t PROGMEM paste_combo[] = {KC_X, KC_V, COMBO_END};
const uint16_t PROGMEM cut_combo[]   = {KC_Z, KC_X, COMBO_END};

combo_t key_combos[COMBO_COUNT] = {
    [ZC_COPY]  = COMBO_ACTION(copy_combo),
    [XV_PASTE] = COMBO_ACTION(paste_combo),
    [ZX_CUT]   = COMBO_ACTION(cut_combo),
};

void process_combo_event(uint16_t combo_index, bool pressed) {
    switch (combo_index) {
        case ZC_COPY:
            if (pressed) {
                tap_code16(LCTL(KC_C));
            }
            break;
        case XV_PASTE:
            if (pressed) {
                tap_code16(LCTL(KC_V));
            }
            break;
        case ZX_CUT:
            if (pressed) {
                tap_code16(LCTL(KC_X));
            }
            break;
    }
}
#endif

// Tap Dance definitions
#ifdef TAP_DANCE_ENABLE
enum dances {
    TD_SHFT_CAPS,
    TD_DOT_COL,
    TD_COM_SCL,
    TD_DASH_USCR,
};

qk_tap_dance_action_t tap_dance_actions[] = {
    // Tap once for Shift, twice for Caps Lock
    [TD_SHFT_CAPS] = ACTION_TAP_DANCE_DOUBLE(KC_LSFT, KC_CAPS),
    [TD_COM_SCL]   = ACTION_TAP_DANCE_DOUBLE(KC_COMM, SE_SCLN),
    [TD_DOT_COL]   = ACTION_TAP_DANCE_DOUBLE(KC_DOT, SE_COLN),
    [TD_DASH_USCR] = ACTION_TAP_DANCE_DOUBLE(SE_MINS, S(SE_MINS)),
};
#    define CK_LSFT TD(TD_SHFT_CAPS)
#    define CK_COMM TD(TD_COM_SCL)
#    define CK_DOT TD(TD_DOT_COL)
#    define CK_DASH TD(TD_DASH_USCR)
#else
#    define CK_LSFT KC_LSFT
#    define CK_COMM KC_COMM
#    define CK_DOT KC_DOT
#    define CK_DASH SE_MINS
#endif

// Some defines for the keys below
#define CK_ESC LT(_RAISE, KC_ESC)
#define CK_BSPC LCTL_T(KC_BSPC)
#define CK_DEL LALT_T(KC_DEL)
#define CK_ENT1 LT(_LOWER, KC_ENT)
#define CK_ENT2 LT(_RAISE, KC_ENT)
#define CK_TAB RALT_T(KC_TAB)
#define CK_ADIA RCTL_T(SE_ADIA)
#define CK_QUOT RSFT_T(SE_QUOT)
#define CK_SPC RSFT_T(KC_SPC)

// Alt + [-] => – (en-dash)
const key_override_t mins_ndash_override = ko_make_basic(MOD_MASK_ALT, SE_MINS, UC(0x2013));
 // Shift + Alt + [-] => — (em-dash)
const key_override_t mins_mdash_override = ko_make_basic(MOD_MASK_SA, SE_MINS, UC(0x2014));

const key_override_t **key_overrides = (const key_override_t *[]){
    &mins_ndash_override,
    &mins_mdash_override,
    NULL
};

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  [_BASE] = LAYOUT_rev41lp(
    CK_ESC,   KC_Q,     KC_W,     KC_E,     KC_R,      KC_T,               KC_Y,     KC_U,     KC_I,     KC_O,     KC_P,  SE_ARNG,
    CK_BSPC,  KC_A,     KC_S,     KC_D,     KC_F,      KC_G,               KC_H,     KC_J,     KC_K,     KC_L,  SE_ODIA,  CK_ADIA,
    CK_LSFT,  KC_Z,     KC_X,     KC_C,     KC_V,      KC_B,               KC_N,     KC_M,  SE_COMM,   SE_DOT,  SE_MINS,  CK_QUOT,
                                          CK_DEL,   CK_ENT1,  KC_SPC,   CK_ENT2,   CK_TAB
  ),

  [_LOWER] = LAYOUT_rev41lp(
 SK_NOT_EQL,  SE_EXLM,    SE_AT,  SE_HASH,   SE_DLR,   SE_PERC,            SE_CIRC,  SE_AMPR,  SE_ASTR,  SE_LPRN,  SE_RPRN,  SE_DIAE,
     SK_LEQ,  SE_UNDS,  SE_PLUS,  SE_LCBR,  SE_RCBR,   SE_PIPE,            KC_LEFT,  KC_DOWN,    KC_UP,  KC_RGHT,   SE_GRV,  SE_TILD,
     SK_GEQ,   KC_ESC,  KC_LGUI,  KC_LALT,  KC_CAPS,   SE_DQUO,            KC_HOME,   KC_END,  KC_PGUP,  KC_PGDN,  KC_PSCR,   CK_SPC,
                                            _______,   _______,  KC_ENT,   _______,  _______
  ),

  [_RAISE] = LAYOUT_rev41lp(
    _______,     SE_1,     SE_2,     SE_3,     SE_4,      SE_5,               SE_6,   SE_7,   SE_8,    SE_9,    SE_0,  SE_GRV,
    _______,  SE_MINS,   SE_EQL,  SE_LBRC,  SE_RBRC,   SE_BSLS,              KC_F1,  KC_F2,  KC_F3,   KC_F4,   KC_F5,   KC_F6,
    _______,   KC_ESC,  KC_RGUI,  KC_RALT,  KC_CAPS,   SE_ACUT,              KC_F7,  KC_F8,  KC_F9,  KC_F10,  KC_F11,  KC_F12,
                                            SE_LABK,   SE_RABK,  KC_BSPC,  _______,  _______
  ),

  [_ADJUST] = LAYOUT_rev41lp(
    XXXXXXX,   XXXXXXX, XXXXXXX,   BL_OFF,   BL_DEC,   BL_TOGG,            BL_BRTG,   BL_INC,    BL_ON,  XXXXXXX,  XXXXXXX,  XXXXXXX,
    XXXXXXX,   XXXXXXX, XXXXXXX,  XXXXXXX,  XXXXXXX,   BL_STEP,            XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,
    XXXXXXX,   UC_M_WC, UC_M_MA,  UC_M_LN,  XXXXXXX,   XXXXXXX,            RESET,    XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,
                                               _______, _______, _______,  _______,  _______
  )
};

layer_state_t layer_state_set_user(layer_state_t state) {
    return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
}

A keyboards/b_sides/rev41lp/keymaps/namnlos/readme.md => keyboards/b_sides/rev41lp/keymaps/namnlos/readme.md +3 -0
@@ 0,0 1,3 @@
# Namnlos custom keymap for Rev41lp

This is a nordic keymap for the Rev41lp by [cyril](https://github.com/cyril279), it's based on the default keymap but has customisations for nordic languages.

A keyboards/b_sides/rev41lp/keymaps/namnlos/rules.mk => keyboards/b_sides/rev41lp/keymaps/namnlos/rules.mk +7 -0
@@ 0,0 1,7 @@
SLEEP_LED_ENABLE = yes
NKRO_ENABLE = yes
UNICODE_ENABLE = yes
TAP_DANCE_ENABLE = yes
KEY_OVERRIDE_ENABLE = yes
DEBOUNCE_TYPE = sym_defer_pk
LTO_ENABLE = yes

A keyboards/b_sides/rev41lp/readme.md => keyboards/b_sides/rev41lp/readme.md +15 -0
@@ 0,0 1,15 @@
# The rev41lp keyboard

![The rev41lp keyboard by cyril279](https://imgur.com/nZNHSaWh.jpg)

Inspired by the REVIUNG series by Gtips, the rev41lp is 41-key column staggered keyboard designed for use with low-profile Kailh Choc (pg1350) switches.

* Keyboard Maintainer: [cyril279](https://github.com/cyril279)
* Hardware Supported: The REVlp PCBs, Pro Micro supported, bluetooth controller friendly.
* Hardware Availability: [PCB Data](https://github.com/cyril279/keyboards/tree/main/revlp)

Make example for this keyboard (after setting up your build environment):

    make b_sides/rev41lp:default

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).

A keyboards/b_sides/rev41lp/rev41lp.c => keyboards/b_sides/rev41lp/rev41lp.c +17 -0
@@ 0,0 1,17 @@
/*
Copyright 2021 @cyril279

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 "rev41lp.h"

A keyboards/b_sides/rev41lp/rev41lp.h => keyboards/b_sides/rev41lp/rev41lp.h +35 -0
@@ 0,0 1,35 @@
/*
Copyright 2021 @cyril279

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

#include "quantum.h"

#define LAYOUT_rev41lp( \
    K00, K01, K02, K03, K04, K05,      K10, K11, K12, K13, K14, K15, \
    K20, K21, K22, K23, K24, K25,      K30, K31, K32, K33, K34, K35, \
    K40, K41, K42, K43, K44, K45,      K50, K51, K52, K53, K54, K55, \
                        K60, K61, K62, K63, K64 \
) \
{ \
    { K00, K01, K02, K03, K04, K05 }, \
    { K10, K11, K12, K13, K14, K15 }, \
    { K20, K21, K22, K23, K24, K25 }, \
    { K30, K31, K32, K33, K34, K35 }, \
    { K40, K41, K42, K43, K44, K45 }, \
    { K50, K51, K52, K53, K54, K55 }, \
    { K60, K61, K62, K63, K64, KC_NO } \
}

A keyboards/b_sides/rev41lp/rules.mk => keyboards/b_sides/rev41lp/rules.mk +18 -0
@@ 0,0 1,18 @@
# MCU name
MCU = atmega32u4

# Bootloader selection
BOOTLOADER = caterina

# Build Options
#   change yes to no to disable
#
BOOTMAGIC_ENABLE = yes      # Enable Bootmagic Lite
MOUSEKEY_ENABLE = no        # Mouse keys
EXTRAKEY_ENABLE = yes       # Audio control and System control
CONSOLE_ENABLE = yes        # Console for debug
COMMAND_ENABLE = yes        # Commands for debug and configuration
NKRO_ENABLE = no            # Enable N-Key Rollover
BACKLIGHT_ENABLE = yes      # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow
AUDIO_ENABLE = no           # Audio output