~ruther/qmk_firmware

6a79d99ea2d4c72200953b35d51bb9b9d784a54b — marksard 5 years ago 2e4a75e
[Keyboard] add leftover30 by marksard (#10140)

* Keyboard: add treeadstone48

* rename layout defines

* Use of pragma once

* move common include code

* fixed info.json

* change keymap layout from kc to normal

* fix alpha revision keymap

* fixed info.json

* remove USE_Link_Time_Optimization

* Add keyboard leftover30

* update keymap

* Update keyboards/marksard/leftover30/config.h

I guess I was mistaken. Thank you.

* Update keyboards/marksard/leftover30/keymaps/default/keymap.c

* Update keyboards/marksard/leftover30/leftover30.c

* Update keyboards/marksard/leftover30/keymaps/default/keymap.c

* Update keyboards/marksard/leftover30/keymaps/default/keymap.c

* Update keyboards/marksard/leftover30/keymaps/default/keymap.c

* Update keyboards/marksard/leftover30/keymaps/default/keymap.c

* Update keyboards/marksard/leftover30/keymaps/default/keymap.c

* Update keyboards/marksard/leftover30/keymaps/default/keymap.c

* Update keyboards/marksard/leftover30/keymaps/default/keymap.c

* Update keyboards/marksard/leftover30/keymaps/default/keymap.c

* Update keyboards/marksard/leftover30/keymaps/default/keymap.c

* changed user led custom method

* Update keyboards/marksard/leftover30/config.h

* Update keyboards/marksard/leftover30/config.h

* Update keyboards/marksard/leftover30/keymaps/default/rules.mk

* Update keyboards/marksard/leftover30/rules.mk

* Update from other review

* Update keyboards/marksard/leftover30/readme.md

* fixed kanji key procedure

* Update keyboards/marksard/leftover30/config.h

* Update keyboards/marksard/leftover30/config.h

* Update keyboards/marksard/leftover30/config.h

* fixed by review
A keyboards/marksard/leftover30/config.h => keyboards/marksard/leftover30/config.h +138 -0
@@ 0,0 1,138 @@
/*
Copyright 2020 marksard

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 0xDFA8
#define DEVICE_VER 0x0001
#define MANUFACTURER marksard
#define PRODUCT leftover30

/* Encoder */
#define ENCODERS_PAD_A { F4 }
#define ENCODERS_PAD_B { F5 }
// #define ENCODER_DIRECTION_FLIP

/* key matrix size */
#define MATRIX_ROWS 8
#define MATRIX_COLS 5

/*
 * Keyboard Matrix Assignments
 *
 * Change this to how you wired your keyboard
 * COLS: AVR pins used for columns, left to right
 * ROWS: AVR pins used for rows, top to bottom
 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
 *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
 *
 */
#define MATRIX_ROW_PINS { B6, B2, F7, F6, B3, B1, D4, D0 }
#define MATRIX_COL_PINS { B5, B4, E6, D7, C6 }
#define UNUSED_PINS

/* COL2ROW, ROW2COL*/
#define DIODE_DIRECTION COL2ROW

#define RGB_DI_PIN D3
#ifdef RGB_DI_PIN
  #define RGBLED_NUM 6
  #define RGBLIGHT_HUE_STEP 8
  #define RGBLIGHT_SAT_STEP 8
  #define RGBLIGHT_VAL_STEP 8
  #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
  #define RGBLIGHT_SLEEP  /* If defined, the RGB lighting will be switched off when the host goes to sleep */
/*== all animations enable ==*/
  #define RGBLIGHT_ANIMATIONS
/*== or choose animations ==*/
//   #define RGBLIGHT_EFFECT_BREATHING
//   #define RGBLIGHT_EFFECT_RAINBOW_MOOD
//   #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
//   #define RGBLIGHT_EFFECT_SNAKE
//   #define RGBLIGHT_EFFECT_KNIGHT
//   #define RGBLIGHT_EFFECT_CHRISTMAS
//   #define RGBLIGHT_EFFECT_STATIC_GRADIENT
//   #define RGBLIGHT_EFFECT_RGB_TEST
//   #define RGBLIGHT_EFFECT_ALTERNATING
/*== customize breathing effect ==*/
  /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
  #define RGBLIGHT_BREATHE_TABLE_SIZE 256      // 256(default) or 128 or 64
  /*==== use exp() and sin() ====*/
  #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85  // 1 to 2.7
  #define RGBLIGHT_EFFECT_BREATHE_MAX    255   // 0 to 255
#endif

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

/* define if matrix has ghost (lacks anti-ghosting diodes) */
//#define MATRIX_HAS_GHOST

/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE

/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
 * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
 */
// #define GRAVE_ESC_CTRL_OVERRIDE

/*
 * Force NKRO
 *
 * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
 * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
 * makefile for this to work.)
 *
 * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
 * until the next keyboard reset.
 *
 * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
 * fully operational during normal computer usage.
 *
 * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
 * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
 * bootmagic, NKRO mode will always be enabled until it is toggled again during a
 * power-up.
 *
 */
//#define FORCE_NKRO

/*
 * Feature disable options
 *  These options are also useful to firmware size reduction.
 */

/* disable debug print */
//#define NO_DEBUG

/* disable print */
//#define NO_PRINT

/* disable action features */
//#define NO_ACTION_LAYER
//#define NO_ACTION_TAPPING
//#define NO_ACTION_ONESHOT

/* disable these deprecated features by default */
#define NO_ACTION_MACRO
#define NO_ACTION_FUNCTION

A keyboards/marksard/leftover30/info.json => keyboards/marksard/leftover30/info.json +198 -0
@@ 0,0 1,198 @@
{
    "keyboard_name": "Leftover30",
    "url": "https://github.com/marksard/Keyboards",
    "maintainer": "marksard",
    "width": 11.5,
    "height": 4,
    "layouts": {
        "LAYOUT": {
            "layout": [
                {
                    "label": "Q",
                    "x": 0.5,
                    "y": 0
                },
                {
                    "label": "W",
                    "x": 1.5,
                    "y": 0
                },
                {
                    "label": "E",
                    "x": 2.5,
                    "y": 0
                },
                {
                    "label": "R",
                    "x": 3.5,
                    "y": 0
                },
                {
                    "label": "T",
                    "x": 4.5,
                    "y": 0
                },
                {
                    "label": "Y",
                    "x": 5.5,
                    "y": 0
                },
                {
                    "label": "U",
                    "x": 6.5,
                    "y": 0
                },
                {
                    "label": "I",
                    "x": 7.5,
                    "y": 0
                },
                {
                    "label": "O",
                    "x": 8.5,
                    "y": 0
                },
                {
                    "label": "P",
                    "x": 9.5,
                    "y": 0
                },
                {
                    "label": "BS",
                    "x": 10.5,
                    "y": 0
                },
                {
                    "label": "A",
                    "x": 0.75,
                    "y": 1
                },
                {
                    "label": "S",
                    "x": 1.75,
                    "y": 1
                },
                {
                    "label": "D",
                    "x": 2.75,
                    "y": 1
                },
                {
                    "label": "F",
                    "x": 3.75,
                    "y": 1
                },
                {
                    "label": "G",
                    "x": 4.75,
                    "y": 1
                },
                {
                    "label": "H",
                    "x": 5.75,
                    "y": 1
                },
                {
                    "label": "J",
                    "x": 6.75,
                    "y": 1
                },
                {
                    "label": "K",
                    "x": 7.75,
                    "y": 1
                },
                {
                    "label": "L",
                    "x": 8.75,
                    "y": 1
                },
                {
                    "label": "Enter",
                    "x": 9.75,
                    "y": 1,
                    "w": 1.75
                },
                {
                    "label": "Z",
                    "x": 1.25,
                    "y": 2
                },
                {
                    "label": "X",
                    "x": 2.25,
                    "y": 2
                },
                {
                    "label": "C",
                    "x": 3.25,
                    "y": 2
                },
                {
                    "label": "V",
                    "x": 4.25,
                    "y": 2
                },
                {
                    "label": "B",
                    "x": 5.25,
                    "y": 2
                },
                {
                    "label": "N",
                    "x": 6.25,
                    "y": 2
                },
                {
                    "label": "M",
                    "x": 7.25,
                    "y": 2
                },
                {
                    "label": "<",
                    "x": 8.25,
                    "y": 2
                },
                {
                    "label": ">",
                    "x": 9.25,
                    "y": 2
                },
                {
                    "label": "?",
                    "x": 10.25,
                    "y": 2,
                    "w": 1.25
                },
                {
                    "label": "",
                    "x": 0,
                    "y": 3
                },
                {
                    "label": "Alt",
                    "x": 1.5,
                    "y": 3,
                    "w": 1.25
                },
                {
                    "label": "",
                    "x": 2.75,
                    "y": 3,
                    "w": 6.25
                },
                {
                    "label": "Fn1",
                    "x": 9,
                    "y": 3
                },
                {
                    "label": "Ctrl",
                    "x": 10,
                    "y": 3,
                    "w": 1.5
                }
            ]
        }
    }
}

A keyboards/marksard/leftover30/keymaps/default/config.h => keyboards/marksard/leftover30/keymaps/default/config.h +24 -0
@@ 0,0 1,24 @@
/* Copyright 2020 marksard
 *
 * 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

// place overrides here
#define TAPPING_TERM 200
#define IGNORE_MOD_TAP_INTERRUPT

#define TAPPING_LAYER_TERM 150 // Custom LT Tapping term
#define TAPPING_TERM_PER_KEY

A keyboards/marksard/leftover30/keymaps/default/keymap.c => keyboards/marksard/leftover30/keymaps/default/keymap.c +162 -0
@@ 0,0 1,162 @@
/* Copyright 2020 marksard
 *
 * 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_number {
    _BASE,
    _LOWER,
    _RAISE,
    _ADJUST,
};

enum custom_keycodes {
    RGBRST = SAFE_RANGE,
    LOWER,
    RAISE,
    KANJI,
};

// #define KC_ESAD  LT(_ADJUST, KC_ESC)
// #define KC_BSLO  LT(_LOWER, KC_BSPC)
#define KC_LOWR  MO(_LOWER)
#define KC_SPRA  LT(_RAISE, KC_SPC)
#define KC_AJST  MO(_ADJUST)

#define KC_Q_AL  LALT_T(KC_Q)
#define KC_A_CT  LCTL_T(KC_A)
#define KC_Z_SF  LSFT_T(KC_Z)
#define KC_X_AL  LALT_T(KC_X)
#define KC_ENSF  RSFT_T(KC_ENT)
#define KC_SLSF  RSFT_T(KC_SLSH)

#define KC_F1AL  LALT_T(KC_F1)
#define KC_F6CT  LCTL_T(KC_F6)
#define KC_11SF  LSFT_T(KC_F11)
#define KC_12AL  LALT_T(KC_F12)
#define KC_QUSF  RCTL_T(KC_QUOT)
#define KC_ROSF  RSFT_T(KC_RO)

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  [_BASE] = LAYOUT_all(
  //,-----------------------------------------------------------------------------------------------------------.
               KC_Q_AL,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P, KC_BSPC,
  //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
               KC_A_CT,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,     KC_ENSF,
  //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
               KC_Z_SF, KC_X_AL,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M, KC_COMM,  KC_DOT,     KC_SLSF,
  //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
      KC_LCTL, KC_LGUI,                                KC_SPRA,                                 KC_LOWR, KC_RCTL
  //`-----------------------------------------------------------------------------------------------------------'
  ),

  [_LOWER] = LAYOUT_all(
  //,-----------------------------------------------------------------------------------------------------------.
               KC_F1AL,   KC_F2,   KC_F3,   KC_F4,   KC_F5, KC_MINS,  KC_EQL, KC_JYEN, KC_LBRC, KC_RBRC, KC_BSLS,
  //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
               KC_F6CT,   KC_F7,   KC_F8,   KC_F9,  KC_F10, XXXXXXX, XXXXXXX, XXXXXXX, KC_SCLN,     KC_QUSF,
  //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
               KC_11SF, KC_12AL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,  KC_GRV,   KC_RO, KC_SLSH,     KC_ROSF,
  //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
      _______, _______,                                KC_AJST,                                 _______, _______
  //`-----------------------------------------------------------------------------------------------------------'
  ),

  [_RAISE] = LAYOUT_all(
  //,-----------------------------------------------------------------------------------------------------------.
                  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0, KC_MINS,
  //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
               KC_LCTL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN,   KC_UP, KC_RGHT,     _______,
  //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
               KC_LSFT, XXXXXXX,  KC_ESC,  KC_TAB,   KANJI,  KC_DEL, KC_COMM,  KC_DOT, KC_BSLS,     KC_ROSF,
  //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
      _______, _______,                                _______,                                 KC_AJST, _______
  //`-----------------------------------------------------------------------------------------------------------'
  ),

  [_ADJUST] = LAYOUT_all(
  //,-----------------------------------------------------------------------------------------------------------.
                 RESET,  RGBRST, AG_NORM, AG_SWAP, XXXXXXX, KC_HOME, KC_PGDN, KC_PGUP,  KC_END,  KC_INS, KC_PSCR,
  //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
               RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R,     KC_NLCK,
  //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
               RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, KC_BTN1, KC_BTN2, XXXXXXX, XXXXXXX,     KC_CAPS,
  //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
      _______, _______,                                _______,                                 _______, KC_CAPS
  //`-----------------------------------------------------------------------------------------------------------'
  )
};

uint16_t get_tapping_term(uint16_t keycode) {
  switch (keycode) {
    case KC_SPRA:
      return TAPPING_LAYER_TERM;
    default:
      return TAPPING_TERM;
  }
}

bool process_record_user(uint16_t keycode, keyrecord_t *record) {

  bool result = false;
  switch (keycode) {
    case KANJI:
      if (record->event.pressed) {
          register_code16(keymap_config.swap_lalt_lgui ? A(KC_GRV) : KC_LANG2);
      } else {
          unregister_code16(keymap_config.swap_lalt_lgui ? A(KC_GRV) : KC_LANG2);
      }
    break;
#ifdef RGBLIGHT_ENABLE
    case RGBRST:
        if (record->event.pressed) {
          eeconfig_update_rgblight_default();
          rgblight_enable();
        }
    break;
#endif
    default:
      result = true;
      break;
  }

  return result;
}

void encoder_update_user(uint8_t index, bool clockwise) {
    if (index == 0) {
        if (IS_LAYER_ON(_ADJUST)) {
          if (clockwise) {
              rgblight_increase_hue_noeeprom();
          } else {
              rgblight_decrease_hue_noeeprom();
          }
        } else if (IS_LAYER_ON(_LOWER)) {
          tap_code16((clockwise == true) ? LCTL(KC_Y) : LCTL(KC_Z));
        } else if (IS_LAYER_ON(_RAISE)) {
          tap_code16((clockwise == true) ? S(KC_DOWN) : S(KC_UP));
        } else {
          tap_code((clockwise == true) ? KC_WH_D : KC_WH_U);
        }

    }
}

// for exsample customize of LED inducator
// bool led_update_user(led_t led_state) {
//     writePin(D2, IS_LAYER_ON(_LOWER));
//     writePin(D1, IS_LAYER_ON(_RAISE));
//     return false;
// }

A keyboards/marksard/leftover30/keymaps/default/readme.md => keyboards/marksard/leftover30/keymaps/default/readme.md +1 -0
@@ 0,0 1,1 @@
# The default keymap for leftover30

A keyboards/marksard/leftover30/keymaps/default/rules.mk => keyboards/marksard/leftover30/keymaps/default/rules.mk +1 -0
@@ 0,0 1,1 @@
ENCODER_ENABLE = yes

A keyboards/marksard/leftover30/leftover30.c => keyboards/marksard/leftover30/leftover30.c +37 -0
@@ 0,0 1,37 @@
/* Copyright 2020 marksard
 *
 * 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 "leftover30.h"

// Optional override functions below.
// You can leave any or all of these undefined.
// These are only required if you want to perform custom actions.

void keyboard_pre_init_user(void) {
  /* Set CAPSLOCK indicator pin as output */
  setPinOutput(D1);
  /* Set NUMLOCK indicator pin as output */
  setPinOutput(D2);
}

bool led_update_kb(led_t led_state) {
    bool res = led_update_user(led_state);
    if(res) {
        writePin(D2, led_state.num_lock);
        writePin(D1, led_state.caps_lock);
    }
    return res;
}

A keyboards/marksard/leftover30/leftover30.h => keyboards/marksard/leftover30/leftover30.h +45 -0
@@ 0,0 1,45 @@
/* Copyright 2020 marksard
 *
 * 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"

/* This is a shortcut to help you visually see your layout.
 *
 * The first section contains all of the arguments representing the physical
 * layout of the board and position of the keys.
 *
 * The second converts the arguments into a two-dimensional array which
 * represents the switch matrix.
 */
#define LAYOUT_all( \
    k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a,\
     k10, k11, k12, k13, k14, k15, k16, k17, k18,  k19,\
       k20, k21, k22, k23, k24, k25, k26, k27, k28,   k29,\
   k30, k31,              k32,                   k33, k34\
) \
{ \
    { k09,   k08,   k07,   k06,   k05 }, \
    { k19,   k18,   k17,   k16,   k15 }, \
    { k29,   k28,   k27,   k26,   k25 }, \
    { k0a,   k34,   k33,   k32,   k31 }, \
\
    { k04,   k03,   k02,   k01,   k00 }, \
    { k14,   k13,   k12,   k11,   k10 }, \
    { k24,   k23,   k22,   k21,   k20 }, \
    { KC_NO, KC_NO, KC_NO, KC_NO, k30 } \
}

A keyboards/marksard/leftover30/readme.md => keyboards/marksard/leftover30/readme.md +17 -0
@@ 0,0 1,17 @@
# leftover30

![leftover30](https://raw.githubusercontent.com/marksard/Keyboards/master/_image/_leftover30.jpg)

A 30% mini keyboard.

* Keyboard Maintainer: [marksard](https://github.com/marksard)
* Hardware Supported: LEFTOVER30 PCB (with Pro Micro)
* Hardware Availability: [Mark's Garage](https://marksard.booth.pm/)

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

    make marksard/leftover30: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).

[Build guide](https://github.com/marksard/Keyboards/blob/master/leftover30/documents/leftover30_buildguide.md)  

A keyboards/marksard/leftover30/rules.mk => keyboards/marksard/leftover30/rules.mk +22 -0
@@ 0,0 1,22 @@
# MCU name
MCU = atmega32u4

# Bootloader selection
BOOTLOADER = caterina

# Build Options
#   change yes to no to disable
#
BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes       # Mouse keys
EXTRAKEY_ENABLE = yes       # Audio control and System control
CONSOLE_ENABLE = no        # Console for debug
COMMAND_ENABLE = no        # Commands for debug and configuration
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE = no            # USB Nkey Rollover
BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = yes        # Enable keyboard RGB underglow
BLUETOOTH_ENABLE = no       # Enable Bluetooth
AUDIO_ENABLE = no           # Audio output