summaryrefslogtreecommitdiff
path: root/keyboards/input_club
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/input_club')
-rw-r--r--keyboards/input_club/ergodox_infinity/MEMO.txt385
-rw-r--r--keyboards/input_club/ergodox_infinity/chconf.h37
-rw-r--r--keyboards/input_club/ergodox_infinity/config.h157
-rw-r--r--keyboards/input_club/ergodox_infinity/ergodox_infinity.c363
-rw-r--r--keyboards/input_club/ergodox_infinity/ergodox_infinity.h153
-rw-r--r--keyboards/input_club/ergodox_infinity/halconf.h33
-rw-r--r--keyboards/input_club/ergodox_infinity/info.json52
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/default/keymap.c189
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/dudeofawesome/README.md30
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/dudeofawesome/config.h9
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/dudeofawesome/keymap.c551
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/dudeofawesome/layers.h14
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/gordon/config.h29
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/gordon/keymap.c394
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/gordon/rules.mk2
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/halfkeyboard/config.h27
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/halfkeyboard/keymap.c514
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/halfkeyboard/rules.mk4
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/input_club/README.md23
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/input_club/keymap.c245
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/narze/config.h15
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/narze/default.png.md1
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/narze/default_highres.png.md1
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/narze/keymap.c697
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/narze/readme.md31
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/narze/rules.mk23
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/narze/visualizer.c94
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/nordic_ergo/keymap.c243
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/nordic_ergo/readme.md9
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/not-quite-neo/keymap.c292
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/not-quite-neo/readme.md5
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/not-quite-neo/rules.mk3
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/rask/README.md20
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/rask/keymap.c201
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/rjhilgefort/keymap.c381
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/rjhilgefort/readme.md175
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/trulyergonomic/README.md3
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/trulyergonomic/keymap.c159
-rw-r--r--keyboards/input_club/ergodox_infinity/mcuconf.h74
-rw-r--r--keyboards/input_club/ergodox_infinity/readme.md66
-rw-r--r--keyboards/input_club/ergodox_infinity/rules.mk37
-rw-r--r--keyboards/input_club/infinity60/chconf.h31
-rw-r--r--keyboards/input_club/infinity60/config.h61
-rw-r--r--keyboards/input_club/infinity60/halconf.h27
-rw-r--r--keyboards/input_club/infinity60/infinity60.c18
-rw-r--r--keyboards/input_club/infinity60/infinity60.h36
-rw-r--r--keyboards/input_club/infinity60/info.json78
-rw-r--r--keyboards/input_club/infinity60/keymaps/default/keymap.c45
-rwxr-xr-xkeyboards/input_club/infinity60/keymaps/depariel/keymap.c87
-rw-r--r--keyboards/input_club/infinity60/keymaps/hasu/keymap.c110
-rw-r--r--keyboards/input_club/infinity60/keymaps/jpetermans/config.h6
-rw-r--r--keyboards/input_club/infinity60/keymaps/jpetermans/keymap.c264
-rw-r--r--keyboards/input_club/infinity60/keymaps/jpetermans/readme.md87
-rw-r--r--keyboards/input_club/infinity60/led.c54
-rw-r--r--keyboards/input_club/infinity60/led/config.h23
-rw-r--r--keyboards/input_club/infinity60/led/readme.md3
-rw-r--r--keyboards/input_club/infinity60/led/rules.mk3
-rw-r--r--keyboards/input_club/infinity60/led_controller.c487
-rw-r--r--keyboards/input_club/infinity60/led_controller.h121
-rw-r--r--keyboards/input_club/infinity60/mcuconf.h58
-rw-r--r--keyboards/input_club/infinity60/readme.md17
-rw-r--r--keyboards/input_club/infinity60/rev1/config.h25
-rw-r--r--keyboards/input_club/infinity60/rev1/readme.md2
-rw-r--r--keyboards/input_club/infinity60/rev1/rules.mk0
-rw-r--r--keyboards/input_club/infinity60/rules.mk34
-rw-r--r--keyboards/input_club/k_type/chconf.h29
-rw-r--r--keyboards/input_club/k_type/config.h186
-rw-r--r--keyboards/input_club/k_type/halconf.h27
-rw-r--r--keyboards/input_club/k_type/i2c_master.c150
-rw-r--r--keyboards/input_club/k_type/i2c_master.h127
-rw-r--r--keyboards/input_club/k_type/info.json108
-rw-r--r--keyboards/input_club/k_type/is31fl3733-dual.c236
-rw-r--r--keyboards/input_club/k_type/is31fl3733-dual.h252
-rw-r--r--keyboards/input_club/k_type/k_type-rgbdriver.c57
-rw-r--r--keyboards/input_club/k_type/k_type.c235
-rw-r--r--keyboards/input_club/k_type/k_type.h42
-rw-r--r--keyboards/input_club/k_type/keymaps/andrew-fahmy/config.h52
-rw-r--r--keyboards/input_club/k_type/keymaps/andrew-fahmy/keymap.c60
-rw-r--r--keyboards/input_club/k_type/keymaps/andrew-fahmy/rules.mk1
-rw-r--r--keyboards/input_club/k_type/keymaps/belak/keymap.c27
-rw-r--r--keyboards/input_club/k_type/keymaps/default/keymap.c22
-rw-r--r--keyboards/input_club/k_type/keymaps/default/rules.mk1
-rw-r--r--keyboards/input_club/k_type/mcuconf.h57
-rw-r--r--keyboards/input_club/k_type/readme.md17
-rw-r--r--keyboards/input_club/k_type/rules.mk38
-rw-r--r--keyboards/input_club/whitefox/board_is31fl3731c.h106
-rw-r--r--keyboards/input_club/whitefox/chconf.h37
-rw-r--r--keyboards/input_club/whitefox/config.h126
-rw-r--r--keyboards/input_club/whitefox/halconf.h27
-rw-r--r--keyboards/input_club/whitefox/info.json542
-rw-r--r--keyboards/input_club/whitefox/keymaps/billypython/config.h3
-rw-r--r--keyboards/input_club/whitefox/keymaps/billypython/keymap.c46
-rw-r--r--keyboards/input_club/whitefox/keymaps/billypython/rules.mk6
-rw-r--r--keyboards/input_club/whitefox/keymaps/default/keymap.c60
-rw-r--r--keyboards/input_club/whitefox/keymaps/dhertz/keymap.c58
-rw-r--r--keyboards/input_club/whitefox/keymaps/dudeofawesome/keymap.c146
-rw-r--r--keyboards/input_club/whitefox/keymaps/dudeofawesome/readme.md20
-rw-r--r--keyboards/input_club/whitefox/keymaps/jetpacktuxedo/keymap.c60
-rw-r--r--keyboards/input_club/whitefox/keymaps/jetpacktuxedo/readme.md3
-rw-r--r--keyboards/input_club/whitefox/keymaps/jetpacktuxedo/rules.mk2
-rw-r--r--keyboards/input_club/whitefox/keymaps/kim-kim/keymap.c53
-rw-r--r--keyboards/input_club/whitefox/keymaps/konstantin/config.h4
-rw-r--r--keyboards/input_club/whitefox/keymaps/konstantin/keymap.c67
-rw-r--r--keyboards/input_club/whitefox/keymaps/konstantin/rules.mk18
-rw-r--r--keyboards/input_club/whitefox/keymaps/matt3o/keymap.c95
-rw-r--r--keyboards/input_club/whitefox/keymaps/mattrighetti/keymap.c81
-rw-r--r--keyboards/input_club/whitefox/keymaps/mattrighetti/rules.mk10
-rw-r--r--keyboards/input_club/whitefox/mcuconf.h54
-rw-r--r--keyboards/input_club/whitefox/readme.md17
-rw-r--r--keyboards/input_club/whitefox/rules.mk32
-rw-r--r--keyboards/input_club/whitefox/whitefox.c94
-rw-r--r--keyboards/input_club/whitefox/whitefox.h238
112 files changed, 11147 insertions, 0 deletions
diff --git a/keyboards/input_club/ergodox_infinity/MEMO.txt b/keyboards/input_club/ergodox_infinity/MEMO.txt
new file mode 100644
index 0000000000..e2886aa002
--- /dev/null
+++ b/keyboards/input_club/ergodox_infinity/MEMO.txt
@@ -0,0 +1,385 @@
+flabbergast's TMK/ChibiOS port
+==============================
+2015/10/16
+
+
+Build
+-----
+$ git clone -b chibios https://github.com/flabbergast/tmk_keyboard.git
+
+$ cd tmk_keyboard
+$ git submodule add -f -b kinetis https://github.com/flabbergast/ChibiOS.git tmk_core/tool/chibios/chibios
+or
+$ cd tmk_keyboard/tmk_core/tool/chibios
+$ git clone -b kinetis https://github.com/flabbergast/ChibiOS.git tmk_core/tool/chibios/chibios
+
+$ cd tmk_keyboard/keyboard/infinity_chibios
+$ make
+
+
+
+
+Chibios Configuration
+---------------------
+halconf.h: for HAL configuration
+ placed in project directory
+ read in chibios/os/hal/hal.mk
+ included in chibios/os/hal/include/hal.h
+mcuconf.h: for MCU configuration
+ placed in project directory
+ included in halconf.h
+
+
+Chibios Term
+------------
+PAL = Port Abstraction Layer
+ palWritePad
+ palReadPad
+ palSetPad
+ chibios/os/hal/include/pal.h
+
+LLD = Low Level Driver
+
+
+Makefile
+--------
+ # <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
+ MCU_FAMILY = KINETIS
+ MCU_SERIES = KL2x
+
+ # - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
+ # or <this_dir>/ld/
+ MCU_LDSCRIPT = MKL26Z64
+
+ # - it should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
+ MCU_STARTUP = kl2x
+
+ # Board: it should exist either in <chibios>/os/hal/boards/
+ # or <this_dir>/boards
+ BOARD = PJRC_TEENSY_LC
+
+ MCU = cortex-m0
+
+ # ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
+ ARMV = 6
+
+
+halconf.h
+---------
+
+
+mcuconf.h
+---------
+
+
+chconf.h
+--------
+
+
+ld script
+---------
+--- ../../tmk_core/tool/chibios/chibios/os/common/ports/ARMCMx/compilers/GCC/ld/MKL26Z64.ld 2015-10-15 09:08:58.732904304 +0900
++++ ld/MKL26Z64.ld 2015-10-15 08:48:06.430215496 +0900
+@@ -27,7 +27,8 @@
+ {
+ flash0 : org = 0x00000000, len = 0xc0
+ flashcfg : org = 0x00000400, len = 0x10
+- flash : org = 0x00000410, len = 64k - 0x410
++ flash : org = 0x00000410, len = 62k - 0x410
++ eeprom_emu : org = 0x0000F800, len = 2k
+ ram : org = 0x1FFFF800, len = 8k
+ }
+
+@@ -35,6 +36,10 @@
+ __ram_size__ = LENGTH(ram);
+ __ram_end__ = __ram_start__ + __ram_size__;
+
++__eeprom_workarea_start__ = ORIGIN(eeprom_emu);
++__eeprom_workarea_size__ = LENGTH(eeprom_emu);
++__eeprom_workarea_end__ = __eeprom_workarea_start__ + __eeprom_workarea_size__;
++
+ SECTIONS
+ {
+ . = 0;
+
+
+
+Configuration/Startup for Infinity 60%
+--------------------------------------
+Configuration:
+
+
+Clock:
+Inifinity
+ FEI(FLL Engaged Internal) mode with core clock:48MHz, bus clock:48MHz, flash clock:24MHz
+ Clock dividor:
+ SIM_CLKDIV1[OUTDIV1] = 0 divide-by-1 for core clock
+ SIM_CLKDIV1[OUTDIV2] = 0 divide-by-1 for bus clock
+ SIM_CLKDIV1[OUTDIV4] = 1 divide-by-2 for flash clock
+ Internal reference clock:
+ MCG_C1[IREFS] = 1 Internal Reference Select for clock source for FLL
+ MCG_C1[IRCLKEN] = 1 Internal Reference Clock Enable
+ FLL multipilication:
+ MCG_C4[DMX32] = 1
+ MCG_C4[DRST_DRS] = 01 FLL factor 1464 * 32.768kHz = 48MHz
+
+chibios/os/hal/ports/KINETIS/K20x/hal_lld.c
+ k20x_clock_init(): called in __early_init() defined in board.c
+ disable watchdog and configure clock
+
+ configurable macros:
+ KINETIS_NO_INIT: whether init or not
+ KINETIS_MCG_MODE: clock mode
+ KINETIS_MCG_MODE_FEI
+ KINETIS_MCG_MODE_PEE
+ hal/ports/KINETIS/K20x/hal_lld.h
+
+
+chibios/os/hal/boards/FREESCALE_FREEDOM_K20D50M/board.h
+ PALConfig pal_default_config
+ boardInit()
+ __early_init()
+ macro definitions for board infos, freq and mcu type
+
+chibios/os/hal/boards/FREESCALE_FREEDOM_K20D50M/board.c
+
+USB
+
+
+Startup
+-------
+ common/ports/ARMCMx/GCC/crt0_v[67]m.s
+ Reset_Handler: startup code
+ common/ports/ARMCMx/GCC/crt1.c
+ __core_init(): weak
+ __early_init(): weak
+ __late_init(): weak
+ __default_exit(): weak
+ called from Reset_Handler of crt0
+ common/ports/ARMCMx/GCC/vector.c
+ common/ports/ARMCMx/GCC/ld/*.ld
+
+chibios/os/common/ports/ARMCMx/compilers/GCC/
+β”œβ”€β”€ crt0_v6m.s
+β”œβ”€β”€ crt0_v7m.s
+β”œβ”€β”€ crt1.c
+β”œβ”€β”€ ld
+β”‚Β Β  β”œβ”€β”€ MK20DX128BLDR3.ld
+β”‚Β Β  β”œβ”€β”€ MK20DX128BLDR4.ld
+β”‚Β Β  β”œβ”€β”€ MK20DX128.ld
+β”‚Β Β  β”œβ”€β”€ MK20DX256.ld
+β”‚Β Β  β”œβ”€β”€ MKL25Z128.ld
+β”‚Β Β  β”œβ”€β”€ MKL26Z128.ld
+β”‚Β Β  β”œβ”€β”€ MKL26Z64.ld
+β”‚Β Β  └── STM32L476xG.ld
+β”œβ”€β”€ mk
+β”‚Β Β  β”œβ”€β”€ startup_k20x5.mk
+β”‚Β Β  β”œβ”€β”€ startup_k20x7.mk
+β”‚Β Β  β”œβ”€β”€ startup_k20x.mk
+β”‚Β Β  β”œβ”€β”€ startup_kl2x.mk
+β”‚Β Β  └── startup_stm32l4xx.mk
+β”œβ”€β”€ rules.ld
+β”œβ”€β”€ rules.mk
+└── vectors.c
+
+chibios/os/hal/
+β”œβ”€β”€ boards
+β”‚Β Β  β”œβ”€β”€ FREESCALE_FREEDOM_K20D50M
+β”‚Β Β  β”‚Β Β  β”œβ”€β”€ board.c
+β”‚Β Β  β”‚Β Β  β”œβ”€β”€ board.h
+β”‚Β Β  β”‚Β Β  └── board.mk
+β”‚Β Β  β”œβ”€β”€ MCHCK_K20
+β”‚Β Β  β”‚Β Β  β”œβ”€β”€ board.c
+β”‚Β Β  β”‚Β Β  β”œβ”€β”€ board.h
+β”‚Β Β  β”‚Β Β  └── board.mk
+β”‚Β Β  β”œβ”€β”€ PJRC_TEENSY_3
+β”‚Β Β  β”‚Β Β  β”œβ”€β”€ board.c
+β”‚Β Β  β”‚Β Β  β”œβ”€β”€ board.h
+β”‚Β Β  β”‚Β Β  └── board.mk
+β”‚Β Β  β”œβ”€β”€ PJRC_TEENSY_3_1
+β”‚Β Β  β”‚Β Β  β”œβ”€β”€ board.c
+β”‚Β Β  β”‚Β Β  β”œβ”€β”€ board.h
+β”‚Β Β  β”‚Β Β  └── board.mk
+β”‚Β Β  β”œβ”€β”€ PJRC_TEENSY_LC
+β”‚Β Β  β”‚Β Β  β”œβ”€β”€ board.c
+β”‚Β Β  β”‚Β Β  β”œβ”€β”€ board.h
+β”‚Β Β  β”‚Β Β  └── board.mk
+β”‚Β Β  β”œβ”€β”€ readme.txt
+β”‚Β Β  β”œβ”€β”€ simulator
+β”‚Β Β  β”‚Β Β  β”œβ”€β”€ board.c
+β”‚Β Β  β”‚Β Β  β”œβ”€β”€ board.h
+β”‚Β Β  β”‚Β Β  └── board.mk
+β”‚Β Β  β”œβ”€β”€ ST_NUCLEO_F030R8
+β”‚Β Β  β”‚Β Β  β”œβ”€β”€ board.c
+β”‚Β Β  β”‚Β Β  β”œβ”€β”€ board.h
+β”‚Β Β  β”‚Β Β  β”œβ”€β”€ board.mk
+β”‚Β Β  β”‚Β Β  └── cfg
+β”‚Β Β  β”‚Β Β  └── board.chcfg
+β”œβ”€β”€ hal.mk
+β”œβ”€β”€ include
+β”‚Β Β  β”œβ”€β”€ adc.h
+β”‚Β Β  β”œβ”€β”€ can.h
+β”‚Β Β  β”œβ”€β”€ dac.h
+β”‚Β Β  β”œβ”€β”€ ext.h
+β”‚Β Β  β”œβ”€β”€ gpt.h
+β”‚Β Β  β”œβ”€β”€ hal_channels.h
+β”‚Β Β  β”œβ”€β”€ hal_files.h
+β”‚Β Β  β”œβ”€β”€ hal.h
+β”‚Β Β  β”œβ”€β”€ hal_ioblock.h
+β”‚Β Β  β”œβ”€β”€ hal_mmcsd.h
+β”‚Β Β  β”œβ”€β”€ hal_queues.h
+β”‚Β Β  β”œβ”€β”€ hal_streams.h
+β”‚Β Β  β”œβ”€β”€ i2c.h
+β”‚Β Β  β”œβ”€β”€ i2s.h
+β”‚Β Β  β”œβ”€β”€ icu.h
+β”‚Β Β  β”œβ”€β”€ mac.h
+β”‚Β Β  β”œβ”€β”€ mii.h
+β”‚Β Β  β”œβ”€β”€ mmc_spi.h
+β”‚Β Β  β”œβ”€β”€ pal.h
+β”‚Β Β  β”œβ”€β”€ pwm.h
+β”‚Β Β  β”œβ”€β”€ rtc.h
+β”‚Β Β  β”œβ”€β”€ sdc.h
+β”‚Β Β  β”œβ”€β”€ serial.h
+β”‚Β Β  β”œβ”€β”€ serial_usb.h
+β”‚Β Β  β”œβ”€β”€ spi.h
+β”‚Β Β  β”œβ”€β”€ st.h
+β”‚Β Β  β”œβ”€β”€ uart.h
+β”‚Β Β  └── usb.h
+β”œβ”€β”€ lib
+β”‚Β Β  └── streams
+β”‚Β Β  β”œβ”€β”€ chprintf.c
+β”‚Β Β  β”œβ”€β”€ chprintf.h
+β”‚Β Β  β”œβ”€β”€ memstreams.c
+β”‚Β Β  β”œβ”€β”€ memstreams.h
+β”‚Β Β  β”œβ”€β”€ nullstreams.c
+β”‚Β Β  └── nullstreams.h
+β”œβ”€β”€ osal
+β”‚Β Β  β”œβ”€β”€ nil
+β”‚Β Β  β”‚Β Β  β”œβ”€β”€ osal.c
+β”‚Β Β  β”‚Β Β  β”œβ”€β”€ osal.h
+β”‚Β Β  β”‚Β Β  └── osal.mk
+β”‚Β Β  β”œβ”€β”€ os-less
+β”‚Β Β  β”‚Β Β  └── ARMCMx
+β”‚Β Β  β”‚Β Β  β”œβ”€β”€ osal.c
+β”‚Β Β  β”‚Β Β  β”œβ”€β”€ osal.h
+β”‚Β Β  β”‚Β Β  └── osal.mk
+β”‚Β Β  └── rt
+β”‚Β Β  β”œβ”€β”€ osal.c
+β”‚Β Β  β”œβ”€β”€ osal.h
+β”‚Β Β  └── osal.mk
+β”œβ”€β”€ ports
+β”‚Β Β  β”œβ”€β”€ AVR
+β”‚Β Β  β”œβ”€β”€ common
+β”‚Β Β  β”‚Β Β  └── ARMCMx
+β”‚Β Β  β”‚Β Β  β”œβ”€β”€ mpu.h
+β”‚Β Β  β”‚Β Β  β”œβ”€β”€ nvic.c
+β”‚Β Β  β”‚Β Β  └── nvic.h
+β”‚Β Β  β”œβ”€β”€ KINETIS
+β”‚Β Β  β”‚Β Β  β”œβ”€β”€ K20x
+β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ hal_lld.c
+β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ hal_lld.h
+β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ kinetis_registry.h
+β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ platform.dox
+β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ platform.mk
+β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ pwm_lld.c
+β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ pwm_lld.h
+β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ spi_lld.c
+β”‚Β Β  β”‚Β Β  β”‚Β Β  └── spi_lld.h
+β”‚Β Β  β”‚Β Β  β”œβ”€β”€ KL2x
+β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ hal_lld.c
+β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ hal_lld.h
+β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ kinetis_registry.h
+β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ platform.mk
+β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ pwm_lld.c
+β”‚Β Β  β”‚Β Β  β”‚Β Β  └── pwm_lld.h
+β”‚Β Β  β”‚Β Β  β”œβ”€β”€ LLD
+β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ adc_lld.c
+β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ adc_lld.h
+β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ ext_lld.c
+β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ ext_lld.h
+β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ gpt_lld.c
+β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ gpt_lld.h
+β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ i2c_lld.c
+β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ i2c_lld.h
+β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ pal_lld.c
+β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ pal_lld.h
+β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ serial_lld.c
+β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ serial_lld.h
+β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ st_lld.c
+β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ st_lld.h
+β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ usb_lld.c
+β”‚Β Β  β”‚Β Β  β”‚Β Β  └── usb_lld.h
+β”‚Β Β  β”‚Β Β  └── README.md
+β”‚Β Β  β”œβ”€β”€ LPC
+β”‚Β Β  β”œβ”€β”€ simulator
+β”‚Β Β  └── STM32
+β”œβ”€β”€ src
+β”‚Β Β  β”œβ”€β”€ adc.c
+β”‚Β Β  β”œβ”€β”€ can.c
+β”‚Β Β  β”œβ”€β”€ dac.c
+β”‚Β Β  β”œβ”€β”€ ext.c
+β”‚Β Β  β”œβ”€β”€ gpt.c
+β”‚Β Β  β”œβ”€β”€ hal.c
+β”‚Β Β  β”œβ”€β”€ hal_mmcsd.c
+β”‚Β Β  β”œβ”€β”€ hal_queues.c
+β”‚Β Β  β”œβ”€β”€ i2c.c
+β”‚Β Β  β”œβ”€β”€ i2s.c
+β”‚Β Β  β”œβ”€β”€ icu.c
+β”‚Β Β  β”œβ”€β”€ mac.c
+β”‚Β Β  β”œβ”€β”€ mmc_spi.c
+β”‚Β Β  β”œβ”€β”€ pal.c
+β”‚Β Β  β”œβ”€β”€ pwm.c
+β”‚Β Β  β”œβ”€β”€ rtc.c
+β”‚Β Β  β”œβ”€β”€ sdc.c
+β”‚Β Β  β”œβ”€β”€ serial.c
+β”‚Β Β  β”œβ”€β”€ serial_usb.c
+β”‚Β Β  β”œβ”€β”€ spi.c
+β”‚Β Β  β”œβ”€β”€ st.c
+β”‚Β Β  β”œβ”€β”€ uart.c
+β”‚Β Β  └── usb.c
+└── templates
+ β”œβ”€β”€ adc_lld.c
+ β”œβ”€β”€ adc_lld.h
+ β”œβ”€β”€ can_lld.c
+ β”œβ”€β”€ can_lld.h
+ β”œβ”€β”€ dac_lld.c
+ β”œβ”€β”€ dac_lld.h
+ β”œβ”€β”€ ext_lld.c
+ β”œβ”€β”€ ext_lld.h
+ β”œβ”€β”€ gpt_lld.c
+ β”œβ”€β”€ gpt_lld.h
+ β”œβ”€β”€ halconf.h
+ β”œβ”€β”€ hal_lld.c
+ β”œβ”€β”€ hal_lld.h
+ β”œβ”€β”€ i2c_lld.c
+ β”œβ”€β”€ i2c_lld.h
+ β”œβ”€β”€ i2s_lld.c
+ β”œβ”€β”€ i2s_lld.h
+ β”œβ”€β”€ icu_lld.c
+ β”œβ”€β”€ icu_lld.h
+ β”œβ”€β”€ mac_lld.c
+ β”œβ”€β”€ mac_lld.h
+ β”œβ”€β”€ mcuconf.h
+ β”œβ”€β”€ osal
+ β”‚Β Β  β”œβ”€β”€ osal.c
+ β”‚Β Β  β”œβ”€β”€ osal.h
+ β”‚Β Β  └── osal.mk
+ β”œβ”€β”€ pal_lld.c
+ β”œβ”€β”€ pal_lld.h
+ β”œβ”€β”€ platform.mk
+ β”œβ”€β”€ pwm_lld.c
+ β”œβ”€β”€ pwm_lld.h
+ β”œβ”€β”€ rtc_lld.c
+ β”œβ”€β”€ rtc_lld.h
+ β”œβ”€β”€ sdc_lld.c
+ β”œβ”€β”€ sdc_lld.h
+ β”œβ”€β”€ serial_lld.c
+ β”œβ”€β”€ serial_lld.h
+ β”œβ”€β”€ spi_lld.c
+ β”œβ”€β”€ spi_lld.h
+ β”œβ”€β”€ st_lld.c
+ β”œβ”€β”€ st_lld.h
+ β”œβ”€β”€ uart_lld.c
+ β”œβ”€β”€ uart_lld.h
+ β”œβ”€β”€ usb_lld.c
+ └── usb_lld.h
diff --git a/keyboards/input_club/ergodox_infinity/chconf.h b/keyboards/input_club/ergodox_infinity/chconf.h
new file mode 100644
index 0000000000..710d8aa437
--- /dev/null
+++ b/keyboards/input_club/ergodox_infinity/chconf.h
@@ -0,0 +1,37 @@
+/* Copyright 2020 QMK
+ *
+ * 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/>.
+ */
+
+/*
+ * This file was auto-generated by:
+ * `qmk chibios-confmigrate -i keyboards/ergodox_infinity/chconf.h -r platforms/chibios/common/configs/chconf.h`
+ */
+
+#pragma once
+
+#define CH_CFG_ST_TIMEDELTA 0
+
+#define CH_CFG_TIME_QUANTUM 20
+
+#define CH_CFG_USE_REGISTRY TRUE
+
+#define CH_CFG_USE_WAITEXIT TRUE
+
+#define CH_CFG_USE_HEAP TRUE
+
+#define CH_CFG_USE_DYNAMIC TRUE
+
+#include_next <chconf.h>
+
diff --git a/keyboards/input_club/ergodox_infinity/config.h b/keyboards/input_club/ergodox_infinity/config.h
new file mode 100644
index 0000000000..e6f1b81f54
--- /dev/null
+++ b/keyboards/input_club/ergodox_infinity/config.h
@@ -0,0 +1,157 @@
+/*
+Copyright 2015 Jun Wako <wakojun@gmail.com>
+
+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
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x1c11
+#define PRODUCT_ID 0xb04d
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Input Club
+#define PRODUCT Infinity_Ergodox/QMK
+
+#define MOUSEKEY_INTERVAL 20
+#define MOUSEKEY_DELAY 0
+#define MOUSEKEY_TIME_TO_MAX 60
+#define MOUSEKEY_MAX_SPEED 7
+#define MOUSEKEY_WHEEL_DELAY 0
+
+#define TAPPING_TOGGLE 1
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+#define TAPPING_TERM 200
+#define IGNORE_MOD_TAP_INTERRUPT // this makes it possible to do rolling combos (zx) with keys that convert to other keys on hold (z becomes ctrl when you hold it, and when this option isn't enabled, z rapidly followed by x actually sends Ctrl-x. That's bad.)
+
+/* 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
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ get_mods() == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL)) || \
+ get_mods() == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) \
+)
+
+/* key matrix size */
+#define MATRIX_ROWS 18
+#define MATRIX_COLS 5
+
+// For some reason, the rows are colums in the schematic, and vice versa
+#define MATRIX_ROW_PINS { B2, B3, B18, B19, C0, C9, C10, C11, D0 }
+#define MATRIX_COL_PINS { D1, D4, D5, D6, D7 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL */
+#define DIODE_DIRECTION ROW2COL
+
+/* Serial config (for communication between halves) */
+#define SERIAL_USART_DRIVER SD1 // Only true for the master half
+#define SERIAL_USART_CONFIG { (SERIAL_USART_SPEED), } // Only field is speed
+#define SERIAL_USART_FULL_DUPLEX
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 3
+
+#define LED_BRIGHTNESS_LO 100
+#define LED_BRIGHTNESS_HI 255
+
+/* LED matrix driver */
+#define LED_DRIVER_ADDR_1 0x74
+#define LED_DRIVER_COUNT 1
+#define DRIVER_LED_TOTAL 76
+#define LED_MATRIX_SPLIT { 38, 38 }
+#define LED_DISABLE_WHEN_USB_SUSPENDED
+
+// LED Matrix Animation modes. Explicitly enabled
+// For full list of effects, see:
+// https://docs.qmk.fm/#/feature_led_matrix?id=led-matrix-effects
+#define ENABLE_LED_MATRIX_ALPHAS_MODS
+#define ENABLE_LED_MATRIX_BREATHING
+#define ENABLE_LED_MATRIX_BAND
+#define ENABLE_LED_MATRIX_BAND_PINWHEEL
+#define ENABLE_LED_MATRIX_BAND_SPIRAL
+#define ENABLE_LED_MATRIX_CYCLE_LEFT_RIGHT
+#define ENABLE_LED_MATRIX_CYCLE_UP_DOWN
+#define ENABLE_LED_MATRIX_CYCLE_OUT_IN
+#define ENABLE_LED_MATRIX_DUAL_BEACON
+#if defined(LED_MATRIX_KEYREACTIVE_ENABLED)
+# define ENABLE_LED_MATRIX_SOLID_REACTIVE_SIMPLE
+# define ENABLE_LED_MATRIX_SOLID_REACTIVE_WIDE
+# define ENABLE_LED_MATRIX_SOLID_REACTIVE_MULTIWIDE
+# define ENABLE_LED_MATRIX_SOLID_REACTIVE_CROSS
+# define ENABLE_LED_MATRIX_SOLID_REACTIVE_MULTICROSS
+# define ENABLE_LED_MATRIX_SOLID_REACTIVE_NEXUS
+# define ENABLE_LED_MATRIX_SOLID_REACTIVE_MULTINEXUS
+# define ENABLE_LED_MATRIX_SPLASH
+# define ENABLE_LED_MATRIX_MULTISPLASH
+#endif
+#define ENABLE_LED_MATRIX_WAVE_LEFT_RIGHT
+#define ENABLE_LED_MATRIX_WAVE_UP_DOWN
+
+/* i2c (for LED matrix) */
+#define I2C1_CLOCK_SPEED 400000
+#define I2C1_SCL_PAL_MODE PAL_MODE_ALTERNATIVE_2
+#define I2C1_SDA_PAL_MODE PAL_MODE_ALTERNATIVE_2
+#define I2C1_SCL_PIN B0
+#define I2C1_SDA_PIN B1
+
+#ifdef ST7565_ENABLE
+/* LCD driver */
+# define ST7565_A0_PIN C7
+# define ST7565_RST_PIN C8
+# define ST7565_SS_PIN C4
+# define ST7565_SPI_CLK_DIVISOR 2
+# define ST7565_CONTRAST 22
+# define ST7565_DISPLAY_WIDTH 128
+# define ST7565_DISPLAY_HEIGHT 32
+
+/* SPI (for LCD) */
+# define SPI_DRIVER SPID1
+# define SPI_SCK_PIN C5
+# define SPI_SCK_PAL_MODE PAL_MODE_ALTERNATIVE_2
+# define SPI_MOSI_PIN C6
+# define SPI_MOSI_PAL_MODE PAL_MODE_ALTERNATIVE_2
+# define SPI_MISO_PIN A4 // Just an unused pin, the "normal" MISO pin (C7) is used for other things
+# define SPI_MISO_PAL_MODE PAL_MODE_ALTERNATIVE_7 // Default for A4
+#endif
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
+
+/*
+ * 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
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
diff --git a/keyboards/input_club/ergodox_infinity/ergodox_infinity.c b/keyboards/input_club/ergodox_infinity/ergodox_infinity.c
new file mode 100644
index 0000000000..e6ac2c4559
--- /dev/null
+++ b/keyboards/input_club/ergodox_infinity/ergodox_infinity.c
@@ -0,0 +1,363 @@
+#include QMK_KEYBOARD_H
+#include <ch.h>
+#include <hal.h>
+#include <string.h>
+#include "eeconfig.h"
+
+#define RED_PIN 1
+#define GREEN_PIN 2
+#define BLUE_PIN 3
+#define CHANNEL_RED FTM0->CHANNEL[0]
+#define CHANNEL_GREEN FTM0->CHANNEL[1]
+#define CHANNEL_BLUE FTM0->CHANNEL[2]
+
+#define RGB_PORT PORTC
+#define RGB_PORT_GPIO GPIOC
+
+// Base FTM clock selection (72 MHz system clock)
+// @ 0xFFFF period, 72 MHz / (0xFFFF * 2) = Actual period
+// Higher pre-scalar will use the most power (also look the best)
+// Pre-scalar calculations
+// 0 - 72 MHz -> 549 Hz
+// 1 - 36 MHz -> 275 Hz
+// 2 - 18 MHz -> 137 Hz
+// 3 - 9 MHz -> 69 Hz (Slightly visible flicker)
+// 4 - 4 500 kHz -> 34 Hz (Visible flickering)
+// 5 - 2 250 kHz -> 17 Hz
+// 6 - 1 125 kHz -> 9 Hz
+// 7 - 562 500 Hz -> 4 Hz
+// Using a higher pre-scalar without flicker is possible but FTM0_MOD will need to be reduced
+// Which will reduce the brightness range
+#define PRESCALAR_DEFINE 0
+void lcd_backlight_hal_init(void) {
+ // Setup Backlight
+ SIM->SCGC6 |= SIM_SCGC6_FTM0;
+ FTM0->CNT = 0; // Reset counter
+
+ // PWM Period
+ // 16-bit maximum
+ FTM0->MOD = 0xFFFF;
+
+ // Set FTM to PWM output - Edge Aligned, Low-true pulses
+#define CNSC_MODE FTM_SC_CPWMS | FTM_SC_PS(4) | FTM_SC_CLKS(0)
+ CHANNEL_RED.CnSC = CNSC_MODE;
+ CHANNEL_GREEN.CnSC = CNSC_MODE;
+ CHANNEL_BLUE.CnSC = CNSC_MODE;
+
+ // System clock, /w prescalar setting
+ FTM0->SC = FTM_SC_CLKS(1) | FTM_SC_PS(PRESCALAR_DEFINE);
+
+ CHANNEL_RED.CnV = 0;
+ CHANNEL_GREEN.CnV = 0;
+ CHANNEL_BLUE.CnV = 0;
+
+ RGB_PORT_GPIO->PDDR |= (1 << RED_PIN);
+ RGB_PORT_GPIO->PDDR |= (1 << GREEN_PIN);
+ RGB_PORT_GPIO->PDDR |= (1 << BLUE_PIN);
+
+#define RGB_MODE PORTx_PCRn_SRE | PORTx_PCRn_DSE | PORTx_PCRn_MUX(4)
+ RGB_PORT->PCR[RED_PIN] = RGB_MODE;
+ RGB_PORT->PCR[GREEN_PIN] = RGB_MODE;
+ RGB_PORT->PCR[BLUE_PIN] = RGB_MODE;
+}
+
+static uint16_t cie_lightness(uint16_t v) {
+ // The CIE 1931 formula for lightness
+ // Y = luminance (output) 0-1
+ // L = lightness input 0 - 100
+
+ // Y = (L* / 902.3) if L* <= 8
+ // Y = ((L* + 16) / 116)^3 if L* > 8
+
+ float l = 100.0f * (v / 65535.0f);
+ float y = 0.0f;
+ if (l <= 8.0f) {
+ y = l / 902.3;
+ } else {
+ y = ((l + 16.0f) / 116.0f);
+ y = y * y * y;
+ if (y > 1.0f) {
+ y = 1.0f;
+ }
+ }
+ return y * 65535.0f;
+}
+
+void ergodox_infinity_lcd_color(uint16_t r, uint16_t g, uint16_t b) {
+ CHANNEL_RED.CnV = cie_lightness(r);
+ CHANNEL_GREEN.CnV = cie_lightness(g);
+ CHANNEL_BLUE.CnV = cie_lightness(b);
+}
+
+__attribute__ ((weak)) void matrix_init_user(void) {}
+
+__attribute__ ((weak)) void matrix_scan_user(void) {}
+
+
+void keyboard_pre_init_kb() {
+#ifdef LED_MATRIX_ENABLE
+ // Turn on LED controller
+ setPinOutput(B16);
+ writePinHigh(B16);
+#endif
+ // The backlight always has to be initialized, otherwise it will stay lit
+ lcd_backlight_hal_init();
+#ifdef ST7565_ENABLE
+ ergodox_infinity_lcd_color(UINT16_MAX / 2, UINT16_MAX / 2, UINT16_MAX / 2);
+#endif
+ keyboard_pre_init_user();
+}
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+#ifdef LED_MATRIX_ENABLE
+ /*
+ * Since K20x is stuck with a 32 byte EEPROM (see tmk_core/common/chibios/eeprom_teensy.c),
+ * and neither led_matrix_eeconfig.speed or .flags fit in this boundary, just force their values to default on boot.
+ */
+# if !defined(LED_MATRIX_STARTUP_SPD)
+# define LED_MATRIX_STARTUP_SPD UINT8_MAX / 2
+# endif
+ led_matrix_set_speed(LED_MATRIX_STARTUP_SPD);
+ led_matrix_set_flags(LED_FLAG_ALL);
+#endif
+
+ matrix_init_user();
+}
+
+__attribute__ ((weak)) void ergodox_board_led_on(void) {}
+
+__attribute__ ((weak)) void ergodox_right_led_1_on(void) {}
+
+__attribute__ ((weak)) void ergodox_right_led_2_on(void) {}
+
+__attribute__ ((weak)) void ergodox_right_led_3_on(void) {}
+
+__attribute__ ((weak)) void ergodox_board_led_off(void) {}
+
+__attribute__ ((weak)) void ergodox_right_led_1_off(void) {}
+
+__attribute__ ((weak)) void ergodox_right_led_2_off(void) {}
+
+__attribute__ ((weak)) void ergodox_right_led_3_off(void) {}
+
+__attribute__ ((weak)) void ergodox_right_led_1_set(uint8_t n) {}
+
+__attribute__ ((weak)) void ergodox_right_led_2_set(uint8_t n) {}
+
+__attribute__ ((weak)) void ergodox_right_led_3_set(uint8_t n) {}
+
+#ifdef SWAP_HANDS_ENABLE
+__attribute__ ((weak))
+const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
+ {{0, 9}, {1, 9}, {2, 9}, {3, 9}, {4, 9}},
+ {{0, 10}, {1, 10}, {2, 10}, {3, 10}, {4, 10}},
+ {{0, 11}, {1, 11}, {2, 11}, {3, 11}, {4, 11}},
+ {{0, 12}, {1, 12}, {2, 12}, {3, 12}, {4, 12}},
+ {{0, 13}, {1, 13}, {2, 13}, {3, 13}, {4, 13}},
+ {{0, 14}, {1, 14}, {2, 14}, {3, 14}, {4, 14}},
+ {{0, 15}, {1, 15}, {2, 15}, {3, 15}, {4, 15}},
+ {{0, 16}, {1, 16}, {2, 16}, {3, 16}, {4, 16}},
+ {{0, 17}, {1, 17}, {2, 17}, {3, 17}, {4, 17}},
+ {{0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}},
+ {{0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1}},
+ {{0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}},
+ {{0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}},
+ {{0, 4}, {1, 4}, {2, 4}, {3, 4}, {4, 4}},
+ {{0, 5}, {1, 5}, {2, 5}, {3, 5}, {4, 5}},
+ {{0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6}},
+ {{0, 7}, {1, 7}, {2, 7}, {3, 7}, {4, 7}},
+ {{0, 8}, {1, 8}, {2, 8}, {3, 8}, {4, 8}},
+};
+#endif
+
+#ifdef LED_MATRIX_ENABLE
+const is31_led PROGMEM g_is31_leds[DRIVER_LED_TOTAL] = {
+// The numbers in the comments are the led numbers DXX on the PCB
+/* Refer to IS31 manual for these locations
+ * driver
+ * | LED address
+ * | | */
+// Left half
+// 45 44 43 42 41 40 39
+ { 0, C2_2 }, { 0, C1_2 }, { 0, C5_1 }, { 0, C4_1 }, { 0, C3_1 }, { 0, C2_1 }, { 0, C1_1 },
+// 52 51 50 49 48 47 46
+ { 0, C4_3 }, { 0, C3_3 }, { 0, C2_3 }, { 0, C1_3 }, { 0, C5_2 }, { 0, C4_2 }, { 0, C3_2 },
+// 58 57 56 55 54 53
+ { 0, C5_4 }, { 0, C4_4 }, { 0, C3_4 }, { 0, C2_4 }, { 0, C1_4 }, { 0, C5_3 },
+// 67 66 65 64 63 62 61
+ { 0, C4_6 }, { 0, C3_6 }, { 0, C2_6 }, { 0, C1_6 }, { 0, C5_5 }, { 0, C4_5 }, { 0, C3_5 },
+// 76 75 74 73 72
+ { 0, C4_8 }, { 0, C3_8 }, { 0, C2_8 }, { 0, C1_8 }, { 0, C4_7 },
+// 60 59
+ { 0, C2_5 }, { 0, C1_5 },
+// 68
+ { 0, C5_6 },
+// 71 70 69
+ { 0, C3_7 }, { 0, C2_7 }, { 0, C1_7 },
+// Right half (mirrored)
+// Due to how LED_MATRIX_SPLIT is implemented, only the first half of g_is31_leds is actually used.
+// Luckily, the right half has the same LED pinouts, just mirrored.
+// 45 44 43 42 41 40 39
+ { 0, C2_2 }, { 0, C1_2 }, { 0, C5_1 }, { 0, C4_1 }, { 0, C3_1 }, { 0, C2_1 }, { 0, C1_1 },
+// 52 51 50 49 48 47 46
+ { 0, C4_3 }, { 0, C3_3 }, { 0, C2_3 }, { 0, C1_3 }, { 0, C5_2 }, { 0, C4_2 }, { 0, C3_2 },
+// 58 57 56 55 54 53
+ { 0, C5_4 }, { 0, C4_4 }, { 0, C3_4 }, { 0, C2_4 }, { 0, C1_4 }, { 0, C5_3 },
+// 67 66 65 64 63 62 61
+ { 0, C4_6 }, { 0, C3_6 }, { 0, C2_6 }, { 0, C1_6 }, { 0, C5_5 }, { 0, C4_5 }, { 0, C3_5 },
+// 76 75 74 73 72
+ { 0, C4_8 }, { 0, C3_8 }, { 0, C2_8 }, { 0, C1_8 }, { 0, C4_7 },
+// 60 59
+ { 0, C2_5 }, { 0, C1_5 },
+// 68
+ { 0, C5_6 },
+// 71 70 69
+ { 0, C3_7 }, { 0, C2_7 }, { 0, C1_7 },
+};
+
+led_config_t g_led_config = {
+ {
+ // Key Matrix to LED Index
+ // Left half
+ { NO_LED, NO_LED, NO_LED, 33, 34 },
+ { NO_LED, NO_LED, NO_LED, 32, 37 },
+ { 6, 13, NO_LED, 26, 36 },
+ { 5, 12, 19, 25, 35 },
+ { 4, 11, 18, 24, 31 },
+ { 3, 10, 17, 23, 30 },
+ { 2, 9, 16, 22, 29 },
+ { 1, 8, 15, 21, 28 },
+ { 0, 7, 14, 20, 27 },
+ // Right half
+ { NO_LED, NO_LED, NO_LED, 71, 72 },
+ { NO_LED, NO_LED, NO_LED, 70, 75 },
+ { 44, 51, NO_LED, 64, 74 },
+ { 43, 50, 57, 63, 73 },
+ { 42, 49, 56, 62, 69 },
+ { 41, 48, 55, 61, 68 },
+ { 40, 47, 54, 60, 67 },
+ { 39, 46, 53, 59, 66 },
+ { 38, 45, 52, 58, 65 },
+ }, {
+ // LED Index to Physical Position (assumes a reasonable gap between halves)
+ // Left half
+ { 0, 3 }, { 15, 3 }, { 27, 1 }, { 39, 0 }, { 51, 1 }, { 63, 2 }, { 75, 2 },
+ { 0, 13 }, { 15, 13 }, { 27, 11 }, { 39, 10 }, { 51, 11 }, { 63, 12 }, { 78, 17 },
+ { 0, 23 }, { 15, 23 }, { 27, 21 }, { 39, 20 }, { 51, 21 }, { 63, 22 },
+ { 0, 33 }, { 15, 33 }, { 27, 31 }, { 39, 30 }, { 51, 31 }, { 63, 32 }, { 78, 32 },
+ { 4, 43 }, { 15, 43 }, { 27, 41 }, { 39, 40 }, { 51, 41 },
+ { 89, 41 }, { 100, 46 },
+ { 95, 55 },
+ { 72, 54 }, { 83, 59 }, { 90, 64 },
+ // Right half (mirrored)
+ { 224, 3 }, { 209, 3 }, { 197, 1 }, { 185, 0 }, { 173, 1 }, { 161, 2 }, { 149, 2 },
+ { 224, 13 }, { 209, 13 }, { 197, 11 }, { 185, 10 }, { 173, 11 }, { 161, 12 }, { 146, 17 },
+ { 224, 23 }, { 209, 23 }, { 197, 21 }, { 185, 20 }, { 173, 21 }, { 161, 22 },
+ { 224, 33 }, { 209, 33 }, { 197, 31 }, { 185, 30 }, { 173, 31 }, { 161, 32 }, { 146, 32 },
+ { 220, 43 }, { 209, 43 }, { 197, 41 }, { 185, 40 }, { 173, 41 },
+ { 135, 41 }, { 124, 46 },
+ { 129, 55 },
+ { 152, 54 }, { 141, 59 }, { 134, 64 },
+ }, {
+ // LED Index to Flag
+ // Left half
+ 1, 4, 4, 4, 4, 4, 1,
+ 1, 4, 4, 4, 4, 4, 1,
+ 1, 4, 4, 4, 4, 4,
+ 1, 4, 4, 4, 4, 4, 1,
+ 1, 1, 1, 1, 1,
+ 1, 1,
+ 1,
+ 1, 1, 1,
+ // Right half (mirrored)
+ 1, 4, 4, 4, 4, 4, 1,
+ 1, 4, 4, 4, 4, 4, 1,
+ 1, 4, 4, 4, 4, 4,
+ 1, 4, 4, 4, 4, 4, 1,
+ 1, 1, 1, 1, 1,
+ 1, 1,
+ 1,
+ 1, 1, 1,
+ }
+};
+#endif
+
+#ifdef ST7565_ENABLE
+__attribute__((weak)) void st7565_on_user(void) {
+ ergodox_infinity_lcd_color(UINT16_MAX / 2, UINT16_MAX / 2, UINT16_MAX / 2);
+}
+
+__attribute__((weak)) void st7565_off_user(void) {
+ ergodox_infinity_lcd_color(0, 0, 0);
+}
+
+static void format_layer_bitmap_string(char* buffer, uint8_t offset) {
+ for (int i = 0; i < 16 && i + offset < MAX_LAYER; i++) {
+ if (i == 0 || i == 4 || i == 8 || i == 12) {
+ *buffer = ' ';
+ ++buffer;
+ }
+
+ uint8_t layer = i + offset;
+ if (layer_state_cmp(default_layer_state, layer)) {
+ *buffer = 'D';
+ } else if (layer_state_is(layer)) {
+ *buffer = '1';
+ } else {
+ *buffer = '_';
+ }
+ ++buffer;
+ }
+ *buffer = 0;
+}
+
+__attribute__((weak)) void st7565_task_user(void) {
+ if (is_keyboard_master()) {
+ // Draw led and layer status
+ led_t leds = host_keyboard_led_state();
+ if(leds.num_lock) { st7565_write("Num ", false); }
+ if(leds.caps_lock) { st7565_write("Cap ", false); }
+ if(leds.scroll_lock) { st7565_write("Scrl ", false); }
+ if(leds.compose) { st7565_write("Com ", false); }
+ if(leds.kana) { st7565_write("Kana", false); }
+ st7565_advance_page(true);
+
+ char layer_buffer[16 + 5]; // 3 spaces and one null terminator
+ st7565_set_cursor(0, 1);
+ format_layer_bitmap_string(layer_buffer, 0);
+ st7565_write_ln(layer_buffer, false);
+ format_layer_bitmap_string(layer_buffer, 16);
+ st7565_write_ln(layer_buffer, false);
+ st7565_write_ln(" 1=On D=Default", false);
+ } else {
+ // Draw logo
+ static const char qmk_logo[] = {
+ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94,
+ 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4,
+ 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0x00
+ };
+
+ st7565_write(qmk_logo, false);
+ st7565_write(" Infinity Ergodox ", false);
+ }
+}
+#endif
+
+#if defined(SPLIT_KEYBOARD)
+void usart_master_init(SerialDriver **driver) {
+ PORTA->PCR[1] = PORTx_PCRn_PE | PORTx_PCRn_PS | PORTx_PCRn_PFE | PORTx_PCRn_MUX(2);
+ PORTA->PCR[2] = PORTx_PCRn_DSE | PORTx_PCRn_SRE | PORTx_PCRn_MUX(2);
+
+ // driver is set to SD1 in config.h
+}
+
+void usart_slave_init(SerialDriver **driver) {
+ PORTE->PCR[0] = PORTx_PCRn_PE | PORTx_PCRn_PS | PORTx_PCRn_PFE | PORTx_PCRn_MUX(3);
+ PORTE->PCR[1] = PORTx_PCRn_DSE | PORTx_PCRn_SRE | PORTx_PCRn_MUX(3);
+
+ *driver = &SD2;
+}
+#endif
diff --git a/keyboards/input_club/ergodox_infinity/ergodox_infinity.h b/keyboards/input_club/ergodox_infinity/ergodox_infinity.h
new file mode 100644
index 0000000000..b9636b69be
--- /dev/null
+++ b/keyboards/input_club/ergodox_infinity/ergodox_infinity.h
@@ -0,0 +1,153 @@
+#pragma once
+
+#include "quantum.h"
+
+void ergodox_board_led_on(void);
+void ergodox_right_led_1_on(void);
+void ergodox_right_led_2_on(void);
+void ergodox_right_led_3_on(void);
+
+inline void ergodox_right_led_on(uint8_t led) {
+ switch (led) {
+ case 0:
+ ergodox_right_led_1_on();
+ break;
+ case 1:
+ ergodox_right_led_2_on();
+ break;
+ case 2:
+ ergodox_right_led_3_on();
+ break;
+ }
+}
+
+void ergodox_board_led_off(void);
+void ergodox_right_led_1_off(void);
+void ergodox_right_led_2_off(void);
+void ergodox_right_led_3_off(void);
+inline void ergodox_right_led_off(uint8_t led) {
+ switch (led) {
+ case 0:
+ ergodox_right_led_1_off();
+ break;
+ case 1:
+ ergodox_right_led_2_off();
+ break;
+ case 2:
+ ergodox_right_led_3_off();
+ break;
+ }
+}
+
+inline void ergodox_led_all_on(void)
+{
+ ergodox_board_led_on();
+ ergodox_right_led_1_on();
+ ergodox_right_led_2_on();
+ ergodox_right_led_3_on();
+}
+
+inline void ergodox_led_all_off(void)
+{
+ ergodox_board_led_off();
+ ergodox_right_led_1_off();
+ ergodox_right_led_2_off();
+ ergodox_right_led_3_off();
+}
+
+void ergodox_right_led_1_set(uint8_t n);
+void ergodox_right_led_2_set(uint8_t n);
+void ergodox_right_led_3_set(uint8_t n);
+
+inline void ergodox_right_led_set(uint8_t led, uint8_t n){
+ switch (led) {
+ case 0:
+ ergodox_right_led_1_set(n);
+ break;
+ case 1:
+ ergodox_right_led_2_set(n);
+ break;
+ case 2:
+ ergodox_right_led_3_set(n);
+ break;
+ }
+}
+
+inline void ergodox_led_all_set(uint8_t n) {
+ ergodox_right_led_1_set(n);
+ ergodox_right_led_2_set(n);
+ ergodox_right_led_3_set(n);
+}
+
+void ergodox_infinity_lcd_color(uint16_t r, uint16_t g, uint16_t b);
+
+#define XXX KC_NO
+
+#define LAYOUT_ergodox( \
+ A80, A70, A60, A50, A40, A30, A20, \
+ A81, A71, A61, A51, A41, A31, A21, \
+ A82, A72, A62, A52, A42, A32, \
+ A83, A73, A63, A53, A43, A33, A23, \
+ A84, A74, A64, A54, A44, \
+ A13, A03, \
+ A04, \
+ A34, A24, A14, \
+\
+ B20, B30, B40, B50, B60, B70, B80, \
+ B21, B31, B41, B51, B61, B71, B81, \
+ B32, B42, B52, B62, B72, B82, \
+ B23, B33, B43, B53, B63, B73, B83, \
+ B44, B54, B64, B74, B84, \
+ B03, B13, \
+ B04, \
+ B14, B24, B34 \
+) { \
+ { XXX, XXX, XXX, A03, A04 }, \
+ { XXX, XXX, XXX, A13, A14 }, \
+ { A20, A21, XXX, A23, A24 }, \
+ { A30, A31, A32, A33, A34 }, \
+ { A40, A41, A42, A43, A44 }, \
+ { A50, A51, A52, A53, A54 }, \
+ { A60, A61, A62, A63, A64 }, \
+ { A70, A71, A72, A73, A74 }, \
+ { A80, A81, A82, A83, A84 }, \
+ { XXX, XXX, XXX, B03, B04 }, \
+ { XXX, XXX, XXX, B13, B14 }, \
+ { B20, B21, XXX, B23, B24 }, \
+ { B30, B31, B32, B33, B34 }, \
+ { B40, B41, B42, B43, B44 }, \
+ { B50, B51, B52, B53, B54 }, \
+ { B60, B61, B62, B63, B64 }, \
+ { B70, B71, B72, B73, B74 }, \
+ { B80, B81, B82, B83, B84 } \
+}
+
+#define LAYOUT_ergodox_pretty( \
+ A80, A70, A60, A50, A40, A30, A20, B20, B30, B40, B50, B60, B70, B80, \
+ A81, A71, A61, A51, A41, A31, A21, B21, B31, B41, B51, B61, B71, B81, \
+ A82, A72, A62, A52, A42, A32, B32, B42, B52, B62, B72, B82, \
+ A83, A73, A63, A53, A43, A33, A23, B23, B33, B43, B53, B63, B73, B83, \
+ A84, A74, A64, A54, A44, B44, B54, B64, B74, B84, \
+ A13, A03, B03, B13, \
+ A04, B04, \
+ A34, A24, A14, B14, B24, B34 \
+) { \
+ { XXX, XXX, XXX, A03, A04 }, \
+ { XXX, XXX, XXX, A13, A14 }, \
+ { A20, A21, XXX, A23, A24 }, \
+ { A30, A31, A32, A33, A34 }, \
+ { A40, A41, A42, A43, A44 }, \
+ { A50, A51, A52, A53, A54 }, \
+ { A60, A61, A62, A63, A64 }, \
+ { A70, A71, A72, A73, A74 }, \
+ { A80, A81, A82, A83, A84 }, \
+ { XXX, XXX, XXX, B03, B04 }, \
+ { XXX, XXX, XXX, B13, B14 }, \
+ { B20, B21, XXX, B23, B24 }, \
+ { B30, B31, B32, B33, B34 }, \
+ { B40, B41, B42, B43, B44 }, \
+ { B50, B51, B52, B53, B54 }, \
+ { B60, B61, B62, B63, B64 }, \
+ { B70, B71, B72, B73, B74 }, \
+ { B80, B81, B82, B83, B84 } \
+}
diff --git a/keyboards/input_club/ergodox_infinity/halconf.h b/keyboards/input_club/ergodox_infinity/halconf.h
new file mode 100644
index 0000000000..8c050a2d5c
--- /dev/null
+++ b/keyboards/input_club/ergodox_infinity/halconf.h
@@ -0,0 +1,33 @@
+/* Copyright 2020 QMK
+ *
+ * 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/>.
+ */
+
+/*
+ * This file was auto-generated by:
+ * `qmk chibios-confmigrate -i keyboards/ergodox_infinity/halconf.h -r platforms/chibios/common/configs/halconf.h`
+ */
+
+#pragma once
+
+#define HAL_USE_I2C TRUE
+
+#define HAL_USE_SERIAL TRUE
+
+#define HAL_USE_SPI TRUE
+
+#define SERIAL_BUFFERS_SIZE 128
+
+#include_next <halconf.h>
+
diff --git a/keyboards/input_club/ergodox_infinity/info.json b/keyboards/input_club/ergodox_infinity/info.json
new file mode 100644
index 0000000000..22b20eec39
--- /dev/null
+++ b/keyboards/input_club/ergodox_infinity/info.json
@@ -0,0 +1,52 @@
+{
+ "keyboard_name": "Infinity Ergodox",
+ "layouts": {
+ "LAYOUT_ergodox": {
+ "layout": [
+ {"x":0, "y":0.375, "w":1.5}, {"x":1.5, "y":0.375}, {"x":2.5, "y":0.125}, {"x":3.5, "y":0}, {"x":4.5, "y":0.125}, {"x":5.5, "y":0.25}, {"x":6.5, "y":0.25},
+ {"x":0, "y":1.375, "w":1.5}, {"x":1.5, "y":1.375}, {"x":2.5, "y":1.125}, {"x":3.5, "y":1}, {"x":4.5, "y":1.125}, {"x":5.5, "y":1.25}, {"x":6.5, "y":1.25, "h":1.5},
+ {"x":0, "y":2.375, "w":1.5}, {"x":1.5, "y":2.375}, {"x":2.5, "y":2.125}, {"x":3.5, "y":2}, {"x":4.5, "y":2.125}, {"x":5.5, "y":2.25},
+ {"x":0, "y":3.375, "w":1.5}, {"x":1.5, "y":3.375}, {"x":2.5, "y":3.125}, {"x":3.5, "y":3}, {"x":4.5, "y":3.125}, {"x":5.5, "y":3.25}, {"x":6.5, "y":2.75, "h":1.5},
+ {"x":0.5, "y":4.375}, {"x":1.5, "y":4.375}, {"x":2.5, "y":4.125}, {"x":3.5, "y":4}, {"x":4.5, "y":4.125},
+
+ {"x":6, "y":5}, {"x":7, "y":5},
+ {"x":7, "y":6},
+ {"x":5, "y":6, "h":2}, {"x":6, "y":6, "h":2}, {"x":7, "y":7},
+
+
+ {"x":9.5, "y":0.25}, {"x":10.5, "y":0.25}, {"x":11.5, "y":0.125}, {"x":12.5, "y":0}, {"x":13.5, "y":0.125}, {"x":14.5, "y":0.375}, {"x":15.5, "y":0.375, "w":1.5},
+ {"x":9.5, "y":1.25, "h":1.5}, {"x":10.5, "y":1.25}, {"x":11.5, "y":1.125}, {"x":12.5, "y":1}, {"x":13.5, "y":1.125}, {"x":14.5, "y":1.375}, {"x":15.5, "y":1.375, "w":1.5},
+ {"x":10.5, "y":2.25}, {"x":11.5, "y":2.125}, {"x":12.5, "y":2}, {"x":13.5, "y":2.125}, {"x":14.5, "y":2.375}, {"x":15.5, "y":2.375, "w":1.5},
+ {"x":9.5, "y":2.75, "h":1.5}, {"x":10.5, "y":3.25}, {"x":11.5, "y":3.125}, {"x":12.5, "y":3}, {"x":13.5, "y":3.125}, {"x":14.5, "y":3.375}, {"x":15.5, "y":3.375, "w":1.5},
+ {"x":11.5, "y":4.125}, {"x":12.5, "y":4}, {"x":13.5, "y":4.125}, {"x":14.5, "y":4.375}, {"x":15.5, "y":4.375},
+
+
+ {"x":9, "y":5}, {"x":10, "y":5},
+ {"x":9, "y":6},
+ {"x":9, "y":7}, {"x":10, "y":6, "h":2}, {"x":11, "y":6, "h":2}
+ ]
+ },
+ "LAYOUT_ergodox_pretty": {
+ "layout": [
+ {"x":0, "y":0.375, "w":1.5}, {"x":1.5, "y":0.375}, {"x":2.5, "y":0.125}, {"x":3.5, "y":0}, {"x":4.5, "y":0.125}, {"x":5.5, "y":0.25}, {"x":6.5, "y":0.25},
+ {"x":9.5, "y":0.25}, {"x":10.5, "y":0.25}, {"x":11.5, "y":0.125}, {"x":12.5, "y":0}, {"x":13.5, "y":0.125}, {"x":14.5, "y":0.375}, {"x":15.5, "y":0.375, "w":1.5},
+
+ {"x":0, "y":1.375, "w":1.5}, {"x":1.5, "y":1.375}, {"x":2.5, "y":1.125}, {"x":3.5, "y":1}, {"x":4.5, "y":1.125}, {"x":5.5, "y":1.25}, {"x":6.5, "y":1.25, "h":1.5},
+ {"x":9.5, "y":1.25, "h":1.5}, {"x":10.5, "y":1.25}, {"x":11.5, "y":1.125}, {"x":12.5, "y":1}, {"x":13.5, "y":1.125}, {"x":14.5, "y":1.375}, {"x":15.5, "y":1.375, "w":1.5},
+
+ {"x":0, "y":2.375, "w":1.5}, {"x":1.5, "y":2.375}, {"x":2.5, "y":2.125}, {"x":3.5, "y":2}, {"x":4.5, "y":2.125}, {"x":5.5, "y":2.25},
+ {"x":10.5, "y":2.25}, {"x":11.5, "y":2.125}, {"x":12.5, "y":2}, {"x":13.5, "y":2.125}, {"x":14.5, "y":2.375}, {"x":15.5, "y":2.375, "w":1.5},
+
+ {"x":0, "y":3.375, "w":1.5}, {"x":1.5, "y":3.375}, {"x":2.5, "y":3.125}, {"x":3.5, "y":3}, {"x":4.5, "y":3.125}, {"x":5.5, "y":3.25}, {"x":6.5, "y":2.75, "h":1.5},
+ {"x":9.5, "y":2.75, "h":1.5}, {"x":10.5, "y":3.25}, {"x":11.5, "y":3.125}, {"x":12.5, "y":3}, {"x":13.5, "y":3.125}, {"x":14.5, "y":3.375}, {"x":15.5, "y":3.375, "w":1.5},
+
+ {"x":0.5, "y":4.375}, {"x":1.5, "y":4.375}, {"x":2.5, "y":4.125}, {"x":3.5, "y":4}, {"x":4.5, "y":4.125},
+ {"x":11.5, "y":4.125}, {"x":12.5, "y":4}, {"x":13.5, "y":4.125}, {"x":14.5, "y":4.375}, {"x":15.5, "y":4.375},
+
+ {"x":6, "y":5}, {"x":7, "y":5}, {"x":9, "y":5}, {"x":10, "y":5},
+ {"x":7, "y":6}, {"x":9, "y":6},
+ {"x":5, "y":6, "h":2}, {"x":6, "y":6, "h":2}, {"x":7, "y":7}, {"x":9, "y":7}, {"x":10, "y":6, "h":2}, {"x":11, "y":6, "h":2}
+ ]
+ }
+ }
+}
diff --git a/keyboards/input_club/ergodox_infinity/keymaps/default/keymap.c b/keyboards/input_club/ergodox_infinity/keymaps/default/keymap.c
new file mode 100644
index 0000000000..cd65001803
--- /dev/null
+++ b/keyboards/input_club/ergodox_infinity/keymaps/default/keymap.c
@@ -0,0 +1,189 @@
+#include QMK_KEYBOARD_H
+#include "version.h"
+
+enum custom_layers {
+ BASE, // default layer
+ SYMB, // symbols
+ MDIA, // media keys
+};
+
+
+enum custom_keycodes {
+ PLACEHOLDER = SAFE_RANGE, // can always be here
+ VRSN,
+ RGB_SLD
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | Del | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | BkSp | A | S | D | F | G |------| |------| H | J | K | L |; / L2|' / Cmd |
+ * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
+ * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | App | LGui | | Alt |Ctrl/Esc|
+ * ,------|------|------| |------+--------+------.
+ * | | | Home | | PgUp | | |
+ * | Space|Backsp|------| |------| Tab |Enter |
+ * | |ace | End | | PgDn | | |
+ * `--------------------' `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = LAYOUT_ergodox( // layer 0 : default
+ // left hand
+ KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT,
+ KC_DEL, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB),
+ KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
+ LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT,
+ ALT_T(KC_APP), KC_LGUI,
+ KC_HOME,
+ KC_SPC,KC_BSPC,KC_END,
+ // right hand
+ KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT),
+ MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
+ KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, TT(SYMB),
+ KC_LALT, CTL_T(KC_ESC),
+ KC_PGUP,
+ KC_PGDN,KC_TAB, KC_ENT
+ ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,---------------------------------------------------. ,--------------------------------------------------.
+ * |Version | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
+ * |---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
+ * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
+ * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
+ * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
+ * `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * |EEP_RST| | | | | | | . | 0 | = | |
+ * `-----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * |Animat| | |Toggle|Solid |
+ * ,------|------|------| |------+------+------.
+ * |Bright|Bright| | | |Hue- |Hue+ |
+ * |ness- |ness+ |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+// SYMBOLS
+[SYMB] = LAYOUT_ergodox(
+ // left hand
+ VRSN, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
+ KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+ KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+ KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+ EEP_RST,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ RGB_MOD,KC_TRNS,
+ KC_TRNS,
+ RGB_VAD,RGB_VAI,KC_TRNS,
+ // right hand
+ KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
+ KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
+ KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
+ KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS,
+ RGB_TOG, RGB_SLD,
+ KC_TRNS,
+ KC_TRNS, RGB_HUD, RGB_HUI
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | MsUp | | | | | | | | | | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | | | Prev | Next | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | |Brwser|
+ * | | |------| |------| |Back |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = LAYOUT_ergodox(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,
+ // right hand
+ 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_MPLY,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+ KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_WBAK
+),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ // dynamically generate these.
+ case VRSN:
+ if (record->event.pressed) {
+ SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
+ }
+ return false;
+ break;
+ case RGB_SLD:
+ if (record->event.pressed) {
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_mode(1);
+ #endif
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+ uint8_t layer = biton32(layer_state);
+
+ ergodox_board_led_off();
+ ergodox_right_led_1_off();
+ ergodox_right_led_2_off();
+ ergodox_right_led_3_off();
+ switch (layer) {
+ // TODO: Make this relevant to the ErgoDox EZ.
+ case 1:
+ ergodox_right_led_1_on();
+ break;
+ case 2:
+ ergodox_right_led_2_on();
+ break;
+ default:
+ // none
+ break;
+ }
+
+}
diff --git a/keyboards/input_club/ergodox_infinity/keymaps/dudeofawesome/README.md b/keyboards/input_club/ergodox_infinity/keymaps/dudeofawesome/README.md
new file mode 100644
index 0000000000..a0e4565b10
--- /dev/null
+++ b/keyboards/input_club/ergodox_infinity/keymaps/dudeofawesome/README.md
@@ -0,0 +1,30 @@
+# DudeOfAwesome's ErgoDox Infinity Layout
+
+A basic ErgoDox layout with Planck-like tri-layer support.
+
+![ErgoDox Layout](https://i.imgur.com/ae0Phzb.png)
+
+## Features
+
+- Base Layers
+ - QWERTY
+ - Workman
+ - Dvorak
+ - Colemak
+- Planck-like tri-layer
+- In-progress gaming layer
+- Numpad layer
+ ![numpad layer](https://i.imgur.com/oHDYpzf.png)
+- LCD colors are linked together, like the default KLL firmware
+
+## Building and flashing
+
+1. Put your board in DFU mode with either the button on the bottom, or with a software key in your current firmware
+1. Flash left half:
+ ```bash
+ $ make ergodox_infinity:dudeofawesome:dfu-util
+ ```
+1. Flash right half:
+ ```bash
+ $ make ergodox_infinity:dudeofawesome:dfu-util MASTER=right
+ ```
diff --git a/keyboards/input_club/ergodox_infinity/keymaps/dudeofawesome/config.h b/keyboards/input_club/ergodox_infinity/keymaps/dudeofawesome/config.h
new file mode 100644
index 0000000000..9dcf8a7f43
--- /dev/null
+++ b/keyboards/input_club/ergodox_infinity/keymaps/dudeofawesome/config.h
@@ -0,0 +1,9 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#undef TAPPING_TOGGLE
+
+#include "../../config.h"
+#include "dudeofawesome.h"
+
+#endif
diff --git a/keyboards/input_club/ergodox_infinity/keymaps/dudeofawesome/keymap.c b/keyboards/input_club/ergodox_infinity/keymaps/dudeofawesome/keymap.c
new file mode 100644
index 0000000000..675b56edec
--- /dev/null
+++ b/keyboards/input_club/ergodox_infinity/keymaps/dudeofawesome/keymap.c
@@ -0,0 +1,551 @@
+#include QMK_KEYBOARD_H
+#include "version.h"
+#include "layers.h"
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ WORKMAN,
+ DVORAK,
+ COLEMAK,
+ LOWER,
+ RAISE,
+ GAME,
+ MOUSE,
+ EPRM,
+ VRSN,
+ RGB_SLD,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic QWERTY layer
+ *
+ * ,---------------------------------------------. ,---------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | Esc | | Esc | 6 | 7 | 8 | 9 | 0 | Del |
+ * |--------+-----+-----+-----+-----+------------| |------+-----+-----+-----+-----+-----+--------|
+ * | Tab | Q | W | E | R | T | [{ | | ]} | Y | U | I | O | P | BSPC |
+ * |--------+-----+-----+-----+-----+-----| | | |-----+-----+-----+-----+-----+--------|
+ * | ESC | A | S | D | F | G |------| |------| H | J | K | L | ; | ' |
+ * |--------+-----+-----+-----+-----+-----| | | |-----+-----+-----+-----+-----+--------|
+ * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | Enter |
+ * `--------+-----+-----+-----+-----+------------' `------------+-----+-----+-----+-----+--------'
+ * | Num |Ctrl | Alt |LGUI |Lower| |Raise|Left |Down | Up |Right |
+ * `------------------------------' `------------------------------'
+ * ,------------. ,------------.
+ * |Play | | | |Play |
+ * ,-----|-----|------| |------+-----+-----.
+ * | | | Alt | | Alt | | |
+ * |Space|LOWER|------| |------|RAISE|Space|
+ * | | | LGUI | | LGUI | | |
+ * `------------------' `------------------'
+ */
+[_QWERTY] = LAYOUT_ergodox(
+ // left hand
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRACKET,
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, _______,
+ TT(_NUM), KC_LCTL, KC_LALT, KC_LGUI, LOWER,
+
+ KC_MPLY, _______,
+ KC_LALT,
+ KC_SPACE, LOWER, KC_LGUI,
+
+ // right hand
+ KC_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
+ KC_RBRACKET, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPACE,
+ KC_H, KC_J, KC_K, KC_L, KC_SCOLON, KC_QUOTE,
+ _______, KC_N, KC_M, KC_COMM, KC_DOT, LT(_MOUSE, KC_SLSH), RSFT_T(KC_ENT),
+ RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT,
+
+ _______, KC_MPLY,
+ KC_LALT,
+ KC_LGUI, RAISE, KC_SPACE
+),
+
+/* Keymap 0: Basic Workman layer
+ *
+ * ,---------------------------------------------. ,--------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | Esc | | Esc | 6 | 7 | 8 | 9 | 0 | Del |
+ * |--------+-----+-----+-----+-----+------------| |------+-----+-----+-----+-----+-----+--------|
+ * | Tab | Q | D | R | W | B | [{ | | ]} | J | F | U | P | ; | BSPC |
+ * |--------+-----+-----+-----+-----+-----| | | |-----+-----+-----+-----+-----+--------|
+ * | ESC | A | S | H | T | G |------| |------| Y | N | E | O | I | ' |
+ * |--------+-----+-----+-----+-----+-----| | | |-----+-----+-----+-----+-----+--------|
+ * | LShift | Z | X | M | C | V | | | | K | L | , | . | / | Enter |
+ * `--------+-----+-----+-----+-----+------------' `------------+-----+-----+-----+-----+--------'
+ * | Num |Ctrl | Alt |LGUI |Lower| |Raise|Left |Down | Up |Right |
+ * `------------------------------' `------------------------------'
+ * ,------------. ,------------.
+ * |Play | | | |Play |
+ * ,-----|-----|------| |------+-----+-----.
+ * | | | Alt | | Alt | | |
+ * |Space|LOWER|------| |------|RAISE|Space|
+ * | | | LGUI | | LGUI | | |
+ * `------------------' `------------------'
+ */
+[_WORKMAN] = LAYOUT_ergodox(
+ // left hand
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC,
+ KC_TAB, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_LBRACKET,
+ KC_ESC, KC_A, KC_S, KC_H, KC_T, KC_G,
+ KC_LSFT, KC_Z, KC_X, KC_M, KC_C, KC_V, _______,
+ TT(_NUM), KC_LCTL, KC_LALT, KC_LGUI, LOWER,
+
+ KC_MPLY, _______,
+ KC_LALT,
+ KC_SPACE, LOWER, KC_LGUI,
+
+ // right hand
+ KC_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
+ KC_RBRACKET, KC_J, KC_F, KC_U, KC_P, KC_SCOLON, KC_BSPACE,
+ KC_Y, KC_N, KC_E, KC_O, KC_I, KC_QUOTE,
+ _______, KC_K, KC_L, KC_COMM, KC_DOT, LT(_MOUSE, KC_SLSH), RSFT_T(KC_ENT),
+ RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT,
+
+ _______, KC_MPLY,
+ KC_LALT,
+ KC_LGUI, RAISE, KC_SPACE
+),
+
+/* Keymap 0: Basic Dvorak layer
+ *
+ * ,---------------------------------------------. ,--------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | Esc | | Esc | 6 | 7 | 8 | 9 | 0 | Del |
+ * |--------+-----+-----+-----+-----+------------| |------+-----+-----+-----+-----+-----+--------|
+ * | Tab | ' | , | . | P | Y | [{ | | ]} | F | G | C | R | L | BSPC |
+ * |--------+-----+-----+-----+-----+-----| | | |-----+-----+-----+-----+-----+--------|
+ * | ESC | A | O | E | U | I |------| |------| D | H | T | N | S | / |
+ * |--------+-----+-----+-----+-----+-----| | | |-----+-----+-----+-----+-----+--------|
+ * | LShift | ; | Q | J | K | X | | | | B | M | W | V | Z | Enter |
+ * `--------+-----+-----+-----+-----+------------' `------------+-----+-----+-----+-----+--------'
+ * | Num |Ctrl | Alt |LGUI |Lower| |Raise|Left |Down | Up |Right |
+ * `------------------------------' `------------------------------'
+ * ,------------. ,------------.
+ * |Play | | | |Play |
+ * ,-----|-----|------| |------+-----+-----.
+ * | | | Alt | | Alt | | |
+ * |Space|LOWER|------| |------|RAISE|Space|
+ * | | | LGUI | | LGUI | | |
+ * `------------------' `------------------'
+ */
+[_DVORAK] = LAYOUT_ergodox(
+ // left hand
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC,
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_LBRACKET,
+ KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I,
+ KC_LSFT, KC_SCOLON, KC_Q, KC_J, KC_K, KC_X, _______,
+ TT(_NUM), KC_LCTL, KC_LALT, KC_LGUI, LOWER,
+
+ KC_MPLY, _______,
+ KC_LALT,
+ KC_SPACE, LOWER, KC_LGUI,
+
+ // right hand
+ KC_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
+ KC_RBRACKET, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPACE,
+ KC_D, KC_H, KC_T, KC_N, KC_S, LT(MOUSE, KC_SLSH),
+ _______, KC_B, KC_M, KC_W, KC_V, KC_Z, RSFT_T(KC_ENT),
+ RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT,
+
+ _______, KC_MPLY,
+ KC_LALT,
+ KC_LGUI, RAISE, KC_SPACE
+),
+
+/* Keymap 0: Basic Colemak layer
+ *
+ * ,---------------------------------------------. ,--------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | Esc | | Esc | 6 | 7 | 8 | 9 | 0 | Del |
+ * |--------+-----+-----+-----+-----+------------| |------+-----+-----+-----+-----+-----+--------|
+ * | Tab | Q | W | F | P | G | [{ | | ]} | J | L | U | Y | ; | BSPC |
+ * |--------+-----+-----+-----+-----+-----| | | |-----+-----+-----+-----+-----+--------|
+ * | ESC | A | R | S | T | D |------| |------| H | N | E | I | O | ' |
+ * |--------+-----+-----+-----+-----+-----| | | |-----+-----+-----+-----+-----+--------|
+ * | LShift | Z | X | C | V | B | | | | K | M | , | . | / | Enter |
+ * `--------+-----+-----+-----+-----+------------' `------------+-----+-----+-----+-----+--------'
+ * | Num |Ctrl | Alt |LGUI |Lower| |Raise|Left |Down | Up |Right |
+ * `------------------------------' `------------------------------'
+ * ,------------. ,------------.
+ * |Play | | | |Play |
+ * ,-----|-----|------| |------+-----+-----.
+ * | | | Alt | | Alt | | |
+ * |Space|LOWER|------| |------|RAISE|Space|
+ * | | | LGUI | | LGUI | | |
+ * `------------------' `------------------'
+ */
+[_COLEMAK] = LAYOUT_ergodox(
+ // left hand
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC,
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_LBRACKET,
+ KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, _______,
+ TT(_NUM), KC_LCTL, KC_LALT, KC_LGUI, LOWER,
+
+ KC_MPLY, _______,
+ KC_LALT,
+ KC_SPACE, LOWER, KC_LGUI,
+
+ // right hand
+ KC_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
+ KC_RBRACKET, KC_J, KC_L, KC_U, KC_Y, KC_SCOLON, KC_BSPACE,
+ KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOTE,
+ _______, KC_K, KC_M, KC_COMM, KC_DOT, LT(_MOUSE, KC_SLSH), RSFT_T(KC_ENT),
+ RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT,
+
+ _______, KC_MPLY,
+ KC_LALT,
+ KC_LGUI, RAISE, KC_SPACE
+),
+
+/* Lower
+ *
+ * ,---------------------------------------------------. ,--------------------------------------------------.
+ * | Version | F1 | F2 | F3 | F4 | F5 | F11 | | F12 | F6 | F7 | F8 | F9 | F10 | |
+ * |---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
+ * | ~ | ! | @ | # | $ | % | F6 | | F5 | ^ | & | * | ( | ) | |
+ * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | Del | F1 | F2 | F3 | F4 | F5 |------| |------| F6 | _ | + | { | } | | |
+ * |---------+------+------+------+------+------| F12 | | F11 |------+------+------+------+------+--------|
+ * | | F7 | F8 | F9 | F10 | F11 | | | | F12 |ISO ~ |ISO | | Home | End | |
+ * `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | | Play | Vol- | Vol+ | Next |
+ * `-----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+[_LOWER] = LAYOUT_ergodox(
+ // left hand
+ VRSN, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11,
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_F6,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ _______, _______, _______, _______, _______,
+
+ _______, _______,
+ _______,
+ _______, _______, _______,
+
+ // right hand
+ KC_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ KC_F5, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
+ KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+ KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______,
+ _______, KC_MPLY, KC_VOLD, KC_VOLU, KC_MNXT,
+
+ _______, _______,
+ _______,
+ _______, _______, _______
+),
+
+/* Raise
+ *
+ * ,---------------------------------------------------. ,--------------------------------------------------.
+ * | Version | F1 | F2 | F3 | F4 | F5 | F11 | | F12 | F6 | F7 | F8 | F9 | F10 | F11 |
+ * |---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
+ * | ` | 1 | 2 | 3 | 4 | 5 | F6 | | F5 | 6 | 7 | 8 | 9 | 0 | |
+ * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | Del | F1 | F2 | F3 | F4 | F5 |------| |------| F6 | - | = | [ | ] | \ |
+ * |---------+------+------+------+------+------| F12 | | F11 |------+------+------+------+------+--------|
+ * | | F7 | F8 | F9 | F10 | F11 | | | | F12 |ISO # |ISO / |Pg Up |Pg Dn | |
+ * `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | | Play | Vol- | Vol+ | Next |
+ * `-----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * |Animat| | |Toggle|Solid |
+ * ,------|------|------| |------+------+------.
+ * |Bright|Bright| | | |Hue- |Hue+ |
+ * |ness- |ness+ |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+[_RAISE] = LAYOUT_ergodox(
+ // left hand
+ VRSN, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_F6,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ _______, _______, _______, _______, _______,
+
+ _______, _______,
+ _______,
+ _______, _______, _______,
+
+ // right hand
+ KC_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ KC_F5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
+ KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______,
+ _______, KC_MPLY, KC_VOLD, KC_VOLU, KC_MNXT,
+
+ _______, _______,
+ _______,
+ _______, _______, _______
+),
+
+/* Adjust
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * |Version | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | |Reset |Debug | | | | | | | |TRM on|TRMoff| | | Del |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | CPSLCK | | | | |AG Nrm|------| |------|AG Swp|QWERTY|Wrkman|Dvorak|Colmak| |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | | | Prev | Next | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | |VolUp |VolDn | Mute | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+[_ADJUST] = LAYOUT_ergodox(
+ // left hand
+ VRSN, _______, _______, _______, _______, _______, _______,
+ _______, RESET, DEBUG, BL_TOGG, BL_STEP, _______, _______,
+ KC_CAPS, _______, _______, _______, _______, AG_NORM,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______,
+
+ _______, _______,
+ _______,
+ _______, _______, _______,
+
+ // right hand
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, TERM_ON, TERM_OFF, _______, _______, KC_DEL,
+ AG_SWAP, QWERTY, WORKMAN, DVORAK, COLEMAK, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______,
+
+ _______, _______,
+ _______,
+ _______, _______, _______
+),
+
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | Lclk | MsUp | Rclk |Wh Up | | | | | | | | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | |MsLeft|MsDown|MsRght|Wh Dn |------| |------| | | | | | Play |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | | | Prev | Next | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | |VolUp |VolDn | Mute | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | |Brwser|Brwser|
+ * | Lclk | Rclk |------| |------|Back |Fwd |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+// MOUSE
+[_MOUSE] = LAYOUT_ergodox(
+ // left hand
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_BTN2, KC_MS_U, KC_BTN1, KC_WH_D, _______,
+ _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_U,
+ _______, _______, KC_WH_L, KC_BTN3, KC_WH_R, _______, TO(_GAME),
+ _______, _______, _______, _______, _______,
+
+ _______, _______,
+ KC_WH_D,
+ KC_BTN1, KC_BTN2, KC_WH_U,
+
+ // right hand
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, KC_MPLY,
+ TO(_GAME), _______, _______, KC_MPRV, KC_MNXT, _______, _______,
+ KC_VOLU, KC_VOLD, KC_MUTE, _______, _______,
+
+ _______, _______,
+ _______,
+ _______, KC_WBAK, KC_WFWD
+),
+
+/* Keymap 2: GAME
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | Lclk | MsUp | Rclk | | | | | | | | | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | | | Prev | Next | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | |VolUp |VolDn | Mute | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | |Brwser|Brwser|
+ * | Lclk | Rclk |------| |------|Back |Fwd |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+[_GAME] = LAYOUT_ergodox(
+ // left hand
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______,
+
+ _______, _______,
+ _______,
+ KC_SPACE, KC_LGUI, KC_LALT,
+
+ // right hand
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______,
+
+ TG(_MOUSE), TT(_NUM),
+ _______,
+ _______, _______, _______
+),
+
+/* Keymap 2: NUMPAD
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | βœ— | βœ— | βœ— | βœ— | βœ— | βœ— | | βœ— | βœ— | βœ— | / | * | - | |
+ * |--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
+ * | | βœ— | Home | Up | End | PgUp | | | | βœ— | 7 | 8 | 9 | + | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | βœ— | Left | Down | Right| PgDn |------| |------| βœ— | 4 | 5 | 6 | + | βœ— |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | / | * | - | + | Enter| | | | βœ— | 1 | 2 | 3 | Enter| Enter |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | βœ— | | 0 | 0 | . | Enter| = |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+[_NUM] = LAYOUT_ergodox(
+ // left hand
+ _______, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ _______, KC_NO, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_NO,
+ _______, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN,
+ _______, KC_PSLS, KC_PAST, KC_PMNS, KC_PPLS, KC_PENT, KC_NO,
+ _______, _______, _______, _______, KC_NO,
+
+ _______, _______,
+ _______,
+ _______, _______, _______,
+
+ // right hand
+ KC_NO, KC_NO, KC_NO, KC_PSLS, KC_PAST, KC_PMNS, _______,
+ KC_NO, KC_NO, KC_P7, KC_P8, KC_P9, KC_PPLS, _______,
+ KC_NO, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_NO,
+ KC_NO, KC_NO, KC_P1, KC_P2, KC_P3, KC_PENT, KC_PENT,
+ KC_P0, KC_P0, KC_PDOT, KC_PENT, KC_PEQL,
+
+ _______, _______,
+ _______,
+ _______, _______, _______
+),
+
+};
+
+void matrix_init_user() {
+ led_matrix_enable_noeeprom();
+ led_matrix_set_val_noeeprom(UINT8_MAX);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ case WORKMAN:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_WORKMAN);
+ }
+ return false;
+ case DVORAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_DVORAK);
+ }
+ return false;
+ case COLEMAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_COLEMAK);
+ }
+ return false;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ if (IS_LAYER_ON(_ADJUST)) {
+ layer_off(_LOWER);
+ layer_off(_RAISE);
+ }
+ } else {
+ layer_off(_LOWER);
+ if (IS_LAYER_ON(_ADJUST)) {
+ layer_off(_ADJUST);
+ layer_on(_RAISE);
+ }
+ }
+ return false;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ if (IS_LAYER_ON(_ADJUST)) {
+ layer_off(_RAISE);
+ layer_off(_LOWER);
+ }
+ } else {
+ layer_off(_RAISE);
+ if (IS_LAYER_ON(_ADJUST)) {
+ layer_off(_ADJUST);
+ layer_on(_LOWER);
+ }
+ }
+ return false;
+ case EPRM:
+ if (record->event.pressed) {
+ eeconfig_init();
+ }
+ return false;
+ case VRSN:
+ if (record->event.pressed) {
+ SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
+ }
+ return false;
+ case RGB_SLD:
+ if (record->event.pressed) {
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_mode(1);
+ #endif
+ }
+ return false;
+ }
+ return true;
+}
diff --git a/keyboards/input_club/ergodox_infinity/keymaps/dudeofawesome/layers.h b/keyboards/input_club/ergodox_infinity/keymaps/dudeofawesome/layers.h
new file mode 100644
index 0000000000..d852fe9803
--- /dev/null
+++ b/keyboards/input_club/ergodox_infinity/keymaps/dudeofawesome/layers.h
@@ -0,0 +1,14 @@
+#include QMK_KEYBOARD_H
+
+enum custom_layers {
+ _QWERTY,
+ _WORKMAN,
+ _DVORAK,
+ _COLEMAK,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+ _GAME,
+ _MOUSE,
+ _NUM,
+};
diff --git a/keyboards/input_club/ergodox_infinity/keymaps/gordon/config.h b/keyboards/input_club/ergodox_infinity/keymaps/gordon/config.h
new file mode 100644
index 0000000000..772ce0bac9
--- /dev/null
+++ b/keyboards/input_club/ergodox_infinity/keymaps/gordon/config.h
@@ -0,0 +1,29 @@
+/*
+Copyright 2018 Daniel Gordon <Dgordon8765@gmail.com>
+
+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/>.
+*/
+
+#undef IGNORE_MOD_TAP_INTERRUPT
+#define IGNORE_MOD_TAP_INTERRUPT
+
+#undef PERMISSIVE_HOLD
+// #define PERMISSIVE_HOLD
+
+#define ONESHOT_TAP_TOGGLE 2
+
+#undef TAPPING_TERM
+#define TAPPING_TERM 200
+
+#define FORCE_NKRO
diff --git a/keyboards/input_club/ergodox_infinity/keymaps/gordon/keymap.c b/keyboards/input_club/ergodox_infinity/keymaps/gordon/keymap.c
new file mode 100644
index 0000000000..c321d546fb
--- /dev/null
+++ b/keyboards/input_club/ergodox_infinity/keymaps/gordon/keymap.c
@@ -0,0 +1,394 @@
+#include QMK_KEYBOARD_H
+#include "debug.h"
+#include "action_layer.h"
+#include "version.h"
+#include "process_keycode/process_tap_dance.h"
+#include "gordon.h"
+
+#include "keymap_german.h"
+
+#include "keymap_nordic.h"
+
+
+enum custom_keycodes {
+ PLACEHOLDER = SAFE_RANGE, // can always be here
+ EPRM,
+ VRSN,
+ RGB_SLD,
+};
+
+
+// Custom tapping terms for each key.
+// Requires changes to action_taping.c
+// uint16_t get_tapping_term(keyevent_t* event) {
+// uint16_t keycode = keymap_key_to_keycode(layer_switch_get_layer(event->key), event->key);
+// if (keycode == NAV_E ) {
+// return TAPPING_TERM + 50;
+// }
+// return TAPPING_TERM;
+// }
+
+
+// _XXXXXX_ is a symbol that means, "DO NOT ASSIGN THIS KEY TO ANTYING", because the key
+// underneath this layer is the key that sends you to/from this layer.
+// Meaning, if you were to put something here - then you will be stuck in this layer.
+// It is simply a visual reminder not to use that key for this layer.
+// Example: On the numpad layer, under the letter `D` is `_XXXXXXX_`, because pressing and holding
+// `D` sends you to the numpad layer
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+
+//**************************FIRST LAYER - LAYER ZERO **************************************
+ [_QWERTY] = LAYOUT_ergodox(
+
+ SHF6_AF7, F1_F13 , F2_F14, TD(F3D), F4_ALTF4, F5_F15, KC_F11,
+ SPRK_TCK , Q_ESC , CTR_SH_W, NAV_E, ALT_SH_R, KC_T, PRINTSCR,
+ KC_TAB , KC_A , MEH_S, NUMPAD_D, CTRL_F, WIN_G,
+ OSL(_ONESHOT), CTRL_Z , HYPER_X, MOUSE_C, ALT_V, KC_B, OSL(_MOUSE),
+ KC_MINUS, KC_GRAVE, KC_DELETE, KC_LEFT, KC_RIGHT,
+
+ LSFT(KC_INSERT), TT(_QWERTY_KIDS),
+ ________ ,
+ KC_LSHIFT, SYMB_BSP, KC_INSERT ,
+
+ F12_RUN, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, TD(CALCCOMP),
+ CALTDEL , KC_Y, KC_U, KC_I, KC_O, KC_P, MODRESET,
+ WIN_H, CTRL_J, APP_SW_K, MEH_L, COL_MOUS, END_HOME,
+ OSL(_ONESHOT), KC_N, ALT_M, COMMA_TD, HYPE_DOT, KC_SLASH, ID_MAN_IP,
+ KC_UP, KC_DOWN,KC_DELETE, KC_TILD, KC_UNDS,
+
+ TT(_STREET_FIGHTER), ________,
+ KC_PGUP,
+ KC_PGDOWN, LT(_NAV,KC_ENTER), SPAC_TXT),
+
+
+ //**************************SYMBOLS LAYER**************************
+ [_SYMBOLS] = LAYOUT_ergodox(
+ ________, ________, ________, ________, ________, ________, ________,
+ ________, DEREF , KC_AT, KC_LCBR, KC_RCBR, KC_CIRC, ________,
+ ________, KC_EXLM, KC_HASH, KC_LPRN, KC_RPRN, ________,
+ ________,KC_DOLLAR, KC_PERC, LSQUIGLY, RSQUIGLY, ________, ________,
+ ________,TICK3 , ________, ________, ________,
+
+ ________,________,
+ ________,
+ ________,_XXXXXX_,________,
+
+
+ ________, ________, ________, ________, ________, ________, NUMLOCK,
+ ________,TIL_SLASH, KC_PIPE, KC_PLUS, KC_AMPR, ________, CAPLOCK,
+ EQRIGHT, KC_DQUO, KC_EQUAL, KC_QUOTE,KC_SCOLON, ________,
+ ________, KC_M, BK_SLASH, ASTERSK, KC_DOT, KC_SLASH, ________,
+ ________,________ ,________,TILD3,________,
+ ________,________,
+ ________,
+ ________,________,_XXXXXX_),
+
+ //**************************MOUSE MOVEMENT LAYER**************************
+ [_MOUSE] = LAYOUT_ergodox(UP_ENTER_RESET,________,________,________,________,________,MODRESET,
+ RESET,KC_SECRET_5,________,KC_MS_UP,KC_SECRET_4,KC_MS_WH_UP,________,
+ ________,________,KC_MS_LEFT,KC_MS_DOWN,KC_MS_RIGHT,KC_MS_WH_DOWN,
+ KC_SECRET_5,KC_SECRET_4,KC_SECRET_3,_XXXXXX_,KC_SECRET_2,KC_SECRET_1,_XXXXXX_,
+ ________,________,HYPR(KC_F15),KC_MS_WH_LEFT,KC_MS_WH_RIGHT,
+
+ ________,________,
+ ________,
+ KC_MS_BTN1,KC_MS_BTN2,________,
+
+
+ ________,________,________,________,________,________,________,
+ ________,________,________,KC_UP,________,KC_MEDIA_PLAY_PAUSE,________,
+ ________,KC_LEFT,KC_DOWN,KC_RIGHT,_XXXXXX_,________,
+ ________,KC_MEDIA_NEXT_TRACK,KC_AUDIO_VOL_UP,KC_AUDIO_VOL_DOWN,KC_MUTE,________,________,
+ KC_MS_WH_UP,KC_MS_WH_DOWN,________,________,________,
+ ________,________,
+ ________,
+ ________,KC_WWW_BACK,KC_WWW_FORWARD),
+
+
+
+
+ //**************************WINDOWS NAVIGATION LAYER**************************
+
+ [_NAV] = LAYOUT_ergodox(________,________,________,________,________,________,________,
+ ________,________,SNAPLEFT,_XXXXXX_,SNAPRGHT,________,________,
+ ________,KC_WWW_BACK,PREVTAB,________,NEXTTAB,SNAPUP,
+ ________,________,WORKLEFT,________,WORKRIGHT,SNAPDOWN,________,
+ ________,________,________,________,________,
+
+ ________,________,
+ ________,
+ ________,________,________,
+
+
+ ________,________,________,________,________,________,________,
+ ________,________,SNAPUP ,KC_UP ,SNAPDOWN,________,________,
+ ________,KC_LEFT ,KC_DOWN ,KC_RIGHT,________,________,
+ ________,________,________,________,________,________,________,
+ ________,________,________,________,________,
+
+
+ ________,________,
+ ________,
+ ________,________,________),
+
+ //****************************NUMPAD LAYER****************************
+ [_NUMPAD] = LAYOUT_ergodox(________,________,________,________,________,________,________,
+ ________,________,________,________,________,________,________,
+ ________,KC_DOT ,KC_SPACE,_XXXXXX_, KC_ESC ,________,
+ ________,DBMS_OUT,________,________,________,________,________,
+ ________,________,________,________,________,
+
+ ________,________,
+ ________,
+ KC_PLUS,KC_MINUS,________,
+
+ BL_TOGG ,BL_STEP ,________,________,________,________,________,
+ ________,________,KC_7 ,KC_8 ,KC_9 ,________,________,
+ ________,KC_4 ,KC_5 ,KC_6 ,________,________,
+ ________,KC_DOT, KC_1 ,KC_2 ,KC_3 ,________,________,
+ KC_0 ,KC_DOT , KC_DOT ,________,________,
+
+ ________,________,
+ ________,
+ ________,________,KC_0),
+
+ //****************************APP SWITCH LAYER****************************
+ [_APPSWITCH] = LAYOUT_ergodox(________,________,________,________,________,________,________,
+ ________,________ , ________ , ________ ,________ ,________,________,
+ ________,APP_5,APP_6,APP_7,APP_8,________,
+ ________,DBMS_OUT,________,________,________,________,________,
+ ________,________,________,________,________,
+
+ ________,________,
+ ________,
+ KC_PLUS,________,________,
+
+ ________,________,________,________,________,________,________,
+ ________,________,APP_3 ,________,APP_4 ,________,________,
+ ________,APP_1 ,_XXXXXX_,APP_2 ,________,________,
+ ________,________,________,________,________,________,________,
+ ________,________,________,________,________,
+
+ ________,________,
+ ________,
+ ________,________,________),
+
+
+ [_ONESHOT] = LAYOUT_ergodox( UP_ENTER_RESET , ________, ________, ________, ________, ________, ________,
+ ________, ________, ________, KC_UP , ________, ________, ________,
+ ________, ________, KC_LEFT , KC_DOWN , KC_RIGHT, ________,
+ MAGIC_TOGGLE_NKRO, ________, ________, ________, ________, ________, ________,
+ ________, ________, ________, ________, ________,
+
+ ________, ________,
+ ________,
+ ________, ________, ________,
+
+ ________, ________, ________, ________, ________, ________, ________,
+ ________, ________, KC_7, KC_8, KC_9, KC_PLUS, ________,
+ ________, KC_4, KC_5, KC_6, KC_EQUAL, ________,
+ ________, ________, KC_1, KC_2, KC_3, KC_ASTR, ________,
+ ________, ________, KC_0, ________, ________,
+
+ ________, ________,
+ ________,
+ ________, ________, ________),
+ //****************************TEXT/INTELLIJ NAVIGATION LAYER****************************
+ [_TEXTNAV] = LAYOUT_ergodox(________,________,________,________,________,________,________,
+ ________,MEH(KC_Q),LSFT(KC_ESCAPE),MEH(KC_D),MEH(KC_2),LALT(LSFT(KC_UP)),________,
+ ________,________,LCTL(KC_LEFT),LCTL(KC_B),LCTL(KC_RIGHT),LALT(LSFT(KC_DOWN)),
+ ________,________,________,LCTL(LSFT(KC_COMMA)),MEH(KC_DOT),LALT(KC_MS_WH_UP),________,
+ ________,________,________,________,________,
+
+ ________,________,________,________,________,________,
+
+ LALT(LSFT(KC_F9)),________,________,________,________,________,________,________,MEH(KC_5),LALT(LSFT(KC_Z)),
+ ________,LALT(KC_Z),________,________,________,LCTL(LSFT(KC_LEFT)),LALT(LCTL(KC_S)),LCTL(LSFT(KC_RIGHT)),
+ LCTL(LSFT(KC_COMMA)),________,________,________,________,________,________,________,________,________,
+ ________,________,________,________,________,________,________,________,________,_XXXXXX_),
+ [_QWERTY_KIDS] = LAYOUT_ergodox(
+
+ KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO ,
+ KC_NO , KC_Q , KC_W, KC_E, KC_R, KC_T, KC_NO ,
+ KC_NO , KC_A , KC_S, KC_D, KC_F, KC_G ,
+ KC_NO , KC_Z , KC_X, KC_C, KC_V, KC_B, KC_NO ,
+ KC_MINUS, KC_GRAVE, KC_DELETE, KC_LEFT, KC_RIGHT,
+
+ KC_NO , TT(_QWERTY_KIDS) ,
+ KC_NO ,
+ KC_LSHIFT, KC_BSPACE, KC_NO ,
+
+ KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO ,
+ KC_NO , KC_Y, KC_U, KC_I, KC_O, KC_P, KC_NO ,
+ KC_H, KC_J, KC_K, KC_L, KC_SCOLON , KC_NO,
+ KC_NO , KC_N, KC_M, KC_COMMA , KC_DOT , KC_SLASH, KC_NO ,
+ KC_UP, KC_DOWN, KC_DELETE, KC_TILD, KC_UNDS,
+
+ KC_NO , KC_NO ,
+ KC_NO,
+ KC_NO, KC_ENTER, KC_SPACE),
+
+ [_STREET_FIGHTER] = LAYOUT_ergodox(
+
+ KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO ,
+ KC_NO , KC_NO , DIE_1000X_LEFT, KC_UP, DIE_1000X_RIGHT, KC_NO, KC_NO ,
+ KC_NO , KC_NO , KC_LEFT, KC_DOWN, KC_RIGHT, KC_NO ,
+ KC_NO , KC_NO , KC_NO, KC_NO, KC_NO, KC_NO, KC_NO ,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+
+ ________ , ________ ,
+ ________ ,
+ ________, ________, ________ ,
+
+ KC_NO, KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO ,
+ KC_NO , KC_NO, KC_G, KC_H, KC_J, KC_NO, KC_NO ,
+ KC_NO, KC_B, KC_N, KC_M, KC_K , KC_NO,
+ KC_NO , KC_NO, KC_NO, KC_NO , KC_NO , KC_NO, KC_NO ,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+
+ TT(_STREET_FIGHTER) , ________ ,
+ ________,
+ ________, ________, ________),
+
+
+ //************************Windows navigation to directories*************************
+ [_DIRNAV] = LAYOUT_ergodox(
+ ________,________,________,________,________,________,________,
+ ________,________,________,________,________,________,________,
+ ________,________,KC_A,________,________,________,
+ ________,________,________,________,________,________,________,
+ ________,________,________,________,________,
+
+ ________,________,
+ ________,
+ ________,________,________,
+
+
+ ________,________,________,________,________,________,________,
+ ________,________,________,________,________,________,________,
+ ________,________,_______,________,________,________,
+ ________,________,________,________,________,________,________,
+ ________,________,________,________,________,
+
+
+ ________,________,
+ ________,
+ ________,________,________),
+
+
+ [_TEXT_MACROS] = LAYOUT_ergodox(
+ ________,________,________,________,________,________,________,
+ ________,________,________,________,________,________,________,
+ ________,________,KC_A,________,________,________,
+ ________,________,________,________,________,________,________,
+ ________,________,________,________,________,
+
+ ________,________,
+ ________,
+ ________,________,________,
+
+
+ ________,________,________,________,________,________,________,
+ ________,________,________,________,________,________,________,
+ ________,________,_______,________,________,________,
+ ________,________,________,________,________,________,________,
+ ________,________,________,________,________,
+
+
+ ________,________,
+ ________,
+ ________,________,________)
+
+
+/* FOR FORMATTING FUTURE LAYERS
+ NO KEY CODES SHOULD BE MORE THAN 8 CHARACTERS
+ GOES LEFT HAND THEN RIGHT HAND
+ [_DIRNAV] = LAYOUT_ergodox(
+ ________,________,________,________,________,________,________,
+ ________,________,________,________,________,________,________,
+ ________,________,________,________,________,________,
+ ________,________,________,________,________,________,________,
+ ________,________,________,________,________,
+
+ ________,________,
+ ________,
+ ________,________,________,
+
+
+ ________,________,________,________,________,________,________,
+ ________,________,________,________,________,________,________,
+ ________,________,________,________,________,________,
+ ________,________,________,________,________,________,________,
+ ________,________,________,________,________,
+
+
+ ________,________,
+ ________,
+ ________,________,________), */
+
+
+
+
+};
+
+void matrix_scan_user(void) {
+
+ uint8_t layer = biton32(layer_state);
+
+ ergodox_board_led_on();
+ ergodox_led_all_on();
+
+ ergodox_board_led_off();
+ ergodox_right_led_1_off();
+ ergodox_right_led_2_off();
+ ergodox_right_led_3_off();
+ // _delay_ms(45);
+
+ switch (layer)
+ {
+ case _SYMBOLS:
+ ergodox_right_led_1_on();
+ break;
+ case _MOUSE:
+ ergodox_right_led_2_on();
+ break;
+ case _NUMPAD:
+ ergodox_right_led_3_on();
+ break;
+ case _NAV:
+ ergodox_right_led_1_on();
+ ergodox_right_led_2_on();
+ break;
+ case _MACROS:
+ //layer unused right now
+ break;
+ case _FUNCTION:
+ //layer unused right nowex
+ break;
+ case _APPSWITCH:
+ ergodox_right_led_2_on();
+ ergodox_right_led_3_on();
+ break;
+ case _ONESHOT:
+ ergodox_right_led_1_on();
+ ergodox_right_led_2_on();
+ ergodox_right_led_3_on();
+ break;
+ case _TEXTNAV:
+ ergodox_right_led_1_on();
+ ergodox_right_led_3_on();
+ break;
+ case _QWERTY_KIDS:
+ ergodox_right_led_1_on();
+ ergodox_right_led_2_on();
+ ergodox_right_led_3_on();
+ break;
+ case _STREET_FIGHTER:
+ ergodox_right_led_2_on();
+ ergodox_right_led_3_on();
+ default:
+ break;
+ }
+};
diff --git a/keyboards/input_club/ergodox_infinity/keymaps/gordon/rules.mk b/keyboards/input_club/ergodox_infinity/keymaps/gordon/rules.mk
new file mode 100644
index 0000000000..9a56408f8e
--- /dev/null
+++ b/keyboards/input_club/ergodox_infinity/keymaps/gordon/rules.mk
@@ -0,0 +1,2 @@
+TAP_DANCE_ENABLE = yes
+
diff --git a/keyboards/input_club/ergodox_infinity/keymaps/halfkeyboard/config.h b/keyboards/input_club/ergodox_infinity/keymaps/halfkeyboard/config.h
new file mode 100644
index 0000000000..bca8571e79
--- /dev/null
+++ b/keyboards/input_club/ergodox_infinity/keymaps/halfkeyboard/config.h
@@ -0,0 +1,27 @@
+/*
+Copyright 2015 Jun Wako <wakojun@gmail.com>
+
+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
+
+/*
+ * music mode options
+ * midi enabled
+ * keymask disabled
+ * so typing normally will result in music
+ *
+ */
+#define MUSIC_MASK keycode != KC_NO
diff --git a/keyboards/input_club/ergodox_infinity/keymaps/halfkeyboard/keymap.c b/keyboards/input_club/ergodox_infinity/keymaps/halfkeyboard/keymap.c
new file mode 100644
index 0000000000..3870dd8ffd
--- /dev/null
+++ b/keyboards/input_club/ergodox_infinity/keymaps/halfkeyboard/keymap.c
@@ -0,0 +1,514 @@
+#include QMK_KEYBOARD_H
+#include "debug.h"
+#include "action_layer.h"
+#include "version.h"
+#include "keymap_steno.h"
+#ifndef MIDI_ENABLE
+#error "Midi is not enabled"
+#endif
+#define QWERTY 0 // qwerty layer
+#define HALFQWERTY 1 // mirrored qwerty layer
+#define DVORAK 2 // dvorak layer
+#define HALFDVORAK 3 // mirrored dvorak layer
+//no layer 4
+#define SYMB 5 // symbols
+#define HALFSYMB 6 // media keys
+#define PLVR 7 // steno plover layout
+#define SHORTCUTS 8 //layer with shortcut keys and other layer nav
+#define FUNCTION 9 //all F-keys, all day
+#define PROPERSTENO 10 //real steno layout
+
+enum custom_keycodes {
+ PLACEHOLDER = SAFE_RANGE, // can always be here
+ EPRM,
+ VRSN,
+ RGB_SLD
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: qwerty
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | ESC | 1 | 2 | 3 | 4 | 5 | RMB | | \ | 6 | 7 | 8 | 9 | 0 | BSPC |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | TAB | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | ' |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | BkSp | A | S | D | F | G |------| |------| H | J | K | L | ; |ENTER |
+ * |--------+------+------+------+------+------| - | | = |------+------+------+------+------+--------|
+ * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * |LCTRL|ALT |CTLShTab|CTL-TAB| LGui| | RGui| UP | DOWN | ALT | RCTRL |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * |Symbol|LMB | |Plover|HalfSymb|
+ * ,------|------|------| |------+--------+------.
+ * | | |MU_TOG| | PgUp | | |
+ * | Space|DELETE|------| |------| Tab |Enter |
+ * |mirror| | End | | PgDn | |mirror|
+ * `--------------------' `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[QWERTY] = LAYOUT_ergodox( // layer 0 : default
+ // left hand
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_BTN2,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_EQL,
+ KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MINUS,
+ KC_LCTRL, KC_LALT, LCTL(LSFT(KC_TAB)),LCTL(KC_TAB), MO(SHORTCUTS),
+ KC_LGUI, KC_BTN1,
+ MU_ON,
+ KC_SPACE,KC_DEL,KC_END,
+ // right hand
+ KC_BTN2, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_SLASH,
+ KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT,
+ KC_EQL,KC_N, KC_M, KC_COMM,KC_DOT, KC_SLASH, KC_RSFT,
+ MO(SHORTCUTS), KC_UP,KC_DOWN,KC_RALT, KC_RCTRL,
+ KC_BTN1, KC_RGUI,
+ MU_OFF,
+ KC_PGDN,KC_TAB, LT(HALFQWERTY, KC_ENT)
+ ),
+/* Keymap 1: mirrored qwerty
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | BSPC | 0 | 9 | 8 | 7 | 6 | \ | | ` | 5 | 4 | 3 | 2 | 1 | ESC |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | ' | P | O | I | U | Y | ] | | [ | T | R | E | W | Q | TAB |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | ENTER | ; | L | K | J | H |------| |------| G | F | D | S | A | BSPC |
+ * |--------+------+------+------+------+------| - | | = |------+------+------+------+------+--------|
+ * | LShift | / | . | , | M | N | | | | B | V | C | X | Z | RShift |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * |LCTRL|ALT |CTLShTab|CTL-TAB| LGui| | RGui| UP | DOWN | ALT | RCTRL |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+--------+------.
+ * | | | Home | | PgUp | | |
+ * | Space|DELETE|------| |------| Tab |Enter |
+ * |mirror| | End | | PgDn | |mirror|
+ * `--------------------' `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[HALFQWERTY] = LAYOUT_ergodox( // layer 0 : default
+ // left hand
+ KC_BSPC, KC_0, KC_9, KC_8, KC_7, KC_6, KC_TRNS,
+ KC_BSLS, KC_P, KC_O, KC_I, KC_U, KC_Y, KC_LBRC,
+ KC_ENT, KC_SCLN, KC_L, KC_K, KC_J, KC_H,
+ KC_LSFT, KC_SLASH, KC_DOT, KC_COMM,KC_M, KC_N, KC_RBRC,
+ KC_LCTRL, KC_LALT, LCTL(LSFT(KC_TAB)),LCTL(KC_TAB), KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRANSPARENT,KC_DEL,KC_END,
+ // right hand
+ KC_TRNS, KC_5, KC_4, KC_3, KC_2, KC_1, KC_BSPC,
+ KC_MINUS, KC_T, KC_R, KC_E, KC_W, KC_Q, KC_BSLS,
+ KC_G, KC_F, KC_D, KC_S, KC_A, KC_ENT,
+ KC_EQL,KC_B, KC_V, KC_C, KC_X, KC_Z, KC_RSFT,
+ KC_TRNS, KC_UP,KC_DOWN,KC_RALT, KC_RCTRL,
+ KC_TRANSPARENT, KC_TRNS,
+ KC_TRNS,
+ KC_PGDN,KC_TAB, KC_TRANSPARENT
+ ),
+/* Keymap 2: dvorak
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | ESC | 1 | 2 | 3 | 4 | 5 | ` | | \ | 6 | 7 | 8 | 9 | 0 | BSPC |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | TAB | ' | , | . | P | Y | [ | | ] | F | G | C | R | L | / |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | BkSp | A | O | E | U | I |------| |------| D | H | T | N | S |ENTER |
+ * |--------+------+------+------+------+------| - | | = |------+------+------+------+------+--------|
+ * | LShift | ; | Q | J | K | X | | | | B | M | W | V | Z | RShift |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * |LCTRL|ALT |CTLShTab|CTL-TAB| LGui| | Mouse| UP | DOWN | ALT | RCTRL |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | Alt | | | |Alt |
+ * ,------|------|------| |------+--------+------.
+ * | | | Home | | PgUp | | |
+ * | Space|DELETE|------| |------| Tab |Enter |
+ * |mirror| | End | | PgDn | |mirror|
+ * `--------------------' `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[DVORAK] = LAYOUT_ergodox( // layer 2 : dvorak
+ // left hand
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS,
+ KC_TAB, KC_QUOTE, KC_COMM,KC_DOT, KC_P, KC_Y, KC_MINUS,
+ KC_BSPC, KC_A, KC_O, KC_E, KC_U, KC_I,
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_EQL,
+ KC_LCTRL, KC_LALT, LCTL(LSFT(KC_TAB)),LCTL(KC_TAB), KC_TRNS,
+ KC_TRNS, KC_TRANSPARENT,
+ KC_UP,
+ LT(HALFDVORAK, KC_SPACE),KC_DEL,KC_DOWN,
+ // right hand
+ KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_LBRC, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLASH,
+ KC_D, KC_H, KC_T, KC_N, KC_S, KC_ENT,
+ KC_RBRC,KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT,
+ KC_TRNS, KC_UP,KC_DOWN,KC_RALT, KC_RCTRL,
+ KC_TRANSPARENT, KC_TRANSPARENT,
+ KC_PGUP,
+ KC_PGDN,KC_TAB, LT(HALFDVORAK, KC_ENT)
+ ),
+/* Keymap 3: mirrored dvorak
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | BSPC | 0 | 9 | 8 | 7 | 6 | \ | | ` | 5 | 4 | 3 | 2 | 1 | ESC |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | / | L | R | C | G | F | L1 | | L1 | Y | P | . | , | ' | TAB |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | ENTER | S | N | T | H | D |------| |------| I | U | E | O | A |BSPC |
+ * |--------+------+------+------+------+------| = | | - |------+------+------+------+------+--------|
+ * | LShift | Z | V | W | M | B | | | | X | K | J | Q | ; | RShift |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * |LCTRL|ALT |CTLShTab|CTL-TAB| LGui| | MOUSE| UP | DOWN | ALT | RCTRL |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | Alt | | | |Alt |
+ * ,------|------|------| |------+--------+------.
+ * | | | Home | | PgUp | | |
+ * | Space|DELETE|------| |------| Tab |Enter |
+ * |mirror| | End | | PgDn | |mirror|
+ * `--------------------' `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[HALFDVORAK] = LAYOUT_ergodox( // layer 0 : default
+ // left hand
+ KC_BSPC, KC_0, KC_9, KC_8, KC_7, KC_6, KC_TRNS,
+ KC_SLASH, KC_L, KC_R, KC_C, KC_G, KC_F, KC_LBRC,
+ KC_ENT, KC_S, KC_N, KC_T, KC_H, KC_D,
+ KC_LSFT, KC_Z, KC_V, KC_W, KC_M, KC_B, KC_RBRC,
+ KC_LCTRL, KC_LALT, LCTL(LSFT(KC_TAB)),LCTL(KC_TAB), KC_TRNS,
+ KC_TRANSPARENT, KC_TRANSPARENT,
+ KC_TRNS,
+ KC_TRANSPARENT,KC_ENT,KC_TRNS,
+ // right hand
+ KC_TRNS, KC_5, KC_4, KC_3, KC_2, KC_5, KC_ESC,
+ KC_MINUS, KC_Y, KC_P, KC_DOT, KC_COMM,KC_P, KC_TAB,
+ KC_I, KC_U, KC_E, KC_O, KC_A, KC_BSPC,
+ KC_EQL,KC_X, KC_K, KC_J, KC_Q, KC_SCLN, KC_RSFT,
+ KC_TRNS, KC_UP,KC_DOWN,KC_RALT, KC_RCTRL,
+ KC_TRANSPARENT, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS,KC_TAB, KC_TRANSPARENT
+ ),
+/* Keymap 5: Symbol Layer
+ *
+ * ,---------------------------------------------------. ,--------------------------------------------------.
+ * |Version | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 |BkSp |
+ * |---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
+ * | | / | \ | { | } | | | | | | Up | 7 | 8 | 9 | * | / |
+ * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | ' | ; | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | - | ENTER |
+ * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | - | = | [ | ] | ~ | | | | & | 1 | 2 | 3 | + | |
+ * `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | EPRM | | | | | | | . | 0 | = | |
+ * `-----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * |mirror| |------| |------| |mirror|
+ * |space | | | | | |enter |
+ * `--------------------' `--------------------'
+ */
+// SYMBOLS
+[SYMB] = LAYOUT_ergodox(
+ // left hand
+ VRSN, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
+ KC_NO,KC_SLASH,KC_BSLS, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+ KC_NO,KC_QUOT,KC_SCLN, KC_LPRN,KC_RPRN,KC_GRV,
+ KC_NO,KC_MINUS,KC_EQL,KC_LBRC,KC_RBRC,KC_TILD,KC_NO,
+ EPRM,KC_NO,KC_NO,KC_NO,KC_TRNS,
+ KC_TRNS,KC_NO,
+ KC_NO,
+ LT(HALFSYMB, KC_SPACE),KC_NO,KC_NO,
+ // right hand
+ KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSPC,
+ KC_NO, KC_UP, KC_KP_7, KC_KP_8, KC_KP_9,KC_KP_ASTERISK, KC_KP_SLASH,
+ KC_DOWN, KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_MINUS, KC_KP_ENTER,
+ KC_NO,KC_AMPR,KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_PLUS, KC_NO,
+ KC_TRNS,KC_DOT, KC_0, KC_KP_EQUAL, KC_NO,
+ BL_OFF, KC_TRNS,
+ BL_ON,
+ KC_NO, KC_NO, LT(HALFSYMB, KC_ENT)
+),
+/* Keymap 6: Mirrored Symbol Layer
+ *
+ * ,---------------------------------------------------. ,--------------------------------------------------.
+ * |delete | F12 | F11 | F10 | F9 | F8 | F7 | | F6 | F5 | F4 | F3 | F2 | F1 |BkSp |
+ * |---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
+ * | | | 7 | 8 | 9 | * | / | | | | | { | } | / | \ | |
+ * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | 4 | 5 | 6 | - |------| |------| ` | ( | ) | ; | ' | |
+ * |---------+------+------+------+------+------|enter | | |------+------+------+------+------+--------|
+ * | | | 1 | 2 | 3 | + | | | | ~ | [ | ] | = | - | |
+ * `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | EPRM | | 0 | . | = | | | | | | |
+ * `-----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+// SYMBOLS
+[HALFSYMB] = LAYOUT_ergodox(
+ // left hand
+ KC_BSPC, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18,
+ KC_NO,KC_NO,KC_KP_7, KC_KP_8, KC_KP_9,KC_KP_ASTERISK,KC_KP_SLASH,
+ KC_ENTER,KC_NO,KC_KP_4, KC_KP_5, KC_KP_6,KC_KP_MINUS,
+ KC_NO,KC_NO,KC_KP_1, KC_KP_2, KC_KP_3,KC_KP_PLUS,KC_KP_ENTER,
+ EPRM,KC_NO,KC_KP_0,KC_KP_DOT,KC_KP_EQUAL,
+ KC_TRNS,KC_NO,
+ KC_TRNS,
+ KC_TRANSPARENT,KC_NO,KC_NO,
+ // right hand
+ KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_BSPC,
+ KC_NO,KC_PIPE,KC_LCBR,KC_RCBR, KC_SLASH, KC_BSLS, KC_NO,
+ KC_GRV,KC_LPRN,KC_RPRN, KC_SCLN, KC_QUOT, KC_NO,
+ KC_NO, KC_TILD,KC_LBRC,KC_RBRC, KC_EQL, KC_MINUS, KC_NO,
+ KC_TRNS,KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_TRNS,
+ KC_TRNS,
+ KC_NO, KC_NO, KC_TRANSPARENT
+),
+/* Keymap 7: Steno for Plover from https://github.com/shayneholmes/tmk_keyboard/commit/11290f8489013018f778627db725160c745e75bd
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | q | w | e | r | t |------| |------| y | u | i | o | p | [ |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | a | s | d | f | g | | | | h | j | k | l | ; | ' |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | | | | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | c | v |------| |------| n | m |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+
+[PLVR] = LAYOUT_ergodox( // layout: layer 7: Steno for Plover
+ // left hand
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS,
+ KC_NO, KC_Q, KC_W, KC_E, KC_R, KC_T,
+ KC_NO, KC_A, KC_S, KC_D, KC_F, KC_G, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_TRNS, KC_TRNS,
+ KC_NO,
+ KC_C, KC_V, KC_NO,
+ // right hand
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
+ KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS,
+ KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
+ KC_NO, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_NO, KC_N, KC_M
+),
+
+/* Keymap 8: shortcuts
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | ESC | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | BSPC |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | TAB | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | BkSp | A | S | D | F | G |------| |------| H | J | K | L | ; |ENTER |
+ * |--------+------+------+------+------+------| - | | = |------+------+------+------+------+--------|
+ * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * |LCTRL|ALT |CTLShTab|CTL-TAB| | | RGui| UP | DOWN | ALT | RCTRL |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * |SYMBOLS|Dvorak| |Steno |Plover|
+ * ,------|------|------| |------+--------+------.
+ * | | | Home | | PgUp | | |
+ * | Space|DELETE|------| |------| Tab |Enter |
+ * |mirror| | End | | PgDn | |mirror|
+ * `--------------------' `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[SHORTCUTS] = LAYOUT_ergodox( // layer 0 : default
+ // left hand
+ RGB_MODE_KNIGHT, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT,
+ KC_TAB, LCTL(KC_Q), LCTL(KC_W),LCTL(KC_E),LCTL(KC_R),LCTL(KC_T), KC_NO,
+ KC_BSPC, LCTL(KC_A), LCTL(KC_S),LCTL(KC_D),LCTL(KC_F),LCTL(KC_G),
+ KC_LSFT, LCTL(KC_Z), LCTL(KC_X),LCTL(KC_C),LCTL(KC_V),LCTL(KC_B), KC_MINUS,
+ RESET, KC_LALT, LCTL(LSFT(KC_TAB)),LCTL(KC_TAB), KC_TRANSPARENT,
+ TG(SYMB), TG(DVORAK),
+
+ TG(FUNCTION),
+ KC_NO,KC_NO,KC_NO,
+// right hand
+ KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ TG(SYMB),LCTL(KC_Y),LCTL(KC_U),LCTL(KC_I),LCTL(KC_O),LCTL(KC_P),KC_BSLS,
+ LCTL(KC_H),LCTL(KC_J),LCTL(KC_K),LCTL(KC_L),LCTL(KC_SCLN),KC_ENT,
+ KC_EQL,LCTL(KC_N),LCTL(KC_M),LCTL(KC_COMM),LCTL(KC_DOT),LCTL(KC_SLASH),KC_RSFT,
+ KC_TRNS, KC_UP,KC_DOWN,KC_RALT, RESET,
+ TG(PROPERSTENO),TG(PLVR),
+ KC_NO,
+ KC_NO,KC_NO, KC_NO
+ ),
+ /* Keymap 9: Functions
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | F1 | F2 | F3 | F4 | F5 | F6 | | | | F1 | F2 | F3 | F4 | F5 | F6 |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | F7 | F8 | F9 | F10 | F11 | F12 | | | | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | F13 | F14 | F15 | F16 | F17 | F18 |------| |------| F13 | F14 | F15 | F16 | F17 | F18 |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | F19 | F20 | F21 | F22 | F23 | F24 | | | | F19 | F20 | F21 | F22 | F23 | F24 |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | | | | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | c | v |------| |------| n | m |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+
+[FUNCTION] = LAYOUT_ergodox( // layout: layer 9
+ // left hand
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_NO,
+ KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO,
+ KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18,
+ KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_NO, KC_NO, KC_NO,
+ // right hand
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
+ KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18,
+ KC_NO,KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24,
+ KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_NO, KC_NO, KC_NO
+),
+ /* Keymap 10: Steno
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | q | w | e | r | t |------| |------| y | u | i | o | p | [ |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | a | s | d | f | g | | | | h | j | k | l | ; | ' |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | | | | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | c | v |------| |------| n | m |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+
+[PROPERSTENO] = LAYOUT_ergodox( // layout: layer 10
+ // left hand
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ STN_N1, STN_N2, STN_N3, STN_N4, STN_N5, STN_N6, KC_NO,
+ STN_FN, STN_S1, STN_TL, STN_PL, STN_HL, STN_ST1,
+ KC_NO, STN_S2, STN_KL, STN_WL, STN_RL, STN_ST2, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ STN_A, STN_O, KC_NO,
+ // right hand
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
+ KC_TRNS, STN_N7, STN_N8, STN_N9, STN_NA, STN_NB, STN_NC,
+ STN_ST3, STN_FR, STN_PR, STN_LR, STN_TR, STN_DR,
+ KC_NO,STN_ST4, STN_RR, STN_BR, STN_GR, STN_SR, STN_ZR,
+ KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_NO, STN_E, STN_U
+),
+
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ // dynamically generate these.
+ case EPRM:
+ if (record->event.pressed) {
+ eeconfig_init();
+ }
+ return false;
+ break;
+ case VRSN:
+ if (record->event.pressed) {
+ SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
+ }
+ return false;
+ break;
+ case RGB_SLD:
+ if (record->event.pressed) {
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_mode(1);
+ #endif
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+ steno_set_mode(STENO_MODE_GEMINI); // or STENO_MODE_BOLT
+};
+
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+ uint8_t layer = biton32(layer_state);
+
+ ergodox_board_led_off();
+ ergodox_right_led_1_off();
+ ergodox_right_led_2_off();
+ ergodox_right_led_3_off();
+ switch (layer) {
+ // TODO: Make this relevant to the ErgoDox EZ.
+ case 1:
+ ergodox_right_led_1_on();
+ break;
+ case 2:
+ ergodox_right_led_2_on();
+ break;
+ default:
+ // none
+ break;
+ }
+
+};
diff --git a/keyboards/input_club/ergodox_infinity/keymaps/halfkeyboard/rules.mk b/keyboards/input_club/ergodox_infinity/keymaps/halfkeyboard/rules.mk
new file mode 100644
index 0000000000..04cd01b2b7
--- /dev/null
+++ b/keyboards/input_club/ergodox_infinity/keymaps/halfkeyboard/rules.mk
@@ -0,0 +1,4 @@
+STENO_ENABLE = yes
+MIDI_ENABLE = yes
+MIDI_ADVANCED = yes
+MUSIC_MODE = yes
diff --git a/keyboards/input_club/ergodox_infinity/keymaps/input_club/README.md b/keyboards/input_club/ergodox_infinity/keymaps/input_club/README.md
new file mode 100644
index 0000000000..31ae23ac40
--- /dev/null
+++ b/keyboards/input_club/ergodox_infinity/keymaps/input_club/README.md
@@ -0,0 +1,23 @@
+# Input Club ErgoDox Infinity Layout
+
+A basic ErgoDox layout that duplicates the default Input Club layout
+
+## Features
+
+Base Layers
+
+- QWERTY
+- Function Keys
+- Numpad
+
+## Building and flashing
+
+1. Put your board in DFU mode with either the button on the bottom, or with a software key in your current firmware
+2. Flash left half:
+ ```bash
+ make ergodox_infinity:input_club:dfu-util
+ ```
+3. Flash right half:
+ ```bash
+ make ergodox_infinity:input_club:dfu-util MASTER=right
+ ```
diff --git a/keyboards/input_club/ergodox_infinity/keymaps/input_club/keymap.c b/keyboards/input_club/ergodox_infinity/keymaps/input_club/keymap.c
new file mode 100644
index 0000000000..545429fca0
--- /dev/null
+++ b/keyboards/input_club/ergodox_infinity/keymaps/input_club/keymap.c
@@ -0,0 +1,245 @@
+#include QMK_KEYBOARD_H
+#include "debug.h"
+#include "action_layer.h"
+#include "version.h"
+
+#define L0 0 // default layer
+#define L1 1
+#define L2 2
+
+enum custom_keycodes {
+ PLACEHOLDER = SAFE_RANGE, // can always be here
+ EPRM,
+ VRSN,
+ RGB_SLD
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[L0] = LAYOUT_ergodox( // layer 0 : default
+/*
+ * left hand
+ * +-------+-----+-----+-----+-----+-----+-----+
+ * | = | 0 | 2 | 3 | 4 | 5 | ESC |
+ * +-------+-----+-----+-----+-----+-----+-----+
+ * | \ | Q | W | E | R | T |LCK-1|
+ * +-------+-----+-----+-----+-----+-----+ |
+ * | TAB | A | S | D | F | G +-----+
+ * +-------+-----+-----+-----+-----+-----+ f1 |
+ * | LSHIFT| Z | X | C | V | B | |
+ * +-+-----+-----+-----+-----+-----+-----+-----+
+ * |LGUI | ` | \ |LEFT |RIGHT|
+ * +-----+-----+-----+-----+-----+ +-----+-----+
+ * |LCTRL| LALT|
+ * +-----+-----+-----+
+ * | | | HOME|
+ * |BKSPC| DEL +-----+
+ * | | | END |
+ * +-----+-----+-----+
+ */
+ KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC,
+ KC_BSLS, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(L1),
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, MO(L1),
+ KC_LGUI, KC_GRV, KC_BSLS, KC_LEFT, KC_RGHT,
+ KC_LCTL, KC_LALT,
+ KC_HOME,
+ KC_BSPC, KC_DEL, KC_END,
+/* right hand
+ * +-----+-----+-----+-----+-----+-----+-------+
+ * |LCK-2| 6 | 7 | 8 | 9 | 0 | - |
+ * +-----+-----+-----+-----+-----+-----+-------+
+ * | [ | Y | U | I | O | P | ] |
+ * | +-----+-----+-----+-----+-----+-------+
+ * +-----+ H | J | K | L | ; | ' |
+ * | f1 +-----+-----+-----+-----+-----+-------+
+ * | | N | M | , | . | / | RSHIFT|
+ * +-----+-----+-----+-----+-----+-----+-----+-+
+ * |LEFT |DOWN | UP |RIGHT| RGUI|
+ * +-----+-----+ +-----+-----+-----+-----+-----+
+ * | RALT|RCTRL|
+ * +-----+-----+-----+
+ * | PGUP| | |
+ * +-----+ ENT | SPC |
+ * | PGDN| | |
+ * +-----+-----+-----+
+ */
+ TG(L2), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ KC_LBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_RBRC,
+ KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ MO(L1), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_RGUI,
+ KC_RALT, KC_RCTL,
+ KC_PGUP,
+ KC_PGDN, KC_ENT, KC_SPC
+ ),
+
+[L1] = LAYOUT_ergodox( // layer 1 : function layers
+/* left hand
+ * +-------+-----+-----+-----+-----+-----+-----+
+ * | | f1 | f2 | f3 | f4 | f5 | f11 |
+ * +-------+-----+-----+-----+-----+-----+-----+
+ * | | | | | | | |
+ * +-------+-----+-----+-----+-----+-----+ |
+ * | | | | | | +-----+
+ * +-------+-----+-----+-----+-----+-----+ |
+ * | | | | | | | |
+ * +-+-----+-----+-----+-----+-----+-----+-----+
+ * | | | | | |
+ * +-----+-----+-----+-----+-----+ +-----+-----+
+ * | | |
+ * +-----+-----+-----+
+ * | | | |
+ * | | +-----+
+ * | | | |
+ * +-----+-----+-----+
+ */
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11,
+ 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_TRNS, KC_TRNS, KC_TRNS,
+/* right hand
+ * +-----+-----+-----+-----+-----+-----+-------+
+ * | f12 | f6 | f7 | f8 | f9 | f10 | |
+ * +-----+-----+-----+-----+-----+-----+-------+
+ * | | | | | | | |
+ * | +-----+-----+-----+-----+-----+-------+
+ * +-----+ | | | | | |
+ * | +-----+-----+-----+-----+-----+-------+
+ * | | | | | | | |
+ * +-----+-----+-----+-----+-----+-----+-----+-+
+ * | | | | | |
+ * +-----+-----+ +-----+-----+-----+-----+-----+
+ * | | |
+ * +-----+-----+-----+
+ * | | | |
+ * +-----+ | |
+ * | | | |
+ * +-----+-----+-----+
+ */
+ KC_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, 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_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+),
+[L2] = LAYOUT_ergodox(
+/* Left hand
+ * +-------+-----+-----+-----+-----+-----+-----+
+ * | FLASH | | | | | | |
+ * +-------+-----+-----+-----+-----+-----+-----+
+ * | | | | | | | |
+ * +-------+-----+-----+-----+-----+-----+ |
+ * | | | | | | +-----+
+ * +-------+-----+-----+-----+-----+-----+ |
+ * | | | | | | | |
+ * +-+-----+-----+-----+-----+-----+-----+-----+
+ * | | | | | |
+ * +-----+-----+-----+-----+-----+ +-----+-----+
+ * | | |
+ * +-----+-----+-----+
+ * | | | |
+ * | | +-----+
+ * | | | |
+ * +-----+-----+-----+
+ */
+ RESET, 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_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,
+/* right hand
+ * +-----+-----+-----+-----+-----+-----+-------+
+ * | | |NMLCK| P/ | P* | P- | |
+ * +-----+-----+-----+-----+-----+-----+-------+
+ * | | | P7 | P8 | P9 | P+ | |
+ * | +-----+-----+-----+-----+-----+-------+
+ * +-----+ | P4 | P5 | P6 | P+ | |
+ * | +-----+-----+-----+-----+-----+-------+
+ * | | | P1 | P2 | P3 |PENT | |
+ * +-----+-----+-----+-----+-----+-----+-----+-+
+ * | | | P. |PENT | |
+ * +-----+-----+ +-----+-----+-----+-----+-----+
+ * | | |
+ * +-----+-----+-----+
+ * | | | |
+ * +-----+ | P0 |
+ * | | | |
+ * +-----+-----+-----+
+ */
+ KC_TRNS, KC_TRNS, KC_NUMLOCK, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, KC_TRNS,
+ KC_TRNS, KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_PLUS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_KP_DOT, KC_KP_ENTER, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_KP_0
+),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ // dynamically generate these.
+ case EPRM:
+ if (record->event.pressed) {
+ eeconfig_init();
+ }
+ return false;
+ break;
+ case VRSN:
+ if (record->event.pressed) {
+ SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
+ }
+ return false;
+ break;
+ case RGB_SLD:
+ if (record->event.pressed) {
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_mode(1);
+ #endif
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+ uint8_t layer = biton32(layer_state);
+
+ ergodox_board_led_off();
+ ergodox_right_led_1_off();
+ ergodox_right_led_2_off();
+ ergodox_right_led_3_off();
+ switch (layer) {
+ // TODO: Make this relevant to the ErgoDox EZ.
+ case 1:
+ ergodox_right_led_1_on();
+ break;
+ case 2:
+ ergodox_right_led_2_on();
+ break;
+ default:
+ // none
+ break;
+ }
+
+};
diff --git a/keyboards/input_club/ergodox_infinity/keymaps/narze/config.h b/keyboards/input_club/ergodox_infinity/keymaps/narze/config.h
new file mode 100644
index 0000000000..d5ed0a8e9e
--- /dev/null
+++ b/keyboards/input_club/ergodox_infinity/keymaps/narze/config.h
@@ -0,0 +1,15 @@
+#pragma once
+
+#undef TAPPING_TERM
+#define TAPPING_TERM 150
+
+#define COMBO_TERM 20
+#define COMBO_COUNT 1
+
+#define IGNORE_MOD_TAP_INTERRUPT
+#define PERMISSIVE_HOLD
+
+#undef MOUSEKEY_DELAY
+#define MOUSEKEY_DELAY 100
+
+#define USB_POLLING_INTERVAL_MS 1
diff --git a/keyboards/input_club/ergodox_infinity/keymaps/narze/default.png.md b/keyboards/input_club/ergodox_infinity/keymaps/narze/default.png.md
new file mode 100644
index 0000000000..744e7d172a
--- /dev/null
+++ b/keyboards/input_club/ergodox_infinity/keymaps/narze/default.png.md
@@ -0,0 +1 @@
+https://i.imgur.com/fKX0Zbs.png
diff --git a/keyboards/input_club/ergodox_infinity/keymaps/narze/default_highres.png.md b/keyboards/input_club/ergodox_infinity/keymaps/narze/default_highres.png.md
new file mode 100644
index 0000000000..074e0634d2
--- /dev/null
+++ b/keyboards/input_club/ergodox_infinity/keymaps/narze/default_highres.png.md
@@ -0,0 +1 @@
+https://i.imgur.com/giAc3M9.jpg
diff --git a/keyboards/input_club/ergodox_infinity/keymaps/narze/keymap.c b/keyboards/input_club/ergodox_infinity/keymaps/narze/keymap.c
new file mode 100644
index 0000000000..dd721e9a78
--- /dev/null
+++ b/keyboards/input_club/ergodox_infinity/keymaps/narze/keymap.c
@@ -0,0 +1,697 @@
+#include QMK_KEYBOARD_H
+#include "narze.h"
+#include "version.h"
+#include "keymap_colemak.h"
+
+extern keymap_config_t keymap_config;
+
+enum ergodox_layers {
+ _QWERTY,
+ _COLEMAK,
+ _QWOC,
+ _LOWER,
+ _RAISE,
+ _PLOVER,
+ // Intermediate layers for SuperDuper (Combo keys does not work on Infinity yet)
+ _SUPERDUPER,
+ _DEV,
+ _MOUSE,
+ _ADJUST,
+ _MDIA,
+ _SYMB,
+};
+
+enum ergodox_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ QWOC,
+ LOWER,
+ RAISE,
+ PLOVER,
+ SUPERDUPER,
+ DEV,
+ MOUSE,
+ BACKLIT,
+ EXT_PLV,
+ SDTOGG, // Toggle SuperDuper
+ EPRM,
+ VRSN,
+ RGB_SLD,
+ GUI_UNDS,
+ LSFT_LPRN,
+ RSFT_RPRN,
+};
+
+// Narze : Custom Macros
+#define SFT_PO LSFT_LPRN
+#define SFT_PC RSFT_RPRN
+
+enum process_combo_event {
+ CB_SUPERDUPER,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Qwerty
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | Mdia | | Mdia | 6 | 7 | 8 | 9 | 0 | - |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | Tab | Q | W | E | R | T | Symb | | Symb | Y | U | I | O | P | \ |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | Hp/Esc | A | S | D | F | G |------| |------| H | J | K | L | ; | ' |
+ * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
+ * | Sft/( | Z/Dv | X | C | V | B | | | | N | M | , | . | SD-/ | Sft/) |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * |Rse/[ | Ctrl | Alt | Gui/_| Lwr | | Rse/B| Bksp | Alt | Ctrl | Low/] |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | Enter| LGui | | Alt |Ctrl/Esc|
+ * ,------|------|------| |------+--------+------.
+ * | | | Home | | PgUp | | |
+ * | Space| Back |------| |------| Back |Enter |
+ * | | Space| End | | PgDn | Space | |
+ * `--------------------' `----------------------'
+ */
+[_QWERTY] = LAYOUT_ergodox(
+ // left hand
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, LT(_MDIA, KC_NO),
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, LT(_SYMB, KC_NO),
+ HPR_ESC, KC_A, KC_S, KC_D, KC_F, KC_G,
+ SFT_PO, LT(_DEV, KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
+ LT(_RAISE, KC_LBRC),KC_LCTL, KC_LALT, GUI_UNDS, LOWER,
+ KC_ENT, KC_LGUI,
+ KC_HOME,
+ KC_SPC,KC_BSPC,KC_END,
+ // right hand
+ LT(_MDIA, KC_NO), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ LT(_SYMB, KC_NO), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, LT(_SUPERDUPER, KC_SLSH), SFT_PC,
+ RAISE, KC_BSPC,ALT_COLN,KC_RCTL, LT(_LOWER, KC_RBRC),
+ KC_LALT, CTL_T(KC_ESC),
+ KC_PGUP,
+ KC_PGDN,KC_BSPC, KC_ENT
+ ),
+/* Colemak
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | Mdia | | Mdia | 6 | 7 | 8 | 9 | 0 | - |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | Tab | Q | W | F | P | G | Symb | | Symb | J | L | U | Y | ; | \ |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | Hp/Esc | A | R | S | T | D |------| |------| H | N | E | I | O | ' |
+ * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
+ * | Sft/( | Z/Dv | X | C | V | B | | | | K | M | , | . | SD-/ | Sft/) |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * |Rse/[ | Ctrl | Alt | Gui/_| Lwr | | Rse/B| Bksp | Alt | Ctrl | Low/] |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | Enter| LGui | | Alt |Ctrl/Esc|
+ * ,------|------|------| |------+--------+------.
+ * | | | Home | | PgUp | | |
+ * | Space| Back |------| |------| Back |Enter |
+ * | | Space| End | | PgDn | Space | |
+ * `--------------------' `----------------------'
+ */
+[_COLEMAK] = LAYOUT_ergodox(
+ // left hand
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, LT(_MDIA, KC_NO),
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, LT(_SYMB, KC_NO),
+ HPR_ESC, KC_A, KC_R, KC_S, KC_T, KC_D,
+ SFT_PO, LT(_DEV, KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
+ LT(_RAISE, KC_LBRC),KC_LCTL, KC_LALT, GUI_UNDS, LOWER,
+ KC_ENT, KC_LGUI,
+ KC_HOME,
+ KC_SPC,KC_BSPC,KC_END,
+ // right hand
+ LT(_MDIA, KC_NO), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ LT(_SYMB, KC_NO), KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS,
+ KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
+ MEH_T(KC_NO),KC_K, KC_M, KC_COMM,KC_DOT, LT(_SUPERDUPER, KC_SLSH), SFT_PC,
+ RAISE, KC_BSPC,ALT_COLN,KC_RCTL, LT(_LOWER, KC_RBRC),
+ KC_LALT, CTL_T(KC_ESC),
+ KC_PGUP,
+ KC_PGDN,KC_BSPC, KC_ENT
+ ),
+/* Qwerty on software Colemak : Useful for gaming with qwerty keymaps! */
+[_QWOC] = LAYOUT_ergodox(
+ // left hand
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, LT(_MDIA, KC_NO),
+ KC_TAB, CM_Q, CM_W, CM_E, CM_R, CM_T, LT(_SYMB, KC_NO),
+ HPR_ESC, CM_A, CM_S, CM_D, CM_F, CM_G,
+ SFT_PO, LT(_MOUSE, CM_Z), CM_X, CM_C, CM_V, CM_B, ALL_T(KC_NO),
+ LT(_RAISE, KC_LBRC),KC_LCTL, KC_LALT, GUI_UNDS, LOWER,
+ KC_ENT, KC_LGUI,
+ KC_HOME,
+ KC_SPC,KC_BSPC,KC_END,
+ // right hand
+ LT(_MDIA, KC_NO), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ LT(_SYMB, KC_NO), CM_Y, CM_U, CM_I, CM_O, CM_P, KC_BSLS,
+ CM_H, CM_J, CM_K, CM_L, CM_SCLN, KC_QUOT,
+ MEH_T(KC_NO),CM_N, CM_M, CM_COMM,CM_DOT, LT(_SUPERDUPER, KC_SLSH), SFT_PC,
+ RAISE, KC_BSPC,ALT_COLN,KC_RCTL, LT(_LOWER, KC_RBRC),
+ KC_LALT, CTL_T(KC_ESC),
+ KC_PGUP,
+ KC_PGDN,KC_BSPC, KC_ENT
+ ),
+/* Lower
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | ! | @ | # | $ | % | | | | ^ | & | * | ( | ) | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | F1 | F2 | F3 | F4 | F5 |------| |------| F6 | _ | + | { | } | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | F7 | F8 | F9 | F10 | F11 | | | | F12 |ISO ~ |ISO | | | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | | | | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+[_LOWER] = LAYOUT_ergodox(
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, _______,
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, _______,
+ _______, _______, _______, KC_BTN1, KC_BTN2,
+ _______, _______,
+ _______,
+ _______, _______, _______,
+ // right hand
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
+ KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+ _______, KC_F12,S(KC_NUHS),S(KC_NUBS), _______, _______, _______,
+ _______, _______, _______, _______, _______,
+ _______, _______,
+ _______,
+ _______, _______, _______
+),
+/* Raise
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | F1 | F2 | F3 | F4 | F5 |------| |------| F6 | - | = | [ | ] | \ |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | F7 | F8 | F9 | F10 | F11 | | | | F12 |ISO ~ |ISO | | | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | | | | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+[_RAISE] = LAYOUT_ergodox(
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_1, KC_2, KC_3, KC_4, KC_5, _______,
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, _______,
+ _______, _______, _______, KC_BTN1, KC_BTN2,
+ _______, _______,
+ _______,
+ _______, _______, _______,
+ // right hand
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
+ KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+ _______, KC_F12,S(KC_NUHS),S(KC_NUBS), _______, _______, _______,
+ _______, _______, _______, _______, _______,
+ _______, _______,
+ _______,
+ _______, _______, _______
+),
+
+/* Plover
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | # | # | # | # | # | # | | | | # | # | # | # | # | # |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | # | # | # | # | # | | | | # | # | # | # | # | # |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | Hp/Esc | S | T | P | H | * |------| |------| * | F | P | L | T | D |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | Sft/( | S | K | W | R | * | | | | * | R | B | G | S | Z |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | Exit | | | A | O | | E | U | | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | Enter| LGui | | Alt |Ctrl/Esc|
+ * ,------|------|------| |------+--------+------.
+ * | | | Home | | PgUp | | |
+ * | Space| Back |------| |------| Back |Enter |
+ * | | Space| End | | PgDn | Space | |
+ * `--------------------' `----------------------'
+ */
+[_PLOVER] = LAYOUT_ergodox(
+ // left hand
+ KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, XXXXXXX,
+ XXXXXXX, KC_1, KC_1, KC_1, KC_1, KC_1, XXXXXXX,
+ XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T,
+ XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, XXXXXXX,
+ EXT_PLV, XXXXXXX, XXXXXXX,KC_C, KC_V,
+ KC_ENT, KC_LGUI,
+ KC_HOME,
+ KC_SPC,KC_BSPC,KC_END,
+ // right hand
+ XXXXXXX, KC_1, KC_1, KC_1, KC_1, KC_1, XXXXXXX,
+ XXXXXXX, KC_1, KC_1, KC_1, KC_1, KC_1, XXXXXXX,
+ KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ XXXXXXX, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_N, KC_M,XXXXXXX,XXXXXXX, XXXXXXX,
+ KC_LALT, CTL_T(KC_ESC),
+ KC_PGUP,
+ KC_PGDN,KC_BSPC, KC_ENT
+ ),
+
+/* SuperDuper : https://gist.github.com/narze/861e2167784842d38771
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | | | | | | | | | T← | Tβ†’ | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | A | [SuperDuper]| Bksp | Gui |------| |------| ← | ↓ | ↑ | β†’ | Del | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | | | | | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | | | | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+--------+------.
+ * | | | | | | | |
+ * | Shift| |------| |------| |Shift |
+ * | | | | | | | |
+ * `--------------------' `----------------------'
+ */
+[_SUPERDUPER] = LAYOUT_ergodox(
+ // left hand
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_LALT, _______, _______, KC_BSPC, KC_LGUI,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______,
+ _______, _______,
+ _______,
+ KC_LSFT,_______,_______,
+ // right hand
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, S(LGUI(KC_LBRC)), S(LGUI(KC_RBRC)), _______, _______,
+ KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_DEL, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______,
+ _______, _______,
+ _______,
+ _______,_______, KC_LSFT
+ ),
+
+/* Dev Layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | | | | | | | | - | + | ( | ) | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | |------| |------| _ | [ | ] | { | } | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | = | | | < | > | ? | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | | | | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+--------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `----------------------'
+ */
+[_DEV] = LAYOUT_ergodox(
+ // left hand
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______,
+ _______, _______,
+ _______,
+ _______,_______,_______,
+ // right hand
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_MINS, S(KC_EQL), S(KC_9), S(KC_0), _______,
+ S(KC_MINS), KC_LBRC, KC_RBRC, S(KC_LBRC), S(KC_RBRC), _______,
+ _______, KC_EQL, S(KC_BSLASH), S(KC_COMM), S(KC_DOT), S(KC_SLSH), _______,
+ _______, _______, _______, _______, _______,
+ _______, _______,
+ _______,
+ _______,_______, _______
+ ),
+
+/* Mouse
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | S↑ | M↑ | S↓ | | | | | | | S↑ | S↓ | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | M← | M↓ | Mβ†’ | |------| |------| M← | M↓ | M↑ | Mβ†’ | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | |[Mouse| | | | M3 | | | | M3 | | | | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | M2 | | M2 | | | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+--------+------.
+ * | | | | | | | |
+ * | Left | |------| |------| | Left |
+ * | Click| | | | | | Click|
+ * `--------------------' `----------------------'
+ */
+[_MOUSE] = LAYOUT_ergodox(
+ // left hand
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_WH_U, KC_MS_U, KC_WH_D, _______, _______,
+ _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______,
+ _______, _______, _______, _______, _______, KC_BTN3, _______,
+ _______, _______, _______, _______, KC_BTN2,
+ _______, _______,
+ _______,
+ KC_BTN1,_______,_______,
+ // right hand
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, KC_WH_U, KC_WH_D, _______, _______,
+ KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, _______, _______,
+ _______, KC_BTN3, _______, _______, _______, _______, _______,
+ KC_BTN2, _______, _______, _______, _______,
+ _______, _______,
+ _______,
+ _______,_______, KC_BTN1
+ ),
+
+/* Adjust (Lower + Raise)
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | |Reset | | | | | | | | | | | | | Del |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | |AGnorm|------| |------|AGswap|Qwerty|Colemk|QwOnCo|Plover| |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | |SDTogg| | | | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | | | | | BACKLIT|
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+--------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `----------------------'
+ */
+[_ADJUST] = LAYOUT_ergodox(
+ // left hand
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, RESET, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, AG_NORM,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______,
+ _______, _______,
+ _______,
+ _______,_______,_______,
+ // right hand
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, KC_DEL,
+ AG_SWAP, QWERTY, COLEMAK, QWOC, PLOVER, _______,
+ _______, SDTOGG, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, BACKLIT,
+ _______, _______,
+ _______,
+ _______,_______, _______
+ ),
+
+/* Layers below are not actively used but kept for future reference */
+
+/* Symbol
+ * ,---------------------------------------------------. ,--------------------------------------------------.
+ * |Version | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
+ * |---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
+ * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
+ * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
+ * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
+ * `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | EPRM | | | | | | | . | 0 | = | |
+ * `-----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * |Animat| | |Toggle|Solid |
+ * ,------|------|------| |------+------+------.
+ * |Bright|Bright| | | |Hue- |Hue+ |
+ * |ness- |ness+ |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+// SYMBOLS
+[_SYMB] = LAYOUT_ergodox(
+ // left hand
+ VRSN, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
+ _______,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,_______,
+ _______,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+ _______,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,_______,
+ EPRM,_______,_______,_______,_______,
+ RGB_MOD,_______,
+ _______,
+ RGB_VAD,RGB_VAI,_______,
+ // right hand
+ _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ _______, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
+ KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, _______,
+ _______, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, _______,
+ _______,KC_DOT, KC_0, KC_EQL, _______,
+ RGB_TOG, RGB_SLD,
+ _______,
+ _______, RGB_HUD, RGB_HUI
+),
+/* Media and mouse keys
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | MsUp | | | | | | | | | | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | | | Prev | Next | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | |Brwser|
+ * | | |------| |------| |Back |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+// MEDIA AND MOUSE
+[_MDIA] = LAYOUT_ergodox(
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, KC_MS_U, _______, _______, _______,
+ _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, KC_BTN1, KC_BTN2,
+ _______, _______,
+ _______,
+ _______, _______, _______,
+ // right hand
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, KC_MPLY,
+ _______, _______, _______, KC_MPRV, KC_MNXT, _______, _______,
+ KC_VOLU, KC_VOLD, KC_MUTE, _______, _______,
+ _______, _______,
+ _______,
+ _______, _______, KC_WBAK
+)
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+
+ set_superduper_key_combo_layer(_QWERTY);
+ }
+ return false;
+
+ case COLEMAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_COLEMAK);
+
+ set_superduper_key_combo_layer(_COLEMAK);
+ }
+ return false;
+
+ case QWOC:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWOC);
+
+ set_superduper_key_combo_layer(_QWOC);
+ }
+ return false;
+
+ 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;
+
+ 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;
+
+ case BACKLIT:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ return false;
+
+ case PLOVER:
+ if (record->event.pressed) {
+ layer_off(_RAISE);
+ layer_off(_LOWER);
+ layer_off(_ADJUST);
+ layer_on(_PLOVER);
+ if (!eeconfig_is_enabled()) {
+ eeconfig_init();
+ }
+ keymap_config.raw = eeconfig_read_keymap();
+ keymap_config.nkro = 1;
+ eeconfig_update_keymap(keymap_config.raw);
+ }
+ return false;
+
+ case EXT_PLV:
+ if (record->event.pressed) {
+ layer_off(_PLOVER);
+ }
+ return false;
+
+ case SDTOGG:
+ if (record->event.pressed) {
+ toggle_superduper_mode();
+ }
+ return false;
+
+ case VRSN:
+ if (record->event.pressed) {
+ SEND_STRING(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
+ }
+ return false;
+
+ case RGB_SLD:
+ if (record->event.pressed) {
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_mode(1);
+ #endif
+ }
+ return false;
+
+ // Macros
+
+ // 1. Hold for LGUI, tap for Underscore
+ case GUI_UNDS:
+ perform_space_cadet(record, keycode, KC_LGUI, KC_LSFT, KC_MINS);
+ return false;
+
+ // 2. Hold for LSHIFT, tap for Parens open
+ case LSFT_LPRN:
+ perform_space_cadet(record, keycode, KC_LSFT, KC_LSFT, KC_9);
+ return false;
+
+ // 3. Hold for RSHIFT, tap for Parens close
+ case RSFT_RPRN:
+ perform_space_cadet(record, keycode, KC_RSFT, KC_RSFT, KC_0);
+ return false;
+
+ }
+ return true;
+}
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_setup(void) {
+ set_superduper_key_combos();
+}
+
+void matrix_scan_user(void) {
+ // uint8_t layer = biton32(layer_state);
+
+ // ergodox_board_led_off();
+ // ergodox_right_led_1_off();
+ // ergodox_right_led_2_off();
+ // ergodox_right_led_3_off();
+ // switch (layer) {
+ // // TODO: Make this relevant to the ErgoDox EZ.
+ // case 1:
+ // ergodox_right_led_1_on();
+ // break;
+ // case 2:
+ // ergodox_right_led_2_on();
+ // break;
+ // default:
+ // // none
+ // break;
+ // }
+}
+
+// Combos
+
+void process_combo_event(uint16_t combo_index, bool pressed) {
+ if (pressed) {
+ switch(combo_index) {
+ case CB_SUPERDUPER:
+ layer_on(_SUPERDUPER);
+ ergodox_board_led_on();
+ break;
+ }
+ } else {
+ layer_off(_SUPERDUPER);
+ ergodox_board_led_off();
+ unregister_mods(MOD_BIT(KC_LGUI) | MOD_BIT(KC_LCTL) | MOD_BIT(KC_LALT)); // Sometimes mods are held, unregister them
+ }
+}
diff --git a/keyboards/input_club/ergodox_infinity/keymaps/narze/readme.md b/keyboards/input_club/ergodox_infinity/keymaps/narze/readme.md
new file mode 100644
index 0000000000..3094b021e0
--- /dev/null
+++ b/keyboards/input_club/ergodox_infinity/keymaps/narze/readme.md
@@ -0,0 +1,31 @@
+# narze's layout
+
+## Notes
+- SuperDuper mode for Ergodox is still under development, since combo keys does not work very well on Ergodox firmware.
+ Now it is using multiple layers as a workaround. Actual implementation using combos are on my Planck layout.
+
+## Key features
+- Qwerty + [Colemak](https://colemak.com) layouts, and you can type Qwerty on software-level Colemak as well. Very useful for gaming or when your friend wanna type something but don't use Colemak.
+- [(S)uper (D)uper Mode](/users/narze/readme.md)
+- Mouse keys with Z
+
+## Build instructions
+If your environment is ready to build with `make`, don't use docker since it takes 5m+ to compile.
+Use the instructions in Ergodox Infinity's readme.
+
+#### Left side (Docker)
+```
+cd /path/to/qmk_firmware
+util/docker_build.sh ergodox_infinity:narze
+avr-objcopy -Iihex -Obinary .build/ergodox_infinity_narze.hex .build/ergodox_infinity_narze_left.bin
+dfu-util --device 1c11:b007 -D .build/ergodox_infinity_narze_left.bin
+```
+
+#### Right side (Docker)
+You have to override `usb_args` in order to pass `MASTER=right` to docker using provided build script.
+```
+cd /path/to/qmk_firmware
+usb_args="-e MASTER=right" util/docker_build.sh ergodox_infinity:narze
+avr-objcopy -Iihex -Obinary .build/ergodox_infinity_narze.hex .build/ergodox_infinity_narze_right.bin
+dfu-util --device 1c11:b007 -D .build/ergodox_infinity_narze_right.bin
+```
diff --git a/keyboards/input_club/ergodox_infinity/keymaps/narze/rules.mk b/keyboards/input_club/ergodox_infinity/keymaps/narze/rules.mk
new file mode 100644
index 0000000000..4a4ed58610
--- /dev/null
+++ b/keyboards/input_club/ergodox_infinity/keymaps/narze/rules.mk
@@ -0,0 +1,23 @@
+
+
+# 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 # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+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 = no # 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
+
+COMBO_ENABLE = yes
diff --git a/keyboards/input_club/ergodox_infinity/keymaps/narze/visualizer.c b/keyboards/input_club/ergodox_infinity/keymaps/narze/visualizer.c
new file mode 100644
index 0000000000..88f658d6b9
--- /dev/null
+++ b/keyboards/input_club/ergodox_infinity/keymaps/narze/visualizer.c
@@ -0,0 +1,94 @@
+/*
+Copyright 2017 Fred Sundvik
+
+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 "simple_visualizer.h"
+#include "util.h"
+
+// Copied from keymap.c
+enum ergodox_layers {
+ _QWERTY,
+ _COLEMAK,
+ _QWOC,
+ _LOWER,
+ _RAISE,
+ _PLOVER,
+// Intermediate layers for SuperDuper (Combo keys does not work on Infinity yet)
+ _SUPER,
+ _DUPER,
+ _SUPERDUPER,
+ _MOUSE,
+ _ADJUST,
+ _MDIA,
+ _SYMB,
+};
+
+// This function should be implemented by the keymap visualizer
+// Don't change anything else than state->target_lcd_color and state->layer_text as that's the only thing
+// that the simple_visualizer assumes that you are updating
+// Also make sure that the buffer passed to state->layer_text remains valid until the previous animation is
+// stopped. This can be done by either double buffering it or by using constant strings
+static void get_visualizer_layer_and_color(visualizer_state_t* state) {
+ uint8_t saturation = 255;
+
+ uint8_t layer = biton32(state->status.layer);
+ state->target_lcd_color = LCD_COLOR(layer << 2, saturation, 0xFF);
+
+ switch(layer) {
+ case _QWERTY:
+ state->layer_text = "QWERTY";
+ break;
+ case _COLEMAK:
+ state->layer_text = "COLEMAK";
+ break;
+ case _QWOC:
+ state->layer_text = "QWERTY on COLEMAK";
+ break;
+ case _LOWER:
+ state->layer_text = "LOWER";
+ break;
+ case _RAISE:
+ state->layer_text = "RAISE";
+ break;
+ case _PLOVER:
+ state->layer_text = "PLOVER";
+ break;
+ case _SUPERDUPER:
+ state->layer_text = "SUPERDUPER";
+ break;
+ case _SUPER:
+ state->layer_text = "SUPER";
+ break;
+ case _DUPER:
+ state->layer_text = "DUPER";
+ break;
+ case _MOUSE:
+ state->layer_text = "MOUSE";
+ break;
+ case _ADJUST:
+ state->layer_text = "ADJUST";
+ break;
+ case _MDIA:
+ state->layer_text = "MDIA";
+ break;
+ case _SYMB:
+ state->layer_text = "SYMB";
+ break;
+ default:
+ state->layer_text = "NONE";
+ break;
+ }
+}
diff --git a/keyboards/input_club/ergodox_infinity/keymaps/nordic_ergo/keymap.c b/keyboards/input_club/ergodox_infinity/keymaps/nordic_ergo/keymap.c
new file mode 100644
index 0000000000..d08b96cc6e
--- /dev/null
+++ b/keyboards/input_club/ergodox_infinity/keymaps/nordic_ergo/keymap.c
@@ -0,0 +1,243 @@
+// Nordic layout for Ergodox infinity
+#include QMK_KEYBOARD_H
+#include "version.h"
+#include "keymap_nordic.h"
+#include "keymap_german.h"
+
+enum layer_names {
+ BASE,
+ FUNCL,
+ SYMB,
+ MDIA
+};
+
+enum custom_keycodes {
+ VRSN = SAFE_RANGE,
+ RGB_SLD
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ *
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | §½ | | PRSC | 6 | 7 | 8 | 9 | 0 | - |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | Tab | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | Γ… |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | Caps | A | S | D | F | G |------| |------| H | J | K | L | Γ– | Γ„ |
+ * |--------+------+------+------+------+------| L2 | | L2 |------+------+------+------+------+--------|
+ * | LShift | Z | X | C | V | B | | | | N | M | , | . | - | RShift |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | Ctrl | Β¨^ | <|> | LGui | Alt | | Ctrl | Alt | Β΄` | + | RGui |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | LEFT |RIGHT | | DOWN | UP |
+ * ,------+------+------| |------+--------+------.
+ * | | | Home | | PgUp | | |
+ * | Space|Del |------| |------| Enter | Bkspc|
+ * | | | End | | PgDn | | |
+ * `--------------------' `----------------------'
+ */
+
+[BASE] = LAYOUT_ergodox( // layer 0 : default
+ // left hand
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_GRV,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(1),
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, MO(2),
+ KC_LCTRL, MO(3), KC_EQL, KC_LGUI, KC_LALT,
+ KC_NLCK, KC_SLCK,
+ KC_HOME,
+ KC_SPC, KC_DEL, KC_END,
+
+ // right hand
+ KC_BSLS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ TG(1), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
+ KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,
+ MO(2), KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_NONUS_BSLASH,
+ KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_RBRC,
+ KC_RGUI, KC_RALT,
+ KC_PGUP,
+ KC_PGDN, KC_ENT, KC_BSPC
+),
+/* Keymap 1: Basic layer with functions
+ *
+ *
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | F1 | F2 | F3 | F4 | F5 | F11 | | F12 | F6 | F7 | F8 | F9 | 0 | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | |------| |------| | | | | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | | | | | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | Β¨ | | | | | | | | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------+------+------| |------+--------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `----------------------'
+ */
+
+[FUNCL] = LAYOUT_ergodox( // layer 1 : functions
+ // left hand
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______,
+ _______, _______,
+ _______,
+ _______, _______, _______,
+ // right hand
+ KC_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______,
+ _______, _______,
+ _______,
+ _______, _______, _______
+),
+
+/* Keymap 2: Symbol Layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | | . | 0 | = | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * |Animat| BLTOG| |Toggle|Solid |
+ * ,------|------|------| |------+------+------.
+ * |Bright|Bright| BL+ | | |Hue- |Hue+ |
+ * |ness- |ness+ |------| |------| | |
+ * | | | BL- | | | | |
+ * `--------------------' `--------------------'
+ */
+// SYMBOLS
+[SYMB] = LAYOUT_ergodox(
+ // left hand
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11,
+ _______, DE_EXLM, DE_AT, DE_LCBR, DE_RCBR, DE_PIPE, _______,
+ _______, DE_HASH, DE_DLR, DE_LPRN, DE_RPRN, DE_GRV,
+ _______, DE_PERC, DE_CIRC, DE_LBRC, DE_RBRC, DE_TILD, _______,
+ _______, _______, _______, _______, _______,
+ RGB_MOD, BL_TOGG,
+ BL_INC,
+ RGB_VAD, RGB_VAI, BL_DEC,
+ // right hand
+ KC_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ _______, KC_UP, KC_7, KC_8, KC_9, DE_ASTR, _______,
+ KC_DOWN, KC_4, KC_5, KC_6, DE_PLUS, _______,
+ _______, DE_AMPR, KC_1, KC_2, KC_3, DE_BSLS, _______,
+ _______, KC_DOT, KC_0, DE_EQL, _______,
+ RGB_TOG, RGB_SLD,
+ _______,
+ _______, RGB_HUD, RGB_HUI
+),
+
+/* Keymap 3: Media and mouse keys
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | RESET | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | Lclk | MsUp | Rclk | | | | | |VolDwn| Mute |VolUp | | F12 |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | Btn4 |MsLeft|MsDown|MsRght| Btn5 |------| |------| | Prev | Stop | Play | Next | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | |WhRght|WhDown| WhUp |WhLeft|WhClk | | | |BwSrch|BwBack|BwHome|BwRefr|BwFwd | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | |MsAcl0|MsAcl1|MsAcl2| | | | | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | |Brwser|Brwser|
+ * | Lclk | Rclk |------| |------|Back |Forwd |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+
+// MEDIA AND MOUSE
+[MDIA] = LAYOUT_ergodox(
+ RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11,
+ _______, _______, KC_BTN1, KC_MS_U, KC_BTN2, _______, _______,
+ _______, KC_BTN4, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN5,
+ _______, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R, KC_BTN3, _______,
+ _______, _______, KC_ACL0, KC_ACL1, KC_ACL2,
+ _______, _______,
+ _______,
+ KC_BTN1, KC_BTN2, _______,
+ // right hand
+ KC_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
+ _______, _______, KC_VOLD, KC_MUTE, KC_VOLU, _______, _______,
+ _______, KC_MPRV, KC_MSTP, KC_MPLY, KC_MNXT, _______,
+ _______, KC_WSCH, KC_WBAK, KC_WHOM, KC_WREF, KC_WFWD, _______,
+ _______, _______, _______, _______, _______,
+ _______, _______,
+ _______,
+ _______, KC_WBAK, KC_WFWD
+),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case VRSN:
+ if (record->event.pressed) {
+ SEND_STRING(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
+ }
+ return false;
+ break;
+ case RGB_SLD:
+ if (record->event.pressed) {
+#ifdef RGBLIGHT_ENABLE
+ rgblight_mode(1);
+#endif
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void){
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+ uint8_t layer = biton32(layer_state);
+
+ ergodox_board_led_off();
+ ergodox_right_led_1_off();
+ ergodox_right_led_2_off();
+ ergodox_right_led_3_off();
+ switch (layer) {
+ case 1:
+ ergodox_right_led_1_on();
+ break;
+ case 2:
+ ergodox_right_led_2_on();
+ break;
+ case 3:
+ ergodox_right_led_3_on();
+ break;
+ default:
+ break;
+ }
+};
diff --git a/keyboards/input_club/ergodox_infinity/keymaps/nordic_ergo/readme.md b/keyboards/input_club/ergodox_infinity/keymaps/nordic_ergo/readme.md
new file mode 100644
index 0000000000..2ed5268649
--- /dev/null
+++ b/keyboards/input_club/ergodox_infinity/keymaps/nordic_ergo/readme.md
@@ -0,0 +1,9 @@
+# Nordic Ergodox Infinity layout
+
+QWERTY Nordic layout for ergodox infinity.
+
+Features:
+
+- Basic ISO Nordic qwerty layout.
+- Backlight control.
+- Still work in progress. \ No newline at end of file
diff --git a/keyboards/input_club/ergodox_infinity/keymaps/not-quite-neo/keymap.c b/keyboards/input_club/ergodox_infinity/keymaps/not-quite-neo/keymap.c
new file mode 100644
index 0000000000..8cf51842a2
--- /dev/null
+++ b/keyboards/input_club/ergodox_infinity/keymaps/not-quite-neo/keymap.c
@@ -0,0 +1,292 @@
+#include QMK_KEYBOARD_H
+
+/*
+NQN is not-quite-neo
+A layout based on neo2
+*/
+
+#include "action_layer.h"
+#include "version.h"
+
+#include "nqn-keys-on-quertz-de-latin1.h"
+#include "nqn-basic-layout.h"
+
+// Since our quirky block definitions are basically a list of comma separated
+// arguments, we need a wrapper in order for these definitions to be
+// expanded before being used as arguments to the LAYOUT_xxx macro.
+#define LAYOUT_ergodox_wrapper(...) LAYOUT_ergodox(__VA_ARGS__)
+
+#ifdef LEADER_TIMEOUT
+#undef LEADER_TIMEOUT
+#endif
+#define LEADER_TIMEOUT 300
+
+#define TAP_ONCE(code) \
+ register_code (code); \
+ unregister_code (code)
+
+
+// Automatic number generation of important keywords
+enum my_keycodes{
+ // Layer numbers follow the neo2 terminology, i.e. base layer = layer 1
+ L01 = 0,
+ /* L02, SHIFT is not (yet) implemented as a fully customizable layer */
+ L03,
+ L04,
+ L05,
+ /* L06, UNSPECIFIED not (yet) needed */
+ LFN
+};
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* L01 -> default: BASE LAYER
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | TAB | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | BACKSP |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | ESC | | LEADR| | LEADR| | ENTER |
+ * |--------+ | | | | +--------|
+ * | L03 | L01_LEFT |------| |------| L01_RIGHT | L03 |
+ * |--------+ | LFN | | LFN | +--------|
+ * | SHIFT | | | | | | SHIFT |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | CTRL | GUI | ALT | L05 | L04 | | L04 | L05 | ALTGR| LFN | CTRL |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | HOME | END | | LEFT | RIGHT|
+ * ,------|------|------| |------+------+------.
+ * | | | PGUP | | UP | | |
+ * | SPACE| SHIFT|------| |------| SHIFT| SPACE|
+ * | | | PGDN | | DOWN | | |
+ * `--------------------' `--------------------'
+ */
+[L01] = LAYOUT_ergodox_wrapper(
+ KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, XXXXXXX,
+ KC_ESC, L01_LEFT_01, KC_LEAD,
+ MO(L03), L01_LEFT_02,
+ KC_LSHIFT, L01_LEFT_03, MO(LFN),
+ KC_LCTRL,KC_LGUI,KC_LALT, MO(L05), MO(L04),
+ XXXXXXX, XXXXXXX,
+ KC_PGUP,
+ KC_SPACE,KC_LSHIFT,KC_PGDN,
+ //--
+ XXXXXXX, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPACE,
+ KC_LEAD, L01_RIGHT_01, KC_ENTER,
+ L01_RIGHT_02, MO(L03),
+ MO(LFN), L01_RIGHT_03, KC_RSHIFT,
+ MO(L04), MO(L05), KC_RALT, MO(LFN), KC_RCTRL,
+ KC_LEFT, KC_RIGHT,
+ KC_UP,
+ KC_DOWN, KC_RSHIFT, KC_SPACE
+),
+
+
+/*
+L02 -> MO(L02): SHIFT (as a layer not used, not defined, not reachable)
+ */
+
+
+/* L03 -> MO(L03): PROGRAMMING
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | | | | |
+ * |--------+ | | | | +--------|
+ * | | L03_LEFT |------| |------| L03_RIGHT | |
+ * |--------+ | | | | +--------|
+ * | | | | | | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | | | | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+[L03] = LAYOUT_ergodox_wrapper(
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, L03_LEFT_01, _______,
+ _______, L03_LEFT_02,
+ _______, L03_LEFT_03, _______,
+ _______, _______, _______, _______, _______,
+ _______, _______,
+ _______,
+ _______, _______, _______,
+ //--
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, L03_RIGHT_01, _______,
+ L03_RIGHT_02, _______,
+ _______, L03_RIGHT_03, _______,
+ _______, _______, _______, _______, _______,
+ _______, _______,
+ _______,
+ _______, _______, _______
+),
+
+/* L04 -> MO(L04): NAVIGATION AND NUMBERS
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | | | | |
+ * |--------+ | | | | +--------|
+ * | | L04_LEFT |------| |------| L04_RIGHT | |
+ * |--------+ | | | | +--------|
+ * | | | | | | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | | | | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | 0 | |------| |------| | 0 |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+[L04] = LAYOUT_ergodox_wrapper(
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, L04_LEFT_01, _______,
+ _______, L04_LEFT_02,
+ _______, L04_LEFT_03, _______,
+ _______, _______, _______, _______, _______,
+ _______, _______,
+ _______,
+ KC_0, _______, _______,
+ //--
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, L04_RIGHT_01, _______,
+ L04_RIGHT_02, _______,
+ _______, L04_RIGHT_03, _______,
+ _______, _______, _______, _______, _______,
+ _______, _______,
+ _______,
+ _______, _______, KC_0
+),
+
+
+/* L05 -> MO(L05): ALTERNATE
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | | | | |
+ * |--------+ | | | | +--------|
+ * | | L05_LEFT |------| |------| L05_RIGHT | |
+ * |--------+ | | | | +--------|
+ * | | | | | | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | | | | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+[L05] = LAYOUT_ergodox_wrapper(
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, L05_LEFT_01, _______,
+ _______, L05_LEFT_02,
+ _______, L05_LEFT_03, _______,
+ _______, _______, _______, _______, _______,
+ _______, _______,
+ _______,
+ _______, _______, _______,
+ //--
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, L05_RIGHT_01, _______,
+ L05_RIGHT_02, _______,
+ _______, L05_RIGHT_03, _______,
+ _______, _______, _______, _______, _______,
+ _______, _______,
+ _______,
+ _______, _______, _______
+),
+
+
+/*
+L06 -> <TBD>: UNSPECIFIED
+*/
+
+
+/* LFN -> MO(FN): FUNCTION
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | RESET | | | | | | | | | | | | | | RESET |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | | | | BACKSPC|
+ * |--------+ | | | | +--------|
+ * | | L06_LEFT |------| |------| L06_RIGHT | INSERT |
+ * |--------+ | | | | +--------|
+ * | | | | | | | DELETE |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | VOL+ | VOL- | MUTE | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+[LFN] = LAYOUT_ergodox_wrapper(
+ RESET, _______, _______, _______, _______, _______, _______,
+ _______, L06_LEFT_01, _______,
+ _______, L06_LEFT_02,
+ _______, L06_LEFT_03, _______,
+ _______, _______, _______, _______, _______,
+ _______, _______,
+ _______,
+ _______, _______, _______,
+ //--
+ _______, _______, _______, _______, _______, _______, RESET,
+ _______, L06_RIGHT_01, KC_BSPACE,
+ L06_RIGHT_02, KC_INSERT,
+ _______, L06_RIGHT_03, KC_DELETE,
+ KC_VOLU, KC_VOLD, KC_MUTE, _______, _______,
+ _______, _______,
+ _______,
+ _______, _______, _______
+)
+
+};
+
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+ set_unicode_input_mode(UC_LNX);
+};
+
+
+LEADER_EXTERNS();
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+ LEADER_DICTIONARY() {
+ leading = false;
+ leader_end();
+
+ SEQ_ONE_KEY (KC_1) {
+ // Β―\_(ツ)_/Β―
+ unicode_input_start(); register_hex(0xaf); unicode_input_finish();
+ register_code (KC_RALT); TAP_ONCE (KC_MINS); unregister_code (KC_RALT);
+ register_code (KC_RSFT); TAP_ONCE (KC_8); unregister_code (KC_RSFT);
+ unicode_input_start (); register_hex(0x30c4); unicode_input_finish();
+ register_code (KC_RSFT); TAP_ONCE (KC_9); TAP_ONCE(KC_7); unregister_code (KC_RSFT);
+ unicode_input_start (); register_hex(0xaf); unicode_input_finish();
+ }
+
+ SEQ_ONE_KEY (KC_2) {
+ // ε‡Έ(ツ)ε‡Έ
+ unicode_input_start(); register_hex(0x51F8); unicode_input_finish();
+ register_code (KC_RSFT); TAP_ONCE (KC_8); unregister_code (KC_RSFT);
+ unicode_input_start (); register_hex(0x30c4); unicode_input_finish();
+ register_code (KC_RSFT); TAP_ONCE (KC_9); unregister_code (KC_RSFT);
+ unicode_input_start (); register_hex(0x51F8); unicode_input_finish();
+ }
+ }
+}
diff --git a/keyboards/input_club/ergodox_infinity/keymaps/not-quite-neo/readme.md b/keyboards/input_club/ergodox_infinity/keymaps/not-quite-neo/readme.md
new file mode 100644
index 0000000000..3fcb4edf0d
--- /dev/null
+++ b/keyboards/input_club/ergodox_infinity/keymaps/not-quite-neo/readme.md
@@ -0,0 +1,5 @@
+# not-quite-neo
+
+This is my personal take on porting the [neo2 layout](https://www.neo-layout.org/) to support multiple keyboards.
+
+Refer to the [readme.md](../../../../users/not-quite-neo/readme.md) of the generic parts of the implementation. \ No newline at end of file
diff --git a/keyboards/input_club/ergodox_infinity/keymaps/not-quite-neo/rules.mk b/keyboards/input_club/ergodox_infinity/keymaps/not-quite-neo/rules.mk
new file mode 100644
index 0000000000..74505bd69e
--- /dev/null
+++ b/keyboards/input_club/ergodox_infinity/keymaps/not-quite-neo/rules.mk
@@ -0,0 +1,3 @@
+BACKLIGHT_ENABLE = yes
+UNICODE_ENABLE = yes
+LEADER_ENABLE = yes
diff --git a/keyboards/input_club/ergodox_infinity/keymaps/rask/README.md b/keyboards/input_club/ergodox_infinity/keymaps/rask/README.md
new file mode 100644
index 0000000000..8a13994301
--- /dev/null
+++ b/keyboards/input_club/ergodox_infinity/keymaps/rask/README.md
@@ -0,0 +1,20 @@
+# rask's Infinity ErgoDox Layout
+
+A basic ErgoDox layout that follows regular-ish QWERTY where it
+makes sense.
+
+![ErgoDox Layout](https://i.imgur.com/jYDInaY.png)
+
+## Features
+
+- Regular QWERTY alphas and symbols (apart from `[]{}\|` and shifted `/?`)
+- Regular numrow to make Fn-F-row simpler
+- CapsLock Fn1 with F-row behind it
+- Media controls and mouse controls on Fn2
+- Dedicated arrows
+
+## Building and flashing
+
+Follow the main Infinity ErgoDox guide but use the following layout:
+
+ $ sudo make ergodox_infinity:rask
diff --git a/keyboards/input_club/ergodox_infinity/keymaps/rask/keymap.c b/keyboards/input_club/ergodox_infinity/keymaps/rask/keymap.c
new file mode 100644
index 0000000000..e31c1c5d6b
--- /dev/null
+++ b/keyboards/input_club/ergodox_infinity/keymaps/rask/keymap.c
@@ -0,0 +1,201 @@
+#include QMK_KEYBOARD_H
+#include "debug.h"
+#include "action_layer.h"
+#include "version.h"
+
+#define BASE 0 // default layer
+#define FL1 1 // symbols
+#define FL2 2 // media keys
+
+enum custom_keycodes {
+ PLACEHOLDER = SAFE_RANGE, // can always be here
+ EPRM,
+ VRSN,
+ RGB_SLD
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | | 7 | 8 | 9 | 0 | - | = | Del |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | Bsp |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | Fn1 | A | S | D | F | G |------| |------| H | J | K | L | ; | Enter |
+ * |--------+------+------+------+------+------| \ | | Meh |------+------+------+------+------+--------|
+ * | LShift | Z | X | C | V | B | | | | N | M | , | . | Up | ' |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | Ctrl | Home | LGui | End | LAlt | | RAlt | Fn2 | Le | Do | Ri |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | Ins | PtSc | | Calc | Esc |
+ * ,------|------|------| |------+--------+------.
+ * | | | Del | | PgUp | | |
+ * | Space| Bsp |------| |------| Enter |Space |
+ * | | | Tab | | PgDn | | |
+ * `--------------------' `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = LAYOUT_ergodox( // layer 0 : default
+ // left hand
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6,
+ KC_TAB ,KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC,
+ MO(FL1),KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_LSFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_BSLS,
+ KC_LCTL,KC_HOME,KC_LGUI,KC_END,KC_LALT,
+ KC_INS, KC_PSCR,
+ KC_DEL,
+ KC_SPC, KC_BSPC,KC_TAB,
+ // right hand
+ KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_DEL,
+ KC_RBRC,KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,
+ MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, KC_UP, KC_SLSH,
+ KC_RALT,MO(FL2),KC_LEFT,KC_DOWN,KC_RIGHT,
+ KC_CALC, KC_ESC,
+ KC_PGUP,
+ KC_PGDN,KC_ENT, KC_SPC
+ ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,---------------------------------------------------. ,--------------------------------------------------.
+ * | Esc | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | |
+ * |---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
+ * | Version | | | | | | | | | | | | | | |
+ * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | |------| |------| | | | | | |
+ * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | | | | | PgUp | |
+ * `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | | | Home | PgDn | End |
+ * `-----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+// SYMBOLS
+[FL1] = LAYOUT_ergodox(
+ // left hand
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
+ VRSN, 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,
+ EPRM,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,
+ KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,
+ // right hand
+ KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, 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_PGUP, KC_TRNS,
+ KC_TRNS,KC_TRNS, KC_HOME, KC_PGDN, KC_END,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | MsUp | | | | | | | Prev | Play | Next | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | CapsLk | |MsLeft|MsDown|MsRght| |------| |------| | VolD | Mute | VolU | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | | | Stop | | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * |EEPROM| Menu | | Lclk | Rclk | | | | | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | Reset| |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+// MEDIA AND MOUSE
+[FL2] = LAYOUT_ergodox(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_CAPS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ EPRM, KC_APP, KC_TRNS, KC_BTN1, KC_BTN2,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,
+ // right hand
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_VOLD, KC_MUTE, KC_VOLU, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MSTP, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ RESET, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ // dynamically generate these.
+ case EPRM:
+ if (record->event.pressed) {
+ eeconfig_init();
+ }
+ return false;
+ break;
+ case VRSN:
+ if (record->event.pressed) {
+ SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
+ }
+ return false;
+ break;
+ case RGB_SLD:
+ if (record->event.pressed) {
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_mode(1);
+ #endif
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+ uint8_t layer = biton32(layer_state);
+
+ ergodox_board_led_off();
+ ergodox_right_led_1_off();
+ ergodox_right_led_2_off();
+ ergodox_right_led_3_off();
+ switch (layer) {
+ // TODO: Make this relevant to the ErgoDox EZ.
+ case 1:
+ ergodox_right_led_1_on();
+ break;
+ case 2:
+ ergodox_right_led_2_on();
+ break;
+ default:
+ // none
+ break;
+ }
+
+};
diff --git a/keyboards/input_club/ergodox_infinity/keymaps/rjhilgefort/keymap.c b/keyboards/input_club/ergodox_infinity/keymaps/rjhilgefort/keymap.c
new file mode 100644
index 0000000000..31d218ebfb
--- /dev/null
+++ b/keyboards/input_club/ergodox_infinity/keymaps/rjhilgefort/keymap.c
@@ -0,0 +1,381 @@
+/**
+ * Copyright 2021 Rob Hilgefort <@rjhilgefort>
+ *
+ * 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
+#include "version.h"
+
+
+enum custom_layers {
+ BASEMAC, // Base Mac Layer
+ BASELNX, // Base Linux Layer
+ SYMB, // Symbols Layer
+ MANMAC, // Media Numbers Mac Layer
+ MANLNX, // Media Numbers Linux Layer
+ EXA, // Extra Layer
+};
+
+enum custom_keycodes {
+ PLACEHOLDER = SAFE_RANGE, // can always be here
+ VRSN,
+};
+
+#define ALT_ESC ALT_T(KC_ESC)
+#define CTL_ESC CTL_T(KC_ESC)
+#define GUI_ESC GUI_T(KC_ESC)
+#define HYPER LGUI(LSFT(KC_LALT))
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Keymap 0: Base (Mac)
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | Tab | Q | W | E | R | T | | | | Y | U | I | O | P | Bksp |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | Ct/Esc | A | S | D | F | G |------| |------| H | J | K | L |Ctrl/;| ' |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | Shift | Z | X | C | V | B | | | | N | M | , | . |Ctrl//| Enter |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | |Shift | Tab | ↑ L3 |Alt/Ec| | ↑ L2 |Hyper | ' |Enter | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,---------------.
+ * | | | | | |
+ * ,------+------+------| |------+--------+------.
+ * | | | | | | | |
+ * | LGui | Bksp |------| |------| Bksp | Spc |
+ * | | | | | | | |
+ * `--------------------' `----------------------'
+ */
+[BASEMAC] = LAYOUT_ergodox(
+ // left hand
+ _______, _______, _______, _______, _______, _______, _______,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, _______,
+ CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, _______,
+ _______, KC_LSFT, KC_TAB, MO(MANMAC), ALT_ESC,
+ _______, _______,
+ _______,
+ KC_LGUI, KC_BSPC, _______,
+ // right hand
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_H, KC_J, KC_K, KC_L, CTL_T(KC_SCLN), KC_QUOT,
+ _______, KC_N, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLSH), KC_ENTER,
+ MO(SYMB), HYPER, KC_QUOT, KC_ENTER, _______,
+ _______, _______,
+ _______,
+ _______, KC_BSPC, KC_SPC
+),
+
+/* Keymap 1: Base (Linux)
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | Tab | Q | W | E | R | T | | | | Y | U | I | O | P | Bksp |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | Ct/Esc | A | S | D | F | G |------| |------| H | J | K | L |Ctrl/;| ' |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | Shift | Z | X | C | V | B | | | | N | M | , | . |Ctrl//| Enter |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | |Shift | Tab | ↑ L4 |Gui/Ec| | ↑ L2 | Hyper| ' |Enter | |
+ * `-----------------------------------' `----------------------------------'
+ * ,-------------. ,---------------.
+ * | | | | | |
+ * ,------+------+------| |------+--------+------.
+ * | | | | | | | |
+ * | Ctrl | Bksp |------| |------| Bksp | Spc |
+ * | | | | | | | |
+ * `--------------------' `----------------------'
+ */
+[BASELNX] = LAYOUT_ergodox(
+ // left hand
+ _______, _______, _______, _______, _______, _______, _______,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, _______,
+ ALT_ESC, KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, _______,
+ _______, KC_LSFT, KC_TAB, MO(MANLNX), GUI_ESC,
+ _______, _______,
+ _______,
+ KC_LCTRL, KC_BSPC, _______,
+ // right hand
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_H, KC_J, KC_K, KC_L, CTL_T(KC_SCLN), KC_QUOT,
+ _______, KC_N, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLSH), KC_ENTER,
+ MO(SYMB), HYPER, KC_QUOT, KC_ENTER, _______,
+ _______, _______,
+ _______,
+ _______, KC_BSPC, KC_SPC
+),
+
+/* Keymap 2: Symbol Layer
+ *
+ * ,---------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
+ * | | \ | / | [ | ] | ~ | | | | | | = | + | - | _ | |
+ * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | { | } | ( | ) | ` |------| |------| ← | ↓ | ↑ | β†’ | | |
+ * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | ! | @ | # | $ | % | | | | ^ | & | * | ( | ) | |
+ * `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | ↑ L5 | | | TRNS | | | | |
+ * `-----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------+------+------| |------+------+------.
+ * | | | | | | | |
+ * | | Del |------| |------| Del | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+[SYMB] = LAYOUT_ergodox(
+ // left hand
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_BSLS, KC_SLSH, KC_LBRC, KC_RBRC, KC_TILD, _______,
+ _______, KC_LCBR, KC_RCBR, KC_LPRN, KC_RPRN, KC_GRV,
+ _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, _______,
+ _______, _______, _______, MO(EXA), _______,
+ _______, _______,
+ _______,
+ _______, KC_DEL, _______,
+ // right hand
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_PIPE, KC_EQL, KC_PLUS, KC_MINS, KC_UNDS, _______,
+ KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______, _______,
+ _______, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
+ KC_TRNS, _______, _______, _______, _______,
+ _______, _______,
+ _______,
+ _______, KC_DEL, _______
+),
+
+/* Keymap 3: Media & Numbers (MAC)
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | |Scrn -| Vol+ |Scrn +| | | | | | 7 | 8 | 9 | * | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | |VolMut|Trak ←|Ply/Ps|Trak β†’| |------| |------| | 4 | 5 | 6 | + | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | Vol- | | | | | | | 1 | 2 | 3 | \ | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | TRNS | | | ↑ L5 | 0 | . | = | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------+------+------| |------+------+------.
+ * | | | | | | | |
+ * | | |------| |------| | 0 |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+[MANMAC] = LAYOUT_ergodox(
+ // left hand
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_BRMD, KC_VOLU, KC_BRMU, _______, _______,
+ _______, KC_MUTE, KC_MRWD, KC_MPLY, KC_MFFD, _______,
+ _______, _______, _______, KC_VOLD, _______, _______, _______,
+ _______, _______, _______, KC_TRNS, _______,
+ _______, _______,
+ _______,
+ _______, _______, _______,
+ // right hand
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_7, KC_8, KC_9, KC_ASTR, _______,
+ _______, KC_4, KC_5, KC_6, KC_PLUS, _______,
+ _______, _______, KC_1, KC_2, KC_3, KC_BSLS, _______,
+ MO(EXA), KC_0, KC_DOT, KC_EQL, _______,
+ _______, _______,
+ _______,
+ _______, _______, KC_0
+),
+
+/* Keymap 4: Media & Numbers (Linux)
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | |Scrn -| Vol+ |Scrn +| | | | | | 7 | 8 | 9 | * | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | |VolMut|Trak ←|Ply/Ps|Trak β†’| |------| |------| | 4 | 5 | 6 | + | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | Vol- | | | | | | | 1 | 2 | 3 | \ | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | TRNS | | | ↑ L5 | 0 | . | = | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------+------+------| |------+------+------.
+ * | | | | | | | |
+ * | | |------| |------| | 0 |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+[MANLNX] = LAYOUT_ergodox(
+ // left hand
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_BRID, KC_VOLU, KC_BRIU, _______, _______,
+ _______, KC_MUTE, KC_MPRV, KC_MPLY, KC_MNXT, _______,
+ _______, _______, _______, KC_VOLD, _______, _______, _______,
+ _______, _______, _______, KC_TRNS, _______,
+ _______, _______,
+ _______,
+ _______, _______, _______,
+ // right hand
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_7, KC_8, KC_9, KC_ASTR, _______,
+ _______, KC_4, KC_5, KC_6, KC_PLUS, _______,
+ _______, _______, KC_1, KC_2, KC_3, KC_BSLS, _______,
+ MO(EXA), KC_0, KC_DOT, KC_EQL, _______,
+ _______, _______,
+ _______,
+ _______, _______, KC_0
+),
+
+/* Keymap 5: Extra
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | β†’ L0 | β†’ L1 | | | | | | | | | | | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | |------| |------| Home | PGDN | PGUP | End | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | | | | | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | TRNS | | | TRNS | | | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------+------+ |------+------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+[EXA] = LAYOUT_ergodox(
+ // left hand
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, DF(BASEMAC), DF(BASELNX), _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, KC_TRNS, _______,
+ _______, _______,
+ _______,
+ _______, _______, _______,
+ // right hand
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ KC_TRNS, _______, _______, _______, _______,
+ _______, _______,
+ _______,
+ _______, _______, _______
+),
+
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ // dynamically generate these.
+ case VRSN:
+ if (record->event.pressed) {
+ SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+ uint8_t layer = biton32(layer_state);
+
+ ergodox_board_led_off();
+ ergodox_right_led_1_off();
+ ergodox_right_led_2_off();
+ ergodox_right_led_3_off();
+ switch (layer) {
+ // TODO: Make this relevant to the ErgoDox EZ.
+ case 2:
+ ergodox_right_led_2_on();
+ break;
+ case 3:
+ ergodox_right_led_3_on();
+ break;
+ case 4:
+ ergodox_right_led_3_on();
+ break;
+ case 5:
+ ergodox_right_led_1_on();
+ break;
+ default:
+ // none
+ break;
+ }
+
+};
+
+/*
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | |------| |------| | | | | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | | | | | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | | | | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------+------+ |------+------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+/*
+ * [EXTRA] = LAYOUT_ergodox(
+ * // left hand
+ * _______, _______, _______, _______, _______, _______, _______,
+ * _______, _______, _______, _______, _______, _______, _______,
+ * _______, _______, _______, _______, _______, _______,
+ * _______, _______, _______, _______, _______, _______, _______,
+ * _______, _______, _______, _______, _______,
+ * _______, _______,
+ * _______,
+ * _______, _______, _______,
+ * // right hand
+ * _______, _______, _______, _______, _______, _______, _______,
+ * _______, _______, _______, _______, _______, _______, _______,
+ * _______, _______, _______, _______, _______, _______,
+ * _______, _______, _______, _______, _______, _______, _______,
+ * _______, _______, _______, _______, _______, _______, _______,
+ * _______, _______, _______, _______, _______,
+ * _______, _______,
+ * _______,
+ * _______, _______, _______
+ * ),
+ */
diff --git a/keyboards/input_club/ergodox_infinity/keymaps/rjhilgefort/readme.md b/keyboards/input_club/ergodox_infinity/keymaps/rjhilgefort/readme.md
new file mode 100644
index 0000000000..bb141b99dc
--- /dev/null
+++ b/keyboards/input_club/ergodox_infinity/keymaps/rjhilgefort/readme.md
@@ -0,0 +1,175 @@
+# [🐦 @rjhilgefort](https://twitter.com/rjhilgefort)'s Ergodox Infinity Layout
+
+The layout is heavily inspired by my [Atreus 2](https://atreus.technomancy.us/2) and the layout I use for it. Hence, I basically treat my Ergodox Infinity like it's a 40% keyboard and have even taken off the caps of the keys that I don't make use of to further emphasize this. This allows for easy interop between my office setup (Ergodox) and my laptop setup (Atreus 2).
+
+![](https://imgur.com/rJnSjLq.jpg)
+![](https://imgur.com/8aSSGP1.jpg)
+
+## Features
+
+Here's some highlights/features of the layout.
+
+- Inspired by 40% keyboards, doesn't use keys that don't exist on those boards.
+- Ergonomic symbols layer.
+- Media and Numpad layer.
+- Planck-like extra tri-layer when holding the other two layers.
+- Planck conformability- leaves gutter keys for familiarity if coming from there.
+- Supports Mac and Linux as 1st class citizens giving each a dedicated base layer and a media layer for each that matches media keys for each OS. The Linux default layer focuses on `Ctrl` instead of `Super` and vice versa for Mac. (When you set Linux as your base layer, the Linux media layer is what you shift into. Same for the Mac layer when that's the base)
+
+## Layers
+
+#### Keymap 0: Base (Mac)
+
+```
+,--------------------------------------------------. ,--------------------------------------------------.
+| | | | | | | | | | | | | | | |
+|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+| Tab | Q | W | E | R | T | | | | Y | U | I | O | P | Bksp |
+|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+| Ct/Esc | A | S | D | F | G |------| |------| H | J | K | L |Ctrl/;| ' |
+|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+| Shift | Z | X | C | V | B | | | | N | M | , | . |Ctrl//| Enter |
+`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ | |Shift | Tab | ↑ L3 |Alt/Ec| | ↑ L2 |Hyper | ' |Enter | |
+ `----------------------------------' `----------------------------------'
+ ,-------------. ,---------------.
+ | | | | | |
+ ,------+------+------| |------+--------+------.
+ | | | | | | | |
+ | LGui | Bksp |------| |------| Bkspc | Spc |
+ | | | | | | | |
+ `--------------------' `----------------------'
+```
+
+#### Keymap 1: Base (Linux)
+
+```
+,--------------------------------------------------. ,--------------------------------------------------.
+| | | | | | | | | | | | | | | |
+|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+| Tab | Q | W | E | R | T | | | | Y | U | I | O | P | Bksp |
+|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+| Ct/Esc | A | S | D | F | G |------| |------| H | J | K | L |Ctrl/;| ' |
+|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+| Shift | Z | X | C | V | B | | | LAlt | N | M | , | . |Ctrl//| Enter |
+`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ | |Shift | Tab | ↑ L4 |Gui/Ec| | ↑ L2 |Hyper | ' |Enter | |
+ `-----------------------------------' `----------------------------------'
+ ,-------------. ,---------------.
+ | | | | | |
+ ,------+------+------| |------+--------+------.
+ | | | | | | | |
+ | Ctrl | Bksp |------| |------| Bkspc | Spc |
+ | | | | | | | |
+ `--------------------' `----------------------'
+```
+
+#### Keymap 2: Symbol Layer
+
+```
+,---------------------------------------------------. ,--------------------------------------------------.
+| | | | | | | | | | | | | | | |
+|---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
+| | \ | / | [ | ] | ~ | | | | | | = | + | - | _ | |
+|---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+| | { | } | ( | ) | ` |------| |------| ← | ↓ | ↑ | β†’ | | |
+|---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+| | ! | @ | # | $ | % | | | | ^ | & | * | ( | ) | |
+`---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ | | | | ↑ L5 | | | TRNS | | | | |
+ `-----------------------------------' `----------------------------------'
+ ,-------------. ,-------------.
+ | | | | | |
+ ,------+------+------| |------+------+------.
+ | | | | | | | |
+ | | Del |------| |------| Del | |
+ | | | | | | | |
+ `--------------------' `--------------------'
+```
+
+#### Keymap 3: Media & Numbers (MAC)
+
+```
+,--------------------------------------------------. ,--------------------------------------------------.
+| | | | | | | | | | | | | | | |
+|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+| | |Scrn -| Vol+ |Scrn +| | | | | | 7 | 8 | 9 | * | |
+|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+| |VolMut|Trak ←|Ply/Ps|Trak β†’| |------| |------| | 4 | 5 | 6 | + | |
+|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+| | | | Vol- | | | | | | | 1 | 2 | 3 | \ | |
+`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ | | | | TRNS | | | ↑ L5 | | . | = | |
+ `----------------------------------' `----------------------------------'
+ ,-------------. ,-------------.
+ | | | | | |
+ ,------+------+------| |------+------+------.
+ | | | | | | | |
+ | | |------| |------| | 0 |
+ | | | | | | | |
+ `--------------------' `--------------------'
+```
+
+#### Keymap 4: Media & Numbers (Linux)
+
+```
+,--------------------------------------------------. ,--------------------------------------------------.
+| | | | | | | | | | | | | | | |
+|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+| | |Scrn -| Vol+ |Scrn +| | | | | | 7 | 8 | 9 | * | |
+|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+| |VolMut|Trak ←|Ply/Ps|Trak β†’| |------| |------| | 4 | 5 | 6 | + | |
+|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+| | | | Vol- | | | | | | | 1 | 2 | 3 | \ | |
+`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ | | | | TRNS | | | ↑ L5 | | . | = | |
+ `----------------------------------' `----------------------------------'
+ ,-------------. ,-------------.
+ | | | | | |
+ ,------+------+------| |------+------+------.
+ | | | | | | | |
+ | | |------| |------| | 0 |
+ | | | | | | | |
+ `--------------------' `--------------------'
+```
+
+#### Keymap 5: Extra
+
+```
+,--------------------------------------------------. ,--------------------------------------------------.
+| | | | | | | | | | | | | | | |
+|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+| | β†’ L0 | β†’ L1 | | | | | | | | | | | | |
+|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+| | | | | | |------| |------| Home | PGDN | PGUP | End | | |
+|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+| | | | | | | | | | | | | | | |
+`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ | | | | TRNS | | | TRNS | | | | |
+ `----------------------------------' `----------------------------------'
+ ,-------------. ,-------------.
+ | | | | | |
+ ,------|------+------+ |------+------+------.
+ | | | | | | | |
+ | | |------| |------| | |
+ | | | | | | | |
+ `--------------------' `--------------------'
+```
+
+## TODO
+
+1. Get the LEDs to work: https://www.reddit.com/r/ergodox/comments/80hgxj/infinity_lcd_configuration_in_qmk/duxklzh/
+
+## Building And Flashing
+
+See the default building and flashing documentation for the Ergodox Infinity, I don't do anything beyond that.
+
+## FAQs
+
+> What's the case you have for your Ergodox Infinity?
+
+It's a case made by Datamancer and I got it [on Drop.com as a group buy](https://drop.com/buy/datamancer-infinity-ergodox-hardwood-case).
+
+> Why don't you just use the other keys?
+
+I bounce between my Ergodox, Atreus 2, CorneKBD, and a couple of Planck keyboards. If I start using keys on my Ergo that I can't on my 40% boards, then my layouts start to diverge and muscle memory is diminished. I like to constrain my bigger boards to my smaller for continuity.
diff --git a/keyboards/input_club/ergodox_infinity/keymaps/trulyergonomic/README.md b/keyboards/input_club/ergodox_infinity/keymaps/trulyergonomic/README.md
new file mode 100644
index 0000000000..1e248742ee
--- /dev/null
+++ b/keyboards/input_club/ergodox_infinity/keymaps/trulyergonomic/README.md
@@ -0,0 +1,3 @@
+# Truly Ergonomic like layout
+
+A basic ErgoDox layout that imitates the Truly Ergonomic keyboard layout.
diff --git a/keyboards/input_club/ergodox_infinity/keymaps/trulyergonomic/keymap.c b/keyboards/input_club/ergodox_infinity/keymaps/trulyergonomic/keymap.c
new file mode 100644
index 0000000000..02f409ad9e
--- /dev/null
+++ b/keyboards/input_club/ergodox_infinity/keymaps/trulyergonomic/keymap.c
@@ -0,0 +1,159 @@
+#include QMK_KEYBOARD_H
+#include "debug.h"
+#include "action_layer.h"
+#include "version.h"
+
+#define BASE 0 // default layer
+#define EXTRA 1 // extra
+
+enum custom_keycodes {
+ PLACEHOLDER = SAFE_RANGE, // can always be here
+ EPRM,
+ VRSN,
+ RGB_SLD
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | ESC | 1 | 2 | 3 | 4 | 5 | LGui | | LGui | 6 | 7 | 8 | 9 | 0 | - |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | Tab | Q | W | E | R | T | Del | | Tab | Y | U | I | O | P | = |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | LShift | A | S | D | F | G |------| |------| H | J | K | L | ; | RShift |
+ * |--------+------+------+------+------+------| Back | | Back |------+------+------+------+------+--------|
+ * | LCtrl | Z | X | C | V | B | space| | space| N | M | , | . | ' | RCtrl |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | LAlt | Home | PgUp | PgDn | End | | Left | Up | Down | Rigth| RAlt |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | ~ | | | | [ | ] |
+ * ,------|------|------| |------+------+------.
+ * | | | L1 | | Grv | | |
+ * | Space|Enter |------| |------| Enter|Space |
+ * | | | / | | \ | | |
+ * `--------------------' `--------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = LAYOUT_ergodox( // layer 0 : default
+ // left hand
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LGUI,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_DEL,
+ KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_BSPC,
+ KC_LALT, KC_HOME, KC_PGUP, KC_PGDN, KC_END,
+ KC_TILD, KC_PIPE,
+ TG(EXTRA),
+ KC_SPC, KC_ENT, KC_SLSH,
+ // right hand
+ KC_LGUI, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ KC_TAB, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_EQL,
+ KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_RSFT,
+ KC_BSPC, KC_N, KC_M, KC_COMM, KC_DOT, KC_QUOT, KC_RCTL,
+ KC_LEFT, KC_UP, KC_DOWN, KC_RGHT, KC_RALT,
+ KC_LBRC, KC_RBRC,
+ KC_GRV,
+ KC_BSLS, KC_ENT, KC_SPC
+ ),
+/* Keymap 1: Extra Layer
+ *
+ * ,---------------------------------------------------. ,--------------------------------------------------.
+ * | | F1 | F2 | F3 | F4 | F5 | | | PSCR | F6 | F7 | F8 | F9 | F10 | F11 |
+ * |---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
+ * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
+ * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | Caps | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
+ * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
+ * `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | 0 | , | . | = | |
+ * `-----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * |VolUp |VolDn | | Prev | Next |
+ * ,------|------|------| |------+------+------.
+ * | | | | | Stop |Bright|Bright|
+ * | Mute |Pause |------| |------|ness- |ness+ |
+ * | | | | | Play | | |
+ * `--------------------' `--------------------'
+ */
+// SYMBOLS
+[EXTRA] = LAYOUT_ergodox(
+ // left hand
+ KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
+ KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+ KC_CAPS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+ KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_VOLU,KC_VOLD,
+ KC_TRNS,
+ KC_MUTE,KC_PAUS,KC_TRNS,
+ // right hand
+ KC_PSCR, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
+ KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
+ KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
+ KC_0, KC_COMM, KC_DOT, KC_EQL, KC_TRNS,
+ KC_MPRV, KC_MNXT,
+ KC_STOP,
+ KC_MPLY, RGB_VAD, RGB_VAI
+),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ // dynamically generate these.
+ case EPRM:
+ if (record->event.pressed) {
+ eeconfig_init();
+ }
+ return false;
+ break;
+ case VRSN:
+ if (record->event.pressed) {
+ SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
+ }
+ return false;
+ break;
+ case RGB_SLD:
+ if (record->event.pressed) {
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_mode(1);
+ #endif
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+ uint8_t layer = biton32(layer_state);
+
+ ergodox_board_led_off();
+ ergodox_right_led_1_off();
+ ergodox_right_led_2_off();
+ ergodox_right_led_3_off();
+ switch (layer) {
+ // TODO: Make this relevant to the ErgoDox EZ.
+ case 1:
+ ergodox_right_led_1_on();
+ break;
+ case 2:
+ ergodox_right_led_2_on();
+ break;
+ default:
+ // none
+ break;
+ }
+
+};
diff --git a/keyboards/input_club/ergodox_infinity/mcuconf.h b/keyboards/input_club/ergodox_infinity/mcuconf.h
new file mode 100644
index 0000000000..f6730b99ca
--- /dev/null
+++ b/keyboards/input_club/ergodox_infinity/mcuconf.h
@@ -0,0 +1,74 @@
+/*
+ ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+#ifndef _MCUCONF_H_
+#define _MCUCONF_H_
+
+#define K20x_MCUCONF
+
+/*
+ * HAL driver system settings.
+ */
+
+#define K20x7
+
+/* Select the MCU clocking mode below by enabling the appropriate block. */
+
+#define KINETIS_NO_INIT FALSE
+
+/* PEE mode - 48MHz system clock driven by external crystal. */
+#define KINETIS_MCG_MODE KINETIS_MCG_MODE_PEE
+#define KINETIS_PLLCLK_FREQUENCY 72000000UL
+#define KINETIS_SYSCLK_FREQUENCY 72000000UL
+#define KINETIS_BUSCLK_FREQUENCY 36000000UL
+#define KINETIS_FLASHCLK_FREQUENCY 24000000UL
+
+#if 0
+/* FEI mode - 48 MHz with internal 32.768 kHz crystal */
+#define KINETIS_MCG_MODE KINETIS_MCG_MODE_FEI
+#define KINETIS_MCG_FLL_DMX32 1 /* Fine-tune for 32.768 kHz */
+#define KINETIS_MCG_FLL_DRS 1 /* 1464x FLL factor */
+#define KINETIS_SYSCLK_FREQUENCY 47972352UL /* 32.768 kHz * 1464 (~48 MHz) */
+#define KINETIS_CLKDIV1_OUTDIV1 1
+#define KINETIS_CLKDIV1_OUTDIV2 1
+#define KINETIS_CLKDIV1_OUTDIV4 2
+#define KINETIS_BUSCLK_FREQUENCY KINETIS_SYSCLK_FREQUENCY
+#define KINETIS_FLASHCLK_FREQUENCY KINETIS_SYSCLK_FREQUENCY/2
+#endif
+
+/*
+ * SERIAL driver system settings.
+ */
+#define KINETIS_SERIAL_USE_UART0 TRUE
+#define KINETIS_SERIAL_USE_UART1 TRUE
+
+/*
+ * USB driver settings
+ */
+#define KINETIS_USB_USE_USB0 TRUE
+/* Need to redefine this, since the default is for K20x */
+/* This is for Teensy LC; you should comment it out (or change to 5)
+ * for Teensy 3.x */
+#define KINETIS_USB_USB0_IRQ_PRIORITY 2
+
+/*
+ * SPI driver system settings.
+ */
+#define KINETIS_SPI_USE_SPI0 TRUE
+
+#define KINETIS_I2C_USE_I2C0 TRUE
+
+#endif /* _MCUCONF_H_ */
diff --git a/keyboards/input_club/ergodox_infinity/readme.md b/keyboards/input_club/ergodox_infinity/readme.md
new file mode 100644
index 0000000000..1f8b643340
--- /dev/null
+++ b/keyboards/input_club/ergodox_infinity/readme.md
@@ -0,0 +1,66 @@
+# ErgoDox Infinity
+
+The Infinity is two completely independent keyboards, and needs to be flashed
+for the left and right halves seperately. To flash them:
+
+ - Make sure you are in the top-level qmk_firmware directory
+
+ - Build the firmware with `make input_club/ergodox_infinity:keymapname`
+
+ - Plug in the left hand keyboard only.
+
+ - Press the program button (back of keyboard, above thumb pad).
+
+ - Install the firmware with `sudo make input_club/ergodox_infinity:keymapname:dfu-util`
+
+ - Plug in the right hand keyboard only.
+
+ - Press the program button (back of keyboard, above thumb pad).
+
+ - Install the firmware with `sudo make input_club/ergodox_infinity:keymapname:dfu-util`
+
+More information on the Infinity firmware is available in the [TMK/chibios for
+Input Club Infinity Ergodox](https://github.com/fredizzimo/infinity_ergodox/blob/master/README.md)
+
+## Infinity Two Halves
+
+The Infinity is two completely independent keyboards, that can connect together.
+You have a few options in how you flash the firmware:
+
+- Add `#define EE_HANDS` to your config.h, initialize the EEPROM values (see below),
+ and then flash the same firmware to both halves.
+
+- Flash with the instructions above, which assume the left hand is connected to USB.
+
+- For minor changes such as changing only the keymap without having updated
+ any part of the firmware code itself, you can program only the half connected to USB,
+ but it is safest to program both halves.
+
+### EE_HANDS initialization
+
+To initialize the EEPROM values for `EE_HANDS` to work properly, these steps should work.
+They only need to be done once, unless you reset the EEPROM later.
+
+ - Plug in the left keyboard half to the computer, and press its program button.
+
+ - Flash the left half with `make input_club/ergodox_infinity:default:dfu-util-split-left`
+ (If you need to use a different method to flash your keyboard, still run this command,
+ and abort it with Ctrl+C when the flashing attempts starts to print errors,
+ then flash the built firmware).
+
+ - On the left half, press the top vertical 1.5U key (second from the top in the rightmost column) once,
+ then the 1U key at the bottom in the opposite corner (bottom left corner).
+
+ - Plug in the right keyboard half to the computer, and press its program button.
+
+ - Flash the right half with `make input_club/ergodox_infinity:default:dfu-util-split-right`
+
+ - On the right half, press the top vertical 1.5U key (second from the top in the leftmost column) once,
+ then the 1U key at the bottom in the opposite corner (bottom right corner).
+
+ - Add `#define EE_HANDS` to the config.h file of your keymap, and build your firmware using
+ `make input_club/ergodox_infinity:keymapname`.
+
+ - After this, you can flash both halves with the same firmware, _without_ risking a mirrored keyboard when connected the wrong way.
+ If you reset your EEPROM later, you'll have to follow these steps again, though.
+
diff --git a/keyboards/input_club/ergodox_infinity/rules.mk b/keyboards/input_club/ergodox_infinity/rules.mk
new file mode 100644
index 0000000000..c35f54de30
--- /dev/null
+++ b/keyboards/input_club/ergodox_infinity/rules.mk
@@ -0,0 +1,37 @@
+# MCU name
+MCU = MK20DX256
+
+# Bootloader selection
+BOOTLOADER = kiibohd
+
+# Board: it should exist either in <chibios>/os/hal/boards/
+# or <this_dir>/boards
+# This board was copied from PJRC_TEENSY_3_1. The only difference should be a
+# hack to ensure the watchdog has started before trying to disable it, and an
+# override to disable restart of USB driver after returning from suspend.
+BOARD = IC_TEENSY_3_1
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes # 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 # Enable N-Key Rollover
+UNICODE_ENABLE = yes # Unicode
+SWAP_HANDS_ENABLE= yes # Allow swapping hands of keyboard
+SLEEP_LED_ENABLE = yes
+
+RGBLIGHT_ENABLE = no
+
+SPLIT_KEYBOARD = yes
+SERIAL_DRIVER = usart
+
+ST7565_ENABLE = yes
+
+LED_MATRIX_ENABLE = yes
+LED_MATRIX_DRIVER = IS31FL3731
+
+LAYOUTS = ergodox
diff --git a/keyboards/input_club/infinity60/chconf.h b/keyboards/input_club/infinity60/chconf.h
new file mode 100644
index 0000000000..3f1f9a8d76
--- /dev/null
+++ b/keyboards/input_club/infinity60/chconf.h
@@ -0,0 +1,31 @@
+/* Copyright 2020 QMK
+ *
+ * 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/>.
+ */
+
+/*
+ * This file was auto-generated by:
+ * `qmk chibios-confmigrate -i keyboards/infinity60/chconf.h -r platforms/chibios/common/configs/chconf.h`
+ */
+
+#pragma once
+
+#define CH_CFG_ST_TIMEDELTA 0
+
+#define CH_CFG_TIME_QUANTUM 20
+
+#define CH_CFG_USE_MAILBOXES TRUE
+
+#include_next <chconf.h>
+
diff --git a/keyboards/input_club/infinity60/config.h b/keyboards/input_club/infinity60/config.h
new file mode 100644
index 0000000000..e73a663b39
--- /dev/null
+++ b/keyboards/input_club/infinity60/config.h
@@ -0,0 +1,61 @@
+/*
+Copyright 2015 Jun Wako <wakojun@gmail.com>
+
+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
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x1C11
+#define PRODUCT_ID 0xB04D
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Input Club
+#define PRODUCT Infinity 60% (QMK)
+
+/* key matrix size */
+#define MATRIX_ROWS 7
+#define MATRIX_COLS 9
+
+/* COL2ROW, ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
+
+/* define if matrix has ghost */
+//#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
+
+/*
+ * 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
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
diff --git a/keyboards/input_club/infinity60/halconf.h b/keyboards/input_club/infinity60/halconf.h
new file mode 100644
index 0000000000..f2a330b416
--- /dev/null
+++ b/keyboards/input_club/infinity60/halconf.h
@@ -0,0 +1,27 @@
+/* Copyright 2020 QMK
+ *
+ * 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/>.
+ */
+
+/*
+ * This file was auto-generated by:
+ * `qmk chibios-confmigrate -i keyboards/infinity60/halconf.h -r platforms/chibios/common/configs/halconf.h`
+ */
+
+#pragma once
+
+#define HAL_USE_I2C TRUE
+
+#include_next <halconf.h>
+
diff --git a/keyboards/input_club/infinity60/infinity60.c b/keyboards/input_club/infinity60/infinity60.c
new file mode 100644
index 0000000000..73751140ea
--- /dev/null
+++ b/keyboards/input_club/infinity60/infinity60.c
@@ -0,0 +1,18 @@
+/*
+Copyright 2012,2013 Jun Wako <wakojun@gmail.com>
+
+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 "infinity60.h"
diff --git a/keyboards/input_club/infinity60/infinity60.h b/keyboards/input_club/infinity60/infinity60.h
new file mode 100644
index 0000000000..ac1470d5f6
--- /dev/null
+++ b/keyboards/input_club/infinity60/infinity60.h
@@ -0,0 +1,36 @@
+/*
+Copyright 2014 Jun Wako <wakojun@gmail.com>
+
+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"
+
+#define LAYOUT_60_ansi_split_bs_rshift( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k10, k11, k12, k13, k14, k15, \
+ k16, k17, k18, k20, k21, k22, k23, k24, k25, k26, k27, k28, k30, k31, \
+ k32, k33, k34, k35, k36, k37, k38, k40, k41, k42, k43, k44, k45, \
+ k46, k47, k48, k50, k51, k52, k53, k54, k55, k56, k57, k58, k60, \
+ k61, k62, k63, k64, k65, k66, k67, k68 \
+) { \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08 }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18 }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28 }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, k38 }, \
+ { k40, k41, k42, k43, k44, k45, k46, k47, k48 }, \
+ { k50, k51, k52, k53, k54, k55, k56, k57, k58 }, \
+ { k60, k61, k62, k63, k64, k65, k66, k67, k68 } \
+}
diff --git a/keyboards/input_club/infinity60/info.json b/keyboards/input_club/infinity60/info.json
new file mode 100644
index 0000000000..3fbd8b1b25
--- /dev/null
+++ b/keyboards/input_club/infinity60/info.json
@@ -0,0 +1,78 @@
+{
+ "keyboard_name": "Infinity 60%",
+ "url": "https://input.club/devices/infinity-keyboard/",
+ "maintainer": "qmk",
+ "layouts": {
+ "LAYOUT_60_ansi_split_bs_rshift": {
+ "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": 12, "y": 0},
+ {"x": 13, "y": 0},
+ {"x": 14, "y": 0},
+
+ {"x": 0, "y": 1, "w": 1.5},
+ {"x": 1.5, "y": 1},
+ {"x": 2.5, "y": 1},
+ {"x": 3.5, "y": 1},
+ {"x": 4.5, "y": 1},
+ {"x": 5.5, "y": 1},
+ {"x": 6.5, "y": 1},
+ {"x": 7.5, "y": 1},
+ {"x": 8.5, "y": 1},
+ {"x": 9.5, "y": 1},
+ {"x": 10.5, "y": 1},
+ {"x": 11.5, "y": 1},
+ {"x": 12.5, "y": 1},
+ {"x": 13.5, "y": 1, "w": 1.5},
+
+ {"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},
+ {"x": 10.75, "y": 2},
+ {"x": 11.75, "y": 2},
+ {"x": 12.75, "y": 2, "w": 2.25},
+
+ {"x": 0, "y": 3, "w": 2.25},
+ {"x": 2.25, "y": 3},
+ {"x": 3.25, "y": 3},
+ {"x": 4.25, "y": 3},
+ {"x": 5.25, "y": 3},
+ {"x": 6.25, "y": 3},
+ {"x": 7.25, "y": 3},
+ {"x": 8.25, "y": 3},
+ {"x": 9.25, "y": 3},
+ {"x": 10.25, "y": 3},
+ {"x": 11.25, "y": 3},
+ {"x": 12.25, "y": 3, "w": 1.75},
+ {"x": 14, "y": 3},
+
+ {"x": 0, "y": 4, "w": 1.5},
+ {"x": 1.5, "y": 4},
+ {"x": 2.5, "y": 4, "w": 1.5},
+ {"x": 4, "y": 4, "w": 6},
+ {"x": 10, "y": 4, "w": 1.5},
+ {"x": 11.5, "y": 4},
+ {"x": 12.5, "y": 4},
+ {"x": 13.5, "y": 4, "w": 1.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/input_club/infinity60/keymaps/default/keymap.c b/keyboards/input_club/infinity60/keymaps/default/keymap.c
new file mode 100644
index 0000000000..334c24e29e
--- /dev/null
+++ b/keyboards/input_club/infinity60/keymaps/default/keymap.c
@@ -0,0 +1,45 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * β”Œβ”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”
+ * β”‚Escβ”‚ 1 β”‚ 2 β”‚ 3 β”‚ 4 β”‚ 5 β”‚ 6 β”‚ 7 β”‚ 8 β”‚ 9 β”‚ 0 β”‚ - β”‚ = β”‚ \ β”‚ ` β”‚
+ * β”œβ”€β”€β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”€
+ * β”‚ Tab β”‚ Q β”‚ W β”‚ E β”‚ R β”‚ T β”‚ Y β”‚ U β”‚ I β”‚ O β”‚ P β”‚ [ β”‚ ] β”‚ Bspcβ”‚
+ * β”œβ”€β”€β”€β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”€β”€β”€β”€β”€β”€
+ * β”‚ Ctrl β”‚ A β”‚ S β”‚ D β”‚ F β”‚ G β”‚ H β”‚ J β”‚ K β”‚ L β”‚ ; β”‚ ' β”‚ Enter β”‚
+ * β”œβ”€β”€β”€β”€β”€β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”€β”¬β”€β”€β”€β”€
+ * β”‚ Shift β”‚ Z β”‚ X β”‚ C β”‚ V β”‚ B β”‚ N β”‚ M β”‚ , β”‚ . β”‚ / β”‚ Shiftβ”‚ Fnβ”‚
+ * β”œβ”€β”€β”€β”€β”€β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”€β”€β”¬β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”¬β”΄β”€β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”€β”¬β”€β”΄β”€β”€β”€β”€
+ * β”‚ β”‚GUIβ”‚ Alt β”‚ β”‚ Alt β”‚GUIβ”‚ β”‚ β”‚
+ * β””β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”˜
+ */
+ [0] = LAYOUT_60_ansi_split_bs_rshift(
+ 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_BSLS, KC_GRV,
+ 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_BSPC,
+ KC_LCTL, 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, MO(1),
+ XXXXXXX, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, XXXXXXX, XXXXXXX
+ ),
+
+ /*
+ * β”Œβ”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”
+ * β”‚Pwrβ”‚F1 β”‚F2 β”‚F3 β”‚F4 β”‚F5 β”‚F6 β”‚F7 β”‚F8 β”‚F9 β”‚F10β”‚F11β”‚F12β”‚Insβ”‚Delβ”‚
+ * β”œβ”€β”€β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”˜
+ * β”‚Caps β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚PScβ”‚Slkβ”‚Pseβ”‚ ↑ β”‚ β”‚ β”‚
+ * β””β”€β”€β”€β”€β”€β”˜β”Œβ”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”β”€β”€β”΄β”¬β”€β”€β”΄β”Œβ”€β”€β”€β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”
+ * β”‚ β”‚Vl-β”‚Vl+β”‚Mutβ”‚ β”‚ β”‚ * β”‚ / β”‚Homβ”‚PgUβ”‚ ← β”‚ β†’ β”‚ Enter β”‚
+ * β”œβ”€β”€β”€β”€β”€β”€β””β”€β”¬β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”˜β”€β”¬β”€β”΄β”€β”¬β”€β””β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”˜
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ + β”‚ - β”‚Endβ”‚PgDβ”‚ ↓ β”‚ β”‚ β”‚
+ * β”œβ”€β”€β”€β”€β”€β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”€β”€β”¬β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β””β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”˜β”¬β”€β”€β”€β”¬β”€β”΄β”€β”€β”€β”€
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
+ * β””β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”˜
+ */
+ [1] = LAYOUT_60_ansi_split_bs_rshift(
+ KC_PWR, 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_INS, KC_DEL,
+ KC_CAPS, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, _______, _______,
+ _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT,
+ _______, _______, _______, _______, _______, _______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/input_club/infinity60/keymaps/depariel/keymap.c b/keyboards/input_club/infinity60/keymaps/depariel/keymap.c
new file mode 100755
index 0000000000..22d74b866b
--- /dev/null
+++ b/keyboards/input_club/infinity60/keymaps/depariel/keymap.c
@@ -0,0 +1,87 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Layer 0: Default Layer
+ * ,-----------------------------------------------------------.
+ * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| `|
+ * |-----------------------------------------------------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| Bksp|
+ * |-----------------------------------------------------------|
+ * |Contro| A| S| D| F| G| H| J| K| L| ;| '|Enter |
+ * |-----------------------------------------------------------|
+ * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Fn2|
+ * |-----------------------------------------------------------'
+ * |Fn2 |Gui |Alt | Space |RAlt|Prv|PlPs|Next|
+ * `-----------------------------------------------------------'
+ */
+ [0] = LAYOUT_60_ansi_split_bs_rshift(
+ 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_BSLS, KC_GRV, \
+ 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_BSPC, \
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, LT(5, KC_ENT), \
+ KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, MO(4), \
+ MO(4), KC_LGUI, KC_LALT, LT(3, KC_SPC), KC_RALT, KC_MPRV, KC_MPLY, KC_MNXT),
+
+ /* Layer 1: "Toggle" off SpaceFn for League of Legends
+ */
+ [1] = LAYOUT_60_ansi_split_bs_rshift(
+ 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_BSLS, KC_GRV, \
+ 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_BSPC, \
+ KC_LCTL, 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, MO(4), \
+ MO(4), KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_MPRV, KC_MPLY, KC_MNXT),
+
+ /* Layer 2: "Toggle" off SpaceFn for MapleRoyals
+ */
+ [2] = LAYOUT_60_ansi_split_bs_rshift(
+ 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_BSLS, KC_GRV, \
+ 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_BSPC, \
+ KC_LCTL, 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_UP, KC_LSFT, \
+ MO(4), KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ /* Layer 3: FN layer 1
+ */
+ [3] = LAYOUT_60_ansi_split_bs_rshift(
+ KC_NO, 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_NO, KC_NO, \
+ KC_NO, KC_BTN1, KC_MS_U, KC_BTN2, LALT(KC_F4), KC_HOME, KC_PGUP, KC_PSCR, KC_SLCK, KC_UP, KC_NO, KC_LPRN, KC_RPRN, KC_DEL, \
+ MO(6), KC_MS_L, KC_MS_D, KC_MS_R, KC_NO, KC_END, KC_PGDN, KC_TILD, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, \
+ LGUI(KC_SPC), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_CALC, KC_MENU, KC_TRNS, TG(4), \
+ KC_TRNS, KC_TRNS, KC_TRNS, LT(3, KC_SPC), KC_TRNS, KC_VOLD, KC_MUTE, KC_VOLU),
+
+ /* Layer 4: FN layer 2
+ */
+ [4] = LAYOUT_60_ansi_split_bs_rshift(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PMNS, KC_PPLS, KC_PSLS, TG(2), \
+ KC_CAPS, KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, KC_NO, KC_PSCR, KC_NO, KC_P7, KC_P8, KC_P9, KC_PAST, KC_BSPC, \
+ KC_LCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_P4, KC_P5, KC_P6, KC_PENT, \
+ KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_P1, KC_P2, KC_P3, KC_RSFT, MO(4), \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_P0, KC_PDOT, KC_NO, TG(1)),
+
+ /* Layer 5: FN layer 3
+ */
+ [5] = LAYOUT_60_ansi_split_bs_rshift(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
+ KC_TAB , KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F13, KC_F14, KC_F15, KC_F16, KC_NO, KC_TRNS, \
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F17, KC_F18, KC_F19, KC_F20, LT(5, KC_ENT), \
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F21, KC_F22, KC_F23, KC_F24, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_RALT, KC_NO, KC_NO, KC_NO),
+
+ /* Layer 6: FN layer 4
+ */
+ [6] = LAYOUT_60_ansi_split_bs_rshift(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
+ LCTL(LSFT(KC_TAB)), KC_NO, LGUI(KC_UP), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
+ MO(6), LGUI(KC_LEFT), LGUI(KC_DOWN), LGUI(KC_RGHT), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO),
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+};
diff --git a/keyboards/input_club/infinity60/keymaps/hasu/keymap.c b/keyboards/input_club/infinity60/keymaps/hasu/keymap.c
new file mode 100644
index 0000000000..be14c1b977
--- /dev/null
+++ b/keyboards/input_club/infinity60/keymaps/hasu/keymap.c
@@ -0,0 +1,110 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Layer 0: Default Layer
+ * ,-----------------------------------------------------------.
+ * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| `|BSp|
+ * |-----------------------------------------------------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
+ * |-----------------------------------------------------------|
+ * |Contro| A| S| D| F| G| H| J| K| L| ;| '|Enter |
+ * |-----------------------------------------------------------|
+ * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Fn0|
+ * |-----------------------------------------------------------'
+ * | |Gui|Alt | Space |Alt |Gui| | |
+ * `-----------------------------------------------------------'
+ */
+ [0] = LAYOUT_60_ansi_split_bs_rshift(
+ 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_BSLS, KC_GRV,
+ 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_BSPC,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(3, KC_SCLN), KC_QUOT, MT(KC_RCTL, KC_ENT),
+ OSM(MOD_LSFT), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, LT(2, KC_SLSH), KC_RSFT, TG(1),
+ KC_NO, KC_LGUI, KC_LALT, LT(4, KC_SPC), MO(4), KC_RGUI, KC_NO, KC_NO
+ ),
+
+ /* Layer 1: HHKB mode (HHKB Fn)
+ * ,-----------------------------------------------------------.
+ * |Pwr| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
+ * |-----------------------------------------------------------|
+ * |Caps | | | | | | | |Psc|Slk|Pus|Up | |Backs|
+ * |-----------------------------------------------------------|
+ * | |VoD|VoU|Mut| | | *| /|Hom|PgU|Lef|Rig|Enter |
+ * |-----------------------------------------------------------|
+ * | | | | | | | +| -|End|PgD|Dow| | |
+ * `-----------------------------------------------------------'
+ * | |Gui|Alt | Space |Alt |Gui| | |
+ * `-----------------------------------------------------------'
+ */
+ [1] = LAYOUT_60_ansi_split_bs_rshift(
+ KC_PWR, 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_INS, KC_DEL,
+ KC_CAPS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PSCR,KC_SLCK,KC_PAUS, KC_UP, KC_TRNS,KC_BSPC,
+ KC_LCTL,KC_VOLD,KC_VOLU,KC_MUTE,KC_TRNS,KC_TRNS,KC_PAST,KC_PSLS,KC_HOME,KC_PGUP,KC_LEFT,KC_RGHT,KC_ENT,
+ KC_LSFT,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PPLS,KC_PMNS,KC_END, KC_PGDN,KC_DOWN,KC_RSFT,KC_TRNS,
+ KC_TRNS,KC_LGUI,KC_LALT, KC_TRNS, KC_RALT,KC_RGUI,KC_TRNS,KC_TRNS
+ ),
+
+ /* Layer 2: Vi mode[Slash]
+ * ,-----------------------------------------------------------.
+ * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
+ * |-----------------------------------------------------------|
+ * |Tab |Hom|PgD|Up |PgU|End|Hom|PgD|PgUlEnd| | | |Backs|
+ * |-----------------------------------------------------------|
+ * |Contro| |Lef|Dow|Rig| |Lef|Dow|Up |Rig| | |Return |
+ * |-----------------------------------------------------------|
+ * |Shift | | | | | |Hom|PgD|PgUlEnd|Fn0|Shift | |
+ * `-----------------------------------------------------------'
+ * |Gui|Alt | Space |Alt |Gui|
+ * `-------------------------------------------'
+ */
+ [2] = LAYOUT_60_ansi_split_bs_rshift(
+ 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_INS, KC_DEL,
+ KC_TAB, KC_HOME,KC_PGDN,KC_UP, KC_PGUP,KC_END, KC_HOME,KC_PGDN,KC_PGUP,KC_END, KC_NO, KC_NO, KC_NO, KC_BSPC,
+ KC_LCTL,KC_NO, KC_LEFT,KC_DOWN,KC_RGHT,KC_NO, KC_LEFT,KC_DOWN,KC_UP, KC_RGHT,KC_NO, KC_NO, KC_ENT,
+ KC_LSFT,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_HOME,KC_PGDN,KC_PGUP,KC_END, LT(2, KC_SLSH), KC_RSFT,KC_TRNS,
+ KC_TRNS,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,KC_TRNS, KC_TRNS
+ ),
+
+ /* Layer 3: Mouse mode(IJKL)[Semicolon]
+ * ,-----------------------------------------------------------.
+ * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
+ * |-----------------------------------------------------------|
+ * |Tab | | | | | |MwL|MwD|McU|MwU|MwR|Wbk|Wfr|Alt-T|
+ * |-----------------------------------------------------------|
+ * |Contro| | | | | |Mb2|McL|McD|McR|Fn | |Return |
+ * |-----------------------------------------------------------|
+ * |Shift | | | | |Mb3|Mb2|Mb1|Mb4|Mb5| |Shift | |
+ * `-----------------------------------------------------------'
+ * |Gui |Alt | Mb1 |Fn |Fn |
+ * `--------------------------------------------'
+ * Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel
+ */
+ [3] = LAYOUT_60_ansi_split_bs_rshift(
+ 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_INS, KC_DEL,
+ LALT(KC_TAB), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_WH_L,KC_WH_D,KC_MS_U, KC_WH_U, KC_WH_R, ALT_T(KC_LEFT), ALT_T(KC_RGHT),LALT(KC_TAB),
+ KC_LCTL, KC_ACL0,KC_ACL1,KC_ACL2,KC_ACL2,KC_NO, KC_NO, KC_MS_L,KC_MS_D, KC_MS_R, LT(3, KC_SCLN), KC_NO, KC_ENT,
+ KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_BTN3,KC_BTN2,KC_BTN1,ALT_T(KC_LEFT), ALT_T(KC_RGHT), KC_NO, KC_RSFT, KC_TRNS,
+ KC_TRNS, KC_LGUI,KC_LALT, KC_BTN1, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ /* Layer 4: Mouse mode(IJKL)[Space]
+ * ,-----------------------------------------------------------.
+ * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
+ * |-----------------------------------------------------------|
+ * |Tab | | | | | |MwL|MwD|McU|MwU|MwR|Wbk|Wfr|Alt-T|
+ * |-----------------------------------------------------------|
+ * |Contro|VlD|VlU|VlM| | | |McL|McD|McR|Mb1| |Return |
+ * |-----------------------------------------------------------|
+ * |Shift | | | | |Mb3|Mb2|Mb1|A/L|A/R| |Shift | |
+ * `-----------------------------------------------------------'
+ * |Gui |Alt | Mb1 |Fn |Fn |
+ * `--------------------------------------------'
+ * Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel
+ */
+ [4] = LAYOUT_60_ansi_split_bs_rshift(
+ 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_INS, KC_DEL,
+ LALT(KC_TAB), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_WH_L, KC_WH_D, KC_MS_U, KC_WH_U, KC_WH_R, KC_BTN4, KC_BTN5, LALT(KC_TAB),
+ KC_LCTL, KC_VOLD, KC_VOLU, KC_MUTE, KC_NO, KC_NO, KC_NO, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN1, KC_NO, KC_ENT,
+ KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_BTN3, KC_BTN2, KC_BTN1, ALT_T(KC_LEFT), ALT_T(KC_RGHT), KC_NO, KC_RSFT, KC_NO,
+ KC_NO, KC_LGUI, KC_LALT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
diff --git a/keyboards/input_club/infinity60/keymaps/jpetermans/config.h b/keyboards/input_club/infinity60/keymaps/jpetermans/config.h
new file mode 100644
index 0000000000..1949a9ad9d
--- /dev/null
+++ b/keyboards/input_club/infinity60/keymaps/jpetermans/config.h
@@ -0,0 +1,6 @@
+#pragma once
+
+//overrides
+#undef TAPPING_TOGGLE
+#define TAPPING_TOGGLE 2
+
diff --git a/keyboards/input_club/infinity60/keymaps/jpetermans/keymap.c b/keyboards/input_club/infinity60/keymaps/jpetermans/keymap.c
new file mode 100644
index 0000000000..3c2e0d4da8
--- /dev/null
+++ b/keyboards/input_club/infinity60/keymaps/jpetermans/keymap.c
@@ -0,0 +1,264 @@
+#include QMK_KEYBOARD_H
+#include "led_controller.h"
+
+//Define Layer Names
+#define _BASE 0
+#define _NUMPAD 1
+#define _FNAV 2
+#define _MEDIA 3
+#define _TILDE 4
+
+//IS31 chip has 8 available led pages, using 0 for all leds and 7 for single toggles
+#define max_pages 6
+
+enum led_modes {
+ MODE_ALL,
+ MODE_GAME,
+ MODE_SINGLE,
+ MODE_PAGE,
+ MODE_FLASH
+};
+
+enum macro_id {
+ LED_ALL = SAFE_RANGE,
+ LED_GAME,
+ LED_BACKLIGHT,
+ LED_BRIGHT,
+ LED_DIM,
+ LED_SINGLE,
+ LED_PAGE,
+ LED_FLASH
+};
+
+uint8_t current_layer_global = 0;
+uint8_t led_mode_global = MODE_SINGLE;
+uint8_t backlight_status_global = 1; //init on/off state of backlight
+uint32_t led_layer_state = 0;
+
+/* ==================================
+ * KEYMAPS
+ * ==================================*/
+
+const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Layer 0: Default Layer
+ * ,-----------------------------------------------------------.
+ * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| Backs|
+ * |-----------------------------------------------------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
+ * |-----------------------------------------------------------|
+ * |CapsLo| A| S| D| F| G| H| J| K| L| ;| '|Enter |
+ * |-----------------------------------------------------------|
+ * |Shif| | Z| X| C| V| B| N| M| ,| .| /|Shift |
+ * |-----------------------------------------------------------|
+ * |Ctrl|Gui |Alt | Space |Alt |Gui | FN | Ctrl |
+ * `-----------------------------------------------------------'
+ */
+ /* default */
+ [_BASE] = LAYOUT_60_ansi_split_bs_rshift( \
+ 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_BSLS,KC_NO,\
+ 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_BSPC, \
+ TT(_FNAV), 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,LM(_TILDE, MOD_LSFT),KC_NO, \
+ KC_LCTL, KC_LGUI,KC_LALT, LT(_FNAV, KC_SPC), KC_RALT,TG(_NUMPAD),MO(_MEDIA), KC_RCTL \
+ ),
+
+ /* numpad */
+ [_NUMPAD] = LAYOUT_60_ansi_split_bs_rshift( \
+ _______,_______,_______,_______,_______,_______,_______, KC_P7, KC_P8, KC_P9, KC_PSLS, _______,_______,_______,KC_NO,\
+ _______,_______,_______,_______,_______,_______,_______, KC_P4, KC_P5, KC_P6, KC_PAST, _______,_______,_______, \
+ MO(_FNAV),_______,_______,_______,_______,_______,_______, KC_P1, KC_P2, KC_P3, KC_PMNS, _______,_______, \
+ _______,_______,_______,_______,_______,_______,_______, KC_P0,KC_COMM,KC_PDOT,KC_PPLS, _______,KC_NO, \
+ _______,_______,_______, TO(_BASE), _______,_______,_______,_______ \
+ ),
+
+ /* F-, arrow, and media keys */
+ [_FNAV] = LAYOUT_60_ansi_split_bs_rshift( \
+ 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_NO,\
+ KC_CAPS,_______,_______,_______,_______,_______,_______,KC_PGUP,KC_UP,KC_PGDN,KC_PSCR,_______,_______,KC_DEL, \
+ _______,_______,KC_BTN2,_______,_______,_______,KC_HOME,KC_LEFT,KC_DOWN,KC_RGHT,KC_INS,_______,_______, \
+ _______,KC_APP,KC_BTN1,KC_CALC,_______,_______,KC_END,_______,_______,_______,_______,_______,KC_NO, \
+ _______,_______,_______, _______, C(A(KC_DEL)),KC_NLCK,_______,_______ \
+ ),
+
+ /* media */
+ [_MEDIA] = LAYOUT_60_ansi_split_bs_rshift( \
+ _______,LED_SINGLE,LED_PAGE,LED_FLASH,_______,_______,_______, _______, _______, _______,KC_MUTE, KC_VOLD, KC_VOLU,_______,KC_NO,\
+ _______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,_______,_______,\
+ _______,_______,_______,_______,_______,LED_GAME,_______, _______, _______, _______,_______, _______,_______, \
+ _______,_______,LED_ALL ,LED_BRIGHT,LED_DIM,LED_BACKLIGHT,_______, _______, KC_MPRV, KC_MNXT,KC_MSTP, _______,KC_NO, \
+ _______,_______,_______, KC_MPLY, _______,_______, _______,_______ \
+ ),
+ /* ~ */
+ [_TILDE] = LAYOUT_60_ansi_split_bs_rshift( \
+ KC_GRV,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,_______,_______,KC_NO,\
+ _______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,_______,_______,\
+ _______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,_______, \
+ _______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,KC_NO, \
+ _______,_______,_______, _______, _______,_______, _______,_______ \
+ ),
+ /* template */
+ [5] = LAYOUT_60_ansi_split_bs_rshift( \
+ _______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,_______,_______,KC_NO,\
+ _______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,_______,_______,\
+ _______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,_______, \
+ _______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,KC_NO, \
+ _______,_______,_______, _______, _______,_______, _______,_______ \
+ ),
+};
+
+/* ==================================
+ * LED MAPPING
+ * ==================================*/
+
+/*
+ Infinity60 LED MAP
+ 11 12 13 14 15 16 17 18 21 22 23 24 25 26 27*
+ 28 31 32 33 34 35 36 37 38 41 42 43 44 45
+ 46 47 48 51 52 53 54 55 56 57 58 61 62
+ 63 64 65 66 67 68 71 72 73 74 75 76 77*
+ 78 81 82 83 84 85 86 87
+ *Unused in Alphabet Layout
+*/
+
+//======== full page arrays =========
+//any change in array size needs to be mirrored in matrix_init_user
+uint8_t led_numpad[16] = {
+ 18,21,22,23,
+ 37,38,41,42,
+ 55,56,57,58,
+ 72,73,74,75
+};
+//LED Page 2 - _Nav
+uint8_t led_nav[12] = {
+ 38,
+ 47,48, 55,56,57,
+ 64,65,66
+};
+//LED Page 3 - _Media
+uint8_t led_media[15] = {
+ 12,13,14, 23,24,25,
+ 65,66,67,68, 73,74,75,
+ 83, 86
+};
+//LED Page 4 - _Game "WASD"
+uint8_t led_game[5] = {
+ 11,
+ 32,
+ 47,48,51
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ msg_t msg;
+
+ switch(keycode) {
+ case LED_ALL:
+ if(record->event.pressed) {
+ led_mode_global = led_mode_global == MODE_ALL ? MODE_SINGLE : MODE_ALL;
+ msg=TOGGLE_ALL;
+ chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
+ }
+ return false;
+
+ case LED_BACKLIGHT:
+ if(record->event.pressed) {
+ backlight_status_global ^= 1;
+ msg=(backlight_status_global << 8) | TOGGLE_BACKLIGHT;
+ chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
+ }
+ return false;
+
+ case LED_GAME:
+ if(record->event.pressed) {
+ led_mode_global = led_mode_global == MODE_GAME ? MODE_SINGLE : MODE_GAME;
+
+ msg=(4 << 8) | DISPLAY_PAGE;
+ chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
+ }
+ return false;
+
+ case LED_BRIGHT:
+ if(record->event.pressed) {
+ msg=(1 << 8) | STEP_BRIGHTNESS;
+ chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
+ }
+ return false;
+
+ case LED_DIM:
+ if(record->event.pressed) {
+ msg=(0 << 8) | STEP_BRIGHTNESS;
+ chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
+ }
+ return false;
+
+ //set led_mode for matrix_scan to toggle leds
+ case LED_SINGLE:
+ led_mode_global = MODE_SINGLE;
+ return false;
+ case LED_PAGE:
+ led_mode_global = MODE_PAGE;
+ return false;
+ case LED_FLASH:
+ led_mode_global = MODE_FLASH;
+ return false;
+
+ }
+ return true;
+}
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+ led_controller_init();
+
+ // Write predefined led pages.
+ write_led_page(_NUMPAD, led_numpad, 16);
+ chThdSleepMilliseconds(10);
+
+ write_led_page(_FNAV, led_nav, 12);
+ chThdSleepMilliseconds(10);
+
+ write_led_page(_MEDIA, led_media, 15);
+ chThdSleepMilliseconds(10);
+
+ write_led_page(4, led_game, 5);
+ chThdSleepMilliseconds(1000);
+};
+
+// Loops constantly in the background.
+void matrix_scan_user(void) {
+ uint8_t page;
+ uint8_t led_pin_byte;
+ msg_t msg;
+
+ if (backlight_status_global == 0) {//backlight is off, skip the rest
+ return;
+ }
+
+ if (led_layer_state != layer_state && led_mode_global != MODE_GAME && led_mode_global != MODE_ALL) {
+ //check mode
+ //Turn on layer indicator or page depending on mode
+ switch(led_mode_global) {
+ case MODE_FLASH: //flash preset page leds then single indicator
+ page = biton32(layer_state) > max_pages ? 7 : biton32(layer_state);
+ msg=(page << 8) | DISPLAY_PAGE;
+ chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
+ chThdSleepMilliseconds(500);
+ //flow to display single layer leds
+
+ case MODE_SINGLE: //light layer indicators for all active layers
+ led_pin_byte = layer_state & 0xFF;
+ msg=(7 << 8) | DISPLAY_PAGE;
+ chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
+ msg=(1 << 16) | (led_pin_byte << 8) | SET_FULL_ROW;
+ chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
+ break;
+
+ case MODE_PAGE: //display pre-defined led page
+ page = biton32(layer_state) > max_pages ? 7 : biton32(layer_state);
+ msg=(page << 8) | DISPLAY_PAGE;
+ chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
+ break;
+ }
+ led_layer_state = layer_state;
+ }
+}
diff --git a/keyboards/input_club/infinity60/keymaps/jpetermans/readme.md b/keyboards/input_club/infinity60/keymaps/jpetermans/readme.md
new file mode 100644
index 0000000000..00421015bd
--- /dev/null
+++ b/keyboards/input_club/infinity60/keymaps/jpetermans/readme.md
@@ -0,0 +1,87 @@
+Backlight for Infinity60
+========================
+
+## Led Controller Specs
+
+The Infinity60 (revision 1.1a) pcb uses the IS31FL3731C matrix LED driver from ISSI [(datasheet)](http://www.issi.com/WW/pdf/31FL3731C.pdf). The IS31 has the ability to control two led matrices (A & B), each matrix controlling 9 pins, each pin controlling 8 leds. The Infinity only utilizes matrix A.
+
+Infinity60 LED Map:
+digits mean "row" and "col", i.e. 45 means pin 4, column 5 in the IS31 datasheet
+```c
+ 11 12 13 14 15 16 17 18 21 22 23 24 25 26 27*
+ 28 31 32 33 34 35 36 37 38 41 42 43 44 45
+ 46 47 48 51 52 53 54 55 56 57 58 61 62
+ 63 64 65 66 67 68 71 72 73 74 75 76 77*
+ 78 81 82 83 84 85 86 87
+```
+*Unused in Alphabet Layout
+
+The IS31 includes 8 led pages (or frames) 0-7 than can be displayed, and each page consists of 144 bytes.
+- **bytes 0 - 17** - LED control (on/off).
+ * 18 bytes which alternate between A and B matrices (A1, B1, A2, B2, ..).
+ * Each byte controls the 8 leds on that pin with bits (8 to 1).
+- **bytes 8 - 35** - Blink control.
+ * Same as LED control above, but sets blink on/off.
+- **bytes 36 - 143** - PWM control.
+ * One byte per LED, sets PWM from 0 to 255.
+ * Same as above, the register alternates, every 8 *bytes* (not bits) between the A & B matrices.
+
+## Led Controller Code
+In the Infinity60 project folder, led_controller.c sets up ability to write led layers at startup or control leds on demand as part of fn_actions. By default led_controller.c assumes page 0 will be used for full on/off. The remaining 7 pages (1-7) are free for preset led maps or single led actions at init or on demand. Communication with the IS31 is primarily done through the led_mailbox using chMBPost described further below under "Sending messages in Keymap.c". This code is based on work matt3o and flabbergast did for tmk firmware on the [whitefox](https://github.com/tmk/whitefox).
+
+One function is available to directly set leds without the mailbox:
+```
+write_led_page(page#, array of leds by address, # of addresses in array)
+```
+This function saves a full page to the controller using a supplied array of led locations such as:
+```c
+uint8_t led_numpad[16] = {
+ 18,21,22,23,
+ 37,38,41,42,
+ 55,56,57,58,
+ 72,73,74,75
+}
+write_led_page(5, led_numpad, 16);
+```
+
+Remaining led control is done through the led mailbox using these message types:
+- **SET_FULL_ROW** (3 bytes) - message type, 8-bit mask, and row#. Sets all leds on one pin per the bit mask.
+- **OFF_LED, ON_LED, TOGGLE_LED** (3 bytes) - message type, led address, and page#. Off/on/toggle specific led.
+- **BLINK_OFF_LED, BLINK_ON_LED, BLINK_TOGGLE_LED** (3 bytes) - message type, led address, and page#. Set blink Off/on/toggle for specific led.
+- **TOGGLE_ALL** (1 byte) - Turn on/off full backlight.
+- **TOGGLE_BACKLIGHT** (2 bytes) - message type, on/off. Sets backlight completely off, no leds will display.
+- **DISPLAY_PAGE** (2 bytes) - message type, page to display. Switch to specific pre-set page.
+- **RESET_PAGE** (2 bytes) - message type, page to reset. Reset/erase specific page.
+- **TOGGLE_NUM_LOCK** (2 bytes) - message type, on/off (NUM_LOCK_LED_ADDRESS). Toggle numlock on/off. Usually run with the `set_leds` function to check state of numlock or capslock. If all leds are on (e.i. TOGGLE_ALL) then this sets numlock to blink instead (this is still a little buggy if toggling on/off quickly).
+- **TOGGLE_CAPS_LOCK** (2 bytes) - message type, on/off (CAPS_LOCK_LED_ADDRESS). Same as numlock.
+- **STEP_BRIGHTNESS** (2 bytes) - message type, and step up (1) or step down (0). Increase or decrease led brightness.
+
+## Sending messages in Keymap.c
+Sending an action to the led mailbox is done using chMBPost:
+```
+chMBPost(&led_mailbox, message, timeout);
+```
+- &led_mailbox - pointer to led mailbox
+- message - up to 4 bytes but most messages use only 2. First byte (LSB) is the message type, the remaining three bytes are the message to process.
+- timeout is TIME_IMMEDIATE
+
+An example:
+```c
+//set the message to be sent. First byte (LSB) is the message type, and second is the led address
+msg=(42 << 8) | ON_LED;
+
+//send msg to the led mailbox
+chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
+```
+
+Another:
+```c
+msg=(46 << 8) | BLINK_TOGGLE_LED;
+chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
+```
+
+Finally, SET_FULL_ROW requires an extra byte with row information in the message so sending this message looks like:
+```c
+msg=(row<<16) | (led_pin_byte << 8) | SET_FULL_ROW;
+chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
+```
diff --git a/keyboards/input_club/infinity60/led.c b/keyboards/input_club/infinity60/led.c
new file mode 100644
index 0000000000..8effcea81a
--- /dev/null
+++ b/keyboards/input_club/infinity60/led.c
@@ -0,0 +1,54 @@
+/*
+Copyright 2015 Jun Wako <wakojun@gmail.com>
+Copyright 2017 jpetermans <tibcmhhm@gmail.com>
+
+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 <hal.h>
+
+#include "led.h"
+
+#include "led_controller.h"
+
+/* WARNING! This function needs to be callable from
+ * both regular threads and ISRs, unlocked (during resume-from-sleep).
+ * In particular, I2C functions (interrupt-driven) should NOT be called from here.
+ */
+void led_set(uint8_t usb_led) {
+ msg_t msg;
+
+ if (usb_led & (1<<USB_LED_NUM_LOCK)) {
+ chSysUnconditionalLock();
+ msg=(1 << 8) | TOGGLE_NUM_LOCK;
+ chMBPostI(&led_mailbox, msg);
+ chSysUnconditionalUnlock();
+ } else {
+ chSysUnconditionalLock();
+ msg=(0 << 8) | TOGGLE_NUM_LOCK;
+ chMBPostI(&led_mailbox, msg);
+ chSysUnconditionalUnlock();
+ }
+ if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
+ chSysUnconditionalLock();
+ msg=(1 << 8) | TOGGLE_CAPS_LOCK;
+ chMBPostI(&led_mailbox, msg);
+ chSysUnconditionalUnlock();
+ } else {
+ chSysUnconditionalLock();
+ msg=(0 << 8) | TOGGLE_CAPS_LOCK;
+ chMBPostI(&led_mailbox, msg);
+ chSysUnconditionalUnlock();
+ }
+}
diff --git a/keyboards/input_club/infinity60/led/config.h b/keyboards/input_club/infinity60/led/config.h
new file mode 100644
index 0000000000..5bd3b590b9
--- /dev/null
+++ b/keyboards/input_club/infinity60/led/config.h
@@ -0,0 +1,23 @@
+/*
+Copyright 2015 Jun Wako <wakojun@gmail.com>
+
+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
+
+// Keyboard Matrix Assignments
+#define MATRIX_ROW_PINS { D1, D2, D3, D4, D5, D6, D7 }
+#define MATRIX_COL_PINS { C0, C1, C2, C3, C4, C5, C6, C7, D0 }
+#define UNUSED_PINS
diff --git a/keyboards/input_club/infinity60/led/readme.md b/keyboards/input_club/infinity60/led/readme.md
new file mode 100644
index 0000000000..d31335031f
--- /dev/null
+++ b/keyboards/input_club/infinity60/led/readme.md
@@ -0,0 +1,3 @@
+## Infinity 60% LED
+
+This revision is for the version of the infinity 60 with LEDs (rev 1.1a)
diff --git a/keyboards/input_club/infinity60/led/rules.mk b/keyboards/input_club/infinity60/led/rules.mk
new file mode 100644
index 0000000000..d48f3b73a5
--- /dev/null
+++ b/keyboards/input_club/infinity60/led/rules.mk
@@ -0,0 +1,3 @@
+# project specific files
+SRC += led.c \
+ led_controller.c \ No newline at end of file
diff --git a/keyboards/input_club/infinity60/led_controller.c b/keyboards/input_club/infinity60/led_controller.c
new file mode 100644
index 0000000000..cf3edf20dd
--- /dev/null
+++ b/keyboards/input_club/infinity60/led_controller.c
@@ -0,0 +1,487 @@
+/*
+Copyright 2016 flabbergast <s3+flabbergast@sdfeu.org>
+Copyright 2017 jpetermans <tibcmhhm@gmail.com>
+
+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/>.
+*/
+
+/*
+ * LED controller code
+ * IS31FL3731C matrix LED driver from ISSI
+ * datasheet: http://www.issi.com/WW/pdf/31FL3731C.pdf
+ */
+
+#include <ch.h>
+#include <hal.h>
+#include "print.h"
+#include "led.h"
+#include "host.h"
+
+#include "led_controller.h"
+
+#include "suspend.h"
+
+#include "usb_main.h"
+
+/* Infinity60 LED MAP
+ - digits mean "row" and "col", i.e. 45 means C4-5 in the IS31 datasheet, matrix A
+
+ 11 12 13 14 15 16 17 18 21 22 23 24 25 26 27*
+ 28 31 32 33 34 35 36 37 38 41 42 43 44 45
+ 46 47 48 51 52 53 54 55 56 57 58 61 62
+ 63 64 65 66 67 68 71 72 73 74 75 76 77*
+ 78 81 82 83 84 85 86 87
+
+*Unused in Alphabet Layout
+*/
+
+/*
+ each page has 0xB4 bytes
+ 0 - 0x11: LED control (on/off):
+ order: CA1, CB1, CA2, CB2, .... (CA - matrix A, CB - matrix B)
+ CAn controls Cn-8 .. Cn-1 (LSbit)
+ 0x12 - 0x23: blink control (like "LED control")
+ 0x24 - 0xB3: PWM control: byte per LED, 0xFF max on
+ order same as above (CA 1st row (8bytes), CB 1st row (8bytes), ...)
+*/
+
+// Which LED should be used for CAPS LOCK indicator
+#if !defined(CAPS_LOCK_LED_ADDRESS)
+#define CAPS_LOCK_LED_ADDRESS 46
+#endif
+
+#if !defined(NUM_LOCK_LED_ADDRESS)
+#define NUM_LOCK_LED_ADDRESS 85
+#endif
+
+/* Which LED should breathe during sleep */
+#if !defined(BREATHE_LED_ADDRESS)
+#define BREATHE_LED_ADDRESS CAPS_LOCK_LED_ADDRESS
+#endif
+
+/* =================
+ * ChibiOS I2C setup
+ * ================= */
+static const I2CConfig i2ccfg = {
+ 400000 // clock speed (Hz); 400kHz max for IS31
+};
+
+/* ==============
+ * variables
+ * ============== */
+// internal communication buffers
+uint8_t tx[2] __attribute__((aligned(2)));
+uint8_t rx[1] __attribute__((aligned(2)));
+
+// buffer for sending the whole page at once (used also as a temp buffer)
+uint8_t full_page[0xB4+1] = {0};
+
+// LED mask (which LEDs are present, selected by bits)
+// IC60 pcb uses only CA matrix.
+// Each byte is a control pin for 8 leds ordered 8-1
+const uint8_t all_on_leds_mask[0x12] = {
+ 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF,
+ 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x7F, 0x00, 0x00, 0x00
+};
+
+// array to hold brightness pwm steps
+const uint8_t pwm_levels[5] = {
+ 0x00, 0x16, 0x4E, 0xA1, 0xFF
+};
+
+// array to write to pwm register
+uint8_t pwm_register_array[9] = {0};
+
+
+/* ============================
+ * communication functions
+ * ============================ */
+msg_t is31_select_page(uint8_t page) {
+ tx[0] = IS31_COMMANDREGISTER;
+ tx[1] = page;
+ return i2cMasterTransmitTimeout(&I2CD1, IS31_ADDR_DEFAULT, tx, 2, NULL, 0, TIME_US2I(IS31_TIMEOUT));
+}
+
+msg_t is31_write_data(uint8_t page, uint8_t *buffer, uint8_t size) {
+ is31_select_page(page);
+ return i2cMasterTransmitTimeout(&I2CD1, IS31_ADDR_DEFAULT, buffer, size, NULL, 0, TIME_US2I(IS31_TIMEOUT));
+}
+
+msg_t is31_write_register(uint8_t page, uint8_t reg, uint8_t data) {
+ is31_select_page(page);
+ tx[0] = reg;
+ tx[1] = data;
+ return i2cMasterTransmitTimeout(&I2CD1, IS31_ADDR_DEFAULT, tx, 2, NULL, 0, TIME_US2I(IS31_TIMEOUT));
+}
+
+msg_t is31_read_register(uint8_t page, uint8_t reg, uint8_t *result) {
+ is31_select_page(page);
+
+ tx[0] = reg;
+ return i2cMasterTransmitTimeout(&I2CD1, IS31_ADDR_DEFAULT, tx, 1, result, 1, TIME_US2I(IS31_TIMEOUT));
+}
+
+/* ========================
+ * initialise the IS31 chip
+ * ======================== */
+void is31_init(void) {
+ // just to be sure that it's all zeroes
+ __builtin_memset(full_page,0,0xB4+1);
+ // zero function page, all registers (assuming full_page is all zeroes)
+ is31_write_data(IS31_FUNCTIONREG, full_page, 0xD + 1);
+ // disable hardware shutdown
+ palSetPadMode(GPIOB, 16, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetPad(GPIOB, 16);
+ chThdSleepMilliseconds(10);
+ // software shutdown
+ is31_write_register(IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_ON);
+ chThdSleepMilliseconds(10);
+ // zero function page, all registers
+ is31_write_data(IS31_FUNCTIONREG, full_page, 0xD + 1);
+ chThdSleepMilliseconds(10);
+ // software shutdown disable (i.e. turn stuff on)
+ is31_write_register(IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_OFF);
+ chThdSleepMilliseconds(10);
+ // zero all LED registers on all 8 pages
+ uint8_t i;
+ for(i=0; i<8; i++) {
+ is31_write_data(i, full_page, 0xB4 + 1);
+ chThdSleepMilliseconds(5);
+ }
+}
+
+/* ==================
+ * LED control thread
+ * ================== */
+#define LED_MAILBOX_NUM_MSGS 5
+static msg_t led_mailbox_queue[LED_MAILBOX_NUM_MSGS];
+mailbox_t led_mailbox;
+static THD_WORKING_AREA(waLEDthread, 256);
+static THD_FUNCTION(LEDthread, arg) {
+ (void)arg;
+ chRegSetThreadName("LEDthread");
+
+ uint8_t i;
+ uint8_t control_register_word[2] = {0};//2 bytes: register address, byte to write
+ uint8_t led_control_reg[0x13] = {0};//led control register start address + 0x12 bytes
+
+ //persistent status variables
+ uint8_t pwm_step_status, page_status, capslock_status, numlock_status;
+
+ //mailbox variables
+ uint8_t temp, msg_type;
+ uint8_t msg_args[3];
+ msg_t msg;
+
+ // initialize persistent variables
+ pwm_step_status = 4; //full brightness
+ page_status = 0; //start frame 0 (all off/on)
+ numlock_status = (host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) ? 1 : 0;
+ capslock_status = (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) ? 1 : 0;
+
+ while(true) {
+ // wait for a message (asynchronous)
+ // (messages are queued (up to LED_MAILBOX_NUM_MSGS) if they can't
+ // be processed right away
+ chMBFetchTimeout(&led_mailbox, &msg, TIME_INFINITE);
+ msg_type = msg & 0xFF; //first byte is action information
+ msg_args[0] = (msg >> 8) & 0xFF;
+ msg_args[1] = (msg >> 16) & 0XFF;
+ msg_args[2] = (msg >> 24) & 0xFF;
+
+
+ switch (msg_type){
+ case SET_FULL_ROW:
+ //write full byte to pin address, msg_args[1] = pin #, msg_args[0] = 8 bits to write
+ //writes only to currently displayed page
+ write_led_byte(page_status, msg_args[1], msg_args[0]);
+ break;
+
+ case OFF_LED:
+ //on/off/toggle single led, msg_args[0] = row/col of led, msg_args[1] = page
+ set_led_bit(msg_args[1], control_register_word, msg_args[0], 0);
+ break;
+ case ON_LED:
+ set_led_bit(msg_args[1], control_register_word, msg_args[0], 1);
+ break;
+ case TOGGLE_LED:
+ set_led_bit(msg_args[1], control_register_word, msg_args[0], 2);
+ break;
+
+ case BLINK_OFF_LED:
+ //on/off/toggle single led, msg_args[0] = row/col of led
+ set_led_bit(msg_args[1], control_register_word, msg_args[0], 4);
+ break;
+ case BLINK_ON_LED:
+ set_led_bit(msg_args[1], control_register_word, msg_args[0], 5);
+ break;
+ case BLINK_TOGGLE_LED:
+ set_led_bit(msg_args[1], control_register_word, msg_args[0], 6);
+ break;
+
+ case TOGGLE_ALL:
+ //turn on/off all leds, msg_args = unused
+ is31_write_register(IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_ON);
+ chThdSleepMilliseconds(5);
+ is31_read_register(0, 0x00, &temp);
+ is31_write_register(IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_OFF);
+
+ led_control_reg[0] = 0;
+
+ //toggle led mask based on current state (temp)
+ if (temp==0 || page_status > 0) {
+ __builtin_memcpy(led_control_reg+1, all_on_leds_mask, 0x12);
+ } else {
+ __builtin_memset(led_control_reg+1, 0, 0x12);
+ }
+ is31_write_data(0, led_control_reg, 0x13);
+
+ if (page_status > 0) {
+ is31_write_register(IS31_FUNCTIONREG, IS31_REG_PICTDISP, 0);
+
+ page_status=0;
+
+ //maintain lock leds, reset to off and force recheck to blink of all leds toggled on
+ numlock_status = 0;
+ capslock_status = 0;
+ led_set(host_keyboard_leds());
+ }
+ break;
+
+ case TOGGLE_BACKLIGHT:
+ //msg_args[0] = on/off
+
+ //populate 9 byte rows to be written to each pin, first byte is register (pin) address
+ if (msg_args[0] == 1) {
+ __builtin_memset(pwm_register_array+1, pwm_levels[pwm_step_status], 8);
+ } else {
+ __builtin_memset(pwm_register_array+1, 0, 8);
+ }
+
+ for(i=0; i<8; i++) {
+ //first byte is register address, every 0x10 9 bytes is A-matrix pwm pins
+ pwm_register_array[0] = 0x24 + (i * 0x10);
+ is31_write_data(0,pwm_register_array,9);
+ }
+ break;
+
+ case DISPLAY_PAGE:
+ //msg_args[0] = page to toggle on
+ if (page_status != msg_args[0]) {
+ is31_write_register(IS31_FUNCTIONREG, IS31_REG_PICTDISP, msg_args[0]);
+ page_status = msg_args[0];
+
+ //maintain lock leds, reset to off and force recheck for new page
+ numlock_status = 0;
+ capslock_status = 0;
+ led_set(host_keyboard_leds());
+ }
+ break;
+
+ case RESET_PAGE:
+ //led_args[0] = page to reset
+ led_control_reg[0] = 0;
+ __builtin_memset(led_control_reg+1, 0, 0x12);
+ is31_write_data(msg_args[0], led_control_reg, 0x13);
+
+ //repeat for blink register
+ led_control_reg[0] = 0x12;
+ is31_write_data(msg_args[0], led_control_reg, 0x13);
+ break;
+
+ case TOGGLE_NUM_LOCK:
+ //msg_args[0] = 0 or 1, off/on
+ if (numlock_status != msg_args[0]) {
+ set_lock_leds(NUM_LOCK_LED_ADDRESS, msg_args[0], page_status);
+ numlock_status = msg_args[0];
+ }
+ break;
+ case TOGGLE_CAPS_LOCK:
+ //msg_args[0] = 0 or 1, off/on
+ if (capslock_status != msg_args[0]) {
+ set_lock_leds(CAPS_LOCK_LED_ADDRESS, msg_args[0], page_status);
+ capslock_status = msg_args[0];
+ }
+ break;
+
+ case STEP_BRIGHTNESS:
+ //led_args[0] = step up (1) or down (0)
+ switch (msg_args[0]) {
+ case 0:
+ if (pwm_step_status == 0) {
+ pwm_step_status = 4;
+ } else {
+ pwm_step_status--;
+ }
+ break;
+
+ case 1:
+ if (pwm_step_status == 4) {
+ pwm_step_status = 0;
+ } else {
+ pwm_step_status++;
+ }
+ break;
+ }
+
+ //populate 8 byte arrays to write on each pin
+ //first byte is register address, every 0x10 9 bytes are A-matrix pwm pins
+ __builtin_memset(pwm_register_array+1, pwm_levels[pwm_step_status], 8);
+
+ for(i=0; i<8; i++) {
+ pwm_register_array[0] = 0x24 + (i * 0x10);
+ is31_write_data(0,pwm_register_array,9);
+ }
+ break;
+ }
+ }
+}
+
+/* ==============================
+ * led processing functions
+ * ============================== */
+
+void set_led_bit (uint8_t page, uint8_t *led_control_word, uint8_t led_addr, uint8_t action) {
+ //returns 2 bytes: led control register address and byte to write
+ //action: 0 - off, 1 - on, 2 - toggle, 4 - blink on, 5 - blink off, 6 - toggle blink
+
+ uint8_t control_reg_addr, column_bit, column_byte, temp, blink_bit;
+
+ //check for valid led address
+ if (led_addr < 0 || led_addr > 87 || led_addr % 10 > 8) {
+ return;
+ }
+
+ blink_bit = action>>2;//check for blink bit
+ action &= ~(1<<2); //strip blink bit
+
+ //led_addr tens column is pin#, ones column is bit position in 8-bit mask
+ control_reg_addr = ((led_addr / 10) % 10 - 1 ) * 0x02;// A-matrix is every other byte
+ control_reg_addr += blink_bit == 1 ? 0x12 : 0x00;//if blink_bit, shift 12 bytes to blink register
+
+ is31_write_register(IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_ON);
+ chThdSleepMilliseconds(5);
+ is31_read_register(page, control_reg_addr, &temp);//maintain status of leds on this byte
+ is31_write_register(IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_OFF);
+
+ column_bit = 1<<(led_addr % 10 - 1);
+ column_byte = temp;
+
+ switch(action) {
+ case 0:
+ column_byte &= ~column_bit;
+ break;
+ case 1:
+ column_byte |= column_bit;
+ break;
+ case 2:
+ column_byte ^= column_bit;
+ break;
+ }
+
+ //return word to be written in register
+ led_control_word[0] = control_reg_addr;
+ led_control_word[1] = column_byte;
+ is31_write_data (page, led_control_word, 0x02);
+}
+
+void write_led_byte (uint8_t page, uint8_t row, uint8_t led_byte) {
+ uint8_t led_control_word[2] = {0};//register address and on/off byte
+
+ led_control_word[0] = (row - 1 ) * 0x02;// A-matrix is every other byte
+ led_control_word[1] = led_byte;
+ is31_write_data(page, led_control_word, 0x02);
+}
+
+void write_led_page (uint8_t page, uint8_t *user_led_array, uint8_t led_count) {
+ uint8_t i;
+ uint8_t pin, col;
+ uint8_t led_control_register[0x13] = {0};
+
+ __builtin_memset(led_control_register,0,13);
+
+ for(i=0;i<led_count;i++){
+ //shift pin by 1 for led register 0x00 address
+ pin = ((user_led_array[i] / 10) % 10 - 1 ) * 2 + 1;
+ col = user_led_array[i] % 10 - 1;
+ led_control_register[pin] |= 1<<(col);
+ }
+
+ is31_write_data(page, led_control_register, 0x13);
+}
+
+void set_lock_leds(uint8_t led_addr, uint8_t led_action, uint8_t page) {
+ uint8_t temp;
+ uint8_t led_control_word[2] = {0};
+
+ //blink if all leds are on
+ if (page == 0) {
+ is31_write_register(IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_ON);
+ chThdSleepMilliseconds(5);
+ is31_read_register(0, 0x00, &temp);
+ is31_write_register(IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_OFF);
+
+ if (temp == 0xFF) {
+ led_action |= (1<<2); //set blink bit
+ }
+ }
+
+ set_led_bit(page,led_control_word,led_addr,led_action);
+}
+
+/* =====================
+ * hook into user keymap
+ * ===================== */
+void led_controller_init(void) {
+ uint8_t i;
+
+ /* initialise I2C */
+ /* I2C pins */
+ palSetPadMode(GPIOB, 0, PAL_MODE_ALTERNATIVE_2); // PTB0/I2C0/SCL
+ palSetPadMode(GPIOB, 1, PAL_MODE_ALTERNATIVE_2); // PTB1/I2C0/SDA
+ /* start I2C */
+ i2cStart(&I2CD1, &i2ccfg);
+ // try high drive (from kiibohd)
+ I2CD1.i2c->C2 |= I2Cx_C2_HDRS;
+ // try glitch fixing (from kiibohd)
+ I2CD1.i2c->FLT = 4;
+
+ chThdSleepMilliseconds(10);
+
+ /* initialise IS31 chip */
+ is31_init();
+
+ //set Display Option Register so all pwm intensity is controlled from page 0
+ //enable blink and set blink period to 0.27s x rate
+ is31_write_register(IS31_FUNCTIONREG, IS31_REG_DISPLAYOPT, IS31_REG_DISPLAYOPT_INTENSITY_SAME + IS31_REG_DISPLAYOPT_BLINK_ENABLE + 4);
+
+ /* set full pwm on page 1 */
+ pwm_register_array[0] = 0;
+ __builtin_memset(pwm_register_array+1, 0xFF, 8);
+ for(i=0; i<8; i++) {
+ pwm_register_array[0] = 0x24 + (i * 0x10);//first byte of 9 bytes must be register address
+ is31_write_data(0, pwm_register_array, 9);
+ chThdSleepMilliseconds(5);
+ }
+
+ /* enable breathing when the displayed page changes */
+ // Fade-in Fade-out, time = 26ms * 2^N, N=3
+ is31_write_register(IS31_FUNCTIONREG, IS31_REG_BREATHCTRL1, (3<<4)|3);
+ is31_write_register(IS31_FUNCTIONREG, IS31_REG_BREATHCTRL2, IS31_REG_BREATHCTRL2_ENABLE|3);
+
+ /* more time consuming LED processing should be offloaded into
+ * a thread, with asynchronous messaging. */
+ chMBObjectInit(&led_mailbox, led_mailbox_queue, LED_MAILBOX_NUM_MSGS);
+ chThdCreateStatic(waLEDthread, sizeof(waLEDthread), LOWPRIO, LEDthread, NULL);
+}
diff --git a/keyboards/input_club/infinity60/led_controller.h b/keyboards/input_club/infinity60/led_controller.h
new file mode 100644
index 0000000000..e4b4717646
--- /dev/null
+++ b/keyboards/input_club/infinity60/led_controller.h
@@ -0,0 +1,121 @@
+/*
+Copyright 2016 flabbergast <s3+flabbergast@sdfeu.org>
+Copyright 2017 jpetermans <tibcmhhm@gmail.com>
+
+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/>.
+*/
+
+#ifndef _LED_CONTROLLER_H_
+#define _LED_CONTROLLER_H_
+
+/* =========================
+ * communication functions
+ * ========================= */
+
+msg_t is31_write_data(uint8_t page, uint8_t *buffer, uint8_t size);
+msg_t is31_write_register(uint8_t page, uint8_t reg, uint8_t data);
+msg_t is31_read_register(uint8_t page, uint8_t reg, uint8_t *result);
+
+/* ============================
+ * init functions/definitions
+ * ============================*/
+
+void led_controller_init(void);
+
+#define CAPS_LOCK_LED_ADDRESS 46 //pin matrix location
+#define NUM_LOCK_LED_ADDRESS 85
+
+/* =============================
+ * IS31 chip related definitions
+ * ============================= */
+
+#define IS31_ADDR_DEFAULT 0x74
+
+#define IS31_REG_CONFIG 0x00
+// bits in reg
+#define IS31_REG_CONFIG_PICTUREMODE 0x00
+#define IS31_REG_CONFIG_AUTOPLAYMODE 0x08
+#define IS31_REG_CONFIG_AUDIOPLAYMODE 0x18
+// D2:D0 bits are starting frame for autoplay mode
+
+#define IS31_REG_PICTDISP 0x01 // D2:D0 frame select for picture mode
+
+#define IS31_REG_AUTOPLAYCTRL1 0x02
+// D6:D4 number of loops (000=infty)
+// D2:D0 number of frames to be used
+
+#define IS31_REG_AUTOPLAYCTRL2 0x03 // D5:D0 delay time (*11ms)
+
+#define IS31_REG_DISPLAYOPT 0x05
+#define IS31_REG_DISPLAYOPT_INTENSITY_SAME 0x20 // same intensity for all frames
+#define IS31_REG_DISPLAYOPT_BLINK_ENABLE 0x08
+// D2:D0 bits blink period time (*0.27s)
+
+#define IS31_REG_AUDIOSYNC 0x06
+#define IS31_REG_AUDIOSYNC_ENABLE 0x1
+
+#define IS31_REG_FRAMESTATE 0x07
+
+#define IS31_REG_BREATHCTRL1 0x08
+// D6:D4 fade out time (26ms*2^i)
+// D2:D0 fade in time (26ms*2^i)
+
+#define IS31_REG_BREATHCTRL2 0x09
+#define IS31_REG_BREATHCTRL2_ENABLE 0x10
+// D2:D0 extinguish time (3.5ms*2^i)
+
+#define IS31_REG_SHUTDOWN 0x0A
+#define IS31_REG_SHUTDOWN_OFF 0x1
+#define IS31_REG_SHUTDOWN_ON 0x0
+
+#define IS31_REG_AGCCTRL 0x0B
+#define IS31_REG_ADCRATE 0x0C
+
+#define IS31_COMMANDREGISTER 0xFD
+#define IS31_FUNCTIONREG 0x0B // helpfully called 'page nine'
+
+#define IS31_TIMEOUT 10000 // needs to be long enough to write a whole page
+
+/* ========================================
+ * LED Thread related items
+ * ========================================*/
+
+extern mailbox_t led_mailbox;
+
+void set_led_bit (uint8_t page, uint8_t *led_control_reg, uint8_t led_addr, uint8_t action);
+void set_lock_leds (uint8_t led_addr, uint8_t led_action, uint8_t page);
+void write_led_byte (uint8_t page, uint8_t row, uint8_t led_byte);
+void write_led_page (uint8_t page, uint8_t *led_array, uint8_t led_count);
+
+// constants for signaling the LED controller thread
+enum led_msg_t {
+ KEY_LIGHT,
+ SET_FULL_ROW,
+ OFF_LED,
+ ON_LED,
+ TOGGLE_LED,
+ BLINK_OFF_LED,
+ BLINK_ON_LED,
+ BLINK_TOGGLE_LED,
+ TOGGLE_ALL,
+ TOGGLE_BACKLIGHT,
+ DISPLAY_PAGE,
+ RESET_PAGE,
+ TOGGLE_NUM_LOCK,
+ TOGGLE_CAPS_LOCK,
+ TOGGLE_BREATH,
+ STEP_BRIGHTNESS
+};
+
+#endif /* _LED_CONTROLLER_H_ */
diff --git a/keyboards/input_club/infinity60/mcuconf.h b/keyboards/input_club/infinity60/mcuconf.h
new file mode 100644
index 0000000000..6af85d0796
--- /dev/null
+++ b/keyboards/input_club/infinity60/mcuconf.h
@@ -0,0 +1,58 @@
+/*
+ ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+#ifndef _MCUCONF_H_
+#define _MCUCONF_H_
+
+#define K20x_MCUCONF
+
+/*
+ * HAL driver system settings.
+ */
+
+/* Select the MCU clocking mode below by enabling the appropriate block. */
+
+#define KINETIS_NO_INIT FALSE
+
+/* FEI mode - 48 MHz with internal 32.768 kHz crystal */
+#define KINETIS_MCG_MODE KINETIS_MCG_MODE_FEI
+#define KINETIS_MCG_FLL_DMX32 1 /* Fine-tune for 32.768 kHz */
+#define KINETIS_MCG_FLL_DRS 1 /* 1464x FLL factor */
+#define KINETIS_SYSCLK_FREQUENCY 47972352UL /* 32.768 kHz * 1464 (~48 MHz) */
+#define KINETIS_CLKDIV1_OUTDIV1 1
+#define KINETIS_CLKDIV1_OUTDIV2 1
+#define KINETIS_CLKDIV1_OUTDIV4 2
+#define KINETIS_BUSCLK_FREQUENCY KINETIS_SYSCLK_FREQUENCY
+#define KINETIS_FLASHCLK_FREQUENCY KINETIS_SYSCLK_FREQUENCY/2
+
+/*
+ * SERIAL driver system settings.
+ */
+#define KINETIS_SERIAL_USE_UART0 TRUE
+
+/*
+ * USB driver settings
+ */
+#define KINETIS_USB_USE_USB0 TRUE
+#define KINETIS_USB_USB0_IRQ_PRIORITY 5
+
+/*
+ * I2C driver settings
+ */
+#define KINETIS_I2C_USE_I2C0 TRUE
+#define KINETIS_I2C_I2C0_PRIORITY 4
+
+#endif /* _MCUCONF_H_ */
diff --git a/keyboards/input_club/infinity60/readme.md b/keyboards/input_club/infinity60/readme.md
new file mode 100644
index 0000000000..e8ee6a9dad
--- /dev/null
+++ b/keyboards/input_club/infinity60/readme.md
@@ -0,0 +1,17 @@
+# Infinity 60%
+
+A compact community driven keyboard.
+
+* Keyboard Maintainer: QMK Community
+* Hardware Supported: Infinity 60% PCB
+* Hardware Availability: https://input.club/devices/infinity-keyboard/
+
+Make example for this keyboard (after setting up your build environment):
+
+ make input_club/infinity60/rev1:default
+
+Flashing example for this keyboard:
+
+ make input_club/infinity60/rev1:default:flash
+
+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).
diff --git a/keyboards/input_club/infinity60/rev1/config.h b/keyboards/input_club/infinity60/rev1/config.h
new file mode 100644
index 0000000000..d4ab34bccc
--- /dev/null
+++ b/keyboards/input_club/infinity60/rev1/config.h
@@ -0,0 +1,25 @@
+/*
+Copyright 2015 Jun Wako <wakojun@gmail.com>
+
+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
+
+// Keyboard Matrix Assignments
+#define MATRIX_ROW_PINS { D1, D2, D3, D4, D5, D6, D7 }
+#define MATRIX_COL_PINS { B0, B1, B2, B3, B16, B17, C4, C5, D0 }
+#define UNUSED_PINS
+
+
diff --git a/keyboards/input_club/infinity60/rev1/readme.md b/keyboards/input_club/infinity60/rev1/readme.md
new file mode 100644
index 0000000000..5df5cf5336
--- /dev/null
+++ b/keyboards/input_club/infinity60/rev1/readme.md
@@ -0,0 +1,2 @@
+## Infinity 60, initial massdrop release
+This is for the initial massdrop PCBs that don't support LEDs (rev 1.03a)
diff --git a/keyboards/input_club/infinity60/rev1/rules.mk b/keyboards/input_club/infinity60/rev1/rules.mk
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/keyboards/input_club/infinity60/rev1/rules.mk
diff --git a/keyboards/input_club/infinity60/rules.mk b/keyboards/input_club/infinity60/rules.mk
new file mode 100644
index 0000000000..7e21a06a9b
--- /dev/null
+++ b/keyboards/input_club/infinity60/rules.mk
@@ -0,0 +1,34 @@
+# MCU name
+MCU = MK20DX128
+
+# Bootloader selection
+BOOTLOADER = kiibohd
+
+# Board: it should exist either in <chibios>/os/hal/boards/
+# or <this_dir>/boards
+# - BOARD =
+# - PJRC_TEENSY_LC for Teensy LC
+# - PJRC_TEENSY_3 for Teensy 3.0
+# - PJRC_TEENSY_3_1 for Teensy 3.1 or 3.2
+# - MCHCK_K20 for Infinity KB
+BOARD = MCHCK_K20
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes # 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 # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
+
+DEFAULT_FOLDER = input_club/infinity60/led
+
+LAYOUTS = 60_ansi_split_bs_rshift
+
+# Enter lower-power sleep mode when on the ChibiOS idle thread
+OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE
diff --git a/keyboards/input_club/k_type/chconf.h b/keyboards/input_club/k_type/chconf.h
new file mode 100644
index 0000000000..ae0cce51ed
--- /dev/null
+++ b/keyboards/input_club/k_type/chconf.h
@@ -0,0 +1,29 @@
+/* Copyright 2020 QMK
+ *
+ * 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/>.
+ */
+
+/*
+ * This file was auto-generated by:
+ * `qmk chibios-confmigrate -i keyboards/k_type/chconf.h -r platforms/chibios/common/configs/chconf.h`
+ */
+
+#pragma once
+
+#define CH_CFG_ST_TIMEDELTA 0
+
+#define CH_CFG_TIME_QUANTUM 20
+
+#include_next <chconf.h>
+
diff --git a/keyboards/input_club/k_type/config.h b/keyboards/input_club/k_type/config.h
new file mode 100644
index 0000000000..de73e06a98
--- /dev/null
+++ b/keyboards/input_club/k_type/config.h
@@ -0,0 +1,186 @@
+/*
+Copyright 2015 Jun Wako <wakojun@gmail.com>
+
+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
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x1C11
+#define PRODUCT_ID 0xB04D
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Input:Club
+#define PRODUCT K-Type (QMK)
+
+/* key matrix size */
+#define MATRIX_ROWS 10
+#define MATRIX_COLS 10
+
+/*
+ * 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 { D5, D6, D7, C1, C2, C3, C4, C5, C6, C7 }
+#define MATRIX_COL_PINS { B2, B3, B18, B19, C0, C8, C9, D0, D1, D4 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* 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 useful 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
+
+/* Bootmagic Lite key configuration */
+//#define BOOTMAGIC_LITE_ROW 0
+//#define BOOTMAGIC_LITE_COLUMN 0
+
+
+#ifdef RGB_MATRIX_ENABLE
+//#include "gpio.h"
+// RGB Matrix Animation modes. Explicitly enabled
+// For full list of effects, see:
+// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects
+# define ENABLE_RGB_MATRIX_ALPHAS_MODS
+# define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+# define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
+# define ENABLE_RGB_MATRIX_BREATHING
+# define ENABLE_RGB_MATRIX_BAND_SAT
+# define ENABLE_RGB_MATRIX_BAND_VAL
+# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
+# define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+# define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
+# define ENABLE_RGB_MATRIX_CYCLE_ALL
+# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+# define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
+# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
+# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
+# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
+# define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
+# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
+# define ENABLE_RGB_MATRIX_DUAL_BEACON
+# define ENABLE_RGB_MATRIX_RAINBOW_BEACON
+# define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
+# define ENABLE_RGB_MATRIX_RAINDROPS
+# define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
+# define ENABLE_RGB_MATRIX_HUE_BREATHING
+# define ENABLE_RGB_MATRIX_HUE_PENDULUM
+# define ENABLE_RGB_MATRIX_HUE_WAVE
+# define ENABLE_RGB_MATRIX_PIXEL_RAIN
+# define ENABLE_RGB_MATRIX_PIXEL_FLOW
+# define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
+// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined
+# define ENABLE_RGB_MATRIX_TYPING_HEATMAP
+# define ENABLE_RGB_MATRIX_DIGITAL_RAIN
+// enabled only if RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+# define ENABLE_RGB_MATRIX_SPLASH
+# define ENABLE_RGB_MATRIX_MULTISPLASH
+# define ENABLE_RGB_MATRIX_SOLID_SPLASH
+# define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
+
+# define RGB_MATRIX_KEYPRESSES
+# define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+
+
+// i2c_master defines
+# define I2C_COUNT 2
+# define I2C1_CLOCK_SPEED 400000
+
+# define I2C1_SCL_PIN B0 // A2 on pinout = B0
+# define I2C1_SDA_PIN B1 // A2 on pinout = B1
+# define I2C1_SCL_PAL_MODE PAL_MODE_ALTERNATIVE_2
+# define I2C1_SDA_PAL_MODE PAL_MODE_ALTERNATIVE_2
+
+# define USE_I2C2
+# define I2C2_SCL_PIN C10 // A2 on pinout = C10
+# define I2C2_SDA_PIN C11 // A2 on pinout = C11
+# define I2C2_SCL_PAL_MODE PAL_MODE_ALTERNATIVE_2
+# define I2C2_SDA_PAL_MODE PAL_MODE_ALTERNATIVE_2
+
+# define DRIVER_ADDR_1 0b1010000
+# define DRIVER_ADDR_2 0b1010000
+# define DRIVER_COUNT 2
+# define DRIVER_1_LED_TOTAL 64
+# define DRIVER_2_LED_TOTAL 55
+# define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
+#endif
diff --git a/keyboards/input_club/k_type/halconf.h b/keyboards/input_club/k_type/halconf.h
new file mode 100644
index 0000000000..c615d9656f
--- /dev/null
+++ b/keyboards/input_club/k_type/halconf.h
@@ -0,0 +1,27 @@
+/* Copyright 2020 QMK
+ *
+ * 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/>.
+ */
+
+/*
+ * This file was auto-generated by:
+ * `qmk chibios-confmigrate -i keyboards/k_type/halconf.h -r platforms/chibios/common/configs/halconf.h`
+ */
+
+#pragma once
+
+#define HAL_USE_I2C TRUE
+
+#include_next <halconf.h>
+
diff --git a/keyboards/input_club/k_type/i2c_master.c b/keyboards/input_club/k_type/i2c_master.c
new file mode 100644
index 0000000000..af34d55ef6
--- /dev/null
+++ b/keyboards/input_club/k_type/i2c_master.c
@@ -0,0 +1,150 @@
+/* Copyright 2018 Jack Humbert
+ * Copyright 2018 Yiancar
+ *
+ * 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/>.
+ */
+
+/* This library is only valid for STM32 processors.
+ * This library follows the convention of the AVR i2c_master library.
+ * As a result addresses are expected to be already shifted (addr << 1).
+ * I2CD1 is the default driver which corresponds to pins B6 and B7. This
+ * can be changed.
+ * Please ensure that HAL_USE_I2C is TRUE in the halconf.h file and that
+ * STM32_I2C_USE_I2C1 is TRUE in the mcuconf.h file. Pins B6 and B7 are used
+ * but using any other I2C pins should be trivial.
+ */
+
+#ifdef RGB_MATRIX_ENABLE
+
+
+#include "quantum.h"
+#include "i2c_master.h"
+#include <string.h>
+#include <hal.h>
+
+static uint8_t i2c_address;
+
+I2CDriver *drivers[I2C_COUNT];
+
+static const I2CConfig i2cconfig = {
+#if defined(USE_I2CV1_CONTRIB)
+ I2C1_CLOCK_SPEED,
+#elif defined(USE_I2CV1)
+ I2C1_OPMODE,
+ I2C1_CLOCK_SPEED,
+ I2C1_DUTY_CYCLE,
+#else
+ // This configures the I2C clock to 400khz assuming a 72Mhz clock
+ // For more info : https://www.st.com/en/embedded-software/stsw-stm32126.html
+ STM32_TIMINGR_PRESC(I2C1_TIMINGR_PRESC) | STM32_TIMINGR_SCLDEL(I2C1_TIMINGR_SCLDEL) | STM32_TIMINGR_SDADEL(I2C1_TIMINGR_SDADEL) | STM32_TIMINGR_SCLH(I2C1_TIMINGR_SCLH) | STM32_TIMINGR_SCLL(I2C1_TIMINGR_SCLL), 0, 0
+#endif
+};
+
+static i2c_status_t chibios_to_qmk(const msg_t* status) {
+ switch (*status) {
+ case I2C_NO_ERROR:
+ return I2C_STATUS_SUCCESS;
+ case I2C_TIMEOUT:
+ return I2C_STATUS_TIMEOUT;
+ // I2C_BUS_ERROR, I2C_ARBITRATION_LOST, I2C_ACK_FAILURE, I2C_OVERRUN, I2C_PEC_ERROR, I2C_SMB_ALERT
+ default:
+ return I2C_STATUS_ERROR;
+ }
+}
+
+__attribute__((weak)) void i2c_init(I2CDriver *driver, ioline_t scl_pin, ioline_t sda_pin) {
+ static uint8_t index = 0;
+ if (index < I2C_COUNT) {
+
+ // Try releasing special pins for a short time
+ palSetLineMode(scl_pin, PAL_MODE_INPUT);
+ palSetLineMode(sda_pin, PAL_MODE_INPUT);
+
+ chThdSleepMilliseconds(10);
+
+#if defined(USE_GPIOV1)
+ palSetLineMode(scl_pin, I2C1_SCL_PAL_MODE);
+ palSetLineMode(sda_pin, I2C1_SDA_PAL_MODE);
+#else
+ palSetLineMode(scl_pin, PAL_MODE_ALTERNATE(I2C1_SCL_PAL_MODE) | PAL_OUTPUT_TYPE_OPENDRAIN);
+ palSetLineMode(sda_pin, PAL_MODE_ALTERNATE(I2C1_SDA_PAL_MODE) | PAL_OUTPUT_TYPE_OPENDRAIN);
+#endif
+
+ drivers[index++] = driver;
+ }
+}
+
+i2c_status_t i2c_start(uint8_t index, uint8_t address) {
+ if(index >= I2C_COUNT) {
+ return I2C_STATUS_ERROR;
+ }
+ i2c_address = address;
+ i2cStart(drivers[index], &i2cconfig);
+ return I2C_STATUS_SUCCESS;
+}
+
+i2c_status_t i2c_transmit(uint8_t index, uint8_t address, const uint8_t* data, uint16_t length, uint16_t timeout) {
+ if(index >= I2C_COUNT) {
+ return I2C_STATUS_ERROR;
+ }
+ i2c_address = address;
+ i2cStart(drivers[index], &i2cconfig);
+ msg_t status = i2cMasterTransmitTimeout(drivers[index], (i2c_address >> 1), data, length, 0, 0, TIME_MS2I(timeout));
+ return chibios_to_qmk(&status);
+}
+
+i2c_status_t i2c_receive(uint8_t index, uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout) {
+ if(index >= I2C_COUNT) {
+ return I2C_STATUS_ERROR;
+ }
+ i2c_address = address;
+ i2cStart(drivers[index], &i2cconfig);
+ msg_t status = i2cMasterReceiveTimeout(drivers[index], (i2c_address >> 1), data, length, TIME_MS2I(timeout));
+ return chibios_to_qmk(&status);
+}
+
+i2c_status_t i2c_writeReg(uint8_t index, uint8_t devaddr, uint8_t regaddr, const uint8_t* data, uint16_t length, uint16_t timeout) {
+ if(index >= I2C_COUNT) {
+ return I2C_STATUS_ERROR;
+ }
+ i2c_address = devaddr;
+ i2cStart(drivers[index], &i2cconfig);
+
+ uint8_t complete_packet[length + 1];
+ for (uint8_t i = 0; i < length; i++) {
+ complete_packet[i + 1] = data[i];
+ }
+ complete_packet[0] = regaddr;
+
+ msg_t status = i2cMasterTransmitTimeout(drivers[index], (i2c_address >> 1), complete_packet, length + 1, 0, 0, TIME_MS2I(timeout));
+ return chibios_to_qmk(&status);
+}
+
+i2c_status_t i2c_readReg(uint8_t index, uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout) {
+ if(index >= I2C_COUNT) {
+ return I2C_STATUS_ERROR;
+ }
+ i2c_address = devaddr;
+ i2cStart(drivers[index], &i2cconfig);
+ msg_t status = i2cMasterTransmitTimeout(drivers[index], (i2c_address >> 1), &regaddr, 1, data, length, TIME_MS2I(timeout));
+ return chibios_to_qmk(&status);
+}
+
+void i2c_stop(uint8_t index) {
+ if(index < I2C_COUNT) {
+ i2cStop(drivers[index]);
+ }
+}
+
+#endif
diff --git a/keyboards/input_club/k_type/i2c_master.h b/keyboards/input_club/k_type/i2c_master.h
new file mode 100644
index 0000000000..d4e9d6878f
--- /dev/null
+++ b/keyboards/input_club/k_type/i2c_master.h
@@ -0,0 +1,127 @@
+/* Copyright 2018 Jack Humbert
+ * Copyright 2018 Yiancar
+ *
+ * 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/>.
+ */
+
+/* This library follows the convention of the AVR i2c_master library.
+ * As a result addresses are expected to be already shifted (addr << 1).
+ * I2CD1 is the default driver which corresponds to pins B6 and B7. This
+ * can be changed.
+ * Please ensure that HAL_USE_I2C is TRUE in the halconf.h file and that
+ * STM32_I2C_USE_I2C1 is TRUE in the mcuconf.h file.
+ */
+#pragma once
+
+#include <ch.h>
+#include <hal.h>
+
+#ifndef I2C_COUNT
+# define I2C_COUNT 1
+#endif
+
+#ifdef I2C1_BANK
+# define I2C1_SCL_BANK I2C1_BANK
+# define I2C1_SDA_BANK I2C1_BANK
+#endif
+
+#ifndef I2C1_SCL_BANK
+# define I2C1_SCL_BANK GPIOB
+#endif
+
+#ifndef I2C1_SDA_BANK
+# define I2C1_SDA_BANK GPIOB
+#endif
+
+
+#ifdef USE_I2C2
+# ifdef I2C2_BANK
+# define I2C2_SCL_BANK I2C2_BANK
+# define I2C2_SDA_BANK I2C2_BANK
+# endif
+# ifndef I2C2_SCL_BANK
+# define I2C2_SCL_BANK GPIOC
+# endif
+# ifndef I2C2_SDA_BANK
+# define I2C2_SDA_BANK GPIOC
+# endif
+#endif
+
+#ifndef I2C1_SCL_PIN
+# define I2C1_SCL_PIN 6
+#endif
+#ifndef I2C1_SDA_PIN
+# define I2C1_SDA_PIN 7
+#endif
+
+#ifdef USE_I2CV1
+# ifndef I2C1_OPMODE
+# define I2C1_OPMODE OPMODE_I2C
+# endif
+# ifndef I2C1_CLOCK_SPEED
+# define I2C1_CLOCK_SPEED 100000 /* 400000 */
+# endif
+# ifndef I2C1_DUTY_CYCLE
+# define I2C1_DUTY_CYCLE STD_DUTY_CYCLE /* FAST_DUTY_CYCLE_2 */
+# endif
+#else
+// The default timing values below configures the I2C clock to 400khz assuming a 72Mhz clock
+// For more info : https://www.st.com/en/embedded-software/stsw-stm32126.html
+# ifndef I2C1_TIMINGR_PRESC
+# define I2C1_TIMINGR_PRESC 0U
+# endif
+# ifndef I2C1_TIMINGR_SCLDEL
+# define I2C1_TIMINGR_SCLDEL 7U
+# endif
+# ifndef I2C1_TIMINGR_SDADEL
+# define I2C1_TIMINGR_SDADEL 0U
+# endif
+# ifndef I2C1_TIMINGR_SCLH
+# define I2C1_TIMINGR_SCLH 38U
+# endif
+# ifndef I2C1_TIMINGR_SCLL
+# define I2C1_TIMINGR_SCLL 129U
+# endif
+#endif
+
+#ifdef USE_GPIOV1
+# ifndef I2C1_SCL_PAL_MODE
+# define I2C1_SCL_PAL_MODE PAL_MODE_STM32_ALTERNATE_OPENDRAIN
+# endif
+# ifndef I2C1_SDA_PAL_MODE
+# define I2C1_SDA_PAL_MODE PAL_MODE_STM32_ALTERNATE_OPENDRAIN
+# endif
+#else
+// The default PAL alternate modes are used to signal that the pins are used for I2C
+# ifndef I2C1_SCL_PAL_MODE
+# define I2C1_SCL_PAL_MODE 4
+# endif
+# ifndef I2C1_SDA_PAL_MODE
+# define I2C1_SDA_PAL_MODE 4
+# endif
+#endif
+
+typedef int16_t i2c_status_t;
+
+#define I2C_STATUS_SUCCESS (0)
+#define I2C_STATUS_ERROR (-1)
+#define I2C_STATUS_TIMEOUT (-2)
+
+void i2c_init(I2CDriver *driver, ioline_t scl_pin, ioline_t sda_pin);
+i2c_status_t i2c_start(uint8_t index, uint8_t address);
+i2c_status_t i2c_transmit(uint8_t index, uint8_t address, const uint8_t* data, uint16_t length, uint16_t timeout);
+i2c_status_t i2c_receive(uint8_t index, uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout);
+i2c_status_t i2c_writeReg(uint8_t index, uint8_t devaddr, uint8_t regaddr, const uint8_t* data, uint16_t length, uint16_t timeout);
+i2c_status_t i2c_readReg(uint8_t index, uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout);
+void i2c_stop(uint8_t index);
diff --git a/keyboards/input_club/k_type/info.json b/keyboards/input_club/k_type/info.json
new file mode 100644
index 0000000000..cf0c9253bd
--- /dev/null
+++ b/keyboards/input_club/k_type/info.json
@@ -0,0 +1,108 @@
+{
+ "keyboard_name": "K-Type",
+ "url": "",
+ "maintainer": "qmk",
+ "layouts": {
+ "LAYOUT_tkl_ansi": {
+ "layout": [
+ {"x": 0, "y": 0},
+ {"x": 2, "y": 0},
+ {"x": 3, "y": 0},
+ {"x": 4, "y": 0},
+ {"x": 5, "y": 0},
+ {"x": 6.5, "y": 0},
+ {"x": 7.5, "y": 0},
+ {"x": 8.5, "y": 0},
+ {"x": 9.5, "y": 0},
+ {"x": 11, "y": 0},
+ {"x": 12, "y": 0},
+ {"x": 13, "y": 0},
+ {"x": 14, "y": 0},
+
+ {"x": 15.25, "y": 0},
+ {"x": 16.25, "y": 0},
+ {"x": 17.25, "y": 0},
+
+ {"x": 0, "y": 1.5},
+ {"x": 1, "y": 1.5},
+ {"x": 2, "y": 1.5},
+ {"x": 3, "y": 1.5},
+ {"x": 4, "y": 1.5},
+ {"x": 5, "y": 1.5},
+ {"x": 6, "y": 1.5},
+ {"x": 7, "y": 1.5},
+ {"x": 8, "y": 1.5},
+ {"x": 9, "y": 1.5},
+ {"x": 10, "y": 1.5},
+ {"x": 11, "y": 1.5},
+ {"x": 12, "y": 1.5},
+ {"x": 13, "y": 1.5, "w": 2},
+
+ {"x": 15.25, "y": 1.5},
+ {"x": 16.25, "y": 1.5},
+ {"x": 17.25, "y": 1.5},
+
+ {"x": 0, "y": 2.5, "w": 1.5},
+ {"x": 1.5, "y": 2.5},
+ {"x": 2.5, "y": 2.5},
+ {"x": 3.5, "y": 2.5},
+ {"x": 4.5, "y": 2.5},
+ {"x": 5.5, "y": 2.5},
+ {"x": 6.5, "y": 2.5},
+ {"x": 7.5, "y": 2.5},
+ {"x": 8.5, "y": 2.5},
+ {"x": 9.5, "y": 2.5},
+ {"x": 10.5, "y": 2.5},
+ {"x": 11.5, "y": 2.5},
+ {"x": 12.5, "y": 2.5},
+ {"x": 13.5, "y": 2.5, "w": 1.5},
+
+ {"x": 15.25, "y": 2.5},
+ {"x": 16.25, "y": 2.5},
+ {"x": 17.25, "y": 2.5},
+
+ {"x": 0, "y": 3.5, "w": 1.75},
+ {"x": 1.75, "y": 3.5},
+ {"x": 2.75, "y": 3.5},
+ {"x": 3.75, "y": 3.5},
+ {"x": 4.75, "y": 3.5},
+ {"x": 5.75, "y": 3.5},
+ {"x": 6.75, "y": 3.5},
+ {"x": 7.75, "y": 3.5},
+ {"x": 8.75, "y": 3.5},
+ {"x": 9.75, "y": 3.5},
+ {"x": 10.75, "y": 3.5},
+ {"x": 11.75, "y": 3.5},
+ {"x": 12.75, "y": 3.5, "w": 2.25},
+
+ {"x": 0, "y": 4.5, "w": 2.25},
+ {"x": 2.25, "y": 4.5},
+ {"x": 3.25, "y": 4.5},
+ {"x": 4.25, "y": 4.5},
+ {"x": 5.25, "y": 4.5},
+ {"x": 6.25, "y": 4.5},
+ {"x": 7.25, "y": 4.5},
+ {"x": 8.25, "y": 4.5},
+ {"x": 9.25, "y": 4.5},
+ {"x": 10.25, "y": 4.5},
+ {"x": 11.25, "y": 4.5},
+ {"x": 12.25, "y": 4.5, "w": 2.75},
+
+ {"x": 16.25, "y": 4.5},
+
+ {"x": 0, "y": 5.5, "w": 1.25},
+ {"x": 1.25, "y": 5.5, "w": 1.25},
+ {"x": 2.5, "y": 5.5, "w": 1.25},
+ {"x": 3.75, "y": 5.5, "w": 6.25},
+ {"x": 10, "y": 5.5, "w": 1.25},
+ {"x": 11.25, "y": 5.5, "w": 1.25},
+ {"x": 12.5, "y": 5.5, "w": 1.25},
+ {"x": 13.75, "y": 5.5, "w": 1.25},
+
+ {"x": 15.25, "y": 5.5},
+ {"x": 16.25, "y": 5.5},
+ {"x": 17.25, "y": 5.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/input_club/k_type/is31fl3733-dual.c b/keyboards/input_club/k_type/is31fl3733-dual.c
new file mode 100644
index 0000000000..e76479b01a
--- /dev/null
+++ b/keyboards/input_club/k_type/is31fl3733-dual.c
@@ -0,0 +1,236 @@
+/* Copyright 2017 Jason Williams
+ * Copyright 2018 Jack Humbert
+ * Copyright 2018 Yiancar
+ *
+ * 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/>.
+ */
+
+#ifdef RGB_MATRIX_ENABLE
+
+#include "is31fl3733-dual.h"
+#include "i2c_master.h"
+#include "wait.h"
+
+// This is a 7-bit address, that gets left-shifted and bit 0
+// set to 0 for write, 1 for read (as per I2C protocol)
+// The address will vary depending on your wiring:
+// 00 <-> GND
+// 01 <-> SCL
+// 10 <-> SDA
+// 11 <-> VCC
+// ADDR1 represents A1:A0 of the 7-bit address.
+// ADDR2 represents A3:A2 of the 7-bit address.
+// The result is: 0b101(ADDR2)(ADDR1)
+#define ISSI_ADDR_DEFAULT 0x50
+
+#define ISSI_COMMANDREGISTER 0xFD
+#define ISSI_COMMANDREGISTER_WRITELOCK 0xFE
+#define ISSI_INTERRUPTMASKREGISTER 0xF0
+#define ISSI_INTERRUPTSTATUSREGISTER 0xF1
+
+#define ISSI_PAGE_LEDCONTROL 0x00 // PG0
+#define ISSI_PAGE_PWM 0x01 // PG1
+#define ISSI_PAGE_AUTOBREATH 0x02 // PG2
+#define ISSI_PAGE_FUNCTION 0x03 // PG3
+
+#define ISSI_REG_CONFIGURATION 0x00 // PG3
+#define ISSI_REG_GLOBALCURRENT 0x01 // PG3
+#define ISSI_REG_RESET 0x11 // PG3
+#define ISSI_REG_SWPULLUP 0x0F // PG3
+#define ISSI_REG_CSPULLUP 0x10 // PG3
+
+#ifndef ISSI_TIMEOUT
+# define ISSI_TIMEOUT 5000
+#endif
+
+#ifndef ISSI_PERSISTENCE
+# define ISSI_PERSISTENCE 0
+#endif
+
+// Transfer buffer for TWITransmitData()
+uint8_t g_twi_transfer_buffer[20];
+
+// These buffers match the IS31FL3733 PWM registers.
+// The control buffers match the PG0 LED On/Off registers.
+// Storing them like this is optimal for I2C transfers to the registers.
+// We could optimize this and take out the unused registers from these
+// buffers and the transfers in IS31FL3733_write_pwm_buffer() but it's
+// probably not worth the extra complexity.
+uint8_t g_pwm_buffer[DRIVER_COUNT][192];
+bool g_pwm_buffer_update_required[DRIVER_COUNT] = {false};
+
+uint8_t g_led_control_registers[DRIVER_COUNT][24] = {{0}, {0}};
+bool g_led_control_registers_update_required[DRIVER_COUNT] = {false};
+
+bool IS31FL3733_write_register(uint8_t index, uint8_t addr, uint8_t reg, uint8_t data) {
+ // If the transaction fails function returns false.
+ g_twi_transfer_buffer[0] = reg;
+ g_twi_transfer_buffer[1] = data;
+
+#if ISSI_PERSISTENCE > 0
+ for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) {
+ if (i2c_transmit(index, addr << 1, g_twi_transfer_buffer, 2, TIME_US2I(ISSI_TIMEOUT)) != 0) {
+ return false;
+ }
+ }
+#else
+ if (i2c_transmit(index, addr << 1, g_twi_transfer_buffer, 2, TIME_US2I(ISSI_TIMEOUT)) != 0) {
+ return false;
+ }
+#endif
+ return true;
+}
+
+bool IS31FL3733_write_pwm_buffer(uint8_t index, uint8_t addr, uint8_t *pwm_buffer) {
+ // Assumes PG1 is already selected.
+ // If any of the transactions fails function returns false.
+ // Transmit PWM registers in 12 transfers of 16 bytes.
+ // g_twi_transfer_buffer[] is 20 bytes
+
+ // Iterate over the pwm_buffer contents at 16 byte intervals.
+ for (int i = 0; i < 192; i += 16) {
+ g_twi_transfer_buffer[0] = i;
+ // Copy the data from i to i+15.
+ // Device will auto-increment register for data after the first byte
+ // Thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer.
+ for (int j = 0; j < 16; j++) {
+ g_twi_transfer_buffer[1 + j] = pwm_buffer[i + j];
+ }
+
+#if ISSI_PERSISTENCE > 0
+ for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) {
+ if (i2c_transmit(index, addr << 1, g_twi_transfer_buffer, 17, TIME_US2I(ISSI_TIMEOUT)) != 0) {
+ return false;
+ }
+ }
+#else
+ if (i2c_transmit(index, addr << 1, g_twi_transfer_buffer, 17, TIME_US2I(ISSI_TIMEOUT)) != 0) {
+ return false;
+ }
+#endif
+ }
+ return true;
+}
+
+void IS31FL3733_init(uint8_t bus, uint8_t addr, uint8_t sync) {
+ // In order to avoid the LEDs being driven with garbage data
+ // in the LED driver's PWM registers, shutdown is enabled last.
+ // Set up the mode and other settings, clear the PWM registers,
+ // then disable software shutdown.
+ // Sync is passed so set it according to the datasheet.
+
+ // Unlock the command register.
+ IS31FL3733_write_register(bus, addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
+ // Select PG0
+ IS31FL3733_write_register(bus, addr, ISSI_COMMANDREGISTER, ISSI_PAGE_LEDCONTROL);
+ // Turn off all LEDs.
+ for (int i = 0x00; i <= 0x17; i++) {
+ IS31FL3733_write_register(bus, addr, i, 0x00);
+ }
+ // Unlock the command register.
+ IS31FL3733_write_register(bus, addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
+ // Select PG1
+ IS31FL3733_write_register(bus, addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM);
+ // Set PWM on all LEDs to 0
+ // No need to setup Breath registers to PWM as that is the default.
+ for (int i = 0x00; i <= 0xBF; i++) {
+ IS31FL3733_write_register(bus, addr, i, 0x00);
+ }
+ // Unlock the command register.
+ IS31FL3733_write_register(bus, addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
+ // Select PG3
+ IS31FL3733_write_register(bus, addr, ISSI_COMMANDREGISTER, ISSI_PAGE_FUNCTION);
+ // Set global current to maximum.
+ IS31FL3733_write_register(bus, addr, ISSI_REG_GLOBALCURRENT, 0xFF);
+ // Disable software shutdown.
+ IS31FL3733_write_register(bus, addr, ISSI_REG_CONFIGURATION, (sync << 6) | 0x01);
+ // Wait 10ms to ensure the device has woken up.
+ wait_ms(10);
+}
+
+void IS31FL3733_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
+ if (index >= 0 && index < DRIVER_LED_TOTAL) {
+ is31_led led = g_is31_leds[index];
+
+ g_pwm_buffer[led.driver][led.r] = red;
+ g_pwm_buffer[led.driver][led.g] = green;
+ g_pwm_buffer[led.driver][led.b] = blue;
+ g_pwm_buffer_update_required[led.driver] = true;
+ }
+}
+
+void IS31FL3733_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
+ for (int i = 0; i < DRIVER_LED_TOTAL; i++) {
+ IS31FL3733_set_color(i, red, green, blue);
+ }
+}
+
+void IS31FL3733_set_led_control_register(uint8_t index, bool red, bool green, bool blue) {
+ is31_led led = g_is31_leds[index];
+
+ uint8_t control_register_r = led.r / 8;
+ uint8_t control_register_g = led.g / 8;
+ uint8_t control_register_b = led.b / 8;
+ uint8_t bit_r = led.r % 8;
+ uint8_t bit_g = led.g % 8;
+ uint8_t bit_b = led.b % 8;
+
+ if (red) {
+ g_led_control_registers[led.driver][control_register_r] |= (1 << bit_r);
+ } else {
+ g_led_control_registers[led.driver][control_register_r] &= ~(1 << bit_r);
+ }
+ if (green) {
+ g_led_control_registers[led.driver][control_register_g] |= (1 << bit_g);
+ } else {
+ g_led_control_registers[led.driver][control_register_g] &= ~(1 << bit_g);
+ }
+ if (blue) {
+ g_led_control_registers[led.driver][control_register_b] |= (1 << bit_b);
+ } else {
+ g_led_control_registers[led.driver][control_register_b] &= ~(1 << bit_b);
+ }
+
+ g_led_control_registers_update_required[led.driver] = true;
+}
+
+void IS31FL3733_update_pwm_buffers(uint8_t addr, uint8_t index) {
+ if (g_pwm_buffer_update_required[index]) {
+ // Firstly we need to unlock the command register and select PG1.
+ IS31FL3733_write_register(index, addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
+ IS31FL3733_write_register(index, addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM);
+
+ // If any of the transactions fail we risk writing dirty PG0,
+ // refresh page 0 just in case.
+ if (!IS31FL3733_write_pwm_buffer(index, addr, g_pwm_buffer[index])) {
+ g_led_control_registers_update_required[index] = true;
+ }
+ }
+ g_pwm_buffer_update_required[index] = false;
+}
+
+void IS31FL3733_update_led_control_registers(uint8_t addr, uint8_t index) {
+ if (g_led_control_registers_update_required[index]) {
+ // Firstly we need to unlock the command register and select PG0
+ IS31FL3733_write_register(index, addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
+ IS31FL3733_write_register(index, addr, ISSI_COMMANDREGISTER, ISSI_PAGE_LEDCONTROL);
+ for (int i = 0; i < 24; i++) {
+ IS31FL3733_write_register(index, addr, i, g_led_control_registers[index][i]);
+ }
+ }
+ g_led_control_registers_update_required[index] = false;
+}
+
+
+#endif
diff --git a/keyboards/input_club/k_type/is31fl3733-dual.h b/keyboards/input_club/k_type/is31fl3733-dual.h
new file mode 100644
index 0000000000..d4af1848fb
--- /dev/null
+++ b/keyboards/input_club/k_type/is31fl3733-dual.h
@@ -0,0 +1,252 @@
+/* Copyright 2017 Jason Williams
+ * Copyright 2018 Jack Humbert
+ * Copyright 2018 Yiancar
+ *
+ * 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 <stdint.h>
+#include <stdbool.h>
+#include "progmem.h"
+
+typedef struct is31_led {
+ uint8_t driver : 2;
+ uint8_t r;
+ uint8_t g;
+ uint8_t b;
+} __attribute__((packed)) is31_led;
+
+extern const is31_led PROGMEM g_is31_leds[DRIVER_LED_TOTAL];
+
+void IS31FL3733_init(uint8_t bus, uint8_t addr, uint8_t sync);
+bool IS31FL3733_write_register(uint8_t index, uint8_t addr, uint8_t reg, uint8_t data);
+bool IS31FL3733_write_pwm_buffer(uint8_t index, uint8_t addr, uint8_t *pwm_buffer);
+
+void IS31FL3733_set_color(int index, uint8_t red, uint8_t green, uint8_t blue);
+void IS31FL3733_set_color_all(uint8_t red, uint8_t green, uint8_t blue);
+
+void IS31FL3733_set_led_control_register(uint8_t index, bool red, bool green, bool blue);
+
+// This should not be called from an interrupt
+// (eg. from a timer interrupt).
+// Call this while idle (in between matrix scans).
+// If the buffer is dirty, it will update the driver with the buffer.
+void IS31FL3733_update_pwm_buffers(uint8_t addr, uint8_t index); // index is the driver index
+void IS31FL3733_update_led_control_registers(uint8_t addr, uint8_t index);
+
+#define A_1 0x00
+#define A_2 0x01
+#define A_3 0x02
+#define A_4 0x03
+#define A_5 0x04
+#define A_6 0x05
+#define A_7 0x06
+#define A_8 0x07
+#define A_9 0x08
+#define A_10 0x09
+#define A_11 0x0A
+#define A_12 0x0B
+#define A_13 0x0C
+#define A_14 0x0D
+#define A_15 0x0E
+#define A_16 0x0F
+
+#define B_1 0x10
+#define B_2 0x11
+#define B_3 0x12
+#define B_4 0x13
+#define B_5 0x14
+#define B_6 0x15
+#define B_7 0x16
+#define B_8 0x17
+#define B_9 0x18
+#define B_10 0x19
+#define B_11 0x1A
+#define B_12 0x1B
+#define B_13 0x1C
+#define B_14 0x1D
+#define B_15 0x1E
+#define B_16 0x1F
+
+#define C_1 0x20
+#define C_2 0x21
+#define C_3 0x22
+#define C_4 0x23
+#define C_5 0x24
+#define C_6 0x25
+#define C_7 0x26
+#define C_8 0x27
+#define C_9 0x28
+#define C_10 0x29
+#define C_11 0x2A
+#define C_12 0x2B
+#define C_13 0x2C
+#define C_14 0x2D
+#define C_15 0x2E
+#define C_16 0x2F
+
+#define D_1 0x30
+#define D_2 0x31
+#define D_3 0x32
+#define D_4 0x33
+#define D_5 0x34
+#define D_6 0x35
+#define D_7 0x36
+#define D_8 0x37
+#define D_9 0x38
+#define D_10 0x39
+#define D_11 0x3A
+#define D_12 0x3B
+#define D_13 0x3C
+#define D_14 0x3D
+#define D_15 0x3E
+#define D_16 0x3F
+
+#define E_1 0x40
+#define E_2 0x41
+#define E_3 0x42
+#define E_4 0x43
+#define E_5 0x44
+#define E_6 0x45
+#define E_7 0x46
+#define E_8 0x47
+#define E_9 0x48
+#define E_10 0x49
+#define E_11 0x4A
+#define E_12 0x4B
+#define E_13 0x4C
+#define E_14 0x4D
+#define E_15 0x4E
+#define E_16 0x4F
+
+#define F_1 0x50
+#define F_2 0x51
+#define F_3 0x52
+#define F_4 0x53
+#define F_5 0x54
+#define F_6 0x55
+#define F_7 0x56
+#define F_8 0x57
+#define F_9 0x58
+#define F_10 0x59
+#define F_11 0x5A
+#define F_12 0x5B
+#define F_13 0x5C
+#define F_14 0x5D
+#define F_15 0x5E
+#define F_16 0x5F
+
+#define G_1 0x60
+#define G_2 0x61
+#define G_3 0x62
+#define G_4 0x63
+#define G_5 0x64
+#define G_6 0x65
+#define G_7 0x66
+#define G_8 0x67
+#define G_9 0x68
+#define G_10 0x69
+#define G_11 0x6A
+#define G_12 0x6B
+#define G_13 0x6C
+#define G_14 0x6D
+#define G_15 0x6E
+#define G_16 0x6F
+
+#define H_1 0x70
+#define H_2 0x71
+#define H_3 0x72
+#define H_4 0x73
+#define H_5 0x74
+#define H_6 0x75
+#define H_7 0x76
+#define H_8 0x77
+#define H_9 0x78
+#define H_10 0x79
+#define H_11 0x7A
+#define H_12 0x7B
+#define H_13 0x7C
+#define H_14 0x7D
+#define H_15 0x7E
+#define H_16 0x7F
+
+#define I_1 0x80
+#define I_2 0x81
+#define I_3 0x82
+#define I_4 0x83
+#define I_5 0x84
+#define I_6 0x85
+#define I_7 0x86
+#define I_8 0x87
+#define I_9 0x88
+#define I_10 0x89
+#define I_11 0x8A
+#define I_12 0x8B
+#define I_13 0x8C
+#define I_14 0x8D
+#define I_15 0x8E
+#define I_16 0x8F
+
+#define J_1 0x90
+#define J_2 0x91
+#define J_3 0x92
+#define J_4 0x93
+#define J_5 0x94
+#define J_6 0x95
+#define J_7 0x96
+#define J_8 0x97
+#define J_9 0x98
+#define J_10 0x99
+#define J_11 0x9A
+#define J_12 0x9B
+#define J_13 0x9C
+#define J_14 0x9D
+#define J_15 0x9E
+#define J_16 0x9F
+
+#define K_1 0xA0
+#define K_2 0xA1
+#define K_3 0xA2
+#define K_4 0xA3
+#define K_5 0xA4
+#define K_6 0xA5
+#define K_7 0xA6
+#define K_8 0xA7
+#define K_9 0xA8
+#define K_10 0xA9
+#define K_11 0xAA
+#define K_12 0xAB
+#define K_13 0xAC
+#define K_14 0xAD
+#define K_15 0xAE
+#define K_16 0xAF
+
+#define L_1 0xB0
+#define L_2 0xB1
+#define L_3 0xB2
+#define L_4 0xB3
+#define L_5 0xB4
+#define L_6 0xB5
+#define L_7 0xB6
+#define L_8 0xB7
+#define L_9 0xB8
+#define L_10 0xB9
+#define L_11 0xBA
+#define L_12 0xBB
+#define L_13 0xBC
+#define L_14 0xBD
+#define L_15 0xBE
+#define L_16 0xBF
diff --git a/keyboards/input_club/k_type/k_type-rgbdriver.c b/keyboards/input_club/k_type/k_type-rgbdriver.c
new file mode 100644
index 0000000000..5ae132d63a
--- /dev/null
+++ b/keyboards/input_club/k_type/k_type-rgbdriver.c
@@ -0,0 +1,57 @@
+/* Copyright 2021 Andrew Fahmy
+ *
+ * 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/>.
+ */
+
+#ifdef RGB_MATRIX_ENABLE
+
+#include "rgb_matrix.h"
+#include "i2c_master.h"
+#include "is31fl3733-dual.h"
+
+
+
+static void init(void) {
+ i2c_init(&I2CD1, I2C1_SCL_PIN, I2C1_SDA_PIN);
+ IS31FL3733_init(0, DRIVER_ADDR_1, 0);
+# ifdef USE_I2C2
+ i2c_init(&I2CD2, I2C2_SCL_PIN, I2C2_SDA_PIN);
+ IS31FL3733_init(1, DRIVER_ADDR_2, 0);
+# endif
+ for (int index = 0; index < DRIVER_LED_TOTAL; index++) {
+ bool enabled = true;
+ // This only caches it for later
+ IS31FL3733_set_led_control_register(index, enabled, enabled, enabled);
+ }
+ IS31FL3733_update_led_control_registers(DRIVER_ADDR_1, 0);
+# ifdef USE_I2C2
+ IS31FL3733_update_led_control_registers(DRIVER_ADDR_2, 1);
+# endif
+}
+
+static void flush(void) {
+ IS31FL3733_update_pwm_buffers(DRIVER_ADDR_1, 0);
+# ifdef USE_I2C2
+ IS31FL3733_update_pwm_buffers(DRIVER_ADDR_2, 1);
+# endif
+}
+
+const rgb_matrix_driver_t rgb_matrix_driver = {
+ .init = init,
+ .flush = flush,
+ .set_color = IS31FL3733_set_color,
+ .set_color_all = IS31FL3733_set_color_all,
+};
+
+#endif
diff --git a/keyboards/input_club/k_type/k_type.c b/keyboards/input_club/k_type/k_type.c
new file mode 100644
index 0000000000..0e10710cb1
--- /dev/null
+++ b/keyboards/input_club/k_type/k_type.c
@@ -0,0 +1,235 @@
+/*
+Copyright 2012,2013 Jun Wako <wakojun@gmail.com>
+
+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 "k_type.h"
+
+
+#ifdef RGB_MATRIX_ENABLE
+
+#include "is31fl3733-dual.h"
+
+
+const is31_led PROGMEM g_is31_leds[DRIVER_LED_TOTAL] = {
+ { 0, B_1, A_1, C_1 },
+ { 0, B_2, A_2, C_2 },
+ { 0, B_3, A_3, C_3 },
+ { 0, B_4, A_4, C_4 },
+ { 0, B_5, A_5, C_5 },
+ { 0, B_6, A_6, C_6 },
+ { 0, B_7, A_7, C_7 },
+ { 0, B_8, A_8, C_8 },
+ { 0, B_9, A_9, C_9 },
+ { 0, B_10, A_10, C_10 },
+ { 0, B_11, A_11, C_11 },
+ { 0, B_12, A_12, C_12 },
+ { 0, B_13, A_13, C_13 },
+ { 0, B_14, A_14, C_14 },
+ { 0, B_15, A_15, C_15 },
+ { 0, B_16, A_16, C_16 },
+
+ { 0, E_1, D_1, F_1 },
+ { 0, E_2, D_2, F_2 },
+ { 0, E_3, D_3, F_3 },
+ { 0, E_4, D_4, F_4 },
+ { 0, E_5, D_5, F_5 },
+ { 0, E_6, D_6, F_6 },
+ { 0, E_7, D_7, F_7 },
+ { 0, E_8, D_8, F_8 },
+ { 0, E_9, D_9, F_9 },
+ { 0, E_10, D_10, F_10 },
+ { 0, E_11, D_11, F_11 },
+ { 0, E_12, D_12, F_12 },
+ { 0, E_13, D_13, F_13 },
+ { 0, E_14, D_14, F_14 },
+ { 0, E_15, D_15, F_15 },
+ { 0, E_16, D_16, F_16 },
+
+ { 0, H_1, G_1, I_1 },
+ { 0, H_2, G_2, I_2 },
+ { 0, H_3, G_3, I_3 },
+ { 0, H_4, G_4, I_4 },
+ { 0, H_5, G_5, I_5 },
+ { 0, H_6, G_6, I_6 },
+ { 0, H_7, G_7, I_7 },
+ { 0, H_8, G_8, I_8 },
+ { 0, H_9, G_9, I_9 },
+ { 0, H_10, G_10, I_10 },
+ { 0, H_11, G_11, I_11 },
+ { 0, H_12, G_12, I_12 },
+ { 0, H_13, G_13, I_13 },
+ { 0, H_14, G_14, I_14 },
+ { 0, H_15, G_15, I_15 },
+ { 0, H_16, G_16, I_16 },
+
+ { 0, K_1, J_1, L_1 },
+ { 0, K_2, J_2, L_2 },
+ { 0, K_3, J_3, L_3 },
+ { 0, K_4, J_4, L_4 },
+ { 0, K_5, J_5, L_5 },
+ { 0, K_6, J_6, L_6 },
+ { 0, K_7, J_7, L_7 },
+ { 0, K_8, J_8, L_8 },
+ { 0, K_9, J_9, L_9 },
+ { 0, K_10, J_10, L_10 },
+ { 0, K_11, J_11, L_11 },
+ { 0, K_12, J_12, L_12 },
+ { 0, K_13, J_13, L_13 },
+ { 0, K_14, J_14, L_14 },
+ { 0, K_15, J_15, L_15 },
+ { 0, K_16, J_16, L_16 },
+
+ // Driver 2 is on I2C2
+ { 1, B_1, A_1, C_1 },
+ { 1, B_2, A_2, C_2 },
+ { 1, B_3, A_3, C_3 },
+ { 1, B_4, A_4, C_4 },
+ { 1, B_5, A_5, C_5 },
+ { 1, B_6, A_6, C_6 },
+ { 1, B_7, A_7, C_7 },
+ { 1, B_8, A_8, C_8 },
+ { 1, B_9, A_9, C_9 },
+ { 1, B_10, A_10, C_10 },
+ { 1, B_11, A_11, C_11 },
+ { 1, B_12, A_12, C_12 },
+ { 1, B_13, A_13, C_13 },
+ { 1, B_14, A_14, C_14 },
+ { 1, B_15, A_15, C_15 },
+ { 1, B_16, A_16, C_16 },
+
+ { 1, E_1, D_1, F_1 },
+ { 1, E_2, D_2, F_2 },
+ { 1, E_3, D_3, F_3 },
+ { 1, E_4, D_4, F_4 },
+ { 1, E_5, D_5, F_5 },
+ { 1, E_6, D_6, F_6 },
+ { 1, E_7, D_7, F_7 },
+ { 1, E_8, D_8, F_8 },
+ { 1, E_9, D_9, F_9 },
+ { 1, E_10, D_10, F_10 },
+ { 1, E_11, D_11, F_11 },
+ { 1, E_12, D_12, F_12 },
+ { 1, E_13, D_13, F_13 },
+ { 1, E_14, D_14, F_14 },
+ { 1, E_15, D_15, F_15 },
+ { 1, E_16, D_16, F_16 },
+
+ { 1, H_1, G_1, I_1 },
+ { 1, H_2, G_2, I_2 },
+ { 1, H_3, G_3, I_3 },
+ { 1, H_4, G_4, I_4 },
+ { 1, H_5, G_5, I_5 },
+ { 1, H_6, G_6, I_6 },
+ { 1, H_7, G_7, I_7 },
+ { 1, H_8, G_8, I_8 },
+ { 1, H_9, G_9, I_9 },
+ { 1, H_10, G_10, I_10 },
+ { 1, H_11, G_11, I_11 },
+ { 1, H_12, G_12, I_12 },
+ { 1, H_13, G_13, I_13 },
+ { 1, H_14, G_14, I_14 },
+ { 1, H_15, G_15, I_15 },
+ { 1, H_16, G_16, I_16 },
+
+ { 1, K_1, J_1, L_1 },
+ { 1, K_2, J_2, L_2 },
+ { 1, K_3, J_3, L_3 },
+ { 1, K_4, J_4, L_4 },
+ { 1, K_5, J_5, L_5 },
+ { 1, K_6, J_6, L_6 },
+ { 1, K_7, J_7, L_7 }
+};
+
+led_config_t g_led_config = {
+ {
+ // Key Matrix to LED Index
+ { 0, 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, NO_LED },
+ { 29, NO_LED, 30, 31, 32, 33, 34, 35, 36, 37 },
+ { 38, 39, 40, 41, 42, 43, 44, 45, 46, NO_LED },
+ { 47, 48, 49, 50, 51, 52, 53, 54, 55, 56 },
+ { 57, 58, 59, 60, 61, NO_LED, 62, NO_LED, 63, NO_LED },
+ { 64, 65, 66, 67, 68, 69, 70, 71, 72, 73 },
+ { NO_LED, 74, NO_LED, 75, 76, 77, 78, 79, 80, 81 },
+ { 82, 83, 84, 85, 86, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }
+ }, {
+ // LED Index to Physical Position
+ // Key LED
+ { 0, 0 }, { 26.35, 0 }, { 39.53, 0 }, { 52.71, 0 }, { 65.88, 0 }, { 79.06, 0 }, { 92.24, 0 }, { 105.41, 0 }, { 118.59, 0 }, { 131.77, 0 }, { 144.94, 0 }, { 158.12, 0 }, { 171.29, 0 }, { 197.65, 0 }, { 210.82, 0 }, { 224, 0 },
+
+ { 0, 21.33 }, { 13.18, 21.33 }, { 26.35, 21.33 }, { 39.53, 21.33 }, { 52.71, 21.33 }, { 65.88, 21.33 }, { 79.06, 21.33 }, { 92.24, 21.33 }, { 105.41, 21.33 }, { 118.59, 21.33 }, { 131.77, 21.33 }, { 144.94, 21.33 }, { 158.12, 21.33 }, { 171.29, 21.33 }, { 197.65, 21.33 }, { 210.82, 21.33 }, { 224, 21.33 },
+ { 0, 32 }, { 13.18, 32 }, { 26.35, 32 }, { 39.53, 32 }, { 52.71, 32 }, { 65.88, 32 }, { 79.06, 32 }, { 92.24, 32 }, { 105.41, 32 }, { 118.59, 32 }, { 131.77, 32 }, { 144.94, 32 }, { 158.12, 32 }, { 171.29, 32 }, { 197.65, 32 }, { 210.82, 32 }, { 224, 32 },
+ { 0, 42.67 }, { 13.18, 42.67 }, { 26.35, 42.67 }, { 39.53, 42.67 }, { 52.71, 42.67 }, { 65.88, 42.67 }, { 79.06, 42.67 }, { 92.24, 42.67 }, { 105.41, 42.67 }, { 118.59, 42.67 }, { 131.77, 42.67 }, { 144.94, 42.67 }, { 171.29, 42.67 },
+ { 0, 53.33 }, { 26.35, 53.33 }, { 39.53, 53.33 }, { 52.71, 53.33 }, { 65.88, 53.33 }, { 79.06, 53.33 }, { 92.24, 53.33 }, { 105.41, 53.33 }, { 118.59, 53.33 }, { 131.77, 53.33 }, { 144.94, 53.33 }, { 171.29, 53.33 }, { 210.82, 53.33 },
+ { 0, 64 }, { 13.18, 64 }, { 26.35, 64 }, { 79.06, 64 }, { 131.77, 64 }, { 144.94, 64 }, { 158.12, 64 }, { 171.29, 64 }, { 197.65, 64 }, { 210.82, 64 }, { 224, 64 },
+
+ // Underglow LED
+ { 224, 64 }, { 206.77, 64 }, { 189.54, 64 }, { 172.31, 64 }, { 155.08, 64 }, { 137.85, 64 }, { 120.61, 64 }, { 103.38, 64 }, { 86.15, 64 }, { 68.92, 64 }, { 51.69, 64 }, { 34.46, 64 }, { 17.23, 64 }, { 0, 64 },
+ { 0, 42.67 }, { 0, 21.33 },
+ { 0, 0 }, { 17.23, 0 }, { 34.46, 0 }, { 51.69, 0 }, { 68.92, 0 }, { 86.15, 0 }, { 103.38, 0 }, { 120.61, 0 }, { 137.85, 0 }, { 155.08, 0 }, { 172.31, 0 }, { 189.54, 0 }, { 206.77, 0 }, { 224, 0 },
+ { 224, 21.33 }, { 224, 42.67 }
+ }, {
+ // LED Index to Flag
+ //Key LED
+ 1, 4, 4, 4, 4, 1, 1, 1, 1, 4, 4, 4, 4, 1, 1, 1,
+
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 4, 4,
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1,
+ 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1,
+
+ // Underglow LED
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+
+ 2, 2,
+
+ 2, 2,
+
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ }
+};
+#endif
+
+
+void keyboard_pre_init_kb(void) {
+#ifdef RGB_MATRIX_ENABLE
+ // Turn on LED controller
+ setPinOutput(B16);
+ writePinHigh(B16);
+#endif
+ keyboard_pre_init_user();
+}
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+#ifdef RGB_MATRIX_ENABLE
+ /*
+ * Since K20x is stuck with a 32 byte EEPROM (see tmk_core/common/chibios/eeprom_teensy.c),
+ * and neither led_matrix_eeconfig.speed or .flags fit in this boundary, just force their values to default on boot.
+ */
+# if !defined(RGB_MATRIX_STARTUP_SPD)
+# define RGB_MATRIX_STARTUP_SPD UINT8_MAX / 2
+# endif
+ rgb_matrix_set_speed(RGB_MATRIX_STARTUP_SPD),
+ rgb_matrix_set_flags(LED_FLAG_ALL);
+#endif
+
+ matrix_init_user();
+}
diff --git a/keyboards/input_club/k_type/k_type.h b/keyboards/input_club/k_type/k_type.h
new file mode 100644
index 0000000000..077c013066
--- /dev/null
+++ b/keyboards/input_club/k_type/k_type.h
@@ -0,0 +1,42 @@
+/*
+Copyright 2017 Input Club
+
+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"
+
+#define XXX KC_NO
+
+#define LAYOUT_tkl_ansi( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k10, k11, k12, k13, k14, k15, \
+ k16, k17, k18, k19, k20, k21, k22, k23, k24, k25, k26, k27, k28, k30, k32, k33, k34, \
+ k35, k36, k37, k38, k39, k40, k41, k42, k43, k44, k45, k46, k47, k48, k50, k51, k52, \
+ k53, k54, k55, k56, k57, k58, k59, k60, k61, k62, k63, k64, k66, \
+ k68, k70, k71, k72, k73, k74, k75, k76, k77, k78, k79, k81, k83, \
+ k84, k85, k86, k87, k88, k89, k90, k91, k92, k93, k94 \
+) { \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09 }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19 }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, XXX }, \
+ { k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39 }, \
+ { k40, k41, k42, k43, k44, k45, k46, k47, k48, XXX }, \
+ { k50, k51, k52, k53, k54, k55, k56, k57, k58, k59 }, \
+ { k60, k61, k62, k63, k64, XXX, k66, XXX, k68, XXX }, \
+ { k70, k71, k72, k73, k74, k75, k76, k77, k78, k79 }, \
+ { XXX, k81, XXX, k83, k84, k85, k86, k87, k88, k89 }, \
+ { k90, k91, k92, k93, k94, XXX, XXX, XXX, XXX, XXX } \
+}
diff --git a/keyboards/input_club/k_type/keymaps/andrew-fahmy/config.h b/keyboards/input_club/k_type/keymaps/andrew-fahmy/config.h
new file mode 100644
index 0000000000..c035255de6
--- /dev/null
+++ b/keyboards/input_club/k_type/keymaps/andrew-fahmy/config.h
@@ -0,0 +1,52 @@
+/* Copyright 2021 Andrew Fahmy
+ *
+ * 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
+
+
+#ifdef RGB_MATRIX_ENABLE
+// # define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+// # define RGB_MATRIX_KEYPRESSES
+# define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_RAINDROPS
+
+// # define DEBUG_MATRIX_SCAN_RATE
+
+# define RGB_MATRIX_LED_FLUSH_LIMIT 100
+// # define RGB_MATRIX_LED_PROCESS_LIMIT 2
+
+// i2c_master defines
+# define I2C_COUNT 2
+
+# define I2C1_BANK GPIOB
+# define I2C1_SCL 0 // A2 on pinout = B0
+# define I2C1_SDA 1 // A2 on pinout = B1
+# define I2C1_SCL_PAL_MODE PAL_MODE_ALTERNATIVE_2
+# define I2C1_SDA_PAL_MODE PAL_MODE_ALTERNATIVE_2
+
+# define USE_I2C2
+# define I2C2_BANK GPIOC
+# define I2C2_SCL 10 // A2 on pinout = C10
+# define I2C2_SDA 11 // A2 on pinout = C11
+# define I2C2_SCL_PAL_MODE PAL_MODE_ALTERNATIVE_2
+# define I2C2_SDA_PAL_MODE PAL_MODE_ALTERNATIVE_2
+
+# define DRIVER_ADDR_1 0b1010000
+# define DRIVER_ADDR_2 0b1010000
+# define DRIVER_COUNT 2
+# define DRIVER_1_LED_TOTAL 64
+# define DRIVER_2_LED_TOTAL 55
+# define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
+#endif
diff --git a/keyboards/input_club/k_type/keymaps/andrew-fahmy/keymap.c b/keyboards/input_club/k_type/keymaps/andrew-fahmy/keymap.c
new file mode 100644
index 0000000000..1611c25e41
--- /dev/null
+++ b/keyboards/input_club/k_type/keymaps/andrew-fahmy/keymap.c
@@ -0,0 +1,60 @@
+/* Copyright 2021 Andrew Fahmy
+ *
+ * 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_names {
+ _MAIN,
+ _L1
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_MAIN] = LAYOUT_tkl_ansi(
+ KC_ESC, 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_PSCR, KC_SLCK, KC_PAUS,
+
+ KC_GRV, 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_INS, KC_HOME, KC_PGUP,
+ 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, KC_DEL, KC_END, KC_PGDN,
+ MO(_L1), 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_UP,
+ KC_LCTL, _______, KC_LALT, KC_SPC, KC_RALT, MO(_L1), KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [_L1] = LAYOUT_tkl_ansi(
+ RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, RGB_MOD, _______,
+
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SPD, RGB_SPI, _______, RGB_HUI, RGB_SAI, RGB_VAI,
+ _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_VAD,
+ _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_LGUI, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
+
+void keyboard_post_init_user(void) {
+ // Customise these values to desired behaviour
+ // debug_enable=true;
+ // debug_matrix=true;
+ // debug_keyboard=true;
+ // debug_mouse=true;
+}
+
+#ifdef RGB_MATRIX_ENABLE
+// Turn off SDB
+void keyboard_pre_init_user() {
+ palSetPadMode(GPIOB, 16, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetPad(GPIOB, 16);
+}
+
+#endif
diff --git a/keyboards/input_club/k_type/keymaps/andrew-fahmy/rules.mk b/keyboards/input_club/k_type/keymaps/andrew-fahmy/rules.mk
new file mode 100644
index 0000000000..aad92997d0
--- /dev/null
+++ b/keyboards/input_club/k_type/keymaps/andrew-fahmy/rules.mk
@@ -0,0 +1 @@
+RGB_MATRIX_ENABLE = yes
diff --git a/keyboards/input_club/k_type/keymaps/belak/keymap.c b/keyboards/input_club/k_type/keymaps/belak/keymap.c
new file mode 100644
index 0000000000..e920579317
--- /dev/null
+++ b/keyboards/input_club/k_type/keymaps/belak/keymap.c
@@ -0,0 +1,27 @@
+#include QMK_KEYBOARD_H
+
+enum layer_names {
+ _QW,
+ _L1
+};
+
+const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QW] = LAYOUT_tkl_ansi(
+ KC_ESC, 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_PSCR, KC_SLCK, KC_PAUS,
+
+ KC_GRV, 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_INS, KC_HOME, KC_PGUP,
+ 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, KC_DEL, KC_END, KC_PGDN,
+ MO(_L1), 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_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_L1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [_L1] = LAYOUT_tkl_ansi(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, KC_MNXT, KC_VOLU,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MSTP, KC_MPRV, KC_VOLD,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END
+ )
+};
diff --git a/keyboards/input_club/k_type/keymaps/default/keymap.c b/keyboards/input_club/k_type/keymaps/default/keymap.c
new file mode 100644
index 0000000000..ef069af650
--- /dev/null
+++ b/keyboards/input_club/k_type/keymaps/default/keymap.c
@@ -0,0 +1,22 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_tkl_ansi(
+ KC_ESC, 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_PSCR, KC_SLCK, KC_PAUS,
+
+ KC_GRV, 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_INS, KC_HOME, KC_PGUP,
+ 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, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, 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_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_tkl_ansi(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, RGB_MOD, _______,
+
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SPD, RGB_SPI, _______, RGB_HUI, RGB_SAI, RGB_VAI,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_VAD,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/input_club/k_type/keymaps/default/rules.mk b/keyboards/input_club/k_type/keymaps/default/rules.mk
new file mode 100644
index 0000000000..aad92997d0
--- /dev/null
+++ b/keyboards/input_club/k_type/keymaps/default/rules.mk
@@ -0,0 +1 @@
+RGB_MATRIX_ENABLE = yes
diff --git a/keyboards/input_club/k_type/mcuconf.h b/keyboards/input_club/k_type/mcuconf.h
new file mode 100644
index 0000000000..b898d25e88
--- /dev/null
+++ b/keyboards/input_club/k_type/mcuconf.h
@@ -0,0 +1,57 @@
+/*
+ ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+#ifndef _MCUCONF_H_
+#define _MCUCONF_H_
+
+#define K20x_MCUCONF
+
+/*
+ * HAL driver system settings.
+ */
+
+/* Select the MCU clocking mode below by enabling the appropriate block. */
+
+#define KINETIS_NO_INIT FALSE
+
+/* PEE mode - 48MHz system clock driven by external crystal. */
+#define KINETIS_MCG_MODE KINETIS_MCG_MODE_PEE
+#define KINETIS_PLLCLK_FREQUENCY 72000000UL
+#define KINETIS_SYSCLK_FREQUENCY 72000000UL
+#define KINETIS_BUSCLK_FREQUENCY 36000000UL
+#define KINETIS_FLASHCLK_FREQUENCY 24000000UL
+
+/*
+ * SERIAL driver system settings.
+ */
+#define KINETIS_SERIAL_USE_UART0 TRUE
+
+/*
+ * USB driver settings
+ */
+#define KINETIS_USB_USE_USB0 TRUE
+#define KINETIS_USB_USB0_IRQ_PRIORITY 5
+
+/*
+ * I2C driver settings
+ */
+#define KINETIS_I2C_USE_I2C0 TRUE
+#define KINETIS_I2C_I2C0_PRIORITY 4
+
+#define KINETIS_I2C_USE_I2C1 TRUE
+#define KINETIS_I2C_I2C1_PRIORITY 4
+
+#endif /* _MCUCONF_H_ */
diff --git a/keyboards/input_club/k_type/readme.md b/keyboards/input_club/k_type/readme.md
new file mode 100644
index 0000000000..a69ca38d4d
--- /dev/null
+++ b/keyboards/input_club/k_type/readme.md
@@ -0,0 +1,17 @@
+# Input Club K-Type
+
+Firmware for custom keyboard PCB with TKL Key Layout
+
+* Keyboard Maintainer: [Kaleb Elwert](https://github.com/belak)
+* Hardware Supported: Input Club K-Type
+* Hardware Availability: [Input Club](https://input.club/k-type/), [Massdrop](https://www.massdrop.com/buy/massdrop-x-input-club-k-type-mechanical-keyboard)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make input_club/k_type:default
+
+Flashing example for this keyboard:
+
+ make input_club/k_type:default:flash
+
+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).
diff --git a/keyboards/input_club/k_type/rules.mk b/keyboards/input_club/k_type/rules.mk
new file mode 100644
index 0000000000..93c81d9ada
--- /dev/null
+++ b/keyboards/input_club/k_type/rules.mk
@@ -0,0 +1,38 @@
+# MCU name
+MCU = MK20DX256
+
+# Bootloader selection
+BOOTLOADER = kiibohd
+
+# Board: it should exist either in <chibios>/os/hal/boards/
+# or <this_dir>/boards
+# This board was copied from PJRC_TEENSY_3_1. The only difference should be a
+# hack to ensure the watchdog has started before trying to disable it, and an
+# override to disable restart of USB driver after returning from suspend.
+BOARD = IC_TEENSY_3_1
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = no # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
+
+# RGB options
+RGB_MATRIX_ENABLE = no
+RGB_MATRIX_DRIVER = custom
+
+# Additional files for RGB lighting
+SRC += k_type-rgbdriver.c
+QUANTUM_LIB_SRC += i2c_master.c is31fl3733-dual.c
+
+LAYOUTS = tkl_ansi
+
+# Enter lower-power sleep mode when on the ChibiOS idle thread
+OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE
diff --git a/keyboards/input_club/whitefox/board_is31fl3731c.h b/keyboards/input_club/whitefox/board_is31fl3731c.h
new file mode 100644
index 0000000000..238d30cb44
--- /dev/null
+++ b/keyboards/input_club/whitefox/board_is31fl3731c.h
@@ -0,0 +1,106 @@
+/*
+Copyright 2016 Fred Sundvik <fsundvik@gmail.com>
+
+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/>.
+*/
+
+#ifndef _GDISP_LLD_BOARD_H
+#define _GDISP_LLD_BOARD_H
+
+static const I2CConfig i2ccfg = {
+ 400000 // clock speed (Hz); 400kHz max for IS31
+};
+
+static const uint8_t led_mask[] = {
+ 0xFF, 0x00, /* C1-1 -> C1-16 */
+ 0xFF, 0x00, /* C2-1 -> C2-16 */
+ 0xFF, 0x00, /* C3-1 -> C3-16 */
+ 0xFF, 0x00, /* C4-1 -> C4-16 */
+ 0xFF, 0x00, /* C5-1 -> C5-16 */
+ 0xFF, 0x00, /* C6-1 -> C6-16 */
+ 0xFF, 0x00, /* C7-1 -> C7-16 */
+ 0xFF, 0x00, /* C8-1 -> C8-16 */
+ 0xFF, 0x00, /* C9-1 -> C9-16 */
+};
+
+// The address of the LED
+#define LA(c, r) (c + r * 16 )
+// Need to be an address that is not mapped, but inside the range of the controller matrix
+#define NA LA(8, 8)
+
+// The numbers in the comments are the led numbers DXX on the PCB
+// The mapping is taken from the schematic of left hand side
+static const uint8_t led_mapping[GDISP_SCREEN_HEIGHT][GDISP_SCREEN_WIDTH] = {
+// 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
+ { LA(0, 0), LA(1, 0), LA(2, 0), LA(3, 0), LA(4, 0), LA(5, 0), LA(6, 0), LA(7, 0), LA(0, 1), LA(1, 1), LA(2, 1), LA(3, 1), LA(4, 1), LA(5, 1), LA(6, 1), LA(7, 1)},
+// 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
+ { LA(0, 2), LA(1, 2), LA(2, 2), LA(3, 2), LA(4, 2), LA(5, 2), LA(6, 2), LA(7, 2), LA(0, 3), LA(1, 3), NA, LA(2, 3), LA(3, 3), LA(4, 3), LA(5, 3), LA(6, 3)},
+// 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
+ { LA(7, 3), LA(0, 4), LA(1, 4), LA(2, 4), LA(3, 4), LA(4, 4), LA(5, 4), LA(6, 4), LA(7, 4), LA(0, 5), NA, LA(1, 5), LA(2, 5), LA(3, 5), LA(4, 5), LA(5, 5)},
+// 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
+ { LA(6, 5), LA(7, 5), LA(0, 6), LA(1, 6), LA(2, 6), LA(3, 6), LA(4, 6), LA(5, 6), LA(6, 6), LA(7, 6), NA, LA(0, 7), LA(1, 7), LA(2, 7), LA(3, 7), LA(4, 7)},
+// 62 63 64 65 66 67 68 69 70 71
+ { LA(5, 7), LA(6, 7), LA(7, 7), NA, NA, NA, LA(0, 8), NA, NA, NA, LA(1, 8), LA(2, 8), LA(3, 8), LA(4, 8), LA(5, 8), LA(6, 8)},
+};
+
+
+#define IS31_ADDR_DEFAULT 0x74 // AD connected to GND
+#define IS31_TIMEOUT 5000
+
+static GFXINLINE void init_board(GDisplay *g) {
+ (void) g;
+ /* I2C pins */
+ palSetPadMode(GPIOB, 0, PAL_MODE_ALTERNATIVE_2); // PTB0/I2C0/SCL
+ palSetPadMode(GPIOB, 1, PAL_MODE_ALTERNATIVE_2); // PTB1/I2C0/SDA
+ palSetPadMode(GPIOB, 16, PAL_MODE_OUTPUT_PUSHPULL);
+ palClearPad(GPIOB, 16);
+ /* start I2C */
+ i2cStart(&I2CD1, &i2ccfg);
+ // try high drive (from kiibohd)
+ I2CD1.i2c->C2 |= I2Cx_C2_HDRS;
+ // try glitch fixing (from kiibohd)
+ I2CD1.i2c->FLT = 4;
+}
+
+static GFXINLINE void post_init_board(GDisplay *g) {
+ (void) g;
+}
+
+static GFXINLINE const uint8_t* get_led_mask(GDisplay* g) {
+ (void) g;
+ return led_mask;
+}
+
+static GFXINLINE uint8_t get_led_address(GDisplay* g, uint16_t x, uint16_t y)
+{
+ (void) g;
+ return led_mapping[y][x];
+}
+
+static GFXINLINE void set_hardware_shutdown(GDisplay* g, bool shutdown) {
+ (void) g;
+ if(!shutdown) {
+ palSetPad(GPIOB, 16);
+ }
+ else {
+ palClearPad(GPIOB, 16);
+ }
+}
+
+static GFXINLINE void write_data(GDisplay *g, uint8_t* data, uint16_t length) {
+ (void) g;
+ i2cMasterTransmitTimeout(&I2CD1, IS31_ADDR_DEFAULT, data, length, 0, 0, TIME_US2I(IS31_TIMEOUT));
+}
+
+#endif /* _GDISP_LLD_BOARD_H */
diff --git a/keyboards/input_club/whitefox/chconf.h b/keyboards/input_club/whitefox/chconf.h
new file mode 100644
index 0000000000..d220eec49b
--- /dev/null
+++ b/keyboards/input_club/whitefox/chconf.h
@@ -0,0 +1,37 @@
+/* Copyright 2020 QMK
+ *
+ * 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/>.
+ */
+
+/*
+ * This file was auto-generated by:
+ * `qmk chibios-confmigrate -i keyboards/whitefox/chconf.h -r platforms/chibios/common/configs/chconf.h`
+ */
+
+#pragma once
+
+#define CH_CFG_ST_TIMEDELTA 0
+
+#define CH_CFG_TIME_QUANTUM 20
+
+#define CH_CFG_USE_REGISTRY TRUE
+
+#define CH_CFG_USE_WAITEXIT TRUE
+
+#define CH_CFG_USE_HEAP TRUE
+
+#define CH_CFG_USE_DYNAMIC TRUE
+
+#include_next <chconf.h>
+
diff --git a/keyboards/input_club/whitefox/config.h b/keyboards/input_club/whitefox/config.h
new file mode 100644
index 0000000000..d2b6639a30
--- /dev/null
+++ b/keyboards/input_club/whitefox/config.h
@@ -0,0 +1,126 @@
+/*
+Copyright 2015 Jun Wako <wakojun@gmail.com>
+
+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
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x1C11
+#define PRODUCT_ID 0xB04D
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Input:Club
+#define PRODUCT WhiteFox (QMK)
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 9
+
+/*
+ * 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 { D0, D1, D4, D5, D6, D7, C1, C2 }
+#define MATRIX_COL_PINS { B2, B3, B18, B19, C0, C8, C9, C10, C11 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* 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
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 3
+
+#define LED_BRIGHTNESS_LO 100
+#define LED_BRIGHTNESS_HI 255
+
+/* LED matrix driver */
+#define LED_DRIVER_ADDR_1 0x74
+#define LED_DRIVER_COUNT 1
+#define DRIVER_LED_TOTAL 71
+#define LED_DISABLE_WHEN_USB_SUSPENDED
+
+/* i2c (for LED matrix) */
+#define I2C1_CLOCK_SPEED 400000
+#define I2C1_SCL_PAL_MODE PAL_MODE_ALTERNATIVE_2
+#define I2C1_SDA_PAL_MODE PAL_MODE_ALTERNATIVE_2
+#define I2C1_SCL_PIN B0
+#define I2C1_SDA_PIN B1
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is useful 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
+
+/* Bootmagic Lite key configuration */
+//#define BOOTMAGIC_LITE_ROW 0
+//#define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/input_club/whitefox/halconf.h b/keyboards/input_club/whitefox/halconf.h
new file mode 100644
index 0000000000..04a228dc9e
--- /dev/null
+++ b/keyboards/input_club/whitefox/halconf.h
@@ -0,0 +1,27 @@
+/* Copyright 2020 QMK
+ *
+ * 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/>.
+ */
+
+/*
+ * This file was auto-generated by:
+ * `qmk chibios-confmigrate -i keyboards/whitefox/halconf.h -r platforms/chibios/common/configs/halconf.h`
+ */
+
+#pragma once
+
+#define HAL_USE_I2C TRUE
+
+#include_next <halconf.h>
+
diff --git a/keyboards/input_club/whitefox/info.json b/keyboards/input_club/whitefox/info.json
new file mode 100644
index 0000000000..a920d7c129
--- /dev/null
+++ b/keyboards/input_club/whitefox/info.json
@@ -0,0 +1,542 @@
+{
+ "keyboard_name": "Whitefox",
+ "maintainer": "qmk",
+ "layouts": {
+ "LAYOUT_all": {
+ "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": 12, "y": 0},
+ {"x": 13, "y": 0},
+ {"x": 14, "y": 0},
+ {"x": 15, "y": 0},
+
+ {"x": 0, "y": 1, "w": 1.5},
+ {"x": 1.5, "y": 1},
+ {"x": 2.5, "y": 1},
+ {"x": 3.5, "y": 1},
+ {"x": 4.5, "y": 1},
+ {"x": 5.5, "y": 1},
+ {"x": 6.5, "y": 1},
+ {"x": 7.5, "y": 1},
+ {"x": 8.5, "y": 1},
+ {"x": 9.5, "y": 1},
+ {"x": 10.5, "y": 1},
+ {"x": 11.5, "y": 1},
+ {"x": 12.5, "y": 1},
+ {"x": 13.5, "y": 1, "w": 1.5},
+ {"x": 15, "y": 1},
+
+ {"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},
+ {"x": 10.75, "y": 2},
+ {"x": 11.75, "y": 2},
+ {"x": 12.75, "y": 2},
+ {"x": 13.75, "y": 2, "w": 1.25},
+ {"x": 15, "y": 2},
+
+ {"x": 0, "y": 3, "w": 1.25},
+ {"x": 1.25, "y": 3},
+ {"x": 2.25, "y": 3},
+ {"x": 3.25, "y": 3},
+ {"x": 4.25, "y": 3},
+ {"x": 5.25, "y": 3},
+ {"x": 6.25, "y": 3},
+ {"x": 7.25, "y": 3},
+ {"x": 8.25, "y": 3},
+ {"x": 9.25, "y": 3},
+ {"x": 10.25, "y": 3},
+ {"x": 11.25, "y": 3},
+ {"x": 12.25, "y": 3, "w": 1.75},
+ {"x": 14, "y": 3},
+ {"x": 15, "y": 3},
+
+ {"x": 0, "y": 4, "w": 1.25},
+ {"x": 1.25, "y": 4, "w": 1.25},
+ {"x": 2.5, "y": 4, "w": 1.25},
+ {"x": 3.75, "y": 4, "w": 6.25},
+ {"x": 10, "y": 4},
+ {"x": 11, "y": 4},
+ {"x": 12, "y": 4},
+ {"x": 13, "y": 4},
+ {"x": 14, "y": 4},
+ {"x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_65_ansi": {
+ "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": 12, "y": 0},
+ {"x": 13, "y": 0, "w": 2},
+ {"x": 15, "y": 0},
+
+ {"x": 0, "y": 1, "w": 1.5},
+ {"x": 1.5, "y": 1},
+ {"x": 2.5, "y": 1},
+ {"x": 3.5, "y": 1},
+ {"x": 4.5, "y": 1},
+ {"x": 5.5, "y": 1},
+ {"x": 6.5, "y": 1},
+ {"x": 7.5, "y": 1},
+ {"x": 8.5, "y": 1},
+ {"x": 9.5, "y": 1},
+ {"x": 10.5, "y": 1},
+ {"x": 11.5, "y": 1},
+ {"x": 12.5, "y": 1},
+ {"x": 13.5, "y": 1, "w": 1.5},
+ {"x": 15, "y": 1},
+
+ {"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},
+ {"x": 10.75, "y": 2},
+ {"x": 11.75, "y": 2},
+ {"x": 12.75, "y": 2, "w": 2.25},
+ {"x": 15, "y": 2},
+
+ {"x": 0, "y": 3, "w": 2.25},
+ {"x": 2.25, "y": 3},
+ {"x": 3.25, "y": 3},
+ {"x": 4.25, "y": 3},
+ {"x": 5.25, "y": 3},
+ {"x": 6.25, "y": 3},
+ {"x": 7.25, "y": 3},
+ {"x": 8.25, "y": 3},
+ {"x": 9.25, "y": 3},
+ {"x": 10.25, "y": 3},
+ {"x": 11.25, "y": 3},
+ {"x": 12.25, "y": 3, "w": 1.75},
+ {"x": 14, "y": 3},
+ {"x": 15, "y": 3},
+
+ {"x": 0, "y": 4, "w": 1.25},
+ {"x": 1.25, "y": 4, "w": 1.25},
+ {"x": 2.5, "y": 4, "w": 1.25},
+ {"x": 3.75, "y": 4, "w": 6.25},
+ {"x": 10, "y": 4},
+ {"x": 11, "y": 4},
+ {"x": 12, "y": 4},
+ {"x": 13, "y": 4},
+ {"x": 14, "y": 4},
+ {"x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_65_ansi_blocker": {
+ "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": 12, "y": 0},
+ {"x": 13, "y": 0, "w": 2},
+ {"x": 15, "y": 0},
+
+ {"x": 0, "y": 1, "w": 1.5},
+ {"x": 1.5, "y": 1},
+ {"x": 2.5, "y": 1},
+ {"x": 3.5, "y": 1},
+ {"x": 4.5, "y": 1},
+ {"x": 5.5, "y": 1},
+ {"x": 6.5, "y": 1},
+ {"x": 7.5, "y": 1},
+ {"x": 8.5, "y": 1},
+ {"x": 9.5, "y": 1},
+ {"x": 10.5, "y": 1},
+ {"x": 11.5, "y": 1},
+ {"x": 12.5, "y": 1},
+ {"x": 13.5, "y": 1, "w": 1.5},
+ {"x": 15, "y": 1},
+
+ {"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},
+ {"x": 10.75, "y": 2},
+ {"x": 11.75, "y": 2},
+ {"x": 12.75, "y": 2, "w": 2.25},
+ {"x": 15, "y": 2},
+
+ {"x": 0, "y": 3, "w": 2.25},
+ {"x": 2.25, "y": 3},
+ {"x": 3.25, "y": 3},
+ {"x": 4.25, "y": 3},
+ {"x": 5.25, "y": 3},
+ {"x": 6.25, "y": 3},
+ {"x": 7.25, "y": 3},
+ {"x": 8.25, "y": 3},
+ {"x": 9.25, "y": 3},
+ {"x": 10.25, "y": 3},
+ {"x": 11.25, "y": 3},
+ {"x": 12.25, "y": 3, "w": 1.75},
+ {"x": 14, "y": 3},
+ {"x": 15, "y": 3},
+
+ {"x": 0, "y": 4, "w": 1.25},
+ {"x": 1.25, "y": 4, "w": 1.25},
+ {"x": 2.5, "y": 4, "w": 1.25},
+ {"x": 3.75, "y": 4, "w": 6.25},
+ {"x": 10, "y": 4, "w": 1.25},
+ {"x": 11.25, "y": 4, "w": 1.25},
+ {"x": 13, "y": 4},
+ {"x": 14, "y": 4},
+ {"x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_65_ansi_blocker_split_bs": {
+ "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": 12, "y": 0},
+ {"x": 13, "y": 0},
+ {"x": 14, "y": 0},
+ {"x": 15, "y": 0},
+
+ {"x": 0, "y": 1, "w": 1.5},
+ {"x": 1.5, "y": 1},
+ {"x": 2.5, "y": 1},
+ {"x": 3.5, "y": 1},
+ {"x": 4.5, "y": 1},
+ {"x": 5.5, "y": 1},
+ {"x": 6.5, "y": 1},
+ {"x": 7.5, "y": 1},
+ {"x": 8.5, "y": 1},
+ {"x": 9.5, "y": 1},
+ {"x": 10.5, "y": 1},
+ {"x": 11.5, "y": 1},
+ {"x": 12.5, "y": 1},
+ {"x": 13.5, "y": 1, "w": 1.5},
+ {"x": 15, "y": 1},
+
+ {"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},
+ {"x": 10.75, "y": 2},
+ {"x": 11.75, "y": 2},
+ {"x": 12.75, "y": 2, "w": 2.25},
+ {"x": 15, "y": 2},
+
+ {"x": 0, "y": 3, "w": 2.25},
+ {"x": 2.25, "y": 3},
+ {"x": 3.25, "y": 3},
+ {"x": 4.25, "y": 3},
+ {"x": 5.25, "y": 3},
+ {"x": 6.25, "y": 3},
+ {"x": 7.25, "y": 3},
+ {"x": 8.25, "y": 3},
+ {"x": 9.25, "y": 3},
+ {"x": 10.25, "y": 3},
+ {"x": 11.25, "y": 3},
+ {"x": 12.25, "y": 3, "w": 1.75},
+ {"x": 14, "y": 3},
+ {"x": 15, "y": 3},
+
+ {"x": 0, "y": 4, "w": 1.25},
+ {"x": 1.25, "y": 4, "w": 1.25},
+ {"x": 2.5, "y": 4, "w": 1.25},
+ {"x": 3.75, "y": 4, "w": 6.25},
+ {"x": 10, "y": 4, "w": 1.25},
+ {"x": 11.25, "y": 4, "w": 1.25},
+ {"x": 13, "y": 4},
+ {"x": 14, "y": 4},
+ {"x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_65_iso": {
+ "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": 12, "y": 0},
+ {"x": 13, "y": 0, "w": 2},
+ {"x": 15, "y": 0},
+
+ {"x": 0, "y": 1, "w": 1.5},
+ {"x": 1.5, "y": 1},
+ {"x": 2.5, "y": 1},
+ {"x": 3.5, "y": 1},
+ {"x": 4.5, "y": 1},
+ {"x": 5.5, "y": 1},
+ {"x": 6.5, "y": 1},
+ {"x": 7.5, "y": 1},
+ {"x": 8.5, "y": 1},
+ {"x": 9.5, "y": 1},
+ {"x": 10.5, "y": 1},
+ {"x": 11.5, "y": 1},
+ {"x": 12.5, "y": 1},
+ {"x": 15, "y": 1},
+
+ {"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},
+ {"x": 10.75, "y": 2},
+ {"x": 11.75, "y": 2},
+ {"x": 12.75, "y": 2},
+ {"x": 13.75, "y": 1, "w": 1.25, "h": 2},
+ {"x": 15, "y": 2},
+
+ {"x": 0, "y": 3, "w": 1.25},
+ {"x": 1.25, "y": 3},
+ {"x": 2.25, "y": 3},
+ {"x": 3.25, "y": 3},
+ {"x": 4.25, "y": 3},
+ {"x": 5.25, "y": 3},
+ {"x": 6.25, "y": 3},
+ {"x": 7.25, "y": 3},
+ {"x": 8.25, "y": 3},
+ {"x": 9.25, "y": 3},
+ {"x": 10.25, "y": 3},
+ {"x": 11.25, "y": 3},
+ {"x": 12.25, "y": 3, "w": 1.75},
+ {"x": 14, "y": 3},
+ {"x": 15, "y": 3},
+
+ {"x": 0, "y": 4, "w": 1.25},
+ {"x": 1.25, "y": 4, "w": 1.25},
+ {"x": 2.5, "y": 4, "w": 1.25},
+ {"x": 3.75, "y": 4, "w": 6.25},
+ {"x": 10, "y": 4},
+ {"x": 11, "y": 4},
+ {"x": 12, "y": 4},
+ {"x": 13, "y": 4},
+ {"x": 14, "y": 4},
+ {"x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_65_iso_blocker": {
+ "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": 12, "y": 0},
+ {"x": 13, "y": 0, "w": 2},
+ {"x": 15, "y": 0},
+
+ {"x": 0, "y": 1, "w": 1.5},
+ {"x": 1.5, "y": 1},
+ {"x": 2.5, "y": 1},
+ {"x": 3.5, "y": 1},
+ {"x": 4.5, "y": 1},
+ {"x": 5.5, "y": 1},
+ {"x": 6.5, "y": 1},
+ {"x": 7.5, "y": 1},
+ {"x": 8.5, "y": 1},
+ {"x": 9.5, "y": 1},
+ {"x": 10.5, "y": 1},
+ {"x": 11.5, "y": 1},
+ {"x": 12.5, "y": 1},
+ {"x": 15, "y": 1},
+
+ {"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},
+ {"x": 10.75, "y": 2},
+ {"x": 11.75, "y": 2},
+ {"x": 12.75, "y": 2},
+ {"x": 13.75, "y": 1, "w": 1.25, "h": 2},
+ {"x": 15, "y": 2},
+
+ {"x": 0, "y": 3, "w": 1.25},
+ {"x": 1.25, "y": 3},
+ {"x": 2.25, "y": 3},
+ {"x": 3.25, "y" :3},
+ {"x": 4.25, "y": 3},
+ {"x": 5.25, "y": 3},
+ {"x": 6.25, "y": 3},
+ {"x": 7.25, "y": 3},
+ {"x": 8.25, "y": 3},
+ {"x": 9.25, "y": 3},
+ {"x": 10.25, "y": 3},
+ {"x": 11.25, "y": 3},
+ {"x": 12.25, "y": 3, "w": 1.75},
+ {"x": 14, "y": 3},
+ {"x": 15, "y": 3},
+
+ {"x": 0, "y": 4, "w": 1.25},
+ {"x": 1.25, "y": 4, "w": 1.25},
+ {"x": 2.5, "y": 4, "w": 1.25},
+ {"x": 3.75, "y": 4, "w": 6.25},
+ {"x": 10, "y": 4, "w": 1.25},
+ {"x": 11.25, "y": 4, "w": 1.25},
+ {"x": 13, "y": 4},
+ {"x": 14, "y": 4},
+ {"x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_65_iso_blocker_split_bs": {
+ "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": 12, "y": 0},
+ {"x": 13, "y": 0},
+ {"x": 14, "y": 0},
+ {"x": 15, "y": 0},
+
+ {"x": 0, "y": 1, "w": 1.5},
+ {"x": 1.5, "y": 1},
+ {"x": 2.5, "y": 1},
+ {"x": 3.5, "y": 1},
+ {"x": 4.5, "y": 1},
+ {"x": 5.5, "y": 1},
+ {"x": 6.5, "y": 1},
+ {"x": 7.5, "y": 1},
+ {"x": 8.5, "y": 1},
+ {"x": 9.5, "y": 1},
+ {"x": 10.5, "y": 1},
+ {"x": 11.5, "y": 1},
+ {"x": 12.5, "y": 1},
+ {"x": 15, "y": 1},
+
+ {"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},
+ {"x": 10.75, "y": 2},
+ {"x": 11.75, "y": 2},
+ {"x": 12.75, "y": 2},
+ {"x": 13.75, "y": 1, "w": 1.25, "h": 2},
+ {"x": 15, "y": 2},
+
+ {"x": 0, "y": 3, "w": 1.25},
+ {"x": 1.25, "y": 3},
+ {"x": 2.25, "y": 3},
+ {"x": 3.25, "y" :3},
+ {"x": 4.25, "y": 3},
+ {"x": 5.25, "y": 3},
+ {"x": 6.25, "y": 3},
+ {"x": 7.25, "y": 3},
+ {"x": 8.25, "y": 3},
+ {"x": 9.25, "y": 3},
+ {"x": 10.25, "y": 3},
+ {"x": 11.25, "y": 3},
+ {"x": 12.25, "y": 3, "w": 1.75},
+ {"x": 14, "y": 3},
+ {"x": 15, "y": 3},
+
+ {"x": 0, "y": 4, "w": 1.25},
+ {"x": 1.25, "y": 4, "w": 1.25},
+ {"x": 2.5, "y": 4, "w": 1.25},
+ {"x": 3.75, "y": 4, "w": 6.25},
+ {"x": 10, "y": 4, "w": 1.25},
+ {"x": 11.25, "y": 4, "w": 1.25},
+ {"x": 13, "y": 4},
+ {"x": 14, "y": 4},
+ {"x": 15, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/input_club/whitefox/keymaps/billypython/config.h b/keyboards/input_club/whitefox/keymaps/billypython/config.h
new file mode 100644
index 0000000000..4b511eb848
--- /dev/null
+++ b/keyboards/input_club/whitefox/keymaps/billypython/config.h
@@ -0,0 +1,3 @@
+#pragma once
+
+#define LAYER_FN
diff --git a/keyboards/input_club/whitefox/keymaps/billypython/keymap.c b/keyboards/input_club/whitefox/keymaps/billypython/keymap.c
new file mode 100644
index 0000000000..79758de807
--- /dev/null
+++ b/keyboards/input_club/whitefox/keymaps/billypython/keymap.c
@@ -0,0 +1,46 @@
+#include QMK_KEYBOARD_H
+#include "billypython.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Base layer
+ * β”Œβ”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”
+ * β”‚Escβ”‚ 1 β”‚ 2 β”‚ 3 β”‚ 4 β”‚ 5 β”‚ 6 β”‚ 7 β”‚ 8 β”‚ 9 β”‚ 0 β”‚ - β”‚ = β”‚ \ β”‚ ` β”‚PScβ”‚
+ * β”œβ”€β”€β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ Tab β”‚ Q β”‚ W β”‚ E β”‚ R β”‚ T β”‚ Y β”‚ U β”‚ I β”‚ O β”‚ P β”‚ [ β”‚ ] β”‚Bspc β”‚Delβ”‚
+ * β”œβ”€β”€β”€β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚FnCapsβ”‚ A β”‚ S β”‚ D β”‚ F β”‚ G β”‚ H β”‚ J β”‚ K β”‚ L β”‚ ; β”‚ ' β”‚ Enter β”‚PgUβ”‚
+ * β”œβ”€β”€β”€β”€β”€β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”€β”¬β”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ LShift β”‚ Z β”‚ X β”‚ C β”‚ V β”‚ B β”‚ N β”‚ M β”‚ , β”‚ . β”‚ / β”‚SftCtlβ”‚ ↑ β”‚PgDβ”‚
+ * β”œβ”€β”€β”€β”€β”¬β”€β”€β”€β”΄β”¬β”€β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”¬β”΄β”€β”€β”€β”Όβ”€β”€β”€β”΄β”¬β”€β”¬β”€β”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚LCtlβ”‚LGuiβ”‚LAltβ”‚ Space β”‚RAltβ”‚FnLkβ”‚ β”‚ ← β”‚ ↓ β”‚ β†’ β”‚
+ * β””β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”˜
+ */
+ [L_BASE] = LAYOUT_truefox( \
+ 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_BSLS, KC_GRV, KC_PSCR, \
+ 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_BSPC, KC_DEL, \
+ FN_CAPS, 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_PGUP, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, RSF_RCT, KC_UP, KC_PGDN, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, FN_FNLK, KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
+
+ /* Function layer
+ * β”Œβ”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”
+ * β”‚ β”‚F1 β”‚F2 β”‚F3 β”‚F4 β”‚F5 β”‚F6 β”‚F7 β”‚F8 β”‚F9 β”‚F10β”‚F11β”‚F12β”‚Numβ”‚Scrβ”‚Pauβ”‚
+ * β”œβ”€β”€β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ M4 β”‚M2 β”‚M↑ β”‚M1 β”‚M3 β”‚M5 β”‚ β”‚PgUβ”‚ ↑ β”‚PgDβ”‚Plyβ”‚Prvβ”‚Nxtβ”‚Clearβ”‚Insβ”‚
+ * β”œβ”€β”€β”€β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ β”‚M← β”‚M↓ β”‚Mβ†’ β”‚MW↑│ β”‚Homβ”‚ ← β”‚ ↓ β”‚ β†’ β”‚Endβ”‚ β”‚ β”‚Topβ”‚
+ * β”œβ”€β”€β”€β”€β”€β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”€β”¬β”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ β”‚MA0β”‚MA2β”‚MW←│MWβ†’β”‚ β”‚ β”‚ β”‚VoDβ”‚VoUβ”‚Mutβ”‚ App β”‚PgUβ”‚Btmβ”‚
+ * β”œβ”€β”€β”€β”€β”¬β”€β”€β”€β”΄β”¬β”€β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”¬β”΄β”€β”€β”€β”Όβ”€β”€β”€β”΄β”¬β”€β”¬β”€β”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ β”‚ β”‚ β”‚ MW↓ β”‚ β”‚ β”‚ β”‚Homβ”‚PgDβ”‚Endβ”‚
+ * β””β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”˜
+ */
+ [L_FN] = LAYOUT_truefox( \
+ _______, 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_NLCK, KC_SLCK, KC_PAUS, \
+ KC_BTN4, KC_BTN2, KC_MS_U, KC_BTN1, KC_BTN3, KC_BTN5, _______, KC_PGUP, KC_UP, KC_PGDN, KC_MPLY, KC_MPRV, KC_MNXT, CLEAR, KC_INS, \
+ _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_U, _______, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, _______, _______, TOP, \
+ _______, KC_ACL0, KC_ACL2, KC_WH_L, KC_WH_R, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, KC_APP, KC_PGUP, BOTTOM, \
+ _______, _______, _______, KC_WH_D, _______, _______, KC_HOME, KC_PGDN, KC_END \
+ ),
+};
diff --git a/keyboards/input_club/whitefox/keymaps/billypython/rules.mk b/keyboards/input_club/whitefox/keymaps/billypython/rules.mk
new file mode 100644
index 0000000000..4bb1fdfaf7
--- /dev/null
+++ b/keyboards/input_club/whitefox/keymaps/billypython/rules.mk
@@ -0,0 +1,6 @@
+BACKLIGHT_ENABLE = no
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+COMMAND_ENABLE = yes
+CONSOLE_ENABLE = yes
+TAP_DANCE_ENABLE = yes
+VISUALIZER_ENABLE = no
diff --git a/keyboards/input_club/whitefox/keymaps/default/keymap.c b/keyboards/input_club/whitefox/keymaps/default/keymap.c
new file mode 100644
index 0000000000..353e282f2d
--- /dev/null
+++ b/keyboards/input_club/whitefox/keymaps/default/keymap.c
@@ -0,0 +1,60 @@
+/*
+Copyright 2015 Jun Wako <wakojun@gmail.com>
+
+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] = {
+ /*
+ * β”Œβ”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”
+ * β”‚Escβ”‚ 1 β”‚ 2 β”‚ 3 β”‚ 4 β”‚ 5 β”‚ 6 β”‚ 7 β”‚ 8 β”‚ 9 β”‚ 0 β”‚ - β”‚ = β”‚ \ β”‚ ` β”‚Insβ”‚
+ * β”œβ”€β”€β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ Tab β”‚ Q β”‚ W β”‚ E β”‚ R β”‚ T β”‚ Y β”‚ U β”‚ I β”‚ O β”‚ P β”‚ [ β”‚ ] β”‚ Bspcβ”‚Delβ”‚
+ * β”œβ”€β”€β”€β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ Caps β”‚ A β”‚ S β”‚ D β”‚ F β”‚ G β”‚ H β”‚ J β”‚ K β”‚ L β”‚ ; β”‚ ' β”‚ # β”‚ Entβ”‚PgUβ”‚
+ * β”œβ”€β”€β”€β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”΄β”¬β”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚Shftβ”‚ < β”‚ Z β”‚ X β”‚ C β”‚ V β”‚ B β”‚ N β”‚ M β”‚ , β”‚ . β”‚ / β”‚ Shiftβ”‚ ↑ β”‚PgDβ”‚
+ * β”œβ”€β”€β”€β”€β”Όβ”€β”€β”€β”΄β”¬β”€β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”¬β”΄β”€β”€β”¬β”΄β”€β”€β”¬β”΄β”€β”€β”¬β”€β”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚Ctrlβ”‚GUI β”‚Alt β”‚ β”‚Altβ”‚ Fnβ”‚Ctlβ”‚ ← β”‚ ↓ β”‚ β†’ β”‚
+ * β””β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”˜
+ */
+ [0] = LAYOUT_all(
+ 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_BSLS, KC_GRV, KC_INS,
+ 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_BSPC, KC_DEL,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGUP,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ /*
+ * β”Œβ”€β”€β”€β”Œβ”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”β”€β”€β”€β”¬β”€β”€β”€β”Œβ”€β”€β”€β”
+ * β”‚ β”‚F1 β”‚F2 β”‚F3 β”‚F4 β”‚F5 β”‚F6 β”‚F7 β”‚F8 β”‚F9 β”‚F10β”‚F11β”‚F12β”‚ β”‚ β”‚Mutβ”‚
+ * β”œβ”€β”€β”€β””β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”β”€β”΄β”€β”€β”€β””β”€β”€β”€β”˜
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚Pscβ”‚Slkβ”‚Pseβ”‚ β”‚ β”‚
+ * β”œβ”€β”€β”€β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β””β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”˜β”¬β”€β”€β”€β”€β”Œβ”€β”€β”€β”
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚Vl+β”‚
+ * β”œβ”€β”€β”€β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”΄β”Œβ”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚PgUβ”‚Vl-β”‚
+ * β”œβ”€β”€β”€β”€β”Όβ”€β”€β”€β”΄β”¬β”€β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”¬β”΄β”€β”€β”¬β”΄β”€β”€β”¬β”΄β”€β”€β”Œβ”€β”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚Homβ”‚PgDβ”‚Endβ”‚
+ * β””β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β””β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”˜
+ */
+ [1] = LAYOUT_all(
+ _______, 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_MUTE,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, KC_VOLD,
+ _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END
+ )
+};
diff --git a/keyboards/input_club/whitefox/keymaps/dhertz/keymap.c b/keyboards/input_club/whitefox/keymaps/dhertz/keymap.c
new file mode 100644
index 0000000000..1d3bd224de
--- /dev/null
+++ b/keyboards/input_club/whitefox/keymaps/dhertz/keymap.c
@@ -0,0 +1,58 @@
+/*
+Copyright 2015 Jun Wako <wakojun@gmail.com>
+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
+#include "dhertz.h"
+
+const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Layer 0: Default Layer
+ * ,---------------------------------------------------------------.
+ * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| Backsp|Del|
+ * |---------------------------------------------------------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]|Enter|PgU|
+ * |------------------------------------------------------` |---|
+ * |SrCtl | A| S| D| F| G| H| J| K| L| ;| '| \| |PgD|
+ * |---------------------------------------------------------------|
+ * |Shif| #| Z| X| C| V| B| N| M| ,| .| /|Shift |Up |Hom|
+ * |---------------------------------------------------------------|
+ * |NcCtl| Alt| CTab| LyrSpc |CGv|Iso|CSL|Lef|Dow|Rig|
+ * `---------------------------------------------------------------'
+ */
+ [0] = LAYOUT_iso( \
+ 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_DEL, \
+ 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_PGUP,\
+ SRCH_CTL,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,KC_NUHS, KC_ENT, KC_PGDN,\
+ KC_LSFT,HSH_TLD,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT, KC_UP, KC_HOME,\
+ NC_CTL, KC_LALT,CMD_TAB_CMD, LYR_SPC, CMD_GRV_CMD,ISO_COUNTRY_CODE,CMD_SFT_L, KC_LEFT,KC_DOWN,KC_RGHT \
+ ),
+ /* Layer 1: HHKB mode (Space)
+ * ,---------------------------------------------------------------.
+ * | Β§| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| Backsp|Ins|
+ * |---------------------------------------------------------------|
+ * |Caps | | | | | | | |Psc|Slk|Pus| Up| | |Del|
+ * |------------------------------------------------------` |---|
+ * | |VoD|VoU|Mut| | | |Bsp|Del|CSL|Lef|Rig| `| |PgU|
+ * |---------------------------------------------------------------|
+ * | | `| | |CAC| | | | | | |Dow| |PgU|PgD|
+ * |---------------------------------------------------------------|
+ * | | | | | | | |Hom|PgD|End|
+ * `---------------------------------------------------------------'
+ */
+ [1] = LAYOUT_iso( \
+ 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_BSPC, KC_INS, \
+ KC_CAPS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,BL_INC, KC_TRNS,KC_TRNS,KC_PSCR,KC_SLCK,KC_TRNS,KC_PAUS, KC_UP, KC_DEL, \
+ KC_TRNS,KC_VOLD,KC_VOLU,KC_MUTE,KC_TRNS,BL_TOGG,KC_TRNS,KC_BSPC,KC_DEL, CMD_SFT_L,KC_LEFT,KC_RGHT,KC_NUBS, KC_PENT,KC_PGUP,\
+ KC_TRNS,KC_NUBS,KC_TRNS,KC_TRNS,CMD_ALT_C, BL_DEC, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_DOWN,KC_TRNS,KC_TRNS, KC_PGUP,KC_PGDN,\
+ KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_HOME,KC_PGDN,KC_END \
+ ),
+};
diff --git a/keyboards/input_club/whitefox/keymaps/dudeofawesome/keymap.c b/keyboards/input_club/whitefox/keymaps/dudeofawesome/keymap.c
new file mode 100644
index 0000000000..2388201b7e
--- /dev/null
+++ b/keyboards/input_club/whitefox/keymaps/dudeofawesome/keymap.c
@@ -0,0 +1,146 @@
+#include QMK_KEYBOARD_H
+
+enum whitefox_layers {
+ _QWERTY,
+ _WORKMAN,
+ _COLEMAK,
+ _DVORAK,
+ _FUNC,
+};
+
+enum whitefox_keycodes {
+ QWERTY = SAFE_RANGE,
+ WORKMAN,
+ COLEMAK,
+ DVORAK,
+ FUNC,
+};
+
+const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* QWERTY (Default Layer)
+ * ,---------------------------------------------------------------.
+ * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| `|Prt|
+ * |---------------------------------------------------------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]|Backs|Del|
+ * |---------------------------------------------------------------|
+ * |Fn/CL | A| S| D| F| G| H| J| K| L| ;| '|Enter |PgU|
+ * |---------------------------------------------------------------|
+ * |Shif| | Z| X| C| V| B| N| M| ,| .| /|Shift |Up |PgD|
+ * |---------------------------------------------------------------|
+ * |Ctrl|Alt |Gui | Space |Gui |Alt |Ctrl| |Lef|Dow|Rig|
+ * `---------------------------------------------------------------'
+ */
+ [_QWERTY] = LAYOUT( \
+ 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_BSLS,KC_GRV, KC_PSCR, \
+ 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_BSPC, KC_DEL, \
+ LT(_FUNC,KC_CAPS),KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,KC_NUHS,KC_ENT, KC_PGUP,\
+ KC_LSFT, KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT, KC_UP, KC_PGDN,\
+ KC_LCTL, KC_LALT,KC_LGUI, KC_SPC, KC_RGUI,KC_RALT,KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT \
+ ),
+ /* Workman
+ * ,---------------------------------------------------------------.
+ * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| `|Prt|
+ * |---------------------------------------------------------------|
+ * |Tab | Q| D| R| W| B| J| F| U| P| ;| [| ]|Backs|Del|
+ * |---------------------------------------------------------------|
+ * |Fn/CL | A| S| H| T| G| Y| N| E| O| I| '|Enter |PgU|
+ * |---------------------------------------------------------------|
+ * |Shif| | Z| X| M| C| V| K| L| ,| .| /|Shift |Up |PgD|
+ * |---------------------------------------------------------------|
+ * |Ctrl|Alt |Gui | Space |Gui |Alt |Ctrl| |Lef|Dow|Rig|
+ * `---------------------------------------------------------------'
+ */
+ [_WORKMAN] = LAYOUT( \
+ 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_BSLS,KC_GRV, KC_PSCR, \
+ KC_TAB, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_SCLN,KC_LBRC,KC_RBRC,KC_BSPC, KC_DEL, \
+ LT(_FUNC,KC_CAPS),KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, KC_QUOT,KC_NUHS,KC_ENT, KC_PGUP,\
+ KC_LSFT, KC_NUBS,KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT, KC_UP, KC_PGDN,\
+ KC_LCTL, KC_LALT,KC_LGUI, KC_SPC, KC_RGUI,KC_RALT,KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT \
+ ),
+ /* Dvorak
+ * ,---------------------------------------------------------------.
+ * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| [| ]| `| \|Prt|
+ * |---------------------------------------------------------------|
+ * |Tab | '| ,| .| P| Y| F| G| C| R| L| /| =|Backs|Del|
+ * |---------------------------------------------------------------|
+ * |Fn/CL | A| O| E| U| I| D| H| T| N| S| -|Enter |PgU|
+ * |---------------------------------------------------------------|
+ * |Shif| | ;| Q| J| K| X| B| M| W| V| Z|Shift |Up |PgD|
+ * |---------------------------------------------------------------|
+ * |Ctrl|Alt |Gui | Space |Gui |Alt |Ctrl| |Lef|Dow|Rig|
+ * `---------------------------------------------------------------'
+ */
+ [_DVORAK] = LAYOUT( \
+ 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_BSLS,KC_GRV, KC_PSCR, \
+ KC_TAB, KC_QUOT,KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH,KC_EQL, KC_BSPC, KC_DEL, \
+ LT(_FUNC,KC_CAPS),KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS,KC_NUHS,KC_ENT, KC_PGUP,\
+ KC_LSFT, KC_NUBS,KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z,KC_RSFT, KC_UP, KC_PGDN,\
+ KC_LCTL, KC_LALT,KC_LGUI, KC_SPC, KC_RGUI,KC_RALT,KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT \
+ ),
+ /* Colemak
+ * ,---------------------------------------------------------------.
+ * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| +| `| \|Prt|
+ * |---------------------------------------------------------------|
+ * |Tab | Q| W| F| P| G| J| L| U| Y| ;| [| ]|Backs|Del|
+ * |---------------------------------------------------------------|
+ * |Fn/CL | A| R| S| T| D| H| N| E| I| O| '|Enter |PgU|
+ * |---------------------------------------------------------------|
+ * |Shif| | Z| X| C| V| B| K| M| ,| .| /|Shift |Up |PgD|
+ * |---------------------------------------------------------------|
+ * |Ctrl|Alt |Gui | Space |Gui |Alt |Ctrl| |Lef|Dow|Rig|
+ * `---------------------------------------------------------------'
+ */
+ [_COLEMAK] = LAYOUT( \
+ 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_BSLS,KC_GRV, KC_PSCR, \
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN,KC_LBRC,KC_RBRC,KC_BSPC, KC_DEL, \
+ LT(_FUNC,KC_CAPS),KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,KC_NUHS,KC_ENT, KC_PGUP,\
+ KC_LSFT, KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT, KC_UP, KC_PGDN,\
+ KC_LCTL, KC_LALT,KC_LGUI, KC_SPC, KC_RGUI,KC_RALT,KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT \
+ ),
+ /* Function
+ * ,---------------------------------------------------------------.
+ * | | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| | | |
+ * |---------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | |
+ * |---------------------------------------------------------------|
+ * | | | | | | | | | | | | | | |
+ * |---------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | |
+ * |---------------------------------------------------------------|
+ * | | | | | | | | | | | |
+ * `---------------------------------------------------------------'
+ */
+ [_FUNC] = LAYOUT( \
+ RESET, 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_WH_D,KC_BTN2,KC_MS_U,KC_BTN1,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,\
+ _______,KC_WH_U,KC_MS_L,KC_MS_D,KC_MS_R,AG_NORM,AG_SWAP,QWERTY, WORKMAN,DVORAK, COLEMAK,_______,_______,_______, _______,\
+ _______,_______,KC_WH_L,KC_BTN3,KC_WH_R,_______,_______,_______,_______,_______,_______,_______,_______, KC_VOLU,_______,\
+ _______,_______,_______, KC_MPLY, _______,_______,_______, KC_MPRV,KC_VOLD,KC_MNXT \
+ ),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ case WORKMAN:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_WORKMAN);
+ }
+ return false;
+ case DVORAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_DVORAK);
+ }
+ return false;
+ case COLEMAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_COLEMAK);
+ }
+ return false;
+ }
+ return true;
+}
diff --git a/keyboards/input_club/whitefox/keymaps/dudeofawesome/readme.md b/keyboards/input_club/whitefox/keymaps/dudeofawesome/readme.md
new file mode 100644
index 0000000000..b5a33e74f6
--- /dev/null
+++ b/keyboards/input_club/whitefox/keymaps/dudeofawesome/readme.md
@@ -0,0 +1,20 @@
+# DudeOfAwesome's WhiteFox layout
+
+![WhiteFox Layout](https://i.imgur.com/TYYqJbP.png)
+
+## Features
+
+- Base Layers
+ - QWERTY
+ - Workman
+ - Dvorak
+ - Colemak
+- Mouse Keys
+
+## Building and flashing
+
+1. Put your board in DFU mode with either the button on the bottom, or with a software key in your current firmware
+1. Flash:
+ ```bash
+ $ make whitefox:dudeofawesome:dfu-util
+ ```
diff --git a/keyboards/input_club/whitefox/keymaps/jetpacktuxedo/keymap.c b/keyboards/input_club/whitefox/keymaps/jetpacktuxedo/keymap.c
new file mode 100644
index 0000000000..8a93f03188
--- /dev/null
+++ b/keyboards/input_club/whitefox/keymaps/jetpacktuxedo/keymap.c
@@ -0,0 +1,60 @@
+/*
+Copyright 2015 Jun Wako <wakojun@gmail.com>
+
+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 keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Layer 0: Default Layer
+ * ,---------------------------------------------------------------.
+ * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| Backsp|Ins|
+ * |---------------------------------------------------------------|
+ * | Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ |Del|
+ * |---------------------------------------------------------------|
+ * | FN | A| S| D| F| G| H| J| K| L| ;| '| Enter |PgU|
+ * |---------------------------------------------------------------|
+ * | Shift | Z| X| C| V| B| N| M| ,| .| /| Shift |Up |PgD|
+ * |---------------------------------------------------------------|
+ * |Ctrl|Gui |Alt | Space |Alt |Ctrl| |Lef|Dow|Rig|
+ * `---------------------------------------------------------------'
+ */
+ [0] = LAYOUT( \
+ KC_GESC, 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_NO,KC_BSPC,KC_INS, \
+ 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, KC_DEL, \
+ MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,KC_NUHS, KC_ENT, KC_PGUP,\
+ KC_LSFT, KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,\
+ KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RCTL,KC_NO, KC_LEFT,KC_DOWN,KC_RGHT \
+ ),
+ /* Layer 1: FN Layer
+ * ,---------------------------------------------------------------.
+ * | ` | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| | |
+ * |---------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | |
+ * |---------------------------------------------------------------|
+ * | | | | | | | | | | | | | | |
+ * |---------------------------------------------------------------|
+ * | | | | | | | | | | | | |pup| |
+ * |---------------------------------------------------------------|
+ * | | | | | | | |hom|pdn|end|
+ * `---------------------------------------------------------------'
+ */
+ [1] = LAYOUT( \
+ 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_TRNS,KC_TRNS,KC_MUTE,\
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,BL_TOGG,KC_TRNS,KC_TRNS,BL_INC, KC_TRNS,KC_PSCR,KC_SLCK,KC_PAUS,KC_TRNS, KC_TRNS,\
+ KC_TRNS,KC_TRNS,KC_TRNS,BL_DEC, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_VOLU,\
+ 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_PGUP,KC_VOLD,\
+ KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_HOME,KC_PGDN,KC_END \
+ ),
+};
diff --git a/keyboards/input_club/whitefox/keymaps/jetpacktuxedo/readme.md b/keyboards/input_club/whitefox/keymaps/jetpacktuxedo/readme.md
new file mode 100644
index 0000000000..2c714f067a
--- /dev/null
+++ b/keyboards/input_club/whitefox/keymaps/jetpacktuxedo/readme.md
@@ -0,0 +1,3 @@
+#Jetpacktuxedo's keymap for whitefox aria
+
+This is designed for the aria layout so you may have some keys that don't line up properly, namely around the split backspace area and the right hand bottom row mods. Additionally I use capslock as fn.
diff --git a/keyboards/input_club/whitefox/keymaps/jetpacktuxedo/rules.mk b/keyboards/input_club/whitefox/keymaps/jetpacktuxedo/rules.mk
new file mode 100644
index 0000000000..c9c8cbea51
--- /dev/null
+++ b/keyboards/input_club/whitefox/keymaps/jetpacktuxedo/rules.mk
@@ -0,0 +1,2 @@
+BACKLIGHT_ENABLE = yes
+
diff --git a/keyboards/input_club/whitefox/keymaps/kim-kim/keymap.c b/keyboards/input_club/whitefox/keymaps/kim-kim/keymap.c
new file mode 100644
index 0000000000..baaa136873
--- /dev/null
+++ b/keyboards/input_club/whitefox/keymaps/kim-kim/keymap.c
@@ -0,0 +1,53 @@
+/*
+Copyright 2017 Lukmanul Hakim <lukmanulhakim14@gmail.com>
+
+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/>.
+*/
+
+/* NOTE : This is compatible to TrueFox Layout only */
+
+#include QMK_KEYBOARD_H
+
+// Fillers to make layering more clear
+#define ___T___ KC_TRNS
+
+const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Layer 0: Default Layer
+ * ,----------------------------------------------------------------.
+ * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| `|Pscr|
+ * |----------------------------------------------------------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]|Backs|Del |
+ * |----------------------------------------------------------------|
+ * |Ctrl | A| S| D| F| G| H| J| K| L| ;| '|Enter |PgUp|
+ * |----------------------------------------------------------------|
+ * |Shif| | Z| X| C| V| B| N| M| ,| .| /|Shift |Up |PgDn|
+ * |----------------------------------------------------------------|
+ * |Alt|Fn0 |Gui | Space |Gui |Alt | | |Lef|Dow|Rght|
+ * `----------------------------------------------------------------'
+ */
+ [0] = LAYOUT( \
+ 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_BSLS,KC_GRV, KC_PSCR,\
+ 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_BSPC, KC_DEL, \
+ KC_LCTRL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,KC_NUHS,KC_ENT, KC_PGUP,\
+ KC_LSFT,XXXXXXX,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT, KC_UP, KC_PGDN,\
+ KC_LALT,MO(1), KC_LGUI, KC_SPC, KC_RGUI,KC_RALT, XXXXXXX, KC_LEFT,KC_DOWN,KC_RGHT \
+ ),
+ [1] = LAYOUT( \
+ _______,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_MPRV,KC_MNXT,KC_VOLU,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______ , BL_TOGG ,\
+ _______,KC_MPLY,KC_MSTP,KC_VOLD,_______,_______,_______,_______,_______,_______,_______,_______,_______,RESET, BL_INC,\
+ _______,_______,_______,KC_MUTE,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,BL_DEC,\
+ _______,_______,_______, _______, _______,_______,_______, KC_HOME,_______,KC_END \
+ ),
+};
diff --git a/keyboards/input_club/whitefox/keymaps/konstantin/config.h b/keyboards/input_club/whitefox/keymaps/konstantin/config.h
new file mode 100644
index 0000000000..3c2583e2d4
--- /dev/null
+++ b/keyboards/input_club/whitefox/keymaps/konstantin/config.h
@@ -0,0 +1,4 @@
+#pragma once
+
+#define LAYER_FN
+#define LAYER_NUMPAD
diff --git a/keyboards/input_club/whitefox/keymaps/konstantin/keymap.c b/keyboards/input_club/whitefox/keymaps/konstantin/keymap.c
new file mode 100644
index 0000000000..4c587dd272
--- /dev/null
+++ b/keyboards/input_club/whitefox/keymaps/konstantin/keymap.c
@@ -0,0 +1,67 @@
+#include QMK_KEYBOARD_H
+#include "konstantin.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Base layer
+ * β”Œβ”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”
+ * β”‚Escβ”‚ 1 β”‚ 2 β”‚ 3 β”‚ 4 β”‚ 5 β”‚ 6 β”‚ 7 β”‚ 8 β”‚ 9 β”‚ 0 β”‚ - β”‚ = β”‚ \ β”‚ ` β”‚PScβ”‚
+ * β”œβ”€β”€β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ Tab β”‚ Q β”‚ W β”‚ E β”‚ R β”‚ T β”‚ Y β”‚ U β”‚ I β”‚ O β”‚ P β”‚ [ β”‚ ] β”‚Bspc β”‚Delβ”‚
+ * β”œβ”€β”€β”€β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚FnCapsβ”‚ A β”‚ S β”‚ D β”‚ F β”‚ G β”‚ H β”‚ J β”‚ K β”‚ L β”‚ ; β”‚ ' β”‚ Enter β”‚PgUβ”‚
+ * β”œβ”€β”€β”€β”€β”€β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”€β”¬β”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ LShift β”‚ Z β”‚ X β”‚ C β”‚ V β”‚ B β”‚ N β”‚ M β”‚ , β”‚ . β”‚ / β”‚RSfRCtβ”‚ ↑ β”‚PgDβ”‚
+ * β”œβ”€β”€β”€β”€β”¬β”€β”€β”€β”΄β”¬β”€β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”¬β”΄β”€β”€β”€β”Όβ”€β”€β”€β”΄β”¬β”€β”¬β”€β”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚LCtlβ”‚LGuiβ”‚LAltβ”‚ Space β”‚RAlGβ”‚FnFLβ”‚ β”‚ ← β”‚ ↓ β”‚ β†’ β”‚
+ * β””β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”˜
+ */
+ [L_BASE] = LAYOUT_truefox(
+ 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_BSLS, KC_GRV, KC_PSCR,
+ 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_BSPC, KC_DEL,
+ FN_CAPS, 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_PGUP,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, RSF_RCT, KC_UP, KC_PGDN,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, RAL_RGU, FN_FNLK, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ /* Fn layer
+ * β”Œβ”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”
+ * β”‚ β”‚F1 β”‚F2 β”‚F3 β”‚F4 β”‚F5 β”‚F6 β”‚F7 β”‚F8 β”‚F9 β”‚F10β”‚F11β”‚F12β”‚Numβ”‚SLkβ”‚Pauβ”‚
+ * β”œβ”€β”€β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ M4 β”‚M2 β”‚M↑ β”‚M1 β”‚M3 β”‚M5 β”‚ β”‚UCMβ”‚ β”‚Stpβ”‚Plyβ”‚Prvβ”‚Nxtβ”‚Clearβ”‚Insβ”‚
+ * β”œβ”€β”€β”€β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ β”‚M← β”‚M↓ β”‚Mβ†’ β”‚MW↑│ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚Topβ”‚
+ * β”œβ”€β”€β”€β”€β”€β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”€β”¬β”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ β”‚MA0β”‚MA2β”‚MW←│MWβ†’β”‚ β”‚ β”‚Appβ”‚Vo-β”‚Vo+β”‚Mutβ”‚ β”‚PgUβ”‚Btmβ”‚
+ * β”œβ”€β”€β”€β”€β”¬β”€β”€β”€β”΄β”¬β”€β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”¬β”΄β”€β”€β”€β”Όβ”€β”€β”€β”΄β”¬β”€β”¬β”€β”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ β”‚DtPRβ”‚DtNAβ”‚ MW↓ β”‚ β”‚ β”‚ β”‚Homβ”‚PgDβ”‚Endβ”‚
+ * β””β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”˜
+ */
+ [L_FN] = LAYOUT_truefox(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, NUMPAD, KC_SLCK, KC_PAUS,
+ KC_BTN4, KC_BTN2, KC_MS_U, KC_BTN1, KC_BTN3, KC_BTN5, _______, UC_MOD, _______, KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, CLEAR, KC_INS,
+ _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_U, _______, _______, _______, _______, _______, _______, _______, _______, TOP,
+ _______, KC_ACL0, KC_ACL2, KC_WH_L, KC_WH_R, _______, _______, KC_APP, KC_VOLD, KC_VOLU, KC_MUTE, _______, KC_PGUP, BOTTOM,
+ _______, DST_P_R, DST_N_A, KC_WH_D, _______, _______, KC_HOME, KC_PGDN, KC_END
+ ),
+
+ /* Numpad layer
+ * β”Œβ”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚P7 β”‚P8 β”‚P9 β”‚P- β”‚ βˆ’ β”‚ = β”‚Numβ”‚ β”‚ β”‚
+ * β”œβ”€β”€β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚P4 β”‚P5 β”‚P6 β”‚P+ β”‚ ( β”‚ ) β”‚ β”‚ β”‚
+ * β”œβ”€β”€β”€β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚P1 β”‚P2 β”‚P3 β”‚P* β”‚ Γ— β”‚ PEnter β”‚ β”‚
+ * β”œβ”€β”€β”€β”€β”€β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”€β”¬β”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚P0 β”‚P0 β”‚ , β”‚P. β”‚P/ β”‚ Γ· β”‚ β”‚ β”‚
+ * β”œβ”€β”€β”€β”€β”¬β”€β”€β”€β”΄β”¬β”€β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”¬β”΄β”€β”€β”€β”Όβ”€β”€β”€β”΄β”¬β”€β”¬β”€β”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
+ * β””β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”˜
+ */
+ [L_NUMPAD] = LAYOUT_truefox(
+ _______, _______, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, KC_PMNS, MINUS, EQUALS, NUMPAD, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6, KC_PPLS, L_PAREN, R_PAREN, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, KC_PAST, TIMES, KC_PENT, _______,
+ _______, _______, _______, _______, _______, _______, KC_P0, KC_P0, COMMA, KC_PDOT, KC_PSLS, DIVIDE, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+};
diff --git a/keyboards/input_club/whitefox/keymaps/konstantin/rules.mk b/keyboards/input_club/whitefox/keymaps/konstantin/rules.mk
new file mode 100644
index 0000000000..db238f1d04
--- /dev/null
+++ b/keyboards/input_club/whitefox/keymaps/konstantin/rules.mk
@@ -0,0 +1,18 @@
+# Generic features
+BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
+COMMAND_ENABLE = yes
+CONSOLE_ENABLE = yes
+EXTRAKEY_ENABLE = yes
+MOUSEKEY_ENABLE = yes
+NKRO_ENABLE = yes
+TAP_DANCE_ENABLE = yes
+UNICODEMAP_ENABLE = yes
+
+# Keyboard-specific features
+BACKLIGHT_ENABLE = no
+VISUALIZER_ENABLE = no
+
+# Firmware size reduction
+GRAVE_ESC_ENABLE = no
+MAGIC_ENABLE = no
+SPACE_CADET_ENABLE = no
diff --git a/keyboards/input_club/whitefox/keymaps/matt3o/keymap.c b/keyboards/input_club/whitefox/keymaps/matt3o/keymap.c
new file mode 100644
index 0000000000..bb84196684
--- /dev/null
+++ b/keyboards/input_club/whitefox/keymaps/matt3o/keymap.c
@@ -0,0 +1,95 @@
+/*
+Copyright 2015 Jun Wako <wakojun@gmail.com>
+
+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 custom_keycodes {
+ AL_FILE = SAFE_RANGE,
+ AL_WWW,
+ AL_HELP,
+ AL_CMD
+};
+
+const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Layer 0: Default Layer
+ * ,---------------------------------------------------------------.
+ * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| `|Ins|
+ * |---------------------------------------------------------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]|Backs|Del|
+ * |---------------------------------------------------------------|
+ * |CapsLo| A| S| D| F| G| H| J| K| L| ;| '|Enter |PgU|
+ * |---------------------------------------------------------------|
+ * |Shif| | Z| X| C| V| B| N| M| ,| .| /|Shift |Up |PgD|
+ * |---------------------------------------------------------------|
+ * |Ctrl|Gui |Alt | Space |Fn0 |Alt |Gui | |Lef|Dow|Rig|
+ * `---------------------------------------------------------------'
+ */
+ [0] = LAYOUT( \
+ 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_BSLS,KC_GRV, KC_MUTE,\
+ 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_BSPC, KC_DEL, \
+ MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,KC_NUHS,KC_ENT, KC_PGUP,\
+ KC_LSFT,KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT, KC_UP, KC_PGDN,\
+ KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,MO(2), KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT \
+ ),
+ [1] = LAYOUT( \
+ KC_TRNS,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_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_DEL , KC_INS ,\
+ 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_VOLU,\
+ 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_PGUP,KC_VOLD,\
+ KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_HOME,KC_PGDN,KC_END \
+ ),
+ [2] = LAYOUT( \
+ KC_SLEP,KC_P1, KC_P2, KC_P3, KC_P4, KC_P5, KC_P6, KC_P7, KC_P8, KC_P9, KC_P0, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_NO, \
+ KC_TRNS,KC_TRNS,AL_WWW ,AL_HELP ,KC_TRNS,AL_CMD ,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PSCR,KC_TRNS,KC_TRNS,KC_TRNS, KC_NO, \
+ KC_CAPS,KC_TRNS,KC_TRNS,KC_TRNS,AL_FILE ,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_CALC,KC_TRNS,KC_TRNS,KC_TRNS,KC_MAIL,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 \
+ ),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case AL_FILE:
+ if (record->event.pressed) {
+ host_consumer_send(0x1B4); // AL File Browser
+ } else {
+ host_consumer_send(0);
+ }
+ return false;
+ case AL_WWW:
+ if (record->event.pressed) {
+ host_consumer_send(0x196); // AL Internet Browser
+ } else {
+ host_consumer_send(0);
+ }
+ return false;
+ case AL_HELP:
+ if (record->event.pressed) {
+ host_consumer_send(0x1A6); // AL Integrated Help Center
+ } else {
+ host_consumer_send(0);
+ }
+ return false;
+ case AL_CMD:
+ if (record->event.pressed) {
+ host_consumer_send(0x1A0); // AL Command Line Processor/Run
+ } else {
+ host_consumer_send(0);
+ }
+ return false;
+ }
+ return true;
+}
diff --git a/keyboards/input_club/whitefox/keymaps/mattrighetti/keymap.c b/keyboards/input_club/whitefox/keymaps/mattrighetti/keymap.c
new file mode 100644
index 0000000000..67aed537dd
--- /dev/null
+++ b/keyboards/input_club/whitefox/keymaps/mattrighetti/keymap.c
@@ -0,0 +1,81 @@
+
+ /*
+ Copyright 2021 Mattia Righetti
+
+ 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] = {
+ /* Base layer
+ * β”Œβ”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”
+ * β”‚Escβ”‚ 1 β”‚ 2 β”‚ 3 β”‚ 4 β”‚ 5 β”‚ 6 β”‚ 7 β”‚ 8 β”‚ 9 β”‚ 0 β”‚ - β”‚ = β”‚ \ β”‚ ` β”‚ β”‚
+ * β”œβ”€β”€β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ Tab β”‚ Q β”‚ W β”‚ E β”‚ R β”‚ T β”‚ Y β”‚ U β”‚ I β”‚ O β”‚ P β”‚ [ β”‚ ] β”‚Bspc β”‚Delβ”‚
+ * β”œβ”€β”€β”€β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚Caps β”‚ A β”‚ S β”‚ D β”‚ F β”‚ G β”‚ H β”‚ J β”‚ K β”‚ L β”‚ ; β”‚ ' β”‚ Enter β”‚PgUβ”‚
+ * β”œβ”€β”€β”€β”€β”€β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”€β”¬β”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ LShift β”‚ Z β”‚ X β”‚ C β”‚ V β”‚ B β”‚ N β”‚ M β”‚ , β”‚ . β”‚ / β”‚RSfRCtβ”‚ ↑ β”‚PgDβ”‚
+ * β”œβ”€β”€β”€β”€β”¬β”€β”€β”€β”΄β”¬β”€β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”¬β”΄β”€β”€β”€β”Όβ”€β”€β”€β”΄β”¬β”€β”¬β”€β”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚LCtlβ”‚LAltβ”‚LGUIβ”‚ Space β”‚RAltβ”‚Lay1β”‚ β”‚ ← β”‚ ↓ β”‚ β†’ β”‚
+ * β””β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”˜
+ */
+ [0] = LAYOUT_truefox(
+ 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_GRV, KC_BSLS, _______,
+ 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_BSPC, KC_DEL,
+ KC_CAPS, 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_PGUP,
+ 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_UP, KC_PGDN,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ /* Function layer
+ * β”Œβ”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”
+ * β”‚ β”‚F1 β”‚F2 β”‚F3 β”‚F4 β”‚F5 β”‚F6 β”‚F7 β”‚F8 β”‚F9 β”‚F10β”‚F11β”‚F12β”‚ β”‚ β”‚ β”‚
+ * β”œβ”€β”€β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€
+ * β”‚ β”‚ β”‚ ↑ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚Resetβ”‚ β”‚
+ * β”œβ”€β”€β”€β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€
+ * β”‚ β”‚ ← β”‚ ↓ β”‚ β†’ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
+ * β”œβ”€β”€β”€β”€β”€β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”€β”¬β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€
+ * β”‚ β”‚VoUβ”‚VoDβ”‚VoMβ”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
+ * β”œβ”€β”€β”€β”€β”¬β”€β”€β”€β”΄β”¬β”€β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”¬β”΄β”€β”€β”€β”Όβ”€β”€β”€β”΄β”¬β”€β”¬β”€β”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€
+ * β”‚ β”‚ β”‚ β”‚ β”‚Lay2β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
+ * β””β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”˜
+ */
+ [1] = LAYOUT_truefox(
+ _______, 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_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, MO(2), KC_TRNS, _______, _______, _______
+ ),
+ /* Third layer
+ * β”Œβ”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
+ * β”œβ”€β”€β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ β”‚1 β”‚2 β”‚3 β”‚4 β”‚5 β”‚6 β”‚7 β”‚8 β”‚9 β”‚0 β”‚ β”‚ β”‚ β”‚ β”‚
+ * β”œβ”€β”€β”€β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
+ * β”œβ”€β”€β”€β”€β”€β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”€β”¬β”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
+ * β”œβ”€β”€β”€β”€β”¬β”€β”€β”€β”΄β”¬β”€β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”¬β”΄β”€β”€β”€β”Όβ”€β”€β”€β”΄β”¬β”€β”¬β”€β”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
+ * β””β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”˜
+ */
+ [2] = LAYOUT_truefox(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/input_club/whitefox/keymaps/mattrighetti/rules.mk b/keyboards/input_club/whitefox/keymaps/mattrighetti/rules.mk
new file mode 100644
index 0000000000..7a421cc9ae
--- /dev/null
+++ b/keyboards/input_club/whitefox/keymaps/mattrighetti/rules.mk
@@ -0,0 +1,10 @@
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+
+# Keyboard-specific features
+BACKLIGHT_ENABLE = no
+VISUALIZER_ENABLE = no
+
+# Firmware size reduction
+GRAVE_ESC_ENABLE = no
+MAGIC_ENABLE = no
+SPACE_CADET_ENABLE = no
diff --git a/keyboards/input_club/whitefox/mcuconf.h b/keyboards/input_club/whitefox/mcuconf.h
new file mode 100644
index 0000000000..28f3c6cdae
--- /dev/null
+++ b/keyboards/input_club/whitefox/mcuconf.h
@@ -0,0 +1,54 @@
+/*
+ ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+#ifndef _MCUCONF_H_
+#define _MCUCONF_H_
+
+#define K20x_MCUCONF
+
+/*
+ * HAL driver system settings.
+ */
+
+/* Select the MCU clocking mode below by enabling the appropriate block. */
+
+#define KINETIS_NO_INIT FALSE
+
+/* PEE mode - 48MHz system clock driven by external crystal. */
+#define KINETIS_MCG_MODE KINETIS_MCG_MODE_PEE
+#define KINETIS_PLLCLK_FREQUENCY 72000000UL
+#define KINETIS_SYSCLK_FREQUENCY 72000000UL
+#define KINETIS_BUSCLK_FREQUENCY 36000000UL
+#define KINETIS_FLASHCLK_FREQUENCY 24000000UL
+
+/*
+ * SERIAL driver system settings.
+ */
+#define KINETIS_SERIAL_USE_UART0 TRUE
+
+/*
+ * USB driver settings
+ */
+#define KINETIS_USB_USE_USB0 TRUE
+#define KINETIS_USB_USB0_IRQ_PRIORITY 5
+
+/*
+ * I2C driver settings
+ */
+#define KINETIS_I2C_USE_I2C0 TRUE
+#define KINETIS_I2C_I2C0_PRIORITY 4
+
+#endif /* _MCUCONF_H_ */
diff --git a/keyboards/input_club/whitefox/readme.md b/keyboards/input_club/whitefox/readme.md
new file mode 100644
index 0000000000..d6676f6ce7
--- /dev/null
+++ b/keyboards/input_club/whitefox/readme.md
@@ -0,0 +1,17 @@
+# WhiteFox
+
+A compact 65% keyboard.
+
+* Keyboard Maintainer: QMK Community
+* Hardware Supported: Whitefox PCB
+* Hardware Availability: https://input.club/whitefox/
+
+Make example for this keyboard (after setting up your build environment):
+
+ make input_club/whitefox:default
+
+Flashing example for this keyboard:
+
+ make input_club/whitefox:default:flash
+
+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).
diff --git a/keyboards/input_club/whitefox/rules.mk b/keyboards/input_club/whitefox/rules.mk
new file mode 100644
index 0000000000..dfdb5845ab
--- /dev/null
+++ b/keyboards/input_club/whitefox/rules.mk
@@ -0,0 +1,32 @@
+# MCU name
+MCU = MK20DX256
+
+# Bootloader selection
+BOOTLOADER = kiibohd
+
+# Board: it should exist either in <chibios>/os/hal/boards/
+# or <this_dir>/boards
+# This board was copied from PJRC_TEENSY_3_1. The only difference should be a
+# hack to ensure the watchdog has started before trying to disable it, and an
+# override to disable restart of USB driver after returning from suspend.
+BOARD = IC_TEENSY_3_1
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes # 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 # Enable N-Key Rollover
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
+
+LED_MATRIX_ENABLE = yes
+LED_MATRIX_DRIVER = IS31FL3731
+
+LAYOUTS = 65_ansi 65_ansi_blocker 65_ansi_blocker_split_bs 65_iso 65_iso_blocker 65_iso_blocker_split_bs
+
+# Enter lower-power sleep mode when on the ChibiOS idle thread
+OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE
diff --git a/keyboards/input_club/whitefox/whitefox.c b/keyboards/input_club/whitefox/whitefox.c
new file mode 100644
index 0000000000..99c59f7732
--- /dev/null
+++ b/keyboards/input_club/whitefox/whitefox.c
@@ -0,0 +1,94 @@
+/*
+Copyright 2012,2013 Jun Wako <wakojun@gmail.com>
+
+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 "whitefox.h"
+
+#ifdef LED_MATRIX_ENABLE
+const is31_led PROGMEM g_is31_leds[DRIVER_LED_TOTAL] = {
+// The numbers in the comments are the led numbers DXX on the PCB
+/* Refer to IS31 manual for these locations
+ * driver
+ * | LED address
+ * | | */
+// 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
+ { 0, C1_1 }, { 0, C1_2 }, { 0, C1_3 }, { 0, C1_4 }, { 0, C1_5 }, { 0, C1_6 }, { 0, C1_7 }, { 0, C1_8 }, { 0, C2_1 }, { 0, C2_2 }, { 0, C2_3 }, { 0, C2_4 }, { 0, C2_5 }, { 0, C2_6 }, { 0, C2_7 }, { 0, C2_8 },
+// 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
+ { 0, C3_1 }, { 0, C3_2 }, { 0, C3_3 }, { 0, C3_4 }, { 0, C3_5 }, { 0, C3_6 }, { 0, C3_7 }, { 0, C3_8 }, { 0, C4_1 }, { 0, C4_2 }, { 0, C4_3 }, { 0, C4_4 }, { 0, C4_5 }, { 0, C4_6 }, { 0, C4_7 },
+// 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
+ { 0, C4_8 }, { 0, C5_1 }, { 0, C5_2 }, { 0, C5_3 }, { 0, C5_4 }, { 0, C5_5 }, { 0, C5_6 }, { 0, C5_7 }, { 0, C5_8 }, { 0, C6_1 }, { 0, C6_2 }, { 0, C6_3 }, { 0, C6_4 }, { 0, C6_5 }, { 0, C6_6 },
+// 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
+ { 0, C6_7 }, { 0, C6_8 }, { 0, C7_1 }, { 0, C7_2 }, { 0, C7_3 }, { 0, C7_4 }, { 0, C7_5 }, { 0, C7_6 }, { 0, C7_7 }, { 0, C7_8 }, { 0, C8_1 }, { 0, C8_2 }, { 0, C8_3 }, { 0, C8_4 }, { 0, C8_5 },
+// 62 63 64 65 66 67 68 69 70 71
+ { 0, C8_6 }, { 0, C8_7 }, { 0, C8_8 }, { 0, C9_1 }, { 0, C9_2 }, { 0, C9_3 }, { 0, C9_4 }, { 0, C9_5 }, { 0, C9_6 }, { 0, C9_7 },
+};
+
+led_config_t g_led_config = {
+ {
+ // Key Matrix to LED Index
+ { 0, 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, NO_LED },
+ }, {
+ // LED Index to Physical Position
+ { 0, 0 }, { 15, 0 }, { 30, 0 }, { 45, 0 }, { 60, 0 }, { 75, 0 }, { 90, 0 }, { 105, 0 }, { 119, 0 }, { 134, 0 }, { 149, 0 }, { 164, 0 }, { 179, 0 }, { 194, 0 }, { 209, 0 }, { 224, 0 },
+ { 4, 16 }, { 22, 16 }, { 37, 16 }, { 52, 16 }, { 67, 16 }, { 82, 16 }, { 97, 16 }, { 112, 16 }, { 127, 16 }, { 142, 16 }, { 157, 16 }, { 172, 16 }, { 187, 16 }, { 205, 16 }, { 224, 16 },
+ { 6, 32 }, { 26, 32 }, { 41, 32 }, { 56, 32 }, { 71, 32 }, { 86, 32 }, { 101, 32 }, { 116, 32 }, { 131, 32 }, { 146, 32 }, { 161, 32 }, { 175, 32 }, { 190, 32 }, { 207, 32 }, { 224, 32 },
+ { 2, 48 }, { 19, 48 }, { 34, 48 }, { 49, 48 }, { 63, 48 }, { 78, 48 }, { 93, 48 }, { 108, 48 }, { 123, 48 }, { 138, 48 }, { 153, 48 }, { 168, 48 }, { 189, 48 }, { 209, 48 }, { 224, 48 },
+ { 2, 64 }, { 21, 64 }, { 39, 64 }, { 95, 64 }, { 149, 64 }, { 164, 64 }, { 179, 64 }, { 194, 64 }, { 209, 64 }, { 224, 64 }
+ }, {
+ // LED Index to Flag
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1,
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1,
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ }
+};
+#endif
+
+void keyboard_pre_init_kb(void) {
+#ifdef LED_MATRIX_ENABLE
+ // Turn on LED controller
+ setPinOutput(B16);
+ writePinHigh(B16);
+#endif
+ keyboard_pre_init_user();
+}
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+#ifdef LED_MATRIX_ENABLE
+ /*
+ * Since K20x is stuck with a 32 byte EEPROM (see tmk_core/common/chibios/eeprom_teensy.c),
+ * and neither led_matrix_eeconfig.speed or .flags fit in this boundary, just force their values to default on boot.
+ */
+# if !defined(LED_MATRIX_STARTUP_SPD)
+# define LED_MATRIX_STARTUP_SPD UINT8_MAX / 2
+# endif
+ led_matrix_set_speed(LED_MATRIX_STARTUP_SPD),
+ led_matrix_set_flags(LED_FLAG_ALL);
+#endif
+
+ matrix_init_user();
+}
diff --git a/keyboards/input_club/whitefox/whitefox.h b/keyboards/input_club/whitefox/whitefox.h
new file mode 100644
index 0000000000..7e6648e5e7
--- /dev/null
+++ b/keyboards/input_club/whitefox/whitefox.h
@@ -0,0 +1,238 @@
+/*
+Copyright 2014 Jun Wako <wakojun@gmail.com>
+
+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"
+
+#define XXX KC_NO
+
+/*
+ * β”Œβ”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
+ * β”œβ”€β”€β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
+ * β”œβ”€β”€β”€β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
+ * β”œβ”€β”€β”€β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”΄β”¬β”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
+ * β”œβ”€β”€β”€β”€β”Όβ”€β”€β”€β”΄β”¬β”€β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”¬β”΄β”€β”€β”¬β”΄β”€β”€β”¬β”΄β”€β”€β”¬β”€β”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
+ * β””β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”˜
+ */
+#define LAYOUT_all( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k10, k11, k12, k13, k14, k15, k16, \
+ k17, k18, k20, k21, k22, k23, k24, k25, k26, k27, k28, k30, k31, k32, k33, \
+ k34, k35, k36, k37, k38, k40, k41, k42, k43, k44, k45, k46, k47, k48, k50, \
+ k51, k52, k53, k54, k55, k56, k57, k58, k60, k61, k62, k63, k64, k65, k66, \
+ k67, k68, k70, k71, k72, k73, k74, k75, k76, k77 \
+) { \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08 }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18 }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28 }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, k38 }, \
+ { k40, k41, k42, k43, k44, k45, k46, k47, k48 }, \
+ { k50, k51, k52, k53, k54, k55, k56, k57, k58 }, \
+ { k60, k61, k62, k63, k64, k65, k66, k67, k68 }, \
+ { k70, k71, k72, k73, k74, k75, k76, k77, XXX } \
+}
+
+/*
+ * β”Œβ”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
+ * β”œβ”€β”€β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
+ * β”œβ”€β”€β”€β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
+ * β”œβ”€β”€β”€β”€β”€β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”€β”¬β”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
+ * β”œβ”€β”€β”€β”€β”¬β”€β”€β”€β”΄β”¬β”€β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”¬β”΄β”€β”€β”¬β”΄β”€β”€β”¬β”΄β”€β”€β”¬β”€β”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
+ * β””β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”˜
+ */
+#define LAYOUT_65_ansi( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k10, k11, k12, k13, k15, k16, \
+ k17, k18, k20, k21, k22, k23, k24, k25, k26, k27, k28, k30, k31, k32, k33, \
+ k34, k35, k36, k37, k38, k40, k41, k42, k43, k44, k45, k46, k48, k50, \
+ k51, k53, k54, k55, k56, k57, k58, k60, k61, k62, k63, k64, k65, k66, \
+ k67, k68, k70, k71, k72, k73, k74, k75, k76, k77 \
+) { \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08 }, \
+ { k10, k11, k12, k13, XXX, k15, k16, k17, k18 }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28 }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, k38 }, \
+ { k40, k41, k42, k43, k44, k45, k46, XXX, k48 }, \
+ { k50, k51, XXX, k53, k54, k55, k56, k57, k58 }, \
+ { k60, k61, k62, k63, k64, k65, k66, k67, k68 }, \
+ { k70, k71, k72, k73, k74, k75, k76, k77, XXX } \
+}
+
+/*
+ * β”Œβ”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
+ * β”œβ”€β”€β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
+ * β”œβ”€β”€β”€β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
+ * β”œβ”€β”€β”€β”€β”€β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”€β”¬β”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
+ * β”œβ”€β”€β”€β”€β”¬β”€β”€β”€β”΄β”¬β”€β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”¬β”΄β”€β”€β”€β”Όβ”€β”€β”€β”΄β”¬β”€β”¬β”€β”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
+ * β””β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”˜
+ */
+#define LAYOUT_65_ansi_blocker( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k10, k11, k12, k13, k15, k16, \
+ k17, k18, k20, k21, k22, k23, k24, k25, k26, k27, k28, k30, k31, k32, k33, \
+ k34, k35, k36, k37, k38, k40, k41, k42, k43, k44, k45, k46, k48, k50, \
+ k51, k53, k54, k55, k56, k57, k58, k60, k61, k62, k63, k64, k65, k66, \
+ k67, k68, k70, k71, k72, k73, k75, k76, k77 \
+) { \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08 }, \
+ { k10, k11, k12, k13, XXX, k15, k16, k17, k18 }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28 }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, k38 }, \
+ { k40, k41, k42, k43, k44, k45, k46, XXX, k48 }, \
+ { k50, k51, XXX, k53, k54, k55, k56, k57, k58 }, \
+ { k60, k61, k62, k63, k64, k65, k66, k67, k68 }, \
+ { k70, k71, k72, k73, XXX, k75, k76, k77, XXX } \
+}
+
+/*
+ * β”Œβ”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
+ * β”œβ”€β”€β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
+ * β”œβ”€β”€β”€β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
+ * β”œβ”€β”€β”€β”€β”€β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”€β”¬β”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
+ * β”œβ”€β”€β”€β”€β”¬β”€β”€β”€β”΄β”¬β”€β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”¬β”΄β”€β”€β”€β”Όβ”€β”€β”€β”΄β”¬β”€β”¬β”€β”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
+ * β””β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”˜
+ */
+#define LAYOUT_65_ansi_blocker_split_bs( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k10, k11, k12, k13, k14, k15, k16, \
+ k17, k18, k20, k21, k22, k23, k24, k25, k26, k27, k28, k30, k31, k32, k33, \
+ k34, k35, k36, k37, k38, k40, k41, k42, k43, k44, k45, k46, k48, k50, \
+ k51, k53, k54, k55, k56, k57, k58, k60, k61, k62, k63, k64, k65, k66, \
+ k67, k68, k70, k71, k72, k73, k75, k76, k77 \
+) { \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08 }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18 }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28 }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, k38 }, \
+ { k40, k41, k42, k43, k44, k45, k46, XXX, k48 }, \
+ { k50, k51, XXX, k53, k54, k55, k56, k57, k58 }, \
+ { k60, k61, k62, k63, k64, k65, k66, k67, k68 }, \
+ { k70, k71, k72, k73, XXX, k75, k76, k77, XXX } \
+}
+
+/*
+ * β”Œβ”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
+ * β”œβ”€β”€β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
+ * β”œβ”€β”€β”€β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β” β”œβ”€β”€β”€β”€
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
+ * β”œβ”€β”€β”€β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”΄β”¬β”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
+ * β”œβ”€β”€β”€β”€β”Όβ”€β”€β”€β”΄β”¬β”€β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”¬β”΄β”€β”€β”¬β”΄β”€β”€β”¬β”΄β”€β”€β”¬β”€β”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
+ * β””β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”˜
+ */
+#define LAYOUT_65_iso( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k10, k11, k12, k13, k15, k16, \
+ k17, k18, k20, k21, k22, k23, k24, k25, k26, k27, k28, k30, k31, k33, \
+ k34, k35, k36, k37, k38, k40, k41, k42, k43, k44, k45, k46, k47, k48, k50, \
+ k51, k52, k53, k54, k55, k56, k57, k58, k60, k61, k62, k63, k64, k65, k66, \
+ k67, k68, k70, k71, k72, k73, k74, k75, k76, k77 \
+) { \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08 }, \
+ { k10, k11, k12, k13, XXX, k15, k16, k17, k18 }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28 }, \
+ { k30, k31, XXX, k33, k34, k35, k36, k37, k38 }, \
+ { k40, k41, k42, k43, k44, k45, k46, k47, k48 }, \
+ { k50, k51, k52, k53, k54, k55, k56, k57, k58 }, \
+ { k60, k61, k62, k63, k64, k65, k66, k67, k68 }, \
+ { k70, k71, k72, k73, k74, k75, k76, k77, XXX } \
+}
+
+/*
+ * β”Œβ”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
+ * β”œβ”€β”€β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
+ * β”œβ”€β”€β”€β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β” β”œβ”€β”€β”€β”€
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
+ * β”œβ”€β”€β”€β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”΄β”¬β”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
+ * β”œβ”€β”€β”€β”€β”Όβ”€β”€β”€β”΄β”¬β”€β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”¬β”΄β”€β”€β”€β”Όβ”€β”€β”€β”΄β”¬β”€β”¬β”€β”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
+ * β””β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”˜
+ */
+#define LAYOUT_65_iso_blocker( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k10, k11, k12, k13, k15, k16, \
+ k17, k18, k20, k21, k22, k23, k24, k25, k26, k27, k28, k30, k31, k33, \
+ k34, k35, k36, k37, k38, k40, k41, k42, k43, k44, k45, k46, k47, k48, k50, \
+ k51, k52, k53, k54, k55, k56, k57, k58, k60, k61, k62, k63, k64, k65, k66, \
+ k67, k68, k70, k71, k72, k73, k75, k76, k77 \
+) { \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08 }, \
+ { k10, k11, k12, k13, XXX, k15, k16, k17, k18 }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28 }, \
+ { k30, k31, XXX, k33, k34, k35, k36, k37, k38 }, \
+ { k40, k41, k42, k43, k44, k45, k46, k47, k48 }, \
+ { k50, k51, k52, k53, k54, k55, k56, k57, k58 }, \
+ { k60, k61, k62, k63, k64, k65, k66, k67, k68 }, \
+ { k70, k71, k72, k73, XXX, k75, k76, k77, XXX } \
+}
+
+/*
+ * β”Œβ”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
+ * β”œβ”€β”€β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
+ * β”œβ”€β”€β”€β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β”¬β”€β”€β”΄β” β”œβ”€β”€β”€β”€
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
+ * β”œβ”€β”€β”€β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”΄β”¬β”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
+ * β”œβ”€β”€β”€β”€β”Όβ”€β”€β”€β”΄β”¬β”€β”€β”΄β”€β”¬β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”¬β”΄β”€β”€β”€β”Όβ”€β”€β”€β”΄β”¬β”€β”¬β”€β”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”€
+ * β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
+ * β””β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”˜
+ */
+#define LAYOUT_65_iso_blocker_split_bs( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k10, k11, k12, k13, k14, k15, k16, \
+ k17, k18, k20, k21, k22, k23, k24, k25, k26, k27, k28, k30, k31, k33, \
+ k34, k35, k36, k37, k38, k40, k41, k42, k43, k44, k45, k46, k47, k48, k50, \
+ k51, k52, k53, k54, k55, k56, k57, k58, k60, k61, k62, k63, k64, k65, k66, \
+ k67, k68, k70, k71, k72, k73, k75, k76, k77 \
+) { \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08 }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18 }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28 }, \
+ { k30, k31, XXX, k33, k34, k35, k36, k37, k38 }, \
+ { k40, k41, k42, k43, k44, k45, k46, k47, k48 }, \
+ { k50, k51, k52, k53, k54, k55, k56, k57, k58 }, \
+ { k60, k61, k62, k63, k64, k65, k66, k67, k68 }, \
+ { k70, k71, k72, k73, XXX, k75, k76, k77, XXX } \
+}
+
+#define LAYOUT LAYOUT_all
+#define LAYOUT_aria LAYOUT_65_ansi_blocker
+#define LAYOUT_iso LAYOUT_65_iso
+#define LAYOUT_truefox LAYOUT_65_ansi_blocker_split_bs
+#define LAYOUT_vanilla LAYOUT_65_ansi