Skip to content

Instantly share code, notes, and snippets.

@unycone
Created September 19, 2018 03:02
Show Gist options
  • Save unycone/87be2535a43d7eb7842f29a6c360d2e7 to your computer and use it in GitHub Desktop.
Save unycone/87be2535a43d7eb7842f29a6c360d2e7 to your computer and use it in GitHub Desktop.

Revisions

  1. unycone created this gist Sep 19, 2018.
    107 changes: 107 additions & 0 deletions keymap.c
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,107 @@
    #include "iris.h"
    #include "action_layer.h"
    #include "eeconfig.h"

    extern keymap_config_t keymap_config;

    #define MODS_SHIFT_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
    #define MODS_CTRL_MASK (MOD_BIT(KC_LCTL)|MOD_BIT(KC_RCTRL))
    #define MODS_ALT_MASK (MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
    #define MODS_GUI_MASK (MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI))
    #define MODS_NONE 0

    const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

    // Layer 0
    LAYOUT(
    KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, // Left R1
    KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, // Right R1
    KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, // Left R2
    KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,// Right R2
    KC_LCTL,KC_A, KC_S, KC_D, KC_F, KC_G, // Left R3
    KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,// Right R3
    MT(MOD_LSFT,KC_ESC), MT(MOD_LSFT,KC_GRV), KC_Z, KC_X, KC_C, KC_V, // Left R4
    KC_LBRC,KC_RBRC, // Thumb Top
    KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,// Right R4
    KC_LALT,MT(MOD_LGUI, KC_LANG2), KC_SPC, // Left Thumb Bottom
    KC_ENT, LT(1, KC_LANG1), KC_BSPC // Right Thumb Bottom
    ),

    // Layer 1
    LAYOUT(
    KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, // Left R1
    KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, // Right R1
    KC_TRNS,KC_TRNS,KC_UP, KC_TRNS,KC_TRNS,KC_TRNS,// Left R2
    KC_TRNS,KC_TRNS,KC_TRNS,KC_MUTE,KC_VOLD,KC_VOLU,// Right R2
    KC_TRNS,KC_LEFT,KC_DOWN,KC_RGHT,KC_TRNS,KC_TRNS,// Left R3
    KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,// Right R3
    F(0), KC_TRNS,KC_TRNS,BL_DEC, BL_TOGG,BL_INC, // Left R4
    KC_TRNS,KC_TRNS, // Thumb Top
    KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,// Right R4
    KC_TRNS,KC_TRNS,KC_TRNS, // Left Thumb Bottom
    KC_TRNS,KC_TRNS,KC_TRNS // Right Thumb Bottom
    )
    };

    enum function_id {
    LOCK_SCREEN = 0,
    CAPTURE_SCREEN = 1,
    };

    const uint16_t PROGMEM fn_actions[] = {
    [0] = ACTION_FUNCTION(LOCK_SCREEN), // In OSX High Sierra, lock screen
    [1] = ACTION_FUNCTION(CAPTURE_SCREEN), // Capture selected region to file
    };

    void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
    switch (id) {
    case LOCK_SCREEN:
    // Cmd + Ctrl + Q
    if (record->event.pressed) {
    register_code(KC_LGUI);
    register_code(KC_LCTRL);
    add_key(KC_Q);
    send_keyboard_report();
    } else {
    del_key(KC_Q);
    unregister_code(KC_LCTRL);
    unregister_code(KC_LGUI);
    send_keyboard_report();
    }
    break;
    case CAPTURE_SCREEN:
    // Cmd + Shift + 4
    if (record->event.pressed) {
    register_code(KC_LGUI);
    register_code(KC_LSFT);
    add_key(KC_4);
    send_keyboard_report();
    } else {
    del_key(KC_4);
    unregister_code(KC_LSFT);
    unregister_code(KC_LGUI);
    send_keyboard_report();
    }
    }
    }

    bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    switch(keycode) {
    case KC_1:
    if (record->event.pressed) {
    if (keyboard_report->mods & MODS_GUI_MASK) {
    del_key(KC_ESC);
    add_key(KC_F1);
    send_keyboard_report();
    del_key(KC_F1);
    send_keyboard_report();
    return false;
    }
    }
    return true;
    break;
    default:
    return true;
    }
    return true;
    }