summaryrefslogtreecommitdiffstats
path: root/keyboards/40percentclub/gherkin/keymaps/midi/keymap.c
blob: b1ded193fe6887567c6cf77d5fa98bb0aba2c4d0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include QMK_KEYBOARD_H

enum layer_number {
  _IONIAN = 0,
  _DORIAN,
  _PHRYGIAN,
  _LYDIAN,
  _MIXOLYDIAN,
  _AEOLIAN,
  _LOCRIAN,
  _MENU
};

enum custom_keycodes {
  IONIAN = SAFE_RANGE,
  DORIAN,
  PHRYGIAN,
  LYDIAN,
  MIXOLYDIAN,
  AEOLIAN,
  LOCRIAN,
};

#define MENU MO(_MENU)

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  [_IONIAN] = LAYOUT_ortho_3x10(
    MI_C1,  MI_F1,  MI_B1,  MI_E2,  MI_A2,  MI_D3,  MI_G3,  MI_C4,  MI_OCTD, MI_OCTU,
    MI_D1,  MI_G1,  MI_C2,  MI_F2,  MI_B2,  MI_E3,  MI_A3,  MI_D4,  MI_TRSD, MI_TRSU,
    MI_E1,  MI_A1,  MI_D2,  MI_G2,  MI_C3,  MI_F3,  MI_B3,  MI_E4,  MI_SUST, MENU
  ),

  [_DORIAN] = LAYOUT_ortho_3x10(
    MI_C1,  MI_F1,  MI_As1, MI_Ds2, MI_A2,  MI_D3,  MI_G3,  MI_C4,  _______, _______,
    MI_D1,  MI_G1,  MI_C2,  MI_F2,  MI_As2, MI_Ds3, MI_A3,  MI_D4,  _______, _______,
    MI_Ds1, MI_A1,  MI_D2,  MI_G2,  MI_C3,  MI_F3,  MI_As3, MI_Ds4, _______, _______
  ),

  [_PHRYGIAN] = LAYOUT_ortho_3x10(
    MI_C1,  MI_F1,  MI_As1, MI_Ds2, MI_Gs2, MI_Cs3, MI_G3,  MI_C4,  _______, _______,
    MI_Cs1, MI_G1,  MI_C2,  MI_F2,  MI_As2, MI_Ds3, MI_Gs3, MI_Cs4, _______, _______,
    MI_Ds1, MI_Gs1, MI_Cs2, MI_G2,  MI_C3,  MI_F3,  MI_As3, MI_Ds4, _______, _______
  ),

  [_LYDIAN] = LAYOUT_ortho_3x10(
    MI_C1,  MI_Fs1, MI_B1,  MI_E2,  MI_A2,  MI_D3,  MI_G3,  MI_C4,  _______, _______,
    MI_D1,  MI_G1,  MI_C2,  MI_Fs2, MI_B2,  MI_E3,  MI_A3,  MI_D4,  _______, _______,
    MI_E1,  MI_A1,  MI_D2,  MI_G2,  MI_C3,  MI_Fs3, MI_B3,  MI_E4,  _______, _______
  ),

  [_MIXOLYDIAN] = LAYOUT_ortho_3x10(
    MI_C1,  MI_F1,  MI_As1, MI_E2,  MI_A2,  MI_D3,  MI_G3,  MI_C4,  _______, _______,
    MI_D1,  MI_G1,  MI_C2,  MI_F2,  MI_As2, MI_E3,  MI_A3,  MI_D4,  _______, _______,
    MI_E1,  MI_A1,  MI_D2,  MI_G2,  MI_C3,  MI_F3,  MI_As3, MI_E4,  _______, _______
  ),

  [_AEOLIAN] = LAYOUT_ortho_3x10(
    MI_C1,  MI_F1,  MI_As1, MI_Ds2, MI_Gs2, MI_D3,  MI_G3,  MI_C4,  _______, _______,
    MI_D1,  MI_G1,  MI_C2,  MI_F2,  MI_As2, MI_Ds3, MI_Gs3, MI_D4,  _______, _______,
    MI_Ds1, MI_Gs1, MI_D2,  MI_G2,  MI_C3,  MI_F3,  MI_As3, MI_Ds4, _______, _______
  ),

  [_LOCRIAN] = LAYOUT_ortho_3x10(
    MI_C1,  MI_F1,  MI_As1, MI_Ds2, MI_Gs2, MI_Cs3, MI_Fs3, MI_C4,  _______, _______,
    MI_Cs1, MI_Fs1, MI_C2,  MI_F2,  MI_As2, MI_Ds3, MI_Gs3, MI_Cs4, _______, _______,
    MI_Ds1, MI_Gs1, MI_Cs2, MI_Fs2, MI_C3,  MI_F3,  MI_As3, MI_Ds4, _______, _______
  ),

  [_MENU] = LAYOUT_ortho_3x10(
    IONIAN,   LYDIAN,     LOCRIAN, _______, _______, _______, _______, _______, _______, _______,
    DORIAN,   MIXOLYDIAN, _______, _______, _______, _______, _______, _______, _______, _______,
    PHRYGIAN, AEOLIAN,    _______, _______, _______, _______, _______, _______, QK_BOOT, _______
  )
};

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  switch (keycode) {
    case IONIAN:
      if (record->event.pressed) {
        set_single_persistent_default_layer(_IONIAN);
      }
      break;
    case DORIAN:
      if (record->event.pressed) {
        set_single_persistent_default_layer(_DORIAN);
      }
      break;
    case PHRYGIAN:
      if (record->event.pressed) {
        set_single_persistent_default_layer(_PHRYGIAN);
      }
      break;
    case LYDIAN:
      if (record->event.pressed) {
        set_single_persistent_default_layer(_LYDIAN);
      }
      break;
    case MIXOLYDIAN:
      if (record->event.pressed) {
        set_single_persistent_default_layer(_MIXOLYDIAN);
      }
      break;
    case AEOLIAN:
      if (record->event.pressed) {
        set_single_persistent_default_layer(_AEOLIAN);
      }
      break;
    case LOCRIAN:
      if (record->event.pressed) {
        set_single_persistent_default_layer(_LOCRIAN);
      }
      break;
  }
  return true;
}