~ruther/qmk_firmware

fa740f81298dc0965970a4dc7b0b67285bd1985c — James Young 4 years ago e768fb8
AMJ40 Refactor (#11854)

* update keyboard source files

- add license headers (attributed to original keyboard submitter)
- #pragma once include guards
- file template matching
- readme update and template matching

* set sensible default keyboard settings

- enable Bootmagic Lite and Mouse Keys
- disable Console and Command
- remove default keymap's rules.mk file

* remove unnecessary files from default keymap

* refactor default keymap

* add additional layouts/keymaps

* update keyboard readme

- add images and bootloader instructions
- reformat link list

* convert tabs to spaces in default keymap
M keyboards/amj40/amj40.c => keyboards/amj40/amj40.c +16 -0
@@ 1,1 1,17 @@
/* Copyright 2017 Fabian Topfstedt
 *
 * 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 "amj40.h"

M keyboards/amj40/amj40.h => keyboards/amj40/amj40.h +90 -19
@@ 1,26 1,52 @@
#ifndef AMJ40_H
#define AMJ40_H
/* Copyright 2017 Fabian Topfstedt
 * Copyright 2021 James Young (@noroadsleft)
 *
 * 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"

// readability  
#define XXX KC_NO

/* AMJ40 ver2.0 layout1 配列一
 * ,-----------------------------------------------------------.
 * | 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 0A | 0B |
 * |-----------------------------------------------------------|
 * | 10   | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 1B    |
 * |-----------------------------------------------------------|
 * | 20     | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 |  2A | 2B |
 * |-----------------------------------------------------------|
 * | 30  | 31 | 32  |   34      |  35         | 39  | 3A | 3B  |
 * `-----------------------------------------------------------'
/* AMJ40 ver2.0 staggered layouts
 * ,-----------------------------------------------.
 * |00 |01 |02 |03 |04 |05 |06 |07 |08 |09 |0a |0b |
 * |-----------------------------------------------|
 * |10  |11 |12 |13 |14 |15 |16 |17 |18 |19 |1b    |
 * |-----------------------------------------------|
 * |20    |22 |23 |24 |25 |26 |27 |28 |29 |2a  |2b |
 * |-----------------------------------------------|
 * |30  |31 |32  |   34   |35        |39  |3a |3b  | Layout 1 Bottom Row
 * `-----------------------------------------------'
 * ,-----------------------------------------------.
 * |30  |31 |32 |           35           |3a  |3b  | Layout 2
 * `-----------------------------------------------'
 * ,-----------------------------------------------.
 * |30   |31 |32   |   34   |    35    |39 |3a |3b | Layout 3
 * `-----------------------------------------------'
 * ,-----------------------------------------------.
 * |30  |31 |32  |           35           |3a |3b  | Layout 4
 * `-----------------------------------------------'
 */

// a.k.a. Layout 1 or Layout 3 (matrix is the same for both)
#define LAYOUT( \
    k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
    k10, k11, k12, k13, k14, k15, k16, k17, k18, k19,      k1b,  \
    k20,      k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b,  \
    k10, k11, k12, k13, k14, k15, k16, k17, k18, k19,      k1b, \
    k20,      k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
    k30, k31, k32,      k34, k35,                k39, k3a, k3b  \
) { \
    {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b}, \


@@ 29,10 55,55 @@
    {k30, k31, k32, XXX, k34, k35, XXX, XXX, XXX, k39, k3a, k3b} \
}

// a.k.a. Layout 2 or Layout 4 (matrix is the same for both)
#define LAYOUT_625u_space( \
    k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
    k10, k11, k12, k13, k14, k15, k16, k17, k18, k19,      k1b, \
    k20,      k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
    k30, k31, k32,             k35,                   k3a, k3b  \
) { \
    { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b }, \
    { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, XXX, k1b }, \
    { k20, XXX, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b }, \
    { k30, k31, k32, XXX, XXX, k35, XXX, XXX, XXX, XXX, k3a, k3b } \
}

/* AMJ40 ver2.0 ortholinear layouts
 * ,-----------------------------------------------.
 * |00 |01 |02 |03 |04 |05 |06 |07 |08 |09 |0a |0b |
 * |-----------------------------------------------|
 * |10 |11 |12 |13 |14 |15 |16 |17 |18 |19 |1a |1b |
 * |-----------------------------------------------|
 * |20 |21 |22 |23 |24 |25 |26 |27 |28 |29 |2a |2b |
 * |-----------------------------------------------|
 * |30 |31 |32 |33 |34 |    35    |38  |39 |3a |3b | 2.75u Spacebar
 * `-----------------------------------------------'
 * ,-----------------------------------------------.
 * |30 |31 |32 |          35           |39 |3a |3b | 6u Spacebar
 * `-----------------------------------------------'
 */

// equivalent to LAYOUT_all
#define LAYOUT_ortho_275u_space( \
    k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
    k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
    k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
    k30, k31, k32, k33, k34,     k35,      k38,  k39, k3a, k3b  \
) { \
    { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b }, \
    { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b }, \
    { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b }, \
    { k30, k31, k32, k33, k34, k35, XXX, XXX, k38, k39, k3a, k3b }  \
}

void matrix_init_user(void);
void matrix_scan_user(void);

#endif
#define LAYOUT_ortho_600u_space( \
    k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
    k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
    k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
    k30, k31, k32,             k35,              k39, k3a, k3b  \
) { \
    { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b }, \
    { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b }, \
    { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b }, \
    { k30, k31, k32, XXX, XXX, k35, XXX, XXX, XXX, k39, k3a, k3b }  \
}

M keyboards/amj40/config.h => keyboards/amj40/config.h +1 -4
@@ 15,8 15,7 @@ You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#ifndef CONFIG_H
#define CONFIG_H
#pragma once

#include "config_common.h"



@@ 87,5 86,3 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION

#endif

M keyboards/amj40/info.json => keyboards/amj40/info.json +205 -10
@@ 1,13 1,208 @@
{
  "keyboard_name": "AMJ40", 
  "url": "", 
  "maintainer": "qmk", 
  "bootloader": "", 
  "width": 12, 
  "height": 4, 
  "layouts": {
    "LAYOUT": {
      "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":0, "y":1, "w":1.25}, {"x":1.25, "y":1}, {"x":2.25, "y":1}, {"x":3.25, "y":1}, {"x":4.25, "y":1}, {"x":5.25, "y":1}, {"x":6.25, "y":1}, {"x":7.25, "y":1}, {"x":8.25, "y":1}, {"x":9.25, "y":1}, {"x":10.25, "y":1, "w":1.75}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2, "w":1.25}, {"x":11, "y":2}, {"x":0, "y":3, "w":1.25}, {"x":1.25, "y":3}, {"x":2.25, "y":3, "w":1.25}, {"x":3.5, "y":3, "w":2.25}, {"x":5.75, "y":3, "w":2.75}, {"x":8.5, "y":3, "w":1.25}, {"x":9.75, "y":3}, {"x":10.75, "y":3, "w":1.25}]
    "keyboard_name": "AMJ40",
    "url": "",
    "maintainer": "qmk",
    "width": 12,
    "height": 4,
    "layouts": {
        "LAYOUT": {
            "layout": [
                {"x":0, "y":0},
                {"x":1, "y":0},
                {"x":2, "y":0},
                {"x":3, "y":0},
                {"x":4, "y":0},
                {"x":5, "y":0},
                {"x":6, "y":0},
                {"x":7, "y":0},
                {"x":8, "y":0},
                {"x":9, "y":0},
                {"x":10, "y":0},
                {"x":11, "y":0},

                {"x":0, "y":1, "w":1.25},
                {"x":1.25, "y":1},
                {"x":2.25, "y":1},
                {"x":3.25, "y":1},
                {"x":4.25, "y":1},
                {"x":5.25, "y":1},
                {"x":6.25, "y":1},
                {"x":7.25, "y":1},
                {"x":8.25, "y":1},
                {"x":9.25, "y":1},
                {"x":10.25, "y":1, "w":1.75},

                {"x":0, "y":2, "w":1.75},
                {"x":1.75, "y":2},
                {"x":2.75, "y":2},
                {"x":3.75, "y":2},
                {"x":4.75, "y":2},
                {"x":5.75, "y":2},
                {"x":6.75, "y":2},
                {"x":7.75, "y":2},
                {"x":8.75, "y":2},
                {"x":9.75, "y":2, "w":1.25},
                {"x":11, "y":2},

                {"x":0, "y":3, "w":1.25},
                {"x":1.25, "y":3},
                {"x":2.25, "y":3, "w":1.25},
                {"x":3.5, "y":3, "w":2.25},
                {"x":5.75, "y":3, "w":2.75},
                {"x":8.5, "y":3, "w":1.25},
                {"x":9.75, "y":3},
                {"x":10.75, "y":3, "w":1.25}
            ]
        },
        "LAYOUT_625u_space": {
            "layout": [
                {"x":0, "y":0},
                {"x":1, "y":0},
                {"x":2, "y":0},
                {"x":3, "y":0},
                {"x":4, "y":0},
                {"x":5, "y":0},
                {"x":6, "y":0},
                {"x":7, "y":0},
                {"x":8, "y":0},
                {"x":9, "y":0},
                {"x":10, "y":0},
                {"x":11, "y":0},

                {"x":0, "y":1, "w":1.25},
                {"x":1.25, "y":1},
                {"x":2.25, "y":1},
                {"x":3.25, "y":1},
                {"x":4.25, "y":1},
                {"x":5.25, "y":1},
                {"x":6.25, "y":1},
                {"x":7.25, "y":1},
                {"x":8.25, "y":1},
                {"x":9.25, "y":1},
                {"x":10.25, "y":1, "w":1.75},

                {"x":0, "y":2, "w":1.75},
                {"x":1.75, "y":2},
                {"x":2.75, "y":2},
                {"x":3.75, "y":2},
                {"x":4.75, "y":2},
                {"x":5.75, "y":2},
                {"x":6.75, "y":2},
                {"x":7.75, "y":2},
                {"x":8.75, "y":2},
                {"x":9.75, "y":2, "w":1.25},
                {"x":11, "y":2},

                {"x":0, "y":3, "w":1.25},
                {"x":1.25, "y":3},
                {"x":2.25, "y":3},
                {"x":3.25, "y":3, "w":6.25},
                {"x":9.5, "y":3, "w":1.25},
                {"x":10.75, "y":3, "w":1.25}
            ]
        },
        "LAYOUT_ortho_600u_space": {
            "layout": [
                {"label":"K00 (F4,F1)", "x":0, "y":0},
                {"label":"K01 (F4,F0)", "x":1, "y":0},
                {"label":"K02 (F4,E6)", "x":2, "y":0},
                {"label":"K03 (F4,C7)", "x":3, "y":0},
                {"label":"K04 (F4,C6)", "x":4, "y":0},
                {"label":"K05 (F4,B0)", "x":5, "y":0},
                {"label":"K06 (F4,D4)", "x":6, "y":0},
                {"label":"K07 (F4,B1)", "x":7, "y":0},
                {"label":"K08 (F4,B7)", "x":8, "y":0},
                {"label":"K09 (F4,B5)", "x":9, "y":0},
                {"label":"K0A (F4,B4)", "x":10, "y":0},
                {"label":"K0B (F4,D7)", "x":11, "y":0},

                {"label":"K10 (F5,F1)", "x":0, "y":1},
                {"label":"K11 (F5,F0)", "x":1, "y":1},
                {"label":"K12 (F5,E6)", "x":2, "y":1},
                {"label":"K13 (F5,C7)", "x":3, "y":1},
                {"label":"K14 (F5,C6)", "x":4, "y":1},
                {"label":"K15 (F5,B0)", "x":5, "y":1},
                {"label":"K16 (F5,D4)", "x":6, "y":1},
                {"label":"K17 (F5,B1)", "x":7, "y":1},
                {"label":"K18 (F5,B7)", "x":8, "y":1},
                {"label":"K19 (F5,B5)", "x":9, "y":1},
                {"label":"K1A (F5,B4)", "x":10, "y":1},
                {"label":"K1B (F5,D7)", "x":11, "y":1},

                {"label":"K20 (F6,F1)", "x":0, "y":2},
                {"label":"K21 (F6,F0)", "x":1, "y":2},
                {"label":"K22 (F6,E6)", "x":2, "y":2},
                {"label":"K23 (F6,C7)", "x":3, "y":2},
                {"label":"K24 (F6,C6)", "x":4, "y":2},
                {"label":"K25 (F6,B0)", "x":5, "y":2},
                {"label":"K26 (F6,D4)", "x":6, "y":2},
                {"label":"K27 (F6,B1)", "x":7, "y":2},
                {"label":"K28 (F6,B7)", "x":8, "y":2},
                {"label":"K29 (F6,B5)", "x":9, "y":2},
                {"label":"K2A (F6,B4)", "x":10, "y":2},
                {"label":"K2B (F6,D7)", "x":11, "y":2},

                {"label":"K30 (F7,F1)", "x":0, "y":3},
                {"label":"K31 (F7,F0)", "x":1, "y":3},
                {"label":"K32 (F7,E6)", "x":2, "y":3},
                {"label":"K35 (F7,B0)", "x":3, "y":3, "w":6},
                {"label":"K39 (F7,B5)", "x":9, "y":3},
                {"label":"K3A (F7,B4)", "x":10, "y":3},
                {"label":"K3B (F7,D7)", "x":11, "y":3}
            ]
        },
        "LAYOUT_ortho_275u_space": {
            "layout": [
                {"label":"K00 (F4,F1)", "x":0, "y":0},
                {"label":"K01 (F4,F0)", "x":1, "y":0},
                {"label":"K02 (F4,E6)", "x":2, "y":0},
                {"label":"K03 (F4,C7)", "x":3, "y":0},
                {"label":"K04 (F4,C6)", "x":4, "y":0},
                {"label":"K05 (F4,B0)", "x":5, "y":0},
                {"label":"K06 (F4,D4)", "x":6, "y":0},
                {"label":"K07 (F4,B1)", "x":7, "y":0},
                {"label":"K08 (F4,B7)", "x":8, "y":0},
                {"label":"K09 (F4,B5)", "x":9, "y":0},
                {"label":"K0A (F4,B4)", "x":10, "y":0},
                {"label":"K0B (F4,D7)", "x":11, "y":0},

                {"label":"K10 (F5,F1)", "x":0, "y":1},
                {"label":"K11 (F5,F0)", "x":1, "y":1},
                {"label":"K12 (F5,E6)", "x":2, "y":1},
                {"label":"K13 (F5,C7)", "x":3, "y":1},
                {"label":"K14 (F5,C6)", "x":4, "y":1},
                {"label":"K15 (F5,B0)", "x":5, "y":1},
                {"label":"K16 (F5,D4)", "x":6, "y":1},
                {"label":"K17 (F5,B1)", "x":7, "y":1},
                {"label":"K18 (F5,B7)", "x":8, "y":1},
                {"label":"K19 (F5,B5)", "x":9, "y":1},
                {"label":"K1A (F5,B4)", "x":10, "y":1},
                {"label":"K1B (F5,D7)", "x":11, "y":1},

                {"label":"K20 (F6,F1)", "x":0, "y":2},
                {"label":"K21 (F6,F0)", "x":1, "y":2},
                {"label":"K22 (F6,E6)", "x":2, "y":2},
                {"label":"K23 (F6,C7)", "x":3, "y":2},
                {"label":"K24 (F6,C6)", "x":4, "y":2},
                {"label":"K25 (F6,B0)", "x":5, "y":2},
                {"label":"K26 (F6,D4)", "x":6, "y":2},
                {"label":"K27 (F6,B1)", "x":7, "y":2},
                {"label":"K28 (F6,B7)", "x":8, "y":2},
                {"label":"K29 (F6,B5)", "x":9, "y":2},
                {"label":"K2A (F6,B4)", "x":10, "y":2},
                {"label":"K2B (F6,D7)", "x":11, "y":2},

                {"label":"K30 (F7,F1)", "x":0, "y":3},
                {"label":"K31 (F7,F0)", "x":1, "y":3},
                {"label":"K32 (F7,E6)", "x":2, "y":3},
                {"label":"K33 (F7,C7)", "x":3, "y":3},
                {"label":"K34 (F7,C6)", "x":4, "y":3},
                {"label":"K35 (F7,B0)", "x":5, "y":3, "w":2.75},
                {"label":"K38 (F7,B7)", "x":7.75, "y":3, "w":1.25},
                {"label":"K39 (F7,B5)", "x":9, "y":3},
                {"label":"K3A (F7,B4)", "x":10, "y":3},
                {"label":"K3B (F7,D7)", "x":11, "y":3}
            ]
        }
    }
  }
}

D keyboards/amj40/keymaps/default/build.sh => keyboards/amj40/keymaps/default/build.sh +0 -42
@@ 1,42 0,0 @@
#!/bin/bash
# adjust for cpu 
# -j 16 gave best result on a hyperthreaded quad core core i7

LIMIT=10
THREADS="-j 16"
KMAP=iso_split_rshift

echo "We need sudo later"
sudo ls 2>&1 /dev/null

function wait_bootloader {
	echo "Waiting for Bootloader..."
	local STARTTIME=$(date +"%s")
	local REMIND=0
    local EXEC=dfu-programmer
    local TARGET=atmega32u4
	while true
	do
		sudo $EXEC $TARGET get > /dev/null 2>&1
		[ $? -eq 0 ] && break
		ENDTIME=$(date +"%s")
		DURATION=$(($ENDTIME-$STARTTIME))
		if [ $REMIND -eq 0 -a $DURATION -gt $LIMIT ]
		then 
			echo "Did you forget to press the reset button?"
			REMIND=1
		fi
        sleep 1
	done
}
make clean
make KEYMAP=${KMAP} ${THREADS}
if [[ $? -eq 0 ]]
then
    echo "please trigger flashing!"
    wait_bootloader
    sudo make KEYMAP=${KMAP} dfu ${THREADS}
else
    echo "make failed"
    exit 77
fi

M keyboards/amj40/keymaps/default/keymap.c => keyboards/amj40/keymaps/default/keymap.c +125 -117
@@ 1,135 1,143 @@


/* Copyright 2017 Fabian Topfstedt
 *
 * 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

// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
// entirely and just use numbers.
#define _QWERTY 0
#define _LOWER 1
#define _RAISE 2
#define _ADJUST 3


enum layer_names {
    _QWERTY,
    _LOWER,
    _RAISE,
    _ADJUST,
};

enum custom_keycodes {
  QWERTY = SAFE_RANGE,
  LOWER,
  RAISE,
  ADJUST,
    QWERTY = SAFE_RANGE,
    LOWER,
    RAISE,
    ADJUST,
};

#define LT1_SPC LT(_LOWER,KC_SPC)
#define LT2_SPC LT(_RAISE,KC_SPC)
#define LT3_LGU LT(_ADJUST,KC_LGUI)

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
        /* Default Layer
     * ,-----------------------------------------------------------.
     * | Esc|  Q |  W |  E |  R |  T |  Y |  U |  I |  O |  P | BS |
     * |-----------------------------------------------------------|
     * | Tab |  A |  S |  D |  F |  G |  H |  J |  K |  L | Ent    |
     * |-----------------------------------------------------------|
     * | LSft   |  Z |  X |  C |  V |  B |  N |  M |  ,  |  . | /? |
     * |-----------------------------------------------------------|
     * | LCtl | LGui| LAlt|  spc fn0  |  spc fn1    |fn2|RAlt|RCtl |
     * `-----------------------------------------------------------'
    /* Default Layer
     * ,-----------------------------------------------.
     * |Esc| Q | W | E | R | T | Y | U | I | O | P |BS |
     * |-----------------------------------------------|
     * |Tab | A | S | D | F | G | H | J | K | L |Enter |
     * |-----------------------------------------------|
     * | LSft | Z | X | C | V | B | N | M | , | .  |/? |
     * |-----------------------------------------------|
     * |LCtl|GUI|LAlt|Spc/Fn0 | Spc/Fn1  |Fn2 |Alt|RCtl|
     * `-----------------------------------------------'
     */
    [_QWERTY] = LAYOUT( \
        KC_ESC,  KC_Q,   KC_W,   KC_E,   KC_R,   KC_T,   KC_Y,   KC_U,   KC_I,    KC_O,    KC_P,   KC_BSPC,\
        KC_TAB,  KC_A,   KC_S,   KC_D,   KC_F,   KC_G,   KC_H,   KC_J,   KC_K,    KC_L,    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_LCTL, KC_LGUI, KC_LALT,          LT(_LOWER, KC_SPC),LT(_RAISE, KC_SPC),LT(_ADJUST, KC_LGUI), KC_RALT, KC_RCTL \
		),
    [_QWERTY] = LAYOUT(
        KC_ESC,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC,
        KC_TAB,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,             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_LCTL, KC_LGUI, KC_LALT,                   LT1_SPC, LT2_SPC,                   LT3_LGU, KC_RALT, KC_RCTL
    ),

    /* Function Layer 1 HHKB style
     * ,-----------------------------------------------------------.
     * |   ~  |   !   |  @  | # | $ | % | ^ | & | * | ( | ) | Bkspc|
     * |-----------------------------------------------------------|
     * |   F1   | F2 | F3 | F4 | F5 |  F6 | _ | + | [ | ] |  Pipe  |
     * |-----------------------------------------------------------|
     * |    F7    | F8 | F9 |  F10  |  F11 |  F12 | End|PgDn| ↓ |     |    |
     * |-----------------------------------------------------------|
     * |     |    |     |           |             | Stop| App|     |
     * `-----------------------------------------------------------'
     * ,-----------------------------------------------.
     * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) |BS |
     * |-----------------------------------------------|
     * | F1 |F2 |F3 |F4 |F5 |F6 | _ | + | { | } | Pipe |
     * |-----------------------------------------------|
     * |  F7  |F8 |F9 |F10|F11|F12| ~ | | |BL±|BL+ |BL-|
     * |-----------------------------------------------|
     * |    |   |    |        |   Left   |Down|Up |Rght|
     * `-----------------------------------------------'
     */
    [_LOWER] = LAYOUT( \
        KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \
		KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
		KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,S(KC_NUHS),S(KC_NUBS),BL_TOGG, BL_INC, BL_DEC, \
		_______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
		),
	
	/* Function Layer 1 HHKB style
     * ,-----------------------------------------------------------.
     * |Caps|    |MSel| ⏮ | ⏯ | ⏭ |PSCR|SkLk|Paus|  ↑ | Ins| Del|
     * |-----------------------------------------------------------|
     * |      | 🔇 | ⏏ |    |  * |  / |Hone|PgUp|  ← |  → |       |
     * |-----------------------------------------------------------|
     * |        | 🔉 | 🔊 |    |  + |  - | End|PgDn| ↓ |     |    |
     * |-----------------------------------------------------------|
     * |     |    |     |           |             | Stop| App|     |
     * `-----------------------------------------------------------'
     */
    [_RAISE] = LAYOUT( \
        KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC, \
		KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS, \
		KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_NUHS, KC_NUBS, _______, _______, KC_DEL, \
		_______, KC_TRNS, _______, KC_TRNS, KC_TRNS, _______, _______, RGB_TOG \
		),
	
	/* Function Layer 1 HHKB style
     * ,-----------------------------------------------------------.
     * |Caps|    |MSel| ⏮ | ⏯ | ⏭ |PSCR|SkLk|Paus|  ↑ | Ins| Del|
     * |-----------------------------------------------------------|
     * |      | 🔇 | ⏏ |    |  * |  / |Hone|PgUp|  ← |  → |       |
     * |-----------------------------------------------------------|
     * |        | 🔉 | 🔊 |    |  + |  - | End|PgDn| ↓ |     |    |
     * |-----------------------------------------------------------|
     * |     |    |     |           |             | Stop| App|     |
     * `-----------------------------------------------------------'
     */
    [_ADJUST] = LAYOUT( \
        _______, RESET,   _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \
		_______, _______, _______, AU_ON,   AU_OFF,  AG_NORM, AG_SWAP, _______, _______, _______,  _______,  \
		_______, _______, _______, RGB_TOG,  RGB_MOD,  RGB_HUI,  RGB_HUD,  RGB_SAI,  RGB_SAD,  RGB_VAI,  RGB_VAD, \
		KC_SYSTEM_SLEEP, _______, _______, _______, _______, _______, _______, _______ \
		),
    [_LOWER] = LAYOUT(
        KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR,    KC_ASTR,    KC_LPRN, KC_RPRN, KC_BSPC,
        KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS, KC_PLUS,    KC_LCBR,    KC_RCBR,          KC_PIPE,
        KC_F7,            KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  S(KC_NUHS), S(KC_NUBS), BL_TOGG, BL_INC,  BL_DEC,
        _______, _______, _______,                   _______, KC_LEFT,                         KC_DOWN, KC_UP,   KC_RGHT
    ),

    
    /* Function Layer 1 HHKB style
     * ,-----------------------------------------------.
     * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 |BS |
     * |-----------------------------------------------|
     * | F1 |F2 |F3 |F4 |F5 |F6 | - | = | [ | ] |  \   |
     * |-----------------------------------------------|
     * |  F7  |F8 |F9 |F10|F11|F12| # | \ |   |    |Del|
     * |-----------------------------------------------|
     * |    |   |    |        |          |    |   |RGB±|
     * `-----------------------------------------------'
     */
    [_RAISE] = LAYOUT(
        KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC,
        KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC,          KC_BSLS,
        KC_F7,            KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_NUHS, KC_NUBS, _______, _______, KC_DEL,
        _______, _______, _______,                   _______, _______,                   _______, _______, RGB_TOG
    ),

    /* Function Layer 1 HHKB style
     * ,-----------------------------------------------.
     * |   |RST|   |   |   |   |   |   |   |   |   |Del|
     * |-----------------------------------------------|
     * |    |   |   |Au1|Au0|AGN|AGS|   |   |   |      |
     * |-----------------------------------------------|
     * |      |   |   |RTg|RMd|RH+|RH-|RS+|RS-|RV+ |RV-|
     * |-----------------------------------------------|
     * |SLP |   |    |        |          |    |   |RTg |
     * `-----------------------------------------------'
     */
    [_ADJUST] = LAYOUT(
        _______, RESET,   _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL,
        _______, _______, _______, AU_ON,   AU_OFF,  AG_NORM, AG_SWAP, _______, _______, _______,          _______,
        _______,          _______, _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD,
        KC_SLEP, _______, _______,                   _______, _______,                   _______, _______, _______
    ),
};

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 
  switch (keycode) {
    
    case LOWER:
      if (record->event.pressed) {
        layer_on(_LOWER);
        update_tri_layer(_LOWER, _RAISE, _ADJUST);
      } else {
        layer_off(_LOWER);
        update_tri_layer(_LOWER, _RAISE, _ADJUST);
      }
      return false;
      break;
    case RAISE:
      if (record->event.pressed) {
        layer_on(_RAISE);
        update_tri_layer(_LOWER, _RAISE, _ADJUST);
      } else {
        layer_off(_RAISE);
        update_tri_layer(_LOWER, _RAISE, _ADJUST);
      }
      return false;
      break;
    case ADJUST:
      if (record->event.pressed) {
        layer_on(_ADJUST);
      } else {
        layer_off(_ADJUST);
      }
      return false;
      break;
  }
  return true;
    switch (keycode) {
        case LOWER:
            if (record->event.pressed) {
                layer_on(_LOWER);
                update_tri_layer(_LOWER, _RAISE, _ADJUST);
            } else {
                layer_off(_LOWER);
                update_tri_layer(_LOWER, _RAISE, _ADJUST);
            }
            return false;
            break;
        case RAISE:
            if (record->event.pressed) {
                layer_on(_RAISE);
                update_tri_layer(_LOWER, _RAISE, _ADJUST);
            } else {
                layer_off(_RAISE);
                update_tri_layer(_LOWER, _RAISE, _ADJUST);
            }
            return false;
            break;
        case ADJUST:
            if (record->event.pressed) {
                layer_on(_ADJUST);
            } else {
                layer_off(_ADJUST);
            }
            return false;
            break;
    }
    return true;
}

D keyboards/amj40/keymaps/default/rules.mk => keyboards/amj40/keymaps/default/rules.mk +0 -20
@@ 1,20 0,0 @@
# Build Options
#   change to "no" to disable the options, or define them in the Makefile in
#   the appropriate keymap folder that will get included automatically
#
BOOTMAGIC_ENABLE = no  # Virtual DIP switch configuration
MOUSEKEY_ENABLE  = no  # Mouse keys
EXTRAKEY_ENABLE  = yes # Audio control and System control
CONSOLE_ENABLE   = no  # Console for debug
COMMAND_ENABLE   = yes # Commands for debug and configuration
NKRO_ENABLE      = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
BACKLIGHT_ENABLE = yes  # Enable keyboard backlight functionality
MIDI_ENABLE      = no  # MIDI controls
AUDIO_ENABLE     = no  # Audio output on port C6
UNICODE_ENABLE   = no  # Unicode
BLUETOOTH_ENABLE = no  # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE  = yes  # Enable WS2812 RGB underlight.

# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no    # Breathing sleep LED during USB suspend


D keyboards/amj40/keymaps/default/updatemerge.sh => keyboards/amj40/keymaps/default/updatemerge.sh +0 -4
@@ 1,4 0,0 @@
#!/bin/bash
git checkout amj60      # gets you on branch amj60
git fetch origin        # gets you up to date with origin
git merge origin/master

A keyboards/amj40/keymaps/default_625u_space/keymap.c => keyboards/amj40/keymaps/default_625u_space/keymap.c +41 -0
@@ 0,0 1,41 @@
/* Copyright 2021 James Young (@noroadsleft)
 *
 * 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

#define LT1_SCL     LT(1, KC_SCLN)
#define LT2_QUO     LT(2, KC_QUOT)

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    [0] = LAYOUT_625u_space(
        KC_ESC,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC,
        KC_CAPS, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,             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_LCTL, KC_LGUI, KC_LALT,                            KC_SPC,                             LT1_SCL, LT2_QUO
    ),
    [1] = LAYOUT_625u_space(
        KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_DEL,
        KC_TAB,  KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, _______,          KC_INS,
        _______,          KC_SCLN, KC_QUOT, KC_COLN, KC_DQUO, KC_TILD, KC_LABK, KC_RABK, KC_LBRC, KC_RBRC, _______,
        _______, _______, _______,                            _______,                            _______, _______
    ),
    [2] = LAYOUT_625u_space(
        KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,
        RESET,   KC_PWR,  _______, _______, KC_PSCR, KC_PAUS, BL_TOGG, BL_DEC,  BL_INC,  BL_STEP,          _______,
        KC_UP,            KC_MINS, KC_EQL,  KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, KC_LPRN, KC_RPRN, _______,
        KC_LEFT, KC_DOWN, KC_RGHT,                            _______,                            _______, _______
    ),
};

A keyboards/amj40/keymaps/default_ortho_275u_space/keymap.c => keyboards/amj40/keymaps/default_ortho_275u_space/keymap.c +40 -0
@@ 0,0 1,40 @@
/* Copyright 2021 James Young (@noroadsleft)
 *
 * 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

#define LT2_SLS     LT(2,KC_SLSH)

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    [0] = LAYOUT_ortho_275u_space(
        KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC,
        KC_ESC,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,
        KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_UP,   KC_ENT,
        KC_CAPS, KC_LCTL, KC_LALT, KC_LGUI, MO(1),            KC_SPC,           LT2_SLS, KC_LEFT, KC_DOWN, KC_RGHT
    ),
    [1] = LAYOUT_ortho_275u_space(
        KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
        _______, _______, _______, _______, _______, _______, _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
        _______, _______, _______, _______, _______, _______, _______, _______, KC_SLSH, KC_QUES, KC_UP,   _______,
        _______, _______, _______, _______, _______,          _______,          _______, KC_LEFT, KC_DOWN, KC_RGHT
    ),
    [2] = LAYOUT_ortho_275u_space(
        KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC,
        KC_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS,
        _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  BL_TOGG, BL_DEC,  BL_INC,  BL_STEP, _______,
        RESET,   _______, _______, _______, _______,          _______,          _______, _______, _______, _______
    ),
};

A keyboards/amj40/keymaps/default_ortho_600u_space/keymap.c => keyboards/amj40/keymaps/default_ortho_600u_space/keymap.c +38 -0
@@ 0,0 1,38 @@
/* Copyright 2021 James Young (@noroadsleft)
 *
 * 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] = {
    [0] = LAYOUT_ortho_600u_space(
        KC_ESC,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC,
        KC_CAPS, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_A,    KC_ENT,
        KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH,
        KC_LCTL, KC_LGUI, MO(1),                     KC_SPC,                             MO(2),   KC_BSLS, KC_B
    ),
    [1] = LAYOUT_ortho_600u_space(
        KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_BSPC,
        KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_UP,   _______,
        KC_UNDS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS, KC_SCLN, KC_QUOT, KC_GRV,  _______, KC_LEFT, KC_DOWN, KC_RGHT,
        _______, _______, _______,                   _______,                            _______, _______, _______
    ),
    [2] = LAYOUT_ortho_600u_space(
        RESET,   _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, _______, _______,
        _______, _______, _______, _______, _______, _______, BL_TOGG, BL_DEC,  BL_INC,  BL_STEP, _______, _______,
        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
        _______, _______, _______,                   _______,                            _______, _______, _______
    ),
};

M keyboards/amj40/readme.md => keyboards/amj40/readme.md +15 -6
@@ 1,14 1,23 @@
AMJ40
===
# AMJ40

![AMJ40](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/amj40/AMJ40-Keyboard-Side-scaled_640.jpg)\
[PCB photo](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/amj40/DSC_1718-768x512_640)

DIY/Assembled compact 40% keyboard.

Keyboard Maintainer: QMK Community  
Hardware Supported: AMJ40 PCB  
Hardware Availability: https://geekhack.org/index.php?topic=87961.0
* Keyboard Maintainer: QMK Community
* Hardware Supported: AMJ40 PCB
* Hardware Availability: no longer available
* References: [Flashquark](https://flashquark.com/product/amj40-40-mechanical-keyboard-kit/), [geekhack](https://geekhack.org/index.php?topic=87961.0)

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

    make amj40:default

See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
Flashing example for this keyboard:

    make amj40:default:flash

To reset the board into bootloader mode, hold the key at the top left of the keyboard while connecting the USB cable (also erases persistent settings).

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).

M keyboards/amj40/rules.mk => keyboards/amj40/rules.mk +14 -20
@@ 2,27 2,21 @@
MCU = atmega32u4

# Bootloader selection
#   Teensy       halfkay
#   Pro Micro    caterina
#   Atmel DFU    atmel-dfu
#   LUFA DFU     lufa-dfu
#   QMK DFU      qmk-dfu
#   ATmega32A    bootloadHID
#   ATmega328P   USBasp
BOOTLOADER = atmel-dfu

# Build Options
#   comment out to disable the options.
#   change yes to no to disable
#
BOOTMAGIC_ENABLE = no  # Virtual DIP switch configuration
MOUSEKEY_ENABLE  = no  # Mouse keys
EXTRAKEY_ENABLE  = yes # Audio control and System control
CONSOLE_ENABLE   = yes # Console for debug
COMMAND_ENABLE   = yes # Commands for debug and configuration
NKRO_ENABLE      = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
RGBLIGHT_ENABLE  = yes # Enable keyboard underlight functionality
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
MIDI_ENABLE      = no  # MIDI controls
AUDIO_ENABLE     = no
UNICODE_ENABLE   = no  # Unicode
BLUETOOTH_ENABLE = no  # Enable Bluetooth with the Adafruit EZ-Key HID
BOOTMAGIC_ENABLE = lite     # 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 = yes           # USB Nkey Rollover
BACKLIGHT_ENABLE = yes      # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = yes       # Enable keyboard RGB underglow
BLUETOOTH_ENABLE = no       # Enable Bluetooth
AUDIO_ENABLE = no           # Audio output