~ruther/qmk_firmware

60f9abca1245640e12d65aa60f5953ff1719408f — noroadsleft 6 years ago 2589230
handwired/CMD60 Refactor, Configurator support and readme update (#4632)

* handwired/CMD60: refactor

- renamed layout macro KEYMAP to LAYOUT
- removed K2C, K3B and K3C locations (indications are these locations were unused in hardware)
- keymap
  - now uses #include QMK_KEYBOARD_H
  - converted keycodes to short format
  - deleted TMK fn_actions and action_get_macro blocks
  - white space changes (readability/alignment)

* handwired/CMD60: Configurator support

* handwired/CMD60: readme update

- updated to conform to current QMK template
- added image and build gallery links

* handwired/cmd60: rename all files and folders to lowercase
10 files changed, 160 insertions(+), 122 deletions(-)

D keyboards/handwired/CMD60/CMD60.h
D keyboards/handwired/CMD60/README.md
D keyboards/handwired/CMD60/keymaps/default/keymap.c
R keyboards/handwired/{CMD60/CMD60 => cmd60/cmd60}.c
A keyboards/handwired/cmd60/cmd60.h
R keyboards/handwired/{CMD60 => cmd60}/config.h
A keyboards/handwired/cmd60/info.json
A keyboards/handwired/cmd60/keymaps/default/keymap.c
A keyboards/handwired/cmd60/readme.md
R keyboards/handwired/{CMD60 => cmd60}/rules.mk
D keyboards/handwired/CMD60/CMD60.h => keyboards/handwired/CMD60/CMD60.h +0 -20
@@ 1,20 0,0 @@
#ifndef CMD60_H
#define CMD60_H

#include "quantum.h"

#define KEYMAP( \
    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \
    K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
    K40, K41, K42,           K45,                     K4A, K4B, K4C, K4D  \
    ) { \
  {  K00,  K01,  K02,  K03,    K04,    K05,  K06,    K07,    K08,    K09,  K0A,  K0B,  K0C,  K0D  },  \
  {  K10,  K11,  K12,  K13,    K14,    K15,  K16,    K17,    K18,    K19,  K1A,  K1B,  K1C,  K1D  },  \
  {  K20,  K21,  K22,  K23,    K24,    K25,  K26,    K27,    K28,    K29,  K2A,  K2B,  K2C,  K2D  },  \
  {  K30,  K31,  K32,  K33,    K34,    K35,  K36,    K37,    K38,    K39,  K3A,  K3B,  K3C,  K3D  },  \
  {  K40,  K41,  K42,  KC_NO,  KC_NO,  K45,  KC_NO,  KC_NO,  KC_NO,  KC_NO,K4A,  K4B,  K4C,  K4D  }   \
}

#endif
\ No newline at end of file

D keyboards/handwired/CMD60/README.md => keyboards/handwired/CMD60/README.md +0 -35
@@ 1,35 0,0 @@
CMD60 keyboard firmware
======================

##CMD60

This layout has been designed to optimize use of the left-hand, and it focussed specifically on programmers who work
with text editors like SublimeText and Atom. It utilizes the power of Space_fn, and features a caps lock swap for Fn2
and enter key on tap. These features allow you to keep your right hand on the mouse more and should enable you to
achieve a higher level of productivity if you take the time to learn its function layers.

## Quantum MK Firmware

For the full Quantum feature list, see [the parent readme.md](/docs/README.md).

## Building

Download or clone the whole firmware and navigate to the keyboards/handwired/CMD60 folder.
Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use
the Teensy Loader to program your .hex file.

Depending on which keymap you would like to use, you will have to compile slightly differently.

### Default

To build with the default keymap, simply run `make`.

### Other Keymaps

To build the firmware binary hex file with a keymap just do `make` with `keymap` option like:

```
$ make keymap=[default|jack|<name>]
```

Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/`

D keyboards/handwired/CMD60/keymaps/default/keymap.c => keyboards/handwired/CMD60/keymaps/default/keymap.c +0 -66
@@ 1,66 0,0 @@
#include "CMD60.h"

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  [0] = KEYMAP( /* CMD60 - QWERTY */
      KC_ESC,   KC_1,     KC_2,     KC_3,    KC_4,     KC_5,     KC_6,     KC_7,    KC_8,  KC_9,     KC_0,     KC_MINS,  KC_EQL,   KC_BSPC,  \
      KC_TAB,   KC_Q,     KC_W,     KC_E,    KC_R,     KC_T,     KC_Y,     KC_U,    KC_I,  KC_O,     KC_P,     KC_LBRC,  KC_RBRC,  KC_BSLS,  \
      LT(3, KC_ENT),  KC_A,     KC_S,     KC_D,    KC_F,     KC_G,     KC_H,     KC_J,    KC_K,  KC_L,     KC_SCLN,  KC_QUOT,  KC_NO,    KC_ENT,   \
      KC_LSFT,  KC_Z,    KC_X,     KC_C,    KC_V,     KC_B,     KC_N,     KC_M,    KC_COMM,  KC_DOT,  KC_SLSH,   KC_NO,  KC_NO,    KC_RSFT,  \
      KC_LCTL,  KC_LGUI,  KC_LALT,                     LT(2, KC_SPC),                                       MO(3),  MO(4),  MO(5),  TG(1) \
  ),
  [1] = KEYMAP( /* CMD60 - GameMode */
      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_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_TRNS,  KC_TRNS,  \
      KC_CAPS,  KC_TRNS,  KC_TRNS,     KC_TRNS,    KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,    KC_TRNS,  KC_TRNS,     KC_TRNS,  KC_TRNS,  KC_NO,    KC_TRNS,   \
      KC_LSFT,  KC_TRNS,    KC_TRNS,     KC_TRNS,    KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,    KC_TRNS,  KC_TRNS,  KC_TRNS,   KC_NO,  KC_NO,    KC_RSFT,  \
      KC_TRNS,  KC_NO,  KC_TRNS,                     KC_SPC,                                       KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS \
  ),
  [2] = KEYMAP( /* CMD60 - Arrows */
      KC_GRV,   KC_F1,     KC_F2,     KC_F3,    KC_F4,     KC_F5,     KC_F6,     KC_F7,    KC_F8,  KC_F9,     KC_F10,     KC_F11,  KC_F12,   KC_DEL,  \
      KC_TRNS,   KC_BSPC,     KC_UP,     KC_DEL,    KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_BSPC,    KC_UP,  KC_DEL,     KC_PSCR,     KC_SLCK,  KC_PAUS,  KC_TRNS,  \
      KC_TRNS,  KC_LEFT,  KC_DOWN,     KC_RIGHT,    KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_LEFT,    KC_DOWN,  KC_RIGHT,     KC_TRNS,  KC_TRNS,  KC_NO,    KC_TRNS,   \
      KC_TRNS,  KC_TRNS,    KC_TRNS,     KC_TRNS,    KC_SPC,     KC_TRNS,     KC_TRNS,     KC_TRNS,    KC_TRNS,  KC_TRNS,  KC_TRNS,   KC_NO,  KC_NO,    KC_TRNS,  \
      KC_TRNS,  KC_TRNS,  KC_TRNS,                     KC_TRNS,                                       KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS \
  ),
  [3] = KEYMAP( /* CMD60 - Functions */
      KC_GRV,   KC_F1,     KC_F2,     KC_F3,    KC_F4,     KC_F5,     KC_F6,     KC_F7,    KC_F8,  KC_F9,     KC_F10,     KC_F11,  KC_F12,   KC_DEL,  \
      KC_AUDIO_MUTE,   KC_BSPC,     KC_PGUP,     KC_DEL,    KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_PGUP,    KC_UP,  KC_PGDN,     KC_TRNS,     KC_PAUSE,  KC_SLCK,  KC_PSCREEN,  \
      KC_TRNS,  KC_HOME,  KC_PGDN,     KC_END,    KC_TRNS,     KC_TRNS,     KC_HOME,     KC_LEFT,    KC_DOWN,  KC_RIGHT,     KC_TRNS,  KC_INSERT,  KC_NO,    KC_TRNS,   \
      KC_TRNS,  KC_TRNS,    KC_TRNS,     KC_TRNS,    KC_TRNS,     KC_TRNS,     KC_END,     KC_TRNS,    KC_TRNS,  KC_TRNS,  KC_TRNS,   KC_NO,  KC_NO,    KC_TRNS,  \
      KC_TRNS,  KC_TRNS,  KC_TRNS,                     KC_TRNS,                                       KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS \
  ),
  [4] = KEYMAP( /* CMD60 - Mouse */
      KC_SYSTEM_SLEEP,   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_TRNS,   KC_TRNS,     KC_TRNS,     KC_TRNS,    KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,    KC_MS_BTN1,  KC_MS_UP,     KC_MS_BTN2,     KC_TRNS,  KC_TRNS,  KC_TRNS,  \
      KC_TRNS,  KC_TRNS,  KC_TRNS,     KC_TRNS,    KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,    KC_MS_LEFT,  KC_MS_DOWN,     KC_MS_RIGHT,  KC_TRNS,  KC_NO,    KC_TRNS,   \
      KC_TRNS,  KC_TRNS,    KC_TRNS,     KC_TRNS,    KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,    KC_MS_WH_UP,  KC_MS_BTN3,  KC_MS_WH_DOWN,   KC_NO,  KC_NO,    KC_TRNS,  \
      KC_TRNS,  KC_TRNS,  KC_TRNS,                     KC_TRNS,                                       KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS \
  ),
  [5] = KEYMAP( /* CMD60 - Media */
      KC_SYSTEM_WAKE,   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_TRNS,   KC_TRNS,     KC_TRNS,     KC_TRNS,    KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,    KC_TRNS,  KC_TRNS,     KC_TRNS,     KC_AUDIO_VOL_DOWN,  KC_AUDIO_VOL_UP,  KC_AUDIO_MUTE,  \
      KC_TRNS,  KC_TRNS,  KC_TRNS,     KC_TRNS,    KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,    KC_TRNS,  KC_TRNS,     KC_TRNS,  KC_MEDIA_PREV_TRACK,  KC_MEDIA_NEXT_TRACK,    KC_MEDIA_PLAY_PAUSE,   \
      KC_TRNS,  KC_TRNS,    KC_TRNS,     KC_TRNS,    KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,    KC_TRNS,  KC_WWW_BACK,  KC_WWW_FORWARD,   KC_NO,  KC_NO,    KC_WWW_REFRESH,  \
      KC_TRNS,  KC_TRNS,  KC_TRNS,                     KC_TRNS,                                       KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS \
  ),
};

const uint16_t PROGMEM fn_actions[] = {

};


const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
  // MACRODOWN only works in this function
      switch(id) {
        case 0:
          if (record->event.pressed) {
            register_code(KC_RSFT);
          } else {
            unregister_code(KC_RSFT);
          }
        break;
      }
    return MACRO_NONE;
};

R keyboards/handwired/CMD60/CMD60.c => keyboards/handwired/cmd60/cmd60.c +1 -1
@@ 1,4 1,4 @@
#include "CMD60.h"
#include "cmd60.h"

void matrix_init_kb(void) {
	// put your keyboard start-up code here

A keyboards/handwired/cmd60/cmd60.h => keyboards/handwired/cmd60/cmd60.h +20 -0
@@ 0,0 1,20 @@
#ifndef CMD60_H
#define CMD60_H

#include "quantum.h"

#define LAYOUT( \
    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B,      K2D, \
    K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A,           K3D, \
    K40, K41, K42,           K45,                     K4A, K4B, K4C, K4D  \
    ) { \
  {  K00,  K01,  K02,  K03,    K04,    K05,  K06,    K07,    K08,    K09,    K0A,  K0B,    K0C,    K0D  }, \
  {  K10,  K11,  K12,  K13,    K14,    K15,  K16,    K17,    K18,    K19,    K1A,  K1B,    K1C,    K1D  }, \
  {  K20,  K21,  K22,  K23,    K24,    K25,  K26,    K27,    K28,    K29,    K2A,  K2B,    KC_NO,  K2D  }, \
  {  K30,  K31,  K32,  K33,    K34,    K35,  K36,    K37,    K38,    K39,    K3A,  KC_NO,  KC_NO,  K3D  }, \
  {  K40,  K41,  K42,  KC_NO,  KC_NO,  K45,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  K4A,  K4B,    K4C,    K4D  }  \
}

#endif

R keyboards/handwired/CMD60/config.h => keyboards/handwired/cmd60/config.h +0 -0
A keyboards/handwired/cmd60/info.json => keyboards/handwired/cmd60/info.json +74 -0
@@ 0,0 1,74 @@
{
  "keyboard_name": "CMD60",
  "url": "",
  "maintainer": "qmk",
  "width": 15,
  "height": 5,
  "layouts": {
    "LAYOUT": {
      "layout": [
        {"label":"`", "x":0, "y":0},
        {"label":"1", "x":1, "y":0},
        {"label":"2", "x":2, "y":0},
        {"label":"3", "x":3, "y":0},
        {"label":"4", "x":4, "y":0},
        {"label":"5", "x":5, "y":0},
        {"label":"6", "x":6, "y":0},
        {"label":"7", "x":7, "y":0},
        {"label":"8", "x":8, "y":0},
        {"label":"9", "x":9, "y":0},
        {"label":"0", "x":10, "y":0},
        {"label":"-", "x":11, "y":0},
        {"label":"=", "x":12, "y":0},
        {"label":"Backspace", "x":13, "y":0, "w":2},
        {"label":"Tab", "x":0, "y":1, "w":1.5},
        {"label":"Q", "x":1.5, "y":1},
        {"label":"W", "x":2.5, "y":1},
        {"label":"E", "x":3.5, "y":1},
        {"label":"R", "x":4.5, "y":1},
        {"label":"T", "x":5.5, "y":1},
        {"label":"Y", "x":6.5, "y":1},
        {"label":"U", "x":7.5, "y":1},
        {"label":"I", "x":8.5, "y":1},
        {"label":"O", "x":9.5, "y":1},
        {"label":"P", "x":10.5, "y":1},
        {"label":"[", "x":11.5, "y":1},
        {"label":"]", "x":12.5, "y":1},
        {"label":"\\", "x":13.5, "y":1, "w":1.5},
        {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
        {"label":"A", "x":1.75, "y":2},
        {"label":"S", "x":2.75, "y":2},
        {"label":"D", "x":3.75, "y":2},
        {"label":"F", "x":4.75, "y":2},
        {"label":"G", "x":5.75, "y":2},
        {"label":"H", "x":6.75, "y":2},
        {"label":"J", "x":7.75, "y":2},
        {"label":"K", "x":8.75, "y":2},
        {"label":"L", "x":9.75, "y":2},
        {"label":";", "x":10.75, "y":2},
        {"label":"'", "x":11.75, "y":2},
        {"label":"Enter", "x":12.75, "y":2, "w":2.25},
        {"label":"Shift", "x":0, "y":3, "w":2.25},
        {"label":"Z", "x":2.25, "y":3},
        {"label":"X", "x":3.25, "y":3},
        {"label":"C", "x":4.25, "y":3},
        {"label":"V", "x":5.25, "y":3},
        {"label":"B", "x":6.25, "y":3},
        {"label":"N", "x":7.25, "y":3},
        {"label":"M", "x":8.25, "y":3},
        {"label":",", "x":9.25, "y":3},
        {"label":".", "x":10.25, "y":3},
        {"label":"/", "x":11.25, "y":3},
        {"label":"Shift", "x":12.25, "y":3, "w":2.75},
        {"label":"Ctrl", "x":0, "y":4, "w":1.25},
        {"label":"GUI", "x":1.25, "y":4, "w":1.25},
        {"label":"Alt", "x":2.5, "y":4, "w":1.25},
        {"label":"Space", "x":3.75, "y":4, "w":6.25},
        {"label":"Alt", "x":10, "y":4, "w":1.25},
        {"label":"GUI", "x":11.25, "y":4, "w":1.25},
        {"label":"Menu", "x":12.5, "y":4, "w":1.25},
        {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}
      ]
    }
  }
}

A keyboards/handwired/cmd60/keymaps/default/keymap.c => keyboards/handwired/cmd60/keymaps/default/keymap.c +46 -0
@@ 0,0 1,46 @@
#include QMK_KEYBOARD_H

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  [0] = LAYOUT( /* CMD60 - QWERTY */
      KC_ESC,        KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_BSPC, \
      KC_TAB,        KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS, \
      LT(3, KC_ENT), KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,          KC_ENT,  \
      KC_LSFT,       KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH,                   KC_RSFT, \
      KC_LCTL,       KC_LGUI, KC_LALT,                            LT(2, KC_SPC),                      MO(3),   MO(4),   MO(5),   TG(1)    \
  ),
  [1] = LAYOUT( /* CMD60 - GameMode */
      _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
      _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
      KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______, \
      KC_LSFT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,                   KC_RSFT, \
      _______, XXXXXXX, _______,                            KC_SPC,                             _______, _______, _______, _______  \
  ),
  [2] = LAYOUT( /* CMD60 - Arrows */
      KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_DEL,  \
      _______, KC_BSPC, KC_UP,   KC_DEL,  _______, _______, _______, KC_BSPC, KC_UP,   KC_DEL,  KC_PSCR, KC_SLCK, KC_PAUS, _______, \
      _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______,          _______, \
      _______, _______, _______, _______, KC_SPC,  _______, _______, _______, _______, _______, _______,                   _______, \
      _______, _______, _______,                            _______,                            _______, _______, _______, _______  \
  ),
  [3] = LAYOUT( /* CMD60 - Functions */
      KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_DEL,  \
      KC_MUTE, KC_BSPC, KC_PGUP, KC_DEL,  _______, _______, _______, KC_PGUP, KC_UP,   KC_PGDN, _______, KC_PAUS, KC_SLCK, KC_PSCR, \
      _______, KC_HOME, KC_PGDN, KC_END,  _______, _______, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, _______, KC_INS,           _______, \
      _______, _______, _______, _______, _______, _______, KC_END,  _______, _______, _______, _______,                   _______, \
      _______, _______, _______,                            _______,                            _______, _______, _______, _______  \
  ),
  [4] = LAYOUT( /* CMD60 - Mouse */
      KC_SLEP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
      _______, _______, _______, _______, _______, _______, _______, _______, KC_BTN1, KC_MS_U, KC_BTN2, _______, _______, _______, \
      _______, _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______,          _______, \
      _______, _______, _______, _______, _______, _______, _______, _______, KC_WH_U, KC_BTN3, KC_WH_D,                   _______, \
      _______, _______, _______,                            _______,                            _______, _______, _______, _______  \
  ),
  [5] = LAYOUT( /* CMD60 - Media */
      KC_WAKE, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
      _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, \
      _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MNXT,          KC_MPLY, \
      _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_WBAK, KC_WFWD,                   KC_WREF, \
      _______, _______, _______,                            _______,                            _______, _______, _______, _______  \
  ),
};

A keyboards/handwired/cmd60/readme.md => keyboards/handwired/cmd60/readme.md +19 -0
@@ 0,0 1,19 @@
# CMD60

![CMD60](https://i.imgur.com/r9LA6Lx.jpg)

This layout has been designed to optimize use of the left-hand, and it focussed specifically on programmers who work
with text editors like SublimeText and Atom. It utilizes the power of Space_fn, and features a caps lock swap for Fn2
and enter key on tap. These features allow you to keep your right hand on the mouse more and should enable you to
achieve a higher level of productivity if you take the time to learn its function layers.

[Build Log](https://redd.it/4mkuu8)

Keyboard Maintainer: [The QMK Community](https://github.com/qmk)  
Hardware Supported: CMD60 handwired, Teensy 2.0  

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

    make handwired/cmd60: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).

R keyboards/handwired/CMD60/rules.mk => keyboards/handwired/cmd60/rules.mk +0 -0