~ruther/qmk_firmware

ec78f8bca2523a91a293d8ae4d61050d1e36b320 — imchipwood 4 years ago 4f88080
[Keymap] Adding user code & keymaps for dumbpad & hotdox (#12924)

Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
A keyboards/dumbpad/v1x/keymaps/imchipwood/keymap.c => keyboards/dumbpad/v1x/keymaps/imchipwood/keymap.c +95 -0
@@ 0,0 1,95 @@
/* Copyright 2020 imchipwood
 *
 * 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 "imchipwood.h"

enum custom_layers {
    _BASE,
    _SUB,
};

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    /*
          BASE LAYER
     /-----------------------------------------------------`
     |             |    7    |    8    |    9    |  Bkspc  |
     |             |---------|---------|---------|---------|
     |             |    4    |    5    |    6    |    +    |
     |             |---------|---------|---------|---------|
     |             |    1    |    2    |    3    |    *    |
     |-------------|---------|---------|---------|---------|
     | Play/Pause  | TT(SUB) |    0    |    .    |  Enter  |
     \-----------------------------------------------------'
    */
    [_BASE] = LAYOUT(
                      KC_P7,      KC_P8,    KC_P9,     KC_BSPC,
                      KC_P4,      KC_P5,    KC_P6,     KC_KP_PLUS,
                      KC_P1,      KC_P2,    KC_P3,     KC_KP_ASTERISK,
      MEH_T(KC_MPLY), TT(_SUB),   KC_P0,    KC_PDOT,   KC_KP_ENTER
    ),
    /*
          SUB LAYER
     /-----------------------------------------------------`
     |             |   F7    |   F8    |   F9    | Del/NLK |
     |             |---------|---------|---------|---------|
     |             |   F4    |   F5    |   F6    |    -    |
     |             |---------|---------|---------|---------|
     |             |   F1    |   F2    |   F3    |    /    |
     |-------------|---------|---------|---------|---------|
     |    MUTE     |         |  LSFT   |  LCTL   |    =    |
     \-----------------------------------------------------'
    */
    [_SUB] = LAYOUT(
                   TD(ALT_F7),          KC_F8,          KC_F9, TD(DEL_NLCK),
                        KC_F4,     TD(CTL_F5),          KC_F6,  KC_KP_MINUS,
                        KC_F1,     TD(ALT_F2),          KC_F3,  KC_KP_SLASH,
        KC_MUTE,      _______,  OSM(MOD_LSFT),  OSM(MOD_LCTL),  KC_KP_EQUAL
    )
};

bool encoder_update_user(uint8_t index, bool clockwise) {
    if (index == 0) {
        switch (get_highest_layer(layer_state)) {
            case _BASE:
                // main layer - volume up/down
                if (clockwise) {
                    tap_code(KC_VOLU);
                } else {
                    tap_code(KC_VOLD);
                }
                break;

            case _SUB:
                // sub layer - next/previous track
                if (clockwise) {
                    tap_code(KC_MNXT);
                } else {
                    tap_code(KC_MPRV);
                }
                break;

            default:
                // default - volume up/down
                if (clockwise) {
                    tap_code(KC_VOLU);
                } else {
                    tap_code(KC_VOLD);
                }
                break;
        }
    }
    return true;
}

A keyboards/dumbpad/v1x/keymaps/numpad_media/keymap.c => keyboards/dumbpad/v1x/keymaps/numpad_media/keymap.c +88 -0
@@ 0,0 1,88 @@
/* Copyright 2020 imchipwood
 *
 * 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] = {
    /*
            BASE LAYER
    /-----------------------------------------------------`
    |             |    7    |    8    |    9    |  Bkspc  |
    |             |---------|---------|---------|---------|
    |             |    4    |    5    |    6    |    +    |
    |             |---------|---------|---------|---------|
    |             |    1    |    2    |    3    |    *    |
    |-------------|---------|---------|---------|---------|
    | Play/pause  |  TT(1)  |    0    |    .    |  Enter  |
    \-----------------------------------------------------'
    */
    [0] = LAYOUT(
                    KC_P7,     KC_P8,   KC_P9,    KC_BSPC,
                    KC_P4,     KC_P5,   KC_P6,    KC_KP_PLUS,
                    KC_P1,     KC_P2,   KC_P3,    KC_KP_ASTERISK,
        KC_MPLY,    TT(1),     KC_P0,   KC_PDOT,  KC_KP_ENTER
    ),
    /*
            SUB LAYER
    /-----------------------------------------------------`
    |             |         |         |         | Numlock |
    |             |---------|---------|---------|---------|
    |             |         |         |         |    -    |
    |             |---------|---------|---------|---------|
    |             |         |         |         |    /    |
    |-------------|---------|---------|---------|---------|
    |    MUTE     |         |         |         |    =    |
    \-----------------------------------------------------'
    */
    [1] = LAYOUT(
                    _______,     _______,     _______,      KC_NLCK,
                    _______,     _______,     _______,      KC_KP_MINUS,
                    _______,     _______,     _______,      KC_KP_SLASH,
        KC_MUTE,    _______,     _______,     _______,      KC_KP_EQUAL
    ),
};

void encoder_update_user(uint8_t index, bool clockwise) {
    /*  Custom encoder control - handles CW/CCW turning of encoder
     *  Default behavior:
     *    main layer:
     *       CW: volume up
     *      CCW: volume down
     *    other layers:
     *       CW: next track
     *      CCW: previous track
     */
    if (index == 0) {
        switch (get_highest_layer(layer_state)) {
            case 0:
                // main layer - volume up (CW) and volume down (CCW)
                if (clockwise) {
                    tap_code(KC_VOLU);
                } else {
                    tap_code(KC_VOLD);
                }
                break;

            default:
                // other layers - media next (CW) and media previous (CCW)
                if (clockwise) {
                    tap_code(KC_MNXT);
                } else {
                    tap_code(KC_MPRV);
                }
                break;
        }
    }
}

A keyboards/hotdox/keymaps/imchipwood/keymap.c => keyboards/hotdox/keymaps/imchipwood/keymap.c +151 -0
@@ 0,0 1,151 @@
/* Copyright 2021 imchipwood
 *
 * 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 "imchipwood.h"

// Layer names
enum custom_layers {
    _QWERTY,
    _NUM,
    _MED
};

// Layer definitions
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    [_QWERTY] = LAYOUT_ergodox_pretty(
/* Keymap 0: Basic layer
 *        ,--------------------------------------------------.                    ,--------------------------------------------------.
 *        |   =    |   1  |   2  |   3  |   4  |   5  | ESC  |                    |BkTick|   6  |   7  |   8  |   9  |   0  |   -    |
 *        |--------+------+------+------+------+-------------|                    |------+------+------+------+------+------+--------|
 *        | Tab    |   Q  |   W  |   E  |   R  |   T  | MEH  |                    |      |   Y  |   U  |   I  |   O  |   P  |   [    |
 *        |--------+------+------+------+------+------|      |                    |      |------+------+------+------+------+--------|
 *        | BkSlsh |   A  |   S  |   D  |   F  |   G  |------|                    |------|   H  |   J  |   K  |   L  |  ;   |   '    |
 *        |--------+------+------+------+------+------|MO(2) |                    |MO(2) |------+------+------+------+------+--------|
 *        | LSHIFT |   Z  |   X  |   C  |   V  |   B  |      |                    |      |   N  |   M  |   ,  |   .  |   /  |SHFT/CAP|
 *        `--------+------+------+------+------+-------------'                    `-------------+------+------+------+------+--------'
 *          |RCTRL | LALT | GUI  |L/HOME|R/END |                                                |  Up  | Down | LEFT |RIGHT |PRSCR |
 *          `----------------------------------'                                                `----------------------------------'
 *                                                       ,-------------.  ,-------------.
 *                                                       | DEL  | INS  |  | Ctrl |  Alt |
 *                                                ,------|------|------|  |------+--------+------.
 *                                                |      |      | Home |  | PgUp |        |      |
 *                                                |Enter |MO(1) |------|  |------|  Bksp  |Space |
 *                                                |      |      | End  |  | PgDn |        |      |
 *                                                `--------------------'  `----------------------'
 */
//                                                                                       Left hand   Right hand
//    ,------------------------------------------------------------------------------------------.   ,------------------------------------------------------------------------------------------.
        KC_EQL,      KC_1,        KC_2,        KC_3,        KC_4,        KC_5,        KC_ESC,          KC_GRV,      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_MEH,          KC_TRNS,     KC_Y,        KC_U,        KC_I,        KC_O,        KC_P,        KC_LBRC,
//    |------------+------------+------------+------------+------------+------------+            |   |            +------------+------------+------------+------------+------------+------------|
        KC_BSLS,     KC_A,        KC_S,        KC_D,        KC_F,        KC_G,                                      KC_H,        KC_J,        KC_K,        KC_L,        KC_SCLN,     KC_QUOT,
//    |------------+------------+------------+------------+------------+------------+------------|   |------------+------------+------------+------------+------------+------------+------------|
        KC_LSHIFT,   KC_Z,        KC_X,        KC_C,        KC_V,        KC_B,        MO(_MED),        MO(_MED),    KC_N,        KC_M,        KC_COMM,     KC_DOT,      KC_SLSH,     TD(TD_RSFT_CAPS),
//    |------------+------------+------------+------------+------------+------------+------------|   |------------+------------+------------+------------+------------+------------+------------|
        KC_LCTRL,    KC_LALT,     KC_LGUI,     TD(TD_LOME), TD(TD_REND),                                                         KC_UP,       KC_DOWN,     KC_LEFT,     KC_RGHT,     KC_PSCR,
//     `---------------------------------------------------------------'                                                       `----------------------------------------------------------------'
//                                                                     ,-------------------------.   ,-------------------------.
                                                                         KC_DEL,      KC_INS,          KC_TRNS,     KC_TRNS,
//                                                        ,------------+------------+------------|   |------------+------------+------------.
                                                                                      KC_TRNS,         KC_TRNS,
//                                                        |            |            +------------|   |------------+            |            |
                                                            KC_ENT,      MO(_NUM),    KC_TRNS,         KC_TRNS,     KC_BSPC,     KC_SPC
//                                                        `--------------------------------------'   `--------------------------------------'
    ),
    [_NUM] = LAYOUT_ergodox_pretty(
/* Keymap 1: Numpad, function keys, and some convenience keys
 *        ,---------------------------------------------------.                   ,--------------------------------------------------.
 *        |         |  F1  |  F2  |  F3  |  F4  |  F5  |      |                   |  F12 |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
 *        |---------+------+------+------+------+------+------|                   |------+------+------+------+------+------+--------|
 *        |         |      |  up  |      |      |      |      |                   |      |   7  |   8  |   9  |   *  |   /  |    ]   |
 *        |---------+------+------+------+------+------|      |                   |      |------+------+------+------+------+--------|
 *        |         | left | down |right |      |      |------|                   |------|   4  |   5  |   6  |   +  |   -  |        |
 *        |---------+------+------+------+------+------|      |                   |      |------+------+------+------+------+--------|
 *        |         |      |      |      |      |      |      |                   |      |   1  |   2  |   3  |   =  |  up  | enter  |
 *        `---------+------+------+------+------+-------------'                   `-------------+------+------+------+------+--------'
 *          |       |      |      | PgUp | PgDn |                                               |   0  |   .  | left | down |right |
 *          `-----------------------------------'                                               `----------------------------------'
 *                                                      ,-------------.   ,-------------.
 *                                                      |      |      |   |      |      |
 *                                               ,------|------|------|   |------+------+------.
 *                                               |      |      |      |   |      |      |      |
 *                                               |      |      |------|   |------| Del  | Esc  |
 *                                               |      |      |      |   |      |      |      |
 *                                               `--------------------'   `--------------------'
 */
//                                                    Left hand                   Right hand
//    ,------------------------------------------------------------------------------------------.   ,------------------------------------------------------------------------------------------.
        KC_TRNS,     KC_F1,       KC_F2,       KC_F3,       KC_F4,       TD(CTL_F5),  KC_TRNS,         KC_F12,      KC_F6,       TD(ALT_F7),  KC_F8,       KC_F9,       KC_F10,      KC_F11,
//    |------------+------------+------------+------------+------------+------------+------------|   |------------+------------+------------+------------+------------+------------+------------|
        KC_TRNS,     KC_TRNS,     KC_UP,       KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,         KC_TRNS,     KC_7,        KC_8,        KC_9,        KC_PAST,     KC_PSLS,     KC_RBRC,
//    |------------+------------+------------+------------+------------+------------+            |   |            +------------+------------+------------+------------+------------+------------|
        KC_TRNS,     KC_LEFT,     KC_DOWN,     KC_RGHT,     KC_TRNS,     KC_TRNS,                                   KC_4,        KC_5,        KC_6,        KC_PPLS,     KC_PMNS,     KC_TRNS,
//    |------------+------------+------------+------------+------------+------------+------------|   |------------+------------+------------+------------+------------+------------+------------|
        KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,         KC_TRNS,     KC_1,        KC_2,        KC_3,        KC_PEQL,     KC_UP,       KC_PENT,
//    |------------+------------+------------+------------+------------+------------+------------|   |------------+------------+------------+------------+------------+------------+------------|
        KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_PGUP,     KC_PGDN,                                                             KC_0,        KC_PDOT,     KC_LEFT,     KC_DOWN,     KC_RGHT,
//     `---------------------------------------------------------------'                                                       `----------------------------------------------------------------'
//                                                                     ,-------------------------.   ,-------------------------.
                                                                         KC_TRNS,     KC_TRNS,         KC_TRNS,     KC_TRNS,
//                                                        ,------------+------------+------------|   |------------+------------+------------.
                                                                                      KC_TRNS,         KC_TRNS,
//                                                        |            |            +------------|   |------------+            |            |
                                                            KC_TRNS,     KC_TRNS,     KC_TRNS,         KC_TRNS,     KC_DEL,      KC_ESC
//                                                        `--------------------------------------'   `--------------------------------------'
    ),
    [_MED] = LAYOUT_ergodox_pretty(
/* Keymap 2: Media and mouse keys
 *         ,--------------------------------------------------.                   ,--------------------------------------------------.
 *         |        |      |      |      |      |      |      |                   |      |      |      |      |      |      | Mute   |
 *         |--------+------+------+------+------+-------------|                   |------+------+------+------+------+------+--------|
 *         |        |      | MsUp |      |      |      |      |                   |      | MP7  | MP8  | MP9  |      |      |        |
 *         |--------+------+------+------+------+------|      |                   |      |------+------+------+------+------+--------|
 *         |        |MsLeft|MsDown|MsRght|      |      |------|                   |------| MP4  | MP5  | MP6  |      |      |        |
 *         |--------+------+------+------+------+------|      |                   |      |------+------+------+------+------+--------|
 *         |        |      |      |      |      |      |      |                   |      | MP1  | MP2  | MP3  |      |VolUp |        |
 *         `--------+------+------+------+------+-------------'                   `-------------+------+------+------+------+--------'
 *           |      |      |      | Lclk | Rclk |                                               |      |      | Prev |VolDn | Next |
 *           `----------------------------------'                                               `----------------------------------'
 *                                                      ,-------------.   ,-------------.
 *                                                      |RESET |      |   |      |      |
 *                                               ,------|------|------|   |------+------+------.
 *                                               |      |      |      |   |      |      |      |
 *                                               |MPENT |      |------|   |------|      |Play  |
 *                                               |      |      |      |   |      |      |      |
 *                                               `--------------------'   `--------------------'
 */
//                                                    Left hand                   Right hand
//    ,------------------------------------------------------------------------------------------.   ,------------------------------------------------------------------------------------------.
        KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,         KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_MUTE,
//    |------------+------------+------------+------------+------------+------------+------------|   |------------+------------+------------+------------+------------+------------+------------|
        KC_TRNS,     KC_TRNS,     KC_MS_U,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,         KC_TRNS,     MEH(KC_P7),  MEH(KC_P8),  MEH(KC_P9),  KC_TRNS,     KC_TRNS,     KC_TRNS,
//    |------------+------------+------------+------------+------------+------------+            |   |            +------------+------------+------------+------------+------------+------------|
        KC_TRNS,     KC_MS_L,     KC_MS_D,     KC_MS_R,     KC_TRNS,     KC_TRNS,                                   MEH(KC_P4),  MEH(KC_P5),  MEH(KC_P6),  KC_TRNS,     KC_TRNS,     KC_TRNS,
//    |------------+------------+------------+------------+------------+------------+------------|   |------------+------------+------------+------------+------------+------------+------------|
        KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,         KC_TRNS,     MEH(KC_P1),  MEH(KC_P2),  MEH(KC_P3),  KC_TRNS,     KC_VOLU,     KC_TRNS,
//    |------------+------------+------------+------------+------------+------------+------------|   |------------+------------+------------+------------+------------+------------+------------|
        KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_BTN1,     KC_BTN2,                                                             KC_TRNS,     KC_TRNS,     KC_MPRV,     KC_VOLD,     KC_MNXT,
//     `---------------------------------------------------------------'                                                       `----------------------------------------------------------------'
//                                                                     ,-------------------------.   ,-------------------------.
                                                                         RESET,       KC_TRNS,         KC_TRNS,     KC_TRNS,
//                                                        ,------------+------------+------------|   |------------+------------+------------.
                                                                                      KC_TRNS,         KC_TRNS,
//                                                        |            |            +------------|   |------------+            |            |
                                                           MEH(KC_PENT), KC_TRNS,     KC_TRNS,         KC_TRNS,     KC_TRNS,     KC_MPLY
//                                                        `--------------------------------------'   `--------------------------------------'
    )
};

A users/imchipwood/imchipwood.c => users/imchipwood/imchipwood.c +141 -0
@@ 0,0 1,141 @@
/* Copyright 2021 imchipwood
  *
  * 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 "imchipwood.h"

static td_state_t td_state[3];

// determine the tapdance state to return
int cur_dance(qk_tap_dance_state_t *state) {
    if (state->count == 1) {
        if (state->interrupted || !state->pressed) {
            return SINGLE_TAP;
        } else {
            return SINGLE_HOLD;
        }
    }
    if (state->count == 2) {
        return DOUBLE_TAP;
    } else {
        return 3;
    }  // any number higher than the maximum state value you return above
}

void altf2_finished(qk_tap_dance_state_t *state, void *user_data) {
    td_state[0] = cur_dance(state);
    switch (td_state[0]) {
        case SINGLE_TAP:
            register_code(KC_F2);
            break;
        case SINGLE_HOLD:
            register_mods(MOD_BIT(KC_LALT));
            break;
        case DOUBLE_TAP:
            register_mods(MOD_BIT(KC_LALT));
            tap_code(KC_F2);
            break;
    }
}

void altf2_reset(qk_tap_dance_state_t *state, void *user_data) {
    switch (td_state[0]) {
        case SINGLE_TAP:
            unregister_code(KC_F2);
            break;
        case SINGLE_HOLD:
            unregister_mods(MOD_BIT(KC_LALT));
            break;
        case DOUBLE_TAP:
            unregister_code(KC_F2);
            unregister_mods(MOD_BIT(KC_LALT));
            break;
    }
}


void ctlf5_finished(qk_tap_dance_state_t *state, void *user_data) {
    td_state[1] = cur_dance(state);
    switch (td_state[1]) {
        case SINGLE_TAP:
            register_code(KC_F5);
            break;
        case SINGLE_HOLD:
            register_mods(MOD_BIT(KC_LCTL));
            break;
        case DOUBLE_TAP:
            register_mods(MOD_BIT(KC_LCTL));
            tap_code(KC_F5);
            break;
    }
}

void ctlf5_reset(qk_tap_dance_state_t *state, void *user_data) {
    switch (td_state[1]) {
        case SINGLE_TAP:
            unregister_code(KC_F5);
            break;
        case SINGLE_HOLD:
            unregister_mods(MOD_BIT(KC_LCTL));
            break;
        case DOUBLE_TAP:
            unregister_code(KC_F5);
            unregister_mods(MOD_BIT(KC_LCTL));
            break;
    }
}

void altf7_finished(qk_tap_dance_state_t *state, void *user_data) {
    td_state[2] = cur_dance(state);
    switch (td_state[2]) {
        case SINGLE_TAP:
            register_code(KC_F7);
            break;
        case SINGLE_HOLD:
            register_mods(MOD_BIT(KC_LALT));
            break;
        case DOUBLE_TAP:
            register_mods(MOD_BIT(KC_LALT));
            tap_code(KC_F7);
            break;
    }
}

void altf7_reset(qk_tap_dance_state_t *state, void *user_data) {
    switch (td_state[2]) {
        case SINGLE_TAP:
            unregister_code(KC_F7);
            break;
        case SINGLE_HOLD:
            unregister_mods(MOD_BIT(KC_LALT));
            break;
        case DOUBLE_TAP:
            unregister_code(KC_F7);
            unregister_mods(MOD_BIT(KC_LALT));
            break;
    }
}

qk_tap_dance_action_t tap_dance_actions[] = {
    [ALT_F2]   = ACTION_TAP_DANCE_FN_ADVANCED(NULL, altf2_finished, altf2_reset),
    [CTL_F5]   = ACTION_TAP_DANCE_FN_ADVANCED(NULL, ctlf5_finished, ctlf5_reset),
    [ALT_F7]   = ACTION_TAP_DANCE_FN_ADVANCED(NULL, altf7_finished, altf7_reset),
    [DEL_NLCK] = ACTION_TAP_DANCE_DOUBLE(KC_DEL, KC_NLCK),
    // Double tap right -> END
    [TD_REND] = ACTION_TAP_DANCE_DOUBLE(KC_RIGHT, KC_END),
    // Double tap left -> HOME
    [TD_LOME] = ACTION_TAP_DANCE_DOUBLE(KC_LEFT, KC_HOME),
    // Double tap right shift -> CAPS LOCK
    [TD_RSFT_CAPS] = ACTION_TAP_DANCE_DOUBLE(KC_RSFT, KC_CAPS),
};

A users/imchipwood/imchipwood.h => users/imchipwood/imchipwood.h +51 -0
@@ 0,0 1,51 @@
/* Copyright 2021 imchipwood
  *
  * 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"

// change the tapping term to a little bit quicker
#ifdef TAPPING_TERM
  #undef TAPPING_TERM
#endif
#define TAPPING_TERM    175

#ifdef TAPPING_TOGGLE
  #undef TAPPING_TOGGLE
#endif
#define TAPPING_TOGGLE 2


enum td_keycodes {
    TD_REND = 0, // right when tapped, end when double tapped
    TD_LOME,     // left when tapped, home when double tapped
    TD_RSFT_CAPS,
    ALT_F2,    // F2 when tapped, LALT when held, LALT+F2 when double tapped
    CTL_F5,    // F5 when tapped, LCTL when held, LCTL+F5 when double tapped
    ALT_F7,    // F7 when tapped, LALT when held, LALT+F7 when double tapped
    DEL_NLCK,  // DEL when tapped, NUMLOCK when double tapped
};


typedef enum { SINGLE_TAP, SINGLE_HOLD, DOUBLE_TAP } td_state_t;
int cur_dance(qk_tap_dance_state_t *state);

void altf2_finished(qk_tap_dance_state_t *state, void *user_data);
void altf2_reset(qk_tap_dance_state_t *state, void *user_data);
void ctlf5_finished(qk_tap_dance_state_t *state, void *user_data);
void ctlf5_reset(qk_tap_dance_state_t *state, void *user_data);
void altf7_finished(qk_tap_dance_state_t *state, void *user_data);
void altf7_reset(qk_tap_dance_state_t *state, void *user_data);

A users/imchipwood/rules.mk => users/imchipwood/rules.mk +2 -0
@@ 0,0 1,2 @@
SRC += imchipwood.c
TAP_DANCE_ENABLE=yes