aboutsummaryrefslogtreecommitdiffstats
path: root/keyboards
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards')
-rw-r--r--keyboards/40percentclub/mf68/keymaps/delivrance/config.h42
-rw-r--r--keyboards/40percentclub/mf68/keymaps/delivrance/keymap.c232
-rw-r--r--keyboards/40percentclub/mf68/keymaps/delivrance/readme.md38
-rw-r--r--keyboards/40percentclub/mf68/keymaps/delivrance/rules.mk10
-rw-r--r--keyboards/ai03/soyuz/config.h79
-rw-r--r--keyboards/ai03/soyuz/keymaps/mrsendyyk/keymap.c32
-rw-r--r--keyboards/ai03/soyuz/keymaps/mrsendyyk/readme.md12
-rw-r--r--keyboards/ai03/soyuz/keymaps/via/keymap.c59
-rw-r--r--keyboards/ai03/soyuz/keymaps/via/rules.mk1
-rw-r--r--keyboards/basekeys/slice/config.h4
-rw-r--r--keyboards/basekeys/slice/keymaps/default/config.h30
-rw-r--r--keyboards/basekeys/slice/keymaps/default/keymap.c15
-rw-r--r--keyboards/basekeys/slice/keymaps/default_split_left_space/config.h30
-rw-r--r--keyboards/basekeys/slice/keymaps/default_split_left_space/keymap.c15
-rw-r--r--keyboards/basekeys/slice/rev1/config.h3
-rw-r--r--keyboards/basekeys/slice/rev1/keymaps/2moons/config.h30
-rw-r--r--keyboards/basekeys/slice/rev1/keymaps/2moons/keymap.c15
-rw-r--r--keyboards/basekeys/slice/rev1/keymaps/default_all/config.h30
-rw-r--r--keyboards/basekeys/slice/rev1/keymaps/default_all/keymap.c15
-rw-r--r--keyboards/basekeys/slice/rev1/keymaps/default_split_backspace/config.h30
-rw-r--r--keyboards/basekeys/slice/rev1/keymaps/default_split_backspace/keymap.c15
-rw-r--r--keyboards/basekeys/slice/rev1/keymaps/via/config.h22
-rw-r--r--keyboards/basekeys/slice/rev1/keymaps/via/keymap.c85
-rw-r--r--keyboards/basekeys/slice/rev1/keymaps/via/rules.mk3
-rw-r--r--keyboards/basekeys/slice/rev1/rev1.c15
-rw-r--r--keyboards/basekeys/slice/rev1/rev1.h15
-rw-r--r--keyboards/basekeys/slice/rev1_rgb/config.h4
-rw-r--r--keyboards/basekeys/slice/rev1_rgb/keymaps/2moons_rgb/config.h30
-rw-r--r--keyboards/basekeys/slice/rev1_rgb/keymaps/2moons_rgb/keymap.c15
-rw-r--r--keyboards/basekeys/slice/rev1_rgb/rev1_rgb.c15
-rw-r--r--keyboards/basekeys/slice/rev1_rgb/rev1_rgb.h15
-rw-r--r--keyboards/basekeys/slice/slice.c15
-rw-r--r--keyboards/basekeys/slice/slice.h15
-rw-r--r--keyboards/basekeys/slice/slice_font.c15
-rw-r--r--keyboards/basekeys/trifecta/config.h123
-rw-r--r--keyboards/basekeys/trifecta/info.json12
-rw-r--r--keyboards/basekeys/trifecta/keymaps/default/keymap.c71
-rw-r--r--keyboards/basekeys/trifecta/keymaps/default/rules.mk2
-rw-r--r--keyboards/basekeys/trifecta/keymaps/via/keymap.c71
-rw-r--r--keyboards/basekeys/trifecta/keymaps/via/rules.mk3
-rw-r--r--keyboards/basekeys/trifecta/readme.md17
-rw-r--r--keyboards/basekeys/trifecta/rules.mk24
-rw-r--r--keyboards/basekeys/trifecta/trifecta.c61
-rw-r--r--keyboards/basekeys/trifecta/trifecta.h48
-rw-r--r--keyboards/bear_65/bear_65.c17
-rw-r--r--keyboards/bear_65/bear_65.h46
-rw-r--r--keyboards/bear_65/config.h76
-rw-r--r--keyboards/bear_65/info.json15
-rw-r--r--keyboards/bear_65/keymaps/default/keymap.c39
-rw-r--r--keyboards/bear_65/keymaps/default/readme.md1
-rw-r--r--keyboards/bear_65/keymaps/via/keymap.c47
-rw-r--r--keyboards/bear_65/keymaps/via/readme.md1
-rw-r--r--keyboards/bear_65/keymaps/via/rules.mk1
-rw-r--r--keyboards/bear_65/readme.md19
-rw-r--r--keyboards/bear_65/rules.mk24
-rw-r--r--keyboards/bm60rgb_iso/bm60rgb_iso.c8
-rw-r--r--keyboards/boardsource/4x12/config.h2
-rw-r--r--keyboards/coseyfannitutti/discipad/keymaps/via/rules.mk1
-rw-r--r--keyboards/coseyfannitutti/discipline/keymaps/via/rules.mk3
-rw-r--r--keyboards/coseyfannitutti/mysterium/info.json8
-rw-r--r--keyboards/coseyfannitutti/mysterium/keymaps/ansi_7u/keymap.c (renamed from keyboards/coseyfannitutti/mysterium/keymaps/tsangan/keymap.c)4
-rw-r--r--keyboards/coseyfannitutti/mysterium/keymaps/iso/keymap.c34
-rw-r--r--keyboards/coseyfannitutti/mysterium/keymaps/via/keymap.c34
-rw-r--r--keyboards/coseyfannitutti/mysterium/keymaps/via/rules.mk2
-rw-r--r--keyboards/coseyfannitutti/mysterium/mysterium.h36
-rw-r--r--keyboards/coseyfannitutti/romeo/keymaps/via/rules.mk3
-rw-r--r--keyboards/crkbd/keymaps/bcat/keymap.c8
-rw-r--r--keyboards/crkbd/keymaps/bcat/readme.md9
-rw-r--r--keyboards/dm9records/plaid/keymaps/default/keymap.c4
-rw-r--r--keyboards/dm9records/plaid/keymaps/stephen-huan/config.h19
-rw-r--r--keyboards/dm9records/plaid/keymaps/stephen-huan/keymap.c356
-rw-r--r--keyboards/dm9records/plaid/keymaps/stephen-huan/readme.md1
-rw-r--r--keyboards/donutcables/budget96/config.h10
-rw-r--r--keyboards/donutcables/budget96/keymaps/donut/config.h28
-rw-r--r--keyboards/donutcables/budget96/keymaps/donut/keymap.c171
-rw-r--r--keyboards/donutcables/budget96/keymaps/donut/readme.md3
-rw-r--r--keyboards/donutcables/budget96/keymaps/donut/rules.mk7
-rw-r--r--keyboards/donutcables/budget96/readme.md6
-rw-r--r--keyboards/doodboard/duckboard/config.h57
-rw-r--r--keyboards/doodboard/duckboard/duckboard.c17
-rw-r--r--keyboards/doodboard/duckboard/duckboard.h34
-rw-r--r--keyboards/doodboard/duckboard/info.json36
-rw-r--r--keyboards/doodboard/duckboard/keymaps/default/keymap.c118
-rw-r--r--keyboards/doodboard/duckboard/readme.md17
-rw-r--r--keyboards/doodboard/duckboard/rules.mk25
-rw-r--r--keyboards/dz60/keymaps/mrsendyyk/keymap.c151
-rw-r--r--keyboards/dz60/keymaps/mrsendyyk/readme.md78
-rw-r--r--keyboards/dztech/dz65rgb/keymaps/pagondel/keymap.c65
-rw-r--r--keyboards/dztech/dz65rgb/keymaps/pagondel/readme.md35
-rw-r--r--keyboards/ergodox_ez/keymaps/stamm/config.h40
-rw-r--r--keyboards/ergodox_ez/keymaps/stamm/keymap.c308
-rw-r--r--keyboards/ergodox_ez/keymaps/stamm/readme.md117
-rw-r--r--keyboards/ergodox_ez/keymaps/stamm/rules.mk8
-rw-r--r--keyboards/ergodox_infinity/ergodox_infinity.c85
-rw-r--r--keyboards/fjlabs/bolsa65/bolsa65.c28
-rw-r--r--keyboards/fjlabs/bolsa65/bolsa65.h32
-rw-r--r--keyboards/fjlabs/bolsa65/config.h108
-rw-r--r--keyboards/fjlabs/bolsa65/info.json84
-rw-r--r--keyboards/fjlabs/bolsa65/keymaps/default/keymap.c39
-rw-r--r--keyboards/fjlabs/bolsa65/keymaps/via/keymap.c58
-rw-r--r--keyboards/fjlabs/bolsa65/keymaps/via/rules.mk1
-rw-r--r--keyboards/fjlabs/bolsa65/readme.md12
-rw-r--r--keyboards/fjlabs/bolsa65/rules.mk28
-rw-r--r--keyboards/flehrad/bigswitch/keymaps/via/keymap.c29
-rw-r--r--keyboards/flehrad/bigswitch/keymaps/via/rules.mk2
-rw-r--r--keyboards/gray_studio/hb85/config.h4
-rw-r--r--keyboards/gray_studio/hb85/keymaps/via/config.h20
-rw-r--r--keyboards/gray_studio/hb85/keymaps/via/keymap.c56
-rw-r--r--keyboards/gray_studio/hb85/keymaps/via/rules.mk2
-rw-r--r--keyboards/gray_studio/hb85/readme.md2
-rw-r--r--keyboards/handwired/3dp660/3dp660.c17
-rw-r--r--keyboards/handwired/3dp660/3dp660.h35
-rw-r--r--keyboards/handwired/3dp660/config.h51
-rw-r--r--keyboards/handwired/3dp660/info.json80
-rw-r--r--keyboards/handwired/3dp660/keymaps/default/keymap.c34
-rw-r--r--keyboards/handwired/3dp660/keymaps/via/keymap.c48
-rw-r--r--keyboards/handwired/3dp660/keymaps/via/rules.mk1
-rw-r--r--keyboards/handwired/3dp660/readme.md24
-rw-r--r--keyboards/handwired/3dp660/rules.mk23
-rw-r--r--keyboards/handwired/curiosity/config.h44
-rw-r--r--keyboards/handwired/curiosity/curiosity.c16
-rw-r--r--keyboards/handwired/curiosity/curiosity.h41
-rw-r--r--keyboards/handwired/curiosity/info.json25
-rw-r--r--keyboards/handwired/curiosity/keymaps/default/keymap.c33
-rw-r--r--keyboards/handwired/curiosity/readme.md13
-rw-r--r--keyboards/handwired/curiosity/rules.mk23
-rw-r--r--keyboards/handwired/onekey/blackpill_f401/config.h2
-rw-r--r--keyboards/handwired/onekey/blackpill_f401/halconf.h1
-rw-r--r--keyboards/handwired/onekey/blackpill_f401/mcuconf.h3
-rw-r--r--keyboards/handwired/onekey/blackpill_f401/rules.mk30
-rw-r--r--keyboards/handwired/onekey/blackpill_f411/config.h2
-rw-r--r--keyboards/handwired/onekey/blackpill_f411/halconf.h1
-rw-r--r--keyboards/handwired/onekey/blackpill_f411/mcuconf.h3
-rw-r--r--keyboards/handwired/onekey/blackpill_f411/rules.mk30
-rw-r--r--keyboards/handwired/onekey/rules.mk2
-rw-r--r--keyboards/handwired/riblee_f401/config.h8
-rw-r--r--keyboards/handwired/riblee_f401/keymaps/default/keymap.c33
-rw-r--r--keyboards/handwired/riblee_f401/keymaps/riblee/keymap.c341
-rw-r--r--keyboards/handwired/riblee_f401/keymaps/riblee/readme.md85
-rw-r--r--keyboards/handwired/riblee_f401/keymaps/riblee/rules.mk2
-rw-r--r--keyboards/handwired/riblee_f401/rules.mk36
-rw-r--r--keyboards/handwired/swiftrax/retropad/config.h64
-rw-r--r--keyboards/handwired/swiftrax/retropad/info.json12
-rw-r--r--keyboards/handwired/swiftrax/retropad/keymaps/default/keymap.c69
-rw-r--r--keyboards/handwired/swiftrax/retropad/keymaps/via/keymap.c69
-rw-r--r--keyboards/handwired/swiftrax/retropad/keymaps/via/rules.mk1
-rw-r--r--keyboards/handwired/swiftrax/retropad/readme.md13
-rw-r--r--keyboards/handwired/swiftrax/retropad/retropad.c16
-rw-r--r--keyboards/handwired/swiftrax/retropad/retropad.h31
-rw-r--r--keyboards/handwired/swiftrax/retropad/rules.mk23
-rw-r--r--keyboards/handwired/t111/chconf.h714
-rw-r--r--keyboards/handwired/t111/config.h92
-rw-r--r--keyboards/handwired/t111/halconf.h525
-rw-r--r--keyboards/handwired/t111/info.json12
-rw-r--r--keyboards/handwired/t111/keymaps/default/keymap.c50
-rw-r--r--keyboards/handwired/t111/keymaps/oleg/config.h20
-rw-r--r--keyboards/handwired/t111/keymaps/oleg/keymap.c145
-rw-r--r--keyboards/handwired/t111/keymaps/oleg/rules.mk1
-rw-r--r--keyboards/handwired/t111/mcuconf.h209
-rw-r--r--keyboards/handwired/t111/readme.md45
-rw-r--r--keyboards/handwired/t111/rules.mk29
-rw-r--r--keyboards/handwired/t111/t111.c17
-rw-r--r--keyboards/handwired/t111/t111.h57
-rw-r--r--keyboards/katana60/info.json13
-rw-r--r--keyboards/katana60/readme.md17
-rwxr-xr-xkeyboards/kbdfans/bella/soldered/config.h42
-rw-r--r--keyboards/kbdfans/bella/soldered/info.json12
-rwxr-xr-xkeyboards/kbdfans/bella/soldered/keymaps/default/keymap.c36
-rwxr-xr-xkeyboards/kbdfans/bella/soldered/keymaps/via/keymap.c51
-rw-r--r--keyboards/kbdfans/bella/soldered/keymaps/via/rules.mk2
-rwxr-xr-xkeyboards/kbdfans/bella/soldered/rules.mk22
-rwxr-xr-xkeyboards/kbdfans/bella/soldered/soldered.c28
-rwxr-xr-xkeyboards/kbdfans/bella/soldered/soldered.h34
-rw-r--r--keyboards/kbdfans/kbd67/mkii_soldered/info.json72
-rw-r--r--keyboards/kbdfans/kbd67/mkii_soldered/keymaps/king/keymap.c65
-rw-r--r--keyboards/kbdfans/kbd67/mkii_soldered/mkii_soldered.h21
-rw-r--r--keyboards/kbdfans/kbd75/keymaps/ethan605/keymap.c67
-rw-r--r--keyboards/keebio/iris/keymaps/dcompact/keymap.c21
-rw-r--r--keyboards/kingly_keys/romac_plus/config.h4
-rw-r--r--keyboards/kyria/kyria.c1
-rw-r--r--keyboards/kyria/rev1/rev1.c18
-rw-r--r--keyboards/lazydesigners/the30/keymaps/via/keymap.c39
-rw-r--r--keyboards/lazydesigners/the30/keymaps/via/rules.mk2
-rw-r--r--keyboards/lily58/keymaps/bcat/keymap.c8
-rw-r--r--keyboards/lily58/keymaps/bcat/readme.md2
-rw-r--r--keyboards/lily58/keymaps/drasbeck/config.h46
-rw-r--r--keyboards/lily58/keymaps/drasbeck/keymap.c166
-rw-r--r--keyboards/lily58/keymaps/drasbeck/readme.md14
-rw-r--r--keyboards/lily58/keymaps/drasbeck/rules.mk28
-rw-r--r--keyboards/lily58/keymaps/muuko/config.h42
-rw-r--r--keyboards/lily58/keymaps/muuko/keymap.c184
-rw-r--r--keyboards/lily58/keymaps/muuko/rules.mk4
-rw-r--r--keyboards/longnald/corin/config.h52
-rw-r--r--keyboards/longnald/corin/corin.c19
-rw-r--r--keyboards/longnald/corin/corin.h35
-rw-r--r--keyboards/longnald/corin/info.json77
-rw-r--r--keyboards/longnald/corin/keymaps/default/keymap.c49
-rw-r--r--keyboards/longnald/corin/readme.md15
-rw-r--r--keyboards/longnald/corin/rules.mk22
-rw-r--r--keyboards/majistic/config.h57
-rw-r--r--keyboards/majistic/info.json78
-rw-r--r--keyboards/majistic/keymaps/default/config.h17
-rw-r--r--keyboards/majistic/keymaps/default/keymap.c45
-rw-r--r--keyboards/majistic/keymaps/default/readme.md1
-rw-r--r--keyboards/majistic/majistic.c17
-rw-r--r--keyboards/majistic/majistic.h47
-rw-r--r--keyboards/majistic/readme.md15
-rw-r--r--keyboards/majistic/rules.mk (renamed from keyboards/katana60/rules.mk)21
-rw-r--r--keyboards/massdrop/alt/keymaps/default/keymap.c10
-rw-r--r--keyboards/massdrop/alt/keymaps/default_md/keymap.c14
-rw-r--r--keyboards/massdrop/alt/keymaps/mac/keymap.c10
-rw-r--r--keyboards/massdrop/alt/keymaps/mac_md/keymap.c10
-rw-r--r--keyboards/masterworks/classy_tkl/info.json279
-rw-r--r--keyboards/masterworks/classy_tkl/keymaps/default/config.h19
-rw-r--r--keyboards/masterworks/classy_tkl/keymaps/default/keymap.c29
-rw-r--r--keyboards/masterworks/classy_tkl/keymaps/default/readme.md1
-rw-r--r--keyboards/masterworks/classy_tkl/keymaps/default_tkl_ansi_wkl/config.h19
-rw-r--r--keyboards/masterworks/classy_tkl/keymaps/default_tkl_ansi_wkl/keymap.c29
-rw-r--r--keyboards/masterworks/classy_tkl/keymaps/default_tkl_ansi_wkl/readme.md1
-rw-r--r--keyboards/masterworks/classy_tkl/keymaps/default_tkl_iso_wkl/config.h19
-rw-r--r--keyboards/masterworks/classy_tkl/keymaps/default_tkl_iso_wkl/keymap.c29
-rw-r--r--keyboards/masterworks/classy_tkl/keymaps/default_tkl_iso_wkl/readme.md1
-rw-r--r--keyboards/masterworks/classy_tkl/keymaps/via/keymap.c50
-rw-r--r--keyboards/masterworks/classy_tkl/keymaps/via/rules.mk1
-rw-r--r--keyboards/masterworks/classy_tkl/readme.md15
-rw-r--r--keyboards/masterworks/classy_tkl/rev_a/config.h58
-rw-r--r--keyboards/masterworks/classy_tkl/rev_a/rev_a.c (renamed from keyboards/katana60/katana60.c)41
-rw-r--r--keyboards/masterworks/classy_tkl/rev_a/rev_a.h79
-rw-r--r--keyboards/masterworks/classy_tkl/rev_a/rules.mk26
-rw-r--r--keyboards/matrix/m20add/rules.mk27
-rw-r--r--keyboards/matrix/noah/info.json3
-rw-r--r--keyboards/matrix/noah/keymaps/rys/keymap.c59
-rw-r--r--keyboards/matrix/noah/noah.h14
-rw-r--r--keyboards/matrix/noah/rules.mk29
-rw-r--r--keyboards/mechlovin/hannah65/config.h49
-rw-r--r--keyboards/mechlovin/hannah65/hannah65.c35
-rw-r--r--keyboards/mechlovin/hannah65/hannah65.h25
-rw-r--r--keyboards/mechlovin/hannah65/mechlovin9/config.h5
-rw-r--r--keyboards/mechlovin/hannah65/mechlovin9/info.json80
-rw-r--r--keyboards/mechlovin/hannah65/mechlovin9/keymaps/default/keymap.c29
-rw-r--r--keyboards/mechlovin/hannah65/mechlovin9/keymaps/default/readme.md1
-rw-r--r--keyboards/mechlovin/hannah65/mechlovin9/keymaps/via/keymap.c50
-rw-r--r--keyboards/mechlovin/hannah65/mechlovin9/keymaps/via/rules.mk1
-rw-r--r--keyboards/mechlovin/hannah65/mechlovin9/mechlovin9.h33
-rw-r--r--keyboards/mechlovin/hannah65/mechlovin9/readme.md15
-rw-r--r--keyboards/mechlovin/hannah65/mechlovin9/rules.mk0
-rw-r--r--keyboards/mechlovin/hannah65/readme.md15
-rw-r--r--keyboards/mechlovin/hannah65/rev1/config.h5
-rw-r--r--keyboards/mechlovin/hannah65/rev1/info.json225
-rw-r--r--keyboards/mechlovin/hannah65/rev1/keymaps/default/keymap.c29
-rw-r--r--keyboards/mechlovin/hannah65/rev1/keymaps/default/readme.md1
-rw-r--r--keyboards/mechlovin/hannah65/rev1/keymaps/via/keymap.c50
-rw-r--r--keyboards/mechlovin/hannah65/rev1/keymaps/via/rules.mk1
-rw-r--r--keyboards/mechlovin/hannah65/rev1/rev1.h61
-rw-r--r--keyboards/mechlovin/hannah65/rev1/rules.mk0
-rw-r--r--keyboards/mechlovin/hannah65/rules.mk21
-rw-r--r--keyboards/melgeek/mj61/config.h19
-rw-r--r--keyboards/melgeek/mj61/info.json78
-rw-r--r--keyboards/melgeek/mj61/keymaps/default/keymap.c42
-rw-r--r--keyboards/melgeek/mj61/keymaps/via/keymap.c49
-rw-r--r--keyboards/melgeek/mj61/keymaps/via/rules.mk2
-rw-r--r--keyboards/melgeek/mj61/mj61.c124
-rw-r--r--keyboards/melgeek/mj61/mj61.h35
-rw-r--r--keyboards/melgeek/mj61/readme.md15
-rw-r--r--keyboards/melgeek/mj61/rev1/config.h70
-rw-r--r--keyboards/melgeek/mj61/rev1/rules.mk20
-rw-r--r--keyboards/metamechs/timberwolf/keymaps/a_ansi/keymap.c10
-rw-r--r--keyboards/metamechs/timberwolf/keymaps/a_iso/keymap.c10
-rw-r--r--keyboards/metamechs/timberwolf/keymaps/b_ansi/keymap.c10
-rw-r--r--keyboards/metamechs/timberwolf/keymaps/b_iso/keymap.c10
-rw-r--r--keyboards/metamechs/timberwolf/keymaps/default/keymap.c10
-rw-r--r--keyboards/metamechs/timberwolf/keymaps/prime_ansi/keymap.c10
-rw-r--r--keyboards/metamechs/timberwolf/keymaps/prime_iso/keymap.c10
-rw-r--r--keyboards/metamechs/timberwolf/keymaps/via/keymap.c10
-rw-r--r--keyboards/metamechs/timberwolf/timberwolf.c9
-rw-r--r--keyboards/minimacro5/config.h62
-rw-r--r--keyboards/minimacro5/info.json12
-rw-r--r--keyboards/minimacro5/keymaps/default/keymap.c46
-rw-r--r--keyboards/minimacro5/keymaps/media/keymap.c43
-rw-r--r--keyboards/minimacro5/minimacro5.c1
-rw-r--r--keyboards/minimacro5/minimacro5.h9
-rw-r--r--keyboards/minimacro5/readme.md15
-rw-r--r--keyboards/minimacro5/rules.mk23
-rw-r--r--keyboards/misterknife/knife66/chconf.h714
-rw-r--r--keyboards/misterknife/knife66/config.h55
-rw-r--r--keyboards/misterknife/knife66/halconf.h525
-rw-r--r--keyboards/misterknife/knife66/info.json12
-rw-r--r--keyboards/misterknife/knife66/keymaps/default/keymap.c39
-rw-r--r--keyboards/misterknife/knife66/knife66.c17
-rw-r--r--keyboards/misterknife/knife66/knife66.h35
-rw-r--r--keyboards/misterknife/knife66/mcuconf.h176
-rw-r--r--keyboards/misterknife/knife66/readme.md18
-rw-r--r--keyboards/misterknife/knife66/rules.mk23
-rw-r--r--keyboards/mxss/rgblight.c14
-rw-r--r--keyboards/mysticworks/wyvern/config.h46
-rw-r--r--keyboards/mysticworks/wyvern/info.json477
-rw-r--r--keyboards/mysticworks/wyvern/keymaps/default/keymap.c33
-rw-r--r--keyboards/mysticworks/wyvern/keymaps/default/readme.md3
-rw-r--r--keyboards/mysticworks/wyvern/keymaps/via/keymap.c47
-rw-r--r--keyboards/mysticworks/wyvern/keymaps/via/readme.md3
-rw-r--r--keyboards/mysticworks/wyvern/keymaps/via/rules.mk2
-rw-r--r--keyboards/mysticworks/wyvern/readme.md18
-rw-r--r--keyboards/mysticworks/wyvern/rules.mk22
-rw-r--r--keyboards/mysticworks/wyvern/wyvern.c17
-rw-r--r--keyboards/mysticworks/wyvern/wyvern.h129
-rw-r--r--keyboards/pabile/p18/config.h18
-rw-r--r--keyboards/pabile/p20/config.h26
-rw-r--r--keyboards/pabile/p20/p20.c1
-rw-r--r--keyboards/pabile/p20/p20.h18
-rw-r--r--keyboards/pabile/p20/readme.md10
-rw-r--r--keyboards/pabile/p20/ver1/config.h42
-rw-r--r--keyboards/pabile/p20/ver1/keymaps/default/keymap.c (renamed from keyboards/pabile/p20/keymaps/default/keymap.c)0
-rw-r--r--keyboards/pabile/p20/ver1/rules.mk (renamed from keyboards/pabile/p20/rules.mk)17
-rw-r--r--keyboards/pabile/p20/ver1/ver1.c18
-rw-r--r--keyboards/pabile/p20/ver1/ver1.h50
-rw-r--r--keyboards/pabile/p20/ver2/config.h39
-rw-r--r--keyboards/pabile/p20/ver2/keymaps/default/keymap.c43
-rw-r--r--keyboards/pabile/p20/ver2/rules.mk28
-rw-r--r--keyboards/pabile/p20/ver2/ver2.c18
-rw-r--r--keyboards/pabile/p20/ver2/ver2.h50
-rw-r--r--keyboards/pabile/p40/config.h17
-rw-r--r--keyboards/pabile/p40/info.json80
-rw-r--r--keyboards/pabile/p40/readme.md3
-rw-r--r--keyboards/pabile/p40_ortho/config.h40
-rw-r--r--keyboards/pabile/p40_ortho/info.json52
-rw-r--r--keyboards/pabile/p40_ortho/keymaps/default/keymap.c46
-rw-r--r--keyboards/pabile/p40_ortho/p40_ortho.c18
-rw-r--r--keyboards/pabile/p40_ortho/p40_ortho.h45
-rw-r--r--keyboards/pabile/p40_ortho/readme.md15
-rw-r--r--keyboards/pabile/p40_ortho/rules.mk24
-rw-r--r--keyboards/pabile/p42/config.h45
-rw-r--r--keyboards/pabile/p42/info.json13
-rw-r--r--keyboards/pabile/p42/keymaps/default/keymap.c29
-rw-r--r--keyboards/pabile/p42/p42.c1
-rw-r--r--keyboards/pabile/p42/p42.h33
-rw-r--r--keyboards/pabile/p42/readme.md15
-rw-r--r--keyboards/pabile/p42/rules.mk24
-rw-r--r--keyboards/percent/canoe_gen2/canoe_gen2.c141
-rw-r--r--keyboards/percent/canoe_gen2/canoe_gen2.h54
-rw-r--r--keyboards/percent/canoe_gen2/config.h67
-rw-r--r--keyboards/percent/canoe_gen2/info.json162
-rw-r--r--keyboards/percent/canoe_gen2/keymaps/default/keymap.c36
-rw-r--r--keyboards/percent/canoe_gen2/keymaps/via/keymap.c50
-rw-r--r--keyboards/percent/canoe_gen2/keymaps/via/rules.mk1
-rw-r--r--keyboards/percent/canoe_gen2/readme.md17
-rw-r--r--keyboards/percent/canoe_gen2/rgb_matrix_kb.inc65
-rw-r--r--keyboards/percent/canoe_gen2/rules.mk26
-rw-r--r--keyboards/phoenix/rules.mk34
-rw-r--r--keyboards/planck/keymaps/dcompact/keymap.c26
-rw-r--r--keyboards/preonic/keymaps/codecoffeecode/keymap.c81
-rw-r--r--keyboards/preonic/keymaps/codecoffeecode/readme.md1
-rw-r--r--keyboards/preonic/keymaps/default/keymap.c72
-rw-r--r--keyboards/preonic/keymaps/drasbeck/config.h49
-rw-r--r--keyboards/preonic/keymaps/drasbeck/keymap.c240
-rw-r--r--keyboards/preonic/keymaps/drasbeck/readme.md17
-rw-r--r--keyboards/preonic/keymaps/drasbeck/rules.mk1
-rw-r--r--keyboards/preonic/keymaps/pezhore/config.h53
-rw-r--r--keyboards/preonic/keymaps/pezhore/keymap.c307
-rw-r--r--keyboards/preonic/keymaps/pezhore/readme.md1
-rw-r--r--keyboards/preonic/keymaps/pezhore/rules.mk3
-rw-r--r--keyboards/rominronin/katana60/rev1/config.h (renamed from keyboards/katana60/config.h)89
-rw-r--r--keyboards/rominronin/katana60/rev1/info.json83
-rw-r--r--keyboards/rominronin/katana60/rev1/keymaps/colemak/config.h (renamed from keyboards/katana60/keymaps/colemak/config.h)0
-rw-r--r--keyboards/rominronin/katana60/rev1/keymaps/colemak/keymap.c (renamed from keyboards/katana60/keymaps/colemak/keymap.c)2
-rw-r--r--keyboards/rominronin/katana60/rev1/keymaps/colemak/readme.md (renamed from keyboards/katana60/keymaps/colemak/readme.md)0
-rw-r--r--keyboards/rominronin/katana60/rev1/keymaps/default/config.h (renamed from keyboards/katana60/keymaps/default/config.h)0
-rw-r--r--keyboards/rominronin/katana60/rev1/keymaps/default/keymap.c (renamed from keyboards/katana60/keymaps/default/keymap.c)0
-rw-r--r--keyboards/rominronin/katana60/rev1/keymaps/default/readme.md (renamed from keyboards/katana60/keymaps/default/readme.md)0
-rw-r--r--keyboards/rominronin/katana60/rev1/keymaps/josefadamcik/config.h (renamed from keyboards/katana60/keymaps/josefadamcik/config.h)0
-rw-r--r--keyboards/rominronin/katana60/rev1/keymaps/josefadamcik/keymap.c (renamed from keyboards/katana60/keymaps/josefadamcik/keymap.c)0
-rw-r--r--keyboards/rominronin/katana60/rev1/keymaps/josefadamcik/readme.md (renamed from keyboards/katana60/keymaps/josefadamcik/readme.md)0
-rw-r--r--keyboards/rominronin/katana60/rev1/keymaps/msiu/config.h (renamed from keyboards/katana60/keymaps/msiu/config.h)0
-rw-r--r--keyboards/rominronin/katana60/rev1/keymaps/msiu/keymap.c (renamed from keyboards/katana60/keymaps/msiu/keymap.c)0
-rw-r--r--keyboards/rominronin/katana60/rev1/keymaps/msiu/readme.md (renamed from keyboards/katana60/keymaps/msiu/readme.md)0
-rw-r--r--keyboards/rominronin/katana60/rev1/keymaps/rominronin/config.h (renamed from keyboards/katana60/keymaps/rominronin/config.h)0
-rw-r--r--keyboards/rominronin/katana60/rev1/keymaps/rominronin/keymap.c (renamed from keyboards/katana60/keymaps/rominronin/keymap.c)3
-rw-r--r--keyboards/rominronin/katana60/rev1/keymaps/rominronin/readme.md (renamed from keyboards/katana60/keymaps/rominronin/readme.md)0
-rw-r--r--keyboards/rominronin/katana60/rev1/readme.md17
-rw-r--r--keyboards/rominronin/katana60/rev1/rev1.c16
-rw-r--r--keyboards/rominronin/katana60/rev1/rev1.h (renamed from keyboards/katana60/katana60.h)5
-rw-r--r--keyboards/rominronin/katana60/rev1/rules.mk22
-rw-r--r--keyboards/rominronin/katana60/rev2/config.h105
-rw-r--r--keyboards/rominronin/katana60/rev2/info.json579
-rw-r--r--keyboards/rominronin/katana60/rev2/keymaps/default/config.h19
-rw-r--r--keyboards/rominronin/katana60/rev2/keymaps/default/keymap.c71
-rw-r--r--keyboards/rominronin/katana60/rev2/keymaps/default/readme.md1
-rw-r--r--keyboards/rominronin/katana60/rev2/keymaps/rominronin_7u/config.h19
-rw-r--r--keyboards/rominronin/katana60/rev2/keymaps/rominronin_7u/keymap.c79
-rw-r--r--keyboards/rominronin/katana60/rev2/keymaps/rominronin_7u/readme.md1
-rw-r--r--keyboards/rominronin/katana60/rev2/readme.md17
-rw-r--r--keyboards/rominronin/katana60/rev2/rev2.c16
-rw-r--r--keyboards/rominronin/katana60/rev2/rev2.h238
-rw-r--r--keyboards/rominronin/katana60/rev2/rules.mk22
-rw-r--r--keyboards/spaceman/2_milk/keymaps/via/rules.mk2
-rw-r--r--keyboards/spaceman/2_milk/rules.mk2
-rw-r--r--keyboards/spiderisland/split78/config.h35
-rw-r--r--keyboards/spiderisland/split78/info.json94
-rw-r--r--keyboards/spiderisland/split78/keymaps/default/keymap.c41
-rw-r--r--keyboards/spiderisland/split78/matrix.c155
-rw-r--r--keyboards/spiderisland/split78/readme.md25
-rw-r--r--keyboards/spiderisland/split78/rules.mk24
-rw-r--r--keyboards/spiderisland/split78/split78.c17
-rw-r--r--keyboards/spiderisland/split78/split78.h36
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/king/keymap.c30
-rw-r--r--keyboards/tkw/stoutgat/v2/f411/rules.mk30
-rw-r--r--keyboards/torn/config.h68
-rw-r--r--keyboards/torn/info.json57
-rw-r--r--keyboards/torn/keymaps/default/keymap.c119
-rw-r--r--keyboards/torn/keymaps/via/keymap.c119
-rw-r--r--keyboards/torn/keymaps/via/rules.mk2
-rw-r--r--keyboards/torn/matrix.c113
-rw-r--r--keyboards/torn/mcp23018.c63
-rw-r--r--keyboards/torn/mcp23018.h32
-rw-r--r--keyboards/torn/readme.md21
-rw-r--r--keyboards/torn/rules.mk27
-rw-r--r--keyboards/torn/torn.c50
-rw-r--r--keyboards/torn/torn.h41
-rw-r--r--keyboards/torn/torn_encoder.c86
-rw-r--r--keyboards/torn/torn_oled.c63
-rw-r--r--keyboards/treadstone48/rev2/info.json10
-rw-r--r--keyboards/wsk/sl40/readme.md2
-rw-r--r--keyboards/xd60/info.json153
-rw-r--r--keyboards/xd60/rev2/rules.mk4
-rw-r--r--keyboards/xd60/rev3/rules.mk2
-rw-r--r--keyboards/xd60/xd60.h28
-rw-r--r--keyboards/yd60mq/config.h4
-rw-r--r--keyboards/yd60mq/keymaps/via/keymap.c53
-rw-r--r--keyboards/yd60mq/keymaps/via/rules.mk2
-rw-r--r--keyboards/yd60mq/rules.mk2
-rw-r--r--keyboards/yushakobo/quick7/keymaps/via/keymap.c84
-rw-r--r--keyboards/yushakobo/quick7/keymaps/via/readme.md27
-rw-r--r--keyboards/yushakobo/quick7/keymaps/via/rules.mk1
-rw-r--r--keyboards/zvecr/zv48/f401/rules.mk30
-rw-r--r--keyboards/zvecr/zv48/f411/rules.mk30
434 files changed, 18362 insertions, 1091 deletions
diff --git a/keyboards/40percentclub/mf68/keymaps/delivrance/config.h b/keyboards/40percentclub/mf68/keymaps/delivrance/config.h
new file mode 100644
index 000000000..7ae880576
--- /dev/null
+++ b/keyboards/40percentclub/mf68/keymaps/delivrance/config.h
@@ -0,0 +1,42 @@
+/*
+ * Dan's Magicforce 68 (MF68) QMK Keyboard
+ * Copyright (C) Dan <https://github.com/delivrance>
+ *
+ * This file is part of Dan's MF68 QMK Keyboard.
+ *
+ * Dan's MF68 QMK Keyboard 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Dan's MF68 QMK Keyboard 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 Dan's MF68 QMK Keyboard. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#undef MANUFACTURER
+#define MANUFACTURER Dan
+
+#undef PRODUCT
+#define PRODUCT Magicforce 68 QMK
+
+#undef BACKLIGHT_LEVELS
+#define BACKLIGHT_LEVELS 20
+
+// Disable backlight breathing
+#undef BACKLIGHT_BREATHING
+
+// Set USB polling rate to 1000 Hz
+#define USB_POLLING_INTERVAL_MS 1
+
+// Enable NKRO on boot
+#define FORCE_NKRO
+
+// Backlight idle timeout in seconds
+#define BACKLIGHT_IDLE_TIMEOUT 1200 \ No newline at end of file
diff --git a/keyboards/40percentclub/mf68/keymaps/delivrance/keymap.c b/keyboards/40percentclub/mf68/keymaps/delivrance/keymap.c
new file mode 100644
index 000000000..6f9179926
--- /dev/null
+++ b/keyboards/40percentclub/mf68/keymaps/delivrance/keymap.c
@@ -0,0 +1,232 @@
+/*
+ * Dan's Magicforce 68 (MF68) QMK Keyboard
+ * Copyright (C) Dan <https://github.com/delivrance>
+ *
+ * This file is part of Dan's MF68 QMK Keyboard.
+ *
+ * Dan's MF68 QMK Keyboard 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Dan's MF68 QMK Keyboard 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 Dan's MF68 QMK Keyboard. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+
+#define KC_ KC_TRNS
+
+#define KC_FN1 MO(_FN)
+#define KC_FN2 LT(_FN, KC_CAPS)
+
+#define KC_BLUP BL_INC // Backlight increase
+#define KC_BLDN BL_DEC // Backlight decrease
+#define KC_BLTOG BL_TOGG // Backlight toggle
+#define KC_TERM TERM_ON // Terminal mode on
+#define KC_REC1 DM_REC1 // Record macro 1
+#define KC_PLY1 DM_PLY1 // Play macro 1
+#define KC_REC2 DM_REC2 // Record macro 2
+#define KC_PLY2 DM_PLY2 // Play macro 1
+#define KC_RSTP DM_RSTP // Stop macro recording
+
+enum {
+ _QWERTY,
+ _FN
+};
+
+/* ┏━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━━━━━┓ ┏━━━━┳━━━━┓
+ ┃Esc ┃ 1! ┃ 2@ ┃ 3# ┃ 4$ ┃ 5% ┃ 6^ ┃ 7& ┃ 8* ┃ 9( ┃ 0) ┃ -_ ┃ =+ ┃ ←─ ┃ ┃Ins ┃PgUp┃
+ ┣━━━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━━━━━┫ ┣━━━━╋━━━━┫
+ ┃ Tab ┃ Q ┃ W ┃ E ┃ R ┃ T ┃ Y ┃ U ┃ I ┃ O ┃ P ┃ [{ ┃ ]} ┃ \| ┃ ┃Del ┃PgDn┃
+ ┣━━━━━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━━━━━━┫ ┗━━━━┻━━━━┛
+ ┃ Caps ┃ A ┃ S ┃ D ┃ F ┃ G ┃ H ┃ J ┃ K ┃ L ┃ ;: ┃ '" ┃ Enter ┃ Magicforce
+ ┣━━━━━━━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━━━━━━━━━┫ ┏━━━━┓
+ ┃ Shift ┃ Z ┃ X ┃ C ┃ V ┃ B ┃ N ┃ M ┃ ,< ┃ .> ┃ /? ┃ Shift ┃ ┃ ↑ ┃ Dan
+ ┣━━━━━┳━━━━┻┳━━━┻━┳━━┻━━━━┻━━━━┻━━━━┻━━━━┻━━━━┻━━━┳┻━━━━╋━━━━┻┳━━━━━┳━━┳━━┻━╋━━━━╋━━━━┓
+ ┃Ctrl ┃ GUI ┃ Alt ┃ ━━━━━ ┃ Alt ┃ Fn ┃Ctrl ┃ ┃ ← ┃ ↓ ┃ → ┃
+ ┗━━━━━┻━━━━━┻━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┻━━━━━┻━━━━━┻━━━━━┛ ┗━━━━┻━━━━┻━━━━┛ */
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_QWERTY] = LAYOUT_kc( /* Default layer
+ ┏━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━━━━━┓ ┏━━━━┳━━━━┓ */
+ GESC, 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,MINS,EQL , BSPC , INS ,PGUP, /*
+ ┣━━━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━━━━━┫ ┣━━━━╋━━━━┫ */
+ TAB , Q , W , E , R , T , Y , U , I , O , P ,LBRC,RBRC, BSLS , DEL ,PGDN, /*
+ ┣━━━━━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━━━━━━┫ ┗━━━━┻━━━━┛ */
+ FN2 , A , S , D , F , G , H , J , K , L ,SCLN,QUOT, ENTER , /*
+ ┣━━━━━━━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━━━━━━━━━┫ ┏━━━━┓ */
+ LSFT , Z , X , C , V , B , N , M ,COMM,DOT ,SLSH, RSFT , UP , /*
+ ┣━━━━━┳━━━━┻┳━━━┻━┳━━┻━━━━┻━━━━┻━━━━┻━━━━┻━━━━┻━━━┳┻━━━━╋━━━━┻┳━━━━━┳━━┳━━┻━╋━━━━╋━━━━┓ */
+ LCTL ,LGUI ,LALT , SPACE ,RALT , FN1 ,RCTL , LEFT,DOWN,RGHT /*
+ ┗━━━━━┻━━━━━┻━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┻━━━━━┻━━━━━┻━━━━━┛ ┗━━━━┻━━━━┻━━━━┛ */),
+
+[_FN] = LAYOUT_kc( /* FN & CAPS layer
+ ┏━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━━━━━┓ ┏━━━━┳━━━━┓ */
+ GRV , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 , F10, F11, F12, RSTP , PSCR,HOME, /*
+ ┣Esc ┻ 1! ┻ 2@ ┻ 3# ┻ 4$ ┻ 5% ┻ 6^ ┻ 7& ┻ 8* ┻ 9( ┻ 0) ┻ -_ ┻ =+ ┻━┳━ ←─ ━┫ ┣Ins ╋PgUp┫ */
+ ,PLY1,PLY2, , , , , , 7 , 8 , 9 ,BLDN,BLUP,BLTOG , ,END , /*
+ ┣ Tab ━┻ Q ━┻ W ━┻ E ━┻ R ━┻ T ━┻ Y ━┻ U ━┻ I ━┻ O ━┻ P ━┻ [{ ┻ ]} ┻━ \| ━┫ ┗Del ┻PgDn┛ */
+ , , , , , , , , 4 , 5 , 6 , , TERM , /*
+ ┣━ Caps ━┻ A ━┻ S ━┻ D ━┻ F ━┻ G ━┻ H ━┻ J ━┻ K ━┻ L ━┻ ;: ┻ '" ┻━ Enter ━┫ ┏━━━━┓ */
+ ,REC1,REC2, , ,MSTP, ,MUTE, 1 , 2 , 3 , , VOLU, /*
+ ┣━━ Shift ━┻ Z ━┻ X ━┻ C ━┻ V ━┻ B ━┻ N ━┻ M ━┻ ,< ┻ .> ╋ /? ┻┳━━ Shift ━━┻━╋ ↑ ━╋━━━━┓ */
+ , , , MPLY , 0 , , , MPRV,VOLD,MNXT /*
+ ┗Ctrl ┻ GUI ┻ Alt ┻━━━━━━━━━━━━ Space ━━━━━━━━━━━━┻ Alt ┻ Fn ━┻Ctrl ┛ ┗ ← ━┻ ↓ ━┻ → ━┛ */)
+};
+// clang-format on
+
+// Initialization code
+// -------------------
+
+void keyboard_post_init_user(void) {
+ backlight_level(2);
+}
+
+// Custom backlight driver
+// -----------------------
+
+// http://jared.geek.nz/2013/feb/linear-led-pwm
+float cie1931(float x) {
+ x *= 100.0 / BACKLIGHT_LEVELS;
+ float y;
+
+ if (x < 8) {
+ y = x / 902.3;
+ } else {
+ y = (x + 16.0) / 116.0;
+ y = y * y * y;
+ }
+
+ return round(y * 255);
+}
+
+void backlight_init_ports(void) {
+ setPinOutput(BACKLIGHT_PIN);
+ writePinLow(BACKLIGHT_PIN);
+
+ TCCR1A = _BV(COM1A1) | _BV(WGM11);
+ TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10);
+
+ ICR1 = 0xFFU; // Set PWM levels to 255 (enables high-frequency PWM)
+}
+
+void backlight_set(uint8_t level) {
+ if (level > BACKLIGHT_LEVELS) {
+ level = BACKLIGHT_LEVELS;
+ }
+
+ if (level == 0) {
+ TCCR1A &= ~(_BV(COM1A1)); // Disable PWM
+ } else {
+ TCCR1A |= _BV(COM1A1); // Enable PWM
+ }
+
+ OCR1A = cie1931(level);
+}
+
+// Custom macro hooks
+// ------------------
+
+// Redefine with lower delay
+void led_blink(void) {
+ backlight_toggle();
+ wait_ms(25);
+ backlight_toggle();
+}
+
+void dynamic_macro_record_start_user(void) {
+ led_blink();
+}
+
+void dynamic_macro_play_user(int8_t direction) {
+ led_blink();
+}
+
+void dynamic_macro_record_key_user(int8_t direction, keyrecord_t *record) {
+ led_blink();
+}
+
+void dynamic_macro_record_end_user(int8_t direction) {
+ led_blink();
+}
+
+// Custom Caps Lock backlight behaviour
+// ------------------------------------
+
+void led_set_user(uint8_t usb_led) {
+ // This exists because I don't like the backlight to turn OFF when the Caps Lock is ON.
+ // That is, this will turn the backlight ON (at half the brightness) when the Caps Lock is ON as well.
+ static bool prev_is_caps_on;
+ bool is_caps_on = IS_LED_ON(usb_led, USB_LED_CAPS_LOCK);
+
+ if (prev_is_caps_on != is_caps_on) {
+ prev_is_caps_on = is_caps_on;
+
+ if (is_caps_on) {
+ backlight_set(BACKLIGHT_LEVELS / 2);
+ } else {
+ if (is_backlight_enabled()) {
+ backlight_set(get_backlight_level());
+ } else {
+ backlight_set(0);
+ }
+ }
+ }
+
+ // Turn on the Pro Micro's on-board LEDs for Caps Lock
+ if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
+ // Set to low
+ setPinOutput(B0);
+ writePinLow(B0);
+ setPinOutput(D5);
+ writePinLow(D5);
+ } else {
+ // Set to Hi-Z
+ setPinInput(B0);
+ setPinInput(D5);
+ }
+}
+
+// Backlight idle timeout feature
+// ------------------------------
+
+static uint32_t timer;
+static bool is_idle;
+
+void matrix_scan_user() {
+ // Check the timer only if the keyboard is not idle
+ if (!is_idle) {
+ if (timer_elapsed32(timer) >= (uint32_t) BACKLIGHT_IDLE_TIMEOUT * 1000) {
+ is_idle = true;
+
+ // Both backlight_level and backlight_level_noeeprom modify the global backlight config (not useful)
+ // Instead, use backlight_set in order to restore the current backlight level later on
+ backlight_set(0);
+ }
+ }
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ // Reset timer on each keypress
+ timer = timer_read32();
+
+ // Enable backlight back only when keyboard is idling (which implies the backlight was turned off previously)
+ if (is_idle) {
+ is_idle = false;
+
+ // Set back the original backlight level only if it is actually enabled globally
+ if (is_backlight_enabled()) {
+ // The current backlight level can be obtained with get_backlight_level
+ backlight_set(get_backlight_level());
+ }
+ }
+
+ return true;
+}
diff --git a/keyboards/40percentclub/mf68/keymaps/delivrance/readme.md b/keyboards/40percentclub/mf68/keymaps/delivrance/readme.md
new file mode 100644
index 000000000..158235b5e
--- /dev/null
+++ b/keyboards/40percentclub/mf68/keymaps/delivrance/readme.md
@@ -0,0 +1,38 @@
+# Dan's Magicforce 68 (MF68) QMK Keyboard
+
+> https://github.com/delivrance
+
+```
+┏━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━━━━━┓ ┏━━━━┳━━━━┓
+┃Esc ┃ 1! ┃ 2@ ┃ 3# ┃ 4$ ┃ 5% ┃ 6^ ┃ 7& ┃ 8* ┃ 9( ┃ 0) ┃ -_ ┃ =+ ┃ ←─ ┃ ┃Ins ┃PgUp┃
+┣━━━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━━━━━┫ ┣━━━━╋━━━━┫
+┃ Tab ┃ Q ┃ W ┃ E ┃ R ┃ T ┃ Y ┃ U ┃ I ┃ O ┃ P ┃ [{ ┃ ]} ┃ \| ┃ ┃Del ┃PgDn┃
+┣━━━━━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━━━━━━┫ ┗━━━━┻━━━━┛
+┃ Caps ┃ A ┃ S ┃ D ┃ F ┃ G ┃ H ┃ J ┃ K ┃ L ┃ ;: ┃ '" ┃ Enter ┃ Magicforce
+┣━━━━━━━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━━━━━━━━━┫ ┏━━━━┓
+┃ Shift ┃ Z ┃ X ┃ C ┃ V ┃ B ┃ N ┃ M ┃ ,< ┃ .> ┃ /? ┃ Shift ┃ ┃ ↑ ┃ Dan
+┣━━━━━┳━━━━┻┳━━━┻━┳━━┻━━━━┻━━━━┻━━━━┻━━━━┻━━━━┻━━━┳┻━━━━╋━━━━┻┳━━━━━┳━━┳━━┻━╋━━━━╋━━━━┓
+┃Ctrl ┃ GUI ┃ Alt ┃ ━━━━━ ┃ Alt ┃ Fn ┃Ctrl ┃ ┃ ← ┃ ↓ ┃ → ┃
+┗━━━━━┻━━━━━┻━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┻━━━━━┻━━━━━┻━━━━━┛ ┗━━━━┻━━━━┻━━━━┛
+```
+
+## Features
+
+- Right ALT and FN keys swapped.
+- USB Polling rate set to 1000 Hz (1 ms).
+- Dynamic macros enabled (2 macros).
+- Transient EEPROM to avoid wearing (r/w from/to RAM).
+- NKRO enabled on boot (up to 248 keys at once).
+- CAPS LOCK key used as alias to the FN key.
+- Pro Micro's on-board LEDs used for CAPS LOCK status.
+- Backlight also used as CAPS LOCK status indicator.
+- Both Grave and Tilde characters embedded in ESC.
+- Media control keys and extra number keys (numpad).
+- Flicker-free backlight thanks to high-frequency PWM mode.
+- Linear backlight brightness intensity (better for human eyes).
+- Backlight turns off automatically after 20 minutes idle.
+- Backlight brightness levels set to 20 (5% steps) + 1 (off).
+- Backlight breathing completely disabled.
+- Link Time Optimizations to reduce compiled size.
+- QMK Terminal enabled for fun (pretty useless in practice).
+- Performing ~1550 matrix scans per second.
diff --git a/keyboards/40percentclub/mf68/keymaps/delivrance/rules.mk b/keyboards/40percentclub/mf68/keymaps/delivrance/rules.mk
new file mode 100644
index 000000000..5ac2ce5cc
--- /dev/null
+++ b/keyboards/40percentclub/mf68/keymaps/delivrance/rules.mk
@@ -0,0 +1,10 @@
+BACKLIGHT_DRIVER = custom
+NKRO_ENABLE = yes
+TERMINAL_ENABLE = yes
+DYNAMIC_MACRO_ENABLE = yes
+
+# Use RAM (fake EEPROM, transient) instead of real EEPROM
+EEPROM_DRIVER = transient
+
+# LTO: Link Time Optimizations. Reduce compiled size
+LTO_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/ai03/soyuz/config.h b/keyboards/ai03/soyuz/config.h
index 213b6509b..feb55107c 100644
--- a/keyboards/ai03/soyuz/config.h
+++ b/keyboards/ai03/soyuz/config.h
@@ -21,11 +21,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* USB Device descriptor parameter */
#define VENDOR_ID 0xA103
-#define PRODUCT_ID 0x0004
+#define PRODUCT_ID 0x0018
#define DEVICE_VER 0x0001
#define MANUFACTURER ai03 Design Studio
#define PRODUCT Soyuz
-#define DESCRIPTION Single-PCB Numpad Kit
/* key matrix size */
#define MATRIX_ROWS 5
@@ -119,59 +118,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define FORCE_NKRO
/*
- * Magic Key Options
- *
- * Magic keys are hotkey commands that allow control over firmware functions of
- * the keyboard. They are best used in combination with the HID Listen program,
- * found here: https://www.pjrc.com/teensy/hid_listen.html
- *
- * The options below allow the magic key functionality to be changed. This is
- * useful if your keyboard/keypad is missing keys and you want magic key support.
- *
- */
-
-/* key combination for magic key command */
-/* defined by default; to change, uncomment and set to the combination you want */
-// #define IS_COMMAND() (get_mods() == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)))
-
-/* control how magic key switches layers */
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
-
-/* override magic key keymap */
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
-//#define MAGIC_KEY_HELP H
-//#define MAGIC_KEY_HELP_ALT SLASH
-//#define MAGIC_KEY_DEBUG D
-//#define MAGIC_KEY_DEBUG_MATRIX X
-//#define MAGIC_KEY_DEBUG_KBD K
-//#define MAGIC_KEY_DEBUG_MOUSE M
-//#define MAGIC_KEY_VERSION V
-//#define MAGIC_KEY_STATUS S
-//#define MAGIC_KEY_CONSOLE C
-//#define MAGIC_KEY_LAYER0 0
-//#define MAGIC_KEY_LAYER0_ALT GRAVE
-//#define MAGIC_KEY_LAYER1 1
-//#define MAGIC_KEY_LAYER2 2
-//#define MAGIC_KEY_LAYER3 3
-//#define MAGIC_KEY_LAYER4 4
-//#define MAGIC_KEY_LAYER5 5
-//#define MAGIC_KEY_LAYER6 6
-//#define MAGIC_KEY_LAYER7 7
-//#define MAGIC_KEY_LAYER8 8
-//#define MAGIC_KEY_LAYER9 9
-//#define MAGIC_KEY_BOOTLOADER B
-//#define MAGIC_KEY_BOOTLOADER_ALT ESC
-//#define MAGIC_KEY_LOCK CAPS
-//#define MAGIC_KEY_EEPROM E
-//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
-//#define MAGIC_KEY_NKRO N
-//#define MAGIC_KEY_SLEEP_LED Z
-
-/*
* Feature disable options
* These options are also useful to firmware size reduction.
*/
@@ -189,29 +135,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
-/*
- * MIDI options
- */
-
-/* Prevent use of disabled MIDI features in the keymap */
-//#define MIDI_ENABLE_STRICT 1
-
-/* enable basic MIDI features:
- - MIDI notes can be sent when in Music mode is on
-*/
-//#define MIDI_BASIC
-
-/* enable advanced MIDI features:
- - MIDI notes can be added to the keymap
- - Octave shift and transpose
- - Virtual sustain, portamento, and modulation wheel
- - etc.
-*/
-//#define MIDI_ADVANCED
-
-/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
-//#define MIDI_TONE_KEYCODE_OCTAVES 1
-
/* Bootmagic Lite key configuration */
// #define BOOTMAGIC_LITE_ROW 0
// #define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/ai03/soyuz/keymaps/mrsendyyk/keymap.c b/keyboards/ai03/soyuz/keymaps/mrsendyyk/keymap.c
index a1d2596a6..0b9793484 100644
--- a/keyboards/ai03/soyuz/keymaps/mrsendyyk/keymap.c
+++ b/keyboards/ai03/soyuz/keymaps/mrsendyyk/keymap.c
@@ -1,9 +1,31 @@
+/* Copyright (C) 2020 Sendy YK (https://mr.sendyyk.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 3 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 <https://www.gnu.org/licenses/>.
+ */
+
#include QMK_KEYBOARD_H
+enum layer_names {
+ _BASE
+};
+
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_numpad_5x4(KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
- KC_P7, KC_P8, KC_P9,
- KC_P4, KC_P5, KC_P6, KC_PPLS,
- KC_P1, KC_P2, KC_P3,
- KC_P0, KC_PDOT, KC_PENT)
+ [_BASE] = LAYOUT_numpad_5x4(
+ KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_P7, KC_P8, KC_P9,
+ KC_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_P1, KC_P2, KC_P3,
+ KC_P0, KC_PDOT, KC_PENT
+ )
};
diff --git a/keyboards/ai03/soyuz/keymaps/mrsendyyk/readme.md b/keyboards/ai03/soyuz/keymaps/mrsendyyk/readme.md
index e1f1b7ce3..0e5007e6f 100644
--- a/keyboards/ai03/soyuz/keymaps/mrsendyyk/readme.md
+++ b/keyboards/ai03/soyuz/keymaps/mrsendyyk/readme.md
@@ -1,6 +1,14 @@
-# [Sendy YK's Keymap](https://github.com/mrsendyyk/my_qmk/tree/master/ai03_soyuz_numpad)
+# Sendy YK's Numpad 5x4 Layout and Keymap
-![Default Layer [0]](https://raw.githubusercontent.com/mrsendyyk/my_qmk/master/ai03_soyuz_numpad/assets/ai03_soyuz_mrsendyyk.png)
+[https://mr.sendyyk.com](https://mr.sendyyk.com)
+
+## Numpad 5x4 Layout
+
+![LAYOUT_numpad_5x4](https://raw.githubusercontent.com/mrsendyyk/my_qmk/master/soyuz/assets/layout-numpad-5x4.png)
+
+## Keymap
+
+![_BASE](https://raw.githubusercontent.com/mrsendyyk/my_qmk/master/soyuz/assets/layout-numpad-5x4-keymap.png)
## Build The Firmware
diff --git a/keyboards/ai03/soyuz/keymaps/via/keymap.c b/keyboards/ai03/soyuz/keymaps/via/keymap.c
new file mode 100644
index 000000000..9b62ca217
--- /dev/null
+++ b/keyboards/ai03/soyuz/keymaps/via/keymap.c
@@ -0,0 +1,59 @@
+/* Copyright (C) 2020 Sendy YK (https://mr.sendyyk.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 3 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 <https://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+
+enum layer_names {
+ _BASE, // Default Layer
+ _FN, // Fn Layer 1
+ _FN2, // Fn Layer 2
+ _FN3 // Fn Layer 3
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // Default Layer
+ [_BASE] = LAYOUT_ortho_5x4(
+ KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_P0, KC_P0, KC_PDOT, KC_PENT
+ ),
+ // Fn Layer 1
+ [_FN] = LAYOUT_ortho_5x4(
+ 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
+ ),
+ // Fn Layer 2
+ [_FN2] = LAYOUT_ortho_5x4(
+ 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
+ ),
+ // Fn Layer 3
+ [_FN3] = LAYOUT_ortho_5x4(
+ 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
+ )
+};
diff --git a/keyboards/ai03/soyuz/keymaps/via/rules.mk b/keyboards/ai03/soyuz/keymaps/via/rules.mk
new file mode 100644
index 000000000..1e5b99807
--- /dev/null
+++ b/keyboards/ai03/soyuz/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/basekeys/slice/config.h b/keyboards/basekeys/slice/config.h
index cfb6bf4ff..e7e65de3b 100644
--- a/keyboards/basekeys/slice/config.h
+++ b/keyboards/basekeys/slice/config.h
@@ -1,6 +1,5 @@
/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-Copyright 2015 Jack Humbert
+Copyright 2020 2Moons
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
@@ -15,7 +14,6 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-
#pragma once
#include "config_common.h"
diff --git a/keyboards/basekeys/slice/keymaps/default/config.h b/keyboards/basekeys/slice/keymaps/default/config.h
index d3acebb7e..3dc07fdac 100644
--- a/keyboards/basekeys/slice/keymaps/default/config.h
+++ b/keyboards/basekeys/slice/keymaps/default/config.h
@@ -1,19 +1,19 @@
-/* Copyright 2020 2Moons
- *
- * 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/>.
- */
+/*
+Copyright 2020 2Moons
+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
/* Select hand configuration */
diff --git a/keyboards/basekeys/slice/keymaps/default/keymap.c b/keyboards/basekeys/slice/keymaps/default/keymap.c
index d6e5cefae..ffb64998e 100644
--- a/keyboards/basekeys/slice/keymaps/default/keymap.c
+++ b/keyboards/basekeys/slice/keymaps/default/keymap.c
@@ -1,3 +1,18 @@
+/* Copyright 2020 2Moons
+ *
+ * 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 "split_util.h"
// Each layer gets a name for readability, which is then used in the keymap matrix below.
diff --git a/keyboards/basekeys/slice/keymaps/default_split_left_space/config.h b/keyboards/basekeys/slice/keymaps/default_split_left_space/config.h
index d3acebb7e..3dc07fdac 100644
--- a/keyboards/basekeys/slice/keymaps/default_split_left_space/config.h
+++ b/keyboards/basekeys/slice/keymaps/default_split_left_space/config.h
@@ -1,19 +1,19 @@
-/* Copyright 2020 2Moons
- *
- * 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/>.
- */
+/*
+Copyright 2020 2Moons
+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
/* Select hand configuration */
diff --git a/keyboards/basekeys/slice/keymaps/default_split_left_space/keymap.c b/keyboards/basekeys/slice/keymaps/default_split_left_space/keymap.c
index 40d55bdc6..331dfc0fe 100644
--- a/keyboards/basekeys/slice/keymaps/default_split_left_space/keymap.c
+++ b/keyboards/basekeys/slice/keymaps/default_split_left_space/keymap.c
@@ -1,3 +1,18 @@
+/* Copyright 2020 2Moons
+ *
+ * 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 "split_util.h"
// Each layer gets a name for readability, which is then used in the keymap matrix below.
diff --git a/keyboards/basekeys/slice/rev1/config.h b/keyboards/basekeys/slice/rev1/config.h
index d151d5873..ea4d5d3dc 100644
--- a/keyboards/basekeys/slice/rev1/config.h
+++ b/keyboards/basekeys/slice/rev1/config.h
@@ -1,6 +1,5 @@
/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-Copyright 2015 Jack Humbert
+Copyright 2020 2Moons
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
diff --git a/keyboards/basekeys/slice/rev1/keymaps/2moons/config.h b/keyboards/basekeys/slice/rev1/keymaps/2moons/config.h
index 62ee1d1a9..8f38938b1 100644
--- a/keyboards/basekeys/slice/rev1/keymaps/2moons/config.h
+++ b/keyboards/basekeys/slice/rev1/keymaps/2moons/config.h
@@ -1,19 +1,19 @@
-/* Copyright 2020 2Moons
- *
- * 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/>.
- */
+/*
+Copyright 2020 2Moons
+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
/* Select hand configuration */
diff --git a/keyboards/basekeys/slice/rev1/keymaps/2moons/keymap.c b/keyboards/basekeys/slice/rev1/keymaps/2moons/keymap.c
index 5a9b14606..97f7039a7 100644
--- a/keyboards/basekeys/slice/rev1/keymaps/2moons/keymap.c
+++ b/keyboards/basekeys/slice/rev1/keymaps/2moons/keymap.c
@@ -1,3 +1,18 @@
+/* Copyright 2020 2Moons
+ *
+ * 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 "keymap_jp.h"
diff --git a/keyboards/basekeys/slice/rev1/keymaps/default_all/config.h b/keyboards/basekeys/slice/rev1/keymaps/default_all/config.h
index d3acebb7e..3dc07fdac 100644
--- a/keyboards/basekeys/slice/rev1/keymaps/default_all/config.h
+++ b/keyboards/basekeys/slice/rev1/keymaps/default_all/config.h
@@ -1,19 +1,19 @@
-/* Copyright 2020 2Moons
- *
- * 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/>.
- */
+/*
+Copyright 2020 2Moons
+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
/* Select hand configuration */
diff --git a/keyboards/basekeys/slice/rev1/keymaps/default_all/keymap.c b/keyboards/basekeys/slice/rev1/keymaps/default_all/keymap.c
index 198c449b7..34e1b7c43 100644
--- a/keyboards/basekeys/slice/rev1/keymaps/default_all/keymap.c
+++ b/keyboards/basekeys/slice/rev1/keymaps/default_all/keymap.c
@@ -1,3 +1,18 @@
+/* Copyright 2020 2Moons
+ *
+ * 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
extern uint8_t is_master;
diff --git a/keyboards/basekeys/slice/rev1/keymaps/default_split_backspace/config.h b/keyboards/basekeys/slice/rev1/keymaps/default_split_backspace/config.h
index d3acebb7e..3dc07fdac 100644
--- a/keyboards/basekeys/slice/rev1/keymaps/default_split_backspace/config.h
+++ b/keyboards/basekeys/slice/rev1/keymaps/default_split_backspace/config.h
@@ -1,19 +1,19 @@
-/* Copyright 2020 2Moons
- *
- * 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/>.
- */
+/*
+Copyright 2020 2Moons
+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
/* Select hand configuration */
diff --git a/keyboards/basekeys/slice/rev1/keymaps/default_split_backspace/keymap.c b/keyboards/basekeys/slice/rev1/keymaps/default_split_backspace/keymap.c
index b1423378e..772f9f6f1 100644
--- a/keyboards/basekeys/slice/rev1/keymaps/default_split_backspace/keymap.c
+++ b/keyboards/basekeys/slice/rev1/keymaps/default_split_backspace/keymap.c
@@ -1,3 +1,18 @@
+/* Copyright 2020 2Moons
+ *
+ * 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
extern uint8_t is_master;
diff --git a/keyboards/basekeys/slice/rev1/keymaps/via/config.h b/keyboards/basekeys/slice/rev1/keymaps/via/config.h
new file mode 100644
index 000000000..3dc07fdac
--- /dev/null
+++ b/keyboards/basekeys/slice/rev1/keymaps/via/config.h
@@ -0,0 +1,22 @@
+/*
+Copyright 2020 2Moons
+
+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
+
+/* Select hand configuration */
+
+#define TAPPING_FORCE_HOLD
+#define TAPPING_TERM 180
diff --git a/keyboards/basekeys/slice/rev1/keymaps/via/keymap.c b/keyboards/basekeys/slice/rev1/keymaps/via/keymap.c
new file mode 100644
index 000000000..900f1b3ba
--- /dev/null
+++ b/keyboards/basekeys/slice/rev1/keymaps/via/keymap.c
@@ -0,0 +1,85 @@
+/* Copyright 2020 2Moons
+ *
+ * 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 "keymap_jp.h"
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+enum layer_number {
+ _QWERTY = 0,
+ _FN,
+ _LOWER,
+ _RAISE,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT_all(
+ //,------------------------------------------------------------------------| |--------------------------------------------------------------------------------------.
+ KC_ESC, KC_GRAVE, 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_BSPACE, KC_BSPACE, KC_BSPACE,
+ //|------------------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+----------+----------+----------|
+ RGB_MODE_FORWARD, 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,
+ //|------------------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+----------+----------+----------|
+ RGB_MODE_GRADIENT, 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,
+ //|------------------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+----------+----------+----------|
+ RGB_MODE_XMAS, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_RSFT,
+ //|------------------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+----------+----------+----------|
+ RGB_TOG, KC_LCTL, KC_LALT, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RCTL, MO(_FN)
+ //`------------------------------------------------------------------------| |--------------------------------------------------------------------------------------'
+ ),
+
+ [_FN] = LAYOUT_all(
+ //,------------------------------------------------------------------------| |--------------------------------------------------------------------------------------.
+ KC_ESC, KC_GRAVE, 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_BSPACE, KC_DEL,
+ //|------------------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+----------+----------+----------|
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUSE, KC_UP, _______, _______, _______,
+ //|------------------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+----------+----------+----------|
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, KC_LEFT,KC_RIGHT, _______, _______,
+ //|------------------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+----------+----------+----------|
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_END, KC_PGDN, KC_DOWN, _______, _______, _______, _______, _______,
+ //|------------------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+----------+----------+----------|
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ //`------------------------------------------------------------------------| |--------------------------------------------------------------------------------------'
+ ),
+
+ [_LOWER] = LAYOUT_all(
+ //,------------------------------------------------------------------------| |--------------------------------------------------------------------------------------.
+ KC_ESC, KC_GRAVE, 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_BSPACE, KC_BSPACE, KC_BSPACE,
+ //|------------------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+----------+----------+----------|
+ RGB_MODE_FORWARD, 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,
+ //|------------------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+----------+----------+----------|
+ RGB_MODE_GRADIENT, 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,
+ //|------------------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+----------+----------+----------|
+ RGB_MODE_XMAS, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_RSFT,
+ //|------------------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+----------+----------+----------|
+ RGB_TOG, KC_LCTL, KC_LALT, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RCTL, MO(_FN)
+ //`------------------------------------------------------------------------| |--------------------------------------------------------------------------------------'
+ ),
+
+ [_RAISE] = LAYOUT_all(
+ //,------------------------------------------------------------------------| |--------------------------------------------------------------------------------------.
+ KC_ESC, KC_GRAVE, 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_BSPACE, KC_BSPACE, KC_BSPACE,
+ //|------------------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+----------+----------+----------|
+ RGB_MODE_FORWARD, 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,
+ //|------------------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+----------+----------+----------|
+ RGB_MODE_GRADIENT, 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,
+ //|------------------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+----------+----------+----------|
+ RGB_MODE_XMAS, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_RSFT,
+ //|------------------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+----------+----------+----------|
+ RGB_TOG, KC_LCTL, KC_LALT, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RCTL, MO(_FN)
+ //`------------------------------------------------------------------------| |--------------------------------------------------------------------------------------'
+ )
+};
diff --git a/keyboards/basekeys/slice/rev1/keymaps/via/rules.mk b/keyboards/basekeys/slice/rev1/keymaps/via/rules.mk
new file mode 100644
index 000000000..fe10d4e09
--- /dev/null
+++ b/keyboards/basekeys/slice/rev1/keymaps/via/rules.mk
@@ -0,0 +1,3 @@
+TAP_DANCE_ENABLE = no
+VIA_ENABLE = yes
+BACKLIGHT_ENABLE = no \ No newline at end of file
diff --git a/keyboards/basekeys/slice/rev1/rev1.c b/keyboards/basekeys/slice/rev1/rev1.c
index 520a869e5..a3c8f66fe 100644
--- a/keyboards/basekeys/slice/rev1/rev1.c
+++ b/keyboards/basekeys/slice/rev1/rev1.c
@@ -1 +1,16 @@
+/* Copyright 2020 2Moons
+ *
+ * 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 "rev1.h"
diff --git a/keyboards/basekeys/slice/rev1/rev1.h b/keyboards/basekeys/slice/rev1/rev1.h
index ae417d99c..26a5da31b 100644
--- a/keyboards/basekeys/slice/rev1/rev1.h
+++ b/keyboards/basekeys/slice/rev1/rev1.h
@@ -1,3 +1,18 @@
+/* Copyright 2020 2Moons
+ *
+ * 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 "slice.h"
diff --git a/keyboards/basekeys/slice/rev1_rgb/config.h b/keyboards/basekeys/slice/rev1_rgb/config.h
index 1145d0864..08afff765 100644
--- a/keyboards/basekeys/slice/rev1_rgb/config.h
+++ b/keyboards/basekeys/slice/rev1_rgb/config.h
@@ -1,6 +1,5 @@
/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-Copyright 2015 Jack Humbert
+Copyright 2020 2Moons
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
@@ -15,7 +14,6 @@ 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 */
diff --git a/keyboards/basekeys/slice/rev1_rgb/keymaps/2moons_rgb/config.h b/keyboards/basekeys/slice/rev1_rgb/keymaps/2moons_rgb/config.h
index 62ee1d1a9..8f38938b1 100644
--- a/keyboards/basekeys/slice/rev1_rgb/keymaps/2moons_rgb/config.h
+++ b/keyboards/basekeys/slice/rev1_rgb/keymaps/2moons_rgb/config.h
@@ -1,19 +1,19 @@
-/* Copyright 2020 2Moons
- *
- * 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/>.
- */
+/*
+Copyright 2020 2Moons
+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
/* Select hand configuration */
diff --git a/keyboards/basekeys/slice/rev1_rgb/keymaps/2moons_rgb/keymap.c b/keyboards/basekeys/slice/rev1_rgb/keymaps/2moons_rgb/keymap.c
index d9e5808a6..36bfb79ab 100644
--- a/keyboards/basekeys/slice/rev1_rgb/keymaps/2moons_rgb/keymap.c
+++ b/keyboards/basekeys/slice/rev1_rgb/keymaps/2moons_rgb/keymap.c
@@ -1,3 +1,18 @@
+/* Copyright 2020 2Moons
+ *
+ * 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 "keymap_jp.h"
#include "split_util.h"
diff --git a/keyboards/basekeys/slice/rev1_rgb/rev1_rgb.c b/keyboards/basekeys/slice/rev1_rgb/rev1_rgb.c
index 3cdec58c5..9ab3d2539 100644
--- a/keyboards/basekeys/slice/rev1_rgb/rev1_rgb.c
+++ b/keyboards/basekeys/slice/rev1_rgb/rev1_rgb.c
@@ -1 +1,16 @@
+/* Copyright 2020 2Moons
+ *
+ * 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 "rev1_rgb.h"
diff --git a/keyboards/basekeys/slice/rev1_rgb/rev1_rgb.h b/keyboards/basekeys/slice/rev1_rgb/rev1_rgb.h
index 809c278db..31110018d 100644
--- a/keyboards/basekeys/slice/rev1_rgb/rev1_rgb.h
+++ b/keyboards/basekeys/slice/rev1_rgb/rev1_rgb.h
@@ -1,3 +1,18 @@
+/* Copyright 2020 2Moons
+ *
+ * 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 "slice.h"
diff --git a/keyboards/basekeys/slice/slice.c b/keyboards/basekeys/slice/slice.c
index 6aaf72179..2d7d111f9 100644
--- a/keyboards/basekeys/slice/slice.c
+++ b/keyboards/basekeys/slice/slice.c
@@ -1 +1,16 @@
+/* Copyright 2020 2Moons
+ *
+ * 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 "slice.h"
diff --git a/keyboards/basekeys/slice/slice.h b/keyboards/basekeys/slice/slice.h
index 7d4f7ee51..bc3eb813a 100644
--- a/keyboards/basekeys/slice/slice.h
+++ b/keyboards/basekeys/slice/slice.h
@@ -1,3 +1,18 @@
+/* Copyright 2020 2Moons
+ *
+ * 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"
diff --git a/keyboards/basekeys/slice/slice_font.c b/keyboards/basekeys/slice/slice_font.c
index f969f85c7..b59fbcf5b 100644
--- a/keyboards/basekeys/slice/slice_font.c
+++ b/keyboards/basekeys/slice/slice_font.c
@@ -1,3 +1,18 @@
+/* Copyright 2020 2Moons
+ *
+ * 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 is the 'classic' fixed-space bitmap font for Adafruit_GFX since 1.0.
// See gfxfont.h for newer custom bitmap font info.
diff --git a/keyboards/basekeys/trifecta/config.h b/keyboards/basekeys/trifecta/config.h
new file mode 100644
index 000000000..8a9529126
--- /dev/null
+++ b/keyboards/basekeys/trifecta/config.h
@@ -0,0 +1,123 @@
+/* Copyright 2020 Swiftrax and Basekeys.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 "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x04D8
+#define PRODUCT_ID 0xEAF3
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Swiftrax
+#define PRODUCT Trifecta
+
+/* key matrix size */
+#define MATRIX_ROWS 10
+#define MATRIX_COLS 8
+
+/* key matrix pins */
+
+#define MATRIX_ROW_PINS { B0, B7, F7, B1, B6, C6, C7, B5, F6, D2 }
+#define MATRIX_COL_PINS { F0, F1, F4, F5, D1, B2, D0, B3 }
+
+
+#define ENCODERS_PAD_A { D4, D6, D7 }
+#define ENCODERS_PAD_B { B4, D3, D5 }
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+
+#define RGB_DI_PIN E6
+#define DRIVER_LED_TOTAL 80
+
+/* RGB LED */
+#ifdef RGBLIGHT_ENABLE
+#define RGB_DI_PIN E6
+#define RGBLED_NUM 80 // Number of LEDs. backlight x69
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
+#define RGBLIGHT_ANIMATIONS
+#endif
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* Limits the brightness of the LEDS range of 255-0 (255 is default)*/
+#define RGBLIGHT_LIMIT_VAL 128
+
+/* 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
+
+/* EEPROM for via */
+#define DYNAMIC_KEYMAP_LAYER_COUNT 3
+
+/* bootmagic row col assignment */
+#define BOOTMAGIC_LITE_ROW 1
+#define BOOTMAGIC_LITE_COLUMN 0
+
+#ifdef RGB_MATRIX_ENABLE
+# define RGB_MATRIX_KEYPRESSES // reacts to keypresses
+// # define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses)
+// # define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
+//# define RGB_DISABLE_WHEN_USB_SUSPENDED true // turn off effects when suspended
+# define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+# define RGB_MATRIX_LED_PROCESS_LIMIT (DRIVER_LED_TOTAL + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness)
+# define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness)
+# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150 // limits maximum brightness of LEDs to 150 out of 255. Higher may cause the controller to crash.
+# define RGB_MATRIX_HUE_STEP 8
+# define RGB_MATRIX_SAT_STEP 8
+# define RGB_MATRIX_VAL_STEP 8
+# define RGB_MATRIX_SPD_STEP 10
+
+/* Disable the animations you don't want/need. You will need to disable a good number of these *
+ * because they take up a lot of space. Disable until you can successfully compile your firmware. */
+// # define DISABLE_RGB_MATRIX_ALPHAS_MODS
+// # define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+// # define DISABLE_RGB_MATRIX_BREATHING
+// # define DISABLE_RGB_MATRIX_CYCLE_ALL
+// # define DISABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+// # define DISABLE_RGB_MATRIX_CYCLE_UP_DOWN
+// # define DISABLE_RGB_MATRIX_CYCLE_OUT_IN
+// # define DISABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
+// # define DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
+// # define DISABLE_RGB_MATRIX_DUAL_BEACON
+// # define DISABLE_RGB_MATRIX_RAINBOW_BEACON
+// # define DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS
+// # define DISABLE_RGB_MATRIX_RAINDROPS
+// # define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
+// # define DISABLE_RGB_MATRIX_TYPING_HEATMAP
+// # define DISABLE_RGB_MATRIX_DIGITAL_RAIN
+// # define DISABLE_RGB_MATRIX_SOLID_REACTIVE
+// # define DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+// # define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+// # define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+// # define DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+// # define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+// # define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+// # define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+// # define DISABLE_RGB_MATRIX_SPLASH
+// # define DISABLE_RGB_MATRIX_MULTISPLASH
+// # define DISABLE_RGB_MATRIX_SOLID_SPLASH
+// # define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH
+#endif
diff --git a/keyboards/basekeys/trifecta/info.json b/keyboards/basekeys/trifecta/info.json
new file mode 100644
index 000000000..3badb40d2
--- /dev/null
+++ b/keyboards/basekeys/trifecta/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "Trifecta",
+ "url": "https://www.basekeys.com",
+ "maintainer": "Swiftrax",
+ "width": 18,
+ "height": 5.25,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":8.75, "y":0}, {"label":"*", "x":9.75, "y":0}, {"label":"(", "x":10.75, "y":0}, {"label":")", "x":11.75, "y":0}, {"label":"_", "x":12.75, "y":0}, {"label":"+", "x":13.75, "y":0}, {"label":"BS", "x":14.75, "y":0}, {"x":15.75, "y":0}, {"x":17, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":8.25, "y":1}, {"label":"U", "x":9.25, "y":1}, {"label":"I", "x":10.25, "y":1}, {"label":"O", "x":11.25, "y":1}, {"label":"P", "x":12.25, "y":1}, {"label":"{", "x":13.25, "y":1}, {"label":"}", "x":14.25, "y":1}, {"label":"|", "x":15.25, "y":1, "w":1.5}, {"x":17, "y":1}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":8.5, "y":2}, {"label":"J", "x":9.5, "y":2}, {"label":"K", "x":10.5, "y":2}, {"label":"L", "x":11.5, "y":2}, {"label":":", "x":12.5, "y":2}, {"label":"\"", "x":13.5, "y":2}, {"label":"Enter", "x":14.5, "y":2, "w":2.25}, {"x":17, "y":2}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"x":8, "y":3}, {"label":"N", "x":9, "y":3}, {"label":"M", "x":10, "y":3}, {"label":"<", "x":11, "y":3}, {"label":">", "x":12, "y":3}, {"label":"?", "x":13, "y":3}, {"label":"Shift", "x":14, "y":3, "w":1.75}, {"x":16, "y":3.25}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":3, "y":4, "w":1.5}, {"x":4.5, "y":4, "w":2.25}, {"x":6.75, "y":4}, {"x":8.5, "y":4, "w":2.75}, {"label":"Alt", "x":11.25, "y":4, "w":1.5}, {"label":"Win", "x":13.5, "y":4, "w":1.25}, {"x":15, "y":4.25}, {"x":16, "y":4.25}, {"x":17, "y":4.25}]
+ }
+ }
+}
diff --git a/keyboards/basekeys/trifecta/keymaps/default/keymap.c b/keyboards/basekeys/trifecta/keymaps/default/keymap.c
new file mode 100644
index 000000000..727ebf381
--- /dev/null
+++ b/keyboards/basekeys/trifecta/keymaps/default/keymap.c
@@ -0,0 +1,71 @@
+/* Copyright 2020 Swiftrax and Basekeys.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
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+ _BASE,
+ _FN,
+ _MEDIA };
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = 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_BSPC, KC_DEL, 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_BSLS, KC_END,
+ 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_HOME,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, MO(_MEDIA), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_RGUI, KC_RCTL, MO(_FN), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [_FN] = 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, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_TOG, RGB_HUD, RGB_SAD, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END
+ ),
+
+ [_MEDIA] = 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, _______, _______, _______,
+ _______, _______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_TOG, RGB_HUD, RGB_SAD, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END
+ )
+};
+
+void encoder_update_user(uint8_t index, bool clockwise) {
+ if (index == 0) { /* First encoder */
+ if (clockwise) {
+ tap_code(KC_VOLU);
+ } else {
+ tap_code(KC_VOLD);
+ }
+ } else if (index == 1) { /* Second encoder */
+ if (clockwise) {
+ tap_code(KC_MNXT);
+ } else {
+ tap_code(KC_MPRV);
+ }
+ } else if (index == 2) { /* Third encoder */
+ if (clockwise) {
+ tap_code(KC_RGHT);
+ } else {
+ tap_code(KC_LEFT);
+ }
+ }
+}
diff --git a/keyboards/basekeys/trifecta/keymaps/default/rules.mk b/keyboards/basekeys/trifecta/keymaps/default/rules.mk
new file mode 100644
index 000000000..910bd64a5
--- /dev/null
+++ b/keyboards/basekeys/trifecta/keymaps/default/rules.mk
@@ -0,0 +1,2 @@
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no \ No newline at end of file
diff --git a/keyboards/basekeys/trifecta/keymaps/via/keymap.c b/keyboards/basekeys/trifecta/keymaps/via/keymap.c
new file mode 100644
index 000000000..777a9c53f
--- /dev/null
+++ b/keyboards/basekeys/trifecta/keymaps/via/keymap.c
@@ -0,0 +1,71 @@
+/* Copyright 2020 Swiftrax and Basekeys.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
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+ _BASE,
+ _FN,
+ _MEDIA };
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT(
+ KC_ESC, RGB_TOG, 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_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_BSLS, KC_END,
+ 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_HOME,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, MO(_MEDIA), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_RGUI, KC_RCTL, MO(_FN), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [_FN] = 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, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_TOG, RGB_HUD, RGB_SAD, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END
+ ),
+
+ [_MEDIA] = 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, _______, _______, _______,
+ _______, _______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_TOG, RGB_HUD, RGB_SAD, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END
+ )
+};
+
+void encoder_update_user(uint8_t index, bool clockwise) {
+ if (index == 0) { /* First encoder */
+ if (clockwise) {
+ tap_code(KC_VOLU);
+ } else {
+ tap_code(KC_VOLD);
+ }
+ } else if (index == 1) { /* Second encoder */
+ if (clockwise) {
+ tap_code(KC_RGHT);
+ } else {
+ tap_code(KC_LEFT);
+ }
+ } else if (index == 2) { /* Third encoder */
+ if (clockwise) {
+ rgblight_step();
+ } else {
+ rgblight_step_reverse();
+ }
+ }
+}
diff --git a/keyboards/basekeys/trifecta/keymaps/via/rules.mk b/keyboards/basekeys/trifecta/keymaps/via/rules.mk
new file mode 100644
index 000000000..32f462d06
--- /dev/null
+++ b/keyboards/basekeys/trifecta/keymaps/via/rules.mk
@@ -0,0 +1,3 @@
+VIA_ENABLE = yes
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no \ No newline at end of file
diff --git a/keyboards/basekeys/trifecta/readme.md b/keyboards/basekeys/trifecta/readme.md
new file mode 100644
index 000000000..efe6fb0ab
--- /dev/null
+++ b/keyboards/basekeys/trifecta/readme.md
@@ -0,0 +1,17 @@
+# Trifecta
+
+![Trifecta](https://i.imgur.com/tlIwQowl.jpeg)
+
+An Alice style board with arrowkeys, based on the Fate Arisu layout.
+
+* Keyboard Maintainer: [swiftrax](https://github.com/swiftrax)
+* Hardware Supported: Trifecta PCB, ATMEGA32U4-AU
+* Hardware Availability: [Website](https://mykeyboard.eu/catalogue/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make basekeys/trifecta:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs)
+
+[Build guide](https://www.basekeys.com/category/build-guides/)
diff --git a/keyboards/basekeys/trifecta/rules.mk b/keyboards/basekeys/trifecta/rules.mk
new file mode 100644
index 000000000..975fe8462
--- /dev/null
+++ b/keyboards/basekeys/trifecta/rules.mk
@@ -0,0 +1,24 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
+
+ENCODER_ENABLE = yes
diff --git a/keyboards/basekeys/trifecta/trifecta.c b/keyboards/basekeys/trifecta/trifecta.c
new file mode 100644
index 000000000..e7aca201c
--- /dev/null
+++ b/keyboards/basekeys/trifecta/trifecta.c
@@ -0,0 +1,61 @@
+/* Copyright 2020 Swiftrax and Basekeys.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 "trifecta.h"
+
+#ifdef RGB_MATRIX_ENABLE
+
+led_config_t g_led_config = { {
+ { NO_LED, 70, 61, 52, 43, 34, 24, 14 },
+ { 79, 69, 60, 51, 42, 33, 23, NO_LED },
+ { NO_LED, 71, 62, 53, 44, 35, 25, 15 },
+ { 78, 68, 59, 50, 41, 32, 22, NO_LED },
+ { 77, 67, 58, 49, 40, 31, NO_LED, 16 },
+ { NO_LED, 72, 63, 54, 45, 36, 26, NO_LED },
+ { NO_LED, 73, 64, 55, 46, 37, 27, 17 },
+ { 76, 66, 57, 48, 39, 30, 21, NO_LED },
+ { NO_LED, 74, 56, NO_LED, NO_LED, 38, 28, 18 },
+ { 75, 65, NO_LED, NO_LED, 47, 29, 20, 19 }
+}, {
+ // Underglow
+ { 218, 7 }, { 214, 45 }, { 180, 47 }, { 147, 50 }, { 94, 62 }, { 37, 51 }, { 4, 8 }, { 36, 15 },
+ { 62, 18 }, { 78, 5 }, { 119, 7 }, { 145, 16 }, { 166, 3 }, { 200, 16 },
+
+ //Per Key
+ { 185, 11 }, { 191, 22 }, { 188, 33 }, { 200, 46 }, { 200, 57 }, { 212, 57 }, { 188, 57 }, { 181, 44 },
+ { 176, 22 }, { 168, 11 }, { 155, 11 }, { 164, 22 }, { 169, 32 }, { 165, 44 }, { 172, 55 }, { 157, 54 },
+ { 153, 44 }, { 156, 33 }, { 153, 22 }, { 142, 12 }, { 130, 13 }, { 138, 23 }, { 143, 33 }, { 140, 45 },
+ { 137, 56 }, { 128, 47 }, { 132, 35 }, { 127, 25 }, { 119, 16 }, { 107, 17 }, { 115, 27 }, { 120, 37 },
+ { 116, 48 }, { 117, 59 }, { 104, 51 }, { 109, 39 }, { 104, 29 }, { 86, 19 }, { 74, 16 }, { 78, 28 },
+ { 79, 39 }, { 82, 50 }, { 73, 60 }, { 71, 48 }, { 67, 37 }, { 66, 26 }, { 63, 15 }, { 50, 12 },
+ { 55, 24 }, { 55, 35 }, { 59, 47 }, { 50, 56 }, { 47, 45 }, { 43, 33 }, { 43, 22 }, { 39, 10 },
+ { 25, 11 }, { 29, 22 }, { 30, 33 }, { 34, 44 }, { 24, 54 }, { 9, 55 }, { 15, 44 }, { 14, 33 },
+ { 14, 22 }, { 14, 11 }
+}, {
+ 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2,
+
+ 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4
+} };
+#endif \ No newline at end of file
diff --git a/keyboards/basekeys/trifecta/trifecta.h b/keyboards/basekeys/trifecta/trifecta.h
new file mode 100644
index 000000000..ed337813c
--- /dev/null
+++ b/keyboards/basekeys/trifecta/trifecta.h
@@ -0,0 +1,48 @@
+/* Copyright 2020 Swiftrax and Basekeys.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//readabilty
+
+/* This a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+#define LAYOUT( \
+ k10, k01, k11, k02, k12, k03, k13, k04, k14, k05, k15, k06, k16, k07, k17, k37, \
+ k30, k21, k31, k22, k32, k23, k33, k24, k34, k25, k35, k26, k36, k27, k57, \
+ k40, k51, k41, k52, k42, k53, k43, k54, k44, k55, k45, k56, k47, k77, \
+ k70, k61, k71, k62, k72, k63, k73, k64, k74, k65, k75, k66, k76, k67, \
+ k90, k81, k91, k82, k94, k85, k95, k86, k96, k87, k97 \
+) \
+{ \
+ { XXX, k01, k02, k03, k04, k05, k06, k07}, \
+ { k10, k11, k12, k13, k14, k15, k16, k17}, \
+ { XXX, k21, k22, k23, k24, k25, k26, k27}, \
+ { k30, k31, k32, k33, k34, k35, k36, k37}, \
+ { k40, k41, k42, k43, k44, k45, XXX, k47}, \
+ { XXX, k51, k52, k53, k54, k55, k56, k57}, \
+ { XXX, k61, k62, k63, k64, k65, k66, k67}, \
+ { k70, k71, k72, k73, k74, k75, k76, k77}, \
+ { XXX, k81, k82, XXX, XXX, k85, k86, k87}, \
+ { k90, k91, XXX, XXX, k94, k95, k96, k97} \
+}
diff --git a/keyboards/bear_65/bear_65.c b/keyboards/bear_65/bear_65.c
new file mode 100644
index 000000000..a2ae572b8
--- /dev/null
+++ b/keyboards/bear_65/bear_65.c
@@ -0,0 +1,17 @@
+/* Copyright 2020 MudkipMao
+ *
+ * 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 "bear_65.h"
diff --git a/keyboards/bear_65/bear_65.h b/keyboards/bear_65/bear_65.h
new file mode 100644
index 000000000..94ec89c88
--- /dev/null
+++ b/keyboards/bear_65/bear_65.h
@@ -0,0 +1,46 @@
+/* Copyright 2020 MudkipMao
+ *
+ * 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_all( \
+ K31, K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K4E, \
+ K1E, K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+ K2E, K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
+ K40, K43, K45, K46, K48, K4A, K4B, K4C, K4D \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, K2D, K2E }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \
+ { K40, KC_NO, KC_NO, K43, KC_NO, K45, K46, KC_NO, K48, KC_NO, K4A, K4B, K4C, K4D, K4E }, \
+}
+
+#define LAYOUT_full_bs( \
+ K31, K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K4E, \
+ K1E, K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+ K2E, K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
+ K40, K43, K45, K46, K48, K4A, K4B, K4C, K4D \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, KC_NO }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, K2D, K2E }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \
+ { K40, KC_NO, KC_NO, K43, KC_NO, K45, K46, KC_NO, K48, KC_NO, K4A, K4B, K4C, K4D, K4E }, \
+}
diff --git a/keyboards/bear_65/config.h b/keyboards/bear_65/config.h
new file mode 100644
index 000000000..1b7524f07
--- /dev/null
+++ b/keyboards/bear_65/config.h
@@ -0,0 +1,76 @@
+/*
+Copyright 2020 MudkipMao
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xA13B // Jacky's vendor ID, arbitrarily selected by MudkipMao
+#define PRODUCT_ID 0x000A
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Jacky
+#define PRODUCT Jacky Bear 65 Ergo
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+/*
+ * 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 { B0, B1, B2, B3, B7 }
+#define MATRIX_COL_PINS { D0, D1, D2, D3, D5, D4, D6, D7, B4, F7, F6, F5, F4, F1, F0 }
+
+/* Setting the matrix value of top left key for bootmagic lite */
+#define BOOTMAGIC_LITE_ROW 3
+#define BOOTMAGIC_LITE_COLUMN 1
+
+#define DIODE_DIRECTION ROW2COL
+
+#define BACKLIGHT_PIN B6
+#define BACKLIGHT_BREATHING
+#define BACKLIGHT_LEVELS 4
+
+#define RGB_DI_PIN E2
+#ifdef RGB_DI_PIN
+ #define RGBLED_NUM 15
+ #define RGBLIGHT_HUE_STEP 8
+ #define RGBLIGHT_SAT_STEP 8
+ #define RGBLIGHT_VAL_STEP 8
+ #define RGBLIGHT_LIMIT_VAL 139 /* The maximum brightness level */
+ #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
+/*== all animations enable ==*/
+ #define RGBLIGHT_ANIMATIONS
+// /*== or choose animations ==*/
+// #define RGBLIGHT_EFFECT_BREATHING
+// #define RGBLIGHT_EFFECT_RAINBOW_MOOD
+// #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+// #define RGBLIGHT_EFFECT_SNAKE
+// #define RGBLIGHT_EFFECT_KNIGHT
+// #define RGBLIGHT_EFFECT_CHRISTMAS
+// #define RGBLIGHT_EFFECT_STATIC_GRADIENT
+// #define RGBLIGHT_EFFECT_RGB_TEST
+// #define RGBLIGHT_EFFECT_ALTERNATING
+#endif
diff --git a/keyboards/bear_65/info.json b/keyboards/bear_65/info.json
new file mode 100644
index 000000000..67fc090af
--- /dev/null
+++ b/keyboards/bear_65/info.json
@@ -0,0 +1,15 @@
+{
+ "keyboard_name": "Bear 65",
+ "url": "https://qmk.fm/keyboards",
+ "maintainer": "qmk",
+ "width": 20.75,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [{"label":"Esc", "x":0.5, "y":0}, {"label":"~", "x":1.75, "y":0}, {"label":"!", "x":2.75, "y":0}, {"label":"@", "x":3.75, "y":0}, {"label":"#", "x":4.75, "y":0}, {"label":"$", "x":5.75, "y":0}, {"label":"%", "x":6.75, "y":0}, {"label":"^", "x":7.75, "y":0}, {"label":"&", "x":11.25, "y":0}, {"label":"*", "x":12.25, "y":0}, {"label":"(", "x":13.25, "y":0}, {"label":")", "x":14.25, "y":0}, {"label":"_", "x":15.25, "y":0}, {"label":"+", "x":16.25, "y":0}, {"label":"|", "x":17.25, "y":0}, {"label":"~", "x":18.25, "y":0}, {"label":"Del", "x":19.75, "y":0}, {"label":"PgUp", "x":0.25, "y":1}, {"label":"Tab", "x":1.75, "y":1, "w":1.5}, {"label":"Q", "x":3.25, "y":1}, {"label":"W", "x":4.25, "y":1}, {"label":"E", "x":5.25, "y":1}, {"label":"R", "x":6.25, "y":1}, {"label":"T", "x":7.25, "y":1}, {"label":"Y", "x":10.75, "y":1}, {"label":"U", "x":11.75, "y":1}, {"label":"I", "x":12.75, "y":1}, {"label":"O", "x":13.75, "y":1}, {"label":"P", "x":14.75, "y":1}, {"label":"{", "x":15.75, "y":1}, {"label":"}", "x":16.75, "y":1}, {"label":"Backspace", "x":17.75, "y":1, "w":1.5}, {"label":"PgDn", "x":0, "y":2}, {"label":"Caps Lock", "x":1.75, "y":2, "w":1.75}, {"label":"A", "x":3.5, "y":2}, {"label":"S", "x":4.5, "y":2}, {"label":"D", "x":5.5, "y":2}, {"label":"F", "x":6.5, "y":2}, {"label":"G", "x":7.5, "y":2}, {"label":"H", "x":11, "y":2}, {"label":"J", "x":12, "y":2}, {"label":"K", "x":13, "y":2}, {"label":"L", "x":14, "y":2}, {"label":":", "x":15, "y":2}, {"label":"\"", "x":16, "y":2}, {"label":"Enter", "x":17, "y":2, "w":2.25}, {"label":"Shift", "x":1.75, "y":3, "w":2.25}, {"label":"Z", "x":4, "y":3}, {"label":"X", "x":5, "y":3}, {"label":"C", "x":6, "y":3}, {"label":"V", "x":7, "y":3}, {"label":"B", "x":8, "y":3}, {"label":"B", "x":10.5, "y":3}, {"label":"N", "x":11.5, "y":3}, {"label":"M", "x":12.5, "y":3}, {"label":"<", "x":13.5, "y":3}, {"label":">", "x":14.5, "y":3}, {"label":"?", "x":15.5, "y":3}, {"label":"Shift", "x":16.5, "y":3, "w":1.75}, {"label":"Up", "x":18.25, "y":3}, {"label":"Ctrl", "x":1.75, "y":4, "w":1.5}, {"label":"Alt", "x":4.75, "y":4, "w":1.25}, {"x":6, "y":4, "w":2.25}, {"label":"Win", "x":8.25, "y":4}, {"x":10.5, "y":4, "w":2.75}, {"label":"Alt", "x":13.25, "y":4, "w":1.5}, {"label":"Left", "x":17.25, "y":4}, {"label":"Down", "x":18.25, "y":4}, {"label":"Right", "x":19.25, "y":4}]
+ },
+ "LAYOUT_full_bs": {
+ "layout": [{"label":"Esc", "x":0.5, "y":0}, {"label":"~", "x":1.75, "y":0}, {"label":"!", "x":2.75, "y":0}, {"label":"@", "x":3.75, "y":0}, {"label":"#", "x":4.75, "y":0}, {"label":"$", "x":5.75, "y":0}, {"label":"%", "x":6.75, "y":0}, {"label":"^", "x":7.75, "y":0}, {"label":"&", "x":11.25, "y":0}, {"label":"*", "x":12.25, "y":0}, {"label":"(", "x":13.25, "y":0}, {"label":")", "x":14.25, "y":0}, {"label":"_", "x":15.25, "y":0}, {"label":"+", "x":16.25, "y":0}, {"label":"Backspace", "x":17.25, "y":0, "w":2}, {"label":"Del", "x":19.75, "y":0}, {"label":"PgUp", "x":0.25, "y":1}, {"label":"Tab", "x":1.75, "y":1, "w":1.5}, {"label":"Q", "x":3.25, "y":1}, {"label":"W", "x":4.25, "y":1}, {"label":"E", "x":5.25, "y":1}, {"label":"R", "x":6.25, "y":1}, {"label":"T", "x":7.25, "y":1}, {"label":"Y", "x":10.75, "y":1}, {"label":"U", "x":11.75, "y":1}, {"label":"I", "x":12.75, "y":1}, {"label":"O", "x":13.75, "y":1}, {"label":"P", "x":14.75, "y":1}, {"label":"{", "x":15.75, "y":1}, {"label":"}", "x":16.75, "y":1}, {"label":"|", "x":17.75, "y":1, "w":1.5}, {"label":"PgDn", "x":0, "y":2}, {"label":"Caps Lock", "x":1.75, "y":2, "w":1.75}, {"label":"A", "x":3.5, "y":2}, {"label":"S", "x":4.5, "y":2}, {"label":"D", "x":5.5, "y":2}, {"label":"F", "x":6.5, "y":2}, {"label":"G", "x":7.5, "y":2}, {"label":"H", "x":11, "y":2}, {"label":"J", "x":12, "y":2}, {"label":"K", "x":13, "y":2}, {"label":"L", "x":14, "y":2}, {"label":":", "x":15, "y":2}, {"label":"\"", "x":16, "y":2}, {"label":"Enter", "x":17, "y":2, "w":2.25}, {"label":"Shift", "x":1.75, "y":3, "w":2.25}, {"label":"Z", "x":4, "y":3}, {"label":"X", "x":5, "y":3}, {"label":"C", "x":6, "y":3}, {"label":"V", "x":7, "y":3}, {"label":"B", "x":8, "y":3}, {"label":"B", "x":10.5, "y":3}, {"label":"N", "x":11.5, "y":3}, {"label":"M", "x":12.5, "y":3}, {"label":"<", "x":13.5, "y":3}, {"label":">", "x":14.5, "y":3}, {"label":"?", "x":15.5, "y":3}, {"label":"Shift", "x":16.5, "y":3, "w":1.75}, {"label":"Up", "x":18.25, "y":3}, {"label":"Ctrl", "x":1.75, "y":4, "w":1.5}, {"label":"Alt", "x":4.75, "y":4, "w":1.25}, {"x":6, "y":4, "w":2.25}, {"label":"Win", "x":8.25, "y":4}, {"x":10.5, "y":4, "w":2.75}, {"label":"Alt", "x":13.25, "y":4, "w":1.5}, {"label":"Left", "x":17.25, "y":4}, {"label":"Down", "x":18.25, "y":4}, {"label":"Right", "x":19.25, "y":4}]
+ }
+ }
+}
diff --git a/keyboards/bear_65/keymaps/default/keymap.c b/keyboards/bear_65/keymaps/default/keymap.c
new file mode 100644
index 000000000..b7d5cdf61
--- /dev/null
+++ b/keyboards/bear_65/keymaps/default/keymap.c
@@ -0,0 +1,39 @@
+/* Copyright 2020 MudkipMao
+ *
+ * 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
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+ _BASE,
+ _FN,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT_all(
+ KC_ESC, 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_GRV, KC_DEL,
+ 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_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_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LALT, KC_SPC, KC_LGUI, KC_SPC, MO(_FN), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [_FN] = LAYOUT_all(
+ 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, _______, _______, _______,
+ RGB_MOD, _______, KC_BRID, KC_BRIU, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAD, RGB_VAI, _______,
+ RGB_TOG, _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______,_______
+ )
+};
diff --git a/keyboards/bear_65/keymaps/default/readme.md b/keyboards/bear_65/keymaps/default/readme.md
new file mode 100644
index 000000000..d51734855
--- /dev/null
+++ b/keyboards/bear_65/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for bear_65
diff --git a/keyboards/bear_65/keymaps/via/keymap.c b/keyboards/bear_65/keymaps/via/keymap.c
new file mode 100644
index 000000000..2ddc5b43d
--- /dev/null
+++ b/keyboards/bear_65/keymaps/via/keymap.c
@@ -0,0 +1,47 @@
+/* Copyright 2020 MudkipMao
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_full_bs(
+ KC_ESC, 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_DEL,
+ 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_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_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LALT, KC_SPC, KC_LGUI, KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_full_bs(
+ 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, _______, _______,
+ RGB_MOD, _______, KC_BRID, KC_BRIU, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAD, RGB_VAI, _______,
+ RGB_TOG, _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______,_______
+ ),
+ [2] = LAYOUT_full_bs(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______,_______
+ ),
+ [3] = LAYOUT_full_bs(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______,_______
+ )
+};
diff --git a/keyboards/bear_65/keymaps/via/readme.md b/keyboards/bear_65/keymaps/via/readme.md
new file mode 100644
index 000000000..5cb67ab25
--- /dev/null
+++ b/keyboards/bear_65/keymaps/via/readme.md
@@ -0,0 +1 @@
+# The via keymap for bear_65
diff --git a/keyboards/bear_65/keymaps/via/rules.mk b/keyboards/bear_65/keymaps/via/rules.mk
new file mode 100644
index 000000000..1e5b99807
--- /dev/null
+++ b/keyboards/bear_65/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/bear_65/readme.md b/keyboards/bear_65/readme.md
new file mode 100644
index 000000000..44a5e9553
--- /dev/null
+++ b/keyboards/bear_65/readme.md
@@ -0,0 +1,19 @@
+# Bear 65
+
+![Bear 65](https://i.imgur.com/W1sVP1Tl.jpg)
+
+A gasket-mounted 65% keyboard inspired by the [TGR Alice](https://github.com/qmk/qmk_firmware/tree/master/keyboards/tgr/alice). Designed and produced by [jacky](https://geekhack.org/index.php?action=profile;u=63864) from Geekhack.
+
+* Keyboard Maintainer: QMK Community
+* Hardware Supported: Bear 65
+* Hardware Availability: The GB happened July 15th 2020, units are still in production
+
+Make example for this keyboard (after setting up your build environment):
+
+ make bear_65:default
+
+Flashing example for this keyboard:
+
+ make bear_65: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/bear_65/rules.mk b/keyboards/bear_65/rules.mk
new file mode 100644
index 000000000..339c37c7e
--- /dev/null
+++ b/keyboards/bear_65/rules.mk
@@ -0,0 +1,24 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
+
+LTO_ENABLE = yes # Use LTO flags to reduce firmware size
diff --git a/keyboards/bm60rgb_iso/bm60rgb_iso.c b/keyboards/bm60rgb_iso/bm60rgb_iso.c
index 3fa1bc898..4e292bc54 100644
--- a/keyboards/bm60rgb_iso/bm60rgb_iso.c
+++ b/keyboards/bm60rgb_iso/bm60rgb_iso.c
@@ -32,7 +32,9 @@ led_config_t g_led_config = { {
// LShift, <, Z, X, C, V, B, N, M, ,, ., /, Shift, Up,
{ 3, 48 }, { 22, 48 }, { 33, 48 }, { 48, 48 }, { 63, 48 }, { 78, 48 }, { 93, 48 }, { 108, 48 }, { 123, 48 }, { 138, 48 }, { 153, 48 }, { 168, 48 }, { 194, 48 }, { 213, 48 },
// Ctrl, GUI, Alt, Space, RAlt, FN, Left, Down, Right
- { 3, 64 }, { 22, 64 }, { 33, 64 }, { 101, 64 }, { 135, 64 }, { 153, 64 }, { 195, 64 }, { 210, 64 }, { 225, 64 }
+ { 3, 64 }, { 22, 64 }, { 33, 64 }, { 101, 64 }, { 135, 64 }, { 153, 64 }, { 195, 64 }, { 210, 64 }, { 225, 64 },
+ // UNDERGLOW
+ { 216, 32 }, { 180, 32 }, { 144, 32 }, { 108, 32 }, { 72, 32 }, { 36, 32 }
}, {
// Esc, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, =, Backspace
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
@@ -43,6 +45,8 @@ led_config_t g_led_config = { {
// LShift,<, Z, X, C, V, B, N, M, ,, ., Shift, Up, /
1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4,
// Ctrl, GUI, Alt, Space, RAlt, FN, Left, Down, Right
- 1, 1, 1, 4, 1, 1, 1, 1, 1
+ 1, 1, 1, 4, 1, 1, 1, 1, 1,
+ // UNDERGLOW
+ 2, 2, 2, 2, 2, 2
} };
#endif
diff --git a/keyboards/boardsource/4x12/config.h b/keyboards/boardsource/4x12/config.h
index e8f858586..b1314ca7f 100644
--- a/keyboards/boardsource/4x12/config.h
+++ b/keyboards/boardsource/4x12/config.h
@@ -3,7 +3,7 @@
#include "config_common.h"
/* USB Device descriptor parameter */
-#define VENDOR_ID 0xF7E0
+#define VENDOR_ID 0x4273 // "Bs" - Boardsource
#define PRODUCT_ID 0x0412
#define DEVICE_VER 0x0000
#define MANUFACTURER Boardsource
diff --git a/keyboards/coseyfannitutti/discipad/keymaps/via/rules.mk b/keyboards/coseyfannitutti/discipad/keymaps/via/rules.mk
index 00c11accc..fcb7b9eab 100644
--- a/keyboards/coseyfannitutti/discipad/keymaps/via/rules.mk
+++ b/keyboards/coseyfannitutti/discipad/keymaps/via/rules.mk
@@ -1,4 +1,3 @@
VIA_ENABLE = yes
LTO_ENABLE = yes
-EXTRAKEY_ENABLE = no
MOUSEKEY_ENABLE = no
diff --git a/keyboards/coseyfannitutti/discipline/keymaps/via/rules.mk b/keyboards/coseyfannitutti/discipline/keymaps/via/rules.mk
index d0e4977b8..fcb7b9eab 100644
--- a/keyboards/coseyfannitutti/discipline/keymaps/via/rules.mk
+++ b/keyboards/coseyfannitutti/discipline/keymaps/via/rules.mk
@@ -1,4 +1,3 @@
VIA_ENABLE = yes
LTO_ENABLE = yes
-EXTRAKEY_ENABLE = no
-MOUSEKEY_ENABLE = no \ No newline at end of file
+MOUSEKEY_ENABLE = no
diff --git a/keyboards/coseyfannitutti/mysterium/info.json b/keyboards/coseyfannitutti/mysterium/info.json
index 1b993a2ed..4c180b7d5 100644
--- a/keyboards/coseyfannitutti/mysterium/info.json
+++ b/keyboards/coseyfannitutti/mysterium/info.json
@@ -8,8 +8,14 @@
"LAYOUT_tkl_ansi": {
"layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":2, "y":0}, {"label":"F2", "x":3, "y":0}, {"label":"F3", "x":4, "y":0}, {"label":"F4", "x":5, "y":0}, {"label":"F5", "x":6.5, "y":0}, {"label":"F6", "x":7.5, "y":0}, {"label":"F7", "x":8.5, "y":0}, {"label":"F8", "x":9.5, "y":0}, {"label":"F9", "x":11, "y":0}, {"label":"F10", "x":12, "y":0}, {"label":"F11", "x":13, "y":0}, {"label":"F12", "x":14, "y":0}, {"label":"PrtSc", "x":15.25, "y":0}, {"label":"Scroll Lock", "x":16.25, "y":0}, {"label":"Pause", "x":17.25, "y":0}, {"label":"~", "x":0, "y":1.25}, {"label":"!", "x":1, "y":1.25}, {"label":"@", "x":2, "y":1.25}, {"label":"#", "x":3, "y":1.25}, {"label":"$", "x":4, "y":1.25}, {"label":"%", "x":5, "y":1.25}, {"label":"^", "x":6, "y":1.25}, {"label":"&", "x":7, "y":1.25}, {"label":"*", "x":8, "y":1.25}, {"label":"(", "x":9, "y":1.25}, {"label":")", "x":10, "y":1.25}, {"label":"_", "x":11, "y":1.25}, {"label":"+", "x":12, "y":1.25}, {"label":"Backspace", "x":13, "y":1.25, "w":2}, {"label":"Insert", "x":15.25, "y":1.25}, {"label":"Home", "x":16.25, "y":1.25}, {"label":"PgUp", "x":17.25, "y":1.25}, {"label":"Tab", "x":0, "y":2.25, "w":1.5}, {"label":"Q", "x":1.5, "y":2.25}, {"label":"W", "x":2.5, "y":2.25}, {"label":"E", "x":3.5, "y":2.25}, {"label":"R", "x":4.5, "y":2.25}, {"label":"T", "x":5.5, "y":2.25}, {"label":"Y", "x":6.5, "y":2.25}, {"label":"U", "x":7.5, "y":2.25}, {"label":"I", "x":8.5, "y":2.25}, {"label":"O", "x":9.5, "y":2.25}, {"label":"P", "x":10.5, "y":2.25}, {"label":"{", "x":11.5, "y":2.25}, {"label":"}", "x":12.5, "y":2.25}, {"label":"|", "x":13.5, "y":2.25, "w":1.5}, {"label":"Delete", "x":15.25, "y":2.25}, {"label":"End", "x":16.25, "y":2.25}, {"label":"PgDn", "x":17.25, "y":2.25}, {"label":"Caps Lock", "x":0, "y":3.25, "w":1.75}, {"label":"A", "x":1.75, "y":3.25}, {"label":"S", "x":2.75, "y":3.25}, {"label":"D", "x":3.75, "y":3.25}, {"label":"F", "x":4.75, "y":3.25}, {"label":"G", "x":5.75, "y":3.25}, {"label":"H", "x":6.75, "y":3.25}, {"label":"J", "x":7.75, "y":3.25}, {"label":"K", "x":8.75, "y":3.25}, {"label":"L", "x":9.75, "y":3.25}, {"label":":", "x":10.75, "y":3.25}, {"label":"\"", "x":11.75, "y":3.25}, {"label":"Enter", "x":12.75, "y":3.25, "w":2.25}, {"label":"Shift", "x":0, "y":4.25, "w":2.25}, {"label":"Z", "x":2.25, "y":4.25}, {"label":"X", "x":3.25, "y":4.25}, {"label":"C", "x":4.25, "y":4.25}, {"label":"V", "x":5.25, "y":4.25}, {"label":"B", "x":6.25, "y":4.25}, {"label":"N", "x":7.25, "y":4.25}, {"label":"M", "x":8.25, "y":4.25}, {"label":"<", "x":9.25, "y":4.25}, {"label":">", "x":10.25, "y":4.25}, {"label":"?", "x":11.25, "y":4.25}, {"label":"Shift", "x":12.25, "y":4.25, "w":2.75}, {"label":"\u2191", "x":16.25, "y":4.25}, {"label":"Ctrl", "x":0, "y":5.25, "w":1.25}, {"label":"Win", "x":1.25, "y":5.25, "w":1.25}, {"label":"Alt", "x":2.5, "y":5.25, "w":1.25}, {"x":3.75, "y":5.25, "w":6.25}, {"label":"Alt", "x":10, "y":5.25, "w":1.25}, {"label":"Menu", "x":11.25, "y":5.25, "w":1.25}, {"label":"Fn", "x":12.5, "y":5.25, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":5.25, "w":1.25}, {"label":"\u2190", "x":15.25, "y":5.25}, {"label":"\u2193", "x":16.25, "y":5.25}, {"label":"\u2192", "x":17.25, "y":5.25}]
},
- "LAYOUT_tkl_ansi_tsangan": {
+ "LAYOUT_tkl_ansi_7u": {
"layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":2, "y":0}, {"label":"F2", "x":3, "y":0}, {"label":"F3", "x":4, "y":0}, {"label":"F4", "x":5, "y":0}, {"label":"F5", "x":6.5, "y":0}, {"label":"F6", "x":7.5, "y":0}, {"label":"F7", "x":8.5, "y":0}, {"label":"F8", "x":9.5, "y":0}, {"label":"F9", "x":11, "y":0}, {"label":"F10", "x":12, "y":0}, {"label":"F11", "x":13, "y":0}, {"label":"F12", "x":14, "y":0}, {"label":"PrtSc", "x":15.25, "y":0}, {"label":"Scroll Lock", "x":16.25, "y":0}, {"label":"Pause", "x":17.25, "y":0}, {"label":"~", "x":0, "y":1.25}, {"label":"!", "x":1, "y":1.25}, {"label":"@", "x":2, "y":1.25}, {"label":"#", "x":3, "y":1.25}, {"label":"$", "x":4, "y":1.25}, {"label":"%", "x":5, "y":1.25}, {"label":"^", "x":6, "y":1.25}, {"label":"&", "x":7, "y":1.25}, {"label":"*", "x":8, "y":1.25}, {"label":"(", "x":9, "y":1.25}, {"label":")", "x":10, "y":1.25}, {"label":"_", "x":11, "y":1.25}, {"label":"+", "x":12, "y":1.25}, {"label":"Backspace", "x":13, "y":1.25, "w":2}, {"label":"Insert", "x":15.25, "y":1.25}, {"label":"Home", "x":16.25, "y":1.25}, {"label":"PgUp", "x":17.25, "y":1.25}, {"label":"Tab", "x":0, "y":2.25, "w":1.5}, {"label":"Q", "x":1.5, "y":2.25}, {"label":"W", "x":2.5, "y":2.25}, {"label":"E", "x":3.5, "y":2.25}, {"label":"R", "x":4.5, "y":2.25}, {"label":"T", "x":5.5, "y":2.25}, {"label":"Y", "x":6.5, "y":2.25}, {"label":"U", "x":7.5, "y":2.25}, {"label":"I", "x":8.5, "y":2.25}, {"label":"O", "x":9.5, "y":2.25}, {"label":"P", "x":10.5, "y":2.25}, {"label":"{", "x":11.5, "y":2.25}, {"label":"}", "x":12.5, "y":2.25}, {"label":"|", "x":13.5, "y":2.25, "w":1.5}, {"label":"Delete", "x":15.25, "y":2.25}, {"label":"End", "x":16.25, "y":2.25}, {"label":"PgDn", "x":17.25, "y":2.25}, {"label":"Caps Lock", "x":0, "y":3.25, "w":1.75}, {"label":"A", "x":1.75, "y":3.25}, {"label":"S", "x":2.75, "y":3.25}, {"label":"D", "x":3.75, "y":3.25}, {"label":"F", "x":4.75, "y":3.25}, {"label":"G", "x":5.75, "y":3.25}, {"label":"H", "x":6.75, "y":3.25}, {"label":"J", "x":7.75, "y":3.25}, {"label":"K", "x":8.75, "y":3.25}, {"label":"L", "x":9.75, "y":3.25}, {"label":":", "x":10.75, "y":3.25}, {"label":"\"", "x":11.75, "y":3.25}, {"label":"Enter", "x":12.75, "y":3.25, "w":2.25}, {"label":"Shift", "x":0, "y":4.25, "w":2.25}, {"label":"Z", "x":2.25, "y":4.25}, {"label":"X", "x":3.25, "y":4.25}, {"label":"C", "x":4.25, "y":4.25}, {"label":"V", "x":5.25, "y":4.25}, {"label":"B", "x":6.25, "y":4.25}, {"label":"N", "x":7.25, "y":4.25}, {"label":"M", "x":8.25, "y":4.25}, {"label":"<", "x":9.25, "y":4.25}, {"label":">", "x":10.25, "y":4.25}, {"label":"?", "x":11.25, "y":4.25}, {"label":"Shift", "x":12.25, "y":4.25, "w":2.75}, {"label":"\u2191", "x":16.25, "y":4.25}, {"label":"Ctrl", "x":0, "y":5.25, "w":1.5}, {"label":"Win", "x":1.5, "y":5.25}, {"label":"Alt", "x":2.5, "y":5.25, "w":1.5}, {"x":4, "y":5.25, "w":7}, {"label":"Alt", "x":11, "y":5.25, "w":1.5}, {"label":"Fn", "x":12.5, "y":5.25}, {"label":"Ctrl", "x":13.5, "y":5.25, "w":1.5}, {"label":"\u2190", "x":15.25, "y":5.25}, {"label":"\u2193", "x":16.25, "y":5.25}, {"label":"\u2192", "x":17.25, "y":5.25}]
+ },
+ "LAYOUT_tkl_iso": {
+ "layout": [{"x":0, "y":0.25}, {"x":2, "y":0.25}, {"x":3, "y":0.25}, {"x":4, "y":0.25}, {"x":5, "y":0.25}, {"x":6.5, "y":0.25}, {"x":7.5, "y":0.25}, {"x":8.5, "y":0.25}, {"x":9.5, "y":0.25}, {"x":11, "y":0.25}, {"x":12, "y":0.25}, {"x":13, "y":0.25}, {"x":14, "y":0.25}, {"x":15.25, "y":0.25}, {"x":16.25, "y":0.25}, {"x":17.25, "y":0.25}, {"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.75, "y":2.5, "w":1.25, "h":2}, {"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}, {"x":0, "y":4.5, "w":1.25}, {"x":1.25, "y":4.5}, {"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}]
+ },
+ "LAYOUT_tkl_iso_7u": {
+ "layout": [{"x":0, "y":0.25}, {"x":2, "y":0.25}, {"x":3, "y":0.25}, {"x":4, "y":0.25}, {"x":5, "y":0.25}, {"x":6.5, "y":0.25}, {"x":7.5, "y":0.25}, {"x":8.5, "y":0.25}, {"x":9.5, "y":0.25}, {"x":11, "y":0.25}, {"x":12, "y":0.25}, {"x":13, "y":0.25}, {"x":14, "y":0.25}, {"x":15.25, "y":0.25}, {"x":16.25, "y":0.25}, {"x":17.25, "y":0.25}, {"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.75, "y":2.5, "w":1.25, "h":2}, {"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}, {"x":0, "y":4.5, "w":1.25}, {"x":1.25, "y":4.5}, {"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.5}, {"x":1.5, "y":5.5}, {"x":2.5, "y":5.5, "w":1.5}, {"x":4, "y":5.5, "w":7}, {"x":11, "y":5.5, "w":1.5}, {"x":12.5, "y":5.5}, {"x":13.5, "y":5.5, "w":1.5}, {"x":15.25, "y":5.5}, {"x":16.25, "y":5.5}, {"x":17.25, "y":5.5}]
}
}
} \ No newline at end of file
diff --git a/keyboards/coseyfannitutti/mysterium/keymaps/tsangan/keymap.c b/keyboards/coseyfannitutti/mysterium/keymaps/ansi_7u/keymap.c
index 883de97ff..35487eee5 100644
--- a/keyboards/coseyfannitutti/mysterium/keymaps/tsangan/keymap.c
+++ b/keyboards/coseyfannitutti/mysterium/keymaps/ansi_7u/keymap.c
@@ -16,7 +16,7 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_tkl_ansi_tsangan(
+ [0] = LAYOUT_tkl_ansi_7u(
KC_GESC, 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,
@@ -24,7 +24,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
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_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
- [1] = LAYOUT_tkl_ansi_tsangan(
+ [1] = LAYOUT_tkl_ansi_7u(
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, 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,
diff --git a/keyboards/coseyfannitutti/mysterium/keymaps/iso/keymap.c b/keyboards/coseyfannitutti/mysterium/keymaps/iso/keymap.c
new file mode 100644
index 000000000..bad4dc2f4
--- /dev/null
+++ b/keyboards/coseyfannitutti/mysterium/keymaps/iso/keymap.c
@@ -0,0 +1,34 @@
+/* Copyright 2019 COSEYFANNITUTTI
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_tkl_iso(
+ KC_GESC, 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_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_NUHS, KC_ENT,
+ 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_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
+
+ [1] = LAYOUT_tkl_iso(
+ 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, 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, KC_TRNS, KC_VOLU,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_TRNS)
+};
diff --git a/keyboards/coseyfannitutti/mysterium/keymaps/via/keymap.c b/keyboards/coseyfannitutti/mysterium/keymaps/via/keymap.c
index bd8de69a0..f7baaea8f 100644
--- a/keyboards/coseyfannitutti/mysterium/keymaps/via/keymap.c
+++ b/keyboards/coseyfannitutti/mysterium/keymaps/via/keymap.c
@@ -16,35 +16,35 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_tkl_ansi(
+ [0] = LAYOUT_tkl_iso(
KC_GESC, 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, KC_RGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
+ 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_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_BSLS,
+ 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_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
- [1] = LAYOUT_tkl_ansi(
+ [1] = LAYOUT_tkl_iso(
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, 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, KC_VOLU,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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, KC_TRNS, KC_VOLU,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_TRNS),
- [2] = LAYOUT_tkl_ansi(
+ [2] = LAYOUT_tkl_iso(
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, 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, 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,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),
- [3] = LAYOUT_tkl_ansi(
+ [3] = LAYOUT_tkl_iso(
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, 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, 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,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)
};
diff --git a/keyboards/coseyfannitutti/mysterium/keymaps/via/rules.mk b/keyboards/coseyfannitutti/mysterium/keymaps/via/rules.mk
index d0e4977b8..36b7ba9cb 100644
--- a/keyboards/coseyfannitutti/mysterium/keymaps/via/rules.mk
+++ b/keyboards/coseyfannitutti/mysterium/keymaps/via/rules.mk
@@ -1,4 +1,2 @@
VIA_ENABLE = yes
LTO_ENABLE = yes
-EXTRAKEY_ENABLE = no
-MOUSEKEY_ENABLE = no \ No newline at end of file
diff --git a/keyboards/coseyfannitutti/mysterium/mysterium.h b/keyboards/coseyfannitutti/mysterium/mysterium.h
index c5deacd83..b705f04c0 100644
--- a/keyboards/coseyfannitutti/mysterium/mysterium.h
+++ b/keyboards/coseyfannitutti/mysterium/mysterium.h
@@ -37,7 +37,7 @@
{ K50, K51, K52, _x_, _x_, _x_, K56, _x_, _x_, K59, K5A, _x_, K5C, _x_, K5E, K5F, K5G, K5H } \
}
-#define LAYOUT_tkl_ansi_tsangan( \
+#define LAYOUT_tkl_ansi_7u( \
K00, K02, K03, K04, K05, K06, K07, K08, K09, K0B, K0C, K0D, K0E, K0F, K0G, K0H, \
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1F, K1G, K1H, \
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2F, K2G, K2H, \
@@ -53,3 +53,37 @@
{ K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, _x_, _x_, K4D, _x_, _x_, K4G, _x_ }, \
{ K50, K51, K52, _x_, _x_, _x_, K56, _x_, _x_, _x_, K5A, _x_, K5C, _x_, K5E, K5F, K5G, K5H } \
}
+
+#define LAYOUT_tkl_iso( \
+ K00, K02, K03, K04, K05, K06, K07, K08, K09, K0B, K0C, K0D, K0E, K0F, K0G, K0H, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1F, K1G, K1H, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2F, K2G, K2H, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K2D, \
+ K40, K01, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4D, K4G, \
+ K50, K51, K52, K56, K59, K5A, K5C, K5E, K5F, K5G, K5H \
+) \
+{ \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, _x_, K0B, K0C, K0D, K0E, K0F, K0G, K0H }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, _x_, K1F, K1G, K1H }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, _x_, K2F, K2G, K2H }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, _x_, K3D, _x_, _x_, _x_, _x_ }, \
+ { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, _x_, _x_, K4D, _x_, _x_, K4G, _x_ }, \
+ { K50, K51, K52, _x_, _x_, _x_, K56, _x_, _x_, K59, K5A, _x_, K5C, _x_, K5E, K5F, K5G, K5H } \
+}
+
+#define LAYOUT_tkl_iso_7u( \
+ K00, K02, K03, K04, K05, K06, K07, K08, K09, K0B, K0C, K0D, K0E, K0F, K0G, K0H, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1F, K1G, K1H, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2F, K2G, K2H, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K2D, \
+ K40, K01, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4D, K4G, \
+ K50, K51, K52, K56, K5A, K5C, K5E, K5F, K5G, K5H \
+) \
+{ \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, _x_, K0B, K0C, K0D, K0E, K0F, K0G, K0H }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, _x_, K1F, K1G, K1H }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, _x_, K2F, K2G, K2H }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, _x_, K3D, _x_, _x_, _x_, _x_ }, \
+ { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, _x_, _x_, K4D, _x_, _x_, K4G, _x_ }, \
+ { K50, K51, K52, _x_, _x_, _x_, K56, _x_, _x_, _x_, K5A, _x_, K5C, _x_, K5E, K5F, K5G, K5H } \
+}
diff --git a/keyboards/coseyfannitutti/romeo/keymaps/via/rules.mk b/keyboards/coseyfannitutti/romeo/keymaps/via/rules.mk
index d0e4977b8..fcb7b9eab 100644
--- a/keyboards/coseyfannitutti/romeo/keymaps/via/rules.mk
+++ b/keyboards/coseyfannitutti/romeo/keymaps/via/rules.mk
@@ -1,4 +1,3 @@
VIA_ENABLE = yes
LTO_ENABLE = yes
-EXTRAKEY_ENABLE = no
-MOUSEKEY_ENABLE = no \ No newline at end of file
+MOUSEKEY_ENABLE = no
diff --git a/keyboards/crkbd/keymaps/bcat/keymap.c b/keyboards/crkbd/keymaps/bcat/keymap.c
index 6018835c2..7b8329fea 100644
--- a/keyboards/crkbd/keymaps/bcat/keymap.c
+++ b/keyboards/crkbd/keymaps/bcat/keymap.c
@@ -13,9 +13,9 @@ enum layer {
#define LY_RSE MO(LAYER_RAISE)
#define KY_CSPC LCTL(KC_SPC)
-#define KY_LOCK LGUI(KC_L)
-#define KY_WINL LGUI(KC_LEFT)
-#define KY_WINR LGUI(KC_RGHT)
+#define KY_ZMIN LCTL(KC_EQL)
+#define KY_ZMOUT LCTL(KC_MINS)
+#define KY_ZMRST LCTL(KC_0)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Default layer: http://www.keyboard-layout-editor.com/#/gists/08d9827d916662a9414f48805aa895a5 */
@@ -29,7 +29,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Lower layer: http://www.keyboard-layout-editor.com/#/gists/c3fba5eaa2cd70fdfbdbc0f9e34d3bc0 */
[LAYER_LOWER] = LAYOUT(
MC_ALTT, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
- KY_CSPC, KY_WINL, KY_WINR, KY_LOCK, KC_WBAK, KC_WFWD, KC_PIPE, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_TILD,
+ KY_CSPC, KY_ZMRST, KY_ZMOUT, KY_ZMIN, KC_WBAK, KC_WFWD, KC_PIPE, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_TILD,
_______, KC_APP, KC_PSCR, KC_SLCK, KC_PAUS, KC_LGUI, KC_BSLS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_GRV,
_______, _______, _______, _______, _______, _______
),
diff --git a/keyboards/crkbd/keymaps/bcat/readme.md b/keyboards/crkbd/keymaps/bcat/readme.md
index 743a6572d..4ffb1562b 100644
--- a/keyboards/crkbd/keymaps/bcat/readme.md
+++ b/keyboards/crkbd/keymaps/bcat/readme.md
@@ -50,7 +50,7 @@ elimination.
## Lower layer
-![Lower layer layout](https://i.imgur.com/djIkwsa.png)
+![Lower layer layout](https://i.imgur.com/vaIc9JY.png)
([KLE](http://www.keyboard-layout-editor.com/#/gists/c3fba5eaa2cd70fdfbdbc0f9e34d3bc0))
@@ -74,8 +74,8 @@ And yup, the shifted versions are above the unshifted versions.
* Remaining keys from a TKL are placed out of the way on the bottom row of the
left half.
-* The home row on the left half contains handy shortcuts for window movement,
-and browser navigation, and screen lock.
+* The home row on the left half contains handy shortcuts for zooming and browser
+navigation.
* Lower+Esc is bound to Ctrl+Space because the Ctrl and Space keys are both on
the left thumb, so this key combination (which I use for tmux prefix and editor
@@ -109,7 +109,8 @@ keys (F1–F5) on the home row.)
* Insert and Delete are on the rightmost column, because there didn't seem to
be a better place to put them.
-* Caps Lock is bound in the same position as on an HHKB, for lack of an obvious better location.
+* Caps Lock is bound in the same position as on an HHKB, for lack of an obvious
+better location.
## Adjust layer
diff --git a/keyboards/dm9records/plaid/keymaps/default/keymap.c b/keyboards/dm9records/plaid/keymaps/default/keymap.c
index 6a858a4a7..c5075b0e0 100644
--- a/keyboards/dm9records/plaid/keymaps/default/keymap.c
+++ b/keyboards/dm9records/plaid/keymaps/default/keymap.c
@@ -214,6 +214,10 @@ led_config_t led_config;
//Set leds to saved state during powerup
void keyboard_post_init_user(void) {
+ // set LED pin modes
+ setPinOutput(LED_RED);
+ setPinOutput(LED_GREEN);
+
// Call the post init code.
led_config.raw = eeconfig_read_user();
diff --git a/keyboards/dm9records/plaid/keymaps/stephen-huan/config.h b/keyboards/dm9records/plaid/keymaps/stephen-huan/config.h
new file mode 100644
index 000000000..5733b9e4b
--- /dev/null
+++ b/keyboards/dm9records/plaid/keymaps/stephen-huan/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2019 Takuya Urakawa (dm9records.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
+
+// place overrides here
diff --git a/keyboards/dm9records/plaid/keymaps/stephen-huan/keymap.c b/keyboards/dm9records/plaid/keymaps/stephen-huan/keymap.c
new file mode 100644
index 000000000..c8d48c395
--- /dev/null
+++ b/keyboards/dm9records/plaid/keymaps/stephen-huan/keymap.c
@@ -0,0 +1,356 @@
+/* Copyright 2019 Takuya Urakawa (dm9records.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 plaid_layers {
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+ _ADJUST
+};
+
+enum plaid_keycodes {
+ QWERTY = SAFE_RANGE,
+ LED_1,
+ LED_2,
+ LED_3,
+ LED_4,
+ LED_5,
+ LED_6,
+ LED_7,
+ LED_8,
+ LED_9,
+ LED_0
+};
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+
+// array of keys considered modifiers for led purposes
+const uint16_t modifiers[] = {
+ KC_LCTL,
+ KC_RCTL,
+ KC_LALT,
+ KC_RALT,
+ KC_LSFT,
+ KC_RSFT,
+ KC_LGUI,
+ KC_RGUI,
+ LOWER,
+ RAISE
+};
+
+//Setup consts for LED modes
+#define LEDMODE_ON 1 //always on
+#define LEDMODE_OFF 0 //always off
+#define LEDMODE_MODS 2 //On with modifiers
+#define LEDMODE_BLINKIN 3 //blinkinlights - % chance toggle on keypress
+#define LEDMODE_KEY 4 //On with any keypress, off with key release
+#define LEDMODE_ENTER 5 // On with enter key
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |Esc/hy| A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | fn | Alt | GUI |Lower | Space |Raise | GUI | Alt |Shift | Ctrl |
+ * `-----------------------------------------------------------------------------------'
+ * (karabiner remaps Caps lock -> fn)
+ */
+[_QWERTY] = LAYOUT_plaid_grid(
+ KC_TAB , KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ HYPR_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_RSFT , KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
+ KC_RCTL , KC_CAPS, KC_RALT, KC_RGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_RGUI, KC_RALT, KC_RSFT, KC_RCTL
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | Prev | Vol- | Play |
+ * `-----------------------------------------------------------------------------------'
+ * volume up key repeats randomly on mac, have to use mac specific volume
+ */
+[_LOWER] = LAYOUT_plaid_grid(
+ KC_GRV , KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0 , KC_BSPC,
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC , KC_BSLS,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______ , _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC__VOLDOWN, KC_MPLY
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | | | End | | | |Pg Up | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | Home | |Pg Dn | | | Left | Down | Up |Right | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | Copy |Paste | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | Next | Vol+ | Mute |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_plaid_grid(
+ KC_TILD, _______, _______, KC_END, _______, _______, _______, KC_PGUP, _______, _______, _______ , KC_DEL ,
+ _______, KC_HOME, _______, KC_PGDN, _______, _______, KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, _______ , _______,
+ _______, _______, _______, KC_COPY, KC_PSTE, KC_PGDN, _______, _______, _______, _______, _______ , _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC__VOLUP, KC_MUTE
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * |Reset | Red |Green | Rmod | Gmod |Rblink|Gblink| Rkey | Gkey | Rcar | Gcar | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | |Power |Sleep |Wake |Eject | | | | | | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_plaid_grid(
+ RESET , LED_1 , LED_2 , LED_3 , LED_4 , LED_5 ,LED_6 , LED_7 , LED_8 , LED_9 , LED_0 , _______ ,
+ _______, KC_PWR , KC_SLEP, KC_WAKE, KC_EJCT, _______, _______, _______, _______, _______, _______, _______ ,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+)
+
+
+};
+
+//Setup config struct for LED
+typedef union {
+ uint32_t raw;
+ struct {
+ uint8_t red_mode :8;
+ uint8_t green_mode :8;
+ };
+} led_config_t;
+led_config_t led_config;
+
+//Set leds to saved state during powerup
+void keyboard_post_init_user(void) {
+ // set LED pin modes
+ setPinOutput(LED_RED);
+ setPinOutput(LED_GREEN);
+
+ // Call the post init code.
+ led_config.raw = eeconfig_read_user();
+
+ if(led_config.red_mode == LEDMODE_ON) {
+ writePinHigh(LED_RED);
+ }
+
+ if(led_config.green_mode == LEDMODE_ON) {
+ writePinHigh(LED_GREEN);
+ }
+}
+
+void eeconfig_init_user(void) { // EEPROM is getting reset!
+ led_config.raw = 0;
+ led_config.red_mode = LEDMODE_ON;
+ led_config.green_mode = LEDMODE_MODS;
+ eeconfig_update_user(led_config.raw);
+}
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
+
+void led_keypress_update(uint8_t led, uint8_t led_mode, uint16_t keycode, keyrecord_t *record) {
+ switch (led_mode) {
+ case LEDMODE_MODS:
+ for (int i=0;i<sizeof(modifiers) / sizeof(modifiers[0]);i++) {
+ if(keycode==modifiers[i]) {
+ if (record->event.pressed) {
+ writePinHigh(led);
+ }
+ else {
+ writePinLow(led);
+ }
+ }
+ }
+ break;
+ case LEDMODE_BLINKIN:
+ if (record->event.pressed) {
+
+ /* Markov Chain
+ *
+ * 1 - x 1 - y
+ * /---\ /---\
+ * v | v |
+ * /------\ x /------\
+ * | |------>| |
+ * | on | y | off |
+ * | |<------| |
+ * \------/ \------/
+ */
+
+ /* Non-homogeneous Markov Chain
+ *
+ * /-----\ 1 - x0 /-----\ 1 - x1 /-----\
+ * |on 0|------->|on 1|------->|on 2|----> ...
+ * \-----/\ /\-----/\ /\-----/\
+ * \ / \ / .
+ * x0\ / x1\ / .
+ * \/ \/ .
+ * /\ /\
+ * y0/ \ y1/ \ .
+ * / \ / \ .
+ * / \ / \ .
+ * /-----\ 1 - y0 /-----\ 1 - y1 /-----\/
+ * |off 0|------->|off 1|------->|off 2|----> ...
+ * \-----/ \-----/ \-----/
+ *
+ *
+ * if x = 1/4 and y 1/4, behavior is equivalent to the original code
+ * and converges to a steady state at the rate of 1/2^k
+ * where k is the number of key presses
+ * (the distance from a given vector to the steady state, [1/2, 1/2],
+ * is cut in half every key press)
+ *
+ * if x = y, then it is guaranteed that the steady state is still
+ * [1/2, 1/2], but the rate at which it converges is variable
+ *
+ * if x != y, then there is no well-defined steady state
+ */
+
+ double x = (1.0*rand())/RAND_MAX;
+ double y = x;
+
+ double p = (readPin(led)) ? x : y;
+ if (rand() < p*RAND_MAX) {
+ togglePin(led);
+ }
+
+ /* following code is restriced to x + y <= 1
+ * if(rand() % 2 == 1) { */
+ /* if(rand() % 2 == 0) { */
+ /* writePinLow(led); */
+ /* } */
+ /* else { */
+ /* writePinHigh(led); */
+ /* } */
+ /* } */
+ }
+ break;
+ case LEDMODE_KEY:
+ if (record->event.pressed) {
+ writePinHigh(led);
+ return;
+ }
+ else {
+ writePinLow(led);
+ return;
+ }
+ break;
+ case LEDMODE_ENTER:
+ if (keycode==KC_ENT) {
+ writePinHigh(led);
+ }
+ else {
+ writePinLow(led);
+ }
+ break;
+
+ }
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ /* If the either led mode is keypressed based, call the led updater
+ then let it fall through the keypress handlers. Just to keep
+ the logic out of this procedure */
+ if (led_config.red_mode >= LEDMODE_MODS && led_config.red_mode <= LEDMODE_ENTER) {
+ led_keypress_update(LED_RED, led_config.red_mode, keycode, record);
+ }
+ if (led_config.green_mode >= LEDMODE_MODS && led_config.green_mode <= LEDMODE_ENTER) {
+ led_keypress_update(LED_GREEN, led_config.green_mode, keycode, record);
+ }
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ print("mode just switched to qwerty and this is a huge string\n");
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case LED_1:
+ if (record->event.pressed) {
+ if (led_config.red_mode==LEDMODE_ON) {
+ led_config.red_mode=LEDMODE_OFF;
+ writePinLow(LED_RED);
+ }
+ else {
+ led_config.red_mode=LEDMODE_ON;
+ writePinHigh(LED_RED);
+ }
+ }
+ break;
+ case LED_2:
+ if (record->event.pressed) {
+ if (led_config.green_mode==LEDMODE_ON) {
+ led_config.green_mode=LEDMODE_OFF;
+ writePinLow(LED_GREEN);
+ }
+ else {
+ led_config.green_mode=LEDMODE_ON;
+ writePinHigh(LED_GREEN);
+ }
+ }
+ break;
+ case LED_3:
+ led_config.red_mode=LEDMODE_MODS;
+ break;
+ case LED_4:
+ led_config.green_mode=LEDMODE_MODS;
+ break;
+ case LED_5:
+ led_config.red_mode=LEDMODE_BLINKIN;
+ break;
+ case LED_6:
+ led_config.green_mode=LEDMODE_BLINKIN;
+ break;
+ case LED_7:
+ led_config.red_mode=LEDMODE_KEY;
+ break;
+ case LED_8:
+ led_config.green_mode=LEDMODE_KEY;
+ break;
+ case LED_9:
+ led_config.red_mode=LEDMODE_ENTER;
+ break;
+ case LED_0:
+ led_config.green_mode=LEDMODE_ENTER;
+ break;
+ }
+
+ if (keycode >= LED_1 && keycode <= LED_0) {
+ eeconfig_update_user(led_config.raw);
+ }
+
+ return true;
+}
diff --git a/keyboards/dm9records/plaid/keymaps/stephen-huan/readme.md b/keyboards/dm9records/plaid/keymaps/stephen-huan/readme.md
new file mode 100644
index 000000000..e52d24c3d
--- /dev/null
+++ b/keyboards/dm9records/plaid/keymaps/stephen-huan/readme.md
@@ -0,0 +1 @@
+# stephen-huan's keymap for Plaid
diff --git a/keyboards/donutcables/budget96/config.h b/keyboards/donutcables/budget96/config.h
index 9482867fa..7154a67a8 100644
--- a/keyboards/donutcables/budget96/config.h
+++ b/keyboards/donutcables/budget96/config.h
@@ -1,5 +1,5 @@
/*
-Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
+Copyright 2020 DonutCables <contact@donutcables.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
@@ -19,11 +19,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "config_common.h"
-#define VENDOR_ID 0x20A0
-#define PRODUCT_ID 0x422D
-#define DEVICE_VER 0x0200
+#define VENDOR_ID 0xDCDC
+#define PRODUCT_ID 0x0002
+#define DEVICE_VER 0x0001
#define MANUFACTURER DonutCables
-#define PRODUCT budget96
+#define PRODUCT Budget96
#define RGBLED_NUM 18
diff --git a/keyboards/donutcables/budget96/keymaps/donut/config.h b/keyboards/donutcables/budget96/keymaps/donut/config.h
new file mode 100644
index 000000000..da538e7b8
--- /dev/null
+++ b/keyboards/donutcables/budget96/keymaps/donut/config.h
@@ -0,0 +1,28 @@
+/*
+Copyright 2020 DonutCables
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+// place overrides here
+
+#undef RGBLIGHT_ANIMATIONS
+#define RGBLIGHT_EFFECT_BREATHING
+#define RGBLIGHT_EFFECT_RAINBOW_MOOD
+#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+#define RGBLIGHT_EFFECT_SNAKE
+
+#define UNICODE_KEY_WINC KC_RGUI
diff --git a/keyboards/donutcables/budget96/keymaps/donut/keymap.c b/keyboards/donutcables/budget96/keymaps/donut/keymap.c
new file mode 100644
index 000000000..53e77437f
--- /dev/null
+++ b/keyboards/donutcables/budget96/keymaps/donut/keymap.c
@@ -0,0 +1,171 @@
+/*
+Copyright 2020 DonutCables
+
+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 {
+ _BASE,
+ _B,
+ _FN1,
+ _FN2,
+};
+
+enum custom_keycodes {
+ img = SAFE_RANGE,
+ xkcd,
+ CD,
+ AES,
+ /* Unicode strings maps */
+ ALT0,
+ ALT1,
+ ALT2,
+ ALT3,
+ ALT4,
+ ALT5,
+ ALT6,
+ ALT7,
+ /* Discord emotes maps */
+ B,
+ X,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Base */
+ [_BASE] = LAYOUT_96_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_HOME, KC_INS, KC_END, KC_MPRV, KC_MPLY, KC_MNXT,
+ 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_DEL, KC_PSCR, KC_PSLS, KC_PAST,
+ 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_P7, KC_P8, KC_P9, KC_PMNS,
+ MO(3), 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_P4, KC_P5, KC_P6, KC_PPLS,
+ 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_P1, KC_P2, KC_P3,
+ KC_LCTL, MO(2), KC_RALT, KC_SPC, KC_CALC, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT),
+
+ /* (1) Bmode layer */
+ [_B] = LAYOUT_96_ansi(
+ 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,
+ 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, KC_TRNS, KC_TRNS, KC_TRNS, B, 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),
+
+ /* (2) Fn 1 */
+ [_FN1] = LAYOUT_96_ansi(
+ 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_PGDN, TG(1), KC_PGUP, KC_VOLD, KC_MUTE, KC_VOLU,
+ ALT0, KC_TRNS, KC_TRNS, ALT1, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, ALT2, KC_TRNS, KC_TRNS, KC_NLCK, KC_TRNS, KC_TRNS,
+ KC_TRNS, CD, KC_TRNS, KC_TRNS, KC_TRNS, ALT3, KC_TRNS, KC_TRNS, KC_TRNS, ALT4, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, AES, xkcd, 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_CLCK, KC_TRNS, X, KC_TRNS, img, B, KC_TRNS, ALT7, ALT5, ALT6, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_LALT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ /* (3) Fn 2 */
+ [_FN2] = LAYOUT_96_ansi(
+ 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, UC_M_WC, EEP_RST, RESET,
+ VLK_TOG, 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,
+ RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, 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_TRNS, RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD, 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_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),
+
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case xkcd:
+ if (record->event.pressed) {
+ SEND_STRING("https://xkcd.com/927/");
+ }
+ return true;
+ case CD:
+ if (record->event.pressed) {
+ SEND_STRING("cd d:/keyboard_stuff/gits/qmk_firmware");
+ }
+ return true;
+ case AES:
+ if (record->event.pressed) {
+ SEND_STRING("***A E S T H E T I C S***");
+ }
+ return true;
+ case img:
+ if (record->event.pressed) {
+ SEND_STRING("[url=" SS_LCTL("v") "][img]" SS_LCTL("v") "[/img][/url]");
+ }
+ return true;
+ case ALT0:
+ if (record->event.pressed) {
+ send_unicode_string("≈");
+ }
+ return true;
+ case ALT1:
+ if (record->event.pressed) {
+ send_unicode_string("π");
+ }
+ return true;
+ case ALT2:
+ if (record->event.pressed) {
+ send_unicode_string("±");
+ }
+ return true;
+ case ALT3:
+ if (record->event.pressed) {
+ send_unicode_string("™");
+ }
+ return true;
+ case ALT4:
+ if (record->event.pressed) {
+ send_unicode_string("Ω");
+ }
+ return true;
+ case ALT5:
+ if (record->event.pressed) {
+ send_unicode_string("≤");
+ }
+ return true;
+ case ALT6:
+ if (record->event.pressed) {
+ send_unicode_string("≥");
+ }
+ return true;
+ case ALT7:
+ if (record->event.pressed) {
+ send_unicode_string("ゴ");
+ }
+ return true;
+ case B:
+ if (record->event.pressed) {
+ SEND_STRING(":b:");
+ }
+ return true;
+ case X:
+ if (record->event.pressed) {
+ SEND_STRING(":x:");
+ }
+ return true;
+ case KC_A ... KC_Z:
+ case KC_1 ... KC_0:
+ if (layer_state_is(1)) {
+ if (record->event.pressed) {
+ register_code(KC_F13);
+ tap_code(keycode);
+ unregister_code(KC_F13);
+ }
+ } else {
+ return true;
+ }
+ return false;
+ }
+ return true;
+}
diff --git a/keyboards/donutcables/budget96/keymaps/donut/readme.md b/keyboards/donutcables/budget96/keymaps/donut/readme.md
new file mode 100644
index 000000000..3e1ca1361
--- /dev/null
+++ b/keyboards/donutcables/budget96/keymaps/donut/readme.md
@@ -0,0 +1,3 @@
+# My personal keymap for Budget96
+
+My daily map for the Budget96. Includes unicode and masked characters for AHK pickup. \ No newline at end of file
diff --git a/keyboards/donutcables/budget96/keymaps/donut/rules.mk b/keyboards/donutcables/budget96/keymaps/donut/rules.mk
new file mode 100644
index 000000000..7d48394b2
--- /dev/null
+++ b/keyboards/donutcables/budget96/keymaps/donut/rules.mk
@@ -0,0 +1,7 @@
+VELOCIKEY_ENABLE = yes
+UNICODE_ENABLE = yes
+BACKLIGHT_ENABLE = no
+MOUSEKEY_ENABLE = no
+COMMAND_ENABLE = no
+SPACE_CADET_ENABLE = no
+GRAVE_ESC_ENABLE = no
diff --git a/keyboards/donutcables/budget96/readme.md b/keyboards/donutcables/budget96/readme.md
index 11c49b983..9cdb3a01b 100644
--- a/keyboards/donutcables/budget96/readme.md
+++ b/keyboards/donutcables/budget96/readme.md
@@ -1,8 +1,8 @@
-# budget96
+# Budget96
-96 key atmega32a keyboard.
+A budget-oriented 96 key atmega32a keyboard. Runs ps2avrgb by default.
-* Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
+* Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin), [DonutCables](https://github.com/DonutCables)
* Hardware Supported: Budget96 PCB
* Hardware Availability: [DonutCables](https://donutcables.com/)
diff --git a/keyboards/doodboard/duckboard/config.h b/keyboards/doodboard/duckboard/config.h
new file mode 100644
index 000000000..ea8a8ae5d
--- /dev/null
+++ b/keyboards/doodboard/duckboard/config.h
@@ -0,0 +1,57 @@
+/* Copyright 2020 doodboard
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0xFF44
+#define DEVICE_VER 0x0001
+#define MANUFACTURER doodboard
+#define PRODUCT duckboard
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 5
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { C6, D7, E6, B4, B5 }
+#define MATRIX_COL_PINS { F7, B1, B3, B2, B6 }
+#define UNUSED_PINS
+
+#define ENCODERS_PAD_A { F5 }
+#define ENCODERS_PAD_B { F6 }
+#define ENCODER_RESOLUTION 2
+
+/* media key slowdown for windows */
+#define TAP_CODE_DELAY 20
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* number of backlight levels */
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN D3
+
+#ifdef RGBLIGHT_ENABLE
+#define RGBLED_NUM 8 // Number of LEDs
+#endif
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
diff --git a/keyboards/doodboard/duckboard/duckboard.c b/keyboards/doodboard/duckboard/duckboard.c
new file mode 100644
index 000000000..af0cb24be
--- /dev/null
+++ b/keyboards/doodboard/duckboard/duckboard.c
@@ -0,0 +1,17 @@
+/* Copyright 2020 doodboard
+ *
+ * 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 "duckboard.h"
diff --git a/keyboards/doodboard/duckboard/duckboard.h b/keyboards/doodboard/duckboard/duckboard.h
new file mode 100644
index 000000000..0e753d445
--- /dev/null
+++ b/keyboards/doodboard/duckboard/duckboard.h
@@ -0,0 +1,34 @@
+/* Copyright 2020 doodboard
+ *
+ * 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( \
+ K01, K02, K03, K04, \
+ K11, K12, K13, \
+ K21, K22, K23, K24, \
+ K31, K32, K33, \
+ K40, K41, K42, K43, K44 \
+) { \
+ { KC_NO, K01, K02, K03, K04 }, \
+ { KC_NO, K11, K12, K13, KC_NO }, \
+ { KC_NO, K21, K22, K23, K24 }, \
+ { KC_NO, K31, K32, K33, KC_NO }, \
+ { K40, K41, K42, K43, K44 } \
+}
diff --git a/keyboards/doodboard/duckboard/info.json b/keyboards/doodboard/duckboard/info.json
new file mode 100644
index 000000000..ff043779f
--- /dev/null
+++ b/keyboards/doodboard/duckboard/info.json
@@ -0,0 +1,36 @@
+{
+ "keyboard_name": "duckboard",
+ "url": "",
+ "maintainer": "doodboard",
+ "width": 5,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"x": 1, "y": 0},
+ {"x": 2, "y": 0},
+ {"x": 3, "y": 0},
+ {"x": 4, "y": 0},
+
+ {"x": 1, "y": 1},
+ {"x": 2, "y": 1},
+ {"x": 3, "y": 1},
+
+ {"x": 1, "y": 2},
+ {"x": 2, "y": 2},
+ {"x": 3, "y": 2},
+ {"x": 4, "y": 2},
+
+ {"x": 1, "y": 3},
+ {"x": 2, "y": 3},
+ {"x": 3, "y": 3},
+
+ {"x": 0, "y": 4},
+ {"x": 1, "y": 4},
+ {"x": 2, "y": 4},
+ {"x": 3, "y": 4},
+ {"x": 4, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/doodboard/duckboard/keymaps/default/keymap.c b/keyboards/doodboard/duckboard/keymaps/default/keymap.c
new file mode 100644
index 000000000..6684e9863
--- /dev/null
+++ b/keyboards/doodboard/duckboard/keymaps/default/keymap.c
@@ -0,0 +1,118 @@
+/* Copyright 2020 doodboard
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ TG(1), KC_PSLS, KC_PAST, KC_PMNS,
+ KC_P7, KC_P8, KC_P9,
+ KC_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_P1, KC_P2, KC_P3,
+ KC_BSPC, KC_MUTE, KC_P0, KC_PDOT, KC_PENT),
+ [1] = LAYOUT(
+ TG(1), KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_HOME, KC_UP, KC_PGUP,
+ KC_LEFT, KC_TRNS, KC_RGHT, KC_TRNS,
+ KC_END, KC_DOWN, KC_PGDN,
+ TG(2), KC_TRNS, KC_INS, KC_DEL, KC_TRNS),
+ [2] = LAYOUT(
+ KC_TRNS, RGB_TOG, RGB_MOD, KC_TRNS,
+ RGB_HUI, RGB_SAI, RGB_VAI,
+ RGB_HUD, RGB_SAD, RGB_VAD, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,
+ TG(2), RESET, KC_TRNS, KC_TRNS, KC_TRNS),
+};
+
+void encoder_update_user(uint8_t index, bool clockwise) {
+ if (index == 0) { /* First encoder */
+ if (clockwise) {
+ tap_code(KC_VOLU);
+ } else {
+ tap_code(KC_VOLD);
+ }
+}
+}
+
+
+#ifdef OLED_DRIVER_ENABLE
+oled_rotation_t oled_init_user(oled_rotation_t rotation) { return OLED_ROTATION_270; }
+
+
+// WPM-responsive animation stuff here
+#define IDLE_FRAMES 2
+#define IDLE_SPEED 40 // below this wpm value your animation will idle
+
+#define ANIM_FRAME_DURATION 200 // how long each frame lasts in ms
+// #define SLEEP_TIMER 60000 // should sleep after this period of 0 wpm, needs fixing
+#define ANIM_SIZE 636 // number of bytes in array, minimize for adequate firmware size, max is 1024
+
+uint32_t anim_timer = 0;
+uint32_t anim_sleep = 0;
+uint8_t current_idle_frame = 0;
+
+// Credit to u/Pop-X- for the initial code. You can find his commit here https://github.com/qmk/qmk_firmware/pull/9264/files#diff-303f6e3a7a5ee54be0a9a13630842956R196-R333.
+static void render_anim(void) {
+ static const char PROGMEM idle[IDLE_FRAMES][ANIM_SIZE] = {
+ {
+ 0, 0,192,192,192,192,192,192,192,248,248, 30, 30,254,254,248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3,255,255,255,255,255,255,255,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127,127,255,255,255,255,255,159,159,135,135,129,129,129, 97, 97, 25, 25, 7, 7, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 97, 97,127, 1, 1, 97, 97,127, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ },
+ {
+ 0, 0,128,128,128,128,128,128,128,240,240, 60, 60,252,252,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 7, 7, 7, 7, 7,255,255,254,254,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,255,255, 63, 63, 15, 15, 3, 3, 3,195,195, 51, 51, 15, 15, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 99, 99,127, 3, 3, 99, 99,127, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }
+ };
+
+ //assumes 1 frame prep stage
+ void animation_phase(void) {
+ current_idle_frame = (current_idle_frame + 1) % IDLE_FRAMES;
+ oled_write_raw_P(idle[abs((IDLE_FRAMES-1)-current_idle_frame)], ANIM_SIZE);
+ }
+
+ if(timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) {
+ anim_timer = timer_read32();
+ animation_phase();
+ }
+ }
+
+void oled_task_user(void) {
+ render_anim();
+ oled_set_cursor(0,6);
+ oled_write_P(PSTR("DUCK\nBOARD\n"), false);
+ oled_write_P(PSTR("-----\n"), false);
+ // Host Keyboard Layer Status
+ oled_write_P(PSTR("MODE\n"), false);
+ oled_write_P(PSTR("\n"), false);
+
+ switch (get_highest_layer(layer_state)) {
+ case 0:
+ oled_write_P(PSTR("BASE\n"), false);
+ break;
+ case 1:
+ oled_write_P(PSTR("FUNC\n"), false);
+ break;
+ case 2:
+ oled_write_P(PSTR("RGB\n"), false);
+ break;
+ }
+}
+#endif
+
+void keyboard_post_init_user(void) {
+ //Customise these values to debug
+ //debug_enable=true;
+ //debug_matrix=true;
+ //debug_keyboard=true;
+ //debug_mouse=true;
+}
diff --git a/keyboards/doodboard/duckboard/readme.md b/keyboards/doodboard/duckboard/readme.md
new file mode 100644
index 000000000..d2b799ab6
--- /dev/null
+++ b/keyboards/doodboard/duckboard/readme.md
@@ -0,0 +1,17 @@
+# duckboard
+
+An 18-key numpad with rotary encoder and OLED support.
+
+* Keyboard Maintainer: [doodboard](https://github.com/doodboard)
+* Hardware Supported: duckboard PCB
+* Hardware Availability: Private Group Buy
+
+Make example for this keyboard (after setting up your build environment):
+
+ make doodboard/duckboard:default
+
+Flashing example for this keyboard:
+
+ make doodboard/duckboard: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/doodboard/duckboard/rules.mk b/keyboards/doodboard/duckboard/rules.mk
new file mode 100644
index 000000000..09a60d8a7
--- /dev/null
+++ b/keyboards/doodboard/duckboard/rules.mk
@@ -0,0 +1,25 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
+
+ENCODER_ENABLE = yes
+OLED_DRIVER_ENABLE = yes
diff --git a/keyboards/dz60/keymaps/mrsendyyk/keymap.c b/keyboards/dz60/keymaps/mrsendyyk/keymap.c
index 58e10490d..80d03922b 100644
--- a/keyboards/dz60/keymaps/mrsendyyk/keymap.c
+++ b/keyboards/dz60/keymaps/mrsendyyk/keymap.c
@@ -1,81 +1,98 @@
-/*
- * Based on Sendy YK's 60% ANSI Arrow Layout and Keymap
- * https://github.com/qmk/qmk_firmware/blob/master/layouts/default/60_ansi_arrow/info.json
- * https://github.com/qmk/qmk_firmware/blob/master/layouts/community/60_ansi_arrow/mrsendyyk/keymap.c
- *
- * https://github.com/mrsendyyk
+/* Copyright (C) 2020 Sendy YK (https://mr.sendyyk.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 3 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 <https://www.gnu.org/licenses/>.
*/
-
+
#include QMK_KEYBOARD_H
+enum layer_names {
+ _BASE, // Default Layer
+ _FN, // Fn Layer 1
+ _SETTINGS // Fn Layer 2
+};
+
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* Default Layer [0] */
- [0] = LAYOUT_60_ansi_arrow(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_BSPC,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
- 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_RSFT, KC_UP, KC_SLSH,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, LT(2, KC_RALT), LT(1, KC_RCTL), KC_LEFT, KC_DOWN, KC_RGHT
- ),
- /* Fn Layer [1] */
- [1] = LAYOUT_60_ansi_arrow(KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
- KC_BRIU, KC_TRNS, KC_TRNS, KC_END, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_TRNS, KC_PSCR, KC_TRNS, KC_TRNS, KC_EJCT,
- KC_BRID, KC_TRNS, KC_SLCK, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE,
- KC_VOLU, KC_TRNS, KC_TRNS, KC_CALC, KC_TRNS, KC_TRNS, KC_NLCK, KC_MAIL, KC_TRNS, KC_TRNS, KC_PAUS, KC_PGUP, KC_TRNS,
- KC_VOLD, KC_MRWD, KC_MFFD, KC_MPLY, KC_MSTP, KC_TRNS, KC_MPRV, KC_PGDN, KC_MNXT
- ),
- /* Fn Layer [2] */
- [2] = LAYOUT_60_ansi_arrow(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, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, 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, BL_DEC, BL_TOGG, BL_INC, BL_STEP, 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
- )
+ // Default Layer
+ [_BASE] = LAYOUT_60_ansi_arrow(
+ 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_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ 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_RSFT, KC_UP, KC_SLSH,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, LT(2, KC_RALT), LT(1, KC_RCTL), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ // Fn Layer 1
+ [_FN] = LAYOUT_60_ansi_arrow(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ KC_BRIU, KC_TRNS, KC_TRNS, KC_END, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_TRNS, KC_PSCR, KC_TRNS, KC_TRNS, KC_EJCT,
+ KC_BRID, KC_TRNS, KC_SLCK, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE,
+ KC_VOLU, KC_TRNS, KC_TRNS, KC_CALC, KC_TRNS, KC_TRNS, KC_NLCK, KC_MAIL, KC_TRNS, KC_TRNS, KC_PAUS, KC_PGUP, KC_TRNS,
+ KC_VOLD, KC_MRWD, KC_MFFD, KC_MPLY, KC_MSTP, KC_TRNS, KC_MPRV, KC_PGDN, KC_MNXT
+ ),
+ // Fn Layer 2
+ [_SETTINGS] = LAYOUT_60_ansi_arrow(
+ 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, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, 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, BL_DEC, BL_TOGG, BL_INC, BL_STEP, 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
+ )
};
void keyboard_post_init_user(void) {
- rgblight_enable_noeeprom();
- rgblight_sethsv_noeeprom(0, 0, 0);
+ rgblight_enable_noeeprom();
+ rgblight_sethsv_noeeprom(0, 0, 0);
}
-/* RGB Lighting/LED/Underglow as Caps Lock, Num Lock, Scroll Lock, and Layer Indicator */
- void update_led(void) {
- /* Num Lock Indicator */
- if (host_keyboard_led_state().num_lock) {
- rgblight_setrgb(225, 8, 0);
- }
- /* Scroll Lock Indicator */
- if (host_keyboard_led_state().scroll_lock) {
- rgblight_setrgb(241, 190, 72);
- }
- }
+// RGB Lighting/LED/Underglow as Caps Lock, Num Lock, Scroll Lock, and Layer Indicator
+void update_led(void) {
+ // Num Lock Indicator
+ if (host_keyboard_led_state().num_lock) {
+ rgblight_setrgb(225, 8, 0);
+ }
+ // Scroll Lock Indicator
+ if (host_keyboard_led_state().scroll_lock) {
+ rgblight_setrgb(255, 110, 0);
+ }
+}
- void led_set_user(uint8_t usb_led) {
- /* Caps Lock Indicator */
- if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
- writePinLow(B2);
- rgblight_setrgb(100, 255, 100);
+void led_set_user(uint8_t usb_led) {
+ // Caps Lock Indicator
+ if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
+ writePinLow(B2);
+ rgblight_setrgb(100, 255, 100);
+ }
+ // Layer Indicator
+ else {
+ switch (get_highest_layer(layer_state)) {
+ // Fn Layer 1 Indicator
+ case _FN:
+ rgblight_setrgb(100, 255, 100);
+ break;
+ // Fn Layer 2 Indicator
+ case _SETTINGS:
+ rgblight_setrgb(100, 255, 100);
+ break;
+ // Default Layer Indicator
+ case _BASE:
+ rgblight_setrgb(0, 0, 0);
+ break;
}
- /* Layer Indicator */
- else {
- switch (get_highest_layer(layer_state)) {
- /* Fn Layer [1] Indicator */
- case 1:
- rgblight_setrgb(255, 110, 0);
- break;
- /* Fn Layer [2] Indicator */
- case 2:
- rgblight_setrgb(255, 110, 0);
- break;
- /* Default Layer [0] Indicator */
- default:
- rgblight_setrgb(0, 0, 0);
- break;
- }
- update_led();
- }
- }
+ update_led();
+ }
+}
layer_state_t layer_state_set_user(layer_state_t state) {
- update_led();
- return state;
+ update_led();
+ return state;
}
diff --git a/keyboards/dz60/keymaps/mrsendyyk/readme.md b/keyboards/dz60/keymaps/mrsendyyk/readme.md
index ae5ad2228..838630221 100644
--- a/keyboards/dz60/keymaps/mrsendyyk/readme.md
+++ b/keyboards/dz60/keymaps/mrsendyyk/readme.md
@@ -1,79 +1,79 @@
# Sendy YK's 60% ANSI Arrow Layout and Keymap
-This is Sendy YK's [60% ANSI Arrow Layout](https://github.com/qmk/qmk_firmware/blob/master/layouts/default/60_ansi_arrow/info.json) and [Keymap (with RGB Lighting/LED/Underglow as Caps Lock, Num Lock, Scroll Lock, and Layer Indicator)](https://github.com/qmk/qmk_firmware/blob/master/layouts/community/60_ansi_arrow/mrsendyyk/keymap.c).
+[https://mr.sendyyk.com](https://mr.sendyyk.com)
## 60% ANSI Arrow Layout
-![LAYOUT_60_ansi_arrow](https://raw.githubusercontent.com/mrsendyyk/my_qmk/master/kbdfans_tofu_60_keyboard/assets/dz60_layout_60_ansi_arrow.png)
+![LAYOUT_60_ansi_arrow](https://raw.githubusercontent.com/mrsendyyk/my_qmk/master/dz60/assets/layout-60-ansi-arrow.png)
## Keymap
-### Default Layer [0]
+### Default Layer
-![Default Layer [0]](https://raw.githubusercontent.com/mrsendyyk/my_qmk/master/kbdfans_tofu_60_keyboard/assets/dz60_mrsendyyk_0.png)
+![_BASE](https://raw.githubusercontent.com/mrsendyyk/my_qmk/master/dz60/assets/layout-60-ansi-arrow-keymap---layer-0.png)
-### Fn Layer [1]
+### Fn Layer 1
Press and hold *right* **Ctrl** key.
-![Fn Layer [1]](https://raw.githubusercontent.com/mrsendyyk/my_qmk/master/kbdfans_tofu_60_keyboard/assets/dz60_mrsendyyk_1.png)
+![_FN](https://raw.githubusercontent.com/mrsendyyk/my_qmk/master/dz60/assets/layout-60-ansi-arrow-keymap---layer-1.png)
-### Fn Layer [2]
+### Fn Layer 2
Press and hold *right* **Alt** key.
-![Fn Layer [2]](https://raw.githubusercontent.com/mrsendyyk/my_qmk/master/kbdfans_tofu_60_keyboard/assets/dz60_mrsendyyk_2.png)
+![_SETTINGS](https://raw.githubusercontent.com/mrsendyyk/my_qmk/master/dz60/assets/layout-60-ansi-arrow-keymap---layer-2.png)
### RGB Lighting/LED/Underglow as Caps Lock, Num Lock, Scroll Lock, and Layer Indicator
#### Caps Lock Indicator
```c
-/* Caps Lock Indicator */
- if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
- writePinLow(B2);
- rgblight_setrgb(100, 255, 100);
- }
+ // Caps Lock Indicator
+ if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
+ writePinLow(B2);
+ rgblight_setrgb(100, 255, 100);
+ }
```
#### Num Lock Indicator
```c
-/* Num Lock Indicator */
- if (host_keyboard_led_state().num_lock) {
- rgblight_setrgb(225, 8, 0);
- }
+ // Num Lock Indicator
+ if (host_keyboard_led_state().num_lock) {
+ rgblight_setrgb(225, 8, 0);
+ }
```
#### Scroll Lock Indicator
```c
-/* Scroll Lock Indicator */
- if (host_keyboard_led_state().scroll_lock) {
- rgblight_setrgb(241, 190, 72);
- }
+ // Scroll Lock Indicator
+ if (host_keyboard_led_state().scroll_lock) {
+ rgblight_setrgb(255, 110, 0);
+ }
```
#### Layer Indicator
```c
-/* Layer Indicator */
- else {
- switch (get_highest_layer(layer_state)) {
- /* Fn Layer [1] Indicator */
- case 1:
- rgblight_setrgb(255, 110, 0);
- break;
- /* Fn Layer [2] Indicator */
- case 2:
- rgblight_setrgb(255, 110, 0);
- break;
- /* Default Layer [0] Indicator */
- default:
- rgblight_setrgb(0, 0, 0);
- break;
- }
- update_led();
- }
+ // Layer Indicator
+ else {
+ switch (get_highest_layer(layer_state)) {
+ // Fn Layer 1 Indicator
+ case _FN:
+ rgblight_setrgb(100, 255, 100);
+ break;
+ // Fn Layer 2 Indicator
+ case _SETTINGS:
+ rgblight_setrgb(100, 255, 100);
+ break;
+ // Default Layer Indicator
+ case _BASE:
+ rgblight_setrgb(0, 0, 0);
+ break;
+ }
+ update_led();
+ }
```
## Build The Firmware
diff --git a/keyboards/dztech/dz65rgb/keymaps/pagondel/keymap.c b/keyboards/dztech/dz65rgb/keymaps/pagondel/keymap.c
new file mode 100644
index 000000000..277323987
--- /dev/null
+++ b/keyboards/dztech/dz65rgb/keymaps/pagondel/keymap.c
@@ -0,0 +1,65 @@
+/* Copyright 2020 pagondel
+ *
+ * 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 layers {
+ _BL,
+ _FL,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap _BL: (Base Layer) Default Layer
+ * ,-----------------------------------------------------------------------------.
+ * |Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = |Backsp |~ ` |
+ * |-----------------------------------------------------------------------------|
+ * |Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ |Del |
+ * |-----------------------------------------------------------------------------|
+ * |FN | A | S | D | F | G | H | J | K | L | ; | ' |Return |PgUp|
+ * |-----------------------------------------------------------------------------|
+ * |Shift | Z | X | C | V | B | N | M | , | . | / |Shift | Up |PgDn|
+ * |-----------------------------------------------------------------------------|
+ * |Ctrl |Win |Alt | Space |Alt | FN |Ctrl |Lef |Dow |Rig |
+ * `-----------------------------------------------------------------------------'
+ */
+ [_BL] = LAYOUT_65_ansi(
+ 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_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_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_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_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ /* Keymap _FL: Function Layer
+ * ,-----------------------------------------------------------------------------.
+ * |Esc | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 |F10 |F11 |F12 |DEL |PNTS|
+ * |-----------------------------------------------------------------------------|
+ * | |RgbT|RgbM|Hue+|Hue-|Sat+|Sat-|BR+ |BR- | | |SLCK|Paus|RST | |
+ * |-----------------------------------------------------------------------------|
+ * | |Eff+|Eff-| | | | | | | | | |EEP RST | |
+ * |-----------------------------------------------------------------------------|
+ * |Shift | | | | | |NK T|Mute|Vol-|Vol+| | |PgUp| |
+ * |-----------------------------------------------------------------------------|
+ * | | | | Play | | | |Home|PgDn|End |
+ * `-----------------------------------------------------------------------------'
+ */
+ [_FL] = LAYOUT_65_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_DEL, KC_PSCR,
+ _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, KC_SLCK, KC_PAUS, RESET, _______,
+ _______, RGB_SPI, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______, EEP_RST, _______,
+ KC_LSFT, _______, _______, _______, _______, _______, NK_TOGG, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, KC_PGUP, _______,
+ _______, _______, _______, KC_MPLY, _______, _______, _______, KC_HOME, KC_VOLD, KC_END
+ )
+};
diff --git a/keyboards/dztech/dz65rgb/keymaps/pagondel/readme.md b/keyboards/dztech/dz65rgb/keymaps/pagondel/readme.md
new file mode 100644
index 000000000..8f55ce428
--- /dev/null
+++ b/keyboards/dztech/dz65rgb/keymaps/pagondel/readme.md
@@ -0,0 +1,35 @@
+# pagondel's DZ65RGB v2 layout
+
+```
+ Keymap Default Layer
+ ,-----------------------------------------------------------------------------.
+ |Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = |Backsp |~ ` |
+ |-----------------------------------------------------------------------------|
+ |Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ |Del |
+ |-----------------------------------------------------------------------------|
+ |FN | A | S | D | F | G | H | J | K | L | ; | ' |Return |PgUp|
+ |-----------------------------------------------------------------------------|
+ |Shift | Z | X | C | V | B | N | M | , | . | / |Shift | Up |PgDn|
+ |-----------------------------------------------------------------------------|
+ |Ctrl |Win |Alt | Space |Alt | FN |Ctrl |Lef |Dow |Rig |
+ `-----------------------------------------------------------------------------'
+```
+
+```
+ Keymap Function Layer
+ ,-----------------------------------------------------------------------------.
+ |Esc | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 |F10 |F11 |F12 |DEL |PNTS|
+ |-----------------------------------------------------------------------------|
+ | |RgbT|RgbM|Hue+|Hue-|Sat+|Sat-|BR+ |BR- | | |SLCK|Paus|RST | |
+ |-----------------------------------------------------------------------------|
+ | |Eff+|Eff-| | | | | | | | | |EEP RST | |
+ |-----------------------------------------------------------------------------|
+ |Shift | | | | | |NK T|Mute|Vol-|Vol+| | |PgUp| |
+ |-----------------------------------------------------------------------------|
+ | | | | Play | | | |Home|PgDn|End |
+ `-----------------------------------------------------------------------------'
+```
+
+### Build layout
+
+```qmk compile -kb dztech/dz65rgb/v2 -km pagondel```
diff --git a/keyboards/ergodox_ez/keymaps/stamm/config.h b/keyboards/ergodox_ez/keymaps/stamm/config.h
new file mode 100644
index 000000000..e1db3d900
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/stamm/config.h
@@ -0,0 +1,40 @@
+/* Copyright 2020 Rustam Zagirov
+ *
+ * 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/>.
+ */
+
+/*
+ Set any config.h overrides for your specific keymap here.
+ See config.h options at https://docs.qmk.fm/#/config_options?id=the-configh-file
+*/
+#pragma once
+
+#define ORYX_CONFIGURATOR
+#define LEADER_TIMEOUT 500
+#define LEADER_PER_KEY_TIMING
+
+#define TAPPING_TERM 200
+#define TAPPING_TERM_PER_KEY
+#define PERMISSIVE_HOLD
+/* #define PERMISSIVE_HOLD_PER_KEY */
+
+#define IGNORE_MOD_TAP_INTERRUPT
+#define IGNORE_MOD_TAP_INTERRUPT_PER_KEY
+
+#define TAPPING_FORCE_HOLD
+#define TAPPING_FORCE_HOLD_PER_KEY
+
+/* #define RETRO_TAPPING */
+#undef LED_BRIGHTNESS_DEFAULT
+#define LED_BRIGHTNESS_DEFAULT (LED_BRIGHTNESS_LO)
diff --git a/keyboards/ergodox_ez/keymaps/stamm/keymap.c b/keyboards/ergodox_ez/keymaps/stamm/keymap.c
new file mode 100644
index 000000000..e2d9964ba
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/stamm/keymap.c
@@ -0,0 +1,308 @@
+/* Copyright 2020 Rustam Zagirov
+ *
+ * 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"
+
+#define KC_MAC_UNDO LGUI(KC_Z)
+#define KC_MAC_CUT LGUI(KC_X)
+#define KC_MAC_COPY LGUI(KC_C)
+#define KC_MAC_PASTE LGUI(KC_V)
+#define KC_PC_UNDO LCTL(KC_Z)
+#define KC_PC_CUT LCTL(KC_X)
+#define KC_PC_COPY LCTL(KC_C)
+#define KC_PC_PASTE LCTL(KC_V)
+#define ES_LESS_MAC KC_GRAVE
+#define ES_GRTR_MAC LSFT(KC_GRAVE)
+#define ES_BSLS_MAC ALGR(KC_6)
+#define NO_PIPE_ALT KC_GRAVE
+#define NO_BSLS_ALT KC_EQUAL
+#define LSA_T(kc) MT(MOD_LSFT | MOD_LALT, kc)
+
+#define E_NUMBERS LT(_3_NUMBERS,KC_E)
+#define R_MOUSE LT(_4_MOUSE,KC_R)
+#define O_NUMBERS LT(_3_NUMBERS,KC_O)
+#define U_MOUSE LT(_4_MOUSE,KC_U)
+#define R_NUMBERS LT(_3_NUMBERS,KC_R)
+#define W_MOUSE LT(_4_MOUSE,KC_W)
+#define LEFT_NUMBERS LT(_3_NUMBERS, KC_LEFT)
+#define RIGHT_MOUSE LT(_4_MOUSE, KC_RIGHT)
+
+enum custom_keycodes {
+ RGB_SLD = EZ_SAFE_RANGE,
+ ALT_TAB,
+};
+
+bool is_alt_tab_active = false; // ADD this near the begining of keymap.c
+uint16_t alt_tab_timer = 0; // we will be using them soon.
+
+enum layers {
+ _0_BASE,
+ _1_BEAKL,
+ _2_WORKMAN,
+ _3_NUMBERS,
+ _4_MOUSE,
+};
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_0_BASE] = LAYOUT_ergodox(
+ KC_NONUS_BSLASH, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_AUDIO_MUTE,
+ KC_LEAD, KC_Q, KC_W, E_NUMBERS, R_MOUSE, KC_T, TG(_1_BEAKL),
+ LCTL(KC_B), LSFT_T(KC_A), LCTL_T(KC_S), LALT_T(KC_D), LGUI_T(KC_F), KC_G,
+ KC_BSLASH, KC_Z, KC_X, KC_C, KC_V, KC_B, TG(_2_WORKMAN),
+ ALT_TAB, XXXXXXX, XXXXXXX, LEFT_NUMBERS, RIGHT_MOUSE,
+ KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP,
+ XXXXXXX,
+ KC_ENTER, KC_TAB, KC_ESCAPE,
+ KC_CAPSLOCK, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_MINUS,
+ XXXXXXX, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRACKET,
+ KC_H, RGUI_T(KC_J), RALT_T(KC_K), RCTL_T(KC_L), RSFT_T(KC_SCOLON), KC_QUOTE,
+ KC_RBRACKET, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLASH, KC_EQUAL,
+ KC_DOWN, KC_UP, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_MEDIA_PLAY_PAUSE, KC_MEDIA_NEXT_TRACK,
+ XXXXXXX,
+ KC_ESCAPE, KC_BSPACE, KC_SPACE
+),
+[_1_BEAKL] = LAYOUT_ergodox(
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_H, O_NUMBERS, U_MOUSE, KC_X, _______,
+ _______, LSFT_T(KC_Y), LCTL_T(KC_I), LALT_T(KC_E), LGUI_T(KC_A), KC_DOT,
+ _______, KC_J, KC_SLASH, KC_COMMA, KC_K, KC_QUOTE, _______,
+ _______, _______, _______, _______, _______,
+ _______, _______,
+ _______,
+ _______, _______, _______,
+
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_G, KC_C, KC_R, KC_F, KC_Z, _______,
+ KC_D, RGUI_T(KC_S), RALT_T(KC_T), RCTL_T(KC_N), RSFT_T(KC_B), KC_SCOLON,
+ _______, KC_W, _______, KC_L, KC_P, KC_V, _______,
+ _______, _______, _______, _______, _______,
+ _______, _______,
+ _______,
+ _______, _______, _______
+),
+[_2_WORKMAN] = LAYOUT_ergodox(
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_D, R_NUMBERS, W_MOUSE, KC_B, _______,
+ _______, _______, _______, LALT_T(KC_H), LGUI_T(KC_T), _______,
+ _______, _______, _______, KC_M, KC_C, KC_V, _______,
+ _______, _______, _______, _______, _______,
+ _______, _______,
+ _______,
+ _______, _______, _______,
+
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_J, KC_F, KC_U, KC_P, KC_SCOLON, _______,
+ KC_Y, RGUI_T(KC_N), RALT_T(KC_E), RCTL_T(KC_O), RSFT_T(KC_I), _______,
+ _______, KC_K, KC_L, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______,
+ _______, _______,
+ _______,
+ _______, _______, _______
+),
+[_3_NUMBERS] = LAYOUT_ergodox(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ RESET, _______, _______, _______, _______,
+ _______, _______,
+ _______,
+ _______, _______, _______,
+
+ _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ _______, _______, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
+ _______, KC_4, KC_5, KC_6, KC_PLUS, _______,
+ _______, _______, KC_1, KC_2, KC_3, KC_BSLASH, _______,
+ KC_0, KC_KP_DOT, _______, KC_EQUAL, _______,
+ _______, _______,
+ _______,
+ _______, _______, _______
+),
+[_4_MOUSE] = LAYOUT_ergodox(
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______,
+
+ RGB_HUI, RGB_HUD,
+ _______,
+ _______, _______, _______,
+
+ _______, _______, _______, _______, _______, _______, _______,
+ RGB_MOD, RGB_TOG, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2, _______, _______,
+ RGB_SLD, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, _______, _______,
+ TOGGLE_LAYER_COLOR, _______, KC_MS_WH_UP, _______, KC_MS_WH_DOWN, _______, _______,
+ _______, _______, _______, _______, _______,
+
+ RGB_VAD, RGB_VAI,
+ _______,
+ _______, _______,
+),
+};
+
+
+/* bool suspended = false; */
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case RGB_SLD:
+ if (record->event.pressed) {
+ rgblight_mode(1);
+ }
+ return false;
+ case ALT_TAB:
+ if (record->event.pressed) {
+ if (!is_alt_tab_active) {
+ is_alt_tab_active = true;
+ register_code(KC_LGUI);
+ }
+ alt_tab_timer = timer_read();
+ register_code(KC_TAB);
+ } else {
+ unregister_code(KC_TAB);
+ }
+ break;
+ }
+ return true;
+}
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ ergodox_led_all_off();
+ switch (get_highest_layer(state)) {
+ case _1_BEAKL:
+ ergodox_right_led_1_on();
+ break;
+ case _2_WORKMAN:
+ ergodox_right_led_2_on();
+ break;
+ case _3_NUMBERS:
+ ergodox_right_led_3_on();
+ break;
+ case _4_MOUSE:
+ ergodox_right_led_1_on();
+ ergodox_right_led_2_on();
+ break;
+ /* case 6: */
+ /* ergodox_right_led_2_on(); */
+ /* ergodox_right_led_3_on(); */
+ /* break; */
+ /* case 7: */
+ /* ergodox_right_led_1_on(); */
+ /* ergodox_right_led_2_on(); */
+ /* ergodox_right_led_3_on(); */
+ /* break; */
+ default:
+ break;
+ }
+ return state;
+
+};
+
+
+uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ /* case SFT_T(KC_SPC): */
+ /* return TAPPING_TERM + 1250; */
+ case LT(_3_NUMBERS, KC_E):
+ return 200;
+ case LT(_4_MOUSE, KC_R):
+ return 200;
+ /* case LGUI_T(KC_F): */
+ /* return 50; */
+ default:
+ return TAPPING_TERM;
+ }
+}
+bool get_ignore_mod_tap_interrupt(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case LT(_3_NUMBERS, KC_E):
+ case LT(_4_MOUSE, KC_R):
+ case LSFT_T(KC_A):
+ case LCTL_T(KC_S):
+ case LALT_T(KC_D):
+ case LGUI_T(KC_F):
+ case RGUI_T(KC_J):
+ case RALT_T(KC_K):
+ case RCTL_T(KC_L):
+ case RSFT_T(KC_SCOLON):
+ case LEFT_NUMBERS:
+ case RIGHT_MOUSE:
+ return true;
+ default:
+ return false;
+ }
+}
+
+
+bool get_tapping_force_hold(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case LT(_3_NUMBERS, KC_E):
+ case LT(_4_MOUSE, KC_R):
+ case LSFT_T(KC_A):
+ case LCTL_T(KC_S):
+ case LALT_T(KC_D):
+ case LGUI_T(KC_F):
+ case RGUI_T(KC_J):
+ case RALT_T(KC_K):
+ case RCTL_T(KC_L):
+ case RSFT_T(KC_SCOLON):
+ case LEFT_NUMBERS:
+ case RIGHT_MOUSE:
+ return false;
+ default:
+ return true;
+ }
+}
+
+
+
+LEADER_EXTERNS();
+
+void matrix_scan_user(void) {
+ if (is_alt_tab_active) {
+ if (timer_elapsed(alt_tab_timer) > 1000) {
+ unregister_code(KC_LGUI);
+ is_alt_tab_active = false;
+ }
+ }
+ LEADER_DICTIONARY() {
+ leading = false;
+ leader_end();
+
+ SEQ_ONE_KEY(KC_F) {
+ SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
+ }
+ SEQ_ONE_KEY(KC_S) {
+ SEND_STRING ("sudo -i\n");
+ }
+ SEQ_TWO_KEYS(KC_D, KC_D) {
+ SEND_STRING(SS_LGUI("ac"));
+ /* SEND_STRING(SS_LGUI("a") SS_LGUI("c")); */
+ }
+ SEQ_THREE_KEYS(KC_D, KC_D, KC_S) {
+ SEND_STRING("https://start.duckduckgo.com\n");
+ }
+ SEQ_TWO_KEYS(KC_A, KC_S) {
+ register_code(KC_LGUI);
+ register_code(KC_S);
+ unregister_code(KC_S);
+ unregister_code(KC_LGUI);
+ }
+ }
+}
diff --git a/keyboards/ergodox_ez/keymaps/stamm/readme.md b/keyboards/ergodox_ez/keymaps/stamm/readme.md
new file mode 100644
index 000000000..f2cdc7ea1
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/stamm/readme.md
@@ -0,0 +1,117 @@
+# Stamm layouts for ergodox_ez
+
+5 layers:
+
+* QUERTY
+* BEAKL15
+* WORKMAN
+* Numbers
+* Mouse
+
+On home row there are hold dual keys:
+- shift, ctrl, alt, cmd — on the fingers on the left hand
+- cmd, alt, ctrl, shift — mirrored on the finger on the righ hand
+
+Top row behaves like shifter numbers row.
+Hold E switch to layer with numbers.
+Hold R switch to mouse controll layer.
+
+```
+ 0 Base
+╭────────┬─────┬─────┬─────┬─────┬─────┬─────╮ ╭─────┬─────┬─────┬─────┬─────┬─────┬────────╮
+│ ` │ ! │ @ │ # │ $ │ % │Mute │ │Capsl│ ^ │ & │ * │ ( │ ) │ - │
+├────────┼─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┼────────┤
+│ Lead │ Q │ W │E|LT3│R|LT4│ T │ TG1 │ │ │ Y │ U │ I │ O │ P │ [ │
+├────────┼─────┼─────┼─────┼─────┼─────┤ │ │ ├─────┼─────┼─────┼─────┼─────┼────────┤
+│Ctrl + B│A | ⇧│S | ⌃│D | ⌥│F | ⌘│ G ├─────┤ ├─────┤ H │J | ⌘│K | ⌥│L | ⌃│; | ⇧│ ' │
+├────────┼─────┼─────┼─────┼─────┼─────┤ TG2 │ │ ] ├─────┼─────┼─────┼─────┼─────┼────────┤
+│ \ │ Z │ X │ C │ V │ B │ │ │ │ N │ M │ , │ . │ / │ = │
+╰──┬─────┼─────┼─────┼─────┼─────┼─────┴─────╯ ╰─────┴─────┼─────┼─────┼─────┼─────┼─────┬──╯
+ │⎇ + T│ │ │←|LT3│→|LT4│ │ ↓ │ ↑ │ │ │ │
+ ╰─────┴─────┴─────┴─────┴─────╯ ╭─────┬─────╮ ╭─────┬─────╮ ╰─────┴─────┴─────┴─────┴─────╯
+ │Vol- │Vol+ │ │Play │Next │
+ ╭─────┼─────┼─────┤ ├─────┼─────┼─────╮
+ │ │ │ │ │ │ │ │
+ │Enter│ Tab ├─────┤ ├─────┤Bspac│ ⎵ │
+ │ │ │ Esc │ │ Esc │ │ │
+ ╰─────┴─────┴─────╯ ╰─────┴─────┴─────╯
+
+ 1 Beakl
+╭────────┬─────┬─────┬─────┬─────┬─────┬─────╮ ╭─────┬─────┬─────┬─────┬─────┬─────┬────────╮
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├────────┼─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┼────────┤
+│ │ │ H │O|LT3│U|LT4│ X │ │ │ │ G │ C │ R │ F │ Z │ │
+├────────┼─────┼─────┼─────┼─────┼─────┤ │ │ ├─────┼─────┼─────┼─────┼─────┼────────┤
+│ │Y | ⇧│I | ⌃│E | ⌥│A | ⌘│ . ├─────┤ ├─────┤ D │S | ⌘│T | ⌥│N | ⌃│B | ⇧│ ; │
+├────────┼─────┼─────┼─────┼─────┼─────┤ │ │ ├─────┼─────┼─────┼─────┼─────┼────────┤
+│ │ J │ / │ , │ K │ ' │ │ │ │ W │ │ L │ P │ V │ │
+╰──┬─────┼─────┼─────┼─────┼─────┼─────┴─────╯ ╰─────┴─────┼─────┼─────┼─────┼─────┼─────┬──╯
+ │ │ │ │ │ │ │ │ │ │ │ │
+ ╰─────┴─────┴─────┴─────┴─────╯ ╭─────┬─────╮ ╭─────┬─────╮ ╰─────┴─────┴─────┴─────┴─────╯
+ │ │ │ │ │ │
+ ╭─────┼─────┼─────┤ ├─────┼─────┼─────╮
+ │ │ │ │ │ │ │ │
+ │ │ ├─────┤ ├─────┤ │ │
+ │ │ │ │ │ │ │ │
+ ╰─────┴─────┴─────╯ ╰─────┴─────┴─────╯
+
+ 2 Workman
+╭────────┬─────┬─────┬─────┬─────┬─────┬─────╮ ╭─────┬─────┬─────┬─────┬─────┬─────┬────────╮
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├────────┼─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┼────────┤
+│ │ │ D │R|LT3│W|LT4│ B │ │ │ │ J │ F │ U │ P │ ; │ │
+├────────┼─────┼─────┼─────┼─────┼─────┤ │ │ ├─────┼─────┼─────┼─────┼─────┼────────┤
+│ │ │ │H | ⌥│T | ⌘│ ├─────┤ ├─────┤ Y │N | ⌘│E | ⌥│O | ⌃│I | ⇧│ │
+├────────┼─────┼─────┼─────┼─────┼─────┤ │ │ ├─────┼─────┼─────┼─────┼─────┼────────┤
+│ │ │ │ M │ C │ V │ │ │ │ K │ L │ │ │ │ │
+╰──┬─────┼─────┼─────┼─────┼─────┼─────┴─────╯ ╰─────┴─────┼─────┼─────┼─────┼─────┼─────┬──╯
+ │ │ │ │ │ │ │ │ │ │ │ │
+ ╰─────┴─────┴─────┴─────┴─────╯ ╭─────┬─────╮ ╭─────┬─────╮ ╰─────┴─────┴─────┴─────┴─────╯
+ │ │ │ │ │ │
+ ╭─────┼─────┼─────┤ ├─────┼─────┼─────╮
+ │ │ │ │ │ │ │ │
+ │ │ ├─────┤ ├─────┤ │ │
+ │ │ │ │ │ │ │ │
+ ╰─────┴─────┴─────╯ ╰─────┴─────┴─────╯
+
+ 3 Numbers
+╭────────┬─────┬─────┬─────┬─────┬─────┬─────╮ ╭─────┬─────┬─────┬─────┬─────┬─────┬────────╮
+│ │ F1 │ F2 │ F3 │ F4 │ F5 │ │ │ │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │
+├────────┼─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┼────────┤
+│ │ │ │ │ │ │ │ │ │ │ 7 │ 8 │ 9 │ * │ F12 │
+├────────┼─────┼─────┼─────┼─────┼─────┤ │ │ ├─────┼─────┼─────┼─────┼─────┼────────┤
+│ │ │ │ │ │ ├─────┤ ├─────┤ │ 4 │ 5 │ 6 │ + │ │
+├────────┼─────┼─────┼─────┼─────┼─────┤ │ │ ├─────┼─────┼─────┼─────┼─────┼────────┤
+│ │ │ │ │ │ │ │ │ │ │ 1 │ 2 │ 3 │ \ │ │
+╰──┬─────┼─────┼─────┼─────┼─────┼─────┴─────╯ ╰─────┴─────┼─────┼─────┼─────┼─────┼─────┬──╯
+ │Reset│ │ │ │ │ │ 0 │ . │ │ = │ │
+ ╰─────┴─────┴─────┴─────┴─────╯ ╭─────┬─────╮ ╭─────┬─────╮ ╰─────┴─────┴─────┴─────┴─────╯
+ │ │ │ │ │ │
+ ╭─────┼─────┼─────┤ ├─────┼─────┼─────╮
+ │ │ │ │ │ │ │ │
+ │ │ ├─────┤ ├─────┤ │ │
+ │ │ │ │ │ │ │ │
+ ╰─────┴─────┴─────╯ ╰─────┴─────┴─────╯
+
+ 4 Mouse
+╭────────┬─────┬─────┬─────┬─────┬─────┬─────╮ ╭─────┬─────┬─────┬─────┬─────┬─────┬────────╮
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├────────┼─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┼────────┤
+│ │ │ │ │ │ │ │ │RgbMo│RgbTo│MsBtn│MsUp │MsBtn│ │ │
+├────────┼─────┼─────┼─────┼─────┼─────┤ │ │ ├─────┼─────┼─────┼─────┼─────┼────────┤
+│ │ │ │ │ │ ├─────┤ ├─────┤RgbSl│MsLef│MsDow│MsRig│ │ │
+├────────┼─────┼─────┼─────┼─────┼─────┤ │ │Toggl├─────┼─────┼─────┼─────┼─────┼────────┤
+│ │ │ │ │ │ │ │ │ │ │MsWhU│ │MsWhD│ │ │
+╰──┬─────┼─────┼─────┼─────┼─────┼─────┴─────╯ ╰─────┴─────┼─────┼─────┼─────┼─────┼─────┬──╯
+ │ │ │ │ │ │ │ │ │ │ │ │
+ ╰─────┴─────┴─────┴─────┴─────╯ ╭─────┬─────╮ ╭─────┬─────╮ ╰─────┴─────┴─────┴─────┴─────╯
+ │RgbHu│RgbHu│ │RgbVa│RgbVa│
+ ╭─────┼─────┼─────┤ ├─────┼─────┼─────╮
+ │ │ │ │ │ │ │ │
+ │ │ ├─────┤ ├─────┤ │ 75 │
+ │ │ │ │ │ │ │ │
+ ╰─────┴─────┴─────╯ ╰─────┴─────┴─────╯
+
+```
+
+Copyright &copy; 2020 Rustam Zagirov. Released under [GPL-2.0](/LICENSE).
diff --git a/keyboards/ergodox_ez/keymaps/stamm/rules.mk b/keyboards/ergodox_ez/keymaps/stamm/rules.mk
new file mode 100644
index 000000000..619224bef
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/stamm/rules.mk
@@ -0,0 +1,8 @@
+# Set any rules.mk overrides for your specific keymap here.
+# See rules at https://docs.qmk.fm/#/config_options?id=the-rulesmk-file
+LTO_ENABLE = yes
+COMMAND_ENABLE = no
+LEADER_ENABLE = yes
+RGBLIGHT_ENABLE = yes
+
+TAP_DANCE_ENABLE = no
diff --git a/keyboards/ergodox_infinity/ergodox_infinity.c b/keyboards/ergodox_infinity/ergodox_infinity.c
index 9fda7991f..c69c1eb36 100644
--- a/keyboards/ergodox_infinity/ergodox_infinity.c
+++ b/keyboards/ergodox_infinity/ergodox_infinity.c
@@ -6,6 +6,17 @@
#include "lcd_backlight.h"
#endif
+#ifdef WPM_ENABLE
+# include "serial_link/protocol/transport.h"
+# include "wpm.h"
+
+MASTER_TO_ALL_SLAVES_OBJECT(current_wpm, uint8_t);
+static remote_object_t* remote_objects[] = {
+ REMOTE_OBJECT(current_wpm),
+};
+static uint8_t last_sent_wpm = 0;
+#endif
+
void init_serial_link_hal(void) {
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);
@@ -39,30 +50,30 @@ void init_serial_link_hal(void) {
// Which will reduce the brightness range
#define PRESCALAR_DEFINE 0
void lcd_backlight_hal_init(void) {
- // Setup Backlight
+ // Setup Backlight
SIM->SCGC6 |= SIM_SCGC6_FTM0;
FTM0->CNT = 0; // Reset counter
- // PWM Period
- // 16-bit maximum
- FTM0->MOD = 0xFFFF;
+ // PWM Period
+ // 16-bit maximum
+ FTM0->MOD = 0xFFFF;
- // Set FTM to PWM output - Edge Aligned, Low-true pulses
+ // 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;
+ 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);
+ // 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;
+ 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);
+ 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;
@@ -94,9 +105,9 @@ static uint16_t cie_lightness(uint16_t v) {
}
void lcd_backlight_hal_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);
+ CHANNEL_RED.CnV = cie_lightness(r);
+ CHANNEL_GREEN.CnV = cie_lightness(g);
+ CHANNEL_BLUE.CnV = cie_lightness(b);
}
__attribute__ ((weak))
@@ -109,21 +120,39 @@ void matrix_scan_user(void) {
void matrix_init_kb(void) {
- // put your keyboard start-up code here
- // runs once when the firmware starts up
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
- matrix_init_user();
- // The backlight always has to be initialized, otherwise it will stay lit
+ matrix_init_user();
+ // The backlight always has to be initialized, otherwise it will stay lit
#ifndef VISUALIZER_ENABLE
- lcd_backlight_hal_init();
+ lcd_backlight_hal_init();
+#endif
+#ifdef WPM_ENABLE
+ add_remote_objects(remote_objects, sizeof(remote_objects) / sizeof(remote_object_t*));
#endif
}
void matrix_scan_kb(void) {
- // put your looping keyboard code here
- // runs every cycle (a lot)
-
- matrix_scan_user();
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+#ifdef WPM_ENABLE
+ if (is_serial_link_master()) {
+ uint8_t current_wpm = get_current_wpm();
+ if (current_wpm != last_sent_wpm) {
+ *begin_write_current_wpm() = current_wpm;
+ end_write_current_wpm();
+ last_sent_wpm = current_wpm;
+ }
+ } else if (is_serial_link_connected()) {
+ uint8_t* new_wpm = read_current_wpm();
+ if (new_wpm) {
+ set_current_wpm(*new_wpm);
+ }
+ }
+#endif
+ matrix_scan_user();
}
bool is_keyboard_master(void) {
diff --git a/keyboards/fjlabs/bolsa65/bolsa65.c b/keyboards/fjlabs/bolsa65/bolsa65.c
new file mode 100644
index 000000000..1d094ac8e
--- /dev/null
+++ b/keyboards/fjlabs/bolsa65/bolsa65.c
@@ -0,0 +1,28 @@
+/*
+Copyright 2020 <me@homedrop.org>
+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 "bolsa65.h"
+
+void matrix_init_kb(void) {
+ // Initialize indicator LEDs to output
+ setPinOutput(F7); // Caps
+ matrix_init_user();
+}
+
+bool led_update_kb(led_t led_state) {
+ bool res = led_update_user(led_state);
+ if(res) {
+ writePin(F7, led_state.caps_lock);
+ }
+ return res;
+}
diff --git a/keyboards/fjlabs/bolsa65/bolsa65.h b/keyboards/fjlabs/bolsa65/bolsa65.h
new file mode 100644
index 000000000..24325d0f1
--- /dev/null
+++ b/keyboards/fjlabs/bolsa65/bolsa65.h
@@ -0,0 +1,32 @@
+/*
+Copyright 2020 <me@homedrop.org>
+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"
+
+/* Bolsa65 Keymap Definitions */
+#define LAYOUT_65_ansi_blocker( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2E, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3E, \
+ K40, K41, K42, K44, K49, K4A, K4C, K4D, K4E \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, KC_NO, K2E }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D, K3E }, \
+ { K40, K41, K42, KC_NO, K44, KC_NO, KC_NO, KC_NO, KC_NO, K49, K4A, KC_NO, K4C, K4D, K4E } \
+}
diff --git a/keyboards/fjlabs/bolsa65/config.h b/keyboards/fjlabs/bolsa65/config.h
new file mode 100644
index 000000000..c38da9707
--- /dev/null
+++ b/keyboards/fjlabs/bolsa65/config.h
@@ -0,0 +1,108 @@
+/*
+Copyright 2020 <me@homedrop.org>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x7074 // FJLabs
+#define PRODUCT_ID 0x0001 // Bolsa65
+#define DEVICE_VER 0x0001 // Version 1
+#define MANUFACTURER FJLabs
+#define PRODUCT bolsa65
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+/*
+ * 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)
+ *
+*/
+
+// Checked with Eagle Schematic
+#define MATRIX_ROW_PINS { F1, F0, F6, F5, F4 }
+#define MATRIX_COL_PINS { C7, B1, B2, B3, B7, D0, D1, D2, D3, D5, D4, D6, D7, B4, B5 }
+#define UNUSED_PINS
+
+/* COL2ROW or 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
+
+/* Define RGB Underglow
+#define RGB_DI_PIN B0
+#define RGBLED_NUM 24
+#define RGBLIGHT_ANIMATIONS */
+/* #define RGBLIGHT_LAYER_BLINK*/
+
+/* Define less important options */
+
+/*
+ * 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
+#define NO_ACTION_MACRO
+#define NO_ACTION_FUNCTION
diff --git a/keyboards/fjlabs/bolsa65/info.json b/keyboards/fjlabs/bolsa65/info.json
new file mode 100644
index 000000000..2485c29f5
--- /dev/null
+++ b/keyboards/fjlabs/bolsa65/info.json
@@ -0,0 +1,84 @@
+{
+ "keyboard_name": "Bolsa65",
+ "url": "https://www.bolsakeyboardsupply.com",
+ "maintainer": "FJLabs",
+ "width": 16,
+ "height": 5,
+ "layouts": {
+ "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}
+ ]
+ }
+ }
+}
diff --git a/keyboards/fjlabs/bolsa65/keymaps/default/keymap.c b/keyboards/fjlabs/bolsa65/keymaps/default/keymap.c
new file mode 100644
index 000000000..d36898e0c
--- /dev/null
+++ b/keyboards/fjlabs/bolsa65/keymaps/default/keymap.c
@@ -0,0 +1,39 @@
+/*
+Copyright 2020 <me@homedrop.org>
+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 layers {
+ _LAYER0,
+ _LAYER1,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_LAYER0] = LAYOUT_65_ansi_blocker(
+ KC_GRAVE, 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, TG(1),
+ 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_PGUP,
+ 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_PGDN,
+ 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_ESC ,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [_LAYER1] = LAYOUT_65_ansi_blocker(
+ 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_TRNS, TG(1),
+ KC_TRNS, RGB_TOG, RGB_RMOD, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_SPI, RGB_SPD, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, RGB_M_K, RGB_M_X, RGB_M_G, RGB_M_T, 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
+ )
+};
diff --git a/keyboards/fjlabs/bolsa65/keymaps/via/keymap.c b/keyboards/fjlabs/bolsa65/keymaps/via/keymap.c
new file mode 100644
index 000000000..0db9e5221
--- /dev/null
+++ b/keyboards/fjlabs/bolsa65/keymaps/via/keymap.c
@@ -0,0 +1,58 @@
+/*
+Copyright 2020 <me@homedrop.org>
+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 layers {
+ _LAYER0,
+ _LAYER1,
+ _LAYER2,
+ _LAYER3,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_LAYER0] = LAYOUT_65_ansi_blocker(
+ KC_GRAVE, 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, TG(1),
+ 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_PGUP,
+ 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_PGDN,
+ 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_ESC ,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [_LAYER1] = LAYOUT_65_ansi_blocker(
+ 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_TRNS, TG(1),
+ KC_TRNS, RGB_TOG, RGB_RMOD, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_SPI, RGB_SPD, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, RGB_M_K, RGB_M_X, RGB_M_G, RGB_M_T, 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
+ ),
+
+ [_LAYER2] = LAYOUT_65_ansi_blocker(
+ 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,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
+ ),
+
+ [_LAYER3] = LAYOUT_65_ansi_blocker(
+ 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,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
+ ),
+
+};
diff --git a/keyboards/fjlabs/bolsa65/keymaps/via/rules.mk b/keyboards/fjlabs/bolsa65/keymaps/via/rules.mk
new file mode 100644
index 000000000..1e5b99807
--- /dev/null
+++ b/keyboards/fjlabs/bolsa65/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/fjlabs/bolsa65/readme.md b/keyboards/fjlabs/bolsa65/readme.md
new file mode 100644
index 000000000..e668f4b8c
--- /dev/null
+++ b/keyboards/fjlabs/bolsa65/readme.md
@@ -0,0 +1,12 @@
+# bolsa65
+
+The following is the QMK Firmware for the [BolsaKeyboardSupply](https://www.bolsakeyboardsupply.com) Bolsa65 mechanical keyboard.
+
+* Keyboard Maintainer: FJLabs
+* Hardware Supported: Bolsa65
+
+Make example for this keyboard (after setting up your build environment):
+
+ make fjlabs/bolsa65:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/fjlabs/bolsa65/rules.mk b/keyboards/fjlabs/bolsa65/rules.mk
new file mode 100644
index 000000000..945e7be2e
--- /dev/null
+++ b/keyboards/fjlabs/bolsa65/rules.mk
@@ -0,0 +1,28 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency
+F_CPU = 8000000
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
+KEYBOARD_LOCK_ENABLE = yes
+
+LAYOUTS = 65_ansi_blocker
diff --git a/keyboards/flehrad/bigswitch/keymaps/via/keymap.c b/keyboards/flehrad/bigswitch/keymaps/via/keymap.c
new file mode 100644
index 000000000..f253f4b12
--- /dev/null
+++ b/keyboards/flehrad/bigswitch/keymaps/via/keymap.c
@@ -0,0 +1,29 @@
+/*
+Copyright 2020 MechMerlin
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT(KC_TRNS),
+
+ [1] = LAYOUT(KC_TRNS),
+
+ [2] = LAYOUT(KC_TRNS),
+
+ [3] = LAYOUT(KC_TRNS)
+};
diff --git a/keyboards/flehrad/bigswitch/keymaps/via/rules.mk b/keyboards/flehrad/bigswitch/keymaps/via/rules.mk
new file mode 100644
index 000000000..36b7ba9cb
--- /dev/null
+++ b/keyboards/flehrad/bigswitch/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/gray_studio/hb85/config.h b/keyboards/gray_studio/hb85/config.h
index f3fb20ec6..9309012a4 100644
--- a/keyboards/gray_studio/hb85/config.h
+++ b/keyboards/gray_studio/hb85/config.h
@@ -17,8 +17,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#pragma once
-#define VENDOR_ID 0x20A0
-#define PRODUCT_ID 0x422F
+#define VENDOR_ID 0x4753
+#define PRODUCT_ID 0x2000
#define DEVICE_VER 0x0200
#define MANUFACTURER Gray Studio
#define PRODUCT HB85
diff --git a/keyboards/gray_studio/hb85/keymaps/via/config.h b/keyboards/gray_studio/hb85/keymaps/via/config.h
new file mode 100644
index 000000000..c81bd53bb
--- /dev/null
+++ b/keyboards/gray_studio/hb85/keymaps/via/config.h
@@ -0,0 +1,20 @@
+/*
+Copyright 2020 MechMerlin <mechmerlin@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
+
+#define DYNAMIC_KEYMAP_LAYER_COUNT 3
diff --git a/keyboards/gray_studio/hb85/keymaps/via/keymap.c b/keyboards/gray_studio/hb85/keymaps/via/keymap.c
new file mode 100644
index 000000000..febf4715b
--- /dev/null
+++ b/keyboards/gray_studio/hb85/keymaps/via/keymap.c
@@ -0,0 +1,56 @@
+/*
+Copyright 2019 Felipe Coury <felipe.coury@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] = {
+ [0] = LAYOUT_all(
+ 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_DEL,
+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_BSPC, KC_PSLS, KC_PAST, KC_PMNS,
+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_P7 , KC_P8 , KC_P9 ,
+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_P4 , KC_P5 , KC_P6 ,
+KC_LSFT, KC_NO , KC_Z , KC_Z , KC_X , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, KC_UP , KC_P1 , KC_P2 , KC_P3 ,
+ KC_LCTL, KC_LALT, KC_SPC , KC_RALT, KC_RGUI, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0 , KC_PDOT
+ ),
+
+ [1] = LAYOUT_all(
+ RESET , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+_______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______,
+_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ [2] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ [3] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+};
diff --git a/keyboards/gray_studio/hb85/keymaps/via/rules.mk b/keyboards/gray_studio/hb85/keymaps/via/rules.mk
new file mode 100644
index 000000000..36b7ba9cb
--- /dev/null
+++ b/keyboards/gray_studio/hb85/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/gray_studio/hb85/readme.md b/keyboards/gray_studio/hb85/readme.md
index 7e39f327c..523f774c8 100644
--- a/keyboards/gray_studio/hb85/readme.md
+++ b/keyboards/gray_studio/hb85/readme.md
@@ -4,7 +4,7 @@
A Sony HitBit MSX Computer inspired Keyboard.
-* Keyboard Maintainer: [Felipe Coury](https://github.com/fcoury)
+* Keyboard Maintainer: [Felipe Coury](https://github.com/fcoury), [MechMerlin](https://github.com/mechmerlin)
* Hardware Supported: Gray Studio HB85
* Hardware Availability: [Group buy](https://en.zfrontier.com/products/gray-hb85) finished
diff --git a/keyboards/handwired/3dp660/3dp660.c b/keyboards/handwired/3dp660/3dp660.c
new file mode 100644
index 000000000..3f655d359
--- /dev/null
+++ b/keyboards/handwired/3dp660/3dp660.c
@@ -0,0 +1,17 @@
+ /* Copyright 2020 gooberpsycho
+ *
+ * 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 "3dp660.h"
diff --git a/keyboards/handwired/3dp660/3dp660.h b/keyboards/handwired/3dp660/3dp660.h
new file mode 100644
index 000000000..67288b1fc
--- /dev/null
+++ b/keyboards/handwired/3dp660/3dp660.h
@@ -0,0 +1,35 @@
+ /* Copyright 2020 gooberpsycho
+ *
+ * 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"
+
+// The first section contains all of the arguments
+// The second converts the arguments into a two-dimensional array
+#define LAYOUT_66_ansi( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3C, k3D, \
+ k40, k41, k42, k45, k49, k4A, k4B, k4C, k4D, k4E \
+) \
+{ \
+ {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E}, \
+ {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E}, \
+ {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, KC_NO, KC_NO}, \
+ {k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, KC_NO, k3C, k3D, KC_NO}, \
+ {k40, k41, k42, KC_NO, KC_NO, k45, KC_NO, KC_NO, KC_NO, k49, k4A, k4B, k4C, k4D, k4E} \
+}
diff --git a/keyboards/handwired/3dp660/config.h b/keyboards/handwired/3dp660/config.h
new file mode 100644
index 000000000..e719cf2c2
--- /dev/null
+++ b/keyboards/handwired/3dp660/config.h
@@ -0,0 +1,51 @@
+/*
+Copyright 2012 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 "config_common.h"
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6075
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Handwired
+#define PRODUCT 3dp660
+
+#define TAPPING_TERM 400
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+// ROWS: Top to bottom, COLS: Left to right
+
+#define MATRIX_ROW_PINS { B0, B1, B2, B3, B7 }
+#define MATRIX_COL_PINS { D2, D3, C6, C7, D5, D4, D7, B4, B5, B6, F7, F6, F5, F4, F1 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
+
+/* 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
+
diff --git a/keyboards/handwired/3dp660/info.json b/keyboards/handwired/3dp660/info.json
new file mode 100644
index 000000000..5b7825088
--- /dev/null
+++ b/keyboards/handwired/3dp660/info.json
@@ -0,0 +1,80 @@
+{
+ "keyboard_name": "3dp660",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_66_ansi": {
+
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"1", "x":1, "y":0},
+ {"label":"2", "x":2, "y":0},
+ {"label":"3", "x":3, "y":0},
+ {"label":"4", "x":4, "y":0},
+ {"label":"5", "x":5, "y":0},
+ {"label":"6", "x":6, "y":0},
+ {"label":"7", "x":7, "y":0},
+ {"label":"8", "x":8, "y":0},
+ {"label":"9", "x":9, "y":0},
+ {"label":"0", "x":10, "y":0},
+ {"label":"-", "x":11, "y":0},
+ {"label":"=", "x":12, "y":0},
+ {"label":"BKSP", "x":13, "y":0, "w":2},
+ {"label":"Insert", "x":15.5, "y":0},
+ {"label":"Tab", "x":0, "y":1, "w":1.5},
+ {"label":"Q", "x":1.5, "y":1},
+ {"label":"W", "x":2.5, "y":1},
+ {"label":"E", "x":3.5, "y":1},
+ {"label":"R", "x":4.5, "y":1},
+ {"label":"T", "x":5.5, "y":1},
+ {"label":"Y", "x":6.5, "y":1},
+ {"label":"U", "x":7.5, "y":1},
+ {"label":"I", "x":8.5, "y":1},
+ {"label":"O", "x":9.5, "y":1},
+ {"label":"P", "x":10.5, "y":1},
+ {"label":"[", "x":11.5, "y":1},
+ {"label":"]", "x":12.5, "y":1},
+ {"label":"|", "x":13.5, "y":1, "w":1.5},
+ {"label":"Del", "x":15.5, "y":1},
+ {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
+ {"label":"A", "x":1.75, "y":2},
+ {"label":"S", "x":2.75, "y":2},
+ {"label":"D", "x":3.75, "y":2},
+ {"label":"F", "x":4.75, "y":2},
+ {"label":"G", "x":5.75, "y":2},
+ {"label":"H", "x":6.75, "y":2},
+ {"label":"J", "x":7.75, "y":2},
+ {"label":"K", "x":8.75, "y":2},
+ {"label":"L", "x":9.75, "y":2},
+ {"label":";", "x":10.75, "y":2},
+ {"label":"'", "x":11.75, "y":2},
+ {"label":"Enter", "x":12.75, "y":2, "w":2.25},
+ {"label":"Shift", "x":0, "y":3, "w":2.25},
+ {"label":"Z", "x":2.25, "y":3},
+ {"label":"X", "x":3.25, "y":3},
+ {"label":"C", "x":4.25, "y":3},
+ {"label":"V", "x":5.25, "y":3},
+ {"label":"B", "x":6.25, "y":3},
+ {"label":"N", "x":7.25, "y":3},
+ {"label":"M", "x":8.25, "y":3},
+ {"label":",", "x":9.25, "y":3},
+ {"label":".", "x":10.25, "y":3},
+ {"label":"/", "x":11.25, "y":3},
+ {"label":"Shift", "x":12.25, "y":3, "w":2.25},
+ {"label":"Up", "x":14.5, "y":3},
+ {"label":"CTRL", "x":0, "y":4, "w":1.25},
+ {"label":"GUI", "x":1.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":4, "w":1.25},
+ {"label":"Space", "x":3.75, "y":4, "w":6.25},
+ {"label":"Alt", "x":10, "y":4, "w":1.25},
+ {"label":"MO(1)", "x":11.25, "y":4},
+ {"label":"CTRL", "x":12.25, "y":4, "w":1.25},
+ {"label":"Left", "x":13.5, "y":4},
+ {"label":"Down", "x":14.5, "y":4},
+ {"label":"Right", "x":15.5, "y":4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/3dp660/keymaps/default/keymap.c b/keyboards/handwired/3dp660/keymaps/default/keymap.c
new file mode 100644
index 000000000..e9eee115e
--- /dev/null
+++ b/keyboards/handwired/3dp660/keymaps/default/keymap.c
@@ -0,0 +1,34 @@
+ /* Copyright 2020 gooberpsycho
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_66_ansi(
+ 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_BSLS, KC_END,
+ 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_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_66_ansi(
+ 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, 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_VOLU,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT
+ ),
+};
diff --git a/keyboards/handwired/3dp660/keymaps/via/keymap.c b/keyboards/handwired/3dp660/keymaps/via/keymap.c
new file mode 100644
index 000000000..b39eabe49
--- /dev/null
+++ b/keyboards/handwired/3dp660/keymaps/via/keymap.c
@@ -0,0 +1,48 @@
+ /* Copyright 2020 gooberpsycho
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_66_ansi(
+ 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_BSLS, KC_END,
+ 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_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_66_ansi(
+ 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, 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_VOLU,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT
+ ),
+ [2] = LAYOUT_66_ansi(
+ 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, 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
+ ),
+ [3] = LAYOUT_66_ansi(
+ 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, 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
+ )
+};
diff --git a/keyboards/handwired/3dp660/keymaps/via/rules.mk b/keyboards/handwired/3dp660/keymaps/via/rules.mk
new file mode 100644
index 000000000..1e5b99807
--- /dev/null
+++ b/keyboards/handwired/3dp660/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/handwired/3dp660/readme.md b/keyboards/handwired/3dp660/readme.md
new file mode 100644
index 000000000..dfece8ed4
--- /dev/null
+++ b/keyboards/handwired/3dp660/readme.md
@@ -0,0 +1,24 @@
+# 3dp660
+
+![](https://i.imgur.com/KWyU57el.jpg)
+
+### Teensy 2.0 Pinout
+| rows | 0 | 1 | 2 | 3 | 4 |
+| --------------- | --- | --- | --- | --- | --- |
+| Teensy/QMK pin | B0 | B1 | B2 | B3 | B7 |
+
+| columns | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
+| --------------- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
+| Teensy/QMK pin | D2 | D3 | C6 | C7 | D5 | D4 | D7 | B4 | B5 | B6 | F7 | F6 | F5 | F4 | F1 |
+
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/3dp660:default
+
+**Reset Key:** Hold down the key located at `k00`, commonly programmed as Escape while plugging in the keyboard.
+
+* Keyboard Maintainer: [gooberpsycho](https://github.com/gooberpsycho)
+* Hardware Availability: [Casefile](https://www.thingiverse.com/thing:2897260)
+
+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/handwired/3dp660/rules.mk b/keyboards/handwired/3dp660/rules.mk
new file mode 100644
index 000000000..d97f13a39
--- /dev/null
+++ b/keyboards/handwired/3dp660/rules.mk
@@ -0,0 +1,23 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = halfkay
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
+LTO_ENABLE = yes
diff --git a/keyboards/handwired/curiosity/config.h b/keyboards/handwired/curiosity/config.h
new file mode 100644
index 000000000..8b632a5ec
--- /dev/null
+++ b/keyboards/handwired/curiosity/config.h
@@ -0,0 +1,44 @@
+/*
+Copyright 2020 Spaceman
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x5342 // "SB"
+#define PRODUCT_ID 0x4355 // "CU"
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Spaceman
+#define PRODUCT Curiosity
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 12
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { D0, F7, F6, F5 }
+#define MATRIX_COL_PINS { D3, D4, F4, C6, D7, E6, B5, B4, B1, B3, B2, B6 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* 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
diff --git a/keyboards/handwired/curiosity/curiosity.c b/keyboards/handwired/curiosity/curiosity.c
new file mode 100644
index 000000000..e0a6e130e
--- /dev/null
+++ b/keyboards/handwired/curiosity/curiosity.c
@@ -0,0 +1,16 @@
+/* Copyright 2020 Spaceman
+ *
+ * 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 "curiosity.h" \ No newline at end of file
diff --git a/keyboards/handwired/curiosity/curiosity.h b/keyboards/handwired/curiosity/curiosity.h
new file mode 100644
index 000000000..a79bfa663
--- /dev/null
+++ b/keyboards/handwired/curiosity/curiosity.h
@@ -0,0 +1,41 @@
+/* Copyright 2020 Spaceman
+ *
+ * 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_small_mods( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k3b, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k3a, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k39, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38 \
+) { \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b }, \
+}
+#define LAYOUT_large_mods( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k3b, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38 \
+) { \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, k38, KC_NO, KC_NO, k3b }, \
+}
diff --git a/keyboards/handwired/curiosity/info.json b/keyboards/handwired/curiosity/info.json
new file mode 100644
index 000000000..333868e1a
--- /dev/null
+++ b/keyboards/handwired/curiosity/info.json
@@ -0,0 +1,25 @@
+{
+ "keyboard_name": "Curiosity",
+ "url": "",
+ "maintainer": "Spaceman",
+ "width": 13.5,
+ "height": 4,
+ "layouts": {
+ "LAYOUT_small_mods": {
+ "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, "w":1.5},
+ {"x":0, "y":1, "w":1.25}, {"x":1.25, "y":1}, {"x":2.25, "y":1}, {"x":3.25, "y":1}, {"x":4.25, "y":1}, {"x":5.25, "y":1}, {"x":6.25, "y":1}, {"x":7.25, "y":1}, {"x":8.25, "y":1}, {"x":9.25, "y":1}, {"x":10.25, "y":1}, {"x":11.25, "y":1}, {"x":12.25, "y":1, "w":1.25},
+ {"x":0, "y":2, "w":1.5}, {"x":1.5, "y":2}, {"x":2.5, "y":2}, {"x":3.5, "y":2}, {"x":4.5, "y":2}, {"x":5.5, "y":2}, {"x":6.5, "y":2}, {"x":7.5, "y":2}, {"x":8.5, "y":2}, {"x":9.5, "y":2}, {"x":10.5, "y":2}, {"x":11.5, "y":2}, {"x":12.5, "y":2},
+ {"x":0.75, "y":3, "w":1.25}, {"x":2, "y":3, "w":1.25}, {"x":3.25, "y":3, "w":1.25}, {"x":4.5, "y":3, "w":2}, {"x":6.5, "y":3, "w":2.25}, {"x":8.75, "y":3}, {"x":9.75, "y":3}, {"x":10.75, "y":3}, {"x":11.75, "y":3}
+ ]
+ },
+ "LAYOUT_large_mods": {
+ "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, "w":1.5},
+ {"x":0, "y":1, "w":1.25}, {"x":1.25, "y":1}, {"x":2.25, "y":1}, {"x":3.25, "y":1}, {"x":4.25, "y":1}, {"x":5.25, "y":1}, {"x":6.25, "y":1}, {"x":7.25, "y":1}, {"x":8.25, "y":1}, {"x":9.25, "y":1}, {"x":10.25, "y":1}, {"x":11.25, "y":1, "w":2.25},
+ {"x":0, "y":2, "w":1.5}, {"x":1.5, "y":2}, {"x":2.5, "y":2}, {"x":3.5, "y":2}, {"x":4.5, "y":2}, {"x":5.5, "y":2}, {"x":6.5, "y":2}, {"x":7.5, "y":2}, {"x":8.5, "y":2}, {"x":9.5, "y":2}, {"x":10.5, "y":2}, {"x":11.5, "y":2, "w":2},
+ {"x":0.75, "y":3, "w":1.25}, {"x":2, "y":3, "w":1.25}, {"x":3.25, "y":3, "w":1.25}, {"x":4.5, "y":3, "w":2}, {"x":6.5, "y":3, "w":2.25}, {"x":8.75, "y":3}, {"x":9.75, "y":3}, {"x":10.75, "y":3}, {"x":11.75, "y":3}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/curiosity/keymaps/default/keymap.c b/keyboards/handwired/curiosity/keymaps/default/keymap.c
new file mode 100644
index 000000000..741ad387d
--- /dev/null
+++ b/keyboards/handwired/curiosity/keymaps/default/keymap.c
@@ -0,0 +1,33 @@
+/* Copyright 2020 Spaceman
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_small_mods(
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, KC_BSPC,
+ KC_TAB, 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_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(1), KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+ ),
+
+ [1] = LAYOUT_small_mods(
+ KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, 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
+ ),
+};
diff --git a/keyboards/handwired/curiosity/readme.md b/keyboards/handwired/curiosity/readme.md
new file mode 100644
index 000000000..eaf608e22
--- /dev/null
+++ b/keyboards/handwired/curiosity/readme.md
@@ -0,0 +1,13 @@
+# The Curiosity
+
+40% Keyboard
+
+* Keyboard Maintainer: [Spaceman](https://github.com/Spaceman)
+* Hardware Supported: Curiosity PCB
+* Hardware Availability: N/A
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/curiosity:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/handwired/curiosity/rules.mk b/keyboards/handwired/curiosity/rules.mk
new file mode 100644
index 000000000..dace27ef3
--- /dev/null
+++ b/keyboards/handwired/curiosity/rules.mk
@@ -0,0 +1,23 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
+LTO_ENABLE = no # Use link time optimization
diff --git a/keyboards/handwired/onekey/blackpill_f401/config.h b/keyboards/handwired/onekey/blackpill_f401/config.h
index c6166380c..829e84677 100644
--- a/keyboards/handwired/onekey/blackpill_f401/config.h
+++ b/keyboards/handwired/onekey/blackpill_f401/config.h
@@ -23,7 +23,7 @@
#define UNUSED_PINS
#define BACKLIGHT_PIN A0
-#define BACKLIGHT_PWM_DRIVER PWMD2
+#define BACKLIGHT_PWM_DRIVER PWMD5
#define BACKLIGHT_PWM_CHANNEL 1
#define RGB_DI_PIN A1
diff --git a/keyboards/handwired/onekey/blackpill_f401/halconf.h b/keyboards/handwired/onekey/blackpill_f401/halconf.h
index d73c214ec..ae08512d4 100644
--- a/keyboards/handwired/onekey/blackpill_f401/halconf.h
+++ b/keyboards/handwired/onekey/blackpill_f401/halconf.h
@@ -16,5 +16,6 @@
#pragma once
#define HAL_USE_I2C TRUE
+#define HAL_USE_PWM TRUE
#include_next "halconf.h"
diff --git a/keyboards/handwired/onekey/blackpill_f401/mcuconf.h b/keyboards/handwired/onekey/blackpill_f401/mcuconf.h
index 33e07847b..034a022db 100644
--- a/keyboards/handwired/onekey/blackpill_f401/mcuconf.h
+++ b/keyboards/handwired/onekey/blackpill_f401/mcuconf.h
@@ -19,3 +19,6 @@
#undef STM32_I2C_USE_I2C1
#define STM32_I2C_USE_I2C1 TRUE
+
+#undef STM32_PWM_USE_TIM5
+#define STM32_PWM_USE_TIM5 TRUE
diff --git a/keyboards/handwired/onekey/blackpill_f401/rules.mk b/keyboards/handwired/onekey/blackpill_f401/rules.mk
index 609262049..6eb37a581 100644
--- a/keyboards/handwired/onekey/blackpill_f401/rules.mk
+++ b/keyboards/handwired/onekey/blackpill_f401/rules.mk
@@ -1,30 +1,8 @@
-## chip/board settings
-# the next two should match the directories in
-# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
-MCU_FAMILY = STM32
-MCU_SERIES = STM32F4xx
-# linker script to use
-# it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
-# or <this_dir>/ld/
-MCU_LDSCRIPT = STM32F401xC
-# startup code to use
-# is should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f4xx
-# it should exist either in <chibios>/os/hal/boards/
-# or <this_dir>/boards
-BOARD = BLACKPILL_STM32_F401
-# Cortex version
-# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
-MCU = cortex-m4
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 7
-USE_FPU = yes
-# Address of the booloader in system memory
-STM32_BOOTLOADER_ADDRESS = 0x1FFF0000
+# MCU name
+MCU = STM32F401
-# Options to pass to dfu-util when flashing
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-DFU_SUFFIX_ARGS = -v 0483 -p df11
+# Address of the bootloader in system memory
+STM32_BOOTLOADER_ADDRESS = 0x1FFF0000
# Build Options
# change yes to no to disable
diff --git a/keyboards/handwired/onekey/blackpill_f411/config.h b/keyboards/handwired/onekey/blackpill_f411/config.h
index c6166380c..829e84677 100644
--- a/keyboards/handwired/onekey/blackpill_f411/config.h
+++ b/keyboards/handwired/onekey/blackpill_f411/config.h
@@ -23,7 +23,7 @@
#define UNUSED_PINS
#define BACKLIGHT_PIN A0
-#define BACKLIGHT_PWM_DRIVER PWMD2
+#define BACKLIGHT_PWM_DRIVER PWMD5
#define BACKLIGHT_PWM_CHANNEL 1
#define RGB_DI_PIN A1
diff --git a/keyboards/handwired/onekey/blackpill_f411/halconf.h b/keyboards/handwired/onekey/blackpill_f411/halconf.h
index d73c214ec..ae08512d4 100644
--- a/keyboards/handwired/onekey/blackpill_f411/halconf.h
+++ b/keyboards/handwired/onekey/blackpill_f411/halconf.h
@@ -16,5 +16,6 @@
#pragma once
#define HAL_USE_I2C TRUE
+#define HAL_USE_PWM TRUE
#include_next "halconf.h"
diff --git a/keyboards/handwired/onekey/blackpill_f411/mcuconf.h b/keyboards/handwired/onekey/blackpill_f411/mcuconf.h
index 33e07847b..034a022db 100644
--- a/keyboards/handwired/onekey/blackpill_f411/mcuconf.h
+++ b/keyboards/handwired/onekey/blackpill_f411/mcuconf.h
@@ -19,3 +19,6 @@
#undef STM32_I2C_USE_I2C1
#define STM32_I2C_USE_I2C1 TRUE
+
+#undef STM32_PWM_USE_TIM5
+#define STM32_PWM_USE_TIM5 TRUE
diff --git a/keyboards/handwired/onekey/blackpill_f411/rules.mk b/keyboards/handwired/onekey/blackpill_f411/rules.mk
index f2e0f2b4f..7cf886431 100644
--- a/keyboards/handwired/onekey/blackpill_f411/rules.mk
+++ b/keyboards/handwired/onekey/blackpill_f411/rules.mk
@@ -1,30 +1,8 @@
-## chip/board settings
-# the next two should match the directories in
-# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
-MCU_FAMILY = STM32
-MCU_SERIES = STM32F4xx
-# linker script to use
-# it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
-# or <this_dir>/ld/
-MCU_LDSCRIPT = STM32F411xE
-# startup code to use
-# is should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f4xx
-# it should exist either in <chibios>/os/hal/boards/
-# or <this_dir>/boards
-BOARD = BLACKPILL_STM32_F411
-# Cortex version
-# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
-MCU = cortex-m4
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 7
-USE_FPU = yes
-# Address of the booloader in system memory
-STM32_BOOTLOADER_ADDRESS = 0x1FFF0000
+# MCU name
+MCU = STM32F411
-# Options to pass to dfu-util when flashing
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-DFU_SUFFIX_ARGS = -v 0483 -p df11
+# Address of the bootloader in system memory
+STM32_BOOTLOADER_ADDRESS = 0x1FFF0000
# Build Options
# change yes to no to disable
diff --git a/keyboards/handwired/onekey/rules.mk b/keyboards/handwired/onekey/rules.mk
index 968e338e2..ac343e166 100644
--- a/keyboards/handwired/onekey/rules.mk
+++ b/keyboards/handwired/onekey/rules.mk
@@ -5,7 +5,7 @@ BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE = yes # Console for debug(+400)
-COMMAND_ENABLE = yes # Commands for debug and configuration
+COMMAND_ENABLE = no # Commands for debug and configuration
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
diff --git a/keyboards/handwired/riblee_f401/config.h b/keyboards/handwired/riblee_f401/config.h
index d8e7e7d62..6e5c07979 100644
--- a/keyboards/handwired/riblee_f401/config.h
+++ b/keyboards/handwired/riblee_f401/config.h
@@ -27,10 +27,6 @@
#define MATRIX_ROWS 5
#define MATRIX_COLS 12
-// Testing with onekey
-// #define MATRIX_ROW_PINS { A7 }
-// #define MATRIX_COL_PINS { B0 }
-
#define MATRIX_ROW_PINS { A6, A5, A4, A3, A2 }
#define MATRIX_COL_PINS { B10, B1, B0, B15, A8, B3, B4, B5, B6, B7, B8, B9 }
#define UNUSED_PINS
@@ -39,3 +35,7 @@
#define BACKLIGHT_PIN A0
#define BACKLIGHT_LEVELS 5
+
+#define MOUSEKEY_INTERVAL 32
+
+#define TAPPING_TERM 175 \ No newline at end of file
diff --git a/keyboards/handwired/riblee_f401/keymaps/default/keymap.c b/keyboards/handwired/riblee_f401/keymaps/default/keymap.c
index 40f64e189..4bb18634e 100644
--- a/keyboards/handwired/riblee_f401/keymaps/default/keymap.c
+++ b/keyboards/handwired/riblee_f401/keymaps/default/keymap.c
@@ -40,7 +40,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Qwerty
* ,-----------------------------------------------------------------------------------.
- * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - |
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | Tab | Q | W | E | R | T | Y | U | I | O | P | Del |
* |------+------+------+------+------+-------------+------+------+------+------+------|
@@ -48,15 +48,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
* |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Brite| Ctrl | Alt | GUI |Lower | Bksp |Space |Raise | Left | Down | Up |Right |
+ * | Brite| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
* `-----------------------------------------------------------------------------------'
*/
[_QWERTY] = LAYOUT_ortho_5x12(
- 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_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL,
KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
- BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_BSPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+ BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
),
/* Colemak
@@ -111,7 +111,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | | |
* |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * | | | | | | BTN1 | BTN2 | | MS_L | MS_D | MS_U | MS_R |
* `-----------------------------------------------------------------------------------'
*/
[_LOWER] = LAYOUT_ortho_5x12(
@@ -119,7 +119,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),KC_HOME, KC_END, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+ _______, _______, _______, _______, _______, KC_BTN1, KC_BTN2, _______, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R
),
/* Raise
@@ -147,24 +147,23 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* ,-----------------------------------------------------------------------------------.
* | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
* |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | Reset| | | | | | | | | | Del |
+ * | |Reset |Debug | | | | | | | | | Del |
* |------+------+------+------+------+-------------+------+------+------+------+------|
- * | | | |Aud on|AudOff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
+ * | | |Mu mod|Aud on|AudOff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
* |------+------+------+------+------+------|------+------+------+------+------+------|
- * | |Voice-|Voice+|Mus on|MusOff|MidiOn|MidOff| | | | | |
+ * | | | | | | | NKRO | Swap |Un swp| | | |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------'
*/
[_ADJUST] = LAYOUT_ortho_5x12(
- KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
- _______, RESET, DEBUG, _______, _______, _______, _______, TERM_ON, TERM_OFF,_______, _______, KC_DEL,
- _______, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______,
- _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ _______, RESET, DEBUG, _______, _______, _______, _______, TERM_ON, TERM_OFF,_______, _______, KC_DEL,
+ _______, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______,
+ _______, _______, _______, _______, _______, _______, NK_TOGG, LCG_SWP, LCG_NRM, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
)
-
};
layer_state_t layer_state_set_user(layer_state_t state) {
@@ -193,12 +192,12 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
break;
case BACKLIT:
if (record->event.pressed) {
- register_code(KC_RSFT);
+ register_code(keycode_config(KC_LGUI));
#ifdef BACKLIGHT_ENABLE
backlight_step();
#endif
} else {
- unregister_code(KC_RSFT);
+ unregister_code(keycode_config(KC_LGUI));
}
return false;
break;
diff --git a/keyboards/handwired/riblee_f401/keymaps/riblee/keymap.c b/keyboards/handwired/riblee_f401/keymaps/riblee/keymap.c
new file mode 100644
index 000000000..33319542a
--- /dev/null
+++ b/keyboards/handwired/riblee_f401/keymaps/riblee/keymap.c
@@ -0,0 +1,341 @@
+/* Copyright 2015-2017 Jack Humbert
+ * Copyright 2020 Daniel Reibl <janos.daniel.reibl@protonmail.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 preonic_layers {
+ _QWERTY,
+ _COLEMAK,
+ _DVORAK,
+ _LOWER,
+ _RAISE,
+ _ADJUST
+};
+
+enum preonic_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ DVORAK,
+ BACKLIT
+};
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+
+// Tap Dance declarations
+enum {
+ TD_A,
+ TD_E,
+ TD_I,
+ TD_O,
+ TD_U,
+};
+
+const uint8_t shift = MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT);
+
+// Tap Dance functions
+void dance_key_a (qk_tap_dance_state_t *state, void *user_data) {
+ if (state->count == 1) {
+ SEND_STRING("a");
+ reset_tap_dance(state);
+ } else if (state->count == 2) {
+ if (!(keyboard_report->mods & shift)) {
+ send_unicode_string("á");
+ } else {
+ send_unicode_string("Á");
+ }
+
+ reset_tap_dance(state);
+ }
+}
+
+void dance_key_e (qk_tap_dance_state_t *state, void *user_data) {
+ if (state->count == 1) {
+ SEND_STRING("e");
+ reset_tap_dance(state);
+ } else if (state->count == 2) {
+ if (!(keyboard_report->mods & shift)) {
+ send_unicode_string("é");
+ } else {
+ send_unicode_string("É");
+ }
+
+ reset_tap_dance(state);
+ }
+}
+
+void dance_key_i (qk_tap_dance_state_t *state, void *user_data) {
+ if (state->count == 1) {
+ SEND_STRING("i");
+ reset_tap_dance(state);
+ } else if (state->count == 2) {
+ if (!(keyboard_report->mods & shift)) {
+ send_unicode_string("í");
+ } else {
+ send_unicode_string("Í");
+ }
+
+ reset_tap_dance(state);
+ }
+}
+
+void dance_key_o (qk_tap_dance_state_t *state, void *user_data) {
+ if (state->count == 1) {
+ SEND_STRING("o");
+ reset_tap_dance(state);
+ } else if (state->count == 2) {
+ if (!(keyboard_report->mods & shift)) {
+ send_unicode_string("ó");
+ } else {
+ send_unicode_string("Ó");
+ }
+
+ reset_tap_dance(state);
+ } else if (state->count == 3) {
+ if (!(keyboard_report->mods & shift)) {
+ send_unicode_string("ö");
+ } else {
+ send_unicode_string("Ö");
+ }
+
+ reset_tap_dance(state);
+ } else if (state->count == 4) {
+ if (!(keyboard_report->mods & shift)) {
+ send_unicode_string("ő");
+ } else {
+ send_unicode_string("Ő");
+ }
+
+ reset_tap_dance(state);
+ }
+}
+
+void dance_key_u (qk_tap_dance_state_t *state, void *user_data) {
+ if (state->count == 1) {
+ SEND_STRING("u");
+ reset_tap_dance(state);
+ } else if (state->count == 2) {
+ if (!(keyboard_report->mods & shift)) {
+ send_unicode_string("ú");
+ } else {
+ send_unicode_string("Ú");
+ }
+
+ reset_tap_dance(state);
+ } else if (state->count == 3) {
+ if (!(keyboard_report->mods & shift)) {
+ send_unicode_string("ü");
+ } else {
+ send_unicode_string("Ü");
+ }
+
+ reset_tap_dance(state);
+ } else if (state->count == 4) {
+ if (!(keyboard_report->mods & shift)) {
+ send_unicode_string("ű");
+ } else {
+ send_unicode_string("Ű");
+ }
+
+ reset_tap_dance(state);
+ }
+}
+
+// Tap Dance definitions
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [TD_A] = ACTION_TAP_DANCE_FN(dance_key_a),
+ [TD_E] = ACTION_TAP_DANCE_FN(dance_key_e),
+ [TD_I] = ACTION_TAP_DANCE_FN(dance_key_i),
+ [TD_O] = ACTION_TAP_DANCE_FN(dance_key_o),
+ [TD_U] = ACTION_TAP_DANCE_FN(dance_key_u),
+};
+
+// Tap Dance keys
+#define C_KC_A TD(TD_A)
+#define C_KC_E TD(TD_E)
+#define C_KC_I TD(TD_I)
+#define C_KC_O TD(TD_O)
+#define C_KC_U TD(TD_U)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = LAYOUT_ortho_5x12(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, C_KC_E, KC_R, KC_T, KC_Y, C_KC_U, C_KC_I, C_KC_O, KC_P, KC_DEL,
+ KC_ESC, C_KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
+ BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | R | S | T | D | H | N | E | I | O | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = LAYOUT_ortho_5x12(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_DEL,
+ KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
+ BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+/* Dvorak
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | " | , | . | P | Y | F | G | C | R | L | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | O | E | U | I | D | H | T | N | S | / |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DVORAK] = LAYOUT_ortho_5x12(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_DEL,
+ KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH,
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT,
+ BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | BTN1 | BTN2 | | MS_L | MS_D | MS_U | MS_R |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_ortho_5x12(
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),KC_HOME, KC_END, _______,
+ _______, _______, _______, _______, _______, KC_BTN1, KC_BTN2, _______, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_ortho_5x12(
+ 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_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_LSFT, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | |Reset |Debug | | | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | |Mu mod|Aud on|AudOff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | NKRO | Swap |Un swp| | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_ortho_5x12(
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ _______, RESET, DEBUG, _______, _______, _______, _______, TERM_ON, TERM_OFF,_______, _______, KC_DEL,
+ _______, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______,
+ _______, _______, _______, _______, _______, _______, NK_TOGG, LCG_SWP, LCG_NRM, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+)
+
+};
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
+
+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;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_COLEMAK);
+ }
+ return false;
+ break;
+ case DVORAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_DVORAK);
+ }
+ return false;
+ break;
+ case BACKLIT:
+ if (record->event.pressed) {
+ register_code(keycode_config(KC_LGUI));
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ } else {
+ unregister_code(keycode_config(KC_LGUI));
+ }
+ return false;
+ break;
+ }
+ return true;
+};
diff --git a/keyboards/handwired/riblee_f401/keymaps/riblee/readme.md b/keyboards/handwired/riblee_f401/keymaps/riblee/readme.md
new file mode 100644
index 000000000..1045c9881
--- /dev/null
+++ b/keyboards/handwired/riblee_f401/keymaps/riblee/readme.md
@@ -0,0 +1,85 @@
+# Riblee preonic
+
+This layout is modified to support accent Hungarian keys via Unicode and Tap Dance
+
+```
+
+Qwerty
+,-----------------------------------------------------------------------------------.
+| ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| Tab | Q | W | E | R | T | Y | U | I | O | P | Del |
+|------+------+------+------+------+-------------+------+------+------+------+------|
+| Esc | A | S | D | F | G | H | J | K | L | ; | " |
+|------+------+------+------+------+------|------+------+------+------+------+------|
+| Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| Brite| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
+`-----------------------------------------------------------------------------------'
+
+Colemak
+,-----------------------------------------------------------------------------------.
+| ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| Tab | Q | W | F | P | G | J | L | U | Y | ; | Del |
+|------+------+------+------+------+-------------+------+------+------+------+------|
+| Esc | A | R | S | T | D | H | N | E | I | O | " |
+|------+------+------+------+------+------|------+------+------+------+------+------|
+| Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+`-----------------------------------------------------------------------------------'
+
+Dvorak
+,-----------------------------------------------------------------------------------.
+| ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| Tab | " | , | . | P | Y | F | G | C | R | L | Del |
+|------+------+------+------+------+-------------+------+------+------+------+------|
+| Esc | A | O | E | U | I | D | H | T | N | S | / |
+|------+------+------+------+------+------|------+------+------+------+------+------|
+| Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+`-----------------------------------------------------------------------------------'
+
+Lower
+,-----------------------------------------------------------------------------------.
+| ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+|------+------+------+------+------+-------------+------+------+------+------+------|
+| ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del |
+|------+------+------+------+------+-------------+------+------+------+------+------|
+| Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+|------+------+------+------+------+------|------+------+------+------+------+------|
+| | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | | |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| | | | | | BTN1 | BTN2 | | MS_L | MS_D | MS_U | MS_R |
+`-----------------------------------------------------------------------------------'
+
+Raise
+,-----------------------------------------------------------------------------------.
+| ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
+|------+------+------+------+------+-------------+------+------+------+------+------|
+| Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
+|------+------+------+------+------+------|------+------+------+------+------+------|
+| Shift| F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | | |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| | | | | | | | Next | Vol- | Vol+ | Play |
+`-----------------------------------------------------------------------------------'
+
+Adjust (Lower + Raise)
+,-----------------------------------------------------------------------------------.
+| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| |Reset |Debug | | | | | | | | | Del |
+|------+------+------+------+------+-------------+------+------+------+------+------|
+| | |Mu mod|Aud on|AudOff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
+|------+------+------+------+------+------|------+------+------+------+------+------|
+| | | | | | | NKRO | Swap |Un swp| | | |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| | | | | | | | | | | |
+`-----------------------------------------------------------------------------------'
+
+``` \ No newline at end of file
diff --git a/keyboards/handwired/riblee_f401/keymaps/riblee/rules.mk b/keyboards/handwired/riblee_f401/keymaps/riblee/rules.mk
new file mode 100644
index 000000000..517f2700e
--- /dev/null
+++ b/keyboards/handwired/riblee_f401/keymaps/riblee/rules.mk
@@ -0,0 +1,2 @@
+UNICODE_ENABLE = yes
+TAP_DANCE_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/handwired/riblee_f401/rules.mk b/keyboards/handwired/riblee_f401/rules.mk
index eab426a37..bd4592d50 100644
--- a/keyboards/handwired/riblee_f401/rules.mk
+++ b/keyboards/handwired/riblee_f401/rules.mk
@@ -1,35 +1,13 @@
-## chip/board settings
-# the next two should match the directories in
-# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
-MCU_FAMILY = STM32
-MCU_SERIES = STM32F4xx
-# linker script to use
-# it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
-# or <this_dir>/ld/
-MCU_LDSCRIPT = STM32F401xC
-# startup code to use
-# is should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f4xx
-# it should exist either in <chibios>/os/hal/boards/
-# or <this_dir>/boards
-BOARD = BLACKPILL_STM32_F401
-# Cortex version
-# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
-MCU = cortex-m4
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 7
-USE_FPU = yes
-# Address of the booloader in system memory
-STM32_BOOTLOADER_ADDRESS = 0x1FFF0000
+# MCU name
+MCU = STM32F401
-# Options to pass to dfu-util when flashing
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-DFU_SUFFIX_ARGS = -v 0483 -p df11
+# Address of the bootloader in system memory
+STM32_BOOTLOADER_ADDRESS = 0x1FFF0000
# Build Options
# change yes to no to disable
#
-BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
+BOOTMAGIC_ENABLE = full # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
KEYBOARD_SHARED_EP = yes
@@ -38,9 +16,9 @@ COMMAND_ENABLE = no # Commands for debug and configuration
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-NKRO_ENABLE = no # USB Nkey Rollover
+NKRO_ENABLE = yes # USB Nkey Rollover
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
BACKLIGHT_DRIVER = software
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
BLUETOOTH_ENABLE = no # Enable Bluetooth
-AUDIO_ENABLE = no # Audio output \ No newline at end of file
+AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/handwired/swiftrax/retropad/config.h b/keyboards/handwired/swiftrax/retropad/config.h
new file mode 100644
index 000000000..e604eda41
--- /dev/null
+++ b/keyboards/handwired/swiftrax/retropad/config.h
@@ -0,0 +1,64 @@
+/*
+Copyright 2020 Swiftrax <swiftrax@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 "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x04D8
+#define PRODUCT_ID 0xEB0C
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Swiftrax
+#define PRODUCT Retropad
+
+/* key matrix size */
+#define MATRIX_ROWS 3
+#define MATRIX_COLS 2
+
+// ROWS: Top to bottom, COLS: Left to right
+
+#define MATRIX_ROW_PINS { C7, C6, B5 }
+#define MATRIX_COL_PINS { B4, D2 }
+
+#define ENCODERS_PAD_A { D0 }
+#define ENCODERS_PAD_B { D1 }
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+#define RGB_DI_PIN B7
+#ifdef RGB_DI_PIN
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 6
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#endif
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
+
+/*EEPROM for via*/
+#define DYNAMIC_KEYMAP_LAYER_COUNT 3
+
+/* bootmagic row col assignment */
+#define BOOTMAGIC_LITE_ROW 1
+#define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/handwired/swiftrax/retropad/info.json b/keyboards/handwired/swiftrax/retropad/info.json
new file mode 100644
index 000000000..9637c7b3f
--- /dev/null
+++ b/keyboards/handwired/swiftrax/retropad/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "Retropad",
+ "url": "https://github.com/swiftrax",
+ "maintainer": "swiftrax",
+ "width": 2,
+ "height": 3.5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"label":"0,1", "x":0.5, "y":0}, {"label":"1,0", "x":0, "y":1.5}, {"label":"1,1", "x":1, "y":1.5}, {"label":"2,0", "x":0, "y":2.5}, {"label":"2,1", "x":1, "y":2.5}]
+ }
+ }
+} \ No newline at end of file
diff --git a/keyboards/handwired/swiftrax/retropad/keymaps/default/keymap.c b/keyboards/handwired/swiftrax/retropad/keymaps/default/keymap.c
new file mode 100644
index 000000000..8b9992e1d
--- /dev/null
+++ b/keyboards/handwired/swiftrax/retropad/keymaps/default/keymap.c
@@ -0,0 +1,69 @@
+ /* Copyright 2020 swiftrax
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[0] = LAYOUT(
+ TO(1), //windows
+ KC_MSTP, KC_MPLY,
+ KC_MPRV, KC_MNXT),
+
+[1] = LAYOUT( //macOS
+ TO(2),
+ KC_MSTP, KC_MPLY,
+ KC_MRWD, KC_MFFD),
+
+[2] = LAYOUT(
+ TO(0),
+ KC_HOME, KC_PGUP,
+ KC_END, KC_PGDN),
+};
+
+void encoder_update_user(uint8_t index, bool clockwise) {
+ if(IS_LAYER_ON(2)){
+ if (clockwise)
+ tap_code(KC_LEFT);
+ else
+ tap_code(KC_RGHT);
+ }
+ else{
+ if(clockwise)
+ tap_code(KC_VOLU);
+ else
+ tap_code(KC_VOLD);
+ }
+}
+
+void matrix_init_user(void) {
+ // set top LED to output and off (active low)
+ setPinOutput(D5);
+ writePinHigh(D5);
+ // set middle LED to output and off (active low)
+ setPinOutput(D4);
+ writePinHigh(D4);
+ // set bottom LED to output and off (active low)
+ setPinOutput(D3);
+ writePinHigh(D3);
+}
+
+// write to above indicators in a binary fashion based on current layer
+layer_state_t layer_state_set_user(layer_state_t state) {
+ writePin(D5, get_highest_layer(state));
+ writePin(D4, !layer_state_cmp(state, 1));
+ writePin(D3, !layer_state_cmp(state, 2));
+ return state;
+} \ No newline at end of file
diff --git a/keyboards/handwired/swiftrax/retropad/keymaps/via/keymap.c b/keyboards/handwired/swiftrax/retropad/keymaps/via/keymap.c
new file mode 100644
index 000000000..8b9992e1d
--- /dev/null
+++ b/keyboards/handwired/swiftrax/retropad/keymaps/via/keymap.c
@@ -0,0 +1,69 @@
+ /* Copyright 2020 swiftrax
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[0] = LAYOUT(
+ TO(1), //windows
+ KC_MSTP, KC_MPLY,
+ KC_MPRV, KC_MNXT),
+
+[1] = LAYOUT( //macOS
+ TO(2),
+ KC_MSTP, KC_MPLY,
+ KC_MRWD, KC_MFFD),
+
+[2] = LAYOUT(
+ TO(0),
+ KC_HOME, KC_PGUP,
+ KC_END, KC_PGDN),
+};
+
+void encoder_update_user(uint8_t index, bool clockwise) {
+ if(IS_LAYER_ON(2)){
+ if (clockwise)
+ tap_code(KC_LEFT);
+ else
+ tap_code(KC_RGHT);
+ }
+ else{
+ if(clockwise)
+ tap_code(KC_VOLU);
+ else
+ tap_code(KC_VOLD);
+ }
+}
+
+void matrix_init_user(void) {
+ // set top LED to output and off (active low)
+ setPinOutput(D5);
+ writePinHigh(D5);
+ // set middle LED to output and off (active low)
+ setPinOutput(D4);
+ writePinHigh(D4);
+ // set bottom LED to output and off (active low)
+ setPinOutput(D3);
+ writePinHigh(D3);
+}
+
+// write to above indicators in a binary fashion based on current layer
+layer_state_t layer_state_set_user(layer_state_t state) {
+ writePin(D5, get_highest_layer(state));
+ writePin(D4, !layer_state_cmp(state, 1));
+ writePin(D3, !layer_state_cmp(state, 2));
+ return state;
+} \ No newline at end of file
diff --git a/keyboards/handwired/swiftrax/retropad/keymaps/via/rules.mk b/keyboards/handwired/swiftrax/retropad/keymaps/via/rules.mk
new file mode 100644
index 000000000..036bd6d1c
--- /dev/null
+++ b/keyboards/handwired/swiftrax/retropad/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/handwired/swiftrax/retropad/readme.md b/keyboards/handwired/swiftrax/retropad/readme.md
new file mode 100644
index 000000000..5dd2e2dff
--- /dev/null
+++ b/keyboards/handwired/swiftrax/retropad/readme.md
@@ -0,0 +1,13 @@
+# Retropad
+
+2x2 macro pad with a rotary encoder
+
+* Keyboard Maintainer: Swiftrax
+* Hardware Supported: Retropad PCB
+* Hardware Availability: https://github.com/swiftrax
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/swiftrax/retropad:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/handwired/swiftrax/retropad/retropad.c b/keyboards/handwired/swiftrax/retropad/retropad.c
new file mode 100644
index 000000000..3ffe29528
--- /dev/null
+++ b/keyboards/handwired/swiftrax/retropad/retropad.c
@@ -0,0 +1,16 @@
+/* Copyright 2020 swiftrax
+ *
+ * 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 "retropad.h" \ No newline at end of file
diff --git a/keyboards/handwired/swiftrax/retropad/retropad.h b/keyboards/handwired/swiftrax/retropad/retropad.h
new file mode 100644
index 000000000..e7527d5c0
--- /dev/null
+++ b/keyboards/handwired/swiftrax/retropad/retropad.h
@@ -0,0 +1,31 @@
+/* Copyright 2020 swiftrax
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#pragma once
+
+#include "quantum.h"
+
+// readability
+#define XXX KC_NO
+
+#define LAYOUT( \
+ K001, \
+ K100, K101, \
+ K200, K201 \
+) { \
+ { XXX, K001, }, \
+ { K100, K101, }, \
+ { K200, K201, } \
+}
diff --git a/keyboards/handwired/swiftrax/retropad/rules.mk b/keyboards/handwired/swiftrax/retropad/rules.mk
new file mode 100644
index 000000000..8771c701d
--- /dev/null
+++ b/keyboards/handwired/swiftrax/retropad/rules.mk
@@ -0,0 +1,23 @@
+# MCU name
+MCU = atmega32u2
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
+ENCODER_ENABLE = yes
diff --git a/keyboards/handwired/t111/chconf.h b/keyboards/handwired/t111/chconf.h
new file mode 100644
index 000000000..f5e471640
--- /dev/null
+++ b/keyboards/handwired/t111/chconf.h
@@ -0,0 +1,714 @@
+/*
+ ChibiOS - Copyright (C) 2006..2018 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.
+*/
+
+/**
+ * @file rt/templates/chconf.h
+ * @brief Configuration file template.
+ * @details A copy of this file must be placed in each project directory, it
+ * contains the application specific kernel settings.
+ *
+ * @addtogroup config
+ * @details Kernel related settings and hooks.
+ * @{
+ */
+
+#ifndef CHCONF_H
+#define CHCONF_H
+
+#define _CHIBIOS_RT_CONF_
+#define _CHIBIOS_RT_CONF_VER_6_0_
+
+/*===========================================================================*/
+/**
+ * @name System timers settings
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief System time counter resolution.
+ * @note Allowed values are 16 or 32 bits.
+ */
+#if !defined(CH_CFG_ST_RESOLUTION)
+#define CH_CFG_ST_RESOLUTION 32
+#endif
+
+/**
+ * @brief System tick frequency.
+ * @details Frequency of the system timer that drives the system ticks. This
+ * setting also defines the system tick time unit.
+ */
+#if !defined(CH_CFG_ST_FREQUENCY)
+#define CH_CFG_ST_FREQUENCY 100000
+#endif
+
+/**
+ * @brief Time intervals data size.
+ * @note Allowed values are 16, 32 or 64 bits.
+ */
+#if !defined(CH_CFG_INTERVALS_SIZE)
+#define CH_CFG_INTERVALS_SIZE 32
+#endif
+
+/**
+ * @brief Time types data size.
+ * @note Allowed values are 16 or 32 bits.
+ */
+#if !defined(CH_CFG_TIME_TYPES_SIZE)
+#define CH_CFG_TIME_TYPES_SIZE 32
+#endif
+
+/**
+ * @brief Time delta constant for the tick-less mode.
+ * @note If this value is zero then the system uses the classic
+ * periodic tick. This value represents the minimum number
+ * of ticks that is safe to specify in a timeout directive.
+ * The value one is not valid, timeouts are rounded up to
+ * this value.
+ */
+#if !defined(CH_CFG_ST_TIMEDELTA)
+#define CH_CFG_ST_TIMEDELTA 0
+#endif
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Kernel parameters and options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Round robin interval.
+ * @details This constant is the number of system ticks allowed for the
+ * threads before preemption occurs. Setting this value to zero
+ * disables the preemption for threads with equal priority and the
+ * round robin becomes cooperative. Note that higher priority
+ * threads can still preempt, the kernel is always preemptive.
+ * @note Disabling the round robin preemption makes the kernel more compact
+ * and generally faster.
+ * @note The round robin preemption is not supported in tickless mode and
+ * must be set to zero in that case.
+ */
+#if !defined(CH_CFG_TIME_QUANTUM)
+#define CH_CFG_TIME_QUANTUM 0
+#endif
+
+/**
+ * @brief Managed RAM size.
+ * @details Size of the RAM area to be managed by the OS. If set to zero
+ * then the whole available RAM is used. The core memory is made
+ * available to the heap allocator and/or can be used directly through
+ * the simplified core memory allocator.
+ *
+ * @note In order to let the OS manage the whole RAM the linker script must
+ * provide the @p __heap_base__ and @p __heap_end__ symbols.
+ * @note Requires @p CH_CFG_USE_MEMCORE.
+ */
+#if !defined(CH_CFG_MEMCORE_SIZE)
+#define CH_CFG_MEMCORE_SIZE 0
+#endif
+
+/**
+ * @brief Idle thread automatic spawn suppression.
+ * @details When this option is activated the function @p chSysInit()
+ * does not spawn the idle thread. The application @p main()
+ * function becomes the idle thread and must implement an
+ * infinite loop.
+ */
+#if !defined(CH_CFG_NO_IDLE_THREAD)
+#define CH_CFG_NO_IDLE_THREAD FALSE
+#endif
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Performance options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief OS optimization.
+ * @details If enabled then time efficient rather than space efficient code
+ * is used when two possible implementations exist.
+ *
+ * @note This is not related to the compiler optimization options.
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_OPTIMIZE_SPEED)
+#define CH_CFG_OPTIMIZE_SPEED TRUE
+#endif
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Subsystem options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Time Measurement APIs.
+ * @details If enabled then the time measurement APIs are included in
+ * the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_TM)
+#define CH_CFG_USE_TM FALSE
+#endif
+
+/**
+ * @brief Threads registry APIs.
+ * @details If enabled then the registry APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_REGISTRY)
+#define CH_CFG_USE_REGISTRY TRUE
+#endif
+
+/**
+ * @brief Threads synchronization APIs.
+ * @details If enabled then the @p chThdWait() function is included in
+ * the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_WAITEXIT)
+#define CH_CFG_USE_WAITEXIT TRUE
+#endif
+
+/**
+ * @brief Semaphores APIs.
+ * @details If enabled then the Semaphores APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_SEMAPHORES)
+#define CH_CFG_USE_SEMAPHORES TRUE
+#endif
+
+/**
+ * @brief Semaphores queuing mode.
+ * @details If enabled then the threads are enqueued on semaphores by
+ * priority rather than in FIFO order.
+ *
+ * @note The default is @p FALSE. Enable this if you have special
+ * requirements.
+ * @note Requires @p CH_CFG_USE_SEMAPHORES.
+ */
+#if !defined(CH_CFG_USE_SEMAPHORES_PRIORITY)
+#define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE
+#endif
+
+/**
+ * @brief Mutexes APIs.
+ * @details If enabled then the mutexes APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_MUTEXES)
+#define CH_CFG_USE_MUTEXES TRUE
+#endif
+
+/**
+ * @brief Enables recursive behavior on mutexes.
+ * @note Recursive mutexes are heavier and have an increased
+ * memory footprint.
+ *
+ * @note The default is @p FALSE.
+ * @note Requires @p CH_CFG_USE_MUTEXES.
+ */
+#if !defined(CH_CFG_USE_MUTEXES_RECURSIVE)
+#define CH_CFG_USE_MUTEXES_RECURSIVE FALSE
+#endif
+
+/**
+ * @brief Conditional Variables APIs.
+ * @details If enabled then the conditional variables APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_MUTEXES.
+ */
+#if !defined(CH_CFG_USE_CONDVARS)
+#define CH_CFG_USE_CONDVARS TRUE
+#endif
+
+/**
+ * @brief Conditional Variables APIs with timeout.
+ * @details If enabled then the conditional variables APIs with timeout
+ * specification are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_CONDVARS.
+ */
+#if !defined(CH_CFG_USE_CONDVARS_TIMEOUT)
+#define CH_CFG_USE_CONDVARS_TIMEOUT FALSE
+#endif
+
+/**
+ * @brief Events Flags APIs.
+ * @details If enabled then the event flags APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_EVENTS)
+#define CH_CFG_USE_EVENTS TRUE
+#endif
+
+/**
+ * @brief Events Flags APIs with timeout.
+ * @details If enabled then the events APIs with timeout specification
+ * are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_EVENTS.
+ */
+#if !defined(CH_CFG_USE_EVENTS_TIMEOUT)
+#define CH_CFG_USE_EVENTS_TIMEOUT TRUE
+#endif
+
+/**
+ * @brief Synchronous Messages APIs.
+ * @details If enabled then the synchronous messages APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_MESSAGES)
+#define CH_CFG_USE_MESSAGES TRUE
+#endif
+
+/**
+ * @brief Synchronous Messages queuing mode.
+ * @details If enabled then messages are served by priority rather than in
+ * FIFO order.
+ *
+ * @note The default is @p FALSE. Enable this if you have special
+ * requirements.
+ * @note Requires @p CH_CFG_USE_MESSAGES.
+ */
+#if !defined(CH_CFG_USE_MESSAGES_PRIORITY)
+#define CH_CFG_USE_MESSAGES_PRIORITY FALSE
+#endif
+
+/**
+ * @brief Mailboxes APIs.
+ * @details If enabled then the asynchronous messages (mailboxes) APIs are
+ * included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_SEMAPHORES.
+ */
+#if !defined(CH_CFG_USE_MAILBOXES)
+#define CH_CFG_USE_MAILBOXES TRUE
+#endif
+
+/**
+ * @brief Core Memory Manager APIs.
+ * @details If enabled then the core memory manager APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_MEMCORE)
+#define CH_CFG_USE_MEMCORE TRUE
+#endif
+
+/**
+ * @brief Heap Allocator APIs.
+ * @details If enabled then the memory heap allocator APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or
+ * @p CH_CFG_USE_SEMAPHORES.
+ * @note Mutexes are recommended.
+ */
+#if !defined(CH_CFG_USE_HEAP)
+#define CH_CFG_USE_HEAP TRUE
+#endif
+
+/**
+ * @brief Memory Pools Allocator APIs.
+ * @details If enabled then the memory pools allocator APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_MEMPOOLS)
+#define CH_CFG_USE_MEMPOOLS FALSE
+#endif
+
+/**
+ * @brief Objects FIFOs APIs.
+ * @details If enabled then the objects FIFOs APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_OBJ_FIFOS)
+#define CH_CFG_USE_OBJ_FIFOS FALSE
+#endif
+
+/**
+ * @brief Pipes APIs.
+ * @details If enabled then the pipes APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_PIPES)
+#define CH_CFG_USE_PIPES FALSE
+#endif
+
+/**
+ * @brief Dynamic Threads APIs.
+ * @details If enabled then the dynamic threads creation APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_WAITEXIT.
+ * @note Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS.
+ */
+#if !defined(CH_CFG_USE_DYNAMIC)
+#define CH_CFG_USE_DYNAMIC FALSE
+#endif
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Objects factory options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Objects Factory APIs.
+ * @details If enabled then the objects factory APIs are included in the
+ * kernel.
+ *
+ * @note The default is @p FALSE.
+ */
+#if !defined(CH_CFG_USE_FACTORY)
+#define CH_CFG_USE_FACTORY FALSE
+#endif
+
+/**
+ * @brief Maximum length for object names.
+ * @details If the specified length is zero then the name is stored by
+ * pointer but this could have unintended side effects.
+ */
+#if !defined(CH_CFG_FACTORY_MAX_NAMES_LENGTH)
+#define CH_CFG_FACTORY_MAX_NAMES_LENGTH 8
+#endif
+
+/**
+ * @brief Enables the registry of generic objects.
+ */
+#if !defined(CH_CFG_FACTORY_OBJECTS_REGISTRY)
+#define CH_CFG_FACTORY_OBJECTS_REGISTRY FALSE
+#endif
+
+/**
+ * @brief Enables factory for generic buffers.
+ */
+#if !defined(CH_CFG_FACTORY_GENERIC_BUFFERS)
+#define CH_CFG_FACTORY_GENERIC_BUFFERS FALSE
+#endif
+
+/**
+ * @brief Enables factory for semaphores.
+ */
+#if !defined(CH_CFG_FACTORY_SEMAPHORES)
+#define CH_CFG_FACTORY_SEMAPHORES FALSE
+#endif
+
+/**
+ * @brief Enables factory for mailboxes.
+ */
+#if !defined(CH_CFG_FACTORY_MAILBOXES)
+#define CH_CFG_FACTORY_MAILBOXES FALSE
+#endif
+
+/**
+ * @brief Enables factory for objects FIFOs.
+ */
+#if !defined(CH_CFG_FACTORY_OBJ_FIFOS)
+#define CH_CFG_FACTORY_OBJ_FIFOS FALSE
+#endif
+
+/**
+ * @brief Enables factory for Pipes.
+ */
+#if !defined(CH_CFG_FACTORY_PIPES) || defined(__DOXYGEN__)
+#define CH_CFG_FACTORY_PIPES FALSE
+#endif
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Debug options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Debug option, kernel statistics.
+ *
+ * @note The default is @p FALSE.
+ */
+#if !defined(CH_DBG_STATISTICS)
+#define CH_DBG_STATISTICS FALSE
+#endif
+
+/**
+ * @brief Debug option, system state check.
+ * @details If enabled the correct call protocol for system APIs is checked
+ * at runtime.
+ *
+ * @note The default is @p FALSE.
+ */
+#if !defined(CH_DBG_SYSTEM_STATE_CHECK)
+#define CH_DBG_SYSTEM_STATE_CHECK FALSE
+#endif
+
+/**
+ * @brief Debug option, parameters checks.
+ * @details If enabled then the checks on the API functions input
+ * parameters are activated.
+ *
+ * @note The default is @p FALSE.
+ */
+#if !defined(CH_DBG_ENABLE_CHECKS)
+#define CH_DBG_ENABLE_CHECKS FALSE
+#endif
+
+/**
+ * @brief Debug option, consistency checks.
+ * @details If enabled then all the assertions in the kernel code are
+ * activated. This includes consistency checks inside the kernel,
+ * runtime anomalies and port-defined checks.
+ *
+ * @note The default is @p FALSE.
+ */
+#if !defined(CH_DBG_ENABLE_ASSERTS)
+#define CH_DBG_ENABLE_ASSERTS FALSE
+#endif
+
+/**
+ * @brief Debug option, trace buffer.
+ * @details If enabled then the trace buffer is activated.
+ *
+ * @note The default is @p CH_DBG_TRACE_MASK_DISABLED.
+ */
+#if !defined(CH_DBG_TRACE_MASK)
+#define CH_DBG_TRACE_MASK CH_DBG_TRACE_MASK_DISABLED
+#endif
+
+/**
+ * @brief Trace buffer entries.
+ * @note The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is
+ * different from @p CH_DBG_TRACE_MASK_DISABLED.
+ */
+#if !defined(CH_DBG_TRACE_BUFFER_SIZE)
+#define CH_DBG_TRACE_BUFFER_SIZE 128
+#endif
+
+/**
+ * @brief Debug option, stack checks.
+ * @details If enabled then a runtime stack check is performed.
+ *
+ * @note The default is @p FALSE.
+ * @note The stack check is performed in a architecture/port dependent way.
+ * It may not be implemented or some ports.
+ * @note The default failure mode is to halt the system with the global
+ * @p panic_msg variable set to @p NULL.
+ */
+#if !defined(CH_DBG_ENABLE_STACK_CHECK)
+#define CH_DBG_ENABLE_STACK_CHECK FALSE
+#endif
+
+/**
+ * @brief Debug option, stacks initialization.
+ * @details If enabled then the threads working area is filled with a byte
+ * value when a thread is created. This can be useful for the
+ * runtime measurement of the used stack.
+ *
+ * @note The default is @p FALSE.
+ */
+#if !defined(CH_DBG_FILL_THREADS)
+#define CH_DBG_FILL_THREADS FALSE
+#endif
+
+/**
+ * @brief Debug option, threads profiling.
+ * @details If enabled then a field is added to the @p thread_t structure that
+ * counts the system ticks occurred while executing the thread.
+ *
+ * @note The default is @p FALSE.
+ * @note This debug option is not currently compatible with the
+ * tickless mode.
+ */
+#if !defined(CH_DBG_THREADS_PROFILING)
+#define CH_DBG_THREADS_PROFILING FALSE
+#endif
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Kernel hooks
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief System structure extension.
+ * @details User fields added to the end of the @p ch_system_t structure.
+ */
+#define CH_CFG_SYSTEM_EXTRA_FIELDS \
+ /* Add threads custom fields here.*/
+
+/**
+ * @brief System initialization hook.
+ * @details User initialization code added to the @p chSysInit() function
+ * just before interrupts are enabled globally.
+ */
+#define CH_CFG_SYSTEM_INIT_HOOK() { \
+ /* Add threads initialization code here.*/ \
+}
+
+/**
+ * @brief Threads descriptor structure extension.
+ * @details User fields added to the end of the @p thread_t structure.
+ */
+#define CH_CFG_THREAD_EXTRA_FIELDS \
+ /* Add threads custom fields here.*/
+
+/**
+ * @brief Threads initialization hook.
+ * @details User initialization code added to the @p _thread_init() function.
+ *
+ * @note It is invoked from within @p _thread_init() and implicitly from all
+ * the threads creation APIs.
+ */
+#define CH_CFG_THREAD_INIT_HOOK(tp) { \
+ /* Add threads initialization code here.*/ \
+}
+
+/**
+ * @brief Threads finalization hook.
+ * @details User finalization code added to the @p chThdExit() API.
+ */
+#define CH_CFG_THREAD_EXIT_HOOK(tp) { \
+ /* Add threads finalization code here.*/ \
+}
+
+/**
+ * @brief Context switch hook.
+ * @details This hook is invoked just before switching between threads.
+ */
+#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) { \
+ /* Context switch code here.*/ \
+}
+
+/**
+ * @brief ISR enter hook.
+ */
+#define CH_CFG_IRQ_PROLOGUE_HOOK() { \
+ /* IRQ prologue code here.*/ \
+}
+
+/**
+ * @brief ISR exit hook.
+ */
+#define CH_CFG_IRQ_EPILOGUE_HOOK() { \
+ /* IRQ epilogue code here.*/ \
+}
+
+/**
+ * @brief Idle thread enter hook.
+ * @note This hook is invoked within a critical zone, no OS functions
+ * should be invoked from here.
+ * @note This macro can be used to activate a power saving mode.
+ */
+#define CH_CFG_IDLE_ENTER_HOOK() { \
+ /* Idle-enter code here.*/ \
+}
+
+/**
+ * @brief Idle thread leave hook.
+ * @note This hook is invoked within a critical zone, no OS functions
+ * should be invoked from here.
+ * @note This macro can be used to deactivate a power saving mode.
+ */
+#define CH_CFG_IDLE_LEAVE_HOOK() { \
+ /* Idle-leave code here.*/ \
+}
+
+/**
+ * @brief Idle Loop hook.
+ * @details This hook is continuously invoked by the idle thread loop.
+ */
+#define CH_CFG_IDLE_LOOP_HOOK() { \
+ /* Idle loop code here.*/ \
+}
+
+/**
+ * @brief System tick event hook.
+ * @details This hook is invoked in the system tick handler immediately
+ * after processing the virtual timers queue.
+ */
+#define CH_CFG_SYSTEM_TICK_HOOK() { \
+ /* System tick event code here.*/ \
+}
+
+/**
+ * @brief System halt hook.
+ * @details This hook is invoked in case to a system halting error before
+ * the system is halted.
+ */
+#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \
+ /* System halt code here.*/ \
+}
+
+/**
+ * @brief Trace hook.
+ * @details This hook is invoked each time a new record is written in the
+ * trace buffer.
+ */
+#define CH_CFG_TRACE_HOOK(tep) { \
+ /* Trace code here.*/ \
+}
+
+/** @} */
+
+/*===========================================================================*/
+/* Port-specific settings (override port settings defaulted in chcore.h). */
+/*===========================================================================*/
+
+#endif /* CHCONF_H */
+
+/** @} */
diff --git a/keyboards/handwired/t111/config.h b/keyboards/handwired/t111/config.h
new file mode 100644
index 000000000..e459e7659
--- /dev/null
+++ b/keyboards/handwired/t111/config.h
@@ -0,0 +1,92 @@
+/*
+Copyright 2020 DmNosachev
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6FAA
+#define DEVICE_VER 0x0001
+#define MANUFACTURER FUJITSU
+#define PRODUCT T111
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 14
+
+#define MATRIX_ROW_PINS { A15, B6, B5, B4, B3, B9, B8, B7 }
+/* 0 1 2 3 4 5 6 7*/
+#define MATRIX_COL_PINS { B15, B11, B10, B1, B0, A10, A9, A7, A6, A5, A4, A8, B13, B14 }
+/* 0 1 2 3 4 5 6 7 8 9 A B C D*/
+
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL */
+#define DIODE_DIRECTION ROW2COL
+
+/* 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
+
+/*
+ * 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/handwired/t111/halconf.h b/keyboards/handwired/t111/halconf.h
new file mode 100644
index 000000000..ff5ae7e8a
--- /dev/null
+++ b/keyboards/handwired/t111/halconf.h
@@ -0,0 +1,525 @@
+/*
+ ChibiOS - Copyright (C) 2006..2018 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.
+*/
+
+/**
+ * @file templates/halconf.h
+ * @brief HAL configuration header.
+ * @details HAL configuration file, this file allows to enable or disable the
+ * various device drivers from your application. You may also use
+ * this file in order to override the device drivers default settings.
+ *
+ * @addtogroup HAL_CONF
+ * @{
+ */
+
+#ifndef HALCONF_H
+#define HALCONF_H
+
+#define _CHIBIOS_HAL_CONF_
+#define _CHIBIOS_HAL_CONF_VER_7_0_
+
+#include "mcuconf.h"
+
+/**
+ * @brief Enables the PAL subsystem.
+ */
+#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
+#define HAL_USE_PAL TRUE
+#endif
+
+/**
+ * @brief Enables the ADC subsystem.
+ */
+#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
+#define HAL_USE_ADC FALSE
+#endif
+
+/**
+ * @brief Enables the CAN subsystem.
+ */
+#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
+#define HAL_USE_CAN FALSE
+#endif
+
+/**
+ * @brief Enables the cryptographic subsystem.
+ */
+#if !defined(HAL_USE_CRY) || defined(__DOXYGEN__)
+#define HAL_USE_CRY FALSE
+#endif
+
+/**
+ * @brief Enables the DAC subsystem.
+ */
+#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__)
+#define HAL_USE_DAC FALSE
+#endif
+
+/**
+ * @brief Enables the GPT subsystem.
+ */
+#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
+#define HAL_USE_GPT FALSE
+#endif
+
+/**
+ * @brief Enables the I2C subsystem.
+ */
+#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
+#define HAL_USE_I2C FALSE
+#endif
+
+/**
+ * @brief Enables the I2S subsystem.
+ */
+#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__)
+#define HAL_USE_I2S FALSE
+#endif
+
+/**
+ * @brief Enables the ICU subsystem.
+ */
+#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
+#define HAL_USE_ICU FALSE
+#endif
+
+/**
+ * @brief Enables the MAC subsystem.
+ */
+#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
+#define HAL_USE_MAC FALSE
+#endif
+
+/**
+ * @brief Enables the MMC_SPI subsystem.
+ */
+#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
+#define HAL_USE_MMC_SPI FALSE
+#endif
+
+/**
+ * @brief Enables the PWM subsystem.
+ */
+#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
+#define HAL_USE_PWM TRUE
+#endif
+
+/**
+ * @brief Enables the RTC subsystem.
+ */
+#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
+#define HAL_USE_RTC FALSE
+#endif
+
+/**
+ * @brief Enables the SDC subsystem.
+ */
+#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
+#define HAL_USE_SDC FALSE
+#endif
+
+/**
+ * @brief Enables the SERIAL subsystem.
+ */
+#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
+#define HAL_USE_SERIAL FALSE
+#endif
+
+/**
+ * @brief Enables the SERIAL over USB subsystem.
+ */
+#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
+#define HAL_USE_SERIAL_USB FALSE
+#endif
+
+/**
+ * @brief Enables the SIO subsystem.
+ */
+#if !defined(HAL_USE_SIO) || defined(__DOXYGEN__)
+#define HAL_USE_SIO FALSE
+#endif
+
+/**
+ * @brief Enables the SPI subsystem.
+ */
+#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
+#define HAL_USE_SPI FALSE
+#endif
+
+/**
+ * @brief Enables the TRNG subsystem.
+ */
+#if !defined(HAL_USE_TRNG) || defined(__DOXYGEN__)
+#define HAL_USE_TRNG FALSE
+#endif
+
+/**
+ * @brief Enables the UART subsystem.
+ */
+#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
+#define HAL_USE_UART FALSE
+#endif
+
+/**
+ * @brief Enables the USB subsystem.
+ */
+#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
+#define HAL_USE_USB TRUE
+#endif
+
+/**
+ * @brief Enables the WDG subsystem.
+ */
+#if !defined(HAL_USE_WDG) || defined(__DOXYGEN__)
+#define HAL_USE_WDG FALSE
+#endif
+
+/**
+ * @brief Enables the WSPI subsystem.
+ */
+#if !defined(HAL_USE_WSPI) || defined(__DOXYGEN__)
+#define HAL_USE_WSPI FALSE
+#endif
+
+/*===========================================================================*/
+/* PAL driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(PAL_USE_CALLBACKS) || defined(__DOXYGEN__)
+#define PAL_USE_CALLBACKS FALSE
+#endif
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(PAL_USE_WAIT) || defined(__DOXYGEN__)
+#define PAL_USE_WAIT FALSE
+#endif
+
+/*===========================================================================*/
+/* ADC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__)
+#define ADC_USE_WAIT TRUE
+#endif
+
+/**
+ * @brief Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define ADC_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/*===========================================================================*/
+/* CAN driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Sleep mode related APIs inclusion switch.
+ */
+#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__)
+#define CAN_USE_SLEEP_MODE TRUE
+#endif
+
+/**
+ * @brief Enforces the driver to use direct callbacks rather than OSAL events.
+ */
+#if !defined(CAN_ENFORCE_USE_CALLBACKS) || defined(__DOXYGEN__)
+#define CAN_ENFORCE_USE_CALLBACKS FALSE
+#endif
+
+/*===========================================================================*/
+/* CRY driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables the SW fall-back of the cryptographic driver.
+ * @details When enabled, this option, activates a fall-back software
+ * implementation for algorithms not supported by the underlying
+ * hardware.
+ * @note Fall-back implementations may not be present for all algorithms.
+ */
+#if !defined(HAL_CRY_USE_FALLBACK) || defined(__DOXYGEN__)
+#define HAL_CRY_USE_FALLBACK FALSE
+#endif
+
+/**
+ * @brief Makes the driver forcibly use the fall-back implementations.
+ */
+#if !defined(HAL_CRY_ENFORCE_FALLBACK) || defined(__DOXYGEN__)
+#define HAL_CRY_ENFORCE_FALLBACK FALSE
+#endif
+
+/*===========================================================================*/
+/* DAC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(DAC_USE_WAIT) || defined(__DOXYGEN__)
+#define DAC_USE_WAIT TRUE
+#endif
+
+/**
+ * @brief Enables the @p dacAcquireBus() and @p dacReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(DAC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define DAC_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/*===========================================================================*/
+/* I2C driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables the mutual exclusion APIs on the I2C bus.
+ */
+#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define I2C_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/*===========================================================================*/
+/* MAC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables the zero-copy API.
+ */
+#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__)
+#define MAC_USE_ZERO_COPY FALSE
+#endif
+
+/**
+ * @brief Enables an event sources for incoming packets.
+ */
+#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__)
+#define MAC_USE_EVENTS TRUE
+#endif
+
+/*===========================================================================*/
+/* MMC_SPI driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Delays insertions.
+ * @details If enabled this options inserts delays into the MMC waiting
+ * routines releasing some extra CPU time for the threads with
+ * lower priority, this may slow down the driver a bit however.
+ * This option is recommended also if the SPI driver does not
+ * use a DMA channel and heavily loads the CPU.
+ */
+#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__)
+#define MMC_NICE_WAITING TRUE
+#endif
+
+/*===========================================================================*/
+/* SDC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Number of initialization attempts before rejecting the card.
+ * @note Attempts are performed at 10mS intervals.
+ */
+#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__)
+#define SDC_INIT_RETRY 100
+#endif
+
+/**
+ * @brief Include support for MMC cards.
+ * @note MMC support is not yet implemented so this option must be kept
+ * at @p FALSE.
+ */
+#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__)
+#define SDC_MMC_SUPPORT FALSE
+#endif
+
+/**
+ * @brief Delays insertions.
+ * @details If enabled this options inserts delays into the MMC waiting
+ * routines releasing some extra CPU time for the threads with
+ * lower priority, this may slow down the driver a bit however.
+ */
+#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__)
+#define SDC_NICE_WAITING TRUE
+#endif
+
+/**
+ * @brief OCR initialization constant for V20 cards.
+ */
+#if !defined(SDC_INIT_OCR_V20) || defined(__DOXYGEN__)
+#define SDC_INIT_OCR_V20 0x50FF8000U
+#endif
+
+/**
+ * @brief OCR initialization constant for non-V20 cards.
+ */
+#if !defined(SDC_INIT_OCR) || defined(__DOXYGEN__)
+#define SDC_INIT_OCR 0x80100000U
+#endif
+
+/*===========================================================================*/
+/* SERIAL driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Default bit rate.
+ * @details Configuration parameter, this is the baud rate selected for the
+ * default configuration.
+ */
+#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__)
+#define SERIAL_DEFAULT_BITRATE 38400
+#endif
+
+/**
+ * @brief Serial buffers size.
+ * @details Configuration parameter, you can change the depth of the queue
+ * buffers depending on the requirements of your application.
+ * @note The default is 16 bytes for both the transmission and receive
+ * buffers.
+ */
+#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__)
+#define SERIAL_BUFFERS_SIZE 16
+#endif
+
+/*===========================================================================*/
+/* SERIAL_USB driver related setting. */
+/*===========================================================================*/
+
+/**
+ * @brief Serial over USB buffers size.
+ * @details Configuration parameter, the buffer size must be a multiple of
+ * the USB data endpoint maximum packet size.
+ * @note The default is 256 bytes for both the transmission and receive
+ * buffers.
+ */
+#if !defined(SERIAL_USB_BUFFERS_SIZE) || defined(__DOXYGEN__)
+#define SERIAL_USB_BUFFERS_SIZE 1
+#endif
+
+/**
+ * @brief Serial over USB number of buffers.
+ * @note The default is 2 buffers.
+ */
+#if !defined(SERIAL_USB_BUFFERS_NUMBER) || defined(__DOXYGEN__)
+#define SERIAL_USB_BUFFERS_NUMBER 2
+#endif
+
+/*===========================================================================*/
+/* SPI driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__)
+#define SPI_USE_WAIT TRUE
+#endif
+
+/**
+ * @brief Enables circular transfers APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(SPI_USE_CIRCULAR) || defined(__DOXYGEN__)
+#define SPI_USE_CIRCULAR FALSE
+#endif
+
+
+/**
+ * @brief Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define SPI_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/**
+ * @brief Handling method for SPI CS line.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(SPI_SELECT_MODE) || defined(__DOXYGEN__)
+#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD
+#endif
+
+/*===========================================================================*/
+/* UART driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(UART_USE_WAIT) || defined(__DOXYGEN__)
+#define UART_USE_WAIT FALSE
+#endif
+
+/**
+ * @brief Enables the @p uartAcquireBus() and @p uartReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(UART_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define UART_USE_MUTUAL_EXCLUSION FALSE
+#endif
+
+/*===========================================================================*/
+/* USB driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(USB_USE_WAIT) || defined(__DOXYGEN__)
+#define USB_USE_WAIT TRUE
+#endif
+
+/*===========================================================================*/
+/* WSPI driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(WSPI_USE_WAIT) || defined(__DOXYGEN__)
+#define WSPI_USE_WAIT TRUE
+#endif
+
+/**
+ * @brief Enables the @p wspiAcquireBus() and @p wspiReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(WSPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define WSPI_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+#endif /* HALCONF_H */
+
+/** @} */
diff --git a/keyboards/handwired/t111/info.json b/keyboards/handwired/t111/info.json
new file mode 100644
index 000000000..b31fed516
--- /dev/null
+++ b/keyboards/handwired/t111/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "t111",
+ "url": "",
+ "maintainer": "DmNosachev",
+ "width": 21.75,
+ "height": 6.5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"label":"Break", "x":0, "y":0}, {"label":"PF1", "x":2, "y":0}, {"label":"PF2", "x":3, "y":0}, {"label":"PF3", "x":4, "y":0}, {"label":"PF4", "x":5, "y":0}, {"label":"PF5", "x":6, "y":0}, {"label":"PF6", "x":7, "y":0}, {"label":"PF7", "x":8, "y":0}, {"label":"PF8", "x":9, "y":0}, {"label":"PF9", "x":10, "y":0}, {"label":"PF10", "x":11, "y":0}, {"label":"PF11", "x":12, "y":0}, {"label":"PF12", "x":13, "y":0}, {"label":"PF13", "x":14, "y":0}, {"label":"PF14", "x":15, "y":0}, {"label":"PF15", "x":16, "y":0}, {"label":"PF16", "x":17, "y":0}, {"label":"Esc", "x":0, "y":1.5}, {"label":"!", "x":1, "y":1.5}, {"label":"@", "x":2, "y":1.5}, {"label":"#", "x":3, "y":1.5}, {"label":"$", "x":4, "y":1.5}, {"label":"%", "x":5, "y":1.5}, {"label":"^", "x":6, "y":1.5}, {"label":"&", "x":7, "y":1.5}, {"label":"*", "x":8, "y":1.5}, {"label":"(", "x":9, "y":1.5}, {"label":")", "x":10, "y":1.5}, {"label":"_", "x":11, "y":1.5}, {"label":"+", "x":12, "y":1.5}, {"label":"~", "x":13, "y":1.5}, {"label":"bkspc", "x":14, "y":1.5, "w":1.25}, {"label":"Ins", "x":15.5, "y":1.5}, {"label":"Cls", "x":16.5, "y":1.5}, {"label":"*", "x":17.75, "y":1.5}, {"label":"/", "x":18.75, "y":1.5}, {"label":"+", "x":19.75, "y":1.5}, {"label":"-", "x":20.75, "y":1.5}, {"label":"Tab", "x":0, "y":2.5, "w":1.5}, {"label":"Q", "x":1.5, "y":2.5}, {"label":"W", "x":2.5, "y":2.5}, {"label":"E", "x":3.5, "y":2.5}, {"label":"R", "x":4.5, "y":2.5}, {"label":"T", "x":5.5, "y":2.5}, {"label":"Y", "x":6.5, "y":2.5}, {"label":"U", "x":7.5, "y":2.5}, {"label":"I", "x":8.5, "y":2.5}, {"label":"O", "x":9.5, "y":2.5}, {"label":"P", "x":10.5, "y":2.5}, {"label":"{", "x":11.5, "y":2.5}, {"label":"}", "x":12.5, "y":2.5}, {"label":"El", "x":15.5, "y":2.5}, {"label":"Dup", "x":16.5, "y":2.5}, {"label":"7", "x":17.75, "y":2.5}, {"label":"8", "x":18.75, "y":2.5}, {"label":"9", "x":19.75, "y":2.5}, {"label":"=", "x":20.75, "y":2.5}, {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75}, {"label":"A", "x":1.75, "y":3.5}, {"label":"S", "x":2.75, "y":3.5}, {"label":"D", "x":3.75, "y":3.5}, {"label":"F", "x":4.75, "y":3.5}, {"label":"G", "x":5.75, "y":3.5}, {"label":"H", "x":6.75, "y":3.5}, {"label":"J", "x":7.75, "y":3.5}, {"label":"K", "x":8.75, "y":3.5}, {"label":"L", "x":9.75, "y":3.5}, {"label":":", "x":10.75, "y":3.5}, {"label":"\"", "x":11.75, "y":3.5}, {"label":"|", "x":12.75, "y":3.5}, {"label":"Enter", "x":13.75, "y":2.5, "w":1.5, "h":2}, {"label":"Del", "x":15.5, "y":3.5}, {"label":"Home", "x":16.5, "y":3.5}, {"label":"4", "x":17.75, "y":3.5}, {"label":"5", "x":18.75, "y":3.5}, {"label":"6", "x":19.75, "y":3.5}, {"label":",", "x":20.75, "y":3.5}, {"label":"Shift", "x":0, "y":4.5, "w":2.25}, {"label":"Z", "x":2.25, "y":4.5}, {"label":"X", "x":3.25, "y":4.5}, {"label":"C", "x":4.25, "y":4.5}, {"label":"V", "x":5.25, "y":4.5}, {"label":"B", "x":6.25, "y":4.5}, {"label":"N", "x":7.25, "y":4.5}, {"label":"M", "x":8.25, "y":4.5}, {"label":"<", "x":9.25, "y":4.5}, {"label":">", "x":10.25, "y":4.5}, {"label":"?", "x":11.25, "y":4.5}, {"x":12.25, "y":4.5}, {"label":"Shift", "x":13.25, "y":4.5, "w":2}, {"label":"\u0432\u2020\u2018", "x":15.5, "y":4.5}, {"label":"\u0432\u2020\u201c", "x":16.5, "y":4.5}, {"label":"1", "x":17.75, "y":4.5}, {"label":"2", "x":18.75, "y":4.5}, {"label":"3", "x":19.75, "y":4.5}, {"label":"Enter", "x":20.75, "y":4.5, "h":2}, {"label":"Caps", "x":1.75, "y":5.5}, {"label":"Graph", "x":2.75, "y":5.5, "w":1.5}, {"x":4.25, "y":5.5, "w":8}, {"label":"Alt", "x":12.25, "y":5.5, "w":1.5}, {"label":"\u0432\u2020\u0452", "x":15.5, "y":5.5}, {"label":"\u0432\u2020\u2019", "x":16.5, "y":5.5}, {"label":"0", "x":17.75, "y":5.5, "w":2}, {"label":".", "x":19.75, "y":5.5}]
+ }
+ }
+}
diff --git a/keyboards/handwired/t111/keymaps/default/keymap.c b/keyboards/handwired/t111/keymaps/default/keymap.c
new file mode 100644
index 000000000..e76a837db
--- /dev/null
+++ b/keyboards/handwired/t111/keymaps/default/keymap.c
@@ -0,0 +1,50 @@
+/* Copyright 2020 DmNosachev
+ *
+ * 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] = {
+/*
+ * ,-------------------------------------------------------------------------------------------------------------------------------------.
+ * | xxx | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | xxx |PrnSc| ScLk|Pause| |
+ * |-------------------------------------------------------------------------------------------------------------------------------------|
+ * | esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | ~ |backspc| | ins | del | |NumLk| / | * | - |
+ * |-------------------------------------------------------------------------------------------------------------------------------------|
+ * | tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | enter | PgUp| PgDn| | 7 | 8 | 9 | += |
+ * |-------------------------------------------------------------------------------- |--------------------------------------|
+ * | ctrl | A | S | D | F | G | H | J | K | L | ;: | '" | |\ | | home| end | | 4 | 5 | 6 | + |
+ * |-------------------------------------------------------------------------------------------------------------------------------------|
+ * | shift | Z | X | C | V | B | N | M | , | . | /? | ctrl| shift | up | down| | 1 | 2 | 3 |enter|
+ * |-------------------------------------------------------------------------------------------------------------------------------| |
+ * | | gui | alt | Space | alt | | left|right| | 0 | . | |
+ * `-------------------------------------------------------------------------------------------------------------------------------------'
+*/
+ [0] = LAYOUT(
+ 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_PSCR, KC_SLCK, KC_PAUS,
+ 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_BSPC, KC_INS, KC_DEL, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
+ 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, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_EQL,
+ 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_BSLS, KC_ENT, KC_HOME, KC_END, KC_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RCTRL, KC_RSFT, KC_UP, KC_DOWN, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_LEFT, KC_RGHT, KC_P0, KC_PDOT
+ )
+};
+
+void keyboard_post_init_user(void) {
+ // Customise these values to desired behaviour
+ debug_enable=true;
+ debug_matrix=true;
+ //debug_keyboard=true;
+ //debug_mouse=true;
+}
diff --git a/keyboards/handwired/t111/keymaps/oleg/config.h b/keyboards/handwired/t111/keymaps/oleg/config.h
new file mode 100644
index 000000000..22ae5bcf4
--- /dev/null
+++ b/keyboards/handwired/t111/keymaps/oleg/config.h
@@ -0,0 +1,20 @@
+/*
+Copyright 2020 DmNosachev
+
+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
+
+#define UNICODE_SELECTED_MODES UC_WIN, UC_WINC \ No newline at end of file
diff --git a/keyboards/handwired/t111/keymaps/oleg/keymap.c b/keyboards/handwired/t111/keymaps/oleg/keymap.c
new file mode 100644
index 000000000..63342af79
--- /dev/null
+++ b/keyboards/handwired/t111/keymaps/oleg/keymap.c
@@ -0,0 +1,145 @@
+/* Copyright 2020 DmNosachev
+ *
+ * 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 "debug.h"
+#include "version.h"
+
+enum custom_keycodes {
+ VRSN = SAFE_RANGE,
+ MC1
+};
+
+enum unicode_names {
+ USCT,
+ ULSB,
+ URSB,
+ USCO,
+ UAPO,
+ UCOM,
+ UDOT,
+ USLS,
+ ULCB,
+ URCB,
+ UCLN,
+ UQOT,
+ ULTH,
+ UGTH,
+ UQUE,
+ UGRV,
+ UTLD,
+ UAT,
+ UHSH,
+ UDLR,
+ UPCT,
+ UCFX,
+ UAMP,
+ UAST
+};
+
+const uint32_t PROGMEM unicode_map[] = {
+ [USCT] = 0x00A7, // §
+ [ULSB] = 0x005B, // [
+ [URSB] = 0x005D, // ]
+ [USCO] = 0x003B, // ;
+ [UAPO] = 0x0027, // '
+ [UCOM] = 0x002C, // ,
+ [UDOT] = 0x002E, // .
+ [USLS] = 0x002F, // slash
+ [ULCB] = 0x007B, // {
+ [URCB] = 0x007D, // }
+ [UCLN] = 0x003A, // :
+ [UQOT] = 0x0022, // "
+ [ULTH] = 0x003C, // <
+ [UGTH] = 0x003E, // >
+ [UQUE] = 0x003F, // ?
+ [UGRV] = 0x0060, // `
+ [UTLD] = 0x007E, // ~
+ [UAT] = 0x0040, // at
+ [UHSH] = 0x0023, // hash
+ [UDLR] = 0x0024, // dollar
+ [UPCT] = 0x0025, // percent
+ [UCFX] = 0x005E, // ^
+ [UAMP] = 0x0026, // &
+ [UAST] = 0x002A, // asterisk
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/*
+ * ,-------------------------------------------------------------------------------------------------------------------------------------.
+ * | gui | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Vol-| Vol+| Mute|Pause| |
+ * |-------------------------------------------------------------------------------------------------------------------------------------|
+ * | esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | ~ |backspc| | PgUp| Home| |NumLk| / | * | - |
+ * |-------------------------------------------------------------------------------------------------------------------------------------|
+ * | tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | enter | PgDn| End| | 7 | 8 | 9 | += |
+ * |-------------------------------------------------------------------------------- |--------------------------------------|
+ * | ctrl | A | S | D | F | G | H | J | K | L | ;: | '" | |\ | | Del |NumLk| | 4 | 5 | 6 | + |
+ * |-------------------------------------------------------------------------------------------------------------------------------------|
+ * | shift | Z | X | C | V | B | N | M | , | . | /? | [] | shift | up | down| | 1 | 2 | 3 |enter|
+ * |-------------------------------------------------------------------------------------------------------------------------------| |
+ * | | caps | alt | Space | Fn | | left|right| | 0 | . | |
+ * `-------------------------------------------------------------------------------------------------------------------------------------'
+*/
+ [0] = LAYOUT(
+ KC_LGUI, 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_VOLD, KC_VOLU, KC_MUTE, KC_PSCR,
+ 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_BSPC, KC_PGUP, KC_HOME, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
+ 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_ENT, KC_PGDN, KC_END, KC_P7, KC_P8, KC_P9, KC_EQL,
+ 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_BSLS, KC_DEL, KC_NLCK, KC_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MC1, KC_RSFT, KC_UP, KC_DOWN, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_CAPS, KC_LALT, KC_SPC, MO(1), KC_LEFT, KC_RGHT, KC_P0, KC_PDOT
+ ),
+/*
+ * ,-------------------------------------------------------------------------------------------------------------------------------------.
+ * | VRSN| |Sleep| |Umode| | | | | | | | | | | | | | |
+ * |-------------------------------------------------------------------------------------------------------------------------------------|
+ * | | | @ | # | $ | § | ^ | & | * | | | | | | | | | | |Calc | | | |
+ * |-------------------------------------------------------------------------------------------------------------------------------------|
+ * | | mb1 | m↑ | mb2 | mb3 | | | |SysRq|ScrLk|Pause| | | | | | | | | | |
+ * |-------------------------------------------------------------------------------- |--------------------------------------|
+ * | | m← | m↓ | m→ | mb5 | | | | | | | | | | | | | | | | |
+ * |-------------------------------------------------------------------------------------------------------------------------------------|
+ * | | | | mb4 | | | | | | | | | | | | | | | | |
+ * |-------------------------------------------------------------------------------------------------------------------------------| |
+ * | | | | | | | | | | | | |
+ * `-------------------------------------------------------------------------------------------------------------------------------------'
+*/
+ [1] = LAYOUT(
+ VRSN, KC_SLEP, _______, UC_MOD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, X(UAT), X(UHSH), X(UDLR), X(USCT), X(UCFX), X(UAMP), X(UAST), _______, _______, _______, _______, _______, _______, _______, _______, KC_CALC, _______, _______, _______,
+ _______, KC_BTN1, KC_MS_U, KC_BTN2, KC_BTN3, _______, _______, _______, KC_SYSREQ, KC_SLCK, KC_PAUS, XP(ULSB, ULCB), XP(URSB, URCB), _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN5, _______, _______, _______, _______, _______, XP(USCO, UCLN), XP(UAPO, UQOT), _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, KC_BTN4, _______, _______, _______, _______, XP(UCOM, ULTH), XP(UDOT, UGTH), XP(USLS, UQUE), KC_APP, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
+
+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 MC1:
+ if (record->event.pressed) {
+ send_unicode_string("[]");
+ }
+ return false;
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/handwired/t111/keymaps/oleg/rules.mk b/keyboards/handwired/t111/keymaps/oleg/rules.mk
new file mode 100644
index 000000000..0517619ed
--- /dev/null
+++ b/keyboards/handwired/t111/keymaps/oleg/rules.mk
@@ -0,0 +1 @@
+UNICODEMAP_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/handwired/t111/mcuconf.h b/keyboards/handwired/t111/mcuconf.h
new file mode 100644
index 000000000..60d9931c3
--- /dev/null
+++ b/keyboards/handwired/t111/mcuconf.h
@@ -0,0 +1,209 @@
+/*
+ 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 STM32F103_MCUCONF
+
+/*
+ * STM32F103 drivers configuration.
+ * The following settings override the default settings present in
+ * the various device driver implementation headers.
+ * Note that the settings for each driver only have effect if the whole
+ * driver is enabled in halconf.h.
+ *
+ * IRQ priorities:
+ * 15...0 Lowest...Highest.
+ *
+ * DMA priorities:
+ * 0...3 Lowest...Highest.
+ */
+
+/*
+ * HAL driver system settings.
+ */
+#define STM32_NO_INIT FALSE
+#define STM32_HSI_ENABLED TRUE
+#define STM32_LSI_ENABLED FALSE
+#define STM32_HSE_ENABLED TRUE
+#define STM32_LSE_ENABLED FALSE
+#define STM32_SW STM32_SW_PLL
+#define STM32_PLLSRC STM32_PLLSRC_HSE
+#define STM32_PLLXTPRE STM32_PLLXTPRE_DIV1
+#define STM32_PLLMUL_VALUE 9
+#define STM32_HPRE STM32_HPRE_DIV1
+#define STM32_PPRE1 STM32_PPRE1_DIV2
+#define STM32_PPRE2 STM32_PPRE2_DIV2
+#define STM32_ADCPRE STM32_ADCPRE_DIV4
+#define STM32_USB_CLOCK_REQUIRED TRUE
+#define STM32_USBPRE STM32_USBPRE_DIV1P5
+#define STM32_MCOSEL STM32_MCOSEL_NOCLOCK
+#define STM32_RTCSEL STM32_RTCSEL_HSEDIV
+#define STM32_PVD_ENABLE FALSE
+#define STM32_PLS STM32_PLS_LEV0
+
+/*
+ * ADC driver system settings.
+ */
+#define STM32_ADC_USE_ADC1 FALSE
+#define STM32_ADC_ADC1_DMA_PRIORITY 2
+#define STM32_ADC_ADC1_IRQ_PRIORITY 6
+
+/*
+ * CAN driver system settings.
+ */
+#define STM32_CAN_USE_CAN1 FALSE
+#define STM32_CAN_CAN1_IRQ_PRIORITY 11
+
+/*
+ * EXT driver system settings.
+ */
+#define STM32_EXT_EXTI0_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI1_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI2_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI3_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI4_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI5_9_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI10_15_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI16_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI17_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI18_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI19_IRQ_PRIORITY 6
+
+/*
+ * GPT driver system settings.
+ */
+#define STM32_GPT_USE_TIM1 FALSE
+#define STM32_GPT_USE_TIM2 FALSE
+#define STM32_GPT_USE_TIM3 FALSE
+#define STM32_GPT_USE_TIM4 FALSE
+#define STM32_GPT_USE_TIM5 FALSE
+#define STM32_GPT_USE_TIM8 FALSE
+#define STM32_GPT_TIM1_IRQ_PRIORITY 7
+#define STM32_GPT_TIM2_IRQ_PRIORITY 7
+#define STM32_GPT_TIM3_IRQ_PRIORITY 7
+#define STM32_GPT_TIM4_IRQ_PRIORITY 7
+#define STM32_GPT_TIM5_IRQ_PRIORITY 7
+#define STM32_GPT_TIM8_IRQ_PRIORITY 7
+
+/*
+ * I2C driver system settings.
+ */
+#define STM32_I2C_USE_I2C1 FALSE
+#define STM32_I2C_USE_I2C2 FALSE
+#define STM32_I2C_BUSY_TIMEOUT 50
+#define STM32_I2C_I2C1_IRQ_PRIORITY 5
+#define STM32_I2C_I2C2_IRQ_PRIORITY 5
+#define STM32_I2C_I2C1_DMA_PRIORITY 3
+#define STM32_I2C_I2C2_DMA_PRIORITY 3
+#define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure")
+
+/*
+ * ICU driver system settings.
+ */
+#define STM32_ICU_USE_TIM1 FALSE
+#define STM32_ICU_USE_TIM2 FALSE
+#define STM32_ICU_USE_TIM3 FALSE
+#define STM32_ICU_USE_TIM4 FALSE
+#define STM32_ICU_USE_TIM5 FALSE
+#define STM32_ICU_USE_TIM8 FALSE
+#define STM32_ICU_TIM1_IRQ_PRIORITY 7
+#define STM32_ICU_TIM2_IRQ_PRIORITY 7
+#define STM32_ICU_TIM3_IRQ_PRIORITY 7
+#define STM32_ICU_TIM4_IRQ_PRIORITY 7
+#define STM32_ICU_TIM5_IRQ_PRIORITY 7
+#define STM32_ICU_TIM8_IRQ_PRIORITY 7
+
+/*
+ * PWM driver system settings.
+ */
+#define STM32_PWM_USE_ADVANCED FALSE
+#define STM32_PWM_USE_TIM1 FALSE
+#define STM32_PWM_USE_TIM2 FALSE
+#define STM32_PWM_USE_TIM3 FALSE
+#define STM32_PWM_USE_TIM4 TRUE
+#define STM32_PWM_USE_TIM5 FALSE
+#define STM32_PWM_USE_TIM8 FALSE
+#define STM32_PWM_TIM1_IRQ_PRIORITY 7
+#define STM32_PWM_TIM2_IRQ_PRIORITY 7
+#define STM32_PWM_TIM3_IRQ_PRIORITY 7
+#define STM32_PWM_TIM4_IRQ_PRIORITY 7
+#define STM32_PWM_TIM5_IRQ_PRIORITY 7
+#define STM32_PWM_TIM8_IRQ_PRIORITY 7
+
+/*
+ * RTC driver system settings.
+ */
+#define STM32_RTC_IRQ_PRIORITY 15
+
+/*
+ * SERIAL driver system settings.
+ */
+#define STM32_SERIAL_USE_USART1 FALSE
+#define STM32_SERIAL_USE_USART2 FALSE
+#define STM32_SERIAL_USE_USART3 FALSE
+#define STM32_SERIAL_USE_UART4 FALSE
+#define STM32_SERIAL_USE_UART5 FALSE
+#define STM32_SERIAL_USART1_PRIORITY 12
+#define STM32_SERIAL_USART2_PRIORITY 12
+#define STM32_SERIAL_USART3_PRIORITY 12
+#define STM32_SERIAL_UART4_PRIORITY 12
+#define STM32_SERIAL_UART5_PRIORITY 12
+
+/*
+ * SPI driver system settings.
+ */
+#define STM32_SPI_USE_SPI1 FALSE
+#define STM32_SPI_USE_SPI2 FALSE
+#define STM32_SPI_USE_SPI3 FALSE
+#define STM32_SPI_SPI1_DMA_PRIORITY 1
+#define STM32_SPI_SPI2_DMA_PRIORITY 1
+#define STM32_SPI_SPI3_DMA_PRIORITY 1
+#define STM32_SPI_SPI1_IRQ_PRIORITY 10
+#define STM32_SPI_SPI2_IRQ_PRIORITY 10
+#define STM32_SPI_SPI3_IRQ_PRIORITY 10
+#define STM32_SPI_DMA_ERROR_HOOK(spip) osalSysHalt("DMA failure")
+
+/*
+ * ST driver system settings.
+ */
+#define STM32_ST_IRQ_PRIORITY 8
+#define STM32_ST_USE_TIMER 2
+
+/*
+ * UART driver system settings.
+ */
+#define STM32_UART_USE_USART1 FALSE
+#define STM32_UART_USE_USART2 FALSE
+#define STM32_UART_USE_USART3 FALSE
+#define STM32_UART_USART1_IRQ_PRIORITY 12
+#define STM32_UART_USART2_IRQ_PRIORITY 12
+#define STM32_UART_USART3_IRQ_PRIORITY 12
+#define STM32_UART_USART1_DMA_PRIORITY 0
+#define STM32_UART_USART2_DMA_PRIORITY 0
+#define STM32_UART_USART3_DMA_PRIORITY 0
+#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure")
+
+/*
+ * USB driver system settings.
+ */
+#define STM32_USB_USE_USB1 TRUE
+#define STM32_USB_LOW_POWER_ON_SUSPEND FALSE
+#define STM32_USB_USB1_HP_IRQ_PRIORITY 13
+#define STM32_USB_USB1_LP_IRQ_PRIORITY 14
+
+#endif /* _MCUCONF_H_ */ \ No newline at end of file
diff --git a/keyboards/handwired/t111/readme.md b/keyboards/handwired/t111/readme.md
new file mode 100644
index 000000000..31bbc2a72
--- /dev/null
+++ b/keyboards/handwired/t111/readme.md
@@ -0,0 +1,45 @@
+# QMK-based firmware for Fujitsu N860-2500-T111 keyboard
+
+![Fujitsu T111](https://i.imgur.com/aGtg7FMl.jpg)
+
+Fujitsu N860-2500-T111 keyboard conversion project: direct connection of Black Pill to the matrix.
+
+* Keyboard Maintainer: [DmNosachev](https://github.com/DmNosachev)
+* Hardware Supported: [Fujitsu N860-2500-T111](https://deskthority.net/viewtopic.php?t=17087), Black Pill STM32F103C8T6 MCU board. Alternatively you can use any MCU which is supported by QMK and has 22 or more IO pins: Arduino Micro, Teensy 2.0, Teensy 2.0++, Blue Pill, etc.
+* Thanks to Deskthority user *OldIsNew* for the matrix decoding.
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/t111:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+# Modding
+
+## Matrix
+
+Fujitsu N860-2500-T111 has 14x8 matrix. It's ghost-free thanks to the diodes.
+
+Rows (0-7) and columns (0-D):
+![T111 rows and columns](https://i.imgur.com/37MxQG8h.jpg)
+
+## Black Pill
+Suggested mount position for the Black Pill (view from the top side of the PCB):
+
+```
+ C1 C2 C3 C4 C7 C8 C9 CA R5 R6
+,--------------------------------------------------------------------,
+|B11 B10 B1 B0 A7 A6 A5 A4 A3 A2 A1 A0 RST C13 B9 B8 GND |---,
+| |USB|
+|B12 B13 B14 B15 A8 A9 A10 A11 A12 A15 B3 B4 B5 B6 B7 3V3 GND |---'
+'--------------------------------------------------------------------'
+ CC CD C0 CB C6 C5 R0 R4 R3 R2 R1 R7
+```
+
+![Black Pill](https://i.imgur.com/lJfdAQTh.jpg)
+
+1. Desolder all ICs, capacitors and resistors.
+1. Solder 4-pin SWD header to Black Pill.
+2. Burn [STM32duino bootloader](https://github.com/rogerclarkmelbourne/STM32duino-bootloader/blob/master/bootloader_only_binaries/generic_boot20_pb12.bin) to Black Pill.
+3. Compile and flash the firmware: `make handwired/t111:default:flash`
+4. Connect rows and columns to the corresponding pins of the Black Pill.
diff --git a/keyboards/handwired/t111/rules.mk b/keyboards/handwired/t111/rules.mk
new file mode 100644
index 000000000..e6776a643
--- /dev/null
+++ b/keyboards/handwired/t111/rules.mk
@@ -0,0 +1,29 @@
+MCU = STM32F103
+
+# GENERIC STM32F103C8T6 board - stm32duino bootloader
+MCU_LDSCRIPT = STM32F103x8_stm32duino_bootloader
+BOARD = STM32_F103_STM32DUINO
+STM32_BOOTLOADER_ADDRESS = 0x80000000
+
+DFU_ARGS = -d 1EAF:0003 -a2 -R
+DFU_SUFFIX_ARGS = -v 1EAF -p 0003
+
+# Enter lower-power sleep mode when on the ChibiOS idle thread
+OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/handwired/t111/t111.c b/keyboards/handwired/t111/t111.c
new file mode 100644
index 000000000..f61e34240
--- /dev/null
+++ b/keyboards/handwired/t111/t111.c
@@ -0,0 +1,17 @@
+/* Copyright 2020 DmNosachev
+ *
+ * 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 "t111.h"
diff --git a/keyboards/handwired/t111/t111.h b/keyboards/handwired/t111/t111.h
new file mode 100644
index 000000000..35651f635
--- /dev/null
+++ b/keyboards/handwired/t111/t111.h
@@ -0,0 +1,57 @@
+/* Copyright 2020 DmNosachev
+ *
+ * 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
+
+/*
+,-------------------------------------------------------------------------------------------------------------------------------------.
+|break| | PF1 | PF2 | PF3 | PF4 | PF5 | PF6 | PF7 | PF8 | PF9 | PF10| PF11| PF12| PF13| PF14| PF15| PF16| |
+|-------------------------------------------------------------------------------------------------------------------------------------|
+| esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | ~ |backspc| | ins | cls | | * | / | + | - |
+|-------------------------------------------------------------------------------------------------------------------------------------|
+| tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | enter | el | dup | | 7 | 8 | 9 | = |
+|-------------------------------------------------------------------------------- |--------------------------------------|
+| ctrl | A | S | D | F | G | H | J | K | L | ;: | '" | |\ | | del | home| | 4 | 5 | 6 | , |
+|-------------------------------------------------------------------------------------------------------------------------------------|
+| shift | Z | X | C | V | B | N | M | , | . | /? |blank| shift | up | down| | 1 | 2 | 3 |enter|
+|-------------------------------------------------------------------------------------------------------------------------------| |
+| | caps| graph | Space | alt | | left|right| | 0 | . | |
+`-------------------------------------------------------------------------------------------------------------------------------------'
+*/
+
+#define LAYOUT( \
+ K30, K40, K11, K21, K31, K41, K51, K61, K71, K01, K12, K22, K32, K42, K52, K62, K72, \
+ K20, K13, K23, K33, K43, K53, K63, K73, K03, K14, K24, K34, K44, K54, K58, K64, K74, K15, K06, K76, K66, \
+ K10, K17, K27, K37, K47, K57, K67, K77, K07, K18, K28, K38, K48, K68, K78, K1B, K00, K70, K60, \
+ K0A, K19, K29, K39, K49, K59, K69, K79, K09, K1A, K2A, K3A, K4A, K5A, K6A, K7A, K2B, K3B, K4B, K5B, \
+ K0D, K1C, K2C, K3C, K4C, K5C, K6C, K7C, K0C, K1D, K2D, K3D, K04, K6D, K7D, K25, K35, K45, K55, \
+ K08, K0B, K50, K05, K6B, K7B, K65, K75 \
+) \
+{ \
+/* 0 */ { K00, K01, XXX, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
+/* 1 */ { K10, K11, K12, K13, K14, K15, XXX, K17, K18, K19, K1A, K1B, K1C, K1D }, \
+/* 2 */ { K20, K21, K22, K23, K24, K25, XXX, K27, K28, K29, K2A, K2B, K2C, K2D }, \
+/* 3 */ { K30, K31, K32, K33, K34, K35, XXX, K37, K38, K39, K3A, K3B, K3C, K3D }, \
+/* 4 */ { K40, K41, K42, K43, K44, K45, XXX, K47, K48, K49, K4A, K4B, K4C, XXX }, \
+/* 5 */ { K50, K51, K52, K53, K54, K55, XXX, K57, K58, K59, K5A, K5B, K5C, XXX }, \
+/* 6 */ { K60, K61, K62, K63, K64, K65, K66, K67, K68, K69, K6A, K6B, K6C, K6D }, \
+/* 7 */ { K70, K71, K72, K73, K74, K75, K76, K77, K78, K79, K7A, K7B, K7C, K7D } \
+}
+/* 0 1 2 3 4 5 6 7 8 9 A B C D */
diff --git a/keyboards/katana60/info.json b/keyboards/katana60/info.json
deleted file mode 100644
index bbb868103..000000000
--- a/keyboards/katana60/info.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "keyboard_name": "Katana60",
- "url": "",
- "maintainer": "qmk",
- "width": 15,
- "height": 5,
- "layouts": {
- "LAYOUT": {
- "key_count": 70,
- "layout": [{"label":"k40", "x":0, "y":0}, {"label":"k41", "x":1, "y":0}, {"label":"k42", "x":2, "y":0}, {"label":"k43", "x":3, "y":0}, {"label":"k44", "x":4, "y":0}, {"label":"k45", "x":5, "y":0}, {"label":"k46", "x":6, "y":0}, {"label":"k47", "x":7, "y":0}, {"label":"k48", "x":8, "y":0}, {"label":"k49", "x":9, "y":0}, {"label":"k4a", "x":10, "y":0}, {"label":"k4b", "x":11, "y":0}, {"label":"k4c", "x":12, "y":0}, {"label":"k4d", "x":13, "y":0}, {"label":"k4e", "x":14, "y":0}, {"label":"k30", "x":0, "y":1, "w":1.5}, {"label":"k31", "x":1.5, "y":1}, {"label":"k32", "x":2.5, "y":1}, {"label":"k33", "x":3.5, "y":1}, {"label":"k34", "x":4.5, "y":1}, {"label":"k35", "x":5.5, "y":1}, {"label":"k36", "x":6.5, "y":1}, {"label":"k37", "x":7.5, "y":1}, {"label":"k38", "x":8.5, "y":1}, {"label":"k39", "x":9.5, "y":1}, {"label":"k3a", "x":10.5, "y":1}, {"label":"k3b", "x":11.5, "y":1}, {"label":"k3c", "x":12.5, "y":1}, {"label":"k3d", "x":13.5, "y":1, "w":1.5}, {"label":"k20", "x":0, "y":2, "w":1.25}, {"label":"k21", "x":1.25, "y":2}, {"label":"k22", "x":2.25, "y":2}, {"label":"k23", "x":3.25, "y":2}, {"label":"k24", "x":4.25, "y":2}, {"label":"k25", "x":5.25, "y":2}, {"label":"k26", "x":6.25, "y":2}, {"label":"k27", "x":7.75, "y":2}, {"label":"k28", "x":8.75, "y":2}, {"label":"k29", "x":9.75, "y":2}, {"label":"k2a", "x":10.75, "y":2}, {"label":"k2b", "x":11.75, "y":2}, {"label":"k2c", "x":12.75, "y":2}, {"label":"k2d", "x":13.75, "y":2, "w":1.25}, {"label":"k10", "x":0, "y":3}, {"label":"k11", "x":1, "y":3}, {"label":"k12", "x":2, "y":3}, {"label":"k13", "x":3, "y":3}, {"label":"k14", "x":4, "y":3}, {"label":"k15", "x":5, "y":3}, {"label":"k16", "x":6, "y":3}, {"label":"k17", "x":7, "y":3}, {"label":"k18", "x":8, "y":3}, {"label":"k19", "x":9, "y":3}, {"label":"k1a", "x":10, "y":3}, {"label":"k1b", "x":11, "y":3}, {"label":"k1c", "x":12, "y":3}, {"label":"k1d", "x":13, "y":3}, {"label":"k1e", "x":14, "y":3}, {"label":"k00", "x":0, "y":4}, {"label":"k01", "x":1, "y":4, "w":1.25}, {"label":"k02", "x":2.25, "y":4, "w":1.25}, {"label":"k03", "x":3.5, "y":4, "w":1.25}, {"label":"k04", "x":4.75, "y":4, "w":2.25}, {"label":"k05", "x":7, "y":4}, {"label":"k06", "x":8, "y":4, "w":2}, {"label":"k09", "x":10, "y":4}, {"label":"k0a", "x":11, "y":4}, {"label":"k0b", "x":12, "y":4}, {"label":"k0c", "x":13, "y":4}, {"label":"k0d", "x":14, "y":4}]
- }
- }
-}
diff --git a/keyboards/katana60/readme.md b/keyboards/katana60/readme.md
deleted file mode 100644
index 5e1c7d390..000000000
--- a/keyboards/katana60/readme.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# Katana60
-
-![Katana60](https://i.imgur.com/xVkODOu.jpg)
-
-A 60% keyboard with a symmetrical staggered layout, sold by CandyKeys.com.
-
-Keyboard Maintainer: [Baris Tosun](https://github.com/rominronin)
-Hardware Supported: Katana60 PCB v1, Teensy 2.0
-Hardware Availability: [CandyKeys.com](https://CandyKeys.com)
-
-Make example for this keyboard (after setting up your build environment):
-
- make katana60:default
-
-See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
-
-There is also ongoing discussion for the extend layer, at the [Colemak Forum](https://forum.colemak.com/topic/2327-developing-an-extend-layer-for-the-katana60/) \ No newline at end of file
diff --git a/keyboards/kbdfans/bella/soldered/config.h b/keyboards/kbdfans/bella/soldered/config.h
new file mode 100755
index 000000000..0d729bebe
--- /dev/null
+++ b/keyboards/kbdfans/bella/soldered/config.h
@@ -0,0 +1,42 @@
+/* Copyright 2020 dztech
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#pragma once
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x4B42
+#define PRODUCT_ID 0x0007
+#define DEVICE_VER 0x0001
+#define MANUFACTURER KBDFANS
+#define PRODUCT BELLA SOLDERED
+/* key matrix size */
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 16
+
+#define MATRIX_ROW_PINS { B0, B1, B2, B3, D1, B6 }
+#define MATRIX_COL_PINS { C6, C7, F7, F6, F5, F4, F1, F0, D2, D3, D5, D4, D6, D7, B4, B5 }
+#define UNUSED_PINS
+
+#define DIODE_DIRECTION COL2ROW
+
+#define BACKLIGHT_PIN B7
+#ifdef BACKLIGHT_PIN
+#define BACKLIGHT_LEVELS 3
+#endif
+
+#define DEBOUNCE 5
+#define LOCKING_SUPPORT_ENABLE
+#define LOCKING_RESYNC_ENABLE
diff --git a/keyboards/kbdfans/bella/soldered/info.json b/keyboards/kbdfans/bella/soldered/info.json
new file mode 100644
index 000000000..c031c117d
--- /dev/null
+++ b/keyboards/kbdfans/bella/soldered/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "bella_soldered",
+ "url": "",
+ "maintainer": "kbdfans",
+ "width": 16.25,
+ "height": 6.5,
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":2, "y":0}, {"label":"F2", "x":3, "y":0}, {"label":"F3", "x":4, "y":0}, {"label":"F4", "x":5, "y":0}, {"label":"F5", "x":6.5, "y":0}, {"label":"F6", "x":7.5, "y":0}, {"label":"F7", "x":8.5, "y":0}, {"label":"F8", "x":9.5, "y":0}, {"label":"F9", "x":11, "y":0}, {"label":"F10", "x":12, "y":0}, {"label":"F11", "x":13, "y":0}, {"label":"F12", "x":14, "y":0}, {"x":15.25, "y":0}, {"label":"~", "x":0, "y":1.5}, {"label":"!", "x":1, "y":1.5}, {"label":"@", "x":2, "y":1.5}, {"label":"#", "x":3, "y":1.5}, {"label":"$", "x":4, "y":1.5}, {"label":"%", "x":5, "y":1.5}, {"label":"^", "x":6, "y":1.5}, {"label":"&", "x":7, "y":1.5}, {"label":"*", "x":8, "y":1.5}, {"label":"(", "x":9, "y":1.5}, {"label":")", "x":10, "y":1.5}, {"label":"_", "x":11, "y":1.5}, {"label":"+", "x":12, "y":1.5}, {"x":13, "y":1.5}, {"label":"Backspace", "x":14, "y":1.5}, {"x":15.25, "y":1.5}, {"label":"Tab", "x":0, "y":2.5, "w":1.5}, {"label":"Q", "x":1.5, "y":2.5}, {"label":"W", "x":2.5, "y":2.5}, {"label":"E", "x":3.5, "y":2.5}, {"label":"R", "x":4.5, "y":2.5}, {"label":"T", "x":5.5, "y":2.5}, {"label":"Y", "x":6.5, "y":2.5}, {"label":"U", "x":7.5, "y":2.5}, {"label":"I", "x":8.5, "y":2.5}, {"label":"O", "x":9.5, "y":2.5}, {"label":"P", "x":10.5, "y":2.5}, {"label":"{", "x":11.5, "y":2.5}, {"label":"}", "x":12.5, "y":2.5}, {"label":"|", "x":13.5, "y":2.5, "w":1.5}, {"x":15.25, "y":2.5}, {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75}, {"label":"A", "x":1.75, "y":3.5}, {"label":"S", "x":2.75, "y":3.5}, {"label":"D", "x":3.75, "y":3.5}, {"label":"F", "x":4.75, "y":3.5}, {"label":"G", "x":5.75, "y":3.5}, {"label":"H", "x":6.75, "y":3.5}, {"label":"J", "x":7.75, "y":3.5}, {"label":"K", "x":8.75, "y":3.5}, {"label":"L", "x":9.75, "y":3.5}, {"label":":", "x":10.75, "y":3.5}, {"label":"\"", "x":11.75, "y":3.5}, {"label":"Enter", "x":12.75, "y":3.5, "w":2.25}, {"x":15.25, "y":3.5}, {"label":"Shift", "x":0, "y":4.5, "w":1.25}, {"x":1.25, "y":4.5}, {"label":"Z", "x":2.25, "y":4.5}, {"label":"X", "x":3.25, "y":4.5}, {"label":"C", "x":4.25, "y":4.5}, {"label":"V", "x":5.25, "y":4.5}, {"label":"B", "x":6.25, "y":4.5}, {"label":"N", "x":7.25, "y":4.5}, {"label":"M", "x":8.25, "y":4.5}, {"label":"<", "x":9.25, "y":4.5}, {"label":">", "x":10.25, "y":4.5}, {"label":"?", "x":11.25, "y":4.5}, {"label":"Shift", "x":12.25, "y":4.5, "w":1.75}, {"label":"\u2191", "x":14.25, "y":4.5}, {"label":"Ctrl", "x":0, "y":5.5, "w":1.25}, {"label":"Alt", "x":1.25, "y":5.5, "w":1.25}, {"label":"Alt", "x":2.5, "y":5.5, "w":1.25}, {"x":3.75, "y":5.5, "w":6.25}, {"label":"Alt", "x":10, "y":5.5, "w":1.5}, {"label":"Win", "x":11.5, "y":5.5, "w":1.5}, {"label":"\u2190", "x":13.25, "y":5.5}, {"label":"\u2193", "x":14.25, "y":5.5}, {"label":"\u2192", "x":15.25, "y":5.5}]
+ }
+ }
+}
diff --git a/keyboards/kbdfans/bella/soldered/keymaps/default/keymap.c b/keyboards/kbdfans/bella/soldered/keymaps/default/keymap.c
new file mode 100755
index 000000000..fc93b5ded
--- /dev/null
+++ b/keyboards/kbdfans/bella/soldered/keymaps/default/keymap.c
@@ -0,0 +1,36 @@
+/* Copyright 2020 dztech
+ *
+ * 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] = {
+
+ LAYOUT_all(
+ 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_PGUP,
+ 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_GRV, 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,
+ 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_PGDN,
+ KC_LSFT, KC_BSLS, 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_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ LAYOUT_all(
+ 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, 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
+
+};
diff --git a/keyboards/kbdfans/bella/soldered/keymaps/via/keymap.c b/keyboards/kbdfans/bella/soldered/keymaps/via/keymap.c
new file mode 100755
index 000000000..b9c77ce91
--- /dev/null
+++ b/keyboards/kbdfans/bella/soldered/keymaps/via/keymap.c
@@ -0,0 +1,51 @@
+/* Copyright 2020 dztech
+ *
+ * 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] = {
+
+ LAYOUT_all(
+ 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_PGUP,
+ 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_GRV, 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,
+ 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_PGDN,
+ KC_LSFT, KC_BSLS, 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_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ LAYOUT_all(
+ 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, 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ LAYOUT_all(
+ 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, 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ LAYOUT_all(
+ 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, 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
+};
diff --git a/keyboards/kbdfans/bella/soldered/keymaps/via/rules.mk b/keyboards/kbdfans/bella/soldered/keymaps/via/rules.mk
new file mode 100644
index 000000000..36b7ba9cb
--- /dev/null
+++ b/keyboards/kbdfans/bella/soldered/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/kbdfans/bella/soldered/rules.mk b/keyboards/kbdfans/bella/soldered/rules.mk
new file mode 100755
index 000000000..b0ed9e41e
--- /dev/null
+++ b/keyboards/kbdfans/bella/soldered/rules.mk
@@ -0,0 +1,22 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/kbdfans/bella/soldered/soldered.c b/keyboards/kbdfans/bella/soldered/soldered.c
new file mode 100755
index 000000000..602543af2
--- /dev/null
+++ b/keyboards/kbdfans/bella/soldered/soldered.c
@@ -0,0 +1,28 @@
+/* Copyright 2020 dztech
+ *
+ * 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 "soldered.h"
+void matrix_init_kb(void) {
+ setPinOutput(E6);
+ matrix_init_user();
+}
+
+bool led_update_kb(led_t led_state) {
+ bool res = led_update_user(led_state);
+ if(res) {
+ writePin(E6, !led_state.caps_lock);
+ }
+ return res;
+}
diff --git a/keyboards/kbdfans/bella/soldered/soldered.h b/keyboards/kbdfans/bella/soldered/soldered.h
new file mode 100755
index 000000000..cebfc1bc6
--- /dev/null
+++ b/keyboards/kbdfans/bella/soldered/soldered.h
@@ -0,0 +1,34 @@
+/* Copyright 2020 dztech
+ *
+ * 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_all( \
+ K000, K002, K003, K004, K005, K006, K007, K008, K009, K011, K012, K013, K014, K015, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K215, \
+ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K315, \
+ K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K414, \
+ K500, K501, K502, K506, K510, K511, K513, K514, K515 \
+) { \
+ { K000, KC_NO, K002, K003, K004, K005, K006, K007, K008, K009, KC_NO, K011, K012, K013, K014, K015 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO, K215 }, \
+ { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, KC_NO, K315 }, \
+ { K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, KC_NO, K414, KC_NO }, \
+ { K500, K501, K502, KC_NO, KC_NO, KC_NO, K506, KC_NO, KC_NO, KC_NO, K510, K511, KC_NO, K513, K514, K515 } \
+}
diff --git a/keyboards/kbdfans/kbd67/mkii_soldered/info.json b/keyboards/kbdfans/kbd67/mkii_soldered/info.json
index 72c851e35..cb012517a 100644
--- a/keyboards/kbdfans/kbd67/mkii_soldered/info.json
+++ b/keyboards/kbdfans/kbd67/mkii_soldered/info.json
@@ -290,6 +290,78 @@
{"label":"\u2193", "x":14, "y":4},
{"label":"\u2192", "x":15, "y":4}
]
+ },
+ "LAYOUT_65_iso_blocker_split_bs": {
+ "layout": [{"label":"Esc", "x":0, "y":0},
+ {"label":"!", "x":1, "y":0},
+ {"label":"@", "x":2, "y":0},
+ {"label":"#", "x":3, "y":0},
+ {"label":"$", "x":4, "y":0},
+ {"label":"%", "x":5, "y":0},
+ {"label":"^", "x":6, "y":0},
+ {"label":"&", "x":7, "y":0},
+ {"label":"*", "x":8, "y":0},
+ {"label":"(", "x":9, "y":0},
+ {"label":")", "x":10, "y":0},
+ {"label":"_", "x":11, "y":0},
+ {"label":"+", "x":12, "y":0},
+ {"label":"|", "x":13, "y":0},
+ {"label":"Del", "x":14, "y":0},
+ {"label":"Home", "x":15, "y":0},
+ {"label":"Tab", "x":0, "y":1, "w":1.5},
+ {"label":"Q", "x":1.5, "y":1},
+ {"label":"W", "x":2.5, "y":1},
+ {"label":"E", "x":3.5, "y":1},
+ {"label":"R", "x":4.5, "y":1},
+ {"label":"T", "x":5.5, "y":1},
+ {"label":"Y", "x":6.5, "y":1},
+ {"label":"U", "x":7.5, "y":1},
+ {"label":"I", "x":8.5, "y":1},
+ {"label":"O", "x":9.5, "y":1},
+ {"label":"P", "x":10.5, "y":1},
+ {"label":"{", "x":11.5, "y":1},
+ {"label":"}", "x":12.5, "y":1},
+ {"label":"End", "x":15, "y":1},
+ {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
+ {"label":"A", "x":1.75, "y":2},
+ {"label":"S", "x":2.75, "y":2},
+ {"label":"D", "x":3.75, "y":2},
+ {"label":"F", "x":4.75, "y":2},
+ {"label":"G", "x":5.75, "y":2},
+ {"label":"H", "x":6.75, "y":2},
+ {"label":"J", "x":7.75, "y":2},
+ {"label":"K", "x":8.75, "y":2},
+ {"label":"L", "x":9.75, "y":2},
+ {"label":":", "x":10.75, "y":2},
+ {"label":"\"", "x":11.75, "y":2},
+ {"label":"~", "x":12.75, "y":2},
+ {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2},
+ {"label":"PgUp", "x":15, "y":2},
+ {"label":"Shift", "x":0, "y":3, "w":1.25},
+ {"label":"|", "x":1.25, "y":3},
+ {"label":"Z", "x":2.25, "y":3},
+ {"label":"X", "x":3.25, "y":3},
+ {"label":"C", "x":4.25, "y":3},
+ {"label":"V", "x":5.25, "y":3},
+ {"label":"B", "x":6.25, "y":3},
+ {"label":"N", "x":7.25, "y":3},
+ {"label":"M", "x":8.25, "y":3},
+ {"label":"<", "x":9.25, "y":3},
+ {"label":">", "x":10.25, "y":3},
+ {"label":"?", "x":11.25, "y":3},
+ {"label":"Shift", "x":12.25, "y":3, "w":1.75},
+ {"label":"\u2191", "x":14, "y":3},
+ {"label":"PgDn", "x":15, "y":3},
+ {"label":"Ctrl", "x":0, "y":4, "w":1.25},
+ {"label":"Win", "x":1.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":4, "w":1.25},
+ {"x":3.75, "y":4, "w":6.25},
+ {"label":"Alt", "x":10, "y":4, "w":1.25},
+ {"label":"Ctrl", "x":11.25, "y":4, "w":1.25},
+ {"label":"\u2190", "x":13, "y":4},
+ {"label":"\u2193", "x":14, "y":4},
+ {"label":"\u2192", "x":15, "y":4}
+ ]
}
}
}
diff --git a/keyboards/kbdfans/kbd67/mkii_soldered/keymaps/king/keymap.c b/keyboards/kbdfans/kbd67/mkii_soldered/keymaps/king/keymap.c
new file mode 100644
index 000000000..70e2237d3
--- /dev/null
+++ b/keyboards/kbdfans/kbd67/mkii_soldered/keymaps/king/keymap.c
@@ -0,0 +1,65 @@
+ /* Copyright 2020 King Wang Wong
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+
+
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* 0: _QWERTY
+ * ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬───────┬───────┬─────────┐
+ * │ KC_ESC │ KC_1 │ KC_2 │ KC_3 │ KC_4 │ KC_5 │ KC_6 │ KC_7 │ KC_8 │ KC_9 │ KC_0 │ KC_MINS │ KC_EQL │ KC_GRV│ KC_INS│ 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_BSLS │ KC_PGUP │
+ * ├──────────────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴──────────┼─────────┤
+ * │ CTRL │ 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_PGDN │
+ * ├────────────────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────────┬─────────┼─────────┤
+ * │ 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 │ MO(1) │
+ * ├───────────┬─────────┴─┬───────┴───┬─────┴─────────┴───────┬─┴─────────┼─────────┴─────────┴───────┬─┴───────┬─┴───────┬─┴───┬─────────┼─────────┼─────────┤
+ * │ KC_LCTL │ KC_LGUI │ KC_LALT │ KC_SPC │ MO(1) │ KC_BSPC │ KC_RALT │ KC_RCTL │ │ KC_LEFT │ KC_DOWN │ KC_RGHT │
+ * └───────────┴───────────┴───────────┴───────────────────────┴───────────┴───────────────────────────┴─────────┴─────────┴─────┴─────────┴─────────┴─────────┘
+ */
+ [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_GRV, KC_INS, 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_BSLS, KC_PGUP,
+ 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_PGDN,
+ KC_LSFT, 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, MO(1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_BSPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ /* 1: _FN1
+ * ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬───────┬───────┬─────────┐
+ * │ GRAVE │ KC_F1 │ KC_F2 │ KC_F3 │ KC_F4 │ KC_F5 │ KC_F6 │ KC_F7 │ KC_F8 │ KC_F9 │ KC_F10 │ KC_F11 │ KC_F12 │ ____│__ (2) │ RESET │
+ * ├─────────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬──┴───────┼─────────┤
+ * │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ KC_VOLU │
+ * ├──────────────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴──────────┼─────────┤
+ * │ CAPS │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ KC_VOLD │
+ * ├────────────────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────────┬─────────┼─────────┤
+ * │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │
+ * ├───────────┬─────────┴─┬───────┴───┬─────┴─────────┴─────────┴─────────┴─────────┴─────────┴───────┬─┴───────┬─┴───────┬─┴───┬─────────┼─────────┼─────────┤
+ * │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ │ _______ │ _______ │ _______ │
+ * └───────────┴───────────┴───────────┴───────────────────────────────────────────────────────────────┴─────────┴─────────┴─────┴─────────┴─────────┴─────────┘
+ */
+ [1] = LAYOUT_all(
+ 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_MUTE,
+ _______, _______, KC_HOME, KC_UP, KC_END, KC_PGUP, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU,
+ KC_CAPS, _______, KC_LEFT, KC_DOWN, KC_RIGHT, KC_PGDN, _______, _______, _______, _______, _______, _______, _______, KC_VOLD,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+}; \ No newline at end of file
diff --git a/keyboards/kbdfans/kbd67/mkii_soldered/mkii_soldered.h b/keyboards/kbdfans/kbd67/mkii_soldered/mkii_soldered.h
index 6b80aa20b..48268d0be 100644
--- a/keyboards/kbdfans/kbd67/mkii_soldered/mkii_soldered.h
+++ b/keyboards/kbdfans/kbd67/mkii_soldered/mkii_soldered.h
@@ -74,14 +74,29 @@
#define LAYOUT_65_iso_blocker( \
K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \
K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K114, \
- K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K113, K213, K214, \
K300, K404, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314, \
K400, K401, K402, K405, K409, K410, K411, K413, K414 \
) \
{ \
{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \
- { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, KC_NO, K114 }, \
- { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, KC_NO, K213, K214 }, \
{ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, K314 }, \
{ K400, K401, K402, KC_NO, K404, K405, KC_NO, KC_NO, KC_NO, K409, K410, K411, KC_NO, K413, K414 } \
}
+
+#define LAYOUT_65_iso_blocker_split_bs( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K212, K014, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K114, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K113, K213, K214, \
+ K300, K404, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314, \
+ K400, K401, K402, K405, K409, K410, K411, K413, K414 \
+) \
+{ \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214 }, \
+ { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, K314 }, \
+ { K400, K401, K402, KC_NO, K404, K405, KC_NO, KC_NO, KC_NO, K409, K410, K411, KC_NO, K413, K414 } \
+}
diff --git a/keyboards/kbdfans/kbd75/keymaps/ethan605/keymap.c b/keyboards/kbdfans/kbd75/keymaps/ethan605/keymap.c
new file mode 100644
index 000000000..4a987b9a9
--- /dev/null
+++ b/keyboards/kbdfans/kbd75/keymaps/ethan605/keymap.c
@@ -0,0 +1,67 @@
+/* Copyright 2020 @ethan605
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* 0: Qwerty layer
+ * ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+ * │ ESC │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │ INS │ DEL │ FN │
+ * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┴─────┼─────┤
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ BSPC │HOME │
+ * ├─────┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬────────┼─────┤
+ * │ TAB │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ BSLS │END │
+ * ├────────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴────────┼─────┤
+ * │ LCTRL │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ ENTER │PGUP │
+ * ├─────────┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴───────┬─────┼─────┤
+ * │ LSHFT │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ RSHFT │ UP │PGDN │
+ * ├──────┬─────┴─┬───┴──┬──┴─────┴─────┴─────┴─────┴─────┴────┬┴────┬┴────┬┴────┬─────┼─────┼─────┤
+ * │ CAPS │ LALT │ LCMD │ SPC │RCMD │RALT │RCTL │LEFT │DOWN │RIGHT│
+ * └──────┴───────┴──────┴─────────────────────────────────────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+ [0] = LAYOUT(
+ 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_INS, KC_DEL, MO(1),
+ 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_DEL, KC_BSPC, KC_HOME,
+ 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_END,
+ 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_PGUP,
+ KC_LSFT, MO(1), 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_CAPS, KC_LALT, KC_LCMD, KC_SPC, KC_SPC, KC_SPC, KC_RCMD, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ /* 1: Function layer
+ * ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ FN │
+ * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┴─────┼─────┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ RESET │ │
+ * ├─────┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬────────┼─────┤
+ * │ │ TOG │ MOD │ HU+ │ HU- │ SA+ │ SA- │ VA+ │ VA- │ │ │ │ │ │ │ // RGB controls
+ * ├────────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴────────┼─────┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├─────────┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴───────┬─────┼─────┤
+ * │ │ │ │ │ DEC │ TOG │ INC │STEP │ │ │ │ │ │ │ // Backlight controls
+ * ├──────┬─────┴─┬───┴──┬──┴─────┴─────┴─────┴─────┴─────┴────┬┴────┬┴────┬┴────┬─────┼─────┼─────┤
+ * │ │ │ │ │ │ │ │ │ │ │
+ * └──────┴───────┴──────┴─────────────────────────────────────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+ [1] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______,
+ _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, BL_DEC, BL_TOGG, BL_INC, BL_STEP, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+};
diff --git a/keyboards/keebio/iris/keymaps/dcompact/keymap.c b/keyboards/keebio/iris/keymaps/dcompact/keymap.c
index ec1ffac8c..90e48c9c9 100644
--- a/keyboards/keebio/iris/keymaps/dcompact/keymap.c
+++ b/keyboards/keebio/iris/keymaps/dcompact/keymap.c
@@ -9,6 +9,19 @@
#define WKSP_U LALT(LCTL(KC_UP))
#define WKSP_R LALT(LCTL(KC_RGHT))
+#define AM_CYC A(S(KC_SPC))
+#define AM_SHR A(S(KC_COMM))
+#define AM_GRW A(S(KC_DOT))
+#define AM_REL A(S(KC_Z))
+#define AM_LFT A(S(KC_H))
+#define AM_RGH A(S(KC_L))
+#define AM_CW A(S(KC_K))
+#define AM_CCW A(S(KC_J))
+#define AM_TLL A(S(KC_1))
+#define AM_TLW A(S(KC_2))
+#define AM_BSP A(S(KC_3))
+#define AM_FUL A(S(KC_4))
+
enum custom_layers {
_BASE,
_LOWER,
@@ -52,11 +65,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_LOWER] = LAYOUT(
//┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_PGDN, KC_PGUP, KC_END, XXXXXXX,
+ XXXXXXX, AM_CYC, AM_SHR, AM_GRW, AM_REL, XXXXXXX, XXXXXXX, KC_HOME, KC_PGDN, KC_PGUP, KC_END, XXXXXXX,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
- XXXXXXX, KC_PSCR, KC_MENU, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX,
+ XXXXXXX, AM_LFT, AM_CCW, AM_CW, AM_RGH, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
- XXXXXXX, KC_CAPS, KC_LNUM, KC_INS, XXXXXXX, XXXXXXX, XXXXXXX, WKSP_L, WKSP_D, WKSP_U, WKSP_R, XXXXXXX,
+ XXXXXXX, AM_TLL, AM_TLW, AM_BSP, AM_FUL, XXXXXXX, XXXXXXX, WKSP_L, WKSP_D, WKSP_U, WKSP_R, XXXXXXX,
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
_______, XXXXXXX, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
//└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
@@ -138,7 +151,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
- _______, _______, _______, _______, _______, BL_STEP, RGB_TOG, RGB_HUI, RGB_SAI, RGB_SAI, _______, _______,
+ _______, _______, _______, _______, _______, BL_STEP, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, _______, _______,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
_______, _______, _______, _______, _______, BL_BRTG, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, _______, _______,
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
diff --git a/keyboards/kingly_keys/romac_plus/config.h b/keyboards/kingly_keys/romac_plus/config.h
index 503a463f5..5ea8321de 100644
--- a/keyboards/kingly_keys/romac_plus/config.h
+++ b/keyboards/kingly_keys/romac_plus/config.h
@@ -3,8 +3,8 @@
#include "config_common.h"
/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6060
+#define VENDOR_ID 0x4B4B
+#define PRODUCT_ID 0x0002
#define DEVICE_VER 0x0001
#define MANUFACTURER TheRoyalSweatshirt
#define PRODUCT RoMac+
diff --git a/keyboards/kyria/kyria.c b/keyboards/kyria/kyria.c
index 21ed5e84c..1692093fb 100644
--- a/keyboards/kyria/kyria.c
+++ b/keyboards/kyria/kyria.c
@@ -14,3 +14,4 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "kyria.h"
+
diff --git a/keyboards/kyria/rev1/rev1.c b/keyboards/kyria/rev1/rev1.c
index 9aedcc130..970a359e7 100644
--- a/keyboards/kyria/rev1/rev1.c
+++ b/keyboards/kyria/rev1/rev1.c
@@ -1 +1,17 @@
-#include "rev1.h" \ No newline at end of file
+#include "rev1.h"
+
+#ifdef SWAP_HANDS_ENABLE
+__attribute__ ((weak))
+
+const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
+ {{0, 4}, {1, 4}, {2, 4}, {3, 4}, {4, 4}, {5, 4}, {6, 4}, {7, 4}},
+ {{0, 5}, {1, 5}, {2, 5}, {3, 5}, {4, 5}, {5, 5}, {6, 5}, {7, 5}},
+ {{0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6}, {5, 6}, {6, 6}, {7, 6}},
+ {{0, 7}, {1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7}, {6, 7}, {7, 7}},
+ {{0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}, {5, 0}, {6, 0}, {7, 0}},
+ {{0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1}, {5, 1}, {6, 1}, {7, 1}},
+ {{0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}, {5, 2}, {6, 2}, {7, 2}},
+ {{0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}, {5, 3}, {6, 3}, {7, 3}}
+};
+
+#endif
diff --git a/keyboards/lazydesigners/the30/keymaps/via/keymap.c b/keyboards/lazydesigners/the30/keymaps/via/keymap.c
new file mode 100644
index 000000000..1a1b10fd5
--- /dev/null
+++ b/keyboards/lazydesigners/the30/keymaps/via/keymap.c
@@ -0,0 +1,39 @@
+/* Copyright 2020 LAZYDESIGNERS
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ortho_3x10(
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT,
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, MO(1)
+ ),
+ [1] = LAYOUT_ortho_3x10(
+ RESET, 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_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
+ ),
+ [2] = LAYOUT_ortho_3x10(
+ 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_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
+ ),
+ [3] = LAYOUT_ortho_3x10(
+ 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_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
+ ),
+};
diff --git a/keyboards/lazydesigners/the30/keymaps/via/rules.mk b/keyboards/lazydesigners/the30/keymaps/via/rules.mk
new file mode 100644
index 000000000..36b7ba9cb
--- /dev/null
+++ b/keyboards/lazydesigners/the30/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/lily58/keymaps/bcat/keymap.c b/keyboards/lily58/keymaps/bcat/keymap.c
index 294f9e6c5..69864cd08 100644
--- a/keyboards/lily58/keymaps/bcat/keymap.c
+++ b/keyboards/lily58/keymaps/bcat/keymap.c
@@ -13,9 +13,9 @@ enum layer {
#define LY_RSE MO(LAYER_RAISE)
#define KY_CSPC LCTL(KC_SPC)
-#define KY_LOCK LGUI(KC_L)
-#define KY_WINL LGUI(KC_LEFT)
-#define KY_WINR LGUI(KC_RGHT)
+#define KY_ZMIN LCTL(KC_EQL)
+#define KY_ZMOUT LCTL(KC_MINS)
+#define KY_ZMRST LCTL(KC_0)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Default layer: http://www.keyboard-layout-editor.com/#/gists/e0eb3af65961e9fd612dcff3ddd88e4f */
@@ -31,7 +31,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[LAYER_LOWER] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
MC_ALTT, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
- KY_CSPC, KY_WINL, KY_WINR, KY_LOCK, KC_WBAK, KC_WFWD, KC_PIPE, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_TILD,
+ KY_CSPC, KY_ZMRST, KY_ZMOUT, KY_ZMIN, KC_WBAK, KC_WFWD, KC_PIPE, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_TILD,
_______, KC_APP, KC_PSCR, KC_SLCK, KC_PAUS, KC_LGUI, _______, _______, KC_BSLS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_GRV,
_______, _______, _______, _______, _______, _______, _______, _______
),
diff --git a/keyboards/lily58/keymaps/bcat/readme.md b/keyboards/lily58/keymaps/bcat/readme.md
index 6235ff13f..84c2fc335 100644
--- a/keyboards/lily58/keymaps/bcat/readme.md
+++ b/keyboards/lily58/keymaps/bcat/readme.md
@@ -22,7 +22,7 @@ browser back/forward navigation keys.
## Lower layer
-![Lower layer layout](https://i.imgur.com/JVF1p1Q.png)
+![Lower layer layout](https://i.imgur.com/sNKWpUC.png)
([KLE](http://www.keyboard-layout-editor.com/#/gists/19ad0d3b5d745fbb2818db09740f5a11))
diff --git a/keyboards/lily58/keymaps/drasbeck/config.h b/keyboards/lily58/keymaps/drasbeck/config.h
new file mode 100644
index 000000000..ffaf5f4bc
--- /dev/null
+++ b/keyboards/lily58/keymaps/drasbeck/config.h
@@ -0,0 +1,46 @@
+/*
+Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) 2020 Max Drasbeck
+ *
+ * You are free to:
+ *
+ * Share — copy and redistribute the material in any medium or format
+ * Adapt — remix, transform, and build upon the material
+ * for any purpose, even commercially.
+ *
+ * The licensor cannot revoke these freedoms as long as you follow the license terms.
+*/
+
+#pragma once
+
+//#define USE_MATRIX_I2C
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+#define USE_SERIAL_PD2
+
+#define ENCODERS_PAD_A { F4 }
+#define ENCODERS_PAD_B { F5 }
+#define ENCODER_RESOLUTION 4
+
+#define TAPPING_FORCE_HOLD
+#define TAPPING_TERM 180
+
+#undef RGBLED_NUM
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 27
+#define RGBLIGHT_LIMIT_VAL 120
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
+
+// Underglow
+/*
+#undef RGBLED_NUM
+#define RGBLED_NUM 14 // Number of LEDs
+#define RGBLIGHT_ANIMATIONS
+#define RGBLIGHT_SLEEP
+*/
diff --git a/keyboards/lily58/keymaps/drasbeck/keymap.c b/keyboards/lily58/keymaps/drasbeck/keymap.c
new file mode 100644
index 000000000..0fc1bfb79
--- /dev/null
+++ b/keyboards/lily58/keymaps/drasbeck/keymap.c
@@ -0,0 +1,166 @@
+/* Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) 2020 Max Drasbeck
+ *
+ * You are free to:
+ *
+ * Share — copy and redistribute the material in any medium or format
+ * Adapt — remix, transform, and build upon the material
+ * for any purpose, even commercially.
+ *
+ * The licensor cannot revoke these freedoms as long as you follow the license terms.
+ */
+
+#include QMK_KEYBOARD_H
+
+extern uint8_t is_master;
+
+enum layers {
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+};
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ LOWER,
+ RAISE,
+ ADJUST,
+};
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_NO, KC_MUTE, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_SFTENT,
+ KC_LALT, KC_LGUI, MO(1), KC_SPC, KC_SPC, MO(2), KC_NUBS, KC_LCTL
+ ),
+
+ [_LOWER] = LAYOUT(
+ 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_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PGUP, KC_MINS, KC_EQL, KC_RBRC,
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_NO, KC_HOME, KC_PGDN, KC_END, KC_NO, KC_NUHS,
+ KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_RO, KC_ENT,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [_RAISE] = LAYOUT(
+ KC_TRNS, RALT(KC_1), RALT(KC_2), RALT(KC_3), RALT(KC_4), RALT(KC_5), RALT(KC_6), RALT(KC_7), RALT(KC_8), RALT(KC_9), RALT(KC_0), KC_DEL,
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_UP, KC_MINS, KC_EQL, KC_RBRC,
+ KC_ESC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NUHS,
+ KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_VOLD, KC_VOLU, KC_MUTE, KC_RO, KC_SFTENT,
+ KC_RALT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RALT(KC_NUBS), KC_TRNS
+ ),
+
+ [_ADJUST] = LAYOUT(
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
+
+int RGB_current_mode;
+
+void matrix_init_user(void) {
+#ifdef RGBLIGHT_ENABLE
+ RGB_current_mode = rgblight_config.mode;
+#endif
+}
+
+//SSD1306 OLED update loop, make sure to enable OLED_DRIVER_ENABLE=yes in rules.mk
+#ifdef OLED_DRIVER_ENABLE
+
+oled_rotation_t oled_init_user(oled_rotation_t rotation) {
+ if (!is_keyboard_master())
+ return OLED_ROTATION_180; // flips the display 180 degrees if offhand
+ return rotation;
+}
+
+// When you add source files to SRC in rules.mk, you can use functions.
+const char *read_layer_state(void);
+const char *read_logo(void);
+void set_keylog(uint16_t keycode, keyrecord_t *record);
+//const char *read_keylog(void);
+//const char *read_keylogs(void);
+
+// const char *read_mode_icon(bool swap);
+// const char *read_host_led_state(void);
+// void set_timelog(void);
+// const char *read_timelog(void);
+
+void oled_task_user(void) {
+ if (is_keyboard_master()) {
+ // If you want to change the display of OLED, you need to change here
+ oled_write_ln(read_layer_state(), false);
+ //oled_write_ln(read_keylog(), false);
+ //oled_write_ln(read_keylogs(), false);
+ //oled_write_ln(read_mode_icon(keymap_config.swap_lalt_lgui), false);
+ //oled_write_ln(read_host_led_state(), false);
+ //oled_write_ln(read_timelog(), false);
+ } else {
+ oled_write(read_logo(), false);
+ }
+}
+#endif // OLED_DRIVER_ENABLE
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+#ifdef OLED_DRIVER_ENABLE
+ set_keylog(keycode, record);
+#endif
+ // set_timelog();
+ }
+
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ } else {
+ layer_off(_LOWER);
+ }
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ } else {
+ layer_off(_RAISE);
+ }
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ return false;
+ break;
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+#ifdef ENCODER_ENABLE
+void encoder_update_user(uint8_t index, bool clockwise) {
+ // index 1 == minion side
+ if (index == 1) {
+ if (clockwise) {
+ tap_code(KC_VOLD);
+ } else {
+ tap_code(KC_VOLU);
+ }
+ }
+}
+#endif
diff --git a/keyboards/lily58/keymaps/drasbeck/readme.md b/keyboards/lily58/keymaps/drasbeck/readme.md
new file mode 100644
index 000000000..51d099107
--- /dev/null
+++ b/keyboards/lily58/keymaps/drasbeck/readme.md
@@ -0,0 +1,14 @@
+## Danish (Dansk) layout for the Lily58 Pro
+Keyboard: Lily58 Pro
+Keys: Lily58 Pro is 6×4+5keys column-staggered split keyboard, optinal with a rotary encoder.
+Flash instructions: Flash each side of the keyboard, minding whether the side uses a Pro Micro or Elite-C controller.
+
+### Layout
+Danish special characters on main layer, moving other characters to mainly raised layer.
+
+Layer 0 = default
+Layer 1 = lower
+Layer 2 = raise
+
+![keymap](https://drasbeck.dk/public/keymap_lily58pro_danskish.png)
+
diff --git a/keyboards/lily58/keymaps/drasbeck/rules.mk b/keyboards/lily58/keymaps/drasbeck/rules.mk
new file mode 100644
index 000000000..ff8b816e3
--- /dev/null
+++ b/keyboards/lily58/keymaps/drasbeck/rules.mk
@@ -0,0 +1,28 @@
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+AUDIO_ENABLE = no # Audio output
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+SWAP_HANDS_ENABLE = no # Enable one-hand typing
+OLED_DRIVER_ENABLE = yes # OLED display
+ENCODER_ENABLE = yes # Enable encoder
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+# If you want to change the display of OLED, you need to change here
+SRC += ./lib/rgb_state_reader.c \
+ ./lib/layer_state_reader.c \
+ ./lib/logo_reader.c \
+ ./lib/keylogger.c \
+ # ./lib/mode_icon_reader.c \
+ # ./lib/host_led_state_reader.c \
+ # ./lib/timelogger.c \
diff --git a/keyboards/lily58/keymaps/muuko/config.h b/keyboards/lily58/keymaps/muuko/config.h
new file mode 100644
index 000000000..e963355bd
--- /dev/null
+++ b/keyboards/lily58/keymaps/muuko/config.h
@@ -0,0 +1,42 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+
+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
+
+#define EE_HANDS
+#define USE_SERIAL_PD2
+
+#define OLED_TIMEOUT 300000
+
+#define NO_MUSIC_MODE
+
+#define PERMISSIVE_HOLD
+#define IGNORE_MOD_TAP_INTERRUPT
+
+#ifdef TAPPING_TERM
+#undef TAPPING_TERM
+#endif
+#define TAPPING_TERM 120
+
+#ifdef COMBO_COUNT
+#undef COMBO_COUNT
+#endif
+#define COMBO_COUNT 2
+#define COMBO_TERM 20
diff --git a/keyboards/lily58/keymaps/muuko/keymap.c b/keyboards/lily58/keymaps/muuko/keymap.c
new file mode 100644
index 000000000..b8afa0aa4
--- /dev/null
+++ b/keyboards/lily58/keymaps/muuko/keymap.c
@@ -0,0 +1,184 @@
+/* Copyright 2020 @muuko
+ *
+ * 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 <stdio.h>
+#include <string.h>
+
+#define IDLE_FRAMES 5
+#define IDLE_SPEED 20
+#define TAP_FRAMES 2
+#define TAP_SPEED 40
+#define ANIM_FRAME_DURATION 200
+#define ANIM_SIZE 512
+
+char wpm[16];
+uint32_t anim_timer = 0;
+uint32_t anim_sleep = 0;
+uint8_t current_idle_frame = 0;
+uint8_t current_tap_frame = 0;
+
+static long int oled_timeout = 300000;
+
+enum combos { ESCAPE_COMBO, DELETE_COMBO };
+const uint16_t PROGMEM escape_combo[] = { KC_GRV, KC_1, COMBO_END };
+const uint16_t PROGMEM delete_combo[] = { KC_DOT, KC_SLSH, COMBO_END };
+combo_t key_combos[COMBO_COUNT] = {
+ [ESCAPE_COMBO] = COMBO(escape_combo, KC_ESC),
+ [DELETE_COMBO] = COMBO(delete_combo, KC_DEL)
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, LCA_T(KC_MINS),
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, RGUI_T(KC_EQL),
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, RCTL_T(KC_QUOT),
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LBRC, KC_RBRC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, RSFT_T(KC_BSLS),
+ KC_LGUI, KC_LALT, LT(1, KC_DEL), KC_SPC, KC_ENT, KC_BSPC, MO(1), TG(1)
+ ),
+ [1] = LAYOUT(
+ 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_TAB, KC_MNXT, KC_HOME, KC_UP, KC_PGUP, KC_VOLU, KC_PMNS, KC_P7, KC_P8, KC_P9, KC_PSLS, LCTL(KC_RGUI),
+ KC_LCTL, KC_MPLY, KC_LEFT, KC_DOWN, KC_RGHT, KC_VOLD, KC_PPLS, KC_P4, KC_P5, KC_P6, KC_PAST, RCTL_T(KC_PEQL),
+ KC_LSFT, KC_MPRV, KC_END, KC_DEL, KC_PGDN, KC_MUTE, KC_LPRN, KC_RPRN, KC_P0, KC_P1, KC_P2, KC_P3, C_S_T(KC_PDOT), KC_RSFT,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
+
+#ifdef OLED_DRIVER_ENABLE
+oled_rotation_t oled_init_user(oled_rotation_t rotation) {
+ if (!is_keyboard_master()) return OLED_ROTATION_180;
+ else return rotation;
+}
+
+static void render_status(void) {
+ oled_write_P(PSTR(" layer "), false);
+
+ switch (get_highest_layer(layer_state)) {
+ case 0:
+ oled_write_P(PSTR(" 0"), false);
+ break;
+ case 1:
+ oled_write_P(PSTR(" 1"), false);
+ break;
+ default:
+ oled_write_P(PSTR(" ?"), false);
+ break;
+ }
+
+ oled_write_P(PSTR("\n\n "), false);
+ sprintf(wpm, "%03d", get_current_wpm());
+ oled_write(wpm, false);
+ oled_write_P(PSTR(" wpm"), false);
+}
+
+static void render_anim(void) {
+ static const char PROGMEM idle[IDLE_FRAMES][ANIM_SIZE] = {
+ {
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,16,8,8,4,4,4,8,48,64,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,100,130,2,2,2,2,2,1,0,0,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,192,193,193,194,4,8,16,32,64,128,0,0,0,128,128,128,128,64,64,
+ 64,64,32,32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,56,4,3,0,0,0,0,0,0,0,12,12,12,13,1,0,64,160,33,34,18,17,17,17,9,8,8,8,8,4,4,8,8,16,16,16,16,16,17,15,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1,1,1,1,2,2,4,4,8,8,8,8,8,7,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+ },
+ {
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,16,8,8,4,4,4,8,48,64,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,100,130,2,2,2,2,2,1,0,0,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,192,193,193,194,4,8,16,32,64,128,0,0,0,128,128,128,128,64,64,
+ 64,64,32,32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,56,4,3,0,0,0,0,0,0,0,12,12,12,13,1,0,64,160,33,34,18,17,17,17,9,8,8,8,8,4,4,8,8,16,16,16,16,16,17,15,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1,1,1,1,2,2,4,4,8,8,8,8,8,
+ 7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+ },
+ {
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,64,64,64,64,32,32,32,32,16,8,4,2,2,4,24,96,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60,194,1,1,2,2,4,4,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,96,0,129,130,130,132,8,16,32,64,128,0,0,0,0,128,128,128,128,64,64,64,64,32,
+ 32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,112,25,6,0,0,0,0,0,0,0,24,24,24,27,3,0,64,160,34,36,20,18,18,18,11,8,8,8,8,5,5,9,9,16,16,16,16,16,17,15,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1,1,1,1,2,2,4,4,8,8,8,8,8,7,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+ },
+ {
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,8,4,2,1,1,2,12,48,64,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,225,0,0,1,1,2,2,1,0,0,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,192,193,193,194,4,8,16,32,64,128,0,0,0,128,128,128,128,64,64,
+ 64,64,32,32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,112,12,3,0,0,0,0,0,0,0,12,12,12,13,1,0,64,160,33,34,18,17,17,17,9,8,8,8,8,4,4,8,8,16,16,16,16,16,17,15,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1,1,1,1,2,2,4,4,8,8,8,8,8,
+ 7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+ },
+ {
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,8,8,4,2,2,2,4,56,64,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,226,1,1,2,2,2,2,1,0,0,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,192,193,193,194,4,8,16,32,64,128,0,0,0,128,128,128,128,64,64,64,64,
+ 32,32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,112,12,3,0,0,0,0,0,0,0,12,12,12,13,1,0,64,160,33,34,18,17,17,17,9,8,8,8,8,4,4,8,8,16,16,16,16,16,17,15,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1,1,1,1,2,2,4,4,8,8,8,8,8,7,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+ }
+ };
+ static const char PROGMEM prep[][ANIM_SIZE] = {
+ {
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,8,4,2,1,1,2,12,48,64,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,225,0,0,1,1,2,2,129,128,128,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,0,1,225,26,6,9,49,53,1,138,124,0,0,128,128,128,128,64,64,
+ 64,64,32,32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,112,12,3,0,0,24,6,5,152,153,132,195,124,65,65,64,64,32,33,34,18,17,17,17,9,8,8,8,8,4,4,4,4,4,4,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+ }
+ };
+ static const char PROGMEM tap[TAP_FRAMES][ANIM_SIZE] = {
+ {
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,8,4,2,1,1,2,12,48,64,128,0,0,0,0,0,0,0,248,248,248,248,0,0,0,0,0,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,225,0,0,1,1,2,2,129,128,128,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,0,1,1,2,4,8,16,32,67,135,7,1,0,184,188,190,159,
+ 95,95,79,76,32,32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,112,12,3,0,0,24,6,5,152,153,132,67,124,65,65,64,64,32,33,34,18,17,17,17,9,8,8,8,8,4,4,8,8,16,16,16,16,16,17,15,1,61,124,252,252,252,252,252,60,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1,
+ 1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+ },
+ {
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,8,4,2,1,1,2,12,48,64,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,225,0,0,1,1,2,2,1,0,0,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,0,1,225,26,6,9,49,53,1,138,124,0,0,128,128,128,128,64,64,64,64,32,
+ 32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,112,12,3,0,0,0,0,0,0,0,0,0,0,1,1,0,64,160,33,34,18,17,17,17,9,8,8,8,8,4,4,4,4,4,4,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,122,122,121,121,121,121,57,49,2,2,4,4,8,8,8,136,136,135,128,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+ }
+ };
+
+ void animation_phase(void) {
+ if (get_current_wpm() <= IDLE_SPEED) {
+ current_idle_frame = (current_idle_frame + 1) % IDLE_FRAMES;
+
+ oled_write_raw_P(idle[abs((IDLE_FRAMES - 1) - current_idle_frame)], ANIM_SIZE);
+ }
+
+ if (get_current_wpm() > IDLE_SPEED && get_current_wpm() < TAP_SPEED) {
+ oled_write_raw_P(prep[0], ANIM_SIZE);
+ }
+
+ if (get_current_wpm() >= TAP_SPEED) {
+ current_tap_frame = (current_tap_frame + 1) % TAP_FRAMES;
+
+ oled_write_raw_P(tap[abs((TAP_FRAMES - 1) - current_tap_frame)], ANIM_SIZE);
+ }
+ }
+
+ sprintf(wpm, "%03d", get_current_wpm());
+
+ if (strcmp(wpm, "000") != 0) {
+ anim_sleep = timer_read32();
+ } else {
+ if (timer_elapsed32(anim_sleep) > oled_timeout) {
+ anim_sleep = 0;
+ }
+ }
+
+ if (timer_elapsed32(anim_sleep) > oled_timeout) {
+ oled_off();
+ } else {
+ oled_on();
+
+ if (timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) {
+ anim_timer = timer_read32();
+
+ animation_phase();
+ }
+ }
+}
+
+void oled_task_user(void) {
+ if (is_keyboard_master()) {
+ render_status();
+ } else {
+ render_anim();
+ }
+}
+#endif
diff --git a/keyboards/lily58/keymaps/muuko/rules.mk b/keyboards/lily58/keymaps/muuko/rules.mk
new file mode 100644
index 000000000..3f958dff3
--- /dev/null
+++ b/keyboards/lily58/keymaps/muuko/rules.mk
@@ -0,0 +1,4 @@
+OLED_DRIVER_ENABLE = yes
+WPM_ENABLE = yes
+EXTRAKEY_ENABLE = yes
+COMBO_ENABLE = yes
diff --git a/keyboards/longnald/corin/config.h b/keyboards/longnald/corin/config.h
new file mode 100644
index 000000000..12be8ba27
--- /dev/null
+++ b/keyboards/longnald/corin/config.h
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2020 Longnald <support@longnald.com>
+ * Copyright (C) 2020 Seaton Jiang <seaton@vtrois.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 3 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 <https://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x5633
+#define PRODUCT_ID 0x1024
+#define DEVICE_VER 0x0004
+#define MANUFACTURER Longnald
+#define PRODUCT Corin
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+/* Keyboard Matrix Assignments */
+#define MATRIX_ROW_PINS { F4, F0, B2, B3, D5 }
+#define MATRIX_COL_PINS { F7, F6, F1, F5, B1, E6, D4, B7, D1, D2, D0, B4, B6, C6, C7 }
+
+#define DIODE_DIRECTION COL2ROW
+
+#define RGB_DI_PIN D3
+#ifdef RGB_DI_PIN
+# define RGBLED_NUM 64
+# define RGBLIGHT_HUE_STEP 20
+# define RGBLIGHT_SAT_STEP 20
+# define RGBLIGHT_VAL_STEP 40
+# define RGBLIGHT_LIMIT_VAL 200
+# define RGBLIGHT_SLEEP
+# define RGBLIGHT_EFFECT_BREATHING
+# define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+# define RGBLIGHT_EFFECT_SNAKE
+# define RGBLIGHT_EFFECT_STATIC_GRADIENT
+#endif
diff --git a/keyboards/longnald/corin/corin.c b/keyboards/longnald/corin/corin.c
new file mode 100644
index 000000000..fabe3686d
--- /dev/null
+++ b/keyboards/longnald/corin/corin.c
@@ -0,0 +1,19 @@
+/*
+ * Copyright (C) 2020 Longnald <support@longnald.com>
+ * Copyright (C) 2020 Seaton Jiang <seaton@vtrois.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 3 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 <https://www.gnu.org/licenses/>.
+ */
+
+#include "corin.h" \ No newline at end of file
diff --git a/keyboards/longnald/corin/corin.h b/keyboards/longnald/corin/corin.h
new file mode 100644
index 000000000..fa727c3c7
--- /dev/null
+++ b/keyboards/longnald/corin/corin.h
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2020 Longnald <support@longnald.com>
+ * Copyright (C) 2020 Seaton Jiang <seaton@vtrois.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 3 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 <https://www.gnu.org/licenses/>.
+ */
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT_64_ansi( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0E, \
+ K10, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, \
+ K20, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \
+ K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
+ K40, K41, K43, K46, K4A, K4B, K4C, K4D, K4E \
+) \
+{ \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, KC_NO, K0E }, \
+ { K10, KC_NO, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E }, \
+ { K20, KC_NO, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, KC_NO }, \
+ { KC_NO, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \
+ { K40, K41, KC_NO, K43, KC_NO, KC_NO, K46, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D, K4E } \
+}
diff --git a/keyboards/longnald/corin/info.json b/keyboards/longnald/corin/info.json
new file mode 100644
index 000000000..e0faf2209
--- /dev/null
+++ b/keyboards/longnald/corin/info.json
@@ -0,0 +1,77 @@
+{
+ "keyboard_name": "Corin",
+ "url": "https://github.com/longnald/corin",
+ "maintainer": "Seaton Jiang <seaton@vtrois.com>",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_64_ansi": {
+ "layout": [
+ { "label": "K00 (F4,F7)", "x": 0, "y": 0 },
+ { "label": "K01 (F4,F6)", "x": 1, "y": 0 },
+ { "label": "K02 (F4,F1)", "x": 2, "y": 0 },
+ { "label": "K03 (F4,F5)", "x": 3, "y": 0 },
+ { "label": "K04 (F4,B1)", "x": 4, "y": 0 },
+ { "label": "K05 (F4,E6)", "x": 5, "y": 0 },
+ { "label": "K06 (F4,D6)", "x": 6, "y": 0 },
+ { "label": "K07 (F4,B7)", "x": 7, "y": 0 },
+ { "label": "K08 (F4,D1)", "x": 8, "y": 0 },
+ { "label": "K09 (F4,D2)", "x": 9, "y": 0 },
+ { "label": "K0A (F4,D0)", "x": 10, "y": 0 },
+ { "label": "K0B (F4,B4)", "x": 11, "y": 0 },
+ { "label": "K0C (F4,B6)", "x": 12, "y": 0 },
+ { "label": "K0E (F4,C7)", "x": 13, "y": 0, "w": 2 },
+ { "label": "K10 (F0,F7)", "x": 0, "y": 1, "w": 1.5 },
+ { "label": "K12 (F0,F1)", "x": 1.5, "y": 1 },
+ { "label": "K13 (F0,F5)", "x": 2.5, "y": 1 },
+ { "label": "K14 (F0,B1)", "x": 3.5, "y": 1 },
+ { "label": "K15 (F0,E6)", "x": 4.5, "y": 1 },
+ { "label": "K16 (F0,D6)", "x": 5.5, "y": 1 },
+ { "label": "K17 (F0,B7)", "x": 6.5, "y": 1 },
+ { "label": "K18 (F0,D1)", "x": 7.5, "y": 1 },
+ { "label": "K19 (F0,D2)", "x": 8.5, "y": 1 },
+ { "label": "K1A (F0,D0)", "x": 9.5, "y": 1 },
+ { "label": "K1B (F0,B4)", "x": 10.5, "y": 1 },
+ { "label": "K1C (F0,B6)", "x": 11.5, "y": 1 },
+ { "label": "K1D (F0,C6)", "x": 12.5, "y": 1 },
+ { "label": "K1E (F0,C7)", "x": 13.5, "y": 1, "w": 1.5 },
+ { "label": "K20 (B2,F7)", "x": 0, "y": 2, "w": 1.75 },
+ { "label": "K22 (B2,F1)", "x": 1.75, "y": 2 },
+ { "label": "K23 (B2,F5)", "x": 2.75, "y": 2 },
+ { "label": "K24 (B2,B1)", "x": 3.75, "y": 2 },
+ { "label": "K25 (B2,E6)", "x": 4.75, "y": 2 },
+ { "label": "K26 (B2,D6)", "x": 5.75, "y": 2 },
+ { "label": "K27 (B2,B7)", "x": 6.75, "y": 2 },
+ { "label": "K28 (B2,D1)", "x": 7.75, "y": 2 },
+ { "label": "K29 (B2,D2)", "x": 8.75, "y": 2 },
+ { "label": "K2A (B2,D0)", "x": 9.75, "y": 2 },
+ { "label": "K2B (B2,B4)", "x": 10.75, "y": 2 },
+ { "label": "K2C (B2,B6)", "x": 11.75, "y": 2 },
+ { "label": "K2D (B2,C6)", "x": 12.75, "y": 2, "w": 2.25 },
+ { "label": "K31 (B3,F6)", "x": 0, "y": 3, "w": 2 },
+ { "label": "K32 (B3,F1)", "x": 2, "y": 3 },
+ { "label": "K33 (B3,F5)", "x": 3, "y": 3 },
+ { "label": "K34 (B3,B1)", "x": 4, "y": 3 },
+ { "label": "K35 (B3,E6)", "x": 5, "y": 3 },
+ { "label": "K36 (B3,D6)", "x": 6, "y": 3 },
+ { "label": "K37 (B3,B7)", "x": 7, "y": 3 },
+ { "label": "K38 (B3,D1)", "x": 8, "y": 3 },
+ { "label": "K39 (B3,D2)", "x": 9, "y": 3 },
+ { "label": "K3A (B3,D0)", "x": 10, "y": 3 },
+ { "label": "K3B (B3,B4)", "x": 11, "y": 3 },
+ { "label": "K3C (B3,B6)", "x": 12, "y": 3 },
+ { "label": "K3D (B3,C6)", "x": 13, "y": 3 },
+ { "label": "K3E (B3,C7)", "x": 14, "y": 3 },
+ { "label": "K40 (D5,F7)", "x": 0, "y": 4, "w": 1.25 },
+ { "label": "K41 (D5,F6)", "x": 1.25, "y": 4, "w": 1.25 },
+ { "label": "K43 (D5,F5)", "x": 2.5, "y": 4, "w": 1.25 },
+ { "label": "K46 (D5,D6)", "x": 3.75, "y": 4, "w": 6.25 },
+ { "label": "K4A (D5,D0)", "x": 10, "y": 4 },
+ { "label": "K4B (D5,B4)", "x": 11, "y": 4 },
+ { "label": "K4C (D5,B6)", "x": 12, "y": 4 },
+ { "label": "K4D (D5,C6)", "x": 13, "y": 4 },
+ { "label": "K4E (D5,C7)", "x": 14, "y": 4 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/longnald/corin/keymaps/default/keymap.c b/keyboards/longnald/corin/keymaps/default/keymap.c
new file mode 100644
index 000000000..c8906efc5
--- /dev/null
+++ b/keyboards/longnald/corin/keymaps/default/keymap.c
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2020 Longnald <support@longnald.com>
+ * Copyright (C) 2020 Seaton Jiang <seaton@vtrois.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 3 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 <https://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_64_ansi(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ 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_HOME, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(2), MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_64_ansi(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_INS, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, 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_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PGUP, KC_NO, KC_PGDN,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
+ ),
+ [2] = LAYOUT_64_ansi(
+ KC_NO, RGB_TOG, RGB_M_P, RGB_M_B, RGB_M_G, RGB_M_SW, RGB_M_SN, KC_NO, KC_NO, RGB_HUD, RGB_HUI, RGB_VAD, RGB_VAI, KC_NO,
+ KC_NO, KC_NO, LAG_NRM, 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_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, LAG_SWP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ MO(3), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
+ ),
+ [3] = LAYOUT_64_ansi(
+ 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, RESET, 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_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_NO
+ ),
+};
diff --git a/keyboards/longnald/corin/readme.md b/keyboards/longnald/corin/readme.md
new file mode 100644
index 000000000..116baa7d2
--- /dev/null
+++ b/keyboards/longnald/corin/readme.md
@@ -0,0 +1,15 @@
+# Corin
+
+![Corin view](https://github.com/longnald/corin/raw/master/view/view-1.jpg)
+
+Corin is a 64-key keyboard that adds 4 more arrow keys than a regular 60% keyboard made and sold by Seaton Jiang.
+
+- Keyboard Maintainer: [Longnald](https://github.com/longnald) & [Seaton Jiang](https://github.com/seatonjiang)
+- Hardware Supported: [Corin PCB (uses 32U4)](https://github.com/longnald/corin)
+- Hardware Availability: [wwww.longnald.com](https://wwww.longnald.com/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make longnald/corin:default
+
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/longnald/corin/rules.mk b/keyboards/longnald/corin/rules.mk
new file mode 100644
index 000000000..965087c1a
--- /dev/null
+++ b/keyboards/longnald/corin/rules.mk
@@ -0,0 +1,22 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/majistic/config.h b/keyboards/majistic/config.h
new file mode 100644
index 000000000..4ced5dd89
--- /dev/null
+++ b/keyboards/majistic/config.h
@@ -0,0 +1,57 @@
+
+/*
+Copyright 2020 yossiyossy
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6E55
+#define DEVICE_VER 0x0001
+#define MANUFACTURER yossiyossy
+#define PRODUCT maJIStic
+
+/* key matrix size */
+#define MATRIX_ROWS 10
+#define MATRIX_COLS 8
+
+#define MATRIX_ROW_PINS { F6, F7, B1, B3, B2 }
+#define MATRIX_COL_PINS { D4, C6, D7, E6, B4, B5, F4, F5 } // F4, F5 is dummy
+#define MATRIX_ROW_PINS_RIGHT { D4, C6, D7, E6, B4 }
+#define MATRIX_COL_PINS_RIGHT { B6, B2, B3, B1, F7, F6, F5, F4 }
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/*
+ * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
+ */
+#define SOFT_SERIAL_PIN D2 // or D1, D2, D3, E6
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* 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
+
+/* disable these deprecated features by default */
+#define NO_ACTION_MACRO
+#define NO_ACTION_FUNCTION
diff --git a/keyboards/majistic/info.json b/keyboards/majistic/info.json
new file mode 100644
index 000000000..2ae926788
--- /dev/null
+++ b/keyboards/majistic/info.json
@@ -0,0 +1,78 @@
+{
+ "keyboard_name": "maJIStic",
+ "url": "https://github.com/yossiyossy/maJIStic",
+ "maintainer": "yossiyossy",
+ "width": 15.5,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"1", "x":0, "y":0, "w":1.5},
+ {"label":"2", "x":1.5, "y":0},
+ {"label":"3", "x":2.5, "y":0},
+ {"label":"4", "x":3.5, "y":0},
+ {"label":"5", "x":4.5, "y":0},
+ {"label":"6", "x":5.5, "y":0},
+ {"label":"7", "x":7.5, "y":0},
+ {"label":"8", "x":8.5, "y":0},
+ {"label":"9", "x":9.5, "y":0},
+ {"label":"0", "x":10.5, "y":0},
+ {"label":"-", "x":11.5, "y":0},
+ {"label":"^", "x":12.5, "y":0},
+ {"label":"\\", "x":13.5, "y":0},
+ {"label":"BS", "x":14.5, "y":0},
+ {"label":"Tab", "x":0, "y":1},
+ {"label":"Q", "x":1, "y":1},
+ {"label":"W", "x":2, "y":1},
+ {"label":"E", "x":3, "y":1},
+ {"label":"R", "x":4, "y":1},
+ {"label":"T", "x":5, "y":1},
+ {"label":"Y", "x":7, "y":1},
+ {"label":"U", "x":8, "y":1},
+ {"label":"I", "x":9, "y":1},
+ {"label":"O", "x":10, "y":1},
+ {"label":"P", "x":11, "y":1},
+ {"label":"@", "x":12, "y":1},
+ {"label":"[", "x":13, "y":1},
+ {"label":"Caps Lock", "x":0, "y":2, "w":1.25},
+ {"label":"A", "x":1.25, "y":2},
+ {"label":"S", "x":2.25, "y":2},
+ {"label":"D", "x":3.25, "y":2},
+ {"label":"F", "x":4.25, "y":2},
+ {"label":"G", "x":5.25, "y":2},
+ {"label":"H", "x":7.25, "y":2},
+ {"label":"J", "x":8.25, "y":2},
+ {"label":"K", "x":9.25, "y":2},
+ {"label":"L", "x":10.25, "y":2},
+ {"label":";", "x":11.25, "y":2},
+ {"label":":", "x":12.25, "y":2},
+ {"label":"]", "x":13.25, "y":2},
+ {"label":"Enter", "x":14.25, "y":1, "w":1.25, "h":2},
+ {"label":"Shift", "x":0, "y":3, "w":1.75},
+ {"label":"Z", "x":1.75, "y":3},
+ {"label":"X", "x":2.75, "y":3},
+ {"label":"C", "x":3.75, "y":3},
+ {"label":"V", "x":4.75, "y":3},
+ {"label":"B", "x":5.75, "y":3},
+ {"label":"N", "x":7.75, "y":3},
+ {"label":"M", "x":8.75, "y":3},
+ {"label":",", "x":9.75, "y":3},
+ {"label":".", "x":10.75, "y":3},
+ {"label":"/", "x":11.75, "y":3},
+ {"label":"up", "x":12.75, "y":3},
+ {"label":"Shift", "x":13.75, "y":3, "w":1.75},
+ {"label":"Ctrl", "x":0, "y":4},
+ {"label":"Alt", "x":1, "y":4},
+ {"label":"command", "x":2, "y":4, "w":1.25},
+ {"label":"EISU", "x":3.25, "y":4, "w":1.25},
+ {"label":"", "x":4.5, "y":4, "w":1.75},
+ {"label":"", "x":7.25, "y":4, "w":1.5},
+ {"label":"KANA", "x":8.75, "y":4, "w":1.5},
+ {"label":"command", "x":10.25, "y":4, "w":1.5},
+ {"label":"left", "x":11.75, "y":4},
+ {"label":"down", "x":12.75, "y":4},
+ {"label":"right", "x":13.75, "y":4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/majistic/keymaps/default/config.h b/keyboards/majistic/keymaps/default/config.h
new file mode 100644
index 000000000..4db5715cb
--- /dev/null
+++ b/keyboards/majistic/keymaps/default/config.h
@@ -0,0 +1,17 @@
+/* Copyright 2020 yossiyossy
+ *
+ * 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
diff --git a/keyboards/majistic/keymaps/default/keymap.c b/keyboards/majistic/keymaps/default/keymap.c
new file mode 100644
index 000000000..e26a631d7
--- /dev/null
+++ b/keyboards/majistic/keymaps/default/keymap.c
@@ -0,0 +1,45 @@
+/* Copyright 2020 yossiyossy
+ *
+ * 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 "keymap_jp.h"
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+ _BASE,
+ _LOWER,
+};
+
+enum custom_keycodes {
+ L_SPC = SAFE_RANGE,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Base */
+ [_BASE] = LAYOUT(
+ JP_1, JP_2, JP_3, JP_4, JP_5, JP_6, JP_7, JP_8, JP_9, JP_0, JP_MINS, JP_CIRC, JP_YEN, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, JP_AT, JP_LBRC, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, JP_SCLN, JP_COLN, JP_RBRC, KC_ENT , \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, JP_COMM, JP_DOT, JP_SLSH, KC_UP, KC_RSFT, \
+ KC_LCTL, KC_LALT, KC_LGUI, KC_LANG2, LT(_LOWER, KC_SPC), LT(_LOWER, KC_SPC), KC_LANG1, KC_RGUI, KC_LEFT, KC_DOWN, KC_RIGHT \
+ ),
+ [_LOWER] = 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_ESC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, JP_UNDS, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BRMU, KC_VOLU, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_BRMD, KC_VOLD, _______ \
+ ),
+};
diff --git a/keyboards/majistic/keymaps/default/readme.md b/keyboards/majistic/keymaps/default/readme.md
new file mode 100644
index 000000000..65ee11cd7
--- /dev/null
+++ b/keyboards/majistic/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for maJIStic
diff --git a/keyboards/majistic/majistic.c b/keyboards/majistic/majistic.c
new file mode 100644
index 000000000..7ceba7cf2
--- /dev/null
+++ b/keyboards/majistic/majistic.c
@@ -0,0 +1,17 @@
+/* Copyright 2020 yossiyossy
+ *
+ * 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 "majistic.h"
diff --git a/keyboards/majistic/majistic.h b/keyboards/majistic/majistic.h
new file mode 100644
index 000000000..77c4a4912
--- /dev/null
+++ b/keyboards/majistic/majistic.h
@@ -0,0 +1,47 @@
+/* Copyright 2020 yossiyossy
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "quantum.h"
+
+/* This is a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+
+#define LAYOUT(\
+ l00, l01, l02, l03, l04, l05, r00, r01, r02, r03, r04, r05, r06, r07, \
+ l10, l11, l12, l13, l14, l15, r10, r11, r12, r13, r14, r15, r16, \
+ l20, l21, l22, l23, l24, l25, r20, r21, r22, r23, r24, r25, r26, r17, \
+ l30, l31, l32, l33, l34, l35, r30, r31, r32, r33, r34, r35, r36, \
+ l40, l41, l42, l43, l44, r40, r41, r42, r43, r44, r45 \
+) {\
+ { l00, l01, l02, l03, l04, l05, KC_NO, KC_NO }, \
+ { l10, l11, l12, l13, l14, l15, KC_NO, KC_NO }, \
+ { l20, l21, l22, l23, l24, l25, KC_NO, KC_NO}, \
+ { l30, l31, l32, l33, l34, l35, KC_NO, KC_NO}, \
+ { l40, l41, l42, l43, l44, KC_NO, KC_NO, KC_NO}, \
+ { r00, r01, r02, r03, r04, r05, r06, r07 }, \
+ { r10, r11, r12, r13, r14, r15, r16, r17 }, \
+ { r20, r21, r22, r23, r24, r25, r26, KC_NO }, \
+ { r30, r31, r32, r33, r34, r35, r36, KC_NO }, \
+ { r40, r41, r42, r43, r44, r45, KC_NO, KC_NO } \
+}
diff --git a/keyboards/majistic/readme.md b/keyboards/majistic/readme.md
new file mode 100644
index 000000000..05916af4e
--- /dev/null
+++ b/keyboards/majistic/readme.md
@@ -0,0 +1,15 @@
+# maJIStic
+
+![maJIStic](https://raw.githubusercontent.com/yossiyossy/maJIStic/master/images/main_image.jpg)
+
+maJIStic is a split, JIS, magic keyboard like, hot-swappable keybaord!
+
+* Keyboard Maintainer: [yossiyossy](https://github.com/yossiyossy)
+* Hardware Supported: [pcb](https://github.com/yossiyossy/maJIStic/tree/master/pcb), [case](https://github.com/yossiyossy/maJIStic/tree/master/case/dxf)
+* Hardware Availability: [booth](https://yossiyossy.booth.pm/items/2325429)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make majistic:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/katana60/rules.mk b/keyboards/majistic/rules.mk
index e41c168c4..2440fc903 100644
--- a/keyboards/katana60/rules.mk
+++ b/keyboards/majistic/rules.mk
@@ -2,19 +2,12 @@
MCU = atmega32u4
# Bootloader selection
-# Teensy halfkay
-# Pro Micro caterina
-# Atmel DFU atmel-dfu
-# LUFA DFU lufa-dfu
-# QMK DFU qmk-dfu
-# ATmega32A bootloadHID
-# ATmega328P USBasp
BOOTLOADER = atmel-dfu
# Build Options
# change yes to no to disable
#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = yes # Console for debug
@@ -23,9 +16,9 @@ COMMAND_ENABLE = yes # Commands for debug and configuration
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE = no # USB Nkey Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
-MIDI_ENABLE = no # MIDI support
-UNICODE_ENABLE = no # Unicode
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-AUDIO_ENABLE = no # Audio output on port C6
-FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
+
+SPLIT_KEYBOARD = yes
diff --git a/keyboards/massdrop/alt/keymaps/default/keymap.c b/keyboards/massdrop/alt/keymaps/default/keymap.c
index 52fd35b45..0d3e7ccb7 100644
--- a/keyboards/massdrop/alt/keymaps/default/keymap.c
+++ b/keyboards/massdrop/alt/keymaps/default/keymap.c
@@ -10,8 +10,6 @@ enum alt_keycodes {
MD_BOOT, //Restart into bootloader after hold timeout
};
-keymap_config_t keymap_config;
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_65_ansi_blocker(
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, \
@@ -38,14 +36,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
};
-// 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) {
-};
-
#define MODS_SHIFT (get_mods() & MOD_BIT(KC_LSHIFT) || get_mods() & MOD_BIT(KC_RSHIFT))
#define MODS_CTRL (get_mods() & MOD_BIT(KC_LCTL) || get_mods() & MOD_BIT(KC_RCTRL))
#define MODS_ALT (get_mods() & MOD_BIT(KC_LALT) || get_mods() & MOD_BIT(KC_RALT))
diff --git a/keyboards/massdrop/alt/keymaps/default_md/keymap.c b/keyboards/massdrop/alt/keymaps/default_md/keymap.c
index 6523790f6..9894caf48 100644
--- a/keyboards/massdrop/alt/keymaps/default_md/keymap.c
+++ b/keyboards/massdrop/alt/keymaps/default_md/keymap.c
@@ -21,8 +21,6 @@ enum alt_keycodes {
MD_BOOT //Restart into bootloader after hold timeout //Working
};
-keymap_config_t keymap_config;
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[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_BSPC, KC_DEL, \
@@ -49,14 +47,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
};
-// 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) {
-};
-
#define MODS_SHIFT (get_mods() & MOD_BIT(KC_LSHIFT) || get_mods() & MOD_BIT(KC_RSHIFT))
#define MODS_CTRL (get_mods() & MOD_BIT(KC_LCTL) || get_mods() & MOD_BIT(KC_RCTRL))
#define MODS_ALT (get_mods() & MOD_BIT(KC_LALT) || get_mods() & MOD_BIT(KC_RALT))
@@ -186,7 +176,7 @@ led_instruction_t led_instructions[] = {
//Flags can be found in tmk_core/protocol/arm_atsam/led_matrix.h (prefixed with LED_FLAG_)
//LED IDs can be found in config_led.h in the keyboard's directory
//Examples are below
-
+
//All LEDs use the user's selected pattern (this is the factory default)
{ .flags = LED_FLAG_USE_ROTATE_PATTERN },
@@ -195,7 +185,7 @@ led_instruction_t led_instructions[] = {
//Specific LEDs use specified RGB values while all others are off
// { .flags = LED_FLAG_MATCH_ID | LED_FLAG_USE_RGB, .id0 = 0xFF, .id1 = 0x00FF, .id2 = 0x0000FF00, .id3 = 0xFF000000, .r = 75, .g = 150, .b = 225 },
-
+
//All LEDs use the user's selected pattern
//On layer 1, all key LEDs (except the top row which keeps active pattern) are red while all edge LEDs are green
//When layer 1 is active, key LEDs use red (id0 32 - 16: 1111 1111 1111 1111 1000 0000 0000 0000 = 0xFFFF8000) (except top row 15 - 1)
diff --git a/keyboards/massdrop/alt/keymaps/mac/keymap.c b/keyboards/massdrop/alt/keymaps/mac/keymap.c
index 9f575b4f1..70ce6198b 100644
--- a/keyboards/massdrop/alt/keymaps/mac/keymap.c
+++ b/keyboards/massdrop/alt/keymaps/mac/keymap.c
@@ -10,8 +10,6 @@ enum alt_keycodes {
MD_BOOT, //Restart into bootloader after hold timeout
};
-keymap_config_t keymap_config;
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[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_BSPC, KC_DEL, \
@@ -38,14 +36,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
};
-// 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) {
-};
-
#define MODS_SHIFT (get_mods() & MOD_BIT(KC_LSHIFT) || get_mods() & MOD_BIT(KC_RSHIFT))
#define MODS_CTRL (get_mods() & MOD_BIT(KC_LCTL) || get_mods() & MOD_BIT(KC_RCTRL))
#define MODS_ALT (get_mods() & MOD_BIT(KC_LALT) || get_mods() & MOD_BIT(KC_RALT))
diff --git a/keyboards/massdrop/alt/keymaps/mac_md/keymap.c b/keyboards/massdrop/alt/keymaps/mac_md/keymap.c
index 439e79399..b3626c1b6 100644
--- a/keyboards/massdrop/alt/keymaps/mac_md/keymap.c
+++ b/keyboards/massdrop/alt/keymaps/mac_md/keymap.c
@@ -21,8 +21,6 @@ enum alt_keycodes {
MD_BOOT //Restart into bootloader after hold timeout //Working
};
-keymap_config_t keymap_config;
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[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_BSPC, KC_DEL, \
@@ -49,14 +47,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
};
-// 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) {
-};
-
#define MODS_SHIFT (get_mods() & MOD_BIT(KC_LSHIFT) || get_mods() & MOD_BIT(KC_RSHIFT))
#define MODS_CTRL (get_mods() & MOD_BIT(KC_LCTL) || get_mods() & MOD_BIT(KC_RCTRL))
#define MODS_ALT (get_mods() & MOD_BIT(KC_LALT) || get_mods() & MOD_BIT(KC_RALT))
diff --git a/keyboards/masterworks/classy_tkl/info.json b/keyboards/masterworks/classy_tkl/info.json
new file mode 100644
index 000000000..5cf93dfbd
--- /dev/null
+++ b/keyboards/masterworks/classy_tkl/info.json
@@ -0,0 +1,279 @@
+{
+ "keyboard_name": "Classy TKL",
+ "url": "https://geekhack.org/index.php?topic=105933",
+ "maintainer": "qmk",
+ "width": 18.25,
+ "height": 6.5,
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ { "label": "Esc", "x": 0, "y": 0 },
+ { "label": "F1", "x": 2, "y": 0 },
+ { "label": "F2", "x": 3, "y": 0 },
+ { "label": "F3", "x": 4, "y": 0 },
+ { "label": "F4", "x": 5, "y": 0 },
+ { "label": "F5", "x": 6.5, "y": 0 },
+ { "label": "F6", "x": 7.5, "y": 0 },
+ { "label": "F7", "x": 8.5, "y": 0 },
+ { "label": "F8", "x": 9.5, "y": 0 },
+ { "label": "F9", "x": 11, "y": 0 },
+ { "label": "F10", "x": 12, "y": 0 },
+ { "label": "F11", "x": 13, "y": 0 },
+ { "label": "F12", "x": 14, "y": 0 },
+ { "label": "PrtSc", "x": 15.25, "y": 0 },
+ { "label": "Scroll Lock", "x": 16.25, "y": 0 },
+ { "label": "Pause", "x": 17.25, "y": 0 },
+ { "label": "~", "x": 0, "y": 1.5 },
+ { "label": "!", "x": 1, "y": 1.5 },
+ { "label": "@", "x": 2, "y": 1.5 },
+ { "label": "#", "x": 3, "y": 1.5 },
+ { "label": "$", "x": 4, "y": 1.5 },
+ { "label": "%", "x": 5, "y": 1.5 },
+ { "label": "^", "x": 6, "y": 1.5 },
+ { "label": "&", "x": 7, "y": 1.5 },
+ { "label": "*", "x": 8, "y": 1.5 },
+ { "label": "(", "x": 9, "y": 1.5 },
+ { "label": ")", "x": 10, "y": 1.5 },
+ { "label": "_", "x": 11, "y": 1.5 },
+ { "label": "+", "x": 12, "y": 1.5 },
+ { "label": "Backspace", "x": 13, "y": 1.5 },
+ { "label": "Backspace2", "x": 14, "y": 1.5 },
+ { "label": "Insert", "x": 15.25, "y": 1.5 },
+ { "label": "Home", "x": 16.25, "y": 1.5 },
+ { "label": "PgUp", "x": 17.25, "y": 1.5 },
+ { "label": "Tab", "x": 0, "y": 2.5, "w": 1.5 },
+ { "label": "Q", "x": 1.5, "y": 2.5 },
+ { "label": "W", "x": 2.5, "y": 2.5 },
+ { "label": "E", "x": 3.5, "y": 2.5 },
+ { "label": "R", "x": 4.5, "y": 2.5 },
+ { "label": "T", "x": 5.5, "y": 2.5 },
+ { "label": "Y", "x": 6.5, "y": 2.5 },
+ { "label": "U", "x": 7.5, "y": 2.5 },
+ { "label": "I", "x": 8.5, "y": 2.5 },
+ { "label": "O", "x": 9.5, "y": 2.5 },
+ { "label": "P", "x": 10.5, "y": 2.5 },
+ { "label": "{", "x": 11.5, "y": 2.5 },
+ { "label": "}", "x": 12.5, "y": 2.5 },
+ { "label": "|", "x": 13.5, "y": 2.5, "w": 1.5 },
+ { "label": "Delete", "x": 15.25, "y": 2.5 },
+ { "label": "End", "x": 16.25, "y": 2.5 },
+ { "label": "PgDn", "x": 17.25, "y": 2.5 },
+ { "label": "Caps Lock", "x": 0, "y": 3.5, "w": 1.75 },
+ { "label": "A", "x": 1.75, "y": 3.5 },
+ { "label": "S", "x": 2.75, "y": 3.5 },
+ { "label": "D", "x": 3.75, "y": 3.5 },
+ { "label": "F", "x": 4.75, "y": 3.5 },
+ { "label": "G", "x": 5.75, "y": 3.5 },
+ { "label": "H", "x": 6.75, "y": 3.5 },
+ { "label": "J", "x": 7.75, "y": 3.5 },
+ { "label": "K", "x": 8.75, "y": 3.5 },
+ { "label": "L", "x": 9.75, "y": 3.5 },
+ { "label": ":", "x": 10.75, "y": 3.5 },
+ { "label": "\"", "x": 11.75, "y": 3.5 },
+ { "label": "Enter", "x": 12.75, "y": 3.5, "w": 2.25 },
+ { "label": "Shift", "x": 0, "y": 4.5, "w": 1.25 },
+ { "label": "|", "x": 1.25, "y": 4.5 },
+ { "label": "Z", "x": 2.25, "y": 4.5 },
+ { "label": "X", "x": 3.25, "y": 4.5 },
+ { "label": "C", "x": 4.25, "y": 4.5 },
+ { "label": "V", "x": 5.25, "y": 4.5 },
+ { "label": "B", "x": 6.25, "y": 4.5 },
+ { "label": "N", "x": 7.25, "y": 4.5 },
+ { "label": "M", "x": 8.25, "y": 4.5 },
+ { "label": "<", "x": 9.25, "y": 4.5 },
+ { "label": ">", "x": 10.25, "y": 4.5 },
+ { "label": "?", "x": 11.25, "y": 4.5 },
+ { "label": "Shift", "x": 12.25, "y": 4.5, "w": 1.75 },
+ { "label": "Shift2", "x": 14, "y": 4.5, "w": 1 },
+ { "label": "Up", "x": 16.25, "y": 4.5 },
+ { "label": "Ctrl", "x": 0, "y": 5.5, "w": 1.5 },
+ { "label": "Win", "x": 1.5, "y": 5.5, "w": 1 },
+ { "label": "Alt", "x": 2.5, "y": 5.5, "w": 1.5 },
+ { "label": "Space", "x": 4, "y": 5.5, "w": 7 },
+ { "label": "Alt", "x": 11, "y": 5.5, "w": 1.5 },
+ { "label": "Win", "x": 12.5, "y": 5.5, "w": 1 },
+ { "label": "Ctrl", "x": 13.5, "y": 5.5, "w": 1.5 },
+ { "label": "Left", "x": 15.25, "y": 5.5 },
+ { "label": "Down", "x": 16.25, "y": 5.5 },
+ { "label": "Right", "x": 17.25, "y": 5.5 }
+ ]
+ },
+ "LAYOUT_tkl_ansi_wkl": {
+ "layout": [
+ { "label": "Esc", "x": 0, "y": 0 },
+ { "label": "F1", "x": 2, "y": 0 },
+ { "label": "F2", "x": 3, "y": 0 },
+ { "label": "F3", "x": 4, "y": 0 },
+ { "label": "F4", "x": 5, "y": 0 },
+ { "label": "F5", "x": 6.5, "y": 0 },
+ { "label": "F6", "x": 7.5, "y": 0 },
+ { "label": "F7", "x": 8.5, "y": 0 },
+ { "label": "F8", "x": 9.5, "y": 0 },
+ { "label": "F9", "x": 11, "y": 0 },
+ { "label": "F10", "x": 12, "y": 0 },
+ { "label": "F11", "x": 13, "y": 0 },
+ { "label": "F12", "x": 14, "y": 0 },
+ { "label": "PrtSc", "x": 15.25, "y": 0 },
+ { "label": "Scroll Lock", "x": 16.25, "y": 0 },
+ { "label": "Pause", "x": 17.25, "y": 0 },
+ { "label": "~", "x": 0, "y": 1.5 },
+ { "label": "!", "x": 1, "y": 1.5 },
+ { "label": "@", "x": 2, "y": 1.5 },
+ { "label": "#", "x": 3, "y": 1.5 },
+ { "label": "$", "x": 4, "y": 1.5 },
+ { "label": "%", "x": 5, "y": 1.5 },
+ { "label": "^", "x": 6, "y": 1.5 },
+ { "label": "&", "x": 7, "y": 1.5 },
+ { "label": "*", "x": 8, "y": 1.5 },
+ { "label": "(", "x": 9, "y": 1.5 },
+ { "label": ")", "x": 10, "y": 1.5 },
+ { "label": "_", "x": 11, "y": 1.5 },
+ { "label": "+", "x": 12, "y": 1.5 },
+ { "label": "Backspace", "x": 13, "y": 1.5, "w": 2 },
+ { "label": "Insert", "x": 15.25, "y": 1.5 },
+ { "label": "Home", "x": 16.25, "y": 1.5 },
+ { "label": "PgUp", "x": 17.25, "y": 1.5 },
+ { "label": "Tab", "x": 0, "y": 2.5, "w": 1.5 },
+ { "label": "Q", "x": 1.5, "y": 2.5 },
+ { "label": "W", "x": 2.5, "y": 2.5 },
+ { "label": "E", "x": 3.5, "y": 2.5 },
+ { "label": "R", "x": 4.5, "y": 2.5 },
+ { "label": "T", "x": 5.5, "y": 2.5 },
+ { "label": "Y", "x": 6.5, "y": 2.5 },
+ { "label": "U", "x": 7.5, "y": 2.5 },
+ { "label": "I", "x": 8.5, "y": 2.5 },
+ { "label": "O", "x": 9.5, "y": 2.5 },
+ { "label": "P", "x": 10.5, "y": 2.5 },
+ { "label": "{", "x": 11.5, "y": 2.5 },
+ { "label": "}", "x": 12.5, "y": 2.5 },
+ { "label": "|", "x": 13.5, "y": 2.5, "w": 1.5 },
+ { "label": "Delete", "x": 15.25, "y": 2.5 },
+ { "label": "End", "x": 16.25, "y": 2.5 },
+ { "label": "PgDn", "x": 17.25, "y": 2.5 },
+ { "label": "Caps Lock", "x": 0, "y": 3.5, "w": 1.75 },
+ { "label": "A", "x": 1.75, "y": 3.5 },
+ { "label": "S", "x": 2.75, "y": 3.5 },
+ { "label": "D", "x": 3.75, "y": 3.5 },
+ { "label": "F", "x": 4.75, "y": 3.5 },
+ { "label": "G", "x": 5.75, "y": 3.5 },
+ { "label": "H", "x": 6.75, "y": 3.5 },
+ { "label": "J", "x": 7.75, "y": 3.5 },
+ { "label": "K", "x": 8.75, "y": 3.5 },
+ { "label": "L", "x": 9.75, "y": 3.5 },
+ { "label": ":", "x": 10.75, "y": 3.5 },
+ { "label": "\"", "x": 11.75, "y": 3.5 },
+ { "label": "Enter", "x": 12.75, "y": 3.5, "w": 2.25 },
+ { "label": "Shift", "x": 0, "y": 4.5, "w": 2.25 },
+ { "label": "Z", "x": 2.25, "y": 4.5 },
+ { "label": "X", "x": 3.25, "y": 4.5 },
+ { "label": "C", "x": 4.25, "y": 4.5 },
+ { "label": "V", "x": 5.25, "y": 4.5 },
+ { "label": "B", "x": 6.25, "y": 4.5 },
+ { "label": "N", "x": 7.25, "y": 4.5 },
+ { "label": "M", "x": 8.25, "y": 4.5 },
+ { "label": "<", "x": 9.25, "y": 4.5 },
+ { "label": ">", "x": 10.25, "y": 4.5 },
+ { "label": "?", "x": 11.25, "y": 4.5 },
+ { "label": "Shift", "x": 12.25, "y": 4.5, "w": 2.75 },
+ { "label": "Up", "x": 16.25, "y": 4.5 },
+ { "label": "Ctrl", "x": 0, "y": 5.5, "w": 1.5 },
+ { "label": "Alt", "x": 2.5, "y": 5.5, "w": 1.5 },
+ { "label": "Space", "x": 4, "y": 5.5, "w": 7 },
+ { "label": "Alt", "x": 11, "y": 5.5, "w": 1.5 },
+ { "label": "Ctrl", "x": 13.5, "y": 5.5, "w": 1.5 },
+ { "label": "Left", "x": 15.25, "y": 5.5 },
+ { "label": "Down", "x": 16.25, "y": 5.5 },
+ { "label": "Right", "x": 17.25, "y": 5.5 }
+ ]
+ },
+ "LAYOUT_tkl_iso_wkl": {
+ "layout": [
+ { "label": "Esc", "x": 0, "y": 0 },
+ { "label": "F1", "x": 2, "y": 0 },
+ { "label": "F2", "x": 3, "y": 0 },
+ { "label": "F3", "x": 4, "y": 0 },
+ { "label": "F4", "x": 5, "y": 0 },
+ { "label": "F5", "x": 6.5, "y": 0 },
+ { "label": "F6", "x": 7.5, "y": 0 },
+ { "label": "F7", "x": 8.5, "y": 0 },
+ { "label": "F8", "x": 9.5, "y": 0 },
+ { "label": "F9", "x": 11, "y": 0 },
+ { "label": "F10", "x": 12, "y": 0 },
+ { "label": "F11", "x": 13, "y": 0 },
+ { "label": "F12", "x": 14, "y": 0 },
+ { "label": "PrtSc", "x": 15.25, "y": 0 },
+ { "label": "Scroll Lock", "x": 16.25, "y": 0 },
+ { "label": "Pause", "x": 17.25, "y": 0 },
+ { "label": "\u00ac", "x": 0, "y": 1.5 },
+ { "label": "!", "x": 1, "y": 1.5 },
+ { "label": "\"", "x": 2, "y": 1.5 },
+ { "label": "\u00a3", "x": 3, "y": 1.5 },
+ { "label": "$", "x": 4, "y": 1.5 },
+ { "label": "%", "x": 5, "y": 1.5 },
+ { "label": "^", "x": 6, "y": 1.5 },
+ { "label": "&", "x": 7, "y": 1.5 },
+ { "label": "*", "x": 8, "y": 1.5 },
+ { "label": "(", "x": 9, "y": 1.5 },
+ { "label": ")", "x": 10, "y": 1.5 },
+ { "label": "_", "x": 11, "y": 1.5 },
+ { "label": "+", "x": 12, "y": 1.5 },
+ { "label": "Backspace", "x": 13, "y": 1.5, "w": 2 },
+ { "label": "Insert", "x": 15.25, "y": 1.5 },
+ { "label": "Home", "x": 16.25, "y": 1.5 },
+ { "label": "PgUp", "x": 17.25, "y": 1.5 },
+ { "label": "Tab", "x": 0, "y": 2.5, "w": 1.5 },
+ { "label": "Q", "x": 1.5, "y": 2.5 },
+ { "label": "W", "x": 2.5, "y": 2.5 },
+ { "label": "E", "x": 3.5, "y": 2.5 },
+ { "label": "R", "x": 4.5, "y": 2.5 },
+ { "label": "T", "x": 5.5, "y": 2.5 },
+ { "label": "Y", "x": 6.5, "y": 2.5 },
+ { "label": "U", "x": 7.5, "y": 2.5 },
+ { "label": "I", "x": 8.5, "y": 2.5 },
+ { "label": "O", "x": 9.5, "y": 2.5 },
+ { "label": "P", "x": 10.5, "y": 2.5 },
+ { "label": "{", "x": 11.5, "y": 2.5 },
+ { "label": "}", "x": 12.5, "y": 2.5 },
+ { "label": "Delete", "x": 15.25, "y": 2.5 },
+ { "label": "End", "x": 16.25, "y": 2.5 },
+ { "label": "PgDn", "x": 17.25, "y": 2.5 },
+ { "label": "Caps Lock", "x": 0, "y": 3.5, "w": 1.75 },
+ { "label": "A", "x": 1.75, "y": 3.5 },
+ { "label": "S", "x": 2.75, "y": 3.5 },
+ { "label": "D", "x": 3.75, "y": 3.5 },
+ { "label": "F", "x": 4.75, "y": 3.5 },
+ { "label": "G", "x": 5.75, "y": 3.5 },
+ { "label": "H", "x": 6.75, "y": 3.5 },
+ { "label": "J", "x": 7.75, "y": 3.5 },
+ { "label": "K", "x": 8.75, "y": 3.5 },
+ { "label": "L", "x": 9.75, "y": 3.5 },
+ { "label": ":", "x": 10.75, "y": 3.5 },
+ { "label": "@", "x": 11.75, "y": 3.5 },
+ { "label": "~", "x": 12.75, "y": 3.5 },
+ { "label": "Enter", "x": 13.75, "y": 2.5, "w": 1.25, "h": 2 },
+ { "label": "Shift", "x": 0, "y": 4.5, "w": 1.25 },
+ { "label": "|", "x": 1.25, "y": 4.5 },
+ { "label": "Z", "x": 2.25, "y": 4.5 },
+ { "label": "X", "x": 3.25, "y": 4.5 },
+ { "label": "C", "x": 4.25, "y": 4.5 },
+ { "label": "V", "x": 5.25, "y": 4.5 },
+ { "label": "B", "x": 6.25, "y": 4.5 },
+ { "label": "N", "x": 7.25, "y": 4.5 },
+ { "label": "M", "x": 8.25, "y": 4.5 },
+ { "label": "<", "x": 9.25, "y": 4.5 },
+ { "label": ">", "x": 10.25, "y": 4.5 },
+ { "label": "?", "x": 11.25, "y": 4.5 },
+ { "label": "Shift", "x": 12.25, "y": 4.5, "w": 2.75 },
+ { "label": "Up", "x": 16.25, "y": 4.5 },
+ { "label": "Ctrl", "x": 0, "y": 5.5, "w": 1.5 },
+ { "label": "Alt", "x": 2.5, "y": 5.5, "w": 1.5 },
+ { "label": "Space", "x": 4, "y": 5.5, "w": 7 },
+ { "label": "AltGr", "x": 11, "y": 5.5, "w": 1.5 },
+ { "label": "Ctrl", "x": 13.5, "y": 5.5, "w": 1.5 },
+ { "label": "Left", "x": 15.25, "y": 5.5 },
+ { "label": "Down", "x": 16.25, "y": 5.5 },
+ { "label": "Right", "x": 17.25, "y": 5.5 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/masterworks/classy_tkl/keymaps/default/config.h b/keyboards/masterworks/classy_tkl/keymaps/default/config.h
new file mode 100644
index 000000000..e328e5a3b
--- /dev/null
+++ b/keyboards/masterworks/classy_tkl/keymaps/default/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2020 Mathias Andersson <wraul@dbox.se>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/masterworks/classy_tkl/keymaps/default/keymap.c b/keyboards/masterworks/classy_tkl/keymaps/default/keymap.c
new file mode 100644
index 000000000..a87656059
--- /dev/null
+++ b/keyboards/masterworks/classy_tkl/keymaps/default/keymap.c
@@ -0,0 +1,29 @@
+/*
+Copyright 2020 Mathias Andersson <wraul@dbox.se>
+
+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
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_all(
+ 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_NO, 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_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_NO, KC_UP,
+ KC_LCTL, KC_NO, KC_LALT, KC_SPC, KC_RALT, KC_NO, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT)
+};
+// clang-format on
diff --git a/keyboards/masterworks/classy_tkl/keymaps/default/readme.md b/keyboards/masterworks/classy_tkl/keymaps/default/readme.md
new file mode 100644
index 000000000..72b4eb54a
--- /dev/null
+++ b/keyboards/masterworks/classy_tkl/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default winkeyless ANSI keymap for the Classy TKL
diff --git a/keyboards/masterworks/classy_tkl/keymaps/default_tkl_ansi_wkl/config.h b/keyboards/masterworks/classy_tkl/keymaps/default_tkl_ansi_wkl/config.h
new file mode 100644
index 000000000..e328e5a3b
--- /dev/null
+++ b/keyboards/masterworks/classy_tkl/keymaps/default_tkl_ansi_wkl/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2020 Mathias Andersson <wraul@dbox.se>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/masterworks/classy_tkl/keymaps/default_tkl_ansi_wkl/keymap.c b/keyboards/masterworks/classy_tkl/keymaps/default_tkl_ansi_wkl/keymap.c
new file mode 100644
index 000000000..bb7b256fd
--- /dev/null
+++ b/keyboards/masterworks/classy_tkl/keymaps/default_tkl_ansi_wkl/keymap.c
@@ -0,0 +1,29 @@
+/*
+Copyright 2020 Mathias Andersson <wraul@dbox.se>
+
+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
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_tkl_ansi_wkl(
+ 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_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT)
+};
+// clang-format on
diff --git a/keyboards/masterworks/classy_tkl/keymaps/default_tkl_ansi_wkl/readme.md b/keyboards/masterworks/classy_tkl/keymaps/default_tkl_ansi_wkl/readme.md
new file mode 100644
index 000000000..72b4eb54a
--- /dev/null
+++ b/keyboards/masterworks/classy_tkl/keymaps/default_tkl_ansi_wkl/readme.md
@@ -0,0 +1 @@
+# The default winkeyless ANSI keymap for the Classy TKL
diff --git a/keyboards/masterworks/classy_tkl/keymaps/default_tkl_iso_wkl/config.h b/keyboards/masterworks/classy_tkl/keymaps/default_tkl_iso_wkl/config.h
new file mode 100644
index 000000000..e328e5a3b
--- /dev/null
+++ b/keyboards/masterworks/classy_tkl/keymaps/default_tkl_iso_wkl/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2020 Mathias Andersson <wraul@dbox.se>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/masterworks/classy_tkl/keymaps/default_tkl_iso_wkl/keymap.c b/keyboards/masterworks/classy_tkl/keymaps/default_tkl_iso_wkl/keymap.c
new file mode 100644
index 000000000..1456ee02a
--- /dev/null
+++ b/keyboards/masterworks/classy_tkl/keymaps/default_tkl_iso_wkl/keymap.c
@@ -0,0 +1,29 @@
+/*
+Copyright 2020 Mathias Andersson <wraul@dbox.se>
+
+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
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_tkl_iso_wkl(
+ 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_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_NUHS, KC_ENT,
+ KC_LSFT, KC_BSLS, 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, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT)
+};
+// clang-format on
diff --git a/keyboards/masterworks/classy_tkl/keymaps/default_tkl_iso_wkl/readme.md b/keyboards/masterworks/classy_tkl/keymaps/default_tkl_iso_wkl/readme.md
new file mode 100644
index 000000000..a4b8c86b1
--- /dev/null
+++ b/keyboards/masterworks/classy_tkl/keymaps/default_tkl_iso_wkl/readme.md
@@ -0,0 +1 @@
+# The default winkeyless ISO keymap for the Classy TKL
diff --git a/keyboards/masterworks/classy_tkl/keymaps/via/keymap.c b/keyboards/masterworks/classy_tkl/keymaps/via/keymap.c
new file mode 100644
index 000000000..c26f147ea
--- /dev/null
+++ b/keyboards/masterworks/classy_tkl/keymaps/via/keymap.c
@@ -0,0 +1,50 @@
+/*
+Copyright 2020 Mathias Andersson <wraul@dbox.se>
+
+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
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_all(
+ 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_NO, 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_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_NO, KC_UP,
+ KC_LCTL, KC_NO, KC_LALT, KC_SPC, KC_RALT, KC_NO, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+ [1] = LAYOUT_all(
+ 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, 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, 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),
+ [2] = LAYOUT_all(
+ 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, 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, 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),
+ [3] = LAYOUT_all(
+ 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, 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, 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)
+};
+// clang-format on
diff --git a/keyboards/masterworks/classy_tkl/keymaps/via/rules.mk b/keyboards/masterworks/classy_tkl/keymaps/via/rules.mk
new file mode 100644
index 000000000..1e5b99807
--- /dev/null
+++ b/keyboards/masterworks/classy_tkl/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/masterworks/classy_tkl/readme.md b/keyboards/masterworks/classy_tkl/readme.md
new file mode 100644
index 000000000..0557ed7f4
--- /dev/null
+++ b/keyboards/masterworks/classy_tkl/readme.md
@@ -0,0 +1,15 @@
+# Classy TKL
+
+![Classy TKL](https://i.imgur.com/p1dxfYKl.jpg)
+
+A short description of the keyboard/project
+
+* Keyboard Maintainer: [Mathias Andersson](https://github.com/wraul)
+* Hardware Supported: [Classy TKL PCB](https://github.com/4pplet/classyTKL)
+* Hardware Availability: https://geekhack.org/index.php?topic=105933
+
+Make example for this keyboard (after setting up your build environment):
+
+ make masterworks/classy_tkl:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/masterworks/classy_tkl/rev_a/config.h b/keyboards/masterworks/classy_tkl/rev_a/config.h
new file mode 100644
index 000000000..0821b1dfc
--- /dev/null
+++ b/keyboards/masterworks/classy_tkl/rev_a/config.h
@@ -0,0 +1,58 @@
+/*
+Copyright 2020 Mathias Andersson <wraul@dbox.se>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x4D57 // "MW" = Masterworks
+#define PRODUCT_ID 0x0001
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Masterworks
+#define PRODUCT Classy TKL
+
+/* key matrix size */
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 17
+
+/*
+ * 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 \
+ { C7, F0, F1, F4, F5, F6 }
+#define MATRIX_COL_PINS \
+ { B4, D7, D6, D4, C6, D5, D3, D2, D1, D0, B7, B3, B2, B1, B0, E6, F7 }
+#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
+
+/* 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
diff --git a/keyboards/katana60/katana60.c b/keyboards/masterworks/classy_tkl/rev_a/rev_a.c
index e8d4fef19..58c0393db 100644
--- a/keyboards/katana60/katana60.c
+++ b/keyboards/masterworks/classy_tkl/rev_a/rev_a.c
@@ -1,4 +1,4 @@
-/* Copyright 2017 Baris Tosun
+/* Copyright 2020 Mathias Andersson <wraul@dbox.se>
*
* 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
@@ -13,31 +13,30 @@
* 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 "katana60.h"
+#include "rev_a.h"
-void matrix_init_kb(void) {
- // put your keyboard start-up code here
- // runs once when the firmware starts up
-
- matrix_init_user();
-}
+#define CAPS_PIN B5
+#define SCROLL_PIN B6
-void matrix_scan_kb(void) {
- // put your looping keyboard code here
- // runs every cycle (a lot)
+// Optional override functions below.
+// You can leave any or all of these undefined.
+// These are only required if you want to perform custom actions.
- matrix_scan_user();
-}
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
-bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
- // put your per-action keyboard code here
- // runs for every action, just before processing by the firmware
+ setPinOutput(CAPS_PIN);
+ setPinOutput(SCROLL_PIN);
- return process_record_user(keycode, record);
+ matrix_init_user();
}
-void led_set_kb(uint8_t usb_led) {
- // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
-
- led_set_user(usb_led);
+bool led_update_kb(led_t led_state) {
+ bool res = led_update_user(led_state);
+ if(res) {
+ writePin(CAPS_PIN, led_state.caps_lock);
+ writePin(SCROLL_PIN, led_state.scroll_lock);
+ }
+ return res;
}
diff --git a/keyboards/masterworks/classy_tkl/rev_a/rev_a.h b/keyboards/masterworks/classy_tkl/rev_a/rev_a.h
new file mode 100644
index 000000000..73e68b598
--- /dev/null
+++ b/keyboards/masterworks/classy_tkl/rev_a/rev_a.h
@@ -0,0 +1,79 @@
+/* Copyright 2020 Mathias Andersson <wraul@dbox.se>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#pragma once
+
+#include "quantum.h"
+
+/* This a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+// clang-format off
+#define LAYOUT_all( \
+ k00, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F, k0G, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k3D, k1E, k1F, k1G, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, \
+ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4F, \
+ k50, k52, k53, k57, k5B, k5C, k5D, k5E, k5F, k5G \
+) \
+{ \
+ { k00, KC_NO, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F, k0G }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, KC_NO, KC_NO, KC_NO }, \
+ { k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, KC_NO, k4F, KC_NO }, \
+ { k50, KC_NO, k52, k53, KC_NO, KC_NO, KC_NO, k57, KC_NO, KC_NO, KC_NO, k5B, k5C, k5D, k5E, k5F, k5G }, \
+}
+
+#define LAYOUT_tkl_ansi_wkl( \
+ k00, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F, k0G, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k3D, k1E, k1F, k1G, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, \
+ k40, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4F, \
+ k50, k53, k57, k5B, k5D, k5E, k5F, k5G \
+) \
+{ \
+ { k00, KC_NO, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F, k0G }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, KC_NO, k1E, k1F, k1G }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, KC_NO, KC_NO, KC_NO }, \
+ { k40, KC_NO, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, KC_NO, KC_NO, k4F, KC_NO }, \
+ { k50, KC_NO, KC_NO, k53, KC_NO, KC_NO, KC_NO, k57, KC_NO, KC_NO, KC_NO, k5B, KC_NO, k5D, k5E, k5F, k5G }, \
+}
+
+#define LAYOUT_tkl_iso_wkl( \
+ k00, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F, k0G, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k3D, k1E, k1F, k1G, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2E, k2F, k2G, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k2D, \
+ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4F, \
+ k50, k53, k57, k5B, k5D, k5E, k5F, k5G \
+) \
+{ \
+ { k00, KC_NO, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F, k0G }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, KC_NO, k1E, k1F, k1G }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, KC_NO, KC_NO, KC_NO }, \
+ { k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, KC_NO, KC_NO, k4F, KC_NO }, \
+ { k50, KC_NO, KC_NO, k53, KC_NO, KC_NO, KC_NO, k57, KC_NO, KC_NO, KC_NO, k5B, KC_NO, k5D, k5E, k5F, k5G }, \
+}
+// clang-format on
diff --git a/keyboards/masterworks/classy_tkl/rev_a/rules.mk b/keyboards/masterworks/classy_tkl/rev_a/rules.mk
new file mode 100644
index 000000000..34bcd87a4
--- /dev/null
+++ b/keyboards/masterworks/classy_tkl/rev_a/rules.mk
@@ -0,0 +1,26 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
+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
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
+
+# Supported layouts
+LAYOUTS = tkl_ansi_wkl tkl_iso_wkl
diff --git a/keyboards/matrix/m20add/rules.mk b/keyboards/matrix/m20add/rules.mk
index 6dba15393..fb97c1d3c 100644
--- a/keyboards/matrix/m20add/rules.mk
+++ b/keyboards/matrix/m20add/rules.mk
@@ -1,38 +1,15 @@
-## chip/board settings
-# - the next two should match the directories in
-# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
-MCU_FAMILY = STM32
-MCU_SERIES = STM32F4xx
+# MCU name
+MCU = STM32F411
# Linker script to use
# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
# or <this_dir>/ld/
MCU_LDSCRIPT = m20add_boot
-# Startup code to use
-# - it should exist in <chibios>/os/common/startup/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f4xx
-
# Board: it should exist either in <chibios>/os/hal/boards/
# or <this_dir>/boards
BOARD = m20add_bd
-# Cortex version
-MCU = cortex-m4
-
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 7
-
-USE_FPU = yes
-
-# Vector table for application
-# 0x00000000-0x00001000 area is occupied by bootlaoder.*/
-OPT_DEFS =
-
-# Options to pass to dfu-util when flashing
-#DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-#DFU_SUFFIX_ARGS = -p DF11 -v 0483
-
# Build Options
# comment out to disable the options.
#
diff --git a/keyboards/matrix/noah/info.json b/keyboards/matrix/noah/info.json
index f35bbd580..69fc0fccf 100644
--- a/keyboards/matrix/noah/info.json
+++ b/keyboards/matrix/noah/info.json
@@ -1426,6 +1426,9 @@
"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}]
}
}
}
diff --git a/keyboards/matrix/noah/keymaps/rys/keymap.c b/keyboards/matrix/noah/keymaps/rys/keymap.c
new file mode 100644
index 000000000..73ee8e1fe
--- /dev/null
+++ b/keyboards/matrix/noah/keymaps/rys/keymap.c
@@ -0,0 +1,59 @@
+/* Copyright 2020 Rys Sommefeldt
+ *
+ * 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 i s distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_65_iso_blocker(
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
+ * │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│ ` │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │     │Del│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ Ent├───┤
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ # │    │PUp│
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┼───┤
+ * │Shft│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift│ ↑ │PDn│
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
+ * │LCtl│LGUI│LAlt│      Spaaaaaaace       │RAlt│ L1 │ │ ← │ ↓ │ → │
+ * └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
+ */
+ 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_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_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_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_65_iso_blocker(
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
+ * │RST│ F1│ F2│ F3│ F4│ F5│ F6│ F7│ F8│ F9│F10│F11│F12│       │   │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ * │ TOG │PLN│MOD│HU+│HU-│SA+│SA-│VA+│VA-│   │   │   │   │     │   │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    ├───┤
+ * │      │   │   │   │   │   │   │   │   │   │   │   │   │    │   │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┼───┤
+ * │    │   │   │   │   │   │   │   │   │   │   │   │      │ │   │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
+ * │    │    │    │                        │    │    │ │ │ │ │
+ * └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
+ */
+ 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, _______, _______,
+ RGB_TOG, RGB_M_P, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+};
diff --git a/keyboards/matrix/noah/noah.h b/keyboards/matrix/noah/noah.h
index 5d0da798d..15810c706 100644
--- a/keyboards/matrix/noah/noah.h
+++ b/keyboards/matrix/noah/noah.h
@@ -48,6 +48,20 @@
{k40, k41, k42,KC_NO,k43,KC_NO,KC_NO, k45, k46, k47, k48, k1e, k2e, k3e, k0f} \
}
+#define LAYOUT_65_iso_blocker( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, k0f, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \
+ k40, k41, k42, k43, k44, k45, k46, k47, k48 \
+) { \
+ {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c,KC_NO, k0e}, \
+ {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c,KC_NO, KC_NO}, \
+ {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, KC_NO}, \
+ {k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, KC_NO}, \
+ {k40, k41, k42,KC_NO,k43,KC_NO,k44, k45, k46, k47, k48, k1e, k2e, k3e, k0f} \
+}
+
#define LAYOUT_default_splitspace( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, k0f, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, \
diff --git a/keyboards/matrix/noah/rules.mk b/keyboards/matrix/noah/rules.mk
index 80854e67e..19e432d2a 100644
--- a/keyboards/matrix/noah/rules.mk
+++ b/keyboards/matrix/noah/rules.mk
@@ -1,38 +1,15 @@
-## chip/board settings
-# - the next two should match the directories in
-# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
-MCU_FAMILY = STM32
-MCU_SERIES = STM32F4xx
+# MCU name
+MCU = STM32F411
# Linker script to use
# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
# or <this_dir>/ld/
MCU_LDSCRIPT = noah_boot
-# Startup code to use
-# - it should exist in <chibios>/os/common/startup/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f4xx
-
# Board: it should exist either in <chibios>/os/hal/boards/
# or <this_dir>/boards
BOARD = noah_bd
-# Cortex version
-MCU = cortex-m4
-
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 7
-
-USE_FPU = yes
-
-# Vector table for application
-# 0x00000000-0x00001000 area is occupied by bootlaoder.*/
-OPT_DEFS =
-
-# Options to pass to dfu-util when flashing
-#DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-#DFU_SUFFIX_ARGS = -p DF11 -v 0483
-
# Build Options
# comment out to disable the options.
#
@@ -52,3 +29,5 @@ RGBLIGHT_CUSTOM_DRIVER = yes
CUSTOM_MATRIX = yes
# project specific files
SRC += ws2812.c matrix.c
+
+LAYOUTS = 65_iso_blocker
diff --git a/keyboards/mechlovin/hannah65/config.h b/keyboards/mechlovin/hannah65/config.h
new file mode 100644
index 000000000..6801c30a3
--- /dev/null
+++ b/keyboards/mechlovin/hannah65/config.h
@@ -0,0 +1,49 @@
+/*
+Copyright 2020 Team Mechlovin
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x4D4C
+#define MANUFACTURER Team Mechlovin
+
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+/*
+ * 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 { A4, A5, A3, A2, A1 }
+#define MATRIX_COL_PINS { B11, B10, B2, B1, B0, A7, A6, A0, C15, B4, B5, B3, C13, C14, A13 }
+
+#define DIODE_DIRECTION COL2ROW
+
+#define BACKLIGHT_PIN B8
+#define BACKLIGHT_BREATHING
+#define BACKLIGHT_PWM_DRIVER PWMD3
+#define BACKLIGHT_PWM_CHANNEL 3
+
+#define BACKLIGHT_LEVELS 3
diff --git a/keyboards/mechlovin/hannah65/hannah65.c b/keyboards/mechlovin/hannah65/hannah65.c
new file mode 100644
index 000000000..4f937d8a2
--- /dev/null
+++ b/keyboards/mechlovin/hannah65/hannah65.c
@@ -0,0 +1,35 @@
+/* Copyright 2020 Team Mechlovin
+ *
+ * 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 "hannah65.h"
+
+void matrix_init_kb(void) {
+ matrix_init_user();
+ led_init_ports();
+}
+
+void led_init_ports(void) {
+ setPinOutput(B9);
+ writePinLow(B9);
+}
+
+bool led_update_kb(led_t led_state) {
+ if(led_update_user(led_state)) {
+ writePin(B9, led_state.caps_lock);
+ }
+
+ return true;
+}
diff --git a/keyboards/mechlovin/hannah65/hannah65.h b/keyboards/mechlovin/hannah65/hannah65.h
new file mode 100644
index 000000000..576a78510
--- /dev/null
+++ b/keyboards/mechlovin/hannah65/hannah65.h
@@ -0,0 +1,25 @@
+/* Copyright 2020 Team Mechlovin
+ *
+ * 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"
+
+#if defined(KEYBOARD_mechlovin_hannah65_rev1)
+# include "rev1.h"
+#elif defined(KEYBOARD_mechlovin_hannah65_mechlovin9)
+# include "mechlovin9.h"
+#endif \ No newline at end of file
diff --git a/keyboards/mechlovin/hannah65/mechlovin9/config.h b/keyboards/mechlovin/hannah65/mechlovin9/config.h
new file mode 100644
index 000000000..df917e3d1
--- /dev/null
+++ b/keyboards/mechlovin/hannah65/mechlovin9/config.h
@@ -0,0 +1,5 @@
+#pragma once
+
+#define PRODUCT_ID 0x6501
+#define DEVICE_VER 0x0001
+#define PRODUCTION Mechlovin9 \ No newline at end of file
diff --git a/keyboards/mechlovin/hannah65/mechlovin9/info.json b/keyboards/mechlovin/hannah65/mechlovin9/info.json
new file mode 100644
index 000000000..24585920a
--- /dev/null
+++ b/keyboards/mechlovin/hannah65/mechlovin9/info.json
@@ -0,0 +1,80 @@
+{
+ "keyboard_name": "mechlovin9",
+ "url": "",
+ "maintainer": "Team Mechlovin",
+ "width": 16,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ {"label":"K00 (B0,B5)", "x":0, "y":0},
+ {"label":"K01 (B0,B6)", "x":1, "y":0},
+ {"label":"K02 (B0,B7)", "x":2, "y":0},
+ {"label":"K03 (B0,C0)", "x":3, "y":0},
+ {"label":"K04 (B0,C1)", "x":4, "y":0},
+ {"label":"K05 (B0,C2)", "x":5, "y":0},
+ {"label":"K06 (B0,C3)", "x":6, "y":0},
+ {"label":"K07 (B0,C4)", "x":7, "y":0},
+ {"label":"K08 (B0,C5)", "x":8, "y":0},
+ {"label":"K09 (B0,C6)", "x":9, "y":0},
+ {"label":"K0A (B0,C7)", "x":10, "y":0},
+ {"label":"K0B (B0,D0)", "x":11, "y":0},
+ {"label":"K0C (B0,D1)", "x":12, "y":0},
+ {"label":"K0D (B0,D2)", "x":13, "y":0},
+ {"label":"K1D (B1,D2)", "x":14, "y":0},
+ {"label":"K0E (B0,D3)", "x":15, "y":0},
+ {"label":"K10 (B1,B5)", "x":0, "y":1, "w":1.5},
+ {"label":"K11 (B1,B6)", "x":1.5, "y":1},
+ {"label":"K12 (B1,B7)", "x":2.5, "y":1},
+ {"label":"K13 (B1,C0)", "x":3.5, "y":1},
+ {"label":"K14 (B1,C1)", "x":4.5, "y":1},
+ {"label":"K15 (B1,C2)", "x":5.5, "y":1},
+ {"label":"K16 (B1,C3)", "x":6.5, "y":1},
+ {"label":"K17 (B1,C4)", "x":7.5, "y":1},
+ {"label":"K18 (B1,C5)", "x":8.5, "y":1},
+ {"label":"K19 (B1,C6)", "x":9.5, "y":1},
+ {"label":"K1A (B1,C7)", "x":10.5, "y":1},
+ {"label":"K1B (B1,D0)", "x":11.5, "y":1},
+ {"label":"K1C (B1,D1)", "x":12.5, "y":1},
+ {"label":"K2C (B2,D1)", "x":13.5, "y":1, "w":1.5},
+ {"label":"K1E (B1,D3)", "x":15, "y":1},
+ {"label":"K20 (B2,B5)", "x":0, "y":2, "w":1.75},
+ {"label":"K21 (B2,B6)", "x":1.75, "y":2},
+ {"label":"K22 (B2,B7)", "x":2.75, "y":2},
+ {"label":"K23 (B2,C0)", "x":3.75, "y":2},
+ {"label":"K24 (B2,C1)", "x":4.75, "y":2},
+ {"label":"K25 (B2,C2)", "x":5.75, "y":2},
+ {"label":"K26 (B2,C3)", "x":6.75, "y":2},
+ {"label":"K27 (B2,C4)", "x":7.75, "y":2},
+ {"label":"K28 (B2,C5)", "x":8.75, "y":2},
+ {"label":"K29 (B2,C6)", "x":9.75, "y":2},
+ {"label":"K2A (B2,C7)", "x":10.75, "y":2},
+ {"label":"K2B (B2,D0)", "x":11.75, "y":2},
+ {"label":"K2D (B2,D2)", "x":12.75, "y":2, "w":2.25},
+ {"label":"K2E (B2,D3)", "x":15, "y":2},
+ {"label":"K30 (B3,B5)", "x":0, "y":3, "w":2.25},
+ {"label":"K32 (B3,B7)", "x":2.25, "y":3},
+ {"label":"K33 (B3,C0)", "x":3.25, "y":3},
+ {"label":"K34 (B3,C1)", "x":4.25, "y":3},
+ {"label":"K35 (B3,C2)", "x":5.25, "y":3},
+ {"label":"K36 (B3,C3)", "x":6.25, "y":3},
+ {"label":"K37 (B3,C4)", "x":7.25, "y":3},
+ {"label":"K38 (B3,C5)", "x":8.25, "y":3},
+ {"label":"K39 (B3,C6)", "x":9.25, "y":3},
+ {"label":"K3A (B3,C7)", "x":10.25, "y":3},
+ {"label":"K3B (B3,D0)", "x":11.25, "y":3},
+ {"label":"K3C (B3,D1)", "x":12.25, "y":3, "w":1.75},
+ {"label":"K3D (B3,D2)", "x":14, "y":3},
+ {"label":"K3E (B3,D3)", "x":15, "y":3},
+ {"label":"K40 (B4,B5)", "x":0, "y":4, "w":1.5},
+ {"label":"K41 (B4,B6)", "x":1.5, "y":4},
+ {"label":"K42 (B4,B7)", "x":2.5, "y":4, "w":1.5},
+ {"label":"K46 (B4,C3)", "x":4, "y":4, "w":7},
+ {"label":"K4B (B4,D0)", "x":11, "y":4, "w":1.5},
+ {"label":"K4C (B4,D1)", "x":13, "y":4},
+ {"label":"K4D (B4,D2)", "x":14, "y":4},
+ {"label":"K4E (B4,D3)", "x":15, "y":4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/mechlovin/hannah65/mechlovin9/keymaps/default/keymap.c b/keyboards/mechlovin/hannah65/mechlovin9/keymaps/default/keymap.c
new file mode 100644
index 000000000..97a2c8072
--- /dev/null
+++ b/keyboards/mechlovin/hannah65/mechlovin9/keymaps/default/keymap.c
@@ -0,0 +1,29 @@
+/* Copyright 2020 Team Mechlovin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_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_BSPC, KC_DEL, KC_HOME,
+ 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_PGUP,
+ 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_PGDN,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+
+};
+
diff --git a/keyboards/mechlovin/hannah65/mechlovin9/keymaps/default/readme.md b/keyboards/mechlovin/hannah65/mechlovin9/keymaps/default/readme.md
new file mode 100644
index 000000000..324467b05
--- /dev/null
+++ b/keyboards/mechlovin/hannah65/mechlovin9/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for mechlovin9
diff --git a/keyboards/mechlovin/hannah65/mechlovin9/keymaps/via/keymap.c b/keyboards/mechlovin/hannah65/mechlovin9/keymaps/via/keymap.c
new file mode 100644
index 000000000..0fae908c2
--- /dev/null
+++ b/keyboards/mechlovin/hannah65/mechlovin9/keymaps/via/keymap.c
@@ -0,0 +1,50 @@
+/* Copyright 2020 Team Mechlovin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_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_BSPC, KC_DEL, KC_HOME,
+ 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_PGUP,
+ 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_PGDN,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_all(
+ 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, 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
+ ),
+ [2] = LAYOUT_all(
+ 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, 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
+ ),
+ [3] = LAYOUT_all(
+ 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, 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
+ ),
+
+
+};
+
diff --git a/keyboards/mechlovin/hannah65/mechlovin9/keymaps/via/rules.mk b/keyboards/mechlovin/hannah65/mechlovin9/keymaps/via/rules.mk
new file mode 100644
index 000000000..036bd6d1c
--- /dev/null
+++ b/keyboards/mechlovin/hannah65/mechlovin9/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/mechlovin/hannah65/mechlovin9/mechlovin9.h b/keyboards/mechlovin/hannah65/mechlovin9/mechlovin9.h
new file mode 100644
index 000000000..4aebaad0f
--- /dev/null
+++ b/keyboards/mechlovin/hannah65/mechlovin9/mechlovin9.h
@@ -0,0 +1,33 @@
+/* Copyright 2020 Team Mechlovin
+ *
+ * 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_all( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K1D, K0E, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K2C, K1E, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K2E, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
+ K40, K41, K42, K46, K4B, K4C, K4D, K4E \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E }, \
+ { K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \
+ { K40, K41, K42, KC_NO, KC_NO, KC_NO, K46, KC_NO, KC_NO, KC_NO, KC_NO, K4B, K4C, K4D, K4E }, \
+}
diff --git a/keyboards/mechlovin/hannah65/mechlovin9/readme.md b/keyboards/mechlovin/hannah65/mechlovin9/readme.md
new file mode 100644
index 000000000..aa6bdc1ca
--- /dev/null
+++ b/keyboards/mechlovin/hannah65/mechlovin9/readme.md
@@ -0,0 +1,15 @@
+# mechlovin9
+
+![mechlovin9](https://i.imgur.com/T5Lm6OYl.png)
+
+A 65% PCB, compatible with Kyuu.
+
+* Keyboard Maintainer: [Team Mechlovin](https://github.com/mechlovin)
+* Hardware Supported: Kyuu Keyboard.
+* Hardware Availability: [Reddit GB](https://www.reddit.com/r/mechmarket/comments/i61par/gb_mechlovin_9_a_kyuu_65_keyboard_compatible_pcb/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make mechlovin/hannah65/mechlovin9:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/mechlovin/hannah65/mechlovin9/rules.mk b/keyboards/mechlovin/hannah65/mechlovin9/rules.mk
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/keyboards/mechlovin/hannah65/mechlovin9/rules.mk
diff --git a/keyboards/mechlovin/hannah65/readme.md b/keyboards/mechlovin/hannah65/readme.md
new file mode 100644
index 000000000..25fcd18d8
--- /dev/null
+++ b/keyboards/mechlovin/hannah65/readme.md
@@ -0,0 +1,15 @@
+# hannah65
+
+![hannah65](https://i.imgur.com/qf0BYI2l.png)
+
+A 65% PCB, compatible with E6.5, Kyuu,...
+
+* Keyboard Maintainer: [Team Mechlovin](https://github.com/mechlovin)
+* Hardware Supported: Hannah65, STM32F303
+* Hardware Availability: [Mechlovin Store](https://mechlove.com/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make mechlovin/hannah65/rev1:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/mechlovin/hannah65/rev1/config.h b/keyboards/mechlovin/hannah65/rev1/config.h
new file mode 100644
index 000000000..8d90908c2
--- /dev/null
+++ b/keyboards/mechlovin/hannah65/rev1/config.h
@@ -0,0 +1,5 @@
+#pragma once
+
+#define PRODUCT_ID 0x6500
+#define DEVICE_VER 0x0001
+#define PRODUCTION Hannah65 \ No newline at end of file
diff --git a/keyboards/mechlovin/hannah65/rev1/info.json b/keyboards/mechlovin/hannah65/rev1/info.json
new file mode 100644
index 000000000..ceb7aceb3
--- /dev/null
+++ b/keyboards/mechlovin/hannah65/rev1/info.json
@@ -0,0 +1,225 @@
+{
+ "keyboard_name": "hannah65-rev1",
+ "url": "",
+ "maintainer": "Team Mechlovin",
+ "width": 16,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ {"label":"K00 (B0,B5)", "x":0, "y":0},
+ {"label":"K01 (B0,B6)", "x":1, "y":0},
+ {"label":"K02 (B0,B7)", "x":2, "y":0},
+ {"label":"K03 (B0,C0)", "x":3, "y":0},
+ {"label":"K04 (B0,C1)", "x":4, "y":0},
+ {"label":"K05 (B0,C2)", "x":5, "y":0},
+ {"label":"K06 (B0,C3)", "x":6, "y":0},
+ {"label":"K07 (B0,C4)", "x":7, "y":0},
+ {"label":"K08 (B0,C5)", "x":8, "y":0},
+ {"label":"K09 (B0,C6)", "x":9, "y":0},
+ {"label":"K0A (B0,C7)", "x":10, "y":0},
+ {"label":"K0B (B0,D0)", "x":11, "y":0},
+ {"label":"K0C (B0,D1)", "x":12, "y":0},
+ {"label":"K0D (B0,D2)", "x":13, "y":0},
+ {"label":"K1D (B1,D2)", "x":14, "y":0},
+ {"label":"K0E (B0,D3)", "x":15, "y":0},
+ {"label":"K10 (B1,B5)", "x":0, "y":1, "w":1.5},
+ {"label":"K11 (B1,B6)", "x":1.5, "y":1},
+ {"label":"K12 (B1,B7)", "x":2.5, "y":1},
+ {"label":"K13 (B1,C0)", "x":3.5, "y":1},
+ {"label":"K14 (B1,C1)", "x":4.5, "y":1},
+ {"label":"K15 (B1,C2)", "x":5.5, "y":1},
+ {"label":"K16 (B1,C3)", "x":6.5, "y":1},
+ {"label":"K17 (B1,C4)", "x":7.5, "y":1},
+ {"label":"K18 (B1,C5)", "x":8.5, "y":1},
+ {"label":"K19 (B1,C6)", "x":9.5, "y":1},
+ {"label":"K1A (B1,C7)", "x":10.5, "y":1},
+ {"label":"K1B (B1,D0)", "x":11.5, "y":1},
+ {"label":"K1C (B1,D1)", "x":12.5, "y":1},
+ {"label":"K2C (B2,D1)", "x":13.5, "y":1, "w":1.5},
+ {"label":"K1E (B1,D3)", "x":15, "y":1},
+ {"label":"K20 (B2,B5)", "x":0, "y":2, "w":1.75},
+ {"label":"K21 (B2,B6)", "x":1.75, "y":2},
+ {"label":"K22 (B2,B7)", "x":2.75, "y":2},
+ {"label":"K23 (B2,C0)", "x":3.75, "y":2},
+ {"label":"K24 (B2,C1)", "x":4.75, "y":2},
+ {"label":"K25 (B2,C2)", "x":5.75, "y":2},
+ {"label":"K26 (B2,C3)", "x":6.75, "y":2},
+ {"label":"K27 (B2,C4)", "x":7.75, "y":2},
+ {"label":"K28 (B2,C5)", "x":8.75, "y":2},
+ {"label":"K29 (B2,C6)", "x":9.75, "y":2},
+ {"label":"K2A (B2,C7)", "x":10.75, "y":2},
+ {"label":"K2B (B2,D0)", "x":11.75, "y":2},
+ {"label":"K2D (B2,D2)", "x":12.75, "y":2, "w":2.25},
+ {"label":"K2E (B2,D3)", "x":15, "y":2},
+ {"label":"K30 (B3,B5)", "x":0, "y":3, "w":1.25},
+ {"label":"K31 (B3,B6)", "x":1.25, "y":3},
+ {"label":"K32 (B3,B7)", "x":2.25, "y":3},
+ {"label":"K33 (B3,C0)", "x":3.25, "y":3},
+ {"label":"K34 (B3,C1)", "x":4.25, "y":3},
+ {"label":"K35 (B3,C2)", "x":5.25, "y":3},
+ {"label":"K36 (B3,C3)", "x":6.25, "y":3},
+ {"label":"K37 (B3,C4)", "x":7.25, "y":3},
+ {"label":"K38 (B3,C5)", "x":8.25, "y":3},
+ {"label":"K39 (B3,C6)", "x":9.25, "y":3},
+ {"label":"K3A (B3,C7)", "x":10.25, "y":3},
+ {"label":"K3B (B3,D0)", "x":11.25, "y":3},
+ {"label":"K3C (B3,D1)", "x":12.25, "y":3, "w":1.75},
+ {"label":"K3D (B3,D2)", "x":14, "y":3},
+ {"label":"K3E (B3,D3)", "x":15, "y":3},
+ {"label":"K40 (B4,B5)", "x":0, "y":4, "w":1.25},
+ {"label":"K41 (B4,B6)", "x":1.25, "y":4, "w":1.25},
+ {"label":"K42 (B4,B7)", "x":2.5, "y":4, "w":1.25},
+ {"label":"K46 (B4,C3)", "x":3.75, "y":4, "w":6.25},
+ {"label":"K4A (B4,C7)", "x":10, "y":4, "w":1.25},
+ {"label":"K4B (B4,D0)", "x":11.25, "y":4, "w":1.25},
+ {"label":"K4C (B4,D1)", "x":13, "y":4},
+ {"label":"K4D (B4,D2)", "x":14, "y":4},
+ {"label":"K4E (B4,D3)", "x":15, "y":4}
+ ]
+ },
+ "LAYOUT_65_ansi_blocker": {
+ "layout": [
+ {"label":"K00 (B0,B5)", "x":0, "y":0},
+ {"label":"K01 (B0,B6)", "x":1, "y":0},
+ {"label":"K02 (B0,B7)", "x":2, "y":0},
+ {"label":"K03 (B0,C0)", "x":3, "y":0},
+ {"label":"K04 (B0,C1)", "x":4, "y":0},
+ {"label":"K05 (B0,C2)", "x":5, "y":0},
+ {"label":"K06 (B0,C3)", "x":6, "y":0},
+ {"label":"K07 (B0,C4)", "x":7, "y":0},
+ {"label":"K08 (B0,C5)", "x":8, "y":0},
+ {"label":"K09 (B0,C6)", "x":9, "y":0},
+ {"label":"K0A (B0,C7)", "x":10, "y":0},
+ {"label":"K0B (B0,D0)", "x":11, "y":0},
+ {"label":"K0C (B0,D1)", "x":12, "y":0},
+ {"label":"K0D (B0,D2)", "x":13, "y":0, "w":2},
+ {"label":"K0E (B0,D3)", "x":15, "y":0},
+ {"label":"K10 (B1,B5)", "x":0, "y":1, "w":1.5},
+ {"label":"K11 (B1,B6)", "x":1.5, "y":1},
+ {"label":"K12 (B1,B7)", "x":2.5, "y":1},
+ {"label":"K13 (B1,C0)", "x":3.5, "y":1},
+ {"label":"K14 (B1,C1)", "x":4.5, "y":1},
+ {"label":"K15 (B1,C2)", "x":5.5, "y":1},
+ {"label":"K16 (B1,C3)", "x":6.5, "y":1},
+ {"label":"K17 (B1,C4)", "x":7.5, "y":1},
+ {"label":"K18 (B1,C5)", "x":8.5, "y":1},
+ {"label":"K19 (B1,C6)", "x":9.5, "y":1},
+ {"label":"K1A (B1,C7)", "x":10.5, "y":1},
+ {"label":"K1B (B1,D0)", "x":11.5, "y":1},
+ {"label":"K1C (B1,D1)", "x":12.5, "y":1},
+ {"label":"K2C (B2,D1)", "x":13.5, "y":1, "w":1.5},
+ {"label":"K1E (B1,D3)", "x":15, "y":1},
+ {"label":"K20 (B2,B5)", "x":0, "y":2, "w":1.75},
+ {"label":"K21 (B2,B6)", "x":1.75, "y":2},
+ {"label":"K22 (B2,B7)", "x":2.75, "y":2},
+ {"label":"K23 (B2,C0)", "x":3.75, "y":2},
+ {"label":"K24 (B2,C1)", "x":4.75, "y":2},
+ {"label":"K25 (B2,C2)", "x":5.75, "y":2},
+ {"label":"K26 (B2,C3)", "x":6.75, "y":2},
+ {"label":"K27 (B2,C4)", "x":7.75, "y":2},
+ {"label":"K28 (B2,C5)", "x":8.75, "y":2},
+ {"label":"K29 (B2,C6)", "x":9.75, "y":2},
+ {"label":"K2A (B2,C7)", "x":10.75, "y":2},
+ {"label":"K2B (B2,D0)", "x":11.75, "y":2},
+ {"label":"K2D (B2,D2)", "x":12.75, "y":2, "w":2.25},
+ {"label":"K2E (B2,D3)", "x":15, "y":2},
+ {"label":"K30 (B3,B5)", "x":0, "y":3, "w":2.25},
+ {"label":"K32 (B3,B7)", "x":2.25, "y":3},
+ {"label":"K33 (B3,C0)", "x":3.25, "y":3},
+ {"label":"K34 (B3,C1)", "x":4.25, "y":3},
+ {"label":"K35 (B3,C2)", "x":5.25, "y":3},
+ {"label":"K36 (B3,C3)", "x":6.25, "y":3},
+ {"label":"K37 (B3,C4)", "x":7.25, "y":3},
+ {"label":"K38 (B3,C5)", "x":8.25, "y":3},
+ {"label":"K39 (B3,C6)", "x":9.25, "y":3},
+ {"label":"K3A (B3,C7)", "x":10.25, "y":3},
+ {"label":"K3B (B3,D0)", "x":11.25, "y":3},
+ {"label":"K3C (B3,D1)", "x":12.25, "y":3, "w":1.75},
+ {"label":"K3D (B3,D2)", "x":14, "y":3},
+ {"label":"K3E (B3,D3)", "x":15, "y":3},
+ {"label":"K40 (B4,B5)", "x":0, "y":4, "w":1.25},
+ {"label":"K41 (B4,B6)", "x":1.25, "y":4, "w":1.25},
+ {"label":"K42 (B4,B7)", "x":2.5, "y":4, "w":1.25},
+ {"label":"K46 (B4,C3)", "x":3.75, "y":4, "w":6.25},
+ {"label":"K4A (B4,C7)", "x":10, "y":4, "w":1.25},
+ {"label":"K4B (B4,D0)", "x":11.25, "y":4, "w":1.25},
+ {"label":"K4C (B4,D1)", "x":13, "y":4},
+ {"label":"K4D (B4,D2)", "x":14, "y":4},
+ {"label":"K4E (B4,D3)", "x":15, "y":4}
+ ]
+ },
+ "LAYOUT_65_iso_blocker": {
+ "layout": [
+ {"label":"K00 (B0,B5)", "x":0, "y":0},
+ {"label":"K01 (B0,B6)", "x":1, "y":0},
+ {"label":"K02 (B0,B7)", "x":2, "y":0},
+ {"label":"K03 (B0,C0)", "x":3, "y":0},
+ {"label":"K04 (B0,C1)", "x":4, "y":0},
+ {"label":"K05 (B0,C2)", "x":5, "y":0},
+ {"label":"K06 (B0,C3)", "x":6, "y":0},
+ {"label":"K07 (B0,C4)", "x":7, "y":0},
+ {"label":"K08 (B0,C5)", "x":8, "y":0},
+ {"label":"K09 (B0,C6)", "x":9, "y":0},
+ {"label":"K0A (B0,C7)", "x":10, "y":0},
+ {"label":"K0B (B0,D0)", "x":11, "y":0},
+ {"label":"K0C (B0,D1)", "x":12, "y":0},
+ {"label":"K0D (B0,D2)", "x":13, "y":0, "w":2},
+ {"label":"K0E (B0,D3)", "x":15, "y":0},
+ {"label":"K10 (B1,B5)", "x":0, "y":1, "w":1.5},
+ {"label":"K11 (B1,B6)", "x":1.5, "y":1},
+ {"label":"K12 (B1,B7)", "x":2.5, "y":1},
+ {"label":"K13 (B1,C0)", "x":3.5, "y":1},
+ {"label":"K14 (B1,C1)", "x":4.5, "y":1},
+ {"label":"K15 (B1,C2)", "x":5.5, "y":1},
+ {"label":"K16 (B1,C3)", "x":6.5, "y":1},
+ {"label":"K17 (B1,C4)", "x":7.5, "y":1},
+ {"label":"K18 (B1,C5)", "x":8.5, "y":1},
+ {"label":"K19 (B1,C6)", "x":9.5, "y":1},
+ {"label":"K1A (B1,C7)", "x":10.5, "y":1},
+ {"label":"K1B (B1,D0)", "x":11.5, "y":1},
+ {"label":"K1C (B1,D1)", "x":12.5, "y":1},
+ {"label":"K2D (B2,D2)", "x":13.75, "y":1, "w":1.25, "h":2},
+ {"label":"K1E (B1,D3)", "x":15, "y":1},
+ {"label":"K20 (B2,B5)", "x":0, "y":2, "w":1.75},
+ {"label":"K21 (B2,B6)", "x":1.75, "y":2},
+ {"label":"K22 (B2,B7)", "x":2.75, "y":2},
+ {"label":"K23 (B2,C0)", "x":3.75, "y":2},
+ {"label":"K24 (B2,C1)", "x":4.75, "y":2},
+ {"label":"K25 (B2,C2)", "x":5.75, "y":2},
+ {"label":"K26 (B2,C3)", "x":6.75, "y":2},
+ {"label":"K27 (B2,C4)", "x":7.75, "y":2},
+ {"label":"K28 (B2,C5)", "x":8.75, "y":2},
+ {"label":"K29 (B2,C6)", "x":9.75, "y":2},
+ {"label":"K2A (B2,C7)", "x":10.75, "y":2},
+ {"label":"K2B (B2,D0)", "x":11.75, "y":2},
+ {"label":"K2C (B2,D1)", "x":12.75, "y":2},
+ {"label":"K2E (B2,D3)", "x":15, "y":2},
+ {"label":"K30 (B3,B5)", "x":0, "y":3, "w":1.25},
+ {"label":"K31 (B3,B6)", "x":1.25, "y":3},
+ {"label":"K32 (B3,B7)", "x":2.25, "y":3},
+ {"label":"K33 (B3,C0)", "x":3.25, "y":3},
+ {"label":"K34 (B3,C1)", "x":4.25, "y":3},
+ {"label":"K35 (B3,C2)", "x":5.25, "y":3},
+ {"label":"K36 (B3,C3)", "x":6.25, "y":3},
+ {"label":"K37 (B3,C4)", "x":7.25, "y":3},
+ {"label":"K38 (B3,C5)", "x":8.25, "y":3},
+ {"label":"K39 (B3,C6)", "x":9.25, "y":3},
+ {"label":"K3A (B3,C7)", "x":10.25, "y":3},
+ {"label":"K3B (B3,D0)", "x":11.25, "y":3},
+ {"label":"K3C (B3,D1)", "x":12.25, "y":3, "w":1.75},
+ {"label":"K3D (B3,D2)", "x":14, "y":3},
+ {"label":"K3E (B3,D3)", "x":15, "y":3},
+ {"label":"K40 (B4,B5)", "x":0, "y":4, "w":1.25},
+ {"label":"K41 (B4,B6)", "x":1.25, "y":4, "w":1.25},
+ {"label":"K42 (B4,B7)", "x":2.5, "y":4, "w":1.25},
+ {"label":"K46 (B4,C3)", "x":3.75, "y":4, "w":6.25},
+ {"label":"K4A (B4,C7)", "x":10, "y":4, "w":1.25},
+ {"label":"K4B (B4,D0)", "x":11.25, "y":4, "w":1.25},
+ {"label":"K4C (B4,D1)", "x":13, "y":4},
+ {"label":"K4D (B4,D2)", "x":14, "y":4},
+ {"label":"K4E (B4,D3)", "x":15, "y":4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/mechlovin/hannah65/rev1/keymaps/default/keymap.c b/keyboards/mechlovin/hannah65/rev1/keymaps/default/keymap.c
new file mode 100644
index 000000000..e4960b54f
--- /dev/null
+++ b/keyboards/mechlovin/hannah65/rev1/keymaps/default/keymap.c
@@ -0,0 +1,29 @@
+/* Copyright 2020 Team Mechlovin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_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_BSPC, KC_DEL, KC_HOME,
+ 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_PGUP,
+ 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_PGDN,
+ 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_LSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+
+};
+
diff --git a/keyboards/mechlovin/hannah65/rev1/keymaps/default/readme.md b/keyboards/mechlovin/hannah65/rev1/keymaps/default/readme.md
new file mode 100644
index 000000000..1e8f0ec1f
--- /dev/null
+++ b/keyboards/mechlovin/hannah65/rev1/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for hannah65
diff --git a/keyboards/mechlovin/hannah65/rev1/keymaps/via/keymap.c b/keyboards/mechlovin/hannah65/rev1/keymaps/via/keymap.c
new file mode 100644
index 000000000..34a9cf826
--- /dev/null
+++ b/keyboards/mechlovin/hannah65/rev1/keymaps/via/keymap.c
@@ -0,0 +1,50 @@
+/* Copyright 2020 Team Mechlovin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_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_BSPC, KC_DEL, KC_HOME,
+ 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_PGUP,
+ 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_PGDN,
+ 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_LSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_all(
+ 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, 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
+ ),
+ [2] = LAYOUT_all(
+ 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, 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
+ ),
+ [3] = LAYOUT_all(
+ 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, 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
+ ),
+
+
+};
+
diff --git a/keyboards/mechlovin/hannah65/rev1/keymaps/via/rules.mk b/keyboards/mechlovin/hannah65/rev1/keymaps/via/rules.mk
new file mode 100644
index 000000000..036bd6d1c
--- /dev/null
+++ b/keyboards/mechlovin/hannah65/rev1/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/mechlovin/hannah65/rev1/rev1.h b/keyboards/mechlovin/hannah65/rev1/rev1.h
new file mode 100644
index 000000000..0b6b863d5
--- /dev/null
+++ b/keyboards/mechlovin/hannah65/rev1/rev1.h
@@ -0,0 +1,61 @@
+/* Copyright 2020 Team Mechlovin
+ *
+ * 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_all( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K1D, K0E, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K2C, K1E, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K2E, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
+ K40, K41, K42, K46, K4A, K4B, K4C, K4D, K4E \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \
+ { K40, K41, K42, KC_NO, KC_NO, KC_NO, K46, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D, K4E }, \
+}
+
+#define LAYOUT_65_ansi_blocker( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K2C, K1E, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K2E, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
+ K40, K41, K42, K46, K4A, K4B, K4C, K4D, K4E \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, KC_NO, K1E }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E }, \
+ { K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \
+ { K40, K41, K42, KC_NO, KC_NO, KC_NO, K46, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D, K4E }, \
+}
+
+#define LAYOUT_65_iso_blocker( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K2D, K1E, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2E, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
+ K40, K41, K42, K46, K4A, K4B, K4C, K4D, K4E \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, KC_NO, K1E }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \
+ { K40, K41, K42, KC_NO, KC_NO, KC_NO, K46, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D, K4E }, \
+}
diff --git a/keyboards/mechlovin/hannah65/rev1/rules.mk b/keyboards/mechlovin/hannah65/rev1/rules.mk
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/keyboards/mechlovin/hannah65/rev1/rules.mk
diff --git a/keyboards/mechlovin/hannah65/rules.mk b/keyboards/mechlovin/hannah65/rules.mk
new file mode 100644
index 000000000..74157ae71
--- /dev/null
+++ b/keyboards/mechlovin/hannah65/rules.mk
@@ -0,0 +1,21 @@
+# MCU name
+MCU = STM32F303
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
+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
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
+
+DEFAULT_FOLDER = mechlovin/hannah65/rev1 \ No newline at end of file
diff --git a/keyboards/melgeek/mj61/config.h b/keyboards/melgeek/mj61/config.h
new file mode 100644
index 000000000..452b1c872
--- /dev/null
+++ b/keyboards/melgeek/mj61/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2020 MelGeek <melgeek001365@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 "config_common.h"
diff --git a/keyboards/melgeek/mj61/info.json b/keyboards/melgeek/mj61/info.json
new file mode 100644
index 000000000..460858474
--- /dev/null
+++ b/keyboards/melgeek/mj61/info.json
@@ -0,0 +1,78 @@
+{
+ "keyboard_name": "MJ61",
+ "url": "",
+ "maintainer": "melgeek001365",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_60_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":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":2.75},
+
+ {"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":12.5, "y":4, "w":1.25},
+ {"x":13.75, "y":4, "w":1.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/melgeek/mj61/keymaps/default/keymap.c b/keyboards/melgeek/mj61/keymaps/default/keymap.c
new file mode 100644
index 000000000..2237851fb
--- /dev/null
+++ b/keyboards/melgeek/mj61/keymaps/default/keymap.c
@@ -0,0 +1,42 @@
+/* Copyright 2020 MelGeek <melgeek001365@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] = {
+ [0] = LAYOUT_60_ansi(
+ 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_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ 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_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), MO(2), KC_RCTL
+ ),
+ [1] = LAYOUT_60_ansi(
+ KC_GESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ _______, _______, KC_UP, _______, _______, _______, KC_CALC, _______, KC_INS, _______, KC_PSCR, KC_SLCK, KC_PAUS, RESET,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, EEP_RST,
+ KC_MPRV, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, NK_TOGG, _______, _______, KC_END, KC_PGDN, KC_MNXT,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ [2] = LAYOUT_60_ansi(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_TOG, _______, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, RGB_MOD, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, RGB_SPI, RGB_SPD, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
+
diff --git a/keyboards/melgeek/mj61/keymaps/via/keymap.c b/keyboards/melgeek/mj61/keymaps/via/keymap.c
new file mode 100644
index 000000000..409a37c9b
--- /dev/null
+++ b/keyboards/melgeek/mj61/keymaps/via/keymap.c
@@ -0,0 +1,49 @@
+/* Copyright 2020 MelGeek <melgeek001365@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] = {
+ [0] = LAYOUT_60_ansi(
+ 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_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ 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_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), MO(2), KC_RCTL
+ ),
+ [1] = LAYOUT_60_ansi(
+ KC_GESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ _______, _______, KC_UP, _______, _______, _______, KC_CALC, _______, KC_INS, _______, KC_PSCR, KC_SLCK, KC_PAUS, RESET,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, EEP_RST,
+ KC_MPRV, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, NK_TOGG, _______, _______, KC_END, KC_PGDN, KC_MNXT,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ [2] = LAYOUT_60_ansi(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_TOG, _______, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, RGB_MOD, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, RGB_SPI, RGB_SPD, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ [3] = LAYOUT_60_ansi(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
+
diff --git a/keyboards/melgeek/mj61/keymaps/via/rules.mk b/keyboards/melgeek/mj61/keymaps/via/rules.mk
new file mode 100644
index 000000000..36b7ba9cb
--- /dev/null
+++ b/keyboards/melgeek/mj61/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/melgeek/mj61/mj61.c b/keyboards/melgeek/mj61/mj61.c
new file mode 100644
index 000000000..21853019f
--- /dev/null
+++ b/keyboards/melgeek/mj61/mj61.c
@@ -0,0 +1,124 @@
+/* Copyright 2020 MelGeek <melgeek001365@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 "mj61.h"
+
+#ifdef RGB_MATRIX_ENABLE
+const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
+ {0, CS12_SW1, CS11_SW1, CS10_SW1}, /* RGB1 */
+ {0, CS12_SW2, CS11_SW2, CS10_SW2}, /* RGB2 */
+ {0, CS12_SW3, CS11_SW3, CS10_SW3}, /* RGB3 */
+ {0, CS12_SW4, CS11_SW4, CS10_SW4}, /* RGB4 */
+ {0, CS12_SW5, CS11_SW5, CS10_SW5}, /* RGB5 */
+ {0, CS12_SW6, CS11_SW6, CS10_SW6}, /* RGB6 */
+ {0, CS12_SW7, CS11_SW7, CS10_SW7}, /* RGB7 */
+ {0, CS12_SW8, CS11_SW8, CS10_SW8}, /* RGB8 */
+ {0, CS12_SW9, CS11_SW9, CS10_SW9}, /* RGB9 */
+ {0, CS15_SW1, CS14_SW1, CS13_SW1}, /* RGB10 */
+ {0, CS15_SW2, CS14_SW2, CS13_SW2}, /* RGB11 */
+ {0, CS15_SW3, CS14_SW3, CS13_SW3}, /* RGB12 */
+ {0, CS15_SW4, CS14_SW4, CS13_SW4}, /* RGB13 */
+ {0, CS15_SW5, CS14_SW5, CS13_SW5}, /* RGB14 */
+ {0, CS15_SW6, CS14_SW6, CS13_SW6}, /* RGB15 */
+ {0, CS15_SW7, CS14_SW7, CS13_SW7}, /* RGB16 */
+ {0, CS15_SW8, CS14_SW8, CS13_SW8}, /* RGB17 */
+ {0, CS15_SW9, CS14_SW9, CS13_SW9}, /* RGB18 */
+ {0, CS18_SW1, CS17_SW1, CS16_SW1}, /* RGB19 */
+ {0, CS18_SW2, CS17_SW2, CS16_SW2}, /* RGB20 */
+ {0, CS18_SW3, CS17_SW3, CS16_SW3}, /* RGB21 */
+ {0, CS18_SW4, CS17_SW4, CS16_SW4}, /* RGB22 */
+ {0, CS18_SW5, CS17_SW5, CS16_SW5}, /* RGB23 */
+ {0, CS18_SW6, CS17_SW6, CS16_SW6}, /* RGB24 */
+ {0, CS18_SW7, CS17_SW7, CS16_SW7}, /* RGB25 */
+ {0, CS18_SW8, CS17_SW8, CS16_SW8}, /* RGB26 */
+ {0, CS18_SW9, CS17_SW9, CS16_SW9}, /* RGB27 */
+ {0, CS21_SW1, CS20_SW1, CS19_SW1}, /* RGB28 */
+ {0, CS21_SW2, CS20_SW2, CS19_SW2}, /* RGB29 */
+ {0, CS21_SW3, CS20_SW3, CS19_SW3}, /* RGB30 */
+ {0, CS21_SW4, CS20_SW4, CS19_SW4}, /* RGB31 */
+ {0, CS21_SW5, CS20_SW5, CS19_SW5}, /* RGB32 */
+ {0, CS21_SW6, CS20_SW6, CS19_SW6}, /* RGB33 */
+ {0, CS21_SW7, CS20_SW7, CS19_SW7}, /* RGB34 */
+ {0, CS21_SW8, CS20_SW8, CS19_SW8}, /* RGB35 */
+ {0, CS21_SW9, CS20_SW9, CS19_SW9}, /* RGB36 */
+ {0, CS24_SW1, CS23_SW1, CS22_SW1}, /* RGB37 */
+ {0, CS24_SW2, CS23_SW2, CS22_SW2}, /* RGB38 */
+ {0, CS24_SW3, CS23_SW3, CS22_SW3}, /* RGB39 */
+ {0, CS24_SW4, CS23_SW4, CS22_SW4}, /* RGB40 */
+ {0, CS24_SW5, CS23_SW5, CS22_SW5}, /* RGB41 */
+ {0, CS24_SW6, CS23_SW6, CS22_SW6}, /* RGB42 */
+ {0, CS24_SW7, CS23_SW7, CS22_SW7}, /* RGB43 */
+ {0, CS24_SW8, CS23_SW8, CS22_SW8}, /* RGB44 */
+ {0, CS24_SW9, CS23_SW9, CS22_SW9}, /* RGB45 */
+ {0, CS27_SW1, CS26_SW1, CS25_SW1}, /* RGB46 */
+ {0, CS27_SW2, CS26_SW2, CS25_SW2}, /* RGB47 */
+ {0, CS27_SW3, CS26_SW3, CS25_SW3}, /* RGB48 */
+ {0, CS27_SW4, CS26_SW4, CS25_SW4}, /* RGB49 */
+ {0, CS27_SW5, CS26_SW5, CS25_SW5}, /* RGB50 */
+ {0, CS27_SW6, CS26_SW6, CS25_SW6}, /* RGB51 */
+ {0, CS27_SW7, CS26_SW7, CS25_SW7}, /* RGB52 */
+ {0, CS27_SW8, CS26_SW8, CS25_SW8}, /* RGB53 */
+ {0, CS27_SW9, CS26_SW9, CS25_SW9}, /* RGB54 */
+ {0, CS30_SW1, CS29_SW1, CS28_SW1}, /* RGB55 */
+ {0, CS30_SW2, CS29_SW2, CS28_SW2}, /* RGB56 */
+ {0, CS30_SW3, CS29_SW3, CS28_SW3}, /* RGB57 */
+ {0, CS30_SW4, CS29_SW4, CS28_SW4}, /* RGB58 */
+ {0, CS30_SW5, CS29_SW5, CS28_SW5}, /* RGB59 */
+ {0, CS30_SW6, CS29_SW6, CS28_SW6}, /* RGB60 */
+ {0, CS30_SW7, CS29_SW7, CS28_SW7}, /* RGB61 */
+ {0, CS30_SW8, CS29_SW8, CS28_SW8}, /* RGB62 */
+ {0, CS30_SW9, CS29_SW9, CS28_SW9}, /* RGB63 */
+};
+
+led_config_t g_led_config = {
+ {
+ /* C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 */
+ { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }, /* R0 */
+ { 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14 }, /* R1 */
+ { 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, NO_LED,}, /* R2 */
+ { 52, NO_LED, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, NO_LED }, /* R3 */
+ { 53, 54, NO_LED, 55, 61, 56, 62, NO_LED, NO_LED, 57, 58, 59, 60, NO_LED }, /* R4 */
+ }, {
+ {0, 0}, {16, 0}, {32, 0}, {48, 0}, {64, 0}, {80, 0}, {96, 0}, {112, 0}, {128, 0}, {144, 0}, {160, 0}, {176, 0}, {192, 0}, {208, 0},
+ {0, 16}, {16, 16}, {32, 16}, {48, 16}, {64, 16}, {80, 16}, {96, 16}, {112, 16}, {128, 16}, {144, 16}, {160, 16}, {176, 16}, {192, 16}, {208, 16},
+ {0, 32}, {16, 32}, {32, 32}, {48, 32}, {64, 32}, {80, 32}, {96, 32}, {112, 32}, {128, 32}, {144, 32}, {160, 32}, {176, 32}, {192, 32},
+ {0, 48}, {16, 48}, {32, 48}, {48, 48}, {64, 48}, {80, 48}, {96, 48}, {112, 48}, {128, 48}, {144, 48}, {160, 48}, {176, 48},
+ {0, 64}, {16, 64}, {32, 64}, {48, 64}, {64, 64}, {80, 64}, {96, 64}, {112, 64}, {128, 64}, {144, 64},
+ }, {
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ }
+};
+
+void suspend_power_down_kb(void) {
+ rgb_matrix_set_suspend_state(true);
+ suspend_power_down_user();
+}
+
+void suspend_wakeup_init_kb(void) {
+ rgb_matrix_set_suspend_state(false);
+ suspend_wakeup_init_user();
+}
+
+void keyboard_pre_init_kb(void) {
+ setPinOutput(A2);
+ writePinHigh(A2);
+ keyboard_pre_init_user();
+}
+#endif
diff --git a/keyboards/melgeek/mj61/mj61.h b/keyboards/melgeek/mj61/mj61.h
new file mode 100644
index 000000000..1881196db
--- /dev/null
+++ b/keyboards/melgeek/mj61/mj61.h
@@ -0,0 +1,35 @@
+/* Copyright 2020 MelGeek <melgeek001365@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_60_ansi( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, \
+ K40, K41, K43, K45, K49, K4A, K4B, K4D \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, XXX }, \
+ { K30, XXX, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, XXX }, \
+ { K40, K41, XXX, K43, XXX, K45, XXX, XXX, XXX, K49, K4A, K4B, XXX, K4D } \
+}
diff --git a/keyboards/melgeek/mj61/readme.md b/keyboards/melgeek/mj61/readme.md
new file mode 100644
index 000000000..2db0e71b6
--- /dev/null
+++ b/keyboards/melgeek/mj61/readme.md
@@ -0,0 +1,15 @@
+# MelGeek MJ61
+
+![MJ61](https://cdn.shopifycdn.net/s/files/1/0078/2863/5712/products/a0ebad495be43c4c42403878b4af4ac2_1024x1024@2x.jpg?v=1600672895)
+
+A hotswap 60% RGB Custom Mechanical keyboard.
+
+* Keyboard Maintainer: [melgeek](https://github.com/melgeek001365)
+* Hardware Supported: MJ61 V1.1.2 20200612
+* Hardware Availability: [MelGeek](https://www.melgeek.com/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make melgeek/mj61/rev1:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/melgeek/mj61/rev1/config.h b/keyboards/melgeek/mj61/rev1/config.h
new file mode 100644
index 000000000..a0ba953b0
--- /dev/null
+++ b/keyboards/melgeek/mj61/rev1/config.h
@@ -0,0 +1,70 @@
+/* Copyright 2020 MelGeek <melgeek001365@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 0xFEED
+#define PRODUCT_ID 0xED61
+#define DEVICE_VER 0x0001
+#define MANUFACTURER MelGeek
+#define PRODUCT MJ61
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 14
+
+/*
+ * 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 { B12, B11, B10, B1, A3 }
+#define MATRIX_COL_PINS { B15, A8, A10, A15, B3, B4, B5, B8, B9, C13, C14, C15, A0, A1 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 3
+
+/* disable these deprecated features by default */
+#define NO_ACTION_MACRO
+#define NO_ACTION_FUNCTION
+
+#define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
+#define RGB_DISABLE_WHEN_USB_SUSPENDED true // turn off effects when suspended
+#define RGB_MATRIX_KEYPRESSES
+#define RGB_MATRIX_LED_PROCESS_LIMIT 4
+#define RGB_MATRIX_LED_FLUSH_LIMIT 26
+#define DISABLE_RGB_MATRIX_SPLASH
+#define DISABLE_RGB_MATRIX_MULTISPLASH
+#define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH
+//#define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_SOLID_COLOR
+#define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_CYCLE_ALL
+#define DRIVER_ADDR_1 0b0110000
+#define DRIVER_ADDR_2 0b0110000 // this is here for compliancy reasons.
+#define DRIVER_COUNT 1
+#define DRIVER_1_LED_TOTAL 63
+#define DRIVER_LED_TOTAL DRIVER_1_LED_TOTAL
+#define DRIVER_INDICATOR_LED_TOTAL 0
diff --git a/keyboards/melgeek/mj61/rev1/rules.mk b/keyboards/melgeek/mj61/rev1/rules.mk
new file mode 100644
index 000000000..ba7f9eac2
--- /dev/null
+++ b/keyboards/melgeek/mj61/rev1/rules.mk
@@ -0,0 +1,20 @@
+# MCU name
+MCU = STM32F303
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+RGB_MATRIX_ENABLE = IS31FL3741 # Use RGB matrix
+NO_USB_STARTUP_CHECK = no # Disable initialization only when usb is plugged in
diff --git a/keyboards/metamechs/timberwolf/keymaps/a_ansi/keymap.c b/keyboards/metamechs/timberwolf/keymaps/a_ansi/keymap.c
index 0e4f99442..7d66af49b 100644
--- a/keyboards/metamechs/timberwolf/keymaps/a_ansi/keymap.c
+++ b/keyboards/metamechs/timberwolf/keymaps/a_ansi/keymap.c
@@ -33,12 +33,4 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______,_______ ,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, _______,
MO(1) ,_______,_______,_______ ,_______ ,_______,_______, _______,_______,_______,_______
)
-};
-
-void encoder_update_user(uint8_t index, bool clockwise) {
- if (clockwise) {
- tap_code(KC_VOLU);
- } else {
- tap_code(KC_VOLD);
- }
-} \ No newline at end of file
+}; \ No newline at end of file
diff --git a/keyboards/metamechs/timberwolf/keymaps/a_iso/keymap.c b/keyboards/metamechs/timberwolf/keymaps/a_iso/keymap.c
index 91d383162..78a77d0f8 100644
--- a/keyboards/metamechs/timberwolf/keymaps/a_iso/keymap.c
+++ b/keyboards/metamechs/timberwolf/keymaps/a_iso/keymap.c
@@ -33,12 +33,4 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, _______,
MO(1) ,_______,_______,_______ ,_______ ,_______,_______, _______,_______,_______,_______
)
-};
-
-void encoder_update_user(uint8_t index, bool clockwise) {
- if (clockwise) {
- tap_code(KC_VOLU);
- } else {
- tap_code(KC_VOLD);
- }
-} \ No newline at end of file
+}; \ No newline at end of file
diff --git a/keyboards/metamechs/timberwolf/keymaps/b_ansi/keymap.c b/keyboards/metamechs/timberwolf/keymaps/b_ansi/keymap.c
index 0b33e2e48..9f435715d 100644
--- a/keyboards/metamechs/timberwolf/keymaps/b_ansi/keymap.c
+++ b/keyboards/metamechs/timberwolf/keymaps/b_ansi/keymap.c
@@ -33,12 +33,4 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______,_______ ,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______ ,_______,
MO(1) ,_______,_______,_______ ,_______ ,_______,_______,_______ ,_______,_______,_______
)
-};
-
-void encoder_update_user(uint8_t index, bool clockwise) {
- if (clockwise) {
- tap_code(KC_VOLU);
- } else {
- tap_code(KC_VOLD);
- }
-} \ No newline at end of file
+}; \ No newline at end of file
diff --git a/keyboards/metamechs/timberwolf/keymaps/b_iso/keymap.c b/keyboards/metamechs/timberwolf/keymaps/b_iso/keymap.c
index 137fa4a50..85217a940 100644
--- a/keyboards/metamechs/timberwolf/keymaps/b_iso/keymap.c
+++ b/keyboards/metamechs/timberwolf/keymaps/b_iso/keymap.c
@@ -33,12 +33,4 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,
MO(1) ,_______,_______,_______ ,_______ ,_______,_______,_______ ,_______,_______,_______
)
-};
-
-void encoder_update_user(uint8_t index, bool clockwise) {
- if (clockwise) {
- tap_code(KC_VOLU);
- } else {
- tap_code(KC_VOLD);
- }
-} \ No newline at end of file
+}; \ No newline at end of file
diff --git a/keyboards/metamechs/timberwolf/keymaps/default/keymap.c b/keyboards/metamechs/timberwolf/keymaps/default/keymap.c
index 4870eaa3f..85b79f168 100644
--- a/keyboards/metamechs/timberwolf/keymaps/default/keymap.c
+++ b/keyboards/metamechs/timberwolf/keymaps/default/keymap.c
@@ -33,12 +33,4 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
MO(1) ,_______,_______,_______ ,_______ ,_______,_______,_______,_______,_______,_______,_______,_______
)
-};
-
-void encoder_update_user(uint8_t index, bool clockwise) {
- if (clockwise) {
- tap_code(KC_VOLU);
- } else {
- tap_code(KC_VOLD);
- }
-} \ No newline at end of file
+}; \ No newline at end of file
diff --git a/keyboards/metamechs/timberwolf/keymaps/prime_ansi/keymap.c b/keyboards/metamechs/timberwolf/keymaps/prime_ansi/keymap.c
index 89c1db021..4a49bdf0a 100644
--- a/keyboards/metamechs/timberwolf/keymaps/prime_ansi/keymap.c
+++ b/keyboards/metamechs/timberwolf/keymaps/prime_ansi/keymap.c
@@ -33,12 +33,4 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______,_______ ,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______ ,_______,
MO(1) ,_______,_______,_______ ,_______ ,_______,_______,_______ ,_______,_______,_______
)
-};
-
-void encoder_update_user(uint8_t index, bool clockwise) {
- if (clockwise) {
- tap_code(KC_VOLU);
- } else {
- tap_code(KC_VOLD);
- }
-} \ No newline at end of file
+}; \ No newline at end of file
diff --git a/keyboards/metamechs/timberwolf/keymaps/prime_iso/keymap.c b/keyboards/metamechs/timberwolf/keymaps/prime_iso/keymap.c
index 5716cdacc..1818ea4a3 100644
--- a/keyboards/metamechs/timberwolf/keymaps/prime_iso/keymap.c
+++ b/keyboards/metamechs/timberwolf/keymaps/prime_iso/keymap.c
@@ -33,12 +33,4 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,
MO(1) ,_______,_______,_______ ,_______ ,_______,_______,_______ ,_______,_______,_______
)
-};
-
-void encoder_update_user(uint8_t index, bool clockwise) {
- if (clockwise) {
- tap_code(KC_VOLU);
- } else {
- tap_code(KC_VOLD);
- }
-} \ No newline at end of file
+}; \ No newline at end of file
diff --git a/keyboards/metamechs/timberwolf/keymaps/via/keymap.c b/keyboards/metamechs/timberwolf/keymaps/via/keymap.c
index e19d3bbae..6246ffd2e 100644
--- a/keyboards/metamechs/timberwolf/keymaps/via/keymap.c
+++ b/keyboards/metamechs/timberwolf/keymaps/via/keymap.c
@@ -49,12 +49,4 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
_______,_______,_______,_______ ,_______ ,_______,_______,_______,_______,_______,_______,_______,_______
)
-};
-
-void encoder_update_user(uint8_t index, bool clockwise) {
- if (clockwise) {
- tap_code(KC_VOLU);
- } else {
- tap_code(KC_VOLD);
- }
-} \ No newline at end of file
+}; \ No newline at end of file
diff --git a/keyboards/metamechs/timberwolf/timberwolf.c b/keyboards/metamechs/timberwolf/timberwolf.c
index c9a750f45..af6d42a54 100644
--- a/keyboards/metamechs/timberwolf/timberwolf.c
+++ b/keyboards/metamechs/timberwolf/timberwolf.c
@@ -27,3 +27,12 @@ bool led_update_kb(led_t led_state) {
}
return runDefault;
}
+
+__attribute__((weak))
+void encoder_update_user(uint8_t index, bool clockwise) {
+ if (clockwise) {
+ tap_code(KC_VOLU);
+ } else {
+ tap_code(KC_VOLD);
+ }
+}
diff --git a/keyboards/minimacro5/config.h b/keyboards/minimacro5/config.h
new file mode 100644
index 000000000..b48b5df21
--- /dev/null
+++ b/keyboards/minimacro5/config.h
@@ -0,0 +1,62 @@
+/*
+Copyright 2012 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 "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xCEEB
+#define PRODUCT_ID 0x0007
+#define DEVICE_VER 0x0001
+#define MANUFACTURER leafcutterlabs
+#define PRODUCT miniMACRO5
+
+/* key matrix size */
+#define MATRIX_ROWS 1
+#define MATRIX_COLS 5
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ * NO_DIODE = switches are directly connected to AVR pins
+ *
+*/
+// #define MATRIX_ROW_PINS { D0, D5 }
+// #define MATRIX_COL_PINS { F1, F0, B0 }
+#define DIRECT_PINS { \
+ { F4, B6, B2, D7, B4 } \
+}
+//speed for double tap
+#define TAPPING_TERM 200
+
+#define UNUSED_PINS
+
+/* rotary encoder 1,2,3 closest to usb port is 0*/
+#define ENCODERS_PAD_B { D3, F6, F7, D4, C6}
+#define ENCODERS_PAD_A { F5, D2, D1, D0, E6}
+#define ENCODER_RESOLUTION 2 //default/suggested
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN B5
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 5 // Number of LEDs
diff --git a/keyboards/minimacro5/info.json b/keyboards/minimacro5/info.json
new file mode 100644
index 000000000..1cc2a2e41
--- /dev/null
+++ b/keyboards/minimacro5/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "minimacro5",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 5,
+ "height": 1,
+ "layouts": {
+ "LAYOUT_ortho_1x5": {
+ "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":5, "y":0}]
+ }
+ }
+}
diff --git a/keyboards/minimacro5/keymaps/default/keymap.c b/keyboards/minimacro5/keymaps/default/keymap.c
new file mode 100644
index 000000000..acd7f3283
--- /dev/null
+++ b/keyboards/minimacro5/keymaps/default/keymap.c
@@ -0,0 +1,46 @@
+#include QMK_KEYBOARD_H
+
+enum layers {
+ _MAIN,
+};
+
+void encoder_update_user(uint8_t index, bool clockwise) {
+ if (index == 0) { /* First encoder*/
+ if (clockwise) {
+ tap_code(KC_1);
+ } else {
+ tap_code(KC_2);
+ }
+ } else if (index == 1) { /* Second encoder*/
+ if (clockwise) {
+ tap_code(KC_3);
+ } else {
+ tap_code(KC_4);
+ }
+ } else if (index == 2) { /* Third encoder*/
+ if (clockwise) {
+ tap_code(KC_5);
+ } else {
+ tap_code(KC_6);
+ }
+ } else if (index == 3) { /* Fourth encoder*/
+ if (clockwise) {
+ tap_code(KC_7);
+ } else {
+ tap_code(KC_8);
+ }
+ } else if (index == 4) { /* Fifth encoder*/
+ if (clockwise) {
+ tap_code(KC_9);
+ } else {
+ tap_code(KC_0);
+ }
+ }
+}
+
+//
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { //buttion closest to usb is first
+ [_MAIN] = LAYOUT_ortho_1x5(
+ KC_A, KC_B, KC_C, KC_D, KC_E
+ )
+};
diff --git a/keyboards/minimacro5/keymaps/media/keymap.c b/keyboards/minimacro5/keymaps/media/keymap.c
new file mode 100644
index 000000000..f36954b07
--- /dev/null
+++ b/keyboards/minimacro5/keymaps/media/keymap.c
@@ -0,0 +1,43 @@
+#include QMK_KEYBOARD_H
+
+#define _MAIN 0
+
+void encoder_update_user(uint8_t index, bool clockwise) {
+ if (index == 0) { /* First encoder*/
+ if (clockwise) {
+ tap_code(KC_VOLU);
+ } else {
+ tap_code(KC_VOLD);
+ }
+ } else if (index == 1) { /* Second encoder*/
+ if (clockwise) {
+ tap_code(KC_3);
+ } else {
+ tap_code(KC_4);
+ }
+ } else if (index == 2) { /* Third encoder*/
+ if (clockwise) {
+ tap_code(KC_5);
+ } else {
+ tap_code(KC_6);
+ }
+ } else if (index == 3) { /* Fourth encoder*/
+ if (clockwise) {
+ tap_code(KC_7);
+ } else {
+ tap_code(KC_8);
+ }
+ } else if (index == 4) { /* Fifth encoder*/
+ if (clockwise) {
+ tap_code(KC_9);
+ } else {
+ tap_code(KC_0);
+ }
+ }
+}
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { //buttion closest to usb is first
+ [_MAIN] = LAYOUT_ortho_1x5(
+ KC_MUTE, KC_MEDIA_PREV_TRACK, KC_MEDIA_NEXT_TRACK, KC_MEDIA_PLAY_PAUSE, KC_MEDIA_STOP
+ )
+};
diff --git a/keyboards/minimacro5/minimacro5.c b/keyboards/minimacro5/minimacro5.c
new file mode 100644
index 000000000..7f9c5af1c
--- /dev/null
+++ b/keyboards/minimacro5/minimacro5.c
@@ -0,0 +1 @@
+#include "minimacro5.h"
diff --git a/keyboards/minimacro5/minimacro5.h b/keyboards/minimacro5/minimacro5.h
new file mode 100644
index 000000000..2d61ed893
--- /dev/null
+++ b/keyboards/minimacro5/minimacro5.h
@@ -0,0 +1,9 @@
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT_ortho_1x5( \
+ k01, k02, k03, k04, k05\
+ ) { \
+ { k01, k02, k03, k04, k05 } \
+}
diff --git a/keyboards/minimacro5/readme.md b/keyboards/minimacro5/readme.md
new file mode 100644
index 000000000..6266d2ba3
--- /dev/null
+++ b/keyboards/minimacro5/readme.md
@@ -0,0 +1,15 @@
+# miniMACRO5
+
+A 5 key Macropad based on Arduino Pro Micro with support for a combination of rotary encoders and mechanical switches.
+
+![](https://i.imgur.com/lxA8DSCl.jpg)
+
+* Keyboard Maintainer: [LeafCutterLabs](https://github.com/LeafCutterLabs)
+* Hardware Supported: Pro Micro 5V/16MHz and compatible.
+* Hardware availability: PCB Files are available [here](https://github.com/LeafCutterLabs/miniMACRO5), which you can get produced.
+
+Make example for this keyboard (after setting up your build environment):
+
+ make minimacro5:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/minimacro5/rules.mk b/keyboards/minimacro5/rules.mk
new file mode 100644
index 000000000..dd66c4fbd
--- /dev/null
+++ b/keyboards/minimacro5/rules.mk
@@ -0,0 +1,23 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
+ENCODER_ENABLE = yes #enable rotary encoders
diff --git a/keyboards/misterknife/knife66/chconf.h b/keyboards/misterknife/knife66/chconf.h
new file mode 100644
index 000000000..03f63da36
--- /dev/null
+++ b/keyboards/misterknife/knife66/chconf.h
@@ -0,0 +1,714 @@
+/*
+ ChibiOS - Copyright (C) 2006..2018 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.
+*/
+
+/**
+ * @file rt/templates/chconf.h
+ * @brief Configuration file template.
+ * @details A copy of this file must be placed in each project directory, it
+ * contains the application specific kernel settings.
+ *
+ * @addtogroup config
+ * @details Kernel related settings and hooks.
+ * @{
+ */
+
+#ifndef CHCONF_H
+#define CHCONF_H
+
+#define _CHIBIOS_RT_CONF_
+#define _CHIBIOS_RT_CONF_VER_6_0_
+
+/*===========================================================================*/
+/**
+ * @name System timers settings
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief System time counter resolution.
+ * @note Allowed values are 16 or 32 bits.
+ */
+#if !defined(CH_CFG_ST_RESOLUTION)
+#define CH_CFG_ST_RESOLUTION 32
+#endif
+
+/**
+ * @brief System tick frequency.
+ * @details Frequency of the system timer that drives the system ticks. This
+ * setting also defines the system tick time unit.
+ */
+#if !defined(CH_CFG_ST_FREQUENCY)
+#define CH_CFG_ST_FREQUENCY 10000
+#endif
+
+/**
+ * @brief Time intervals data size.
+ * @note Allowed values are 16, 32 or 64 bits.
+ */
+#if !defined(CH_CFG_INTERVALS_SIZE)
+#define CH_CFG_INTERVALS_SIZE 32
+#endif
+
+/**
+ * @brief Time types data size.
+ * @note Allowed values are 16 or 32 bits.
+ */
+#if !defined(CH_CFG_TIME_TYPES_SIZE)
+#define CH_CFG_TIME_TYPES_SIZE 32
+#endif
+
+/**
+ * @brief Time delta constant for the tick-less mode.
+ * @note If this value is zero then the system uses the classic
+ * periodic tick. This value represents the minimum number
+ * of ticks that is safe to specify in a timeout directive.
+ * The value one is not valid, timeouts are rounded up to
+ * this value.
+ */
+#if !defined(CH_CFG_ST_TIMEDELTA)
+#define CH_CFG_ST_TIMEDELTA 2
+#endif
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Kernel parameters and options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Round robin interval.
+ * @details This constant is the number of system ticks allowed for the
+ * threads before preemption occurs. Setting this value to zero
+ * disables the preemption for threads with equal priority and the
+ * round robin becomes cooperative. Note that higher priority
+ * threads can still preempt, the kernel is always preemptive.
+ * @note Disabling the round robin preemption makes the kernel more compact
+ * and generally faster.
+ * @note The round robin preemption is not supported in tickless mode and
+ * must be set to zero in that case.
+ */
+#if !defined(CH_CFG_TIME_QUANTUM)
+#define CH_CFG_TIME_QUANTUM 0
+#endif
+
+/**
+ * @brief Managed RAM size.
+ * @details Size of the RAM area to be managed by the OS. If set to zero
+ * then the whole available RAM is used. The core memory is made
+ * available to the heap allocator and/or can be used directly through
+ * the simplified core memory allocator.
+ *
+ * @note In order to let the OS manage the whole RAM the linker script must
+ * provide the @p __heap_base__ and @p __heap_end__ symbols.
+ * @note Requires @p CH_CFG_USE_MEMCORE.
+ */
+#if !defined(CH_CFG_MEMCORE_SIZE)
+#define CH_CFG_MEMCORE_SIZE 0
+#endif
+
+/**
+ * @brief Idle thread automatic spawn suppression.
+ * @details When this option is activated the function @p chSysInit()
+ * does not spawn the idle thread. The application @p main()
+ * function becomes the idle thread and must implement an
+ * infinite loop.
+ */
+#if !defined(CH_CFG_NO_IDLE_THREAD)
+#define CH_CFG_NO_IDLE_THREAD FALSE
+#endif
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Performance options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief OS optimization.
+ * @details If enabled then time efficient rather than space efficient code
+ * is used when two possible implementations exist.
+ *
+ * @note This is not related to the compiler optimization options.
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_OPTIMIZE_SPEED)
+#define CH_CFG_OPTIMIZE_SPEED FALSE
+#endif
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Subsystem options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Time Measurement APIs.
+ * @details If enabled then the time measurement APIs are included in
+ * the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_TM)
+#define CH_CFG_USE_TM FALSE
+#endif
+
+/**
+ * @brief Threads registry APIs.
+ * @details If enabled then the registry APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_REGISTRY)
+#define CH_CFG_USE_REGISTRY TRUE
+#endif
+
+/**
+ * @brief Threads synchronization APIs.
+ * @details If enabled then the @p chThdWait() function is included in
+ * the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_WAITEXIT)
+#define CH_CFG_USE_WAITEXIT TRUE
+#endif
+
+/**
+ * @brief Semaphores APIs.
+ * @details If enabled then the Semaphores APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_SEMAPHORES)
+#define CH_CFG_USE_SEMAPHORES TRUE
+#endif
+
+/**
+ * @brief Semaphores queuing mode.
+ * @details If enabled then the threads are enqueued on semaphores by
+ * priority rather than in FIFO order.
+ *
+ * @note The default is @p FALSE. Enable this if you have special
+ * requirements.
+ * @note Requires @p CH_CFG_USE_SEMAPHORES.
+ */
+#if !defined(CH_CFG_USE_SEMAPHORES_PRIORITY)
+#define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE
+#endif
+
+/**
+ * @brief Mutexes APIs.
+ * @details If enabled then the mutexes APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_MUTEXES)
+#define CH_CFG_USE_MUTEXES TRUE
+#endif
+
+/**
+ * @brief Enables recursive behavior on mutexes.
+ * @note Recursive mutexes are heavier and have an increased
+ * memory footprint.
+ *
+ * @note The default is @p FALSE.
+ * @note Requires @p CH_CFG_USE_MUTEXES.
+ */
+#if !defined(CH_CFG_USE_MUTEXES_RECURSIVE)
+#define CH_CFG_USE_MUTEXES_RECURSIVE FALSE
+#endif
+
+/**
+ * @brief Conditional Variables APIs.
+ * @details If enabled then the conditional variables APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_MUTEXES.
+ */
+#if !defined(CH_CFG_USE_CONDVARS)
+#define CH_CFG_USE_CONDVARS TRUE
+#endif
+
+/**
+ * @brief Conditional Variables APIs with timeout.
+ * @details If enabled then the conditional variables APIs with timeout
+ * specification are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_CONDVARS.
+ */
+#if !defined(CH_CFG_USE_CONDVARS_TIMEOUT)
+#define CH_CFG_USE_CONDVARS_TIMEOUT FALSE
+#endif
+
+/**
+ * @brief Events Flags APIs.
+ * @details If enabled then the event flags APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_EVENTS)
+#define CH_CFG_USE_EVENTS TRUE
+#endif
+
+/**
+ * @brief Events Flags APIs with timeout.
+ * @details If enabled then the events APIs with timeout specification
+ * are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_EVENTS.
+ */
+#if !defined(CH_CFG_USE_EVENTS_TIMEOUT)
+#define CH_CFG_USE_EVENTS_TIMEOUT TRUE
+#endif
+
+/**
+ * @brief Synchronous Messages APIs.
+ * @details If enabled then the synchronous messages APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_MESSAGES)
+#define CH_CFG_USE_MESSAGES TRUE
+#endif
+
+/**
+ * @brief Synchronous Messages queuing mode.
+ * @details If enabled then messages are served by priority rather than in
+ * FIFO order.
+ *
+ * @note The default is @p FALSE. Enable this if you have special
+ * requirements.
+ * @note Requires @p CH_CFG_USE_MESSAGES.
+ */
+#if !defined(CH_CFG_USE_MESSAGES_PRIORITY)
+#define CH_CFG_USE_MESSAGES_PRIORITY FALSE
+#endif
+
+/**
+ * @brief Mailboxes APIs.
+ * @details If enabled then the asynchronous messages (mailboxes) APIs are
+ * included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_SEMAPHORES.
+ */
+#if !defined(CH_CFG_USE_MAILBOXES)
+#define CH_CFG_USE_MAILBOXES TRUE
+#endif
+
+/**
+ * @brief Core Memory Manager APIs.
+ * @details If enabled then the core memory manager APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_MEMCORE)
+#define CH_CFG_USE_MEMCORE TRUE
+#endif
+
+/**
+ * @brief Heap Allocator APIs.
+ * @details If enabled then the memory heap allocator APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or
+ * @p CH_CFG_USE_SEMAPHORES.
+ * @note Mutexes are recommended.
+ */
+#if !defined(CH_CFG_USE_HEAP)
+#define CH_CFG_USE_HEAP FALSE
+#endif
+
+/**
+ * @brief Memory Pools Allocator APIs.
+ * @details If enabled then the memory pools allocator APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_MEMPOOLS)
+#define CH_CFG_USE_MEMPOOLS FALSE
+#endif
+
+/**
+ * @brief Objects FIFOs APIs.
+ * @details If enabled then the objects FIFOs APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_OBJ_FIFOS)
+#define CH_CFG_USE_OBJ_FIFOS FALSE
+#endif
+
+/**
+ * @brief Pipes APIs.
+ * @details If enabled then the pipes APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_PIPES)
+#define CH_CFG_USE_PIPES FALSE
+#endif
+
+/**
+ * @brief Dynamic Threads APIs.
+ * @details If enabled then the dynamic threads creation APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_WAITEXIT.
+ * @note Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS.
+ */
+#if !defined(CH_CFG_USE_DYNAMIC)
+#define CH_CFG_USE_DYNAMIC FALSE
+#endif
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Objects factory options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Objects Factory APIs.
+ * @details If enabled then the objects factory APIs are included in the
+ * kernel.
+ *
+ * @note The default is @p FALSE.
+ */
+#if !defined(CH_CFG_USE_FACTORY)
+#define CH_CFG_USE_FACTORY FALSE
+#endif
+
+/**
+ * @brief Maximum length for object names.
+ * @details If the specified length is zero then the name is stored by
+ * pointer but this could have unintended side effects.
+ */
+#if !defined(CH_CFG_FACTORY_MAX_NAMES_LENGTH)
+#define CH_CFG_FACTORY_MAX_NAMES_LENGTH 8
+#endif
+
+/**
+ * @brief Enables the registry of generic objects.
+ */
+#if !defined(CH_CFG_FACTORY_OBJECTS_REGISTRY)
+#define CH_CFG_FACTORY_OBJECTS_REGISTRY FALSE
+#endif
+
+/**
+ * @brief Enables factory for generic buffers.
+ */
+#if !defined(CH_CFG_FACTORY_GENERIC_BUFFERS)
+#define CH_CFG_FACTORY_GENERIC_BUFFERS FALSE
+#endif
+
+/**
+ * @brief Enables factory for semaphores.
+ */
+#if !defined(CH_CFG_FACTORY_SEMAPHORES)
+#define CH_CFG_FACTORY_SEMAPHORES FALSE
+#endif
+
+/**
+ * @brief Enables factory for mailboxes.
+ */
+#if !defined(CH_CFG_FACTORY_MAILBOXES)
+#define CH_CFG_FACTORY_MAILBOXES FALSE
+#endif
+
+/**
+ * @brief Enables factory for objects FIFOs.
+ */
+#if !defined(CH_CFG_FACTORY_OBJ_FIFOS)
+#define CH_CFG_FACTORY_OBJ_FIFOS FALSE
+#endif
+
+/**
+ * @brief Enables factory for Pipes.
+ */
+#if !defined(CH_CFG_FACTORY_PIPES) || defined(__DOXYGEN__)
+#define CH_CFG_FACTORY_PIPES FALSE
+#endif
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Debug options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Debug option, kernel statistics.
+ *
+ * @note The default is @p FALSE.
+ */
+#if !defined(CH_DBG_STATISTICS)
+#define CH_DBG_STATISTICS FALSE
+#endif
+
+/**
+ * @brief Debug option, system state check.
+ * @details If enabled the correct call protocol for system APIs is checked
+ * at runtime.
+ *
+ * @note The default is @p FALSE.
+ */
+#if !defined(CH_DBG_SYSTEM_STATE_CHECK)
+#define CH_DBG_SYSTEM_STATE_CHECK FALSE
+#endif
+
+/**
+ * @brief Debug option, parameters checks.
+ * @details If enabled then the checks on the API functions input
+ * parameters are activated.
+ *
+ * @note The default is @p FALSE.
+ */
+#if !defined(CH_DBG_ENABLE_CHECKS)
+#define CH_DBG_ENABLE_CHECKS FALSE
+#endif
+
+/**
+ * @brief Debug option, consistency checks.
+ * @details If enabled then all the assertions in the kernel code are
+ * activated. This includes consistency checks inside the kernel,
+ * runtime anomalies and port-defined checks.
+ *
+ * @note The default is @p FALSE.
+ */
+#if !defined(CH_DBG_ENABLE_ASSERTS)
+#define CH_DBG_ENABLE_ASSERTS FALSE
+#endif
+
+/**
+ * @brief Debug option, trace buffer.
+ * @details If enabled then the trace buffer is activated.
+ *
+ * @note The default is @p CH_DBG_TRACE_MASK_DISABLED.
+ */
+#if !defined(CH_DBG_TRACE_MASK)
+#define CH_DBG_TRACE_MASK CH_DBG_TRACE_MASK_DISABLED
+#endif
+
+/**
+ * @brief Trace buffer entries.
+ * @note The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is
+ * different from @p CH_DBG_TRACE_MASK_DISABLED.
+ */
+#if !defined(CH_DBG_TRACE_BUFFER_SIZE)
+#define CH_DBG_TRACE_BUFFER_SIZE 128
+#endif
+
+/**
+ * @brief Debug option, stack checks.
+ * @details If enabled then a runtime stack check is performed.
+ *
+ * @note The default is @p FALSE.
+ * @note The stack check is performed in a architecture/port dependent way.
+ * It may not be implemented or some ports.
+ * @note The default failure mode is to halt the system with the global
+ * @p panic_msg variable set to @p NULL.
+ */
+#if !defined(CH_DBG_ENABLE_STACK_CHECK)
+#define CH_DBG_ENABLE_STACK_CHECK FALSE
+#endif
+
+/**
+ * @brief Debug option, stacks initialization.
+ * @details If enabled then the threads working area is filled with a byte
+ * value when a thread is created. This can be useful for the
+ * runtime measurement of the used stack.
+ *
+ * @note The default is @p FALSE.
+ */
+#if !defined(CH_DBG_FILL_THREADS)
+#define CH_DBG_FILL_THREADS FALSE
+#endif
+
+/**
+ * @brief Debug option, threads profiling.
+ * @details If enabled then a field is added to the @p thread_t structure that
+ * counts the system ticks occurred while executing the thread.
+ *
+ * @note The default is @p FALSE.
+ * @note This debug option is not currently compatible with the
+ * tickless mode.
+ */
+#if !defined(CH_DBG_THREADS_PROFILING)
+#define CH_DBG_THREADS_PROFILING FALSE
+#endif
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Kernel hooks
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief System structure extension.
+ * @details User fields added to the end of the @p ch_system_t structure.
+ */
+#define CH_CFG_SYSTEM_EXTRA_FIELDS \
+ /* Add threads custom fields here.*/
+
+/**
+ * @brief System initialization hook.
+ * @details User initialization code added to the @p chSysInit() function
+ * just before interrupts are enabled globally.
+ */
+#define CH_CFG_SYSTEM_INIT_HOOK() { \
+ /* Add threads initialization code here.*/ \
+}
+
+/**
+ * @brief Threads descriptor structure extension.
+ * @details User fields added to the end of the @p thread_t structure.
+ */
+#define CH_CFG_THREAD_EXTRA_FIELDS \
+ /* Add threads custom fields here.*/
+
+/**
+ * @brief Threads initialization hook.
+ * @details User initialization code added to the @p _thread_init() function.
+ *
+ * @note It is invoked from within @p _thread_init() and implicitly from all
+ * the threads creation APIs.
+ */
+#define CH_CFG_THREAD_INIT_HOOK(tp) { \
+ /* Add threads initialization code here.*/ \
+}
+
+/**
+ * @brief Threads finalization hook.
+ * @details User finalization code added to the @p chThdExit() API.
+ */
+#define CH_CFG_THREAD_EXIT_HOOK(tp) { \
+ /* Add threads finalization code here.*/ \
+}
+
+/**
+ * @brief Context switch hook.
+ * @details This hook is invoked just before switching between threads.
+ */
+#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) { \
+ /* Context switch code here.*/ \
+}
+
+/**
+ * @brief ISR enter hook.
+ */
+#define CH_CFG_IRQ_PROLOGUE_HOOK() { \
+ /* IRQ prologue code here.*/ \
+}
+
+/**
+ * @brief ISR exit hook.
+ */
+#define CH_CFG_IRQ_EPILOGUE_HOOK() { \
+ /* IRQ epilogue code here.*/ \
+}
+
+/**
+ * @brief Idle thread enter hook.
+ * @note This hook is invoked within a critical zone, no OS functions
+ * should be invoked from here.
+ * @note This macro can be used to activate a power saving mode.
+ */
+#define CH_CFG_IDLE_ENTER_HOOK() { \
+ /* Idle-enter code here.*/ \
+}
+
+/**
+ * @brief Idle thread leave hook.
+ * @note This hook is invoked within a critical zone, no OS functions
+ * should be invoked from here.
+ * @note This macro can be used to deactivate a power saving mode.
+ */
+#define CH_CFG_IDLE_LEAVE_HOOK() { \
+ /* Idle-leave code here.*/ \
+}
+
+/**
+ * @brief Idle Loop hook.
+ * @details This hook is continuously invoked by the idle thread loop.
+ */
+#define CH_CFG_IDLE_LOOP_HOOK() { \
+ /* Idle loop code here.*/ \
+}
+
+/**
+ * @brief System tick event hook.
+ * @details This hook is invoked in the system tick handler immediately
+ * after processing the virtual timers queue.
+ */
+#define CH_CFG_SYSTEM_TICK_HOOK() { \
+ /* System tick event code here.*/ \
+}
+
+/**
+ * @brief System halt hook.
+ * @details This hook is invoked in case to a system halting error before
+ * the system is halted.
+ */
+#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \
+ /* System halt code here.*/ \
+}
+
+/**
+ * @brief Trace hook.
+ * @details This hook is invoked each time a new record is written in the
+ * trace buffer.
+ */
+#define CH_CFG_TRACE_HOOK(tep) { \
+ /* Trace code here.*/ \
+}
+
+/** @} */
+
+/*===========================================================================*/
+/* Port-specific settings (override port settings defaulted in chcore.h). */
+/*===========================================================================*/
+
+#endif /* CHCONF_H */
+
+/** @} */
diff --git a/keyboards/misterknife/knife66/config.h b/keyboards/misterknife/knife66/config.h
new file mode 100644
index 000000000..0dd85dfdf
--- /dev/null
+++ b/keyboards/misterknife/knife66/config.h
@@ -0,0 +1,55 @@
+/*
+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
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xAC11
+#define PRODUCT_ID 0x4172
+#define DEVICE_VER 0x0001
+#define MANUFACTURER MisterKnife
+#define PRODUCT Knife66
+
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+#define MATRIX_COL_PINS { B2, B1, B0, A7, A6, A5, A4, B9, B8, B7, B6, B5, B4, B3, A15 }
+#define MATRIX_ROW_PINS { B15, A8, A3, A2, A1 }
+#define DIODE_DIRECTION COL2ROW
+
+#define RGB_DI_PIN A9
+
+#ifdef RGB_DI_PIN
+#define RGBLIGHT_ANIMATIONS
+#define RGBLIGHT_SLEEP
+#define RGBLED_NUM 6
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#define RGBLIGHT_LIMIT_VAL 200
+#endif
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
+
+#define WS2812_PWM_DRIVER PWMD1 // default: PWMD1
+#define WS2812_PWM_CHANNEL 2 // default: 2
+#define WS2812_PWM_PAL_MODE 2 // Pin "alternate function", see the respective datasheet for the appropriate values for your MCU. default: 2
+#define WS2812_DMA_STREAM STM32_DMA1_STREAM5 // DMA Stream for TIMx_UP, see the respective reference manual for the appropriate values for your MCU.
+#define WS2812_DMA_CHANNEL 5 // DMA Channel for TIMx_UP, see the respective reference manual for the appropriate values for your MCU.
diff --git a/keyboards/misterknife/knife66/halconf.h b/keyboards/misterknife/knife66/halconf.h
new file mode 100644
index 000000000..adb1a9071
--- /dev/null
+++ b/keyboards/misterknife/knife66/halconf.h
@@ -0,0 +1,525 @@
+/*
+ ChibiOS - Copyright (C) 2006..2018 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.
+*/
+
+/**
+ * @file templates/halconf.h
+ * @brief HAL configuration header.
+ * @details HAL configuration file, this file allows to enable or disable the
+ * various device drivers from your application. You may also use
+ * this file in order to override the device drivers default settings.
+ *
+ * @addtogroup HAL_CONF
+ * @{
+ */
+
+#ifndef HALCONF_H
+#define HALCONF_H
+
+#define _CHIBIOS_HAL_CONF_
+#define _CHIBIOS_HAL_CONF_VER_7_0_
+
+#include "mcuconf.h"
+
+/**
+ * @brief Enables the PAL subsystem.
+ */
+#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
+#define HAL_USE_PAL TRUE
+#endif
+
+/**
+ * @brief Enables the ADC subsystem.
+ */
+#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
+#define HAL_USE_ADC FALSE
+#endif
+
+/**
+ * @brief Enables the CAN subsystem.
+ */
+#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
+#define HAL_USE_CAN FALSE
+#endif
+
+/**
+ * @brief Enables the cryptographic subsystem.
+ */
+#if !defined(HAL_USE_CRY) || defined(__DOXYGEN__)
+#define HAL_USE_CRY FALSE
+#endif
+
+/**
+ * @brief Enables the DAC subsystem.
+ */
+#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__)
+#define HAL_USE_DAC FALSE
+#endif
+
+/**
+ * @brief Enables the GPT subsystem.
+ */
+#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
+#define HAL_USE_GPT FALSE
+#endif
+
+/**
+ * @brief Enables the I2C subsystem.
+ */
+#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
+#define HAL_USE_I2C TRUE
+#endif
+
+/**
+ * @brief Enables the I2S subsystem.
+ */
+#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__)
+#define HAL_USE_I2S FALSE
+#endif
+
+/**
+ * @brief Enables the ICU subsystem.
+ */
+#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
+#define HAL_USE_ICU FALSE
+#endif
+
+/**
+ * @brief Enables the MAC subsystem.
+ */
+#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
+#define HAL_USE_MAC FALSE
+#endif
+
+/**
+ * @brief Enables the MMC_SPI subsystem.
+ */
+#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
+#define HAL_USE_MMC_SPI FALSE
+#endif
+
+/**
+ * @brief Enables the PWM subsystem.
+ */
+#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
+#define HAL_USE_PWM TRUE
+#endif
+
+/**
+ * @brief Enables the RTC subsystem.
+ */
+#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
+#define HAL_USE_RTC FALSE
+#endif
+
+/**
+ * @brief Enables the SDC subsystem.
+ */
+#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
+#define HAL_USE_SDC FALSE
+#endif
+
+/**
+ * @brief Enables the SERIAL subsystem.
+ */
+#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
+#define HAL_USE_SERIAL FALSE
+#endif
+
+/**
+ * @brief Enables the SERIAL over USB subsystem.
+ */
+#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
+#define HAL_USE_SERIAL_USB FALSE
+#endif
+
+/**
+ * @brief Enables the SIO subsystem.
+ */
+#if !defined(HAL_USE_SIO) || defined(__DOXYGEN__)
+#define HAL_USE_SIO FALSE
+#endif
+
+/**
+ * @brief Enables the SPI subsystem.
+ */
+#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
+#define HAL_USE_SPI TRUE
+#endif
+
+/**
+ * @brief Enables the TRNG subsystem.
+ */
+#if !defined(HAL_USE_TRNG) || defined(__DOXYGEN__)
+#define HAL_USE_TRNG FALSE
+#endif
+
+/**
+ * @brief Enables the UART subsystem.
+ */
+#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
+#define HAL_USE_UART FALSE
+#endif
+
+/**
+ * @brief Enables the USB subsystem.
+ */
+#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
+#define HAL_USE_USB TRUE
+#endif
+
+/**
+ * @brief Enables the WDG subsystem.
+ */
+#if !defined(HAL_USE_WDG) || defined(__DOXYGEN__)
+#define HAL_USE_WDG FALSE
+#endif
+
+/**
+ * @brief Enables the WSPI subsystem.
+ */
+#if !defined(HAL_USE_WSPI) || defined(__DOXYGEN__)
+#define HAL_USE_WSPI FALSE
+#endif
+
+/*===========================================================================*/
+/* PAL driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(PAL_USE_CALLBACKS) || defined(__DOXYGEN__)
+#define PAL_USE_CALLBACKS FALSE
+#endif
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(PAL_USE_WAIT) || defined(__DOXYGEN__)
+#define PAL_USE_WAIT FALSE
+#endif
+
+/*===========================================================================*/
+/* ADC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__)
+#define ADC_USE_WAIT TRUE
+#endif
+
+/**
+ * @brief Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define ADC_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/*===========================================================================*/
+/* CAN driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Sleep mode related APIs inclusion switch.
+ */
+#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__)
+#define CAN_USE_SLEEP_MODE TRUE
+#endif
+
+/**
+ * @brief Enforces the driver to use direct callbacks rather than OSAL events.
+ */
+#if !defined(CAN_ENFORCE_USE_CALLBACKS) || defined(__DOXYGEN__)
+#define CAN_ENFORCE_USE_CALLBACKS FALSE
+#endif
+
+/*===========================================================================*/
+/* CRY driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables the SW fall-back of the cryptographic driver.
+ * @details When enabled, this option, activates a fall-back software
+ * implementation for algorithms not supported by the underlying
+ * hardware.
+ * @note Fall-back implementations may not be present for all algorithms.
+ */
+#if !defined(HAL_CRY_USE_FALLBACK) || defined(__DOXYGEN__)
+#define HAL_CRY_USE_FALLBACK FALSE
+#endif
+
+/**
+ * @brief Makes the driver forcibly use the fall-back implementations.
+ */
+#if !defined(HAL_CRY_ENFORCE_FALLBACK) || defined(__DOXYGEN__)
+#define HAL_CRY_ENFORCE_FALLBACK FALSE
+#endif
+
+/*===========================================================================*/
+/* DAC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(DAC_USE_WAIT) || defined(__DOXYGEN__)
+#define DAC_USE_WAIT TRUE
+#endif
+
+/**
+ * @brief Enables the @p dacAcquireBus() and @p dacReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(DAC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define DAC_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/*===========================================================================*/
+/* I2C driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables the mutual exclusion APIs on the I2C bus.
+ */
+#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define I2C_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/*===========================================================================*/
+/* MAC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables the zero-copy API.
+ */
+#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__)
+#define MAC_USE_ZERO_COPY FALSE
+#endif
+
+/**
+ * @brief Enables an event sources for incoming packets.
+ */
+#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__)
+#define MAC_USE_EVENTS TRUE
+#endif
+
+/*===========================================================================*/
+/* MMC_SPI driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Delays insertions.
+ * @details If enabled this options inserts delays into the MMC waiting
+ * routines releasing some extra CPU time for the threads with
+ * lower priority, this may slow down the driver a bit however.
+ * This option is recommended also if the SPI driver does not
+ * use a DMA channel and heavily loads the CPU.
+ */
+#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__)
+#define MMC_NICE_WAITING TRUE
+#endif
+
+/*===========================================================================*/
+/* SDC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Number of initialization attempts before rejecting the card.
+ * @note Attempts are performed at 10mS intervals.
+ */
+#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__)
+#define SDC_INIT_RETRY 100
+#endif
+
+/**
+ * @brief Include support for MMC cards.
+ * @note MMC support is not yet implemented so this option must be kept
+ * at @p FALSE.
+ */
+#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__)
+#define SDC_MMC_SUPPORT FALSE
+#endif
+
+/**
+ * @brief Delays insertions.
+ * @details If enabled this options inserts delays into the MMC waiting
+ * routines releasing some extra CPU time for the threads with
+ * lower priority, this may slow down the driver a bit however.
+ */
+#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__)
+#define SDC_NICE_WAITING TRUE
+#endif
+
+/**
+ * @brief OCR initialization constant for V20 cards.
+ */
+#if !defined(SDC_INIT_OCR_V20) || defined(__DOXYGEN__)
+#define SDC_INIT_OCR_V20 0x50FF8000U
+#endif
+
+/**
+ * @brief OCR initialization constant for non-V20 cards.
+ */
+#if !defined(SDC_INIT_OCR) || defined(__DOXYGEN__)
+#define SDC_INIT_OCR 0x80100000U
+#endif
+
+/*===========================================================================*/
+/* SERIAL driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Default bit rate.
+ * @details Configuration parameter, this is the baud rate selected for the
+ * default configuration.
+ */
+#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__)
+#define SERIAL_DEFAULT_BITRATE 38400
+#endif
+
+/**
+ * @brief Serial buffers size.
+ * @details Configuration parameter, you can change the depth of the queue
+ * buffers depending on the requirements of your application.
+ * @note The default is 16 bytes for both the transmission and receive
+ * buffers.
+ */
+#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__)
+#define SERIAL_BUFFERS_SIZE 16
+#endif
+
+/*===========================================================================*/
+/* SERIAL_USB driver related setting. */
+/*===========================================================================*/
+
+/**
+ * @brief Serial over USB buffers size.
+ * @details Configuration parameter, the buffer size must be a multiple of
+ * the USB data endpoint maximum packet size.
+ * @note The default is 256 bytes for both the transmission and receive
+ * buffers.
+ */
+#if !defined(SERIAL_USB_BUFFERS_SIZE) || defined(__DOXYGEN__)
+#define SERIAL_USB_BUFFERS_SIZE 1
+#endif
+
+/**
+ * @brief Serial over USB number of buffers.
+ * @note The default is 2 buffers.
+ */
+#if !defined(SERIAL_USB_BUFFERS_NUMBER) || defined(__DOXYGEN__)
+#define SERIAL_USB_BUFFERS_NUMBER 2
+#endif
+
+/*===========================================================================*/
+/* SPI driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__)
+#define SPI_USE_WAIT TRUE
+#endif
+
+/**
+ * @brief Enables circular transfers APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(SPI_USE_CIRCULAR) || defined(__DOXYGEN__)
+#define SPI_USE_CIRCULAR FALSE
+#endif
+
+
+/**
+ * @brief Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define SPI_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/**
+ * @brief Handling method for SPI CS line.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(SPI_SELECT_MODE) || defined(__DOXYGEN__)
+#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD
+#endif
+
+/*===========================================================================*/
+/* UART driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(UART_USE_WAIT) || defined(__DOXYGEN__)
+#define UART_USE_WAIT FALSE
+#endif
+
+/**
+ * @brief Enables the @p uartAcquireBus() and @p uartReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(UART_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define UART_USE_MUTUAL_EXCLUSION FALSE
+#endif
+
+/*===========================================================================*/
+/* USB driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(USB_USE_WAIT) || defined(__DOXYGEN__)
+#define USB_USE_WAIT TRUE
+#endif
+
+/*===========================================================================*/
+/* WSPI driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(WSPI_USE_WAIT) || defined(__DOXYGEN__)
+#define WSPI_USE_WAIT TRUE
+#endif
+
+/**
+ * @brief Enables the @p wspiAcquireBus() and @p wspiReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(WSPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define WSPI_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+#endif /* HALCONF_H */
+
+/** @} */
diff --git a/keyboards/misterknife/knife66/info.json b/keyboards/misterknife/knife66/info.json
new file mode 100644
index 000000000..3f61398c6
--- /dev/null
+++ b/keyboards/misterknife/knife66/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "Knife66",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 16.5,
+ "height": 5.25,
+ "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.5, "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.5, "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.5, "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.25, "y":3.25}, {"x":15.5, "y":3}, {"x":0, "y":4, "w":1.25}, {"x":2.25, "y":4}, {"x":3.25, "y":4, "w":1.25}, {"x":4.5, "y":4, "w":2.25}, {"x":6.75, "y":4, "w":2.75}, {"x":9.5, "y":4, "w":1.25}, {"x":10.75, "y":4}, {"x":11.75, "y":4, "w":1.25}, {"x":13.25, "y":4.25}, {"x":14.25, "y":4.25}, {"x":15.25, "y":4.25}]
+ }
+ }
+}
diff --git a/keyboards/misterknife/knife66/keymaps/default/keymap.c b/keyboards/misterknife/knife66/keymaps/default/keymap.c
new file mode 100644
index 000000000..831efca17
--- /dev/null
+++ b/keyboards/misterknife/knife66/keymaps/default/keymap.c
@@ -0,0 +1,39 @@
+/*
+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 QMK_KEYBOARD_H
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+ _BASE,
+ _FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT_all(
+ 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_BSLS, KC_DEL, 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_BSPC, KC_PGDN,
+ 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_HOME,
+ 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_END,
+ MO(1), KC_LALT, KC_LGUI, KC_LGUI, LT(1, KC_SPC), KC_LGUI, MO(1), KC_LGUI, KC_LEFT, KC_DOWN, KC_RGHT ),
+
+ [_FN] = LAYOUT_all(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL, RGB_TOG,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_MPRV, KC_MNXT, KC_TRNS, RGB_MOD,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT,KC_TRNS, KC_TRNS, KC_INS, RGB_SPI,
+ KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, RGB_SPD,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLD, KC_TRNS ),
+};
diff --git a/keyboards/misterknife/knife66/knife66.c b/keyboards/misterknife/knife66/knife66.c
new file mode 100644
index 000000000..0e261b3a8
--- /dev/null
+++ b/keyboards/misterknife/knife66/knife66.c
@@ -0,0 +1,17 @@
+/* Copyright 2020 Thierry Kleist
+ *
+ * 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 "knife66.h"
diff --git a/keyboards/misterknife/knife66/knife66.h b/keyboards/misterknife/knife66/knife66.h
new file mode 100644
index 000000000..8868aa3ae
--- /dev/null
+++ b/keyboards/misterknife/knife66/knife66.h
@@ -0,0 +1,35 @@
+/* Copyright 2020 Thierry Kleist
+ *
+ * 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 ____ KC_NO
+
+#define LAYOUT_all( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K114, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K214, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K314, \
+ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K414, \
+ K400, K401, K402, K404, K405, K407, K408, K409, K410, K412, K413 \
+) { \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, ____, K214 }, \
+ { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, ____, K314 }, \
+ { K400, K401, K402, ____, K404, K405, ____, K407, K408, K409, K410, ____, K412, K413, K414 } \
+}
diff --git a/keyboards/misterknife/knife66/mcuconf.h b/keyboards/misterknife/knife66/mcuconf.h
new file mode 100644
index 000000000..00292cab1
--- /dev/null
+++ b/keyboards/misterknife/knife66/mcuconf.h
@@ -0,0 +1,176 @@
+/*
+ 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_
+
+/*
+ * STM32F0xx drivers configuration.
+ * The following settings override the default settings present in
+ * the various device driver implementation headers.
+ * Note that the settings for each driver only have effect if the whole
+ * driver is enabled in halconf.h.
+ *
+ * IRQ priorities:
+ * 3...0 Lowest...Highest.
+ *
+ * DMA priorities:
+ * 0...3 Lowest...Highest.
+ */
+
+#define STM32F0xx_MCUCONF
+// #define STM32F070xB
+
+/*
+ * HAL driver system settings.
+ */
+#define STM32_NO_INIT FALSE
+#define STM32_PVD_ENABLE FALSE
+#define STM32_PLS STM32_PLS_LEV0
+#define STM32_HSI_ENABLED TRUE
+#define STM32_HSI14_ENABLED TRUE
+#define STM32_HSI48_ENABLED FALSE
+#define STM32_LSI_ENABLED TRUE
+#define STM32_HSE_ENABLED FALSE
+#define STM32_LSE_ENABLED FALSE
+#define STM32_SW STM32_SW_PLL
+#define STM32_PLLSRC STM32_PLLSRC_HSI_DIV2
+#define STM32_PREDIV_VALUE 1
+#define STM32_PLLMUL_VALUE 12
+#define STM32_HPRE STM32_HPRE_DIV1
+#define STM32_PPRE STM32_PPRE_DIV1
+#define STM32_ADCSW STM32_ADCSW_HSI14
+#define STM32_ADCPRE STM32_ADCPRE_DIV4
+#define STM32_MCOSEL STM32_MCOSEL_NOCLOCK
+#define STM32_ADCPRE STM32_ADCPRE_DIV4
+#define STM32_ADCSW STM32_ADCSW_HSI14
+#define STM32_USBSW STM32_USBSW_HSI48
+#define STM32_CECSW STM32_CECSW_HSI
+#define STM32_I2C1SW STM32_I2C1SW_HSI
+#define STM32_USART1SW STM32_USART1SW_PCLK
+#define STM32_RTCSEL STM32_RTCSEL_LSI
+
+/*
+ * ADC driver system settings.
+ */
+#define STM32_ADC_USE_ADC1 FALSE
+#define STM32_ADC_ADC1_DMA_PRIORITY 2
+#define STM32_ADC_IRQ_PRIORITY 2
+#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY 2
+
+/*
+ * EXT driver system settings.
+ */
+#define STM32_EXT_EXTI0_1_IRQ_PRIORITY 3
+#define STM32_EXT_EXTI2_3_IRQ_PRIORITY 3
+#define STM32_EXT_EXTI4_15_IRQ_PRIORITY 3
+#define STM32_EXT_EXTI16_IRQ_PRIORITY 3
+#define STM32_EXT_EXTI17_IRQ_PRIORITY 3
+
+/*
+ * GPT driver system settings.
+ */
+#define STM32_GPT_USE_TIM1 FALSE
+#define STM32_GPT_USE_TIM2 FALSE
+#define STM32_GPT_USE_TIM3 FALSE
+#define STM32_GPT_USE_TIM14 FALSE
+#define STM32_GPT_TIM1_IRQ_PRIORITY 2
+#define STM32_GPT_TIM2_IRQ_PRIORITY 2
+#define STM32_GPT_TIM3_IRQ_PRIORITY 2
+#define STM32_GPT_TIM14_IRQ_PRIORITY 2
+
+/*
+ * I2C driver system settings.
+ */
+#define STM32_I2C_USE_I2C1 TRUE
+#define STM32_I2C_USE_I2C2 FALSE
+#define STM32_I2C_BUSY_TIMEOUT 50
+#define STM32_I2C_I2C1_IRQ_PRIORITY 3
+#define STM32_I2C_I2C2_IRQ_PRIORITY 3
+#define STM32_I2C_USE_DMA TRUE
+#define STM32_I2C_I2C1_DMA_PRIORITY 1
+#define STM32_I2C_I2C2_DMA_PRIORITY 1
+#define STM32_I2C_I2C1_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 7)
+#define STM32_I2C_I2C1_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 6)
+#define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure")
+
+/*
+ * ICU driver system settings.
+ */
+#define STM32_ICU_USE_TIM1 FALSE
+#define STM32_ICU_USE_TIM2 FALSE
+#define STM32_ICU_USE_TIM3 FALSE
+#define STM32_ICU_TIM1_IRQ_PRIORITY 3
+#define STM32_ICU_TIM2_IRQ_PRIORITY 3
+#define STM32_ICU_TIM3_IRQ_PRIORITY 3
+
+/*
+ * PWM driver system settings.
+ */
+#define STM32_PWM_USE_ADVANCED FALSE
+#define STM32_PWM_USE_TIM1 TRUE
+#define STM32_PWM_USE_TIM2 FALSE
+#define STM32_PWM_USE_TIM3 FALSE
+#define STM32_PWM_TIM1_IRQ_PRIORITY 3
+#define STM32_PWM_TIM2_IRQ_PRIORITY 3
+#define STM32_PWM_TIM3_IRQ_PRIORITY 3
+
+/*
+ * SERIAL driver system settings.
+ */
+#define STM32_SERIAL_USE_USART1 FALSE
+#define STM32_SERIAL_USE_USART2 FALSE
+#define STM32_SERIAL_USART1_PRIORITY 3
+#define STM32_SERIAL_USART2_PRIORITY 3
+
+/*
+ * SPI driver system settings.
+ */
+#define STM32_SPI_USE_SPI1 FALSE
+#define STM32_SPI_USE_SPI2 TRUE
+#define STM32_SPI_SPI1_DMA_PRIORITY 1
+#define STM32_SPI_SPI2_DMA_PRIORITY 1
+#define STM32_SPI_SPI1_IRQ_PRIORITY 2
+#define STM32_SPI_SPI2_IRQ_PRIORITY 2
+#define STM32_SPI_SPI2_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 4)
+#define STM32_SPI_SPI2_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 5)
+#define STM32_SPI_DMA_ERROR_HOOK(spip) osalSysHalt("DMA failure")
+
+/*
+ * ST driver system settings.
+ */
+#define STM32_ST_IRQ_PRIORITY 2
+#define STM32_ST_USE_TIMER 2
+
+/*
+ * UART driver system settings.
+ */
+#define STM32_UART_USE_USART1 FALSE
+#define STM32_UART_USE_USART2 FALSE
+#define STM32_UART_USART1_IRQ_PRIORITY 3
+#define STM32_UART_USART2_IRQ_PRIORITY 3
+#define STM32_UART_USART1_DMA_PRIORITY 0
+#define STM32_UART_USART2_DMA_PRIORITY 0
+#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure")
+
+/*
+ * USB driver system settings.
+ */
+#define STM32_USB_USE_USB1 TRUE
+#define STM32_USB_LOW_POWER_ON_SUSPEND FALSE
+#define STM32_USB_USB1_LP_IRQ_PRIORITY 3
+
+#endif /* _MCUCONF_H_ */
diff --git a/keyboards/misterknife/knife66/readme.md b/keyboards/misterknife/knife66/readme.md
new file mode 100644
index 000000000..3ced6adaf
--- /dev/null
+++ b/keyboards/misterknife/knife66/readme.md
@@ -0,0 +1,18 @@
+# Knife66
+
+![Knife66](https://i.imgur.com/p7G2g81l.png)
+
+This is a replacement board for the CA66 keyboard
+
+* Keyboard Maintainer: [afewyards](https://github.com/afewyards)
+* Hardware Availability: [Geekhack](https://geekhack.org/index.php?topic=107331.0)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make misterknife/knife66:default
+
+Flashing example for this keyboard:
+
+ make misterknife/knife66: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/misterknife/knife66/rules.mk b/keyboards/misterknife/knife66/rules.mk
new file mode 100644
index 000000000..540a423f2
--- /dev/null
+++ b/keyboards/misterknife/knife66/rules.mk
@@ -0,0 +1,23 @@
+# MCU name
+MCU = STM32F072
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
+
+# Enter lower-power sleep mode when on the ChibiOS idle thread
+OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE
+WS2812_DRIVER = pwm
diff --git a/keyboards/mxss/rgblight.c b/keyboards/mxss/rgblight.c
index ec4d70e17..130945857 100644
--- a/keyboards/mxss/rgblight.c
+++ b/keyboards/mxss/rgblight.c
@@ -110,9 +110,9 @@ extern LED_TYPE fleds[2];
hs_set fled_hs[2];
void copyrgb(LED_TYPE *src, LED_TYPE *dst) {
- (*dst).r = (*src).r;
- (*dst).g = (*src).g;
- (*dst).b = (*src).b;
+ dst->r = src->r;
+ dst->g = src->g;
+ dst->b = src->b;
}
void rgblight_set_clipping_range(uint8_t start_pos, uint8_t num_leds) {
@@ -145,11 +145,11 @@ void sethsv_raw(uint8_t hue, uint8_t sat, uint8_t val, LED_TYPE *led1) {
void sethsv(uint8_t hue, uint8_t sat, uint8_t val, LED_TYPE *led1) { sethsv_raw(hue, sat, val > RGBLIGHT_LIMIT_VAL ? RGBLIGHT_LIMIT_VAL : val, led1); }
void setrgb(uint8_t r, uint8_t g, uint8_t b, LED_TYPE *led1) {
- (*led1).r = r;
- (*led1).g = g;
- (*led1).b = b;
+ led1->r = r;
+ led1->g = g;
+ led1->b = b;
#ifdef RGBW
- (*led1).w = 0;
+ led1->w = 0;
#endif
}
diff --git a/keyboards/mysticworks/wyvern/config.h b/keyboards/mysticworks/wyvern/config.h
new file mode 100644
index 000000000..82b4939fc
--- /dev/null
+++ b/keyboards/mysticworks/wyvern/config.h
@@ -0,0 +1,46 @@
+/* Copyright 2020 Albert Dong <albert@mysticworks.xyz>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device Descriptor Parameter */
+#define VENDOR_ID 0x4D59 // "MY" - Mystic Works
+#define PRODUCT_ID 0x0001
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Mystic Works
+#define PRODUCT Wyvern
+
+/* Key Matrix Size */
+#define MATRIX_ROWS 10
+#define MATRIX_COLS 10
+
+/* Keyboard Matrix Assignments */
+#define MATRIX_ROW_PINS {D0,D1,D5,D3,F7,F6,F5,F4,F1,F0}
+#define MATRIX_COL_PINS {E6,B0,D4,D6,D7,B4,B5,B6,C6,C7}
+#define UNUSED_PINS {B7,D2}
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* 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
diff --git a/keyboards/mysticworks/wyvern/info.json b/keyboards/mysticworks/wyvern/info.json
new file mode 100644
index 000000000..ccf2e6d6e
--- /dev/null
+++ b/keyboards/mysticworks/wyvern/info.json
@@ -0,0 +1,477 @@
+{
+ "keyboard_name": "Wyvern",
+ "url": "https://mysticworks.xyz",
+ "maintainer": "mysticworks",
+ "width": 20.75,
+ "height": 5.25,
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ {"x":0, "y":0},
+ {"x":1, "y":0},
+ {"x":2, "y":0},
+ {"x":3, "y":0},
+ {"x":4.25, "y":0},
+ {"x":5.25, "y":0},
+ {"x":6.25, "y":0},
+ {"x":7.25, "y":0},
+ {"x":8.25, "y":0},
+ {"x":9.25, "y":0},
+ {"x":10.25, "y":0},
+ {"x":11.25, "y":0},
+ {"x":12.25, "y":0},
+ {"x":13.25, "y":0},
+ {"x":14.25, "y":0},
+ {"x":15.25, "y":0},
+ {"x":16.25, "y":0},
+ {"x":17.25, "y":0},
+ {"x":18.25, "y":0},
+ {"x":19.75, "y":0},
+
+ {"x":0, "y":1},
+ {"x":1, "y":1},
+ {"x":2, "y":1},
+ {"x":3, "y":1},
+ {"x":4.25, "y":1, "w":1.5},
+ {"x":5.75, "y":1},
+ {"x":6.75, "y":1},
+ {"x":7.75, "y":1},
+ {"x":8.75, "y":1},
+ {"x":9.75, "y":1},
+ {"x":10.75, "y":1},
+ {"x":11.75, "y":1},
+ {"x":12.75, "y":1},
+ {"x":13.75, "y":1},
+ {"x":14.75, "y":1},
+ {"x":15.75, "y":1},
+ {"x":16.75, "y":1},
+ {"x":17.75, "y":1, "w":1.5},
+ {"x":19.75, "y":1},
+
+ {"x":0, "y":2},
+ {"x":1, "y":2},
+ {"x":2, "y":2},
+ {"x":3, "y":2},
+ {"x":4.25, "y":2, "w":1.75},
+ {"x":6, "y":2},
+ {"x":7, "y":2},
+ {"x":8, "y":2},
+ {"x":9, "y":2},
+ {"x":10, "y":2},
+ {"x":11, "y":2},
+ {"x":12, "y":2},
+ {"x":13, "y":2},
+ {"x":14, "y":2},
+ {"x":15, "y":2},
+ {"x":16, "y":2},
+ {"x":17, "y":2},
+ {"x":18, "y":2, "w":1.25},
+ {"x":19.75, "y":2},
+
+ {"x":0, "y":3},
+ {"x":1, "y":3},
+ {"x":2, "y":3},
+ {"x":3, "y":3},
+ {"x":4.25, "y":3, "w":1.25},
+ {"x":5.5, "y":3},
+ {"x":6.5, "y":3},
+ {"x":7.5, "y":3},
+ {"x":8.5, "y":3},
+ {"x":9.5, "y":3},
+ {"x":10.5, "y":3},
+ {"x":11.5, "y":3},
+ {"x":12.5, "y":3},
+ {"x":13.5, "y":3},
+ {"x":14.5, "y":3},
+ {"x":15.5, "y":3},
+ {"x":16.5, "y":3, "w":1.75},
+ {"x":18.5, "y":3.25},
+ {"x":19.75, "y":3},
+
+ {"x":0, "y":4},
+ {"x":1, "y":4},
+ {"x":2, "y":4},
+ {"x":3, "y":4},
+ {"x":4.25, "y":4, "w":1.25},
+ {"x":5.5, "y":4, "w":1.25},
+ {"x":6.75, "y":4, "w":1.25},
+ {"x":8, "y":4, "w":6.25},
+ {"x":14.25, "y":4, "w":1.5},
+ {"x":15.75, "y":4, "w":1.5},
+ {"x":17.5, "y":4.25},
+ {"x":18.5, "y":4.25},
+ {"x":19.5, "y":4.25}
+ ]
+ },
+ "LAYOUT_ansi_numpad_right": {
+ "layout": [
+ {"x":0, "y":0},
+ {"x":1, "y":0},
+ {"x":2, "y":0},
+ {"x":3, "y":0},
+ {"x":4.25, "y":0},
+ {"x":5.25, "y":0},
+ {"x":6.25, "y":0},
+ {"x":7.25, "y":0},
+ {"x":8.25, "y":0},
+ {"x":9.25, "y":0},
+ {"x":10.25, "y":0},
+ {"x":11.25, "y":0},
+ {"x":12.25, "y":0},
+ {"x":13.25, "y":0},
+ {"x":14.25, "y":0},
+ {"x":15.25, "y":0},
+ {"x":16.25, "y":0},
+ {"x":17.25, "y":0, "w":2},
+ {"x":19.75, "y":0},
+
+ {"x":0, "y":1},
+ {"x":1, "y":1},
+ {"x":2, "y":1},
+ {"x":3, "y":1, "h":2},
+ {"x":4.25, "y":1, "w":1.5},
+ {"x":5.75, "y":1},
+ {"x":6.75, "y":1},
+ {"x":7.75, "y":1},
+ {"x":8.75, "y":1},
+ {"x":9.75, "y":1},
+ {"x":10.75, "y":1},
+ {"x":11.75, "y":1},
+ {"x":12.75, "y":1},
+ {"x":13.75, "y":1},
+ {"x":14.75, "y":1},
+ {"x":15.75, "y":1},
+ {"x":16.75, "y":1},
+ {"x":17.75, "y":1, "w":1.5},
+ {"x":19.75, "y":1},
+
+ {"x":0, "y":2},
+ {"x":1, "y":2},
+ {"x":2, "y":2},
+ {"x":4.25, "y":2, "w":1.75},
+ {"x":6, "y":2},
+ {"x":7, "y":2},
+ {"x":8, "y":2},
+ {"x":9, "y":2},
+ {"x":10, "y":2},
+ {"x":11, "y":2},
+ {"x":12, "y":2},
+ {"x":13, "y":2},
+ {"x":14, "y":2},
+ {"x":15, "y":2},
+ {"x":16, "y":2},
+ {"x":17, "y":2, "w":2.25},
+ {"x":19.75, "y":2},
+
+ {"x":0, "y":3},
+ {"x":1, "y":3},
+ {"x":2, "y":3},
+ {"x":3, "y":3, "h":2},
+ {"x":4.25, "y":3, "w":2.25},
+ {"x":6.5, "y":3},
+ {"x":7.5, "y":3},
+ {"x":8.5, "y":3},
+ {"x":9.5, "y":3},
+ {"x":10.5, "y":3},
+ {"x":11.5, "y":3},
+ {"x":12.5, "y":3},
+ {"x":13.5, "y":3},
+ {"x":14.5, "y":3},
+ {"x":15.5, "y":3},
+ {"x":16.5, "y":3, "w":1.75},
+ {"x":18.5, "y":3.25},
+ {"x":19.75, "y":3},
+
+ {"x":0, "y":4, "w":2},
+ {"x":2, "y":4},
+ {"x":4.25, "y":4, "w":1.25},
+ {"x":5.5, "y":4, "w":1.25},
+ {"x":6.75, "y":4, "w":1.25},
+ {"x":8, "y":4, "w":6.25},
+ {"x":14.25, "y":4, "w":1.5},
+ {"x":15.75, "y":4, "w":1.5},
+ {"x":17.5, "y":4.25},
+ {"x":18.5, "y":4.25},
+ {"x":19.5, "y":4.25}
+ ]
+ },
+ "LAYOUT_ansi_numpad_left": {
+ "layout": [
+ {"x":0, "y":0},
+ {"x":1, "y":0},
+ {"x":2, "y":0},
+ {"x":3, "y":0},
+ {"x":4.25, "y":0},
+ {"x":5.25, "y":0},
+ {"x":6.25, "y":0},
+ {"x":7.25, "y":0},
+ {"x":8.25, "y":0},
+ {"x":9.25, "y":0},
+ {"x":10.25, "y":0},
+ {"x":11.25, "y":0},
+ {"x":12.25, "y":0},
+ {"x":13.25, "y":0},
+ {"x":14.25, "y":0},
+ {"x":15.25, "y":0},
+ {"x":16.25, "y":0},
+ {"x":17.25, "y":0, "w":2},
+ {"x":19.75, "y":0},
+
+ {"x":0, "y":1, "h":2},
+ {"x":1, "y":1},
+ {"x":2, "y":1},
+ {"x":3, "y":1},
+ {"x":4.25, "y":1, "w":1.5},
+ {"x":5.75, "y":1},
+ {"x":6.75, "y":1},
+ {"x":7.75, "y":1},
+ {"x":8.75, "y":1},
+ {"x":9.75, "y":1},
+ {"x":10.75, "y":1},
+ {"x":11.75, "y":1},
+ {"x":12.75, "y":1},
+ {"x":13.75, "y":1},
+ {"x":14.75, "y":1},
+ {"x":15.75, "y":1},
+ {"x":16.75, "y":1},
+ {"x":17.75, "y":1, "w":1.5},
+ {"x":19.75, "y":1},
+
+ {"x":1, "y":2},
+ {"x":2, "y":2},
+ {"x":3, "y":2},
+ {"x":4.25, "y":2, "w":1.75},
+ {"x":6, "y":2},
+ {"x":7, "y":2},
+ {"x":8, "y":2},
+ {"x":9, "y":2},
+ {"x":10, "y":2},
+ {"x":11, "y":2},
+ {"x":12, "y":2},
+ {"x":13, "y":2},
+ {"x":14, "y":2},
+ {"x":15, "y":2},
+ {"x":16, "y":2},
+ {"x":17, "y":2, "w":2.25},
+ {"x":19.75, "y":2},
+
+ {"x":0, "y":3, "h":2},
+ {"x":1, "y":3},
+ {"x":2, "y":3},
+ {"x":3, "y":3},
+ {"x":4.25, "y":3, "w":2.25},
+ {"x":6.5, "y":3},
+ {"x":7.5, "y":3},
+ {"x":8.5, "y":3},
+ {"x":9.5, "y":3},
+ {"x":10.5, "y":3},
+ {"x":11.5, "y":3},
+ {"x":12.5, "y":3},
+ {"x":13.5, "y":3},
+ {"x":14.5, "y":3},
+ {"x":15.5, "y":3},
+ {"x":16.5, "y":3, "w":1.75},
+ {"x":18.5, "y":3.25},
+ {"x":19.75, "y":3},
+
+ {"x":1, "y":4},
+ {"x":2, "y":4, "w":2},
+ {"x":4.25, "y":4, "w":1.25},
+ {"x":5.5, "y":4, "w":1.25},
+ {"x":6.75, "y":4, "w":1.25},
+ {"x":8, "y":4, "w":6.25},
+ {"x":14.25, "y":4, "w":1.5},
+ {"x":15.75, "y":4, "w":1.5},
+ {"x":17.5, "y":4.25},
+ {"x":18.5, "y":4.25},
+ {"x":19.5, "y":4.25}
+ ]
+ },
+ "LAYOUT_iso_numpad_right": {
+ "layout": [
+ {"x":0, "y":0},
+ {"x":1, "y":0},
+ {"x":2, "y":0},
+ {"x":3, "y":0},
+ {"x":4.25, "y":0},
+ {"x":5.25, "y":0},
+ {"x":6.25, "y":0},
+ {"x":7.25, "y":0},
+ {"x":8.25, "y":0},
+ {"x":9.25, "y":0},
+ {"x":10.25, "y":0},
+ {"x":11.25, "y":0},
+ {"x":12.25, "y":0},
+ {"x":13.25, "y":0},
+ {"x":14.25, "y":0},
+ {"x":15.25, "y":0},
+ {"x":16.25, "y":0},
+ {"x":17.25, "y":0, "w":2},
+ {"x":19.75, "y":0},
+
+ {"x":0, "y":1},
+ {"x":1, "y":1},
+ {"x":2, "y":1},
+ {"x":3, "y":1, "h":2},
+ {"x":4.25, "y":1, "w":1.5},
+ {"x":5.75, "y":1},
+ {"x":6.75, "y":1},
+ {"x":7.75, "y":1},
+ {"x":8.75, "y":1},
+ {"x":9.75, "y":1},
+ {"x":10.75, "y":1},
+ {"x":11.75, "y":1},
+ {"x":12.75, "y":1},
+ {"x":13.75, "y":1},
+ {"x":14.75, "y":1},
+ {"x":15.75, "y":1},
+ {"x":16.75, "y":1},
+ {"x":19.75, "y":1},
+
+ {"x":0, "y":2},
+ {"x":1, "y":2},
+ {"x":2, "y":2},
+ {"x":4.25, "y":2, "w":1.75},
+ {"x":6, "y":2},
+ {"x":7, "y":2},
+ {"x":8, "y":2},
+ {"x":9, "y":2},
+ {"x":10, "y":2},
+ {"x":11, "y":2},
+ {"x":12, "y":2},
+ {"x":13, "y":2},
+ {"x":14, "y":2},
+ {"x":15, "y":2},
+ {"x":16, "y":2},
+ {"x":17, "y":2},
+ {"x":18, "y":1, "w":1.25, "h":2},
+ {"x":19.75, "y":2},
+
+ {"x":0, "y":3},
+ {"x":1, "y":3},
+ {"x":2, "y":3},
+ {"x":3, "y":3, "h":2},
+ {"x":4.25, "y":3, "w":1.25},
+ {"x":5.5, "y":3},
+ {"x":6.5, "y":3},
+ {"x":7.5, "y":3},
+ {"x":8.5, "y":3},
+ {"x":9.5, "y":3},
+ {"x":10.5, "y":3},
+ {"x":11.5, "y":3},
+ {"x":12.5, "y":3},
+ {"x":13.5, "y":3},
+ {"x":14.5, "y":3},
+ {"x":15.5, "y":3},
+ {"x":16.5, "y":3, "w":1.75},
+ {"x":18.5, "y":3.25},
+ {"x":19.75, "y":3},
+
+ {"x":0, "y":4, "w":2},
+ {"x":2, "y":4},
+ {"x":4.25, "y":4, "w":1.25},
+ {"x":5.5, "y":4, "w":1.25},
+ {"x":6.75, "y":4, "w":1.25},
+ {"x":8, "y":4, "w":6.25},
+ {"x":14.25, "y":4, "w":1.5},
+ {"x":15.75, "y":4, "w":1.5},
+ {"x":17.5, "y":4.25},
+ {"x":18.5, "y":4.25},
+ {"x":19.5, "y":4.25}
+ ]
+ },
+ "LAYOUT_iso_numpad_left": {
+ "layout": [
+ {"x":0, "y":0},
+ {"x":1, "y":0},
+ {"x":2, "y":0},
+ {"x":3, "y":0},
+ {"x":4.25, "y":0},
+ {"x":5.25, "y":0},
+ {"x":6.25, "y":0},
+ {"x":7.25, "y":0},
+ {"x":8.25, "y":0},
+ {"x":9.25, "y":0},
+ {"x":10.25, "y":0},
+ {"x":11.25, "y":0},
+ {"x":12.25, "y":0},
+ {"x":13.25, "y":0},
+ {"x":14.25, "y":0},
+ {"x":15.25, "y":0},
+ {"x":16.25, "y":0},
+ {"x":17.25, "y":0, "w":2},
+ {"x":19.75, "y":0},
+
+ {"x":0, "y":1, "h":2},
+ {"x":1, "y":1},
+ {"x":2, "y":1},
+ {"x":3, "y":1},
+ {"x":4.25, "y":1, "w":1.5},
+ {"x":5.75, "y":1},
+ {"x":6.75, "y":1},
+ {"x":7.75, "y":1},
+ {"x":8.75, "y":1},
+ {"x":9.75, "y":1},
+ {"x":10.75, "y":1},
+ {"x":11.75, "y":1},
+ {"x":12.75, "y":1},
+ {"x":13.75, "y":1},
+ {"x":14.75, "y":1},
+ {"x":15.75, "y":1},
+ {"x":16.75, "y":1},
+ {"x":19.75, "y":1},
+
+ {"x":1, "y":2},
+ {"x":2, "y":2},
+ {"x":3, "y":2},
+ {"x":4.25, "y":2, "w":1.75},
+ {"x":6, "y":2},
+ {"x":7, "y":2},
+ {"x":8, "y":2},
+ {"x":9, "y":2},
+ {"x":10, "y":2},
+ {"x":11, "y":2},
+ {"x":12, "y":2},
+ {"x":13, "y":2},
+ {"x":14, "y":2},
+ {"x":15, "y":2},
+ {"x":16, "y":2},
+ {"x":17, "y":2},
+ {"x":18, "y":1, "w":1.25, "h":2},
+ {"x":19.75, "y":2},
+
+ {"x":0, "y":3, "h":2},
+ {"x":1, "y":3},
+ {"x":2, "y":3},
+ {"x":3, "y":3},
+ {"x":4.25, "y":3, "w":1.25},
+ {"x":5.5, "y":3},
+ {"x":6.5, "y":3},
+ {"x":7.5, "y":3},
+ {"x":8.5, "y":3},
+ {"x":9.5, "y":3},
+ {"x":10.5, "y":3},
+ {"x":11.5, "y":3},
+ {"x":12.5, "y":3},
+ {"x":13.5, "y":3},
+ {"x":14.5, "y":3},
+ {"x":15.5, "y":3},
+ {"x":16.5, "y":3, "w":1.75},
+ {"x":18.5, "y":3.25},
+ {"x":19.75, "y":3},
+
+ {"x":1, "y":4},
+ {"x":2, "y":4, "w":2},
+ {"x":4.25, "y":4, "w":1.25},
+ {"x":5.5, "y":4, "w":1.25},
+ {"x":6.75, "y":4, "w":1.25},
+ {"x":8, "y":4, "w":6.25},
+ {"x":14.25, "y":4, "w":1.5},
+ {"x":15.75, "y":4, "w":1.5},
+ {"x":17.5, "y":4.25},
+ {"x":18.5, "y":4.25},
+ {"x":19.5, "y":4.25}
+ ]
+ }
+ }
+} \ No newline at end of file
diff --git a/keyboards/mysticworks/wyvern/keymaps/default/keymap.c b/keyboards/mysticworks/wyvern/keymaps/default/keymap.c
new file mode 100644
index 000000000..9c927e7f2
--- /dev/null
+++ b/keyboards/mysticworks/wyvern/keymaps/default/keymap.c
@@ -0,0 +1,33 @@
+/* Copyright 2020 Albert Dong <albert@mysticworks.xyz>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_all(
+ KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, 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_GRV, KC_BSPC, KC_DEL,
+ KC_P7, KC_P8, KC_P9, KC_PPLS, 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_PGUP,
+ KC_P4, KC_P5, KC_P6, KC_PPLS, 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_NUBS, KC_ENT, KC_PGDN,
+ KC_P1, KC_P2, KC_P3, KC_PENT, KC_LSFT, KC_NUHS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, MO(1),
+ KC_P0, KC_P0, KC_PDOT, KC_PENT, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_all(
+ _______, _______, _______, _______, 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, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+}; \ No newline at end of file
diff --git a/keyboards/mysticworks/wyvern/keymaps/default/readme.md b/keyboards/mysticworks/wyvern/keymaps/default/readme.md
new file mode 100644
index 000000000..1d4604ba5
--- /dev/null
+++ b/keyboards/mysticworks/wyvern/keymaps/default/readme.md
@@ -0,0 +1,3 @@
+# Wyvern Default Keymap
+
+Default keymap for Wyvern- Normal numpad, ANSI layout with 6.25u. F-keys on second layer.
diff --git a/keyboards/mysticworks/wyvern/keymaps/via/keymap.c b/keyboards/mysticworks/wyvern/keymaps/via/keymap.c
new file mode 100644
index 000000000..d92fb562e
--- /dev/null
+++ b/keyboards/mysticworks/wyvern/keymaps/via/keymap.c
@@ -0,0 +1,47 @@
+/* Copyright 2020 Albert Dong <albert@mysticworks.xyz>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_all(
+ KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, 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_GRV, KC_BSPC, KC_DEL,
+ KC_P7, KC_P8, KC_P9, KC_PPLS, 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_PGUP,
+ KC_P4, KC_P5, KC_P6, KC_PPLS, 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_NUBS, KC_ENT, KC_PGDN,
+ KC_P1, KC_P2, KC_P3, KC_PENT, KC_LSFT, KC_NUHS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, MO(1),
+ KC_P0, KC_P0, KC_PDOT, KC_PENT, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_all(
+ _______, _______, _______, _______, 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, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ [2] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ [3] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+}; \ No newline at end of file
diff --git a/keyboards/mysticworks/wyvern/keymaps/via/readme.md b/keyboards/mysticworks/wyvern/keymaps/via/readme.md
new file mode 100644
index 000000000..02b3ae2a6
--- /dev/null
+++ b/keyboards/mysticworks/wyvern/keymaps/via/readme.md
@@ -0,0 +1,3 @@
+# Wyvern VIA Keymap
+
+Keymap for VIA Configurator usage- supports all layouts possible.
diff --git a/keyboards/mysticworks/wyvern/keymaps/via/rules.mk b/keyboards/mysticworks/wyvern/keymaps/via/rules.mk
new file mode 100644
index 000000000..36b7ba9cb
--- /dev/null
+++ b/keyboards/mysticworks/wyvern/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/mysticworks/wyvern/readme.md b/keyboards/mysticworks/wyvern/readme.md
new file mode 100644
index 000000000..6587d72bf
--- /dev/null
+++ b/keyboards/mysticworks/wyvern/readme.md
@@ -0,0 +1,18 @@
+# Wyvern
+
+A 65% + Southpaw Numpad designed and sold by [Mystic Works](https://mysticworks.xyz).
+
+## Support
+* Keyboard Maintainer: [mysticworks](https://github.com/mysticworks)
+* Hardware Supported: Wyvern
+* Hardware Availability: Will be posted [here](https://mysticworks.xyz/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make mysticworks/wyvern:default
+
+Flashing example for this keyboard:
+
+ make mysticworks/wyvern: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/mysticworks/wyvern/rules.mk b/keyboards/mysticworks/wyvern/rules.mk
new file mode 100644
index 000000000..6bd8b8932
--- /dev/null
+++ b/keyboards/mysticworks/wyvern/rules.mk
@@ -0,0 +1,22 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = qmk-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/mysticworks/wyvern/wyvern.c b/keyboards/mysticworks/wyvern/wyvern.c
new file mode 100644
index 000000000..015fb5ff0
--- /dev/null
+++ b/keyboards/mysticworks/wyvern/wyvern.c
@@ -0,0 +1,17 @@
+/* Copyright 2020 Albert Dong <albert@mysticworks.xyz>
+ *
+ * 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 "wyvern.h"
+
diff --git a/keyboards/mysticworks/wyvern/wyvern.h b/keyboards/mysticworks/wyvern/wyvern.h
new file mode 100644
index 000000000..ea5b4b305
--- /dev/null
+++ b/keyboards/mysticworks/wyvern/wyvern.h
@@ -0,0 +1,129 @@
+/* Copyright 2020 Albert Dong <albert@mysticworks.xyz>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#pragma once
+
+#include "quantum.h"
+
+/* This a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+
+#define XXX KC_NO
+
+#define LAYOUT_all( \
+ k00, k10, k01, k11, k02, k12, k03, k13, k04, k14, k05, k15, k06, k16, k07, k17, k08, k18, k09, k19, \
+ k20, k30, k21, k31, k22, k32, k23, k33, k24, k34, k25, k35, k26, k36, k27, k37, k28, k29, k39, \
+ k40, k50, k41, k51, k42, k52, k43, k53, k44, k54, k45, k55, k46, k56, k47, k57, k58, k49, k59, \
+ k60, k70, k61, k71, k62, k72, k63, k73, k64, k74, k65, k75, k66, k76, k67, k77, k68, k69, k79, \
+ k80, k90, k81, k91, k82, k92, k83, k85, k87, k97, k98, k89, k99 \
+) \
+{ \
+ { 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, k29 }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, XXX, k39 }, \
+ { k40, k41, k42, k43, k44, k45, k46, k47, XXX, k49 }, \
+ { k50, k51, k52, k53, k54, k55, k56, k57, k58, k59 }, \
+ { k60, k61, k62, k63, k64, k65, k66, k67, k68, k69 }, \
+ { k70, k71, k72, k73, k74, k75, k76, k77, XXX, k79 }, \
+ { k80, k81, k82, k83, XXX, k85, XXX, k87, XXX, k89 }, \
+ { k90, k91, k92, XXX, XXX, XXX, XXX, k97, k98, k99 } \
+}
+
+#define LAYOUT_ansi_numpad_right( \
+ k00, k10, k01, k11, k02, k12, k03, k13, k04, k14, k05, k15, k06, k16, k07, k17, k08, k09, k19, \
+ k20, k30, k21, k31, k22, k32, k23, k33, k24, k34, k25, k35, k26, k36, k27, k37, k28, k29, k39, \
+ k40, k50, k41, k42, k52, k43, k53, k44, k54, k45, k55, k46, k56, k47, k57, k49, k59, \
+ k60, k70, k61, k71, k62, k63, k73, k64, k74, k65, k75, k66, k76, k67, k77, k68, k69, k79, \
+ k80, k81, k82, k92, k83, k85, k87, k97, k98, k89, k99 \
+) \
+{ \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09 }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, XXX, k19 }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29 }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, XXX, k39 }, \
+ { k40, k41, k42, k43, k44, k45, k46, k47, XXX, k49 }, \
+ { k50, XXX, k52, k53, k54, k55, k56, k57, XXX, k59 }, \
+ { k60, k61, k62, k63, k64, k65, k66, k67, k68, k69 }, \
+ { k70, k71, k72, k73, k74, k75, k76, k77, XXX, k79 }, \
+ { k80, k81, k82, k83, XXX, k85, XXX, k87, XXX, k89 }, \
+ { XXX, XXX, k92, XXX, XXX, XXX, XXX, k97, k98, k99 } \
+}
+
+#define LAYOUT_ansi_numpad_left( \
+ k00, k10, k01, k11, k02, k12, k03, k13, k04, k14, k05, k15, k06, k16, k07, k17, k08, k09, k19, \
+ k20, k30, k21, k31, k22, k32, k23, k33, k24, k34, k25, k35, k26, k36, k27, k37, k28, k29, k39, \
+ k50, k41, k51, k42, k52, k43, k53, k44, k54, k45, k55, k46, k56, k47, k57, k49, k59, \
+ k60, k70, k61, k71, k62, k63, k73, k64, k74, k65, k75, k66, k76, k67, k77, k68, k69, k79, \
+ k90, k91, k82, k92, k83, k85, k87, k97, k98, k89, k99 \
+) \
+{ \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09 }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, XXX, k19 }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29 }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, XXX, k39 }, \
+ { XXX, k41, k42, k43, k44, k45, k46, k47, XXX, k49 }, \
+ { k50, k51, k52, k53, k54, k55, k56, k57, XXX, k59 }, \
+ { k60, k61, k62, k63, k64, k65, k66, k67, k68, k69 }, \
+ { k70, k71, XXX, k73, k74, k75, k76, k77, XXX, k79 }, \
+ { XXX, XXX, k82, k83, XXX, k85, XXX, k87, XXX, k89 }, \
+ { k90, k91, k92, XXX, XXX, XXX, XXX, k97, k98, k99 } \
+}
+
+#define LAYOUT_iso_numpad_right( \
+ k00, k10, k01, k11, k02, k12, k03, k13, k04, k14, k05, k15, k06, k16, k07, k17, k08, k09, k19, \
+ k20, k30, k21, k31, k22, k32, k23, k33, k24, k34, k25, k35, k26, k36, k27, k37, k28, k39, \
+ k40, k50, k41, k42, k52, k43, k53, k44, k54, k45, k55, k46, k56, k47, k57, k58, k49, k59, \
+ k60, k70, k61, k71, k62, k72, k63, k73, k64, k74, k65, k75, k66, k76, k67, k77, k68, k69, k79, \
+ k80, k81, k82, k92, k83, k85, k87, k97, k98, k89, k99 \
+) \
+{ \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09 }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, XXX, k19 }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, XXX }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, XXX, k39 }, \
+ { k40, k41, k42, k43, k44, k45, k46, k47, XXX, k49 }, \
+ { k50, XXX, k52, k53, k54, k55, k56, k57, k58, k59 }, \
+ { k60, k61, k62, k63, k64, k65, k66, k67, k68, k69 }, \
+ { k70, k71, k72, k73, k74, k75, k76, k77, XXX, k79 }, \
+ { k80, k81, k82, k83, XXX, k85, XXX, k87, XXX, k89 }, \
+ { XXX, XXX, k92, XXX, XXX, XXX, XXX, k97, k98, k99 } \
+}
+
+#define LAYOUT_iso_numpad_left( \
+ k00, k10, k01, k11, k02, k12, k03, k13, k04, k14, k05, k15, k06, k16, k07, k17, k08, k09, k19, \
+ k20, k30, k21, k31, k22, k32, k23, k33, k24, k34, k25, k35, k26, k36, k27, k37, k28, k39, \
+ k50, k41, k51, k42, k52, k43, k53, k44, k54, k45, k55, k46, k56, k47, k57, k58, k49, k59, \
+ k60, k70, k61, k71, k62, k72, k63, k73, k64, k74, k65, k75, k66, k76, k67, k77, k68, k69, k79, \
+ k90, k91, k82, k92, k83, k85, k87, k97, k98, k89, k99 \
+) \
+{ \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09 }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, XXX, k19 }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, XXX }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, XXX, k39 }, \
+ { XXX, k41, k42, k43, k44, k45, k46, k47, XXX, k49 }, \
+ { k50, k51, k52, k53, k54, k55, k56, k57, k58, k59 }, \
+ { k60, k61, k62, k63, k64, k65, k66, k67, k68, k69 }, \
+ { k70, k71, k72, k73, k74, k75, k76, k77, XXX, k79 }, \
+ { XXX, XXX, k82, k83, XXX, k85, XXX, k87, XXX, k89 }, \
+ { k90, k91, k92, XXX, XXX, XXX, XXX, k97, k98, k99 } \
+}
diff --git a/keyboards/pabile/p18/config.h b/keyboards/pabile/p18/config.h
index f7c258a56..d8d5a95f2 100644
--- a/keyboards/pabile/p18/config.h
+++ b/keyboards/pabile/p18/config.h
@@ -1,3 +1,21 @@
+/*
+Copyright 2020 Pabile
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+
#pragma once
#include "config_common.h"
diff --git a/keyboards/pabile/p20/config.h b/keyboards/pabile/p20/config.h
deleted file mode 100644
index 8a52c1bf1..000000000
--- a/keyboards/pabile/p20/config.h
+++ /dev/null
@@ -1,26 +0,0 @@
-#pragma once
-
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID 0x6666
-#define PRODUCT_ID 0x6667
-#define DEVICE_VER 0x0001
-#define MANUFACTURER Pabile
-#define PRODUCT P20
-#define DESCRIPTION 5x4 Macropad
-
-/* key matrix size */
-#define MATRIX_ROWS 5
-#define MATRIX_COLS 4
-
-/* pin-out */
-#define MATRIX_ROW_PINS { B3, B4, B5, D7, E6 }
-#define MATRIX_COL_PINS { D0, B2, D4, B6 }
-#define UNUSED_PINS
-
-#define ENCODERS_PAD_A { F5, F7 }
-#define ENCODERS_PAD_B { F6, B1 }
-
-/* COL2ROW or ROW2COL */
-#define DIODE_DIRECTION COL2ROW
diff --git a/keyboards/pabile/p20/p20.c b/keyboards/pabile/p20/p20.c
deleted file mode 100644
index c17efac9b..000000000
--- a/keyboards/pabile/p20/p20.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "p20.h"
diff --git a/keyboards/pabile/p20/p20.h b/keyboards/pabile/p20/p20.h
deleted file mode 100644
index b7467dc15..000000000
--- a/keyboards/pabile/p20/p20.h
+++ /dev/null
@@ -1,18 +0,0 @@
-#pragma once
-
-#include "quantum.h"
-
-#define LAYOUT_ortho_5x4( \
- k00, k01, k02, k03, \
- k10, k11, k12, k13, \
- k20, k21, k22, k23, \
- k30, k31, k32, k33, \
- k40, k41, k42, k43 \
-) \
-{ \
- {k00, k01, k02, k03}, \
- {k10, k11, k12, k13}, \
- {k20, k21, k22, k23}, \
- {k30, k31, k32, k33}, \
- {k40, k41, k42, k43} \
-}
diff --git a/keyboards/pabile/p20/readme.md b/keyboards/pabile/p20/readme.md
index 256a4772e..e94005b0d 100644
--- a/keyboards/pabile/p20/readme.md
+++ b/keyboards/pabile/p20/readme.md
@@ -1,16 +1,16 @@
# P20
![Linear grid](https://github.com/pabile/Pabile20/blob/master/_bak/layout-grid.jpg)
-![Numeric pad](https://github.com/pabile/Pabile20/blob/master/_bak/layout-numpad.jpg)
-A 5x4 grid keyboard with 2 rotary encoders.
+A 5x4 grid macro numeric pad with up to 3 optional rotary encoders.
* Keyboard Maintainer: [pabile](https://github.com/pabile)
-* Hardware Supported: Pabile P20 PCB, Pro Micro
-* Hardware Availability: [Info at pabileonline.blogspot.com](https://pabileonline.blogspot.com/search/label/pabile20)
+* Hardware Supported: Pabile P20 PCB, Pro Micro, Rotary Encoders, Alps/MX Switches
+* Hardware Availability: [pabileonline.blogspot.com](https://pabileonline.blogspot.com/search/label/p20)
Make example for this keyboard (after setting up your build environment):
- make pabile/p20:default
+ make pabile/p20/ver1:default # for ver1
+ make pabile/p20/ver2:default # for ver2
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/pabile/p20/ver1/config.h b/keyboards/pabile/p20/ver1/config.h
new file mode 100644
index 000000000..94c600106
--- /dev/null
+++ b/keyboards/pabile/p20/ver1/config.h
@@ -0,0 +1,42 @@
+/*
+Copyright 2020 Pabile
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x6666
+#define PRODUCT_ID 0x6667
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Pabile
+#define PRODUCT P20 ver1
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 4
+
+/* pin-out */
+#define MATRIX_ROW_PINS { B3, B4, B5, D7, E6 }
+#define MATRIX_COL_PINS { D0, B2, D4, B6 }
+#define UNUSED_PINS
+
+#define ENCODERS_PAD_A { F5, F7 }
+#define ENCODERS_PAD_B { F6, B1 }
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW \ No newline at end of file
diff --git a/keyboards/pabile/p20/keymaps/default/keymap.c b/keyboards/pabile/p20/ver1/keymaps/default/keymap.c
index 6b815e72e..6b815e72e 100644
--- a/keyboards/pabile/p20/keymaps/default/keymap.c
+++ b/keyboards/pabile/p20/ver1/keymaps/default/keymap.c
diff --git a/keyboards/pabile/p20/rules.mk b/keyboards/pabile/p20/ver1/rules.mk
index d4fa25323..d8e01b847 100644
--- a/keyboards/pabile/p20/rules.mk
+++ b/keyboards/pabile/p20/ver1/rules.mk
@@ -2,13 +2,6 @@
MCU = atmega32u4
# Bootloader selection
-# Teensy halfkay
-# Pro Micro caterina
-# Atmel DFU atmel-dfu
-# LUFA DFU lufa-dfu
-# QMK DFU qmk-dfu
-# ATmega32A bootloadHID
-# ATmega328P USBasp
BOOTLOADER = caterina
# Build Options
@@ -25,13 +18,11 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
NKRO_ENABLE = no # USB Nkey Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
-MIDI_ENABLE = no # MIDI support
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-AUDIO_ENABLE = no # Audio output on port C6
-FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
-HD44780_ENABLE = no # Enable support for HD44780 based LCDs
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
+
UNICODE_ENABLE = yes # Unicode
IOS_DEVICE_ENABLE = no # connect to IOS Device
ENCODER_ENABLE = yes
-LAYOUTS = ortho_5x4
+LAYOUTS = ortho_5x4 numpad_5x4
diff --git a/keyboards/pabile/p20/ver1/ver1.c b/keyboards/pabile/p20/ver1/ver1.c
new file mode 100644
index 000000000..65e11630b
--- /dev/null
+++ b/keyboards/pabile/p20/ver1/ver1.c
@@ -0,0 +1,18 @@
+/*
+Copyright 2020 Pabile
+
+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 "ver1.h"
diff --git a/keyboards/pabile/p20/ver1/ver1.h b/keyboards/pabile/p20/ver1/ver1.h
new file mode 100644
index 000000000..36ec781fa
--- /dev/null
+++ b/keyboards/pabile/p20/ver1/ver1.h
@@ -0,0 +1,50 @@
+/*
+Copyright 2020 Pabile
+
+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_ortho_5x4( \
+ k00, k01, k02, k03, \
+ k10, k11, k12, k13, \
+ k20, k21, k22, k23, \
+ k30, k31, k32, k33, \
+ k40, k41, k42, k43 \
+) \
+{ \
+ {k00, k01, k02, k03}, \
+ {k10, k11, k12, k13}, \
+ {k20, k21, k22, k23}, \
+ {k30, k31, k32, k33}, \
+ {k40, k41, k42, k43} \
+}
+
+#define LAYOUT_numpad_5x4( \
+ k00, k01, k02, k03, \
+ k10, k11, k12, \
+ k20, k21, k22, k23, \
+ k30, k31, k32, \
+ k40, k42, k43 \
+) \
+{ \
+ {k00, k01, k02, k03}, \
+ {k10, k11, k12, KC_NO}, \
+ {k20, k21, k22, k23}, \
+ {k30, k31, k32, KC_NO}, \
+ {k40, KC_NO, k42, k43} \
+}
diff --git a/keyboards/pabile/p20/ver2/config.h b/keyboards/pabile/p20/ver2/config.h
new file mode 100644
index 000000000..099700183
--- /dev/null
+++ b/keyboards/pabile/p20/ver2/config.h
@@ -0,0 +1,39 @@
+/*
+Copyright 2020 Pabile
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x6666
+#define PRODUCT_ID 0x6667
+#define DEVICE_VER 0x0002
+#define MANUFACTURER Pabile
+#define PRODUCT P20 ver2
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 4
+
+/* pin-out */
+#define MATRIX_ROW_PINS { C6, D7, E6, B4, B5 }
+#define MATRIX_COL_PINS { D1, D0, D4, B2 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
diff --git a/keyboards/pabile/p20/ver2/keymaps/default/keymap.c b/keyboards/pabile/p20/ver2/keymaps/default/keymap.c
new file mode 100644
index 000000000..2c2af0da8
--- /dev/null
+++ b/keyboards/pabile/p20/ver2/keymaps/default/keymap.c
@@ -0,0 +1,43 @@
+/*
+Copyright 2020 Pabile
+
+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 {
+ DBLZERO = SAFE_RANGE,
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case DBLZERO:
+ if (record->event.pressed) {
+ tap_code(KC_P0);
+ tap_code(KC_P0);
+ }
+ break;
+ }
+ return true;
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ortho_5x4(
+ KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_P7, KC_P8, KC_P9, KC_TAB,
+ KC_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_P1, KC_P2, KC_P3, KC_DEL,
+ KC_P0, DBLZERO, KC_PDOT, KC_PENT)
+};
diff --git a/keyboards/pabile/p20/ver2/rules.mk b/keyboards/pabile/p20/ver2/rules.mk
new file mode 100644
index 000000000..da59201fc
--- /dev/null
+++ b/keyboards/pabile/p20/ver2/rules.mk
@@ -0,0 +1,28 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
+
+UNICODE_ENABLE = yes # Unicode
+IOS_DEVICE_ENABLE = no # connect to IOS Device
+ENCODER_ENABLE = no
+
+LAYOUTS = ortho_5x4 numpad_5x4
diff --git a/keyboards/pabile/p20/ver2/ver2.c b/keyboards/pabile/p20/ver2/ver2.c
new file mode 100644
index 000000000..fa7e1f2e3
--- /dev/null
+++ b/keyboards/pabile/p20/ver2/ver2.c
@@ -0,0 +1,18 @@
+/*
+Copyright 2020 Pabile
+
+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 "ver2.h"
diff --git a/keyboards/pabile/p20/ver2/ver2.h b/keyboards/pabile/p20/ver2/ver2.h
new file mode 100644
index 000000000..36ec781fa
--- /dev/null
+++ b/keyboards/pabile/p20/ver2/ver2.h
@@ -0,0 +1,50 @@
+/*
+Copyright 2020 Pabile
+
+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_ortho_5x4( \
+ k00, k01, k02, k03, \
+ k10, k11, k12, k13, \
+ k20, k21, k22, k23, \
+ k30, k31, k32, k33, \
+ k40, k41, k42, k43 \
+) \
+{ \
+ {k00, k01, k02, k03}, \
+ {k10, k11, k12, k13}, \
+ {k20, k21, k22, k23}, \
+ {k30, k31, k32, k33}, \
+ {k40, k41, k42, k43} \
+}
+
+#define LAYOUT_numpad_5x4( \
+ k00, k01, k02, k03, \
+ k10, k11, k12, \
+ k20, k21, k22, k23, \
+ k30, k31, k32, \
+ k40, k42, k43 \
+) \
+{ \
+ {k00, k01, k02, k03}, \
+ {k10, k11, k12, KC_NO}, \
+ {k20, k21, k22, k23}, \
+ {k30, k31, k32, KC_NO}, \
+ {k40, KC_NO, k42, k43} \
+}
diff --git a/keyboards/pabile/p40/config.h b/keyboards/pabile/p40/config.h
index f4252f7ab..02ebb67e6 100644
--- a/keyboards/pabile/p40/config.h
+++ b/keyboards/pabile/p40/config.h
@@ -1,3 +1,20 @@
+/*
+Copyright 2020 Pabile
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
#pragma once
#include "config_common.h"
diff --git a/keyboards/pabile/p40/info.json b/keyboards/pabile/p40/info.json
index 42f9b4823..d05d77328 100644
--- a/keyboards/pabile/p40/info.json
+++ b/keyboards/pabile/p40/info.json
@@ -7,46 +7,46 @@
"layouts": {
"LAYOUT_ortho_4x10": {
"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":0.25, "y":1},
- {"x":1.25, "y":1},
- {"x":2.25, "y":1},
- {"x":3.25, "y":1},
- {"x":4.25, "y":1},
- {"x":5.25, "y":1},
- {"x":6.25, "y":1},
- {"x":7.25, "y":1},
- {"x":8.25, "y":1},
- {"x":9.25, "y":1},
- {"x":0.5, "y":2},
- {"x":1.5, "y":2},
- {"x":2.5, "y":2},
- {"x":3.5, "y":2},
- {"x":4.5, "y":2},
- {"x":5.5, "y":2},
- {"x":6.5, "y":2},
- {"x":7.5, "y":2},
- {"x":8.5, "y":2},
- {"x":9.5, "y":2},
- {"x":0.75, "y":3},
- {"x":1.75, "y":3},
- {"x":2.75, "y":3},
- {"x":3.75, "y":3},
- {"x":4.75, "y":3},
- {"x":5.75, "y":3},
- {"x":6.75, "y":3},
- {"x":7.75, "y":3},
- {"x":8.75, "y":3},
- {"x":9.75, "y":3}]
+ {"w":1, "x":0, "y":0},
+ {"w":1, "x":1, "y":0},
+ {"w":1, "x":2, "y":0},
+ {"w":1, "x":3, "y":0},
+ {"w":1, "x":4, "y":0},
+ {"w":1, "x":5, "y":0},
+ {"w":1, "x":6, "y":0},
+ {"w":1, "x":7, "y":0},
+ {"w":1, "x":8, "y":0},
+ {"w":1, "x":9, "y":0},
+ {"w":1, "x":0.25, "y":1},
+ {"w":1, "x":1.25, "y":1},
+ {"w":1, "x":2.25, "y":1},
+ {"w":1, "x":3.25, "y":1},
+ {"w":1, "x":4.25, "y":1},
+ {"w":1, "x":5.25, "y":1},
+ {"w":1, "x":6.25, "y":1},
+ {"w":1, "x":7.25, "y":1},
+ {"w":1, "x":8.25, "y":1},
+ {"w":1, "x":9.25, "y":1},
+ {"w":1, "x":0.5, "y":2},
+ {"w":1, "x":1.5, "y":2},
+ {"w":1, "x":2.5, "y":2},
+ {"w":1, "x":3.5, "y":2},
+ {"w":1, "x":4.5, "y":2},
+ {"w":1, "x":5.5, "y":2},
+ {"w":1, "x":6.5, "y":2},
+ {"w":1, "x":7.5, "y":2},
+ {"w":1, "x":8.5, "y":2},
+ {"w":1, "x":9.5, "y":2},
+ {"w":1, "x":0.75, "y":3},
+ {"w":1, "x":1.75, "y":3},
+ {"w":1, "x":2.75, "y":3},
+ {"w":1, "x":3.75, "y":3},
+ {"w":1, "x":4.75, "y":3},
+ {"w":1, "x":5.75, "y":3},
+ {"w":1, "x":6.75, "y":3},
+ {"w":1, "x":7.75, "y":3},
+ {"w":1, "x":8.75, "y":3},
+ {"w":1, "x":9.75, "y":3}]
}
}
}
diff --git a/keyboards/pabile/p40/readme.md b/keyboards/pabile/p40/readme.md
index 33a657f38..14673d75a 100644
--- a/keyboards/pabile/p40/readme.md
+++ b/keyboards/pabile/p40/readme.md
@@ -6,10 +6,11 @@ A compact 4x10 (40%) staggered DIY keyboard kit.
* Keyboard Maintainer: [pabile](https://github.com/pabile)
* Hardware Supported: Pabile P40 PCB, Pro Micro
-* Hardware Availability: [Info at pabileonline.blogspot.com](https://pabileonline.blogspot.com/search/label/pabile40)
+* Hardware Availability: [Info at pabileonline.blogspot.com](https://pabileonline.blogspot.com/search/label/p40)
Make example for this keyboard (after setting up your build environment):
make pabile/p40:default
+
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/pabile/p40_ortho/config.h b/keyboards/pabile/p40_ortho/config.h
new file mode 100644
index 000000000..4fd8e7a53
--- /dev/null
+++ b/keyboards/pabile/p40_ortho/config.h
@@ -0,0 +1,40 @@
+/*
+Copyright 2020 Pabile
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x6666
+#define PRODUCT_ID 0x6669
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Pabile
+#define PRODUCT P40 Ortho Keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 10
+
+/* pin-out */
+#define MATRIX_ROW_PINS { D1, D0, F4, F5 }
+#define MATRIX_COL_PINS { D4, C6, D7, E6, B4, B2, B3, B1, F7, F6 }
+
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
diff --git a/keyboards/pabile/p40_ortho/info.json b/keyboards/pabile/p40_ortho/info.json
new file mode 100644
index 000000000..a4d757be9
--- /dev/null
+++ b/keyboards/pabile/p40_ortho/info.json
@@ -0,0 +1,52 @@
+{
+ "keyboard_name": "",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 10,
+ "height": 4,
+ "layouts": {
+ "LAYOUT_ortho_4x10": {
+ "layout": [
+ {"label":"Q", "x":0, "y":0},
+ {"label":"W", "x":1, "y":0},
+ {"label":"E", "x":2, "y":0},
+ {"label":"R", "x":3, "y":0},
+ {"label":"T", "x":4, "y":0},
+ {"label":"Y", "x":5, "y":0},
+ {"label":"U", "x":6, "y":0},
+ {"label":"I", "x":7, "y":0},
+ {"label":"O", "x":8, "y":0},
+ {"label":"P", "x":9, "y":0},
+ {"label":"A", "x":0, "y":1},
+ {"label":"S", "x":1, "y":1},
+ {"label":"D", "x":2, "y":1},
+ {"label":"F", "x":3, "y":1},
+ {"label":"G", "x":4, "y":1},
+ {"label":"H", "x":5, "y":1},
+ {"label":"J", "x":6, "y":1},
+ {"label":"K", "x":7, "y":1},
+ {"label":"L", "x":8, "y":1},
+ {"label":"-", "x":9, "y":1},
+ {"label":"Z", "x":0, "y":2},
+ {"label":"X", "x":1, "y":2},
+ {"label":"C", "x":2, "y":2},
+ {"label":"V", "x":3, "y":2},
+ {"label":"B", "x":4, "y":2},
+ {"label":"N", "x":5, "y":2},
+ {"label":"M", "x":6, "y":2},
+ {"label":",", "x":7, "y":2},
+ {"label":".", "x":8, "y":2},
+ {"label":"?", "x":9, "y":2},
+ {"label":"Ctrl", "x":0, "y":3},
+ {"label":"Win", "x":1, "y":3},
+ {"label":"Alt", "x":2, "y":3},
+ {"label":"Shift", "x":3, "y":3},
+ {"label":"&larr;", "x":4, "y":3},
+ {"x":5, "y":3},
+ {"label":"Enter", "x":6, "y":3},
+ {"label":"Alt", "x":7, "y":3},
+ {"label":"Super", "x":8, "y":3},
+ {"label":"Ctrl", "x":9, "y":3}]
+ }
+ }
+}
diff --git a/keyboards/pabile/p40_ortho/keymaps/default/keymap.c b/keyboards/pabile/p40_ortho/keymaps/default/keymap.c
new file mode 100644
index 000000000..ac41acf2d
--- /dev/null
+++ b/keyboards/pabile/p40_ortho/keymaps/default/keymap.c
@@ -0,0 +1,46 @@
+/*
+Copyright 2020 Pabile
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ortho_4x10(
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(3,KC_MINS),
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, LT(4,KC_SLSH),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_LSFT, LT(2,KC_BSPC), LT(1,KC_SPC), KC_ENT, KC_APP, KC_DEL, KC_ESC),
+ [1] = LAYOUT_ortho_4x10(
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ KC_TAB, KC_NO, KC_NO, KC_GRV, KC_LBRC, KC_RBRC, KC_BSLS, KC_SCLN, KC_QUOT, KC_MINS,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_EQL, KC_MINS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+ [2] = LAYOUT_ortho_4x10(
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
+ KC_TAB, KC_F11, KC_F12, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_CAPS, KC_PSCR, KC_SLCK, KC_PAUS, KC_NO, KC_NLCK, KC_NO, KC_VOLD, KC_VOLU, KC_MUTE,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO),
+ [3] = LAYOUT_ortho_4x10(
+ KC_ESC, KC_NO, KC_NO, KC_NO, KC_NO, KC_INS, KC_PGUP, KC_UP, KC_PGDN, KC_DEL,
+ KC_TAB, KC_NO, KC_NO, KC_NO, KC_NO, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_END, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSPC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO),
+ [4] = LAYOUT_ortho_4x10(
+ KC_ESC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_BTN1, KC_MS_U, KC_BTN2, KC_DEL,
+ KC_TAB, KC_NO, KC_NO, KC_NO, KC_NO, KC_WH_U, KC_MS_L, KC_MS_D, KC_MS_R, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_WH_D, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSPC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO)
+};
diff --git a/keyboards/pabile/p40_ortho/p40_ortho.c b/keyboards/pabile/p40_ortho/p40_ortho.c
new file mode 100644
index 000000000..b6573bd80
--- /dev/null
+++ b/keyboards/pabile/p40_ortho/p40_ortho.c
@@ -0,0 +1,18 @@
+/*
+Copyright 2020 Pabile
+
+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 "p40_ortho.h"
diff --git a/keyboards/pabile/p40_ortho/p40_ortho.h b/keyboards/pabile/p40_ortho/p40_ortho.h
new file mode 100644
index 000000000..dd2c899da
--- /dev/null
+++ b/keyboards/pabile/p40_ortho/p40_ortho.h
@@ -0,0 +1,45 @@
+/*
+Copyright 2020 Pabile
+
+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_ortho_4x10( \
+ 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, k29, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39 \
+) \
+{ \
+ {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, k29}, \
+ {k30, k31, k32, k33, k34, k35, k36, k37, k38, k39} \
+}
+#define LAYOUT_ortho_4x10_1x2u_c( \
+ 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, k29, \
+ k30, k31, k32, k33, k34, k36, k37, k38, k39 \
+) \
+{ \
+ {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, k29}, \
+ {k30, k31, k32, k33, k34, KC_NO, k36, k37, k38, k39} \
+}
diff --git a/keyboards/pabile/p40_ortho/readme.md b/keyboards/pabile/p40_ortho/readme.md
new file mode 100644
index 000000000..736c5b497
--- /dev/null
+++ b/keyboards/pabile/p40_ortho/readme.md
@@ -0,0 +1,15 @@
+# P40 Ortho
+
+![prototype photo1](https://github.com/pabile/p40_ortho/blob/master/files/p40-ortho-003.jpg)
+
+A compact 4x10 (40%) ortho-linear DIY keyboard kit.
+
+* Keyboard Maintainer: [pabile](https://github.com/pabile)
+* Hardware Supported: Pabile P40 PCB, Pro Micro, ALPS / MX Switches
+* Hardware Availability: [pabileonline.blogspot.com](https://pabileonline.blogspot.com/search/label/pabile40)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make pabile/p40_ortho:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/pabile/p40_ortho/rules.mk b/keyboards/pabile/p40_ortho/rules.mk
new file mode 100644
index 000000000..ba0ad23c8
--- /dev/null
+++ b/keyboards/pabile/p40_ortho/rules.mk
@@ -0,0 +1,24 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
+UNICODE_ENABLE = yes # Unicode
+IOS_DEVICE_ENABLE = no # connect to IOS Device
diff --git a/keyboards/pabile/p42/config.h b/keyboards/pabile/p42/config.h
new file mode 100644
index 000000000..2f7c5ce30
--- /dev/null
+++ b/keyboards/pabile/p42/config.h
@@ -0,0 +1,45 @@
+/*
+Copyright 2020 Pabile
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x6666
+#define PRODUCT_ID 0x6670
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Pabile
+#define PRODUCT P42 Keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 11
+
+/* pin-out for PROMICRO */
+#define MATRIX_ROW_PINS { D1, D0, D4, C6 }
+#define MATRIX_COL_PINS { D7, E6, B4, B5, D2, D3, F7, B1, B3, B2, B6 }
+
+/* pin-out for BLUEFRUIT
+#define MATRIX_ROW_PINS { F7, F6, F5, F4 }
+#define MATRIX_COL_PINS { F1, F0, B1, B2, B3, D2, C7, D6, B7, B6, B5 }
+*/
+
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
diff --git a/keyboards/pabile/p42/info.json b/keyboards/pabile/p42/info.json
new file mode 100644
index 000000000..77bce4bab
--- /dev/null
+++ b/keyboards/pabile/p42/info.json
@@ -0,0 +1,13 @@
+{
+ "keyboard_name": "P42",
+ "url": "https://pabileonline.blogspot.com/",
+ "maintainer": "Pabile",
+ "width": 11.25,
+ "height": 4,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":6, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":6, "y":2}, {"label":",", "x":7, "y":2}, {"label":".", "x":8, "y":2}, {"x":9, "y":2}, {"x":10.25, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":6, "y":3}, {"x":7, "y":3}, {"x":8, "y":3}, {"x":9, "y":3}, {"x":10.25, "y":3}]
+ }
+ }
+}
diff --git a/keyboards/pabile/p42/keymaps/default/keymap.c b/keyboards/pabile/p42/keymaps/default/keymap.c
new file mode 100644
index 000000000..39c9e639e
--- /dev/null
+++ b/keyboards/pabile/p42/keymaps/default/keymap.c
@@ -0,0 +1,29 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(3,KC_MINS),
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_LSFT, LT(2,KC_BSPC), LT(1,KC_SPC), LT(4,KC_ENT), KC_DEL, KC_RALT, KC_RCTL, KC_ESC),
+ [1] = LAYOUT(
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ KC_TAB, KC_NO, KC_NO, KC_GRV, KC_LBRC, KC_RBRC, KC_BSLS, KC_SCLN, KC_QUOT, KC_MINS,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_EQL, KC_MINS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+ [2] = LAYOUT(
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
+ KC_TAB, KC_F11, KC_F12, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_CAPS, KC_PSCR, KC_SLCK, KC_PAUS, KC_NO, KC_NLCK, KC_NO, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS),
+ [3] = LAYOUT(
+ KC_ESC, KC_NO, KC_NO, KC_NO, KC_NO, KC_INS, KC_PGUP, KC_UP, KC_PGDN, KC_DEL,
+ KC_TAB, KC_NO, KC_NO, KC_NO, KC_NO, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_END, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSPC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS),
+ [4] = LAYOUT(
+ KC_ESC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_BTN1, KC_MS_U, KC_BTN2, KC_DEL,
+ KC_TAB, KC_NO, KC_NO, KC_NO, KC_NO, KC_WH_U, KC_MS_L, KC_MS_D, KC_MS_R, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_WH_D, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSPC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS)
+};
diff --git a/keyboards/pabile/p42/p42.c b/keyboards/pabile/p42/p42.c
new file mode 100644
index 000000000..63bf51bd5
--- /dev/null
+++ b/keyboards/pabile/p42/p42.c
@@ -0,0 +1 @@
+#include "p42.h"
diff --git a/keyboards/pabile/p42/p42.h b/keyboards/pabile/p42/p42.h
new file mode 100644
index 000000000..41aed042a
--- /dev/null
+++ b/keyboards/pabile/p42/p42.h
@@ -0,0 +1,33 @@
+/*
+Copyright 2020 Pabile
+
+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( \
+ k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, \
+ k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, \
+ k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210,\
+ k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k310 \
+) \
+{ \
+ {k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, KC_NO}, \
+ {k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, KC_NO}, \
+ {k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210}, \
+ {k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k310} \
+}
diff --git a/keyboards/pabile/p42/readme.md b/keyboards/pabile/p42/readme.md
new file mode 100644
index 000000000..5ad0036bf
--- /dev/null
+++ b/keyboards/pabile/p42/readme.md
@@ -0,0 +1,15 @@
+# P42
+
+![prototype photo1](https://github.com/pabile/P42/blob/master/docs/p42-001-small.jpg)
+
+42-key Ortho-linear keyboard
+
+* Keyboard Maintainer: [pabile](https://github.com/pabile)
+* Hardware Supported: Pabile P42 PCB, Pro Micro, Bluefruit LE, Hotswap Sockets
+* Hardware Availability: [pabileonline.blogspot.com](https://pabileonline.blogspot.com/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make pabile/p42:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/pabile/p42/rules.mk b/keyboards/pabile/p42/rules.mk
new file mode 100644
index 000000000..ba0ad23c8
--- /dev/null
+++ b/keyboards/pabile/p42/rules.mk
@@ -0,0 +1,24 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
+UNICODE_ENABLE = yes # Unicode
+IOS_DEVICE_ENABLE = no # connect to IOS Device
diff --git a/keyboards/percent/canoe_gen2/canoe_gen2.c b/keyboards/percent/canoe_gen2/canoe_gen2.c
new file mode 100644
index 000000000..47ade5dd4
--- /dev/null
+++ b/keyboards/percent/canoe_gen2/canoe_gen2.c
@@ -0,0 +1,141 @@
+/*
+Copyright 2020 Evy Dekkers
+
+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 "canoe_gen2.h"
+
+void keyboard_pre_init_kb(void) {
+ setPinOutput(E6);
+ writePinHigh(E6);
+}
+
+bool led_update_kb(led_t led_state) {
+ if(led_update_user(led_state)) {
+ writePin(E6, !led_state.caps_lock);
+ }
+
+ return true;
+}
+
+#ifdef RGB_MATRIX_ENABLE
+void suspend_power_down_kb(void) {
+ rgb_matrix_set_suspend_state(true);
+ suspend_power_down_user();
+}
+
+void suspend_wakeup_init_kb(void) {
+ rgb_matrix_set_suspend_state(false);
+ suspend_wakeup_init_user();
+}
+
+led_config_t g_led_config = { {
+ // Key Matrix to LED Index
+ // 15, 44, 46, 48,
+ // 74, 75, 76
+ { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 16 },
+ { 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 13, 31 },
+ { 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 30, 45, 47 },
+ { 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63 },
+ { 64, 65, 66, NO_LED, NO_LED, NO_LED, 67, NO_LED, NO_LED, 69, 70, NO_LED, 71, 72, 73 }
+}, {
+ // LED Index to Physical Position
+ { 7, 8 }, // Esc
+ { 22, 8 }, // 1
+ { 37, 8 }, // 2
+ { 52, 8 }, // 3
+ { 67, 8 }, // 4
+ { 82, 8 }, // 5
+ { 97, 8 }, // 6
+ { 112, 8 }, // 7
+ { 127, 8 }, // 8
+ { 142, 8 }, // 9
+ { 157, 8 }, // 0
+ { 172, 8 }, // -
+ { 187, 8 }, // =
+ { 202, 8 }, // split bs
+ { 209, 8 }, // bs
+ { 217, 8 }, // split bs
+ { 231, 8 }, // ins
+ { 11, 24 }, // tab
+ { 30, 24 }, // q
+ { 45, 24 }, // w
+ { 60, 24 }, // e
+ { 75, 24 }, // r
+ { 90, 24 }, // t
+ { 104, 24 }, // y
+ { 119, 24 }, // u
+ { 134, 24 }, // i
+ { 149, 24 }, // o
+ { 164, 24 }, // p
+ { 179, 24 }, // [
+ { 194, 24 }, // ]
+ { 212, 24 }, // backslash
+ { 231, 24 }, // del
+ { 11, 40 }, // caps
+ { 34, 40 }, // a
+ { 49, 40 }, // s
+ { 64, 40 }, // d
+ { 79, 40 }, // f
+ { 94, 40 }, // g
+ { 108, 40 }, // h
+ { 123, 40 }, // j
+ { 138, 40 }, // k
+ { 153, 40 }, // l
+ { 168, 40 }, // ;
+ { 183, 40 }, // '
+ { 198, 40 }, // iso hash
+ { 200, 40 }, // ansi enter
+ { 215, 32 }, // iso enter
+ { 231, 40 }, // pgup
+ { 9, 56 }, // iso shift
+ { 17, 56 }, // ansi shift
+ { 26, 56 }, // iso nubs
+ { 41, 56 }, // z
+ { 56, 56 }, // x
+ { 71, 56 }, // c
+ { 86, 56 }, // v
+ { 101, 56 }, // b
+ { 116, 56 }, // n
+ { 131, 56 }, // m
+ { 146, 56 }, // ,
+ { 161, 56 }, // .
+ { 175, 56 }, // ?
+ { 196, 56 }, // shift
+ { 217, 56 }, // up
+ { 231, 56 }, // pgdn
+ { 10, 72 }, // ctrl
+ { 29, 72 }, // win
+ { 48, 72 }, // alt
+ { 103, 72 }, // space
+ { 112, 72 }, // space
+ { 161, 72 }, // alt
+ { 176, 72 }, // fn
+ { 202, 72 }, // left
+ { 217, 72 }, // down
+ { 231, 72 }, // right
+ { 7, 40 }, // top 1
+ { 119, 40 }, // top 2
+ { 231, 40 } // top 3
+}, {
+ // LED Index to Flag
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1,
+ 1, 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,
+ 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1,
+ 1, 1, 1, 4, 4, 1, 1, 1, 1, 1,
+ 2, 2, 2
+} };
+#endif
diff --git a/keyboards/percent/canoe_gen2/canoe_gen2.h b/keyboards/percent/canoe_gen2/canoe_gen2.h
new file mode 100644
index 000000000..d4582eef2
--- /dev/null
+++ b/keyboards/percent/canoe_gen2/canoe_gen2.h
@@ -0,0 +1,54 @@
+/*
+Copyright 2020 Evy Dekkers
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+#include "quantum.h"
+
+// readability
+#define ___ KC_NO
+
+#define LAYOUT_all LAYOUT_65_iso_blocker_split_bs
+
+#define LAYOUT_65_ansi_blocker_split_bs( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k1d, k0d, k0e, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k2c, k1e, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2d, k2e, \
+ k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \
+ k40, k41, k42, k46, k49, k4a, k4c, k4d, k4e \
+) \
+{ \
+ {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e}, \
+ {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e}, \
+ {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e}, \
+ {k30, ___, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e}, \
+ {k40, k41, k42, ___, ___, ___, k46, ___, ___, k49, k4a, ___, k4c, k4d, k4e} \
+}
+
+#define LAYOUT_65_iso_blocker_split_bs( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k1d, k0d, k0e, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \
+ k40, k41, k42, k46, k49, k4a, k4c, k4d, k4e \
+) \
+{ \
+ {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e}, \
+ {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e}, \
+ {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e}, \
+ {k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e}, \
+ {k40, k41, k42, ___, ___, ___, k46, ___, ___, k49, k4a, ___, k4c, k4d, k4e} \
+}
diff --git a/keyboards/percent/canoe_gen2/config.h b/keyboards/percent/canoe_gen2/config.h
new file mode 100644
index 000000000..bac5ebb3f
--- /dev/null
+++ b/keyboards/percent/canoe_gen2/config.h
@@ -0,0 +1,67 @@
+/*
+Copyright 2020 Evy Dekkers
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x9C12
+#define PRODUCT_ID 0x89F0
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Percent Studio
+#define PRODUCT Canoe Gen2
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+// ROWS: Top to bottom, COLS: Left to right
+
+#define MATRIX_ROW_PINS {B1,B3,B2,F5,F4}
+#define MATRIX_COL_PINS {B0,D0,C6,B6,B5,B4,D7,D6,D4,D5,D3,D2,D1,F6,F7}
+#define UNUSED_PINS
+
+/* Uncomment if your encoder doesn't react to every turn or skips */
+//#define ENCODER_RESOLUTION 2
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
+
+/* 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
+
+/* Backlight configuration
+ */
+#define RGB_DI_PIN B7
+#define DRIVER_LED_TOTAL 77
+#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150
+
+#define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_CYCLE_LEFT_RIGHT
+#define RGB_MATRIX_STARTUP_HUE 0
+#define RGB_MATRIX_STARTUP_SAT 255
+#define RGB_MATRIX_STARTUP_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS
+#define RGB_MATRIX_STARTUP_SPD 127
+#define RGB_DISABLE_WHEN_USB_SUSPENDED true
diff --git a/keyboards/percent/canoe_gen2/info.json b/keyboards/percent/canoe_gen2/info.json
new file mode 100644
index 000000000..fc8ba3e0f
--- /dev/null
+++ b/keyboards/percent/canoe_gen2/info.json
@@ -0,0 +1,162 @@
+{
+ "keyboard_name": "Canoe Gen2",
+ "url": "",
+ "maintainer": "evyd13",
+ "width": 16,
+ "height": 5,
+ "layouts": {
+ "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_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}
+ ]
+ }
+ }
+} \ No newline at end of file
diff --git a/keyboards/percent/canoe_gen2/keymaps/default/keymap.c b/keyboards/percent/canoe_gen2/keymaps/default/keymap.c
new file mode 100644
index 000000000..bd30836d3
--- /dev/null
+++ b/keyboards/percent/canoe_gen2/keymaps/default/keymap.c
@@ -0,0 +1,36 @@
+/*
+Copyright 2020 Evy Dekkers
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[0] = LAYOUT_65_ansi_blocker_split_bs(
+ 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_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,
+ 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_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT),
+
+[1] = LAYOUT_65_ansi_blocker_split_bs(
+ KC_TILD, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______,
+ RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_TOG, RGB_MOD, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, _______,
+ _______, _______, _______, _______, RGB_MOD, _______, _______, _______, _______),
+
+};
diff --git a/keyboards/percent/canoe_gen2/keymaps/via/keymap.c b/keyboards/percent/canoe_gen2/keymaps/via/keymap.c
new file mode 100644
index 000000000..20fcddd5e
--- /dev/null
+++ b/keyboards/percent/canoe_gen2/keymaps/via/keymap.c
@@ -0,0 +1,50 @@
+/*
+Copyright 2020 Evy Dekkers
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[0] = LAYOUT_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_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_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_BSLS, 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_LEFT, KC_DOWN, KC_RGHT),
+
+[1] = LAYOUT_all(
+ KC_TILD, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______,
+ RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, RGB_TOG, RGB_MOD, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+[2] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+[3] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+};
diff --git a/keyboards/percent/canoe_gen2/keymaps/via/rules.mk b/keyboards/percent/canoe_gen2/keymaps/via/rules.mk
new file mode 100644
index 000000000..1e5b99807
--- /dev/null
+++ b/keyboards/percent/canoe_gen2/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/percent/canoe_gen2/readme.md b/keyboards/percent/canoe_gen2/readme.md
new file mode 100644
index 000000000..ae8bf7f18
--- /dev/null
+++ b/keyboards/percent/canoe_gen2/readme.md
@@ -0,0 +1,17 @@
+# Canoe Gen2
+
+Canoe Gen2 is a 65% from Percent with per key RGB and an adjustable foot angle. The PCB can be put into reset mode by pressing the button on the back.
+
+* Keyboard Maintainer: [Evyd13](https://github.com/evyd13)
+* Hardware Supported: (Black) Canoe Gen2 PCB
+* Hardware Availability: https://percent.studio/products/canoe-gen2
+
+Make example for this keyboard (after setting up your build environment):
+
+ make percent/canoe_gen2:default
+
+Flashing example for this keyboard:
+
+ make percent/canoe_gen2: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/percent/canoe_gen2/rgb_matrix_kb.inc b/keyboards/percent/canoe_gen2/rgb_matrix_kb.inc
new file mode 100644
index 000000000..7a49edd3b
--- /dev/null
+++ b/keyboards/percent/canoe_gen2/rgb_matrix_kb.inc
@@ -0,0 +1,65 @@
+/*
+Copyright 2020 Evy Dekkers
+
+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/>.
+*/
+
+RGB_MATRIX_EFFECT(indicator_gradient)
+RGB_MATRIX_EFFECT(indicator_cycle_all)
+RGB_MATRIX_EFFECT(indicator_static)
+
+#ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+
+static bool indicator_static(effect_params_t* params) {
+ RGB_MATRIX_USE_LIMITS(led_min, led_max);
+ for (uint8_t i = led_min ; i < 74; i++) {
+ rgb_matrix_set_color(i, 0x00, 0x00, 0x00);
+ }
+ for (uint8_t i = 74 ; i < led_max; i++) {
+ rgb_matrix_set_color(i, 0xff, 0xff, 0xff);
+ }
+ return led_max < DRIVER_LED_TOTAL;
+}
+
+bool effect_runner_indicator(effect_params_t* params, i_f effect_func) {
+ RGB_MATRIX_USE_LIMITS(led_min, led_max);
+
+ uint8_t time = scale16by8(g_rgb_timer, rgb_matrix_config.speed / 16);
+ for (uint8_t i = led_min; i < led_max; i++) {
+ if (i < 74) {
+ rgb_matrix_set_color(i, 0x00, 0x00, 0x00);
+ } else {
+ RGB_MATRIX_TEST_LED_FLAGS();
+ RGB rgb = hsv_to_rgb(effect_func(rgb_matrix_config.hsv, (i - 74), time));
+ rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
+ }
+ }
+ return led_max < DRIVER_LED_TOTAL;
+}
+
+static HSV indicator_gradient_math(HSV hsv, uint8_t i, uint8_t time) {
+ hsv.h = g_led_config.point[i].x - time;
+ return hsv;
+}
+
+bool indicator_gradient(effect_params_t* params) { return effect_runner_indicator(params, &indicator_gradient_math); }
+
+static HSV indicator_cycle_all_math(HSV hsv, uint8_t i, uint8_t time) {
+ hsv.h = time;
+ return hsv;
+}
+
+bool indicator_cycle_all(effect_params_t* params) { return effect_runner_indicator(params, &indicator_cycle_all_math); }
+
+#endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
diff --git a/keyboards/percent/canoe_gen2/rules.mk b/keyboards/percent/canoe_gen2/rules.mk
new file mode 100644
index 000000000..bde9a08fe
--- /dev/null
+++ b/keyboards/percent/canoe_gen2/rules.mk
@@ -0,0 +1,26 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
+RGB_MATRIX_ENABLE = WS2812
+
+LAYOUTS = 65_ansi_blocker_split_bs 65_iso_blocker_split_bs
+RGB_MATRIX_CUSTOM_KB = yes
diff --git a/keyboards/phoenix/rules.mk b/keyboards/phoenix/rules.mk
index 6c6c8446a..968c6548c 100644
--- a/keyboards/phoenix/rules.mk
+++ b/keyboards/phoenix/rules.mk
@@ -1,3 +1,9 @@
+# MCU name
+MCU = STM32F401
+
+# Address of the bootloader in system memory
+STM32_BOOTLOADER_ADDRESS = 0x1FFF0000
+
# Build Options
# change yes to no to disable
#
@@ -17,32 +23,4 @@ SPLIT_KEYBOARD = yes
SERIAL_DRIVER = usart
KEYBOARD_SHARED_EP = yes
-## chip/board settings
-# the next two should match the directories in
-# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
-MCU_FAMILY = STM32
-MCU_SERIES = STM32F4xx
-# linker script to use
-# it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
-# or <this_dir>/ld/
-MCU_LDSCRIPT = STM32F401xC
-# startup code to use
-# is should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f4xx
-# it should exist either in <chibios>/os/hal/boards/
-# or <this_dir>/boards
-BOARD = BLACKPILL_STM32_F401
-# Cortex version
-# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
-MCU = cortex-m4
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 7
-USE_FPU = yes
-# Address of the booloader in system memory
-STM32_BOOTLOADER_ADDRESS = 0x1FFF0000
-
-# Options to pass to dfu-util when flashing
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-DFU_SUFFIX_ARGS = -v 0483 -p df11
-
OPT_DEFS += -DSTM32_DMA_REQUIRED=TRUE
diff --git a/keyboards/planck/keymaps/dcompact/keymap.c b/keyboards/planck/keymaps/dcompact/keymap.c
index cb4cd3f5b..0b48f30ac 100644
--- a/keyboards/planck/keymaps/dcompact/keymap.c
+++ b/keyboards/planck/keymaps/dcompact/keymap.c
@@ -26,6 +26,20 @@
#define WKSP_U LALT(LCTL(KC_UP))
#define WKSP_R LALT(LCTL(KC_RGHT))
+#define AM_CYC A(S(KC_SPC))
+#define AM_SHR A(S(KC_COMM))
+#define AM_GRW A(S(KC_DOT))
+#define AM_REL A(S(KC_Z))
+#define AM_LFT A(S(KC_H))
+#define AM_RGH A(S(KC_L))
+#define AM_CW A(S(KC_K))
+#define AM_CCW A(S(KC_J))
+#define AM_TLL A(S(KC_1))
+#define AM_TLW A(S(KC_2))
+#define AM_BSP A(S(KC_3))
+#define AM_FUL A(S(KC_4))
+
+
extern keymap_config_t keymap_config;
enum planck_layers {
@@ -78,19 +92,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Lower
* ,-----------------------------------------------------------------------------------.
- * | | | | | | | | Home |PgDwn | PgUp | End | |
+ * | |AmCycl|AmShrk|AmGrow|AmReld| | | Home |PgDwn | PgUp | End | |
* |------+------+------+------+------+-------------+------+------+------+------+------|
- * | |PrScr | Menu | | | | | Left | Down | Up |Right | |
+ * | |AmLeft|AmCcw |AmCw |AmRght| | | Left | Down | Up |Right | |
* |------+------+------+------+------+------|------+------+------+------+------+------|
- * | |CapsLk|NumLck| Ins | | | |WkLeft|WkDown| WkUp |WkRigh| |
+ * | |AmTall|AmTllW|AmBsp |AmFull| | |WkLeft|WkDown| WkUp |WkRigh| |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | | | |Raise | | | | |
* `-----------------------------------------------------------------------------------'
*/
[_LOWER] = LAYOUT_planck_grid(
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_PGDN, KC_PGUP, KC_END, XXXXXXX,
- XXXXXXX, KC_PSCR, KC_MENU, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX,
- XXXXXXX, KC_CAPS, KC_LNUM, KC_INS, XXXXXXX, XXXXXXX, XXXXXXX, WKSP_L, WKSP_D, WKSP_U, WKSP_R, XXXXXXX,
+ XXXXXXX, AM_CYC, AM_SHR, AM_GRW, AM_REL, XXXXXXX, XXXXXXX, KC_HOME, KC_PGDN, KC_PGUP, KC_END, XXXXXXX,
+ XXXXXXX, AM_LFT, AM_CCW, AM_CW, AM_RGH, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX,
+ XXXXXXX, AM_TLL, AM_TLW, AM_BSP, AM_FUL, XXXXXXX, XXXXXXX, WKSP_L, WKSP_D, WKSP_U, WKSP_R, XXXXXXX,
_______, XXXXXXX, _______, _______, _______, _______, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
),
diff --git a/keyboards/preonic/keymaps/codecoffeecode/keymap.c b/keyboards/preonic/keymaps/codecoffeecode/keymap.c
new file mode 100644
index 000000000..9264927ec
--- /dev/null
+++ b/keyboards/preonic/keymaps/codecoffeecode/keymap.c
@@ -0,0 +1,81 @@
+/* Copyright 2020 codecoffeecode
+ * 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] = {
+
+/* Main Layer
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[0] = LAYOUT_preonic_1x2uC(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL,
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
+ KC_LCTL, KC_LCTL, KC_LALT, KC_LGUI, MO(1), KC_SPC, MO(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | | | | | | - | | | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[1] = LAYOUT_preonic_1x2uC(
+ KC_GRV, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | Reset| | | | | | - | = | [ | ] | \ |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[2] = LAYOUT_preonic_1x2uC(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ _______, RESET, DEBUG, _______, _______, _______, _______, _______, _______, _______, KC_F12, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+)};
diff --git a/keyboards/preonic/keymaps/codecoffeecode/readme.md b/keyboards/preonic/keymaps/codecoffeecode/readme.md
new file mode 100644
index 000000000..9ec7e9549
--- /dev/null
+++ b/keyboards/preonic/keymaps/codecoffeecode/readme.md
@@ -0,0 +1 @@
+# This layout is largely based on codecoffeecode's niu_mini layout \ No newline at end of file
diff --git a/keyboards/preonic/keymaps/default/keymap.c b/keyboards/preonic/keymaps/default/keymap.c
index d8bb2d5f7..7ee985ea1 100644
--- a/keyboards/preonic/keymaps/default/keymap.c
+++ b/keyboards/preonic/keymaps/default/keymap.c
@@ -50,12 +50,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
* `-----------------------------------------------------------------------------------'
*/
-[_QWERTY] = LAYOUT_preonic_grid( \
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, \
- KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, \
- BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+[_QWERTY] = LAYOUT_preonic_grid(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL,
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
+ BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
),
/* Colemak
@@ -71,12 +71,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
* `-----------------------------------------------------------------------------------'
*/
-[_COLEMAK] = LAYOUT_preonic_grid( \
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
- KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_DEL, \
- KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, \
- BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+[_COLEMAK] = LAYOUT_preonic_grid(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_DEL,
+ KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
+ BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
),
/* Dvorak
@@ -92,12 +92,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
* `-----------------------------------------------------------------------------------'
*/
-[_DVORAK] = LAYOUT_preonic_grid( \
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
- KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_DEL, \
- KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \
- KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT, \
- BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+[_DVORAK] = LAYOUT_preonic_grid(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_DEL,
+ KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH,
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT,
+ BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
),
/* Lower
@@ -113,12 +113,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------'
*/
-[_LOWER] = LAYOUT_preonic_grid( \
- KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \
- KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, \
- KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
- _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),KC_HOME, KC_END, _______, \
- _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+[_LOWER] = LAYOUT_preonic_grid(
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),KC_HOME, KC_END, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
),
/* Raise
@@ -134,12 +134,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------'
*/
-[_RAISE] = LAYOUT_preonic_grid( \
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \
- KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \
- _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______, \
- _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+[_RAISE] = LAYOUT_preonic_grid(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
),
/* Adjust (Lower + Raise)
@@ -155,12 +155,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------'
*/
-[_ADJUST] = LAYOUT_preonic_grid( \
- KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \
- _______, RESET, DEBUG, _______, _______, _______, _______, TERM_ON, TERM_OFF,_______, _______, KC_DEL, \
- _______, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \
- _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______, \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+[_ADJUST] = LAYOUT_preonic_grid(
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ _______, RESET, DEBUG, _______, _______, _______, _______, TERM_ON, TERM_OFF,_______, _______, KC_DEL,
+ _______, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______,
+ _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
)
diff --git a/keyboards/preonic/keymaps/drasbeck/config.h b/keyboards/preonic/keymaps/drasbeck/config.h
new file mode 100644
index 000000000..042096f16
--- /dev/null
+++ b/keyboards/preonic/keymaps/drasbeck/config.h
@@ -0,0 +1,49 @@
+/*
+Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) 2020 Max Drasbeck
+ *
+ * You are free to:
+ *
+ * Share — copy and redistribute the material in any medium or format
+ * Adapt — remix, transform, and build upon the material
+ * for any purpose, even commercially.
+ *
+ * The licensor cannot revoke these freedoms as long as you follow the license terms.
+*/
+
+#pragma once
+
+#ifdef AUDIO_ENABLE
+ #define STARTUP_SONG SONG(PREONIC_SOUND)
+ // #define STARTUP_SONG SONG(NO_SOUND)
+
+ #define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND) }//,
+ // SONG(COLEMAK_SOUND),
+ // SONG(DVORAK_SOUND)
+ //}
+#endif
+
+#define MUSIC_MASK (keycode != KC_NO)
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+
+#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 2
diff --git a/keyboards/preonic/keymaps/drasbeck/keymap.c b/keyboards/preonic/keymaps/drasbeck/keymap.c
new file mode 100644
index 000000000..d2d30ffa1
--- /dev/null
+++ b/keyboards/preonic/keymaps/drasbeck/keymap.c
@@ -0,0 +1,240 @@
+/* Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) 2020 Max Drasbeck
+ *
+ * You are free to:
+ *
+ * Share — copy and redistribute the material in any medium or format
+ * Adapt — remix, transform, and build upon the material
+ * for any purpose, even commercially.
+ *
+ * The licensor cannot revoke these freedoms as long as you follow the license terms.
+ */
+
+#include QMK_KEYBOARD_H
+#include "muse.h"
+
+enum preonic_layers {
+ _QWERTY,
+ _COLEMAK,
+ _DVORAK,
+ _LOWER,
+ _RAISE,
+ _ADJUST
+};
+
+enum preonic_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ DVORAK,
+ LOWER,
+ RAISE,
+ BACKLIT
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[_QWERTY] = LAYOUT_preonic_grid(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_SFTENT,
+ KC_LCTL, KC_NO, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_NUBS, KC_LCTL, KC_NO, KC_NO
+),
+
+[_COLEMAK] = LAYOUT_preonic_grid(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_DEL,
+ KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
+ BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+[_DVORAK] = LAYOUT_preonic_grid(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_DEL,
+ KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH,
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT,
+ BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+[_LOWER] = LAYOUT_preonic_grid(
+ 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_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO , KC_PGUP, KC_MINS, KC_EQL, KC_RBRC,
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_NO, KC_HOME, KC_PGDN, KC_END, KC_NO, KC_NUHS,
+ KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_NO, KC_NO, KC_NO, KC_RO, KC_ENT,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MPLY
+),
+
+[_RAISE] = LAYOUT_preonic_grid(
+ KC_TRNS, RALT(KC_1), RALT(KC_2), RALT(KC_3), RALT(KC_4), RALT(KC_5), RALT(KC_6), RALT(KC_7), RALT(KC_8), RALT(KC_9), RALT(KC_0), KC_DEL,
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_UP, KC_MINS, KC_EQL, KC_RBRC,
+ KC_ESC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NUHS,
+ KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_VOLD, KC_VOLU, KC_MUTE, KC_RO, KC_SFTENT,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_RALT, KC_TRNS, KC_TRNS, KC_TRNS, RALT(KC_NUBS), KC_TRNS, KC_VOLD, KC_VOLU, KC_MPLY
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | Reset| | | | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | |Aud on|AudOff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | |Voice-|Voice+|Mus on|MusOff|MidiOn|MidOff| | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_preonic_grid(
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ _______, RESET, DEBUG, _______, _______, _______, _______, TERM_ON, TERM_OFF,_______, _______, KC_DEL,
+ _______, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______,
+ _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+)
+
+
+};
+
+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;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_COLEMAK);
+ }
+ return false;
+ break;
+ case DVORAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_DVORAK);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case BACKLIT:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ #ifdef __AVR__
+ writePinLow(E6);
+ #endif
+ } else {
+ unregister_code(KC_RSFT);
+ #ifdef __AVR__
+ writePinHigh(E6);
+ #endif
+ }
+ return false;
+ break;
+ }
+ return true;
+};
+
+bool muse_mode = false;
+uint8_t last_muse_note = 0;
+uint16_t muse_counter = 0;
+uint8_t muse_offset = 70;
+uint16_t muse_tempo = 50;
+
+void encoder_update_user(uint8_t index, bool clockwise) {
+ if (muse_mode) {
+ if (IS_LAYER_ON(_RAISE)) {
+ if (clockwise) {
+ muse_offset++;
+ } else {
+ muse_offset--;
+ }
+ } else {
+ if (clockwise) {
+ muse_tempo+=1;
+ } else {
+ muse_tempo-=1;
+ }
+ }
+ } else {
+ if (clockwise) {
+ register_code(KC_PGDN);
+ unregister_code(KC_PGDN);
+ } else {
+ register_code(KC_PGUP);
+ unregister_code(KC_PGUP);
+ }
+ }
+}
+
+void dip_switch_update_user(uint8_t index, bool active) {
+ switch (index) {
+ case 0:
+ if (active) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ break;
+ case 1:
+ if (active) {
+ muse_mode = true;
+ } else {
+ muse_mode = false;
+ }
+ }
+}
+
+
+void matrix_scan_user(void) {
+#ifdef AUDIO_ENABLE
+ if (muse_mode) {
+ if (muse_counter == 0) {
+ uint8_t muse_note = muse_offset + SCALE[muse_clock_pulse()];
+ if (muse_note != last_muse_note) {
+ stop_note(compute_freq_for_midi_note(last_muse_note));
+ play_note(compute_freq_for_midi_note(muse_note), 0xF);
+ last_muse_note = muse_note;
+ }
+ }
+ muse_counter = (muse_counter + 1) % muse_tempo;
+ } else {
+ if (muse_counter) {
+ stop_all_notes();
+ muse_counter = 0;
+ }
+ }
+#endif
+}
+
+bool music_mask_user(uint16_t keycode) {
+ switch (keycode) {
+ case RAISE:
+ case LOWER:
+ return false;
+ default:
+ return true;
+ }
+}
diff --git a/keyboards/preonic/keymaps/drasbeck/readme.md b/keyboards/preonic/keymaps/drasbeck/readme.md
new file mode 100644
index 000000000..4975ae8b7
--- /dev/null
+++ b/keyboards/preonic/keymaps/drasbeck/readme.md
@@ -0,0 +1,17 @@
+# drasbeck's Preonic keymap
+Danish layout with Danish characters on default layer.
+
+```
+Default
+,-----------------------------------------------------------------------------------.
+|KC_GRV| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | BSPC |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| TAB | q | w | e | r | t | y | u | i | o | p | å |
+|------+------+------+------+------+-------------+------+------+------+------+------|
+| ESC | a | s | d | f | g | h | j | k | l | æ | ø |
+|------+------+------+------+------+------|------+------+------+------+------+------|
+|L SHFT| z | x | c | v | b | n | m | , | . | - |SFTENT|
+|------+------+------+------+------+------+------+------+------+------+------+------|
+|L CTRL| | L ALT| L GUI| LOWER| SPACE | RAISE| NUBS | L CTL| | |
+`-----------------------------------------------------------------------------------'
+```
diff --git a/keyboards/preonic/keymaps/drasbeck/rules.mk b/keyboards/preonic/keymaps/drasbeck/rules.mk
new file mode 100644
index 000000000..dcf16bef3
--- /dev/null
+++ b/keyboards/preonic/keymaps/drasbeck/rules.mk
@@ -0,0 +1 @@
+SRC += muse.c
diff --git a/keyboards/preonic/keymaps/pezhore/config.h b/keyboards/preonic/keymaps/pezhore/config.h
new file mode 100644
index 000000000..8b541544b
--- /dev/null
+++ b/keyboards/preonic/keymaps/pezhore/config.h
@@ -0,0 +1,53 @@
+/* Copyright 2015-2017 Jack Humbert
+ *
+ * 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
+#define UNICODE_SELECTED_MODES UC_WINC, UC_LNX, UC_MAC
+#ifdef AUDIO_ENABLE
+ #define STARTUP_SONG SONG(PREONIC_SOUND)
+ // #define STARTUP_SONG SONG(NO_SOUND)
+
+ #define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
+ SONG(COLEMAK_SOUND), \
+ SONG(DVORAK_SOUND) \
+ }
+#endif
+
+#define MUSIC_MASK (keycode != KC_NO)
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+
+#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 2
diff --git a/keyboards/preonic/keymaps/pezhore/keymap.c b/keyboards/preonic/keymaps/pezhore/keymap.c
new file mode 100644
index 000000000..39b045d6d
--- /dev/null
+++ b/keyboards/preonic/keymaps/pezhore/keymap.c
@@ -0,0 +1,307 @@
+/* Copyright 2015-2017 Jack Humbert
+ *
+ * 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 "muse.h"
+
+enum preonic_layers {
+ _QWERTY,
+ _FN,
+ _NUMPAD,
+ _LOWER,
+ _RAISE,
+ _ADJUST
+};
+
+enum preonic_keycodes {
+ LOWER = SAFE_RANGE,
+ RAISE,
+ SHRUG, // ¯\_(ツ)_/¯
+ TFLIP, // (╯°□°)╯︵ ┻━┻
+ POOP, // 💩
+ DPOINT, // (ಠ_ಠ)
+ STRUT // ᕕ( ᐛ )ᕗ
+};
+
+#define TG_NUMP TG(_NUMPAD)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | FN | Ctrl | GUI | ALT |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = LAYOUT_preonic_grid(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL,
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
+ MO(_FN), KC_LCTL, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+/* FN
+ * ,-----------------------------------------------------------------------------------.
+ * |RGBTgl|Brigt-|Brigt+| | | | | | | | | POOP |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | RGB+ | Hue- | Hue+ | | | | | | | |PrtScr|UC_MOD|
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | RGB- | Sat- | Sat+ | | | | | | | | |UC_Wnc|
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | |Effct-|Effct+| | | | | | | | |UC_Lin|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | |SHRUG |TFLIP |DPOINT|STRUT | | | | |TgNmpd| |UC_Mac|
+ * `-----------------------------------------------------------------------------------'
+ */
+[_FN] = LAYOUT_preonic_grid(
+ RGB_TOG, RGB_VAD, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, POOP,
+ RGB_MOD, RGB_HUD, RGB_HUI, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, UC_MOD,
+ RGB_RMOD, RGB_SAD, RGB_SAI, _______, _______, _______, _______, _______, _______, _______, _______, UC_M_WC,
+ _______, RGB_SPD, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, UC_M_LN,
+ _______, SHRUG, TFLIP, DPOINT, STRUT, _______, _______, _______, _______, TG_NUMP, _______, UC_M_MA
+),
+
+/* Numpad
+ * ,-----------------------------------------------------------------------------------.
+ * | | | | | | |NumLk | 7 | 8 | 9 | / | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | | | | | | | 4 | 5 | 6 | * | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | | | | | | | 1 | 2 | 3 | - | / |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | 0 | . | = | + |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_NUMPAD] = LAYOUT_preonic_grid(
+ _______, _______, _______, _______, _______, _______, KC_NLCK, KC_P7, KC_P8, KC_P9, KC_PSLS, KC_BSPC,
+ KC_ESC, _______, _______, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6, KC_PAST, KC_DEL,
+ KC_TAB, _______, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, KC_PMNS, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_P0, KC_PDOT, KC_PEQL, KC_PPLS, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | | | | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | |Raise | Home | PgDn | PgUp | End |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_preonic_grid(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BSPC,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | | | | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 | | Prev | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | |Lower | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_preonic_grid(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BSPC,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_MPRV, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+),
+
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | Reset| | | | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | |Aud on|AudOff|AGnorm|AGswap| | | | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | |Voice-|Voice+|Mus on|MusOff|MidiOn|MidOff| | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_preonic_grid(
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ _______, RESET, DEBUG, _______, _______, _______, _______, TERM_ON, TERM_OFF, _______, _______, KC_DEL,
+ _______, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, _______, _______, _______, _______, _______,
+ _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+)
+
+
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case SHRUG:
+ if (record->event.pressed) {
+ send_unicode_string("¯\\_(ツ)_/¯");
+ }
+ return false;
+ break;
+ case TFLIP:
+ if (record->event.pressed) {
+ send_unicode_string("(╯°□°)╯︵ ┻━┻");
+ }
+ return false;
+ break;
+ case POOP:
+ if (record->event.pressed) {
+ send_unicode_string("💩");
+ }
+ return false;
+ break;
+ case DPOINT:
+ if (record->event.pressed) {
+ send_unicode_string("(ಠ_ಠ)");
+ }
+ return false;
+ break;
+ case STRUT:
+ if (record->event.pressed) {
+ send_unicode_string("ᕕ( ᐛ )ᕗ");
+ }
+ return false;
+ break;
+ }
+ return true;
+};
+
+bool muse_mode = false;
+uint8_t last_muse_note = 0;
+uint16_t muse_counter = 0;
+uint8_t muse_offset = 70;
+uint16_t muse_tempo = 50;
+
+void encoder_update_user(uint8_t index, bool clockwise) {
+ if (muse_mode) {
+ if (IS_LAYER_ON(_RAISE)) {
+ if (clockwise) {
+ muse_offset++;
+ } else {
+ muse_offset--;
+ }
+ } else {
+ if (clockwise) {
+ muse_tempo+=1;
+ } else {
+ muse_tempo-=1;
+ }
+ }
+ } else {
+ if (clockwise) {
+ tap_code(KC_PGDN);
+ } else {
+ tap_code(KC_PGUP);
+ }
+ }
+}
+
+void dip_switch_update_user(uint8_t index, bool active) {
+ switch (index) {
+ case 0:
+ if (active) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ break;
+ case 1:
+ if (active) {
+ muse_mode = true;
+ } else {
+ muse_mode = false;
+ }
+ }
+}
+
+
+void matrix_scan_user(void) {
+#ifdef AUDIO_ENABLE
+ if (muse_mode) {
+ if (muse_counter == 0) {
+ uint8_t muse_note = muse_offset + SCALE[muse_clock_pulse()];
+ if (muse_note != last_muse_note) {
+ stop_note(compute_freq_for_midi_note(last_muse_note));
+ play_note(compute_freq_for_midi_note(muse_note), 0xF);
+ last_muse_note = muse_note;
+ }
+ }
+ muse_counter = (muse_counter + 1) % muse_tempo;
+ } else {
+ if (muse_counter) {
+ stop_all_notes();
+ muse_counter = 0;
+ }
+ }
+#endif
+}
+
+bool music_mask_user(uint16_t keycode) {
+ switch (keycode) {
+ case RAISE:
+ case LOWER:
+ return false;
+ default:
+ return true;
+ }
+}
diff --git a/keyboards/preonic/keymaps/pezhore/readme.md b/keyboards/preonic/keymaps/pezhore/readme.md
new file mode 100644
index 000000000..e911968dd
--- /dev/null
+++ b/keyboards/preonic/keymaps/pezhore/readme.md
@@ -0,0 +1 @@
+# The default Preonic layout - largely based on the Planck's \ No newline at end of file
diff --git a/keyboards/preonic/keymaps/pezhore/rules.mk b/keyboards/preonic/keymaps/pezhore/rules.mk
new file mode 100644
index 000000000..23198218b
--- /dev/null
+++ b/keyboards/preonic/keymaps/pezhore/rules.mk
@@ -0,0 +1,3 @@
+SRC += muse.c
+#UNICODEMAP_ENABLE = yes
+UNICODE_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/katana60/config.h b/keyboards/rominronin/katana60/rev1/config.h
index 3385ddb9c..fe10d1a53 100644
--- a/keyboards/katana60/config.h
+++ b/keyboards/rominronin/katana60/rev1/config.h
@@ -15,18 +15,16 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef CONFIG_H
-#define CONFIG_H
+#pragma once
#include "config_common.h"
/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6060
+#define VENDOR_ID 0x7272 // "rr" - rominronin
+#define PRODUCT_ID 0x0C2C
#define DEVICE_VER 0x0001
#define MANUFACTURER RominRonin CandyKeys
-#define PRODUCT Katana60
-#define DESCRIPTION QMK keyboard firmware for Katana60
+#define PRODUCT Katana60 rev1
/* key matrix size */
#define MATRIX_ROWS 5
@@ -49,18 +47,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* COL2ROW, ROW2COL*/
#define DIODE_DIRECTION ROW2COL
-// #define BACKLIGHT_PIN B7
-// #define BACKLIGHT_BREATHING
-// #define BACKLIGHT_LEVELS 3
-
/* 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
-/* number of backlight levels */
-
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
@@ -92,56 +84,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
//#define FORCE_NKRO
-/*
- * Magic Key Options
- *
- * Magic keys are hotkey commands that allow control over firmware functions of
- * the keyboard. They are best used in combination with the HID Listen program,
- * found here: https://www.pjrc.com/teensy/hid_listen.html
- *
- * The options below allow the magic key functionality to be changed. This is
- * useful if your keyboard/keypad is missing keys and you want magic key support.
- *
- */
-
#define TAPPING_TERM 200
-/* control how magic key switches layers */
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
-
-/* override magic key keymap */
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
-//#define MAGIC_KEY_HELP1 H
-//#define MAGIC_KEY_HELP2 SLASH
-//#define MAGIC_KEY_DEBUG D
-//#define MAGIC_KEY_DEBUG_MATRIX X
-//#define MAGIC_KEY_DEBUG_KBD K
-//#define MAGIC_KEY_DEBUG_MOUSE M
-//#define MAGIC_KEY_VERSION V
-//#define MAGIC_KEY_STATUS S
-//#define MAGIC_KEY_CONSOLE C
-//#define MAGIC_KEY_LAYER0_ALT1 ESC
-//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
-//#define MAGIC_KEY_LAYER0 0
-//#define MAGIC_KEY_LAYER1 1
-//#define MAGIC_KEY_LAYER2 2
-//#define MAGIC_KEY_LAYER3 3
-//#define MAGIC_KEY_LAYER4 4
-//#define MAGIC_KEY_LAYER5 5
-//#define MAGIC_KEY_LAYER6 6
-//#define MAGIC_KEY_LAYER7 7
-//#define MAGIC_KEY_LAYER8 8
-//#define MAGIC_KEY_LAYER9 9
-//#define MAGIC_KEY_BOOTLOADER PAUSE
-//#define MAGIC_KEY_LOCK CAPS
-//#define MAGIC_KEY_EEPROM E
-//#define MAGIC_KEY_NKRO N
-//#define MAGIC_KEY_SLEEP_LED Z
-
/*
* Feature disable options
* These options are also useful to firmware size reduction.
@@ -159,28 +103,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
-
-/*
- * MIDI options
- */
-
-/* Prevent use of disabled MIDI features in the keymap */
-//#define MIDI_ENABLE_STRICT 1
-
-/* enable basic MIDI features:
- - MIDI notes can be sent when in Music mode is on
-*/
-//#define MIDI_BASIC
-
-/* enable advanced MIDI features:
- - MIDI notes can be added to the keymap
- - Octave shift and transpose
- - Virtual sustain, portamento, and modulation wheel
- - etc.
-*/
-//#define MIDI_ADVANCED
-
-/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
-//#define MIDI_TONE_KEYCODE_OCTAVES 1
-
-#endif
diff --git a/keyboards/rominronin/katana60/rev1/info.json b/keyboards/rominronin/katana60/rev1/info.json
new file mode 100644
index 000000000..fa0aa93d6
--- /dev/null
+++ b/keyboards/rominronin/katana60/rev1/info.json
@@ -0,0 +1,83 @@
+{
+ "keyboard_name": "Katana60 rev1",
+ "url": "",
+ "maintainer": "rominronin",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"k40", "x":0, "y":0},
+ {"label":"k41", "x":1, "y":0},
+ {"label":"k42", "x":2, "y":0},
+ {"label":"k43", "x":3, "y":0},
+ {"label":"k44", "x":4, "y":0},
+ {"label":"k45", "x":5, "y":0},
+ {"label":"k46", "x":6, "y":0},
+ {"label":"k47", "x":7, "y":0},
+ {"label":"k48", "x":8, "y":0},
+ {"label":"k49", "x":9, "y":0},
+ {"label":"k4a", "x":10, "y":0},
+ {"label":"k4b", "x":11, "y":0},
+ {"label":"k4c", "x":12, "y":0},
+ {"label":"k4d", "x":13, "y":0},
+ {"label":"k4e", "x":14, "y":0},
+ {"label":"k30", "x":0, "y":1, "w":1.5},
+ {"label":"k31", "x":1.5, "y":1},
+ {"label":"k32", "x":2.5, "y":1},
+ {"label":"k33", "x":3.5, "y":1},
+ {"label":"k34", "x":4.5, "y":1},
+ {"label":"k35", "x":5.5, "y":1},
+ {"label":"k36", "x":6.5, "y":1},
+ {"label":"k37", "x":7.5, "y":1},
+ {"label":"k38", "x":8.5, "y":1},
+ {"label":"k39", "x":9.5, "y":1},
+ {"label":"k3a", "x":10.5, "y":1},
+ {"label":"k3b", "x":11.5, "y":1},
+ {"label":"k3c", "x":12.5, "y":1},
+ {"label":"k3d", "x":13.5, "y":1, "w":1.5},
+ {"label":"k20", "x":0, "y":2, "w":1.25},
+ {"label":"k21", "x":1.25, "y":2},
+ {"label":"k22", "x":2.25, "y":2},
+ {"label":"k23", "x":3.25, "y":2},
+ {"label":"k24", "x":4.25, "y":2},
+ {"label":"k25", "x":5.25, "y":2},
+ {"label":"k26", "x":6.25, "y":2},
+ {"label":"k27", "x":7.75, "y":2},
+ {"label":"k28", "x":8.75, "y":2},
+ {"label":"k29", "x":9.75, "y":2},
+ {"label":"k2a", "x":10.75, "y":2},
+ {"label":"k2b", "x":11.75, "y":2},
+ {"label":"k2c", "x":12.75, "y":2},
+ {"label":"k2d", "x":13.75, "y":2, "w":1.25},
+ {"label":"k10", "x":0, "y":3},
+ {"label":"k11", "x":1, "y":3},
+ {"label":"k12", "x":2, "y":3},
+ {"label":"k13", "x":3, "y":3},
+ {"label":"k14", "x":4, "y":3},
+ {"label":"k15", "x":5, "y":3},
+ {"label":"k16", "x":6, "y":3},
+ {"label":"k17", "x":7, "y":3},
+ {"label":"k18", "x":8, "y":3},
+ {"label":"k19", "x":9, "y":3},
+ {"label":"k1a", "x":10, "y":3},
+ {"label":"k1b", "x":11, "y":3},
+ {"label":"k1c", "x":12, "y":3},
+ {"label":"k1d", "x":13, "y":3},
+ {"label":"k1e", "x":14, "y":3},
+ {"label":"k00", "x":0, "y":4},
+ {"label":"k01", "x":1, "y":4, "w":1.25},
+ {"label":"k02", "x":2.25, "y":4, "w":1.25},
+ {"label":"k03", "x":3.5, "y":4, "w":1.25},
+ {"label":"k04", "x":4.75, "y":4, "w":2.25},
+ {"label":"k05", "x":7, "y":4},
+ {"label":"k06", "x":8, "y":4, "w":2},
+ {"label":"k09", "x":10, "y":4},
+ {"label":"k0a", "x":11, "y":4},
+ {"label":"k0b", "x":12, "y":4},
+ {"label":"k0c", "x":13, "y":4},
+ {"label":"k0d", "x":14, "y":4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/katana60/keymaps/colemak/config.h b/keyboards/rominronin/katana60/rev1/keymaps/colemak/config.h
index 08c51f6cb..08c51f6cb 100644
--- a/keyboards/katana60/keymaps/colemak/config.h
+++ b/keyboards/rominronin/katana60/rev1/keymaps/colemak/config.h
diff --git a/keyboards/katana60/keymaps/colemak/keymap.c b/keyboards/rominronin/katana60/rev1/keymaps/colemak/keymap.c
index b0ed04185..91128bd5c 100644
--- a/keyboards/katana60/keymaps/colemak/keymap.c
+++ b/keyboards/rominronin/katana60/rev1/keymaps/colemak/keymap.c
@@ -34,7 +34,7 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[BASE] = LAYOUT( /* Base */
- KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, DF(1), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_PLUS,
+ KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, DF(1), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL,
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_LBRC, KC_RBRC, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,
MO(3), KC_A, KC_R, KC_S, KC_T, KC_D, KC_HOME, KC_PGUP, KC_H, KC_N, KC_E, KC_I, KC_O, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_END, KC_DEL, KC_PGDN, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
diff --git a/keyboards/katana60/keymaps/colemak/readme.md b/keyboards/rominronin/katana60/rev1/keymaps/colemak/readme.md
index 4446bffca..4446bffca 100644
--- a/keyboards/katana60/keymaps/colemak/readme.md
+++ b/keyboards/rominronin/katana60/rev1/keymaps/colemak/readme.md
diff --git a/keyboards/katana60/keymaps/default/config.h b/keyboards/rominronin/katana60/rev1/keymaps/default/config.h
index c4bea7eb0..c4bea7eb0 100644
--- a/keyboards/katana60/keymaps/default/config.h
+++ b/keyboards/rominronin/katana60/rev1/keymaps/default/config.h
diff --git a/keyboards/katana60/keymaps/default/keymap.c b/keyboards/rominronin/katana60/rev1/keymaps/default/keymap.c
index 989c7c16b..989c7c16b 100644
--- a/keyboards/katana60/keymaps/default/keymap.c
+++ b/keyboards/rominronin/katana60/rev1/keymaps/default/keymap.c
diff --git a/keyboards/katana60/keymaps/default/readme.md b/keyboards/rominronin/katana60/rev1/keymaps/default/readme.md
index a75a38586..a75a38586 100644
--- a/keyboards/katana60/keymaps/default/readme.md
+++ b/keyboards/rominronin/katana60/rev1/keymaps/default/readme.md
diff --git a/keyboards/katana60/keymaps/josefadamcik/config.h b/keyboards/rominronin/katana60/rev1/keymaps/josefadamcik/config.h
index 0054f43e6..0054f43e6 100644
--- a/keyboards/katana60/keymaps/josefadamcik/config.h
+++ b/keyboards/rominronin/katana60/rev1/keymaps/josefadamcik/config.h
diff --git a/keyboards/katana60/keymaps/josefadamcik/keymap.c b/keyboards/rominronin/katana60/rev1/keymaps/josefadamcik/keymap.c
index 8556ee424..8556ee424 100644
--- a/keyboards/katana60/keymaps/josefadamcik/keymap.c
+++ b/keyboards/rominronin/katana60/rev1/keymaps/josefadamcik/keymap.c
diff --git a/keyboards/katana60/keymaps/josefadamcik/readme.md b/keyboards/rominronin/katana60/rev1/keymaps/josefadamcik/readme.md
index 5d72b1def..5d72b1def 100644
--- a/keyboards/katana60/keymaps/josefadamcik/readme.md
+++ b/keyboards/rominronin/katana60/rev1/keymaps/josefadamcik/readme.md
diff --git a/keyboards/katana60/keymaps/msiu/config.h b/keyboards/rominronin/katana60/rev1/keymaps/msiu/config.h
index b57cc482e..b57cc482e 100644
--- a/keyboards/katana60/keymaps/msiu/config.h
+++ b/keyboards/rominronin/katana60/rev1/keymaps/msiu/config.h
diff --git a/keyboards/katana60/keymaps/msiu/keymap.c b/keyboards/rominronin/katana60/rev1/keymaps/msiu/keymap.c
index 72b795baa..72b795baa 100644
--- a/keyboards/katana60/keymaps/msiu/keymap.c
+++ b/keyboards/rominronin/katana60/rev1/keymaps/msiu/keymap.c
diff --git a/keyboards/katana60/keymaps/msiu/readme.md b/keyboards/rominronin/katana60/rev1/keymaps/msiu/readme.md
index e4f0ebdb6..e4f0ebdb6 100644
--- a/keyboards/katana60/keymaps/msiu/readme.md
+++ b/keyboards/rominronin/katana60/rev1/keymaps/msiu/readme.md
diff --git a/keyboards/katana60/keymaps/rominronin/config.h b/keyboards/rominronin/katana60/rev1/keymaps/rominronin/config.h
index 08c51f6cb..08c51f6cb 100644
--- a/keyboards/katana60/keymaps/rominronin/config.h
+++ b/keyboards/rominronin/katana60/rev1/keymaps/rominronin/config.h
diff --git a/keyboards/katana60/keymaps/rominronin/keymap.c b/keyboards/rominronin/katana60/rev1/keymaps/rominronin/keymap.c
index 754b552b2..5666dba9d 100644
--- a/keyboards/katana60/keymaps/rominronin/keymap.c
+++ b/keyboards/rominronin/katana60/rev1/keymaps/rominronin/keymap.c
@@ -34,7 +34,7 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[BASE] = LAYOUT( /* Base */
- KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, DF(1), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_PLUS,
+ KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, DF(1), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL,
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_LBRC, KC_RBRC, KC_J, KC_L, KC_U, KC_Y, KC_QUOT, KC_BSPC,
MO(3), KC_A, KC_R, KC_S, KC_T, KC_G, KC_HOME, KC_PGUP, KC_M, KC_N, KC_E, KC_I, KC_O, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_D, KC_V, KC_END, KC_DEL, KC_PGDN, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
@@ -64,6 +64,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
+
void matrix_init_user(void) {
}
diff --git a/keyboards/katana60/keymaps/rominronin/readme.md b/keyboards/rominronin/katana60/rev1/keymaps/rominronin/readme.md
index 9647426f7..9647426f7 100644
--- a/keyboards/katana60/keymaps/rominronin/readme.md
+++ b/keyboards/rominronin/katana60/rev1/keymaps/rominronin/readme.md
diff --git a/keyboards/rominronin/katana60/rev1/readme.md b/keyboards/rominronin/katana60/rev1/readme.md
new file mode 100644
index 000000000..d41548b18
--- /dev/null
+++ b/keyboards/rominronin/katana60/rev1/readme.md
@@ -0,0 +1,17 @@
+# Katana60 rev1
+
+![Katana60 rev1](https://i.imgur.com/xVkODOul.jpg)
+
+A 60% keyboard with a symmetrical staggered layout, sold by CandyKeys.com.
+
+Keyboard Maintainer: [Baris Tosun](https://github.com/rominronin)
+Hardware Supported: Katana60 PCB rev1
+Hardware Availability: the rev1 is no longer available, the rev2 can be found at [candykeys.com](https://candykeys.com/product/katana60-pcb-V2)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make rominronin/katana60/rev1:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+There is also ongoing discussion for the extend layer, at the [Colemak Forum](https://forum.colemak.com/topic/2327-developing-an-extend-layer-for-the-katana60/)
diff --git a/keyboards/rominronin/katana60/rev1/rev1.c b/keyboards/rominronin/katana60/rev1/rev1.c
new file mode 100644
index 000000000..e57ae2bbc
--- /dev/null
+++ b/keyboards/rominronin/katana60/rev1/rev1.c
@@ -0,0 +1,16 @@
+/* Copyright 2017 Baris Tosun
+ *
+ * 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 "rev1.h"
diff --git a/keyboards/katana60/katana60.h b/keyboards/rominronin/katana60/rev1/rev1.h
index 904ba5621..52926cc35 100644
--- a/keyboards/katana60/katana60.h
+++ b/keyboards/rominronin/katana60/rev1/rev1.h
@@ -13,8 +13,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef KATANA60_H
-#define KATANA60_H
+#pragma once
#include "quantum.h"
@@ -36,5 +35,3 @@
{ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, KC_NO }, \
{ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c, k4d, k4e }, \
}
-
-#endif
diff --git a/keyboards/rominronin/katana60/rev1/rules.mk b/keyboards/rominronin/katana60/rev1/rules.mk
new file mode 100644
index 000000000..7b69908b1
--- /dev/null
+++ b/keyboards/rominronin/katana60/rev1/rules.mk
@@ -0,0 +1,22 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
+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
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/rominronin/katana60/rev2/config.h b/keyboards/rominronin/katana60/rev2/config.h
new file mode 100644
index 000000000..7eff68a7f
--- /dev/null
+++ b/keyboards/rominronin/katana60/rev2/config.h
@@ -0,0 +1,105 @@
+/*
+Copyright 2019 rominronin
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x7272 // "rr" - rominronin
+#define PRODUCT_ID 0xF03B
+#define DEVICE_VER 0x0001
+#define MANUFACTURER RominRonin CandyKeys
+#define PRODUCT Katana60 rev2
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+/*
+ * 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 { B0, E6, D5, B4, B5 }
+#define MATRIX_COL_PINS { F0, F1, F4, F5, F6, F7, C7, C6, B6, D6, D4, D3, D2, D1, D0 }
+#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 userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+#define TAPPING_TERM 200
+
+/*
+ * 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/rominronin/katana60/rev2/info.json b/keyboards/rominronin/katana60/rev2/info.json
new file mode 100644
index 000000000..bc31ae649
--- /dev/null
+++ b/keyboards/rominronin/katana60/rev2/info.json
@@ -0,0 +1,579 @@
+{
+ "keyboard_name": "Katana60 rev2",
+ "url": "https://candykeys.com/product/katana60-pcb-V2",
+ "maintainer": "rominronin",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_7u_a": {
+ "layout": [
+ {"label":"k00","x":0,"y":0},
+ {"label":"k01","x":1,"y":0},
+ {"label":"k02","x":2,"y":0},
+ {"label":"k03","x":3,"y":0},
+ {"label":"k04","x":4,"y":0},
+ {"label":"k05","x":5,"y":0},
+ {"label":"k06","x":6,"y":0},
+ {"label":"k07","x":7,"y":0},
+ {"label":"k08","x":8,"y":0},
+ {"label":"k09","x":9,"y":0},
+ {"label":"k0a","x":10,"y":0},
+ {"label":"k0b","x":11,"y":0},
+ {"label":"k0c","x":12,"y":0},
+ {"label":"k0d","x":13,"y":0},
+ {"label":"k0e","x":14,"y":0},
+ {"label":"k10","x":0,"y":1,"w":1.5},
+ {"label":"k11","x":1.5,"y":1},
+ {"label":"k12","x":2.5,"y":1},
+ {"label":"k13","x":3.5,"y":1},
+ {"label":"k14","x":4.5,"y":1},
+ {"label":"k15","x":5.5,"y":1},
+ {"label":"k16","x":6.5,"y":1},
+ {"label":"k18","x":7.5,"y":1},
+ {"label":"k19","x":8.5,"y":1},
+ {"label":"k1a","x":9.5,"y":1},
+ {"label":"k1b","x":10.5,"y":1},
+ {"label":"k1c","x":11.5,"y":1},
+ {"label":"k1d","x":12.5,"y":1},
+ {"label":"k1e","x":13.5,"y":1,"w":1.5},
+ {"label":"k20","x":0,"y":2,"w":1.25},
+ {"label":"k21","x":1.25,"y":2},
+ {"label":"k22","x":2.25,"y":2},
+ {"label":"k23","x":3.25,"y":2},
+ {"label":"k24","x":4.25,"y":2},
+ {"label":"k25","x":5.25,"y":2},
+ {"label":"k26","x":6.25,"y":2},
+ {"label":"k28","x":7.75,"y":2},
+ {"label":"k29","x":8.75,"y":2},
+ {"label":"k2a","x":9.75,"y":2},
+ {"label":"k2b","x":10.75,"y":2},
+ {"label":"k2c","x":11.75,"y":2},
+ {"label":"k2d","x":12.75,"y":2},
+ {"label":"k2e","x":13.75,"y":2,"w":1.25},
+ {"label":"k30","x":0,"y":3},
+ {"label":"k31","x":1,"y":3},
+ {"label":"k32","x":2,"y":3},
+ {"label":"k33","x":3,"y":3},
+ {"label":"k34","x":4,"y":3},
+ {"label":"k35","x":5,"y":3},
+ {"label":"k36","x":6,"y":3},
+ {"label":"k37","x":7,"y":3},
+ {"label":"k38","x":8,"y":3},
+ {"label":"k39","x":9,"y":3},
+ {"label":"k3a","x":10,"y":3},
+ {"label":"k3b","x":11,"y":3},
+ {"label":"k3c","x":12,"y":3},
+ {"label":"k3d","x":13,"y":3},
+ {"label":"k3e","x":14,"y":3},
+ {"label":"k41","x":0,"y":4,"w":1.5},
+ {"label":"k42","x":1.5,"y":4},
+ {"label":"k43","x":2.5,"y":4,"w":1.5},
+ {"label":"k47","x":4,"y":4,"w":7},
+ {"label":"k4b","x":11,"y":4},
+ {"label":"k4c","x":12,"y":4},
+ {"label":"k4d","x":13,"y":4},
+ {"label":"k4e","x":14,"y":4}
+ ]
+ },
+ "LAYOUT_7u_b": {
+ "layout": [
+ {"label":"k00","x":0,"y":0},
+ {"label":"k01","x":1,"y":0},
+ {"label":"k02","x":2,"y":0},
+ {"label":"k03","x":3,"y":0},
+ {"label":"k04","x":4,"y":0},
+ {"label":"k05","x":5,"y":0},
+ {"label":"k06","x":6,"y":0},
+ {"label":"k07","x":7,"y":0},
+ {"label":"k08","x":8,"y":0},
+ {"label":"k09","x":9,"y":0},
+ {"label":"k0a","x":10,"y":0},
+ {"label":"k0b","x":11,"y":0},
+ {"label":"k0c","x":12,"y":0},
+ {"label":"k0d","x":13,"y":0},
+ {"label":"k0e","x":14,"y":0},
+ {"label":"k10","x":0,"y":1,"w":1.5},
+ {"label":"k11","x":1.5,"y":1},
+ {"label":"k12","x":2.5,"y":1},
+ {"label":"k13","x":3.5,"y":1},
+ {"label":"k14","x":4.5,"y":1},
+ {"label":"k15","x":5.5,"y":1},
+ {"label":"k16","x":6.5,"y":1},
+ {"label":"k18","x":7.5,"y":1},
+ {"label":"k19","x":8.5,"y":1},
+ {"label":"k1a","x":9.5,"y":1},
+ {"label":"k1b","x":10.5,"y":1},
+ {"label":"k1c","x":11.5,"y":1},
+ {"label":"k1d","x":12.5,"y":1},
+ {"label":"k1e","x":13.5,"y":1,"w":1.5},
+ {"label":"k20","x":0,"y":2,"w":1.25},
+ {"label":"k21","x":1.25,"y":2},
+ {"label":"k22","x":2.25,"y":2},
+ {"label":"k23","x":3.25,"y":2},
+ {"label":"k24","x":4.25,"y":2},
+ {"label":"k25","x":5.25,"y":2},
+ {"label":"k26","x":6.25,"y":2},
+ {"label":"k28","x":7.75,"y":2},
+ {"label":"k29","x":8.75,"y":2},
+ {"label":"k2a","x":9.75,"y":2},
+ {"label":"k2b","x":10.75,"y":2},
+ {"label":"k2c","x":11.75,"y":2},
+ {"label":"k2d","x":12.75,"y":2},
+ {"label":"k2e","x":13.75,"y":2,"w":1.25},
+ {"label":"k30","x":0,"y":3},
+ {"label":"k31","x":1,"y":3},
+ {"label":"k32","x":2,"y":3},
+ {"label":"k33","x":3,"y":3},
+ {"label":"k34","x":4,"y":3},
+ {"label":"k35","x":5,"y":3},
+ {"label":"k36","x":6,"y":3},
+ {"label":"k37","x":7,"y":3},
+ {"label":"k38","x":8,"y":3},
+ {"label":"k39","x":9,"y":3},
+ {"label":"k3a","x":10,"y":3},
+ {"label":"k3b","x":11,"y":3},
+ {"label":"k3c","x":12,"y":3},
+ {"label":"k3d","x":13,"y":3},
+ {"label":"k3e","x":14,"y":3},
+ {"label":"k41","x":0,"y":4,"w":1.5},
+ {"label":"k42","x":1.5,"y":4},
+ {"label":"k43","x":2.5,"y":4,"w":1.5},
+ {"label":"k47","x":4,"y":4,"w":7},
+ {"label":"k17","x":11,"y":4,"w":1.5},
+ {"label":"k27","x":12.5,"y":4},
+ {"label":"k48","x":13.5,"y":4,"w":1.5}
+ ]
+ },
+ "LAYOUT_1_a": {
+ "layout": [
+ {"label":"k00","x":0,"y":0},
+ {"label":"k01","x":1,"y":0},
+ {"label":"k02","x":2,"y":0},
+ {"label":"k03","x":3,"y":0},
+ {"label":"k04","x":4,"y":0},
+ {"label":"k05","x":5,"y":0},
+ {"label":"k06","x":6,"y":0},
+ {"label":"k07","x":7,"y":0},
+ {"label":"k08","x":8,"y":0},
+ {"label":"k09","x":9,"y":0},
+ {"label":"k0a","x":10,"y":0},
+ {"label":"k0b","x":11,"y":0},
+ {"label":"k0c","x":12,"y":0},
+ {"label":"k0d","x":13,"y":0},
+ {"label":"k0e","x":14,"y":0},
+ {"label":"k10","x":0,"y":1,"w":1.5},
+ {"label":"k11","x":1.5,"y":1},
+ {"label":"k12","x":2.5,"y":1},
+ {"label":"k13","x":3.5,"y":1},
+ {"label":"k14","x":4.5,"y":1},
+ {"label":"k15","x":5.5,"y":1},
+ {"label":"k16","x":6.5,"y":1},
+ {"label":"k18","x":7.5,"y":1},
+ {"label":"k19","x":8.5,"y":1},
+ {"label":"k1a","x":9.5,"y":1},
+ {"label":"k1b","x":10.5,"y":1},
+ {"label":"k1c","x":11.5,"y":1},
+ {"label":"k1d","x":12.5,"y":1},
+ {"label":"k1e","x":13.5,"y":1,"w":1.5},
+ {"label":"k20","x":0,"y":2,"w":1.25},
+ {"label":"k21","x":1.25,"y":2},
+ {"label":"k22","x":2.25,"y":2},
+ {"label":"k23","x":3.25,"y":2},
+ {"label":"k24","x":4.25,"y":2},
+ {"label":"k25","x":5.25,"y":2},
+ {"label":"k26","x":6.25,"y":2},
+ {"label":"k28","x":7.75,"y":2},
+ {"label":"k29","x":8.75,"y":2},
+ {"label":"k2a","x":9.75,"y":2},
+ {"label":"k2b","x":10.75,"y":2},
+ {"label":"k2c","x":11.75,"y":2},
+ {"label":"k2d","x":12.75,"y":2},
+ {"label":"k2e","x":13.75,"y":2,"w":1.25},
+ {"label":"k30","x":0,"y":3},
+ {"label":"k31","x":1,"y":3},
+ {"label":"k32","x":2,"y":3},
+ {"label":"k33","x":3,"y":3},
+ {"label":"k34","x":4,"y":3},
+ {"label":"k35","x":5,"y":3},
+ {"label":"k36","x":6,"y":3},
+ {"label":"k37","x":7,"y":3},
+ {"label":"k38","x":8,"y":3},
+ {"label":"k39","x":9,"y":3},
+ {"label":"k3a","x":10,"y":3},
+ {"label":"k3b","x":11,"y":3},
+ {"label":"k3c","x":12,"y":3},
+ {"label":"k3d","x":13,"y":3},
+ {"label":"k3e","x":14,"y":3},
+ {"label":"k40","x":0,"y":4},
+ {"label":"k41","x":1,"y":4,"w":1.25},
+ {"label":"k42","x":2.25,"y":4,"w":1.25},
+ {"label":"k43","x":3.5,"y":4,"w":1.25},
+ {"label":"k44","x":4.75,"y":4,"w":2.25},
+ {"label":"k47","x":7,"y":4},
+ {"label":"k49","x":8,"y":4,"w":2},
+ {"label":"k4a","x":10,"y":4},
+ {"label":"k4b","x":11,"y":4},
+ {"label":"k4c","x":12,"y":4},
+ {"label":"k4d","x":13,"y":4},
+ {"label":"k4e","x":14,"y":4}
+ ]
+ },
+ "LAYOUT_1_b": {
+ "layout": [
+ {"label":"k00","x":0,"y":0},
+ {"label":"k01","x":1,"y":0},
+ {"label":"k02","x":2,"y":0},
+ {"label":"k03","x":3,"y":0},
+ {"label":"k04","x":4,"y":0},
+ {"label":"k05","x":5,"y":0},
+ {"label":"k06","x":6,"y":0},
+ {"label":"k07","x":7,"y":0},
+ {"label":"k08","x":8,"y":0},
+ {"label":"k09","x":9,"y":0},
+ {"label":"k0a","x":10,"y":0},
+ {"label":"k0b","x":11,"y":0},
+ {"label":"k0c","x":12,"y":0},
+ {"label":"k0d","x":13,"y":0},
+ {"label":"k0e","x":14,"y":0},
+ {"label":"k10","x":0,"y":1,"w":1.5},
+ {"label":"k11","x":1.5,"y":1},
+ {"label":"k12","x":2.5,"y":1},
+ {"label":"k13","x":3.5,"y":1},
+ {"label":"k14","x":4.5,"y":1},
+ {"label":"k15","x":5.5,"y":1},
+ {"label":"k16","x":6.5,"y":1},
+ {"label":"k18","x":7.5,"y":1},
+ {"label":"k19","x":8.5,"y":1},
+ {"label":"k1a","x":9.5,"y":1},
+ {"label":"k1b","x":10.5,"y":1},
+ {"label":"k1c","x":11.5,"y":1},
+ {"label":"k1d","x":12.5,"y":1},
+ {"label":"k1e","x":13.5,"y":1,"w":1.5},
+ {"label":"k20","x":0,"y":2,"w":1.25},
+ {"label":"k21","x":1.25,"y":2},
+ {"label":"k22","x":2.25,"y":2},
+ {"label":"k23","x":3.25,"y":2},
+ {"label":"k24","x":4.25,"y":2},
+ {"label":"k25","x":5.25,"y":2},
+ {"label":"k26","x":6.25,"y":2},
+ {"label":"k28","x":7.75,"y":2},
+ {"label":"k29","x":8.75,"y":2},
+ {"label":"k2a","x":9.75,"y":2},
+ {"label":"k2b","x":10.75,"y":2},
+ {"label":"k2c","x":11.75,"y":2},
+ {"label":"k2d","x":12.75,"y":2},
+ {"label":"k2e","x":13.75,"y":2,"w":1.25},
+ {"label":"k30","x":0,"y":3},
+ {"label":"k31","x":1,"y":3},
+ {"label":"k32","x":2,"y":3},
+ {"label":"k33","x":3,"y":3},
+ {"label":"k34","x":4,"y":3},
+ {"label":"k35","x":5,"y":3},
+ {"label":"k36","x":6,"y":3},
+ {"label":"k37","x":7,"y":3},
+ {"label":"k38","x":8,"y":3},
+ {"label":"k39","x":9,"y":3},
+ {"label":"k3a","x":10,"y":3},
+ {"label":"k3b","x":11,"y":3},
+ {"label":"k3c","x":12,"y":3},
+ {"label":"k3d","x":13,"y":3},
+ {"label":"k3e","x":14,"y":3},
+ {"label":"k40","x":0,"y":4},
+ {"label":"k41","x":1,"y":4,"w":1.25},
+ {"label":"k42","x":2.25,"y":4,"w":1.25},
+ {"label":"k43","x":3.5,"y":4,"w":1.25},
+ {"label":"k44","x":4.75,"y":4,"w":2.25},
+ {"label":"k47","x":7,"y":4},
+ {"label":"k49","x":8,"y":4,"w":2.75},
+ {"label":"k17","x":10.75,"y":4,"w":2},
+ {"label":"k48","x":12.75,"y":4,"w":2.25}
+ ]
+ },
+ "LAYOUT_1_c": {
+ "layout": [
+ {"label":"k00","x":0,"y":0},
+ {"label":"k01","x":1,"y":0},
+ {"label":"k02","x":2,"y":0},
+ {"label":"k03","x":3,"y":0},
+ {"label":"k04","x":4,"y":0},
+ {"label":"k05","x":5,"y":0},
+ {"label":"k06","x":6,"y":0},
+ {"label":"k07","x":7,"y":0},
+ {"label":"k08","x":8,"y":0},
+ {"label":"k09","x":9,"y":0},
+ {"label":"k0a","x":10,"y":0},
+ {"label":"k0b","x":11,"y":0},
+ {"label":"k0c","x":12,"y":0},
+ {"label":"k0d","x":13,"y":0},
+ {"label":"k0e","x":14,"y":0},
+ {"label":"k10","x":0,"y":1,"w":1.5},
+ {"label":"k11","x":1.5,"y":1},
+ {"label":"k12","x":2.5,"y":1},
+ {"label":"k13","x":3.5,"y":1},
+ {"label":"k14","x":4.5,"y":1},
+ {"label":"k15","x":5.5,"y":1},
+ {"label":"k16","x":6.5,"y":1},
+ {"label":"k18","x":7.5,"y":1},
+ {"label":"k19","x":8.5,"y":1},
+ {"label":"k1a","x":9.5,"y":1},
+ {"label":"k1b","x":10.5,"y":1},
+ {"label":"k1c","x":11.5,"y":1},
+ {"label":"k1d","x":12.5,"y":1},
+ {"label":"k1e","x":13.5,"y":1,"w":1.5},
+ {"label":"k20","x":0,"y":2,"w":1.25},
+ {"label":"k21","x":1.25,"y":2},
+ {"label":"k22","x":2.25,"y":2},
+ {"label":"k23","x":3.25,"y":2},
+ {"label":"k24","x":4.25,"y":2},
+ {"label":"k25","x":5.25,"y":2},
+ {"label":"k26","x":6.25,"y":2},
+ {"label":"k28","x":7.75,"y":2},
+ {"label":"k29","x":8.75,"y":2},
+ {"label":"k2a","x":9.75,"y":2},
+ {"label":"k2b","x":10.75,"y":2},
+ {"label":"k2c","x":11.75,"y":2},
+ {"label":"k2d","x":12.75,"y":2},
+ {"label":"k2e","x":13.75,"y":2,"w":1.25},
+ {"label":"k30","x":0,"y":3},
+ {"label":"k31","x":1,"y":3},
+ {"label":"k32","x":2,"y":3},
+ {"label":"k33","x":3,"y":3},
+ {"label":"k34","x":4,"y":3},
+ {"label":"k35","x":5,"y":3},
+ {"label":"k36","x":6,"y":3},
+ {"label":"k37","x":7,"y":3},
+ {"label":"k38","x":8,"y":3},
+ {"label":"k39","x":9,"y":3},
+ {"label":"k3a","x":10,"y":3},
+ {"label":"k3b","x":11,"y":3},
+ {"label":"k3c","x":12,"y":3},
+ {"label":"k3d","x":13,"y":3},
+ {"label":"k3e","x":14,"y":3},
+ {"label":"k40","x":0,"y":4},
+ {"label":"k41","x":1,"y":4,"w":1.25},
+ {"label":"k42","x":2.25,"y":4,"w":1.25},
+ {"label":"k43","x":3.5,"y":4,"w":1.25},
+ {"label":"k44","x":4.75,"y":4,"w":2.25},
+ {"label":"k47","x":7,"y":4},
+ {"label":"k49","x":8,"y":4,"w":2},
+ {"label":"k45","x":10,"y":4,"w":1.5},
+ {"label":"k27","x":11.5,"y":4,"w":1.25},
+ {"label":"k48","x":12.75,"y":4,"w":2.25}
+ ]
+ },
+ "LAYOUT_2_a": {
+ "layout": [
+ {"label":"k00","x":0,"y":0},
+ {"label":"k01","x":1,"y":0},
+ {"label":"k02","x":2,"y":0},
+ {"label":"k03","x":3,"y":0},
+ {"label":"k04","x":4,"y":0},
+ {"label":"k05","x":5,"y":0},
+ {"label":"k06","x":6,"y":0},
+ {"label":"k07","x":7,"y":0},
+ {"label":"k08","x":8,"y":0},
+ {"label":"k09","x":9,"y":0},
+ {"label":"k0a","x":10,"y":0},
+ {"label":"k0b","x":11,"y":0},
+ {"label":"k0c","x":12,"y":0},
+ {"label":"k0d","x":13,"y":0},
+ {"label":"k0e","x":14,"y":0},
+ {"label":"k10","x":0,"y":1,"w":1.5},
+ {"label":"k11","x":1.5,"y":1},
+ {"label":"k12","x":2.5,"y":1},
+ {"label":"k13","x":3.5,"y":1},
+ {"label":"k14","x":4.5,"y":1},
+ {"label":"k15","x":5.5,"y":1},
+ {"label":"k16","x":6.5,"y":1},
+ {"label":"k18","x":7.5,"y":1},
+ {"label":"k19","x":8.5,"y":1},
+ {"label":"k1a","x":9.5,"y":1},
+ {"label":"k1b","x":10.5,"y":1},
+ {"label":"k1c","x":11.5,"y":1},
+ {"label":"k1d","x":12.5,"y":1},
+ {"label":"k1e","x":13.5,"y":1,"w":1.5},
+ {"label":"k20","x":0,"y":2,"w":1.25},
+ {"label":"k21","x":1.25,"y":2},
+ {"label":"k22","x":2.25,"y":2},
+ {"label":"k23","x":3.25,"y":2},
+ {"label":"k24","x":4.25,"y":2},
+ {"label":"k25","x":5.25,"y":2},
+ {"label":"k26","x":6.25,"y":2},
+ {"label":"k28","x":7.75,"y":2},
+ {"label":"k29","x":8.75,"y":2},
+ {"label":"k2a","x":9.75,"y":2},
+ {"label":"k2b","x":10.75,"y":2},
+ {"label":"k2c","x":11.75,"y":2},
+ {"label":"k2d","x":12.75,"y":2},
+ {"label":"k2e","x":13.75,"y":2,"w":1.25},
+ {"label":"k30","x":0,"y":3},
+ {"label":"k31","x":1,"y":3},
+ {"label":"k32","x":2,"y":3},
+ {"label":"k33","x":3,"y":3},
+ {"label":"k34","x":4,"y":3},
+ {"label":"k35","x":5,"y":3},
+ {"label":"k36","x":6,"y":3},
+ {"label":"k37","x":7,"y":3},
+ {"label":"k38","x":8,"y":3},
+ {"label":"k39","x":9,"y":3},
+ {"label":"k3a","x":10,"y":3},
+ {"label":"k3b","x":11,"y":3},
+ {"label":"k3c","x":12,"y":3},
+ {"label":"k3d","x":13,"y":3},
+ {"label":"k3e","x":14,"y":3},
+ {"label":"k41","x":0,"y":4,"w":1.5},
+ {"label":"k42","x":1.5,"y":4,"w":1.25},
+ {"label":"k43","x":2.75,"y":4,"w":1.5},
+ {"label":"k44","x":4.25,"y":4,"w":2.75},
+ {"label":"k47","x":7,"y":4},
+ {"label":"k49","x":8,"y":4,"w":2},
+ {"label":"k4a","x":10,"y":4},
+ {"label":"k4b","x":11,"y":4},
+ {"label":"k4c","x":12,"y":4},
+ {"label":"k4d","x":13,"y":4},
+ {"label":"k4e","x":14,"y":4}
+ ]
+ },
+ "LAYOUT_2_b": {
+ "layout": [
+ {"label":"k00","x":0,"y":0},
+ {"label":"k01","x":1,"y":0},
+ {"label":"k02","x":2,"y":0},
+ {"label":"k03","x":3,"y":0},
+ {"label":"k04","x":4,"y":0},
+ {"label":"k05","x":5,"y":0},
+ {"label":"k06","x":6,"y":0},
+ {"label":"k07","x":7,"y":0},
+ {"label":"k08","x":8,"y":0},
+ {"label":"k09","x":9,"y":0},
+ {"label":"k0a","x":10,"y":0},
+ {"label":"k0b","x":11,"y":0},
+ {"label":"k0c","x":12,"y":0},
+ {"label":"k0d","x":13,"y":0},
+ {"label":"k0e","x":14,"y":0},
+ {"label":"k10","x":0,"y":1,"w":1.5},
+ {"label":"k11","x":1.5,"y":1},
+ {"label":"k12","x":2.5,"y":1},
+ {"label":"k13","x":3.5,"y":1},
+ {"label":"k14","x":4.5,"y":1},
+ {"label":"k15","x":5.5,"y":1},
+ {"label":"k16","x":6.5,"y":1},
+ {"label":"k18","x":7.5,"y":1},
+ {"label":"k19","x":8.5,"y":1},
+ {"label":"k1a","x":9.5,"y":1},
+ {"label":"k1b","x":10.5,"y":1},
+ {"label":"k1c","x":11.5,"y":1},
+ {"label":"k1d","x":12.5,"y":1},
+ {"label":"k1e","x":13.5,"y":1,"w":1.5},
+ {"label":"k20","x":0,"y":2,"w":1.25},
+ {"label":"k21","x":1.25,"y":2},
+ {"label":"k22","x":2.25,"y":2},
+ {"label":"k23","x":3.25,"y":2},
+ {"label":"k24","x":4.25,"y":2},
+ {"label":"k25","x":5.25,"y":2},
+ {"label":"k26","x":6.25,"y":2},
+ {"label":"k28","x":7.75,"y":2},
+ {"label":"k29","x":8.75,"y":2},
+ {"label":"k2a","x":9.75,"y":2},
+ {"label":"k2b","x":10.75,"y":2},
+ {"label":"k2c","x":11.75,"y":2},
+ {"label":"k2d","x":12.75,"y":2},
+ {"label":"k2e","x":13.75,"y":2,"w":1.25},
+ {"label":"k30","x":0,"y":3},
+ {"label":"k31","x":1,"y":3},
+ {"label":"k32","x":2,"y":3},
+ {"label":"k33","x":3,"y":3},
+ {"label":"k34","x":4,"y":3},
+ {"label":"k35","x":5,"y":3},
+ {"label":"k36","x":6,"y":3},
+ {"label":"k37","x":7,"y":3},
+ {"label":"k38","x":8,"y":3},
+ {"label":"k39","x":9,"y":3},
+ {"label":"k3a","x":10,"y":3},
+ {"label":"k3b","x":11,"y":3},
+ {"label":"k3c","x":12,"y":3},
+ {"label":"k3d","x":13,"y":3},
+ {"label":"k3e","x":14,"y":3},
+ {"label":"k41","x":0,"y":4,"w":1.5},
+ {"label":"k42","x":1.5,"y":4,"w":1.25},
+ {"label":"k43","x":2.75,"y":4,"w":1.5},
+ {"label":"k44","x":4.25,"y":4,"w":2.75},
+ {"label":"k47","x":7,"y":4},
+ {"label":"k49","x":8,"y":4,"w":2.75},
+ {"label":"k17","x":10.75,"y":4,"w":2},
+ {"label":"k48","x":12.75,"y":4,"w":2.25}
+ ]
+ },
+ "LAYOUT_2_c": {
+ "layout": [
+ {"label":"k00","x":0,"y":0},
+ {"label":"k01","x":1,"y":0},
+ {"label":"k02","x":2,"y":0},
+ {"label":"k03","x":3,"y":0},
+ {"label":"k04","x":4,"y":0},
+ {"label":"k05","x":5,"y":0},
+ {"label":"k06","x":6,"y":0},
+ {"label":"k07","x":7,"y":0},
+ {"label":"k08","x":8,"y":0},
+ {"label":"k09","x":9,"y":0},
+ {"label":"k0a","x":10,"y":0},
+ {"label":"k0b","x":11,"y":0},
+ {"label":"k0c","x":12,"y":0},
+ {"label":"k0d","x":13,"y":0},
+ {"label":"k0e","x":14,"y":0},
+ {"label":"k10","x":0,"y":1,"w":1.5},
+ {"label":"k11","x":1.5,"y":1},
+ {"label":"k12","x":2.5,"y":1},
+ {"label":"k13","x":3.5,"y":1},
+ {"label":"k14","x":4.5,"y":1},
+ {"label":"k15","x":5.5,"y":1},
+ {"label":"k16","x":6.5,"y":1},
+ {"label":"k18","x":7.5,"y":1},
+ {"label":"k19","x":8.5,"y":1},
+ {"label":"k1a","x":9.5,"y":1},
+ {"label":"k1b","x":10.5,"y":1},
+ {"label":"k1c","x":11.5,"y":1},
+ {"label":"k1d","x":12.5,"y":1},
+ {"label":"k1e","x":13.5,"y":1,"w":1.5},
+ {"label":"k20","x":0,"y":2,"w":1.25},
+ {"label":"k21","x":1.25,"y":2},
+ {"label":"k22","x":2.25,"y":2},
+ {"label":"k23","x":3.25,"y":2},
+ {"label":"k24","x":4.25,"y":2},
+ {"label":"k25","x":5.25,"y":2},
+ {"label":"k26","x":6.25,"y":2},
+ {"label":"k28","x":7.75,"y":2},
+ {"label":"k29","x":8.75,"y":2},
+ {"label":"k2a","x":9.75,"y":2},
+ {"label":"k2b","x":10.75,"y":2},
+ {"label":"k2c","x":11.75,"y":2},
+ {"label":"k2d","x":12.75,"y":2},
+ {"label":"k2e","x":13.75,"y":2,"w":1.25},
+ {"label":"k30","x":0,"y":3},
+ {"label":"k31","x":1,"y":3},
+ {"label":"k32","x":2,"y":3},
+ {"label":"k33","x":3,"y":3},
+ {"label":"k34","x":4,"y":3},
+ {"label":"k35","x":5,"y":3},
+ {"label":"k36","x":6,"y":3},
+ {"label":"k37","x":7,"y":3},
+ {"label":"k38","x":8,"y":3},
+ {"label":"k39","x":9,"y":3},
+ {"label":"k3a","x":10,"y":3},
+ {"label":"k3b","x":11,"y":3},
+ {"label":"k3c","x":12,"y":3},
+ {"label":"k3d","x":13,"y":3},
+ {"label":"k3e","x":14,"y":3},
+ {"label":"k41","x":0,"y":4,"w":1.5},
+ {"label":"k42","x":1.5,"y":4,"w":1.25},
+ {"label":"k43","x":2.75,"y":4,"w":1.5},
+ {"label":"k44","x":4.25,"y":4,"w":2.75},
+ {"label":"k47","x":7,"y":4},
+ {"label":"k49","x":8,"y":4,"w":2},
+ {"label":"k45","x":10,"y":4,"w":1.5},
+ {"label":"k27","x":11.5,"y":4,"w":1.25},
+ {"label":"k48","x":12.75,"y":4,"w":2.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/rominronin/katana60/rev2/keymaps/default/config.h b/keyboards/rominronin/katana60/rev2/keymaps/default/config.h
new file mode 100644
index 000000000..068967640
--- /dev/null
+++ b/keyboards/rominronin/katana60/rev2/keymaps/default/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2019 rominronin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/rominronin/katana60/rev2/keymaps/default/keymap.c b/keyboards/rominronin/katana60/rev2/keymaps/default/keymap.c
new file mode 100644
index 000000000..d9c9b6d4e
--- /dev/null
+++ b/keyboards/rominronin/katana60/rev2/keymaps/default/keymap.c
@@ -0,0 +1,71 @@
+/* Copyright 2019 rominronin
+ *
+ * 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
+
+// MacOS based definitions.
+#define K_SPCFN LT(SYMB, KC_SPACE) // Tap for space, hold for symbols layer
+#define K_PRVWD LALT(KC_LEFT) // Previous word
+#define K_NXTWD LALT(KC_RIGHT) // Next word
+#define K_LSTRT LGUI(KC_LEFT) // Start of line
+#define K_LEND LGUI(KC_RIGHT) // End of line
+#define UNDO LGUI(KC_Z) // UNDO
+#define CUT LGUI(KC_X) // CUT
+#define COPY LGUI(KC_C) // COPY
+#define PASTE LGUI(KC_V) // PASTE
+
+enum layer_names {
+ BASE,
+ NUMB,
+ SYMB,
+ CURS,
+};
+
+// Defines the keycodes used by our macros in process_record_user
+enum custom_keycodes {
+ QMKBEST = SAFE_RANGE,
+ QMKURL
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [BASE] = LAYOUT_1_a(/* Base */
+ KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, DF(1), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ MO(3), KC_A, KC_S, KC_D, KC_F, KC_G, KC_HOME, KC_PGUP, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_END, KC_DEL, KC_PGDN, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ MO(2), KC_LCTL, KC_LGUI, KC_LALT, KC_BSPC, KC_ENT, K_SPCFN, KC_RGUI, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT
+ ),
+ [NUMB] = LAYOUT_1_a(
+ _______, _______, _______, _______, _______, _______, _______, DF(0), _______, _______, KC_PEQL, KC_PSLS, KC_PAST, _______, _______,
+ _______, _______, _______, KC_MS_U, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, KC_PMNS, _______,
+ _______, KC_BTN2, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6, KC_PPLS, _______,
+ _______, _______, KC_ACL0, KC_ACL1, KC_ACL2, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, KC_PENT, _______,
+ _______, _______, _______, _______, _______, KC_P0, _______, _______, KC_PDOT, KC_PENT, _______, _______
+ ),
+ [SYMB] = LAYOUT_1_a(
+ 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_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, _______, _______, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
+ _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_VOLD, KC_VOLU, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
+ _______, KC_PLUS, KC_MINS, KC_EQL, KC_LCBR, KC_RCBR, KC_MPRV, KC_MPLY, KC_MNXT, KC_LBRC, KC_RBRC, KC_SCLN, KC_COLN, KC_BSLS, _______,
+ _______, _______, _______, _______, _______, _______, KC_DEL, _______, _______, _______, _______, _______
+ ),
+ [CURS] = LAYOUT_1_a(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, K_PRVWD, KC_UP, K_NXTWD, _______, _______,
+ _______, _______, KC_LCTL, KC_LALT, KC_LSFT, _______, _______, _______, KC_BSPC, KC_LEFT, KC_DOWN, KC_RIGHT,KC_DEL, _______,
+ _______, UNDO, CUT, COPY, PASTE, _______, _______, _______, _______, _______, K_LSTRT, _______, K_LEND, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/rominronin/katana60/rev2/keymaps/default/readme.md b/keyboards/rominronin/katana60/rev2/keymaps/default/readme.md
new file mode 100644
index 000000000..6d0bbe8b2
--- /dev/null
+++ b/keyboards/rominronin/katana60/rev2/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for katana60_rev2
diff --git a/keyboards/rominronin/katana60/rev2/keymaps/rominronin_7u/config.h b/keyboards/rominronin/katana60/rev2/keymaps/rominronin_7u/config.h
new file mode 100644
index 000000000..068967640
--- /dev/null
+++ b/keyboards/rominronin/katana60/rev2/keymaps/rominronin_7u/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2019 rominronin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/rominronin/katana60/rev2/keymaps/rominronin_7u/keymap.c b/keyboards/rominronin/katana60/rev2/keymaps/rominronin_7u/keymap.c
new file mode 100644
index 000000000..545089212
--- /dev/null
+++ b/keyboards/rominronin/katana60/rev2/keymaps/rominronin_7u/keymap.c
@@ -0,0 +1,79 @@
+/* Copyright 2019 rominronin
+ *
+ * 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
+
+// MacOS based definitions.
+#define K_SPCFN LT(SYMB, KC_SPACE) // Tap for space, hold for symbols layer
+#define K_PRVWD LALT(KC_LEFT) // Previous word
+#define K_NXTWD LALT(KC_RIGHT) // Next word
+#define K_LSTRT LGUI(KC_LEFT) // Start of line
+#define K_LEND LGUI(KC_RIGHT) // End of line
+#define UNDO LGUI(KC_Z) // UNDO
+#define CUT LGUI(KC_X) // CUT
+#define COPY LGUI(KC_C) // COPY
+#define PASTE LGUI(KC_V) // PASTE
+
+enum layer_names {
+ BASE,
+ NUMB,
+ SYMB,
+ CURS,
+ BASE2,
+};
+
+// Defines the keycodes used by our macros in process_record_user
+enum custom_keycodes {
+ QMKBEST = SAFE_RANGE,
+ QMKURL
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [BASE] = LAYOUT_7u_a(/* Base */
+ KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, DF(4), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL,
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_LBRC, KC_RBRC, KC_J, KC_L, KC_U, KC_Y, KC_QUOT, KC_BSPC,
+ MO(3), KC_A, KC_R, KC_S, KC_T, KC_G, KC_HOME, KC_PGUP, KC_M, KC_N, KC_E, KC_I, KC_O, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_D, KC_V, KC_END, KC_DEL, KC_PGDN, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_LALT, KC_LGUI, K_SPCFN, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT
+ ),
+ [NUMB] = LAYOUT_7u_a(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PEQL, KC_PSLS, KC_PAST, _______, _______,
+ _______, _______, _______, KC_MS_U, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, KC_PMNS, _______,
+ DF(0), KC_BTN2, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6, KC_PPLS, _______,
+ _______, _______, KC_ACL0, KC_ACL1, KC_ACL2, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, KC_PENT, _______,
+ _______, _______, _______, KC_P0, KC_PDOT, KC_PENT, _______, _______
+ ),
+ [SYMB] = LAYOUT_7u_a(
+ 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_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, _______, _______, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
+ _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_VOLD, KC_VOLU, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
+ _______, KC_PLUS, KC_MINS, KC_EQL, KC_LCBR, KC_RCBR, KC_MPRV, KC_MPLY, KC_MNXT, KC_LBRC, KC_RBRC, KC_SCLN, KC_COLN, KC_BSLS, _______,
+ _______, _______, _______, KC_DEL, _______, _______, _______, _______
+ ),
+ [CURS] = LAYOUT_7u_a(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, K_PRVWD, KC_UP, K_NXTWD, _______, _______,
+ _______, _______, KC_LCTL, KC_LALT, KC_LSFT, _______, _______, _______, KC_BSPC, KC_LEFT, KC_DOWN, KC_RIGHT,KC_DEL, _______,
+ _______, UNDO, CUT, COPY, PASTE, _______, _______, _______, _______, _______, K_LSTRT, _______, K_LEND, _______, _______,
+ _______, _______, _______, DF(1), _______, _______, _______, _______
+ ),
+ [BASE2] = LAYOUT_7u_a(/* Base */
+ KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, DF(0), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL,
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_LBRC, KC_RBRC, KC_J, KC_L, KC_U, KC_Y, KC_QUOT, KC_BSPC,
+ KC_CAPS, KC_A, KC_R, KC_S, KC_T, KC_G, KC_HOME, KC_PGUP, KC_M, KC_N, KC_E, KC_I, KC_O, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_D, KC_V, KC_END, KC_DEL, KC_PGDN, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPACE, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT
+ )
+};
diff --git a/keyboards/rominronin/katana60/rev2/keymaps/rominronin_7u/readme.md b/keyboards/rominronin/katana60/rev2/keymaps/rominronin_7u/readme.md
new file mode 100644
index 000000000..6d0bbe8b2
--- /dev/null
+++ b/keyboards/rominronin/katana60/rev2/keymaps/rominronin_7u/readme.md
@@ -0,0 +1 @@
+# The default keymap for katana60_rev2
diff --git a/keyboards/rominronin/katana60/rev2/readme.md b/keyboards/rominronin/katana60/rev2/readme.md
new file mode 100644
index 000000000..2f2abad70
--- /dev/null
+++ b/keyboards/rominronin/katana60/rev2/readme.md
@@ -0,0 +1,17 @@
+# Katana60 rev2
+
+![Katana60 rev2](https://i.imgur.com/3hBsSvBl.jpg)
+
+A 60% keyboard with a symmetrical staggered layout, sold by CandyKeys.com.
+
+Keyboard Maintainer: [Baris Tosun](https://github.com/rominronin)
+Hardware Supported: Katana60 PCB rev2
+Hardware Availability: [candykeys.com](https://candykeys.com/product/katana60-pcb-V2)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make rominronin/katana60/rev2:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+There is also ongoing discussion for the extend layer, at the [Colemak Forum](https://forum.colemak.com/topic/2327-developing-an-extend-layer-for-the-katana60/)
diff --git a/keyboards/rominronin/katana60/rev2/rev2.c b/keyboards/rominronin/katana60/rev2/rev2.c
new file mode 100644
index 000000000..3336fd0dc
--- /dev/null
+++ b/keyboards/rominronin/katana60/rev2/rev2.c
@@ -0,0 +1,16 @@
+/* Copyright 2019 rominronin
+ *
+ * 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 "rev2.h"
diff --git a/keyboards/rominronin/katana60/rev2/rev2.h b/keyboards/rominronin/katana60/rev2/rev2.h
new file mode 100644
index 000000000..35a45b438
--- /dev/null
+++ b/keyboards/rominronin/katana60/rev2/rev2.h
@@ -0,0 +1,238 @@
+/* Copyright 2019 rominronin
+ *
+ * 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
+
+/* LAYOUT_7u_a
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │0E │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+ * │10 │11 │12 │13 │14 │15 │16 │18 │19 │1A │1B │1C │1D │1E │
+ * ├────┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬────┤
+ * │20 │21 │22 │23 │24 │25 │26 │ │28 │29 │2A │2B │2C │2D │2E │
+ * ├───┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴─┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬───┤
+ * │30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3C │3D │3E │
+ * ├───┴─┬─┴─┬─┴───┼───┴───┴───┴───┴───┴───┴───┼───┼───┼───┼───┤
+ * │41 │42 │43 │ 47 │4B │4C │4D │4E │
+ * └─────┴───┴─────┴───────────────────────────┴───┴───┴───┴───┘
+ */
+#define LAYOUT_7u_a( \
+ Q00, Q01, Q02, Q03, Q04, Q05, Q06, Q07, Q08, Q09, Q0A, Q0B, Q0C, Q0D, Q0E, \
+ Q10, Q11, Q12, Q13, Q14, Q15, Q16, Q18, Q19, Q1A, Q1B, Q1C, Q1D, Q1E, \
+ Q20, Q21, Q22, Q23, Q24, Q25, Q26, Q28, Q29, Q2A, Q2B, Q2C, Q2D, Q2E, \
+ Q30, Q31, Q32, Q33, Q34, Q35, Q36, Q37, Q38, Q39, Q3A, Q3B, Q3C, Q3D, Q3E, \
+ Q41, Q42, Q43, Q47, Q4B, Q4C, Q4D, Q4E \
+) { \
+ { Q00, Q01, Q02, Q03, Q04, Q05, Q06, Q07, Q08, Q09, Q0A, Q0B, Q0C, Q0D, Q0E }, \
+ { Q10, Q11, Q12, Q13, Q14, Q15, Q16, XXX, Q18, Q19, Q1A, Q1B, Q1C, Q1D, Q1E }, \
+ { Q20, Q21, Q22, Q23, Q24, Q25, Q26, XXX, Q28, Q29, Q2A, Q2B, Q2C, Q2D, Q2E }, \
+ { Q30, Q31, Q32, Q33, Q34, Q35, Q36, Q37, Q38, Q39, Q3A, Q3B, Q3C, Q3D, Q3E }, \
+ { XXX, Q41, Q42, Q43, XXX, XXX, XXX, Q47, XXX, XXX, XXX, Q4B, Q4C, Q4D, Q4E } \
+}
+
+/* LAYOUT_7u_b
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │0E │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+ * │10 │11 │12 │13 │14 │15 │16 │18 │19 │1A │1B │1C │1D │1E │
+ * ├────┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬────┤
+ * │20 │21 │22 │23 │24 │25 │26 │ │28 │29 │2A │2B │2C │2D │2E │
+ * ├───┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴─┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬───┤
+ * │30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3C │3D │3E │
+ * ├───┴─┬─┴─┬─┴───┼───┴───┴───┴───┴───┴───┴───┼───┴─┬─┴─┬─┴───┤
+ * │41 │42 │43 │ 47 │17 │27 │48 │
+ * └─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
+ */
+#define LAYOUT_7u_b( \
+ Q00, Q01, Q02, Q03, Q04, Q05, Q06, Q07, Q08, Q09, Q0A, Q0B, Q0C, Q0D, Q0E, \
+ Q10, Q11, Q12, Q13, Q14, Q15, Q16, Q18, Q19, Q1A, Q1B, Q1C, Q1D, Q1E, \
+ Q20, Q21, Q22, Q23, Q24, Q25, Q26, Q28, Q29, Q2A, Q2B, Q2C, Q2D, Q2E, \
+ Q30, Q31, Q32, Q33, Q34, Q35, Q36, Q37, Q38, Q39, Q3A, Q3B, Q3C, Q3D, Q3E, \
+ Q41, Q42, Q43, Q47, Q17, Q27, Q48 \
+) { \
+ { Q00, Q01, Q02, Q03, Q04, Q05, Q06, Q07, Q08, Q09, Q0A, Q0B, Q0C, Q0D, Q0E }, \
+ { Q10, Q11, Q12, Q13, Q14, Q15, Q16, Q17, Q18, Q19, Q1A, Q1B, Q1C, Q1D, Q1E }, \
+ { Q20, Q21, Q22, Q23, Q24, Q25, Q26, Q27, Q28, Q29, Q2A, Q2B, Q2C, Q2D, Q2E }, \
+ { Q30, Q31, Q32, Q33, Q34, Q35, Q36, Q37, Q38, Q39, Q3A, Q3B, Q3C, Q3D, Q3E }, \
+ { XXX, Q41, Q42, Q43, XXX, XXX, XXX, Q47, Q48, XXX, XXX, XXX, XXX, XXX, XXX } \
+}
+
+/* LAYOUT_1_a
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │0E │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+ * │10 │11 │12 │13 │14 │15 │16 │18 │19 │1A │1B │1C │1D │1E │
+ * ├────┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬────┤
+ * │20 │21 │22 │23 │24 │25 │26 │ │28 │29 │2A │2B │2C │2D │2E │
+ * ├───┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴─┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬───┤
+ * │30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3C │3D │3E │
+ * ├───┼───┴┬──┴─┬─┴──┬┴───┴───┼───┼───┴───┼───┼───┼───┼───┼───┤
+ * │40 │41 │42 │43 │ 44 │47 │ 49 │4A │4B │4C │4D │4E │
+ * └───┴────┴────┴────┴────────┴───┴───────┴───┴───┴───┴───┴───┘
+ */
+#define LAYOUT_1_a( \
+ Q00, Q01, Q02, Q03, Q04, Q05, Q06, Q07, Q08, Q09, Q0A, Q0B, Q0C, Q0D, Q0E, \
+ Q10, Q11, Q12, Q13, Q14, Q15, Q16, Q18, Q19, Q1A, Q1B, Q1C, Q1D, Q1E, \
+ Q20, Q21, Q22, Q23, Q24, Q25, Q26, Q28, Q29, Q2A, Q2B, Q2C, Q2D, Q2E, \
+ Q30, Q31, Q32, Q33, Q34, Q35, Q36, Q37, Q38, Q39, Q3A, Q3B, Q3C, Q3D, Q3E, \
+ Q40, Q41, Q42, Q43, Q44, Q47, Q49, Q4A, Q4B, Q4C, Q4D, Q4E \
+) { \
+ { Q00, Q01, Q02, Q03, Q04, Q05, Q06, Q07, Q08, Q09, Q0A, Q0B, Q0C, Q0D, Q0E }, \
+ { Q10, Q11, Q12, Q13, Q14, Q15, Q16, XXX, Q18, Q19, Q1A, Q1B, Q1C, Q1D, Q1E }, \
+ { Q20, Q21, Q22, Q23, Q24, Q25, Q26, XXX, Q28, Q29, Q2A, Q2B, Q2C, Q2D, Q2E }, \
+ { Q30, Q31, Q32, Q33, Q34, Q35, Q36, Q37, Q38, Q39, Q3A, Q3B, Q3C, Q3D, Q3E }, \
+ { Q40, Q41, Q42, Q43, Q44, XXX, XXX, Q47, XXX, Q49, Q4A, Q4B, Q4C, Q4D, Q4E } \
+}
+
+/* LAYOUT_1_b
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │0E │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+ * │10 │11 │12 │13 │14 │15 │16 │18 │19 │1A │1B │1C │1D │1E │
+ * ├────┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬────┤
+ * │20 │21 │22 │23 │24 │25 │26 │ │28 │29 │2A │2B │2C │2D │2E │
+ * ├───┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴─┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬───┤
+ * │30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3C │3D │3E │
+ * ├───┼───┴┬──┴─┬─┴──┬┴───┴───┼───┼───┴───┴──┬┴───┴──┬┴───┴───┤
+ * │40 │41 │42 │43 │ 44 │47 │ 49 │17 │48 │
+ * └───┴────┴────┴────┴────────┴───┴──────────┴───────┴────────┘
+ */
+#define LAYOUT_1_b( \
+ Q00, Q01, Q02, Q03, Q04, Q05, Q06, Q07, Q08, Q09, Q0A, Q0B, Q0C, Q0D, Q0E, \
+ Q10, Q11, Q12, Q13, Q14, Q15, Q16, Q18, Q19, Q1A, Q1B, Q1C, Q1D, Q1E, \
+ Q20, Q21, Q22, Q23, Q24, Q25, Q26, Q28, Q29, Q2A, Q2B, Q2C, Q2D, Q2E, \
+ Q30, Q31, Q32, Q33, Q34, Q35, Q36, Q37, Q38, Q39, Q3A, Q3B, Q3C, Q3D, Q3E, \
+ Q40, Q41, Q42, Q43, Q44, Q47, Q49, Q17, Q48 \
+) { \
+ { Q00, Q01, Q02, Q03, Q04, Q05, Q06, Q07, Q08, Q09, Q0A, Q0B, Q0C, Q0D, Q0E }, \
+ { Q10, Q11, Q12, Q13, Q14, Q15, Q16, Q17, Q18, Q19, Q1A, Q1B, Q1C, Q1D, Q1E }, \
+ { Q20, Q21, Q22, Q23, Q24, Q25, Q26, XXX, Q28, Q29, Q2A, Q2B, Q2C, Q2D, Q2E }, \
+ { Q30, Q31, Q32, Q33, Q34, Q35, Q36, Q37, Q38, Q39, Q3A, Q3B, Q3C, Q3D, Q3E }, \
+ { Q40, Q41, Q42, Q43, Q44, XXX, XXX, Q47, Q48, Q49, XXX, XXX, XXX, XXX, XXX } \
+}
+
+/* LAYOUT_1_c
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │0E │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+ * │10 │11 │12 │13 │14 │15 │16 │18 │19 │1A │1B │1C │1D │1E │
+ * ├────┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬────┤
+ * │20 │21 │22 │23 │24 │25 │26 │ │28 │29 │2A │2B │2C │2D │2E │
+ * ├───┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴─┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬───┤
+ * │30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3C │3D │3E │
+ * ├───┼───┴┬──┴─┬─┴──┬┴───┴───┼───┼───┴───┼───┴─┬─┴──┬┴───┴───┤
+ * │40 │41 │42 │43 │ 44 │47 │ 49 │45 │27 │48 │
+ * └───┴────┴────┴────┴────────┴───┴───────┴─────┴────┴────────┘
+ */
+#define LAYOUT_1_c( \
+ Q00, Q01, Q02, Q03, Q04, Q05, Q06, Q07, Q08, Q09, Q0A, Q0B, Q0C, Q0D, Q0E, \
+ Q10, Q11, Q12, Q13, Q14, Q15, Q16, Q18, Q19, Q1A, Q1B, Q1C, Q1D, Q1E, \
+ Q20, Q21, Q22, Q23, Q24, Q25, Q26, Q28, Q29, Q2A, Q2B, Q2C, Q2D, Q2E, \
+ Q30, Q31, Q32, Q33, Q34, Q35, Q36, Q37, Q38, Q39, Q3A, Q3B, Q3C, Q3D, Q3E, \
+ Q40, Q41, Q42, Q43, Q44, Q47, Q49, Q45, Q27, Q48 \
+) { \
+ { Q00, Q01, Q02, Q03, Q04, Q05, Q06, Q07, Q08, Q09, Q0A, Q0B, Q0C, Q0D, Q0E }, \
+ { Q10, Q11, Q12, Q13, Q14, Q15, Q16, XXX, Q18, Q19, Q1A, Q1B, Q1C, Q1D, Q1E }, \
+ { Q20, Q21, Q22, Q23, Q24, Q25, Q26, Q27, Q28, Q29, Q2A, Q2B, Q2C, Q2D, Q2E }, \
+ { Q30, Q31, Q32, Q33, Q34, Q35, Q36, Q37, Q38, Q39, Q3A, Q3B, Q3C, Q3D, Q3E }, \
+ { Q40, Q41, Q42, Q43, Q44, Q45, XXX, Q47, Q48, Q49, XXX, XXX, XXX, XXX, XXX } \
+}
+
+
+/* LAYOUT_2_a
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │0E │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+ * │10 │11 │12 │13 │14 │15 │16 │18 │19 │1A │1B │1C │1D │1E │
+ * ├────┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬────┤
+ * │20 │21 │22 │23 │24 │25 │26 │ │28 │29 │2A │2B │2C │2D │2E │
+ * ├───┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴─┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬───┤
+ * │30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3C │3D │3E │
+ * ├───┴─┬─┴──┬┴───┴┬──┴───┴───┼───┼───┴───┼───┼───┼───┼───┼───┤
+ * │41 │42 │43 │ 44 │47 │ 49 │4A │4B │4C │4D │4E │
+ * └─────┴────┴─────┴──────────┴───┴───────┴───┴───┴───┴───┴───┘
+ */
+#define LAYOUT_2_a( \
+ Q00, Q01, Q02, Q03, Q04, Q05, Q06, Q07, Q08, Q09, Q0A, Q0B, Q0C, Q0D, Q0E, \
+ Q10, Q11, Q12, Q13, Q14, Q15, Q16, Q18, Q19, Q1A, Q1B, Q1C, Q1D, Q1E, \
+ Q20, Q21, Q22, Q23, Q24, Q25, Q26, Q28, Q29, Q2A, Q2B, Q2C, Q2D, Q2E, \
+ Q30, Q31, Q32, Q33, Q34, Q35, Q36, Q37, Q38, Q39, Q3A, Q3B, Q3C, Q3D, Q3E, \
+ Q41, Q42, Q43, Q44, Q47, Q49, Q4A, Q4B, Q4C, Q4D, Q4E \
+) { \
+ { Q00, Q01, Q02, Q03, Q04, Q05, Q06, Q07, Q08, Q09, Q0A, Q0B, Q0C, Q0D, Q0E }, \
+ { Q10, Q11, Q12, Q13, Q14, Q15, Q16, XXX, Q18, Q19, Q1A, Q1B, Q1C, Q1D, Q1E }, \
+ { Q20, Q21, Q22, Q23, Q24, Q25, Q26, XXX, Q28, Q29, Q2A, Q2B, Q2C, Q2D, Q2E }, \
+ { Q30, Q31, Q32, Q33, Q34, Q35, Q36, Q37, Q38, Q39, Q3A, Q3B, Q3C, Q3D, Q3E }, \
+ { XXX, Q41, Q42, Q43, Q44, XXX, XXX, Q47, XXX, Q49, Q4A, Q4B, Q4C, Q4D, Q4E } \
+}
+
+
+
+/* LAYOUT_2_b
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │0E │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+ * │10 │11 │12 │13 │14 │15 │16 │18 │19 │1A │1B │1C │1D │1E │
+ * ├────┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬────┤
+ * │20 │21 │22 │23 │24 │25 │26 │ │28 │29 │2A │2B │2C │2D │2E │
+ * ├───┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴─┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬───┤
+ * │30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3C │3D │3E │
+ * ├───┴─┬─┴──┬┴───┴┬──┴───┴───┼───┼───┴───┴──┬┴───┴──┬┴───┴───┤
+ * │41 │42 │43 │ 44 │47 │ 49 │17 │48 │
+ * └─────┴────┴─────┴──────────┴───┴──────────┴───────┴────────┘
+ */
+#define LAYOUT_2_b( \
+ Q00, Q01, Q02, Q03, Q04, Q05, Q06, Q07, Q08, Q09, Q0A, Q0B, Q0C, Q0D, Q0E, \
+ Q10, Q11, Q12, Q13, Q14, Q15, Q16, Q18, Q19, Q1A, Q1B, Q1C, Q1D, Q1E, \
+ Q20, Q21, Q22, Q23, Q24, Q25, Q26, Q28, Q29, Q2A, Q2B, Q2C, Q2D, Q2E, \
+ Q30, Q31, Q32, Q33, Q34, Q35, Q36, Q37, Q38, Q39, Q3A, Q3B, Q3C, Q3D, Q3E, \
+ Q41, Q42, Q43, Q44, Q47, Q49, Q17, Q48 \
+) { \
+ { Q00, Q01, Q02, Q03, Q04, Q05, Q06, Q07, Q08, Q09, Q0A, Q0B, Q0C, Q0D, Q0E }, \
+ { Q10, Q11, Q12, Q13, Q14, Q15, Q16, Q17, Q18, Q19, Q1A, Q1B, Q1C, Q1D, Q1E }, \
+ { Q20, Q21, Q22, Q23, Q24, Q25, Q26, XXX, Q28, Q29, Q2A, Q2B, Q2C, Q2D, Q2E }, \
+ { Q30, Q31, Q32, Q33, Q34, Q35, Q36, Q37, Q38, Q39, Q3A, Q3B, Q3C, Q3D, Q3E }, \
+ { XXX, Q41, Q42, Q43, Q44, XXX, XXX, Q47, Q48, Q49, XXX, XXX, XXX, XXX, XXX } \
+}
+
+/* LAYOUT_2_c
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │0E │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+ * │10 │11 │12 │13 │14 │15 │16 │18 │19 │1A │1B │1C │1D │1E │
+ * ├────┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬────┤
+ * │20 │21 │22 │23 │24 │25 │26 │ │28 │29 │2A │2B │2C │2D │2E │
+ * ├───┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴─┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬───┤
+ * │30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3C │3D │3E │
+ * ├───┼───┴┬──┴─┬─┴──┬┴───┴───┼───┼───┴───┼───┴─┬─┴──┬┴───┴───┤
+ * │40 │41 │42 │43 │ 44 │47 │ 49 │45 │27 │48 │
+ * └───┴────┴────┴────┴────────┴───┴───────┴─────┴────┴────────┘
+ */
+#define LAYOUT_2_c( \
+ Q00, Q01, Q02, Q03, Q04, Q05, Q06, Q07, Q08, Q09, Q0A, Q0B, Q0C, Q0D, Q0E, \
+ Q10, Q11, Q12, Q13, Q14, Q15, Q16, Q18, Q19, Q1A, Q1B, Q1C, Q1D, Q1E, \
+ Q20, Q21, Q22, Q23, Q24, Q25, Q26, Q28, Q29, Q2A, Q2B, Q2C, Q2D, Q2E, \
+ Q30, Q31, Q32, Q33, Q34, Q35, Q36, Q37, Q38, Q39, Q3A, Q3B, Q3C, Q3D, Q3E, \
+ Q41, Q42, Q43, Q44, Q47, Q49, Q45, Q27, Q48 \
+) { \
+ { Q00, Q01, Q02, Q03, Q04, Q05, Q06, Q07, Q08, Q09, Q0A, Q0B, Q0C, Q0D, Q0E }, \
+ { Q10, Q11, Q12, Q13, Q14, Q15, Q16, XXX, Q18, Q19, Q1A, Q1B, Q1C, Q1D, Q1E }, \
+ { Q20, Q21, Q22, Q23, Q24, Q25, Q26, Q27, Q28, Q29, Q2A, Q2B, Q2C, Q2D, Q2E }, \
+ { Q30, Q31, Q32, Q33, Q34, Q35, Q36, Q37, Q38, Q39, Q3A, Q3B, Q3C, Q3D, Q3E }, \
+ { XXX, Q41, Q42, Q43, Q44, Q45, XXX, Q47, Q48, Q49, XXX, XXX, XXX, XXX, XXX } \
+}
diff --git a/keyboards/rominronin/katana60/rev2/rules.mk b/keyboards/rominronin/katana60/rev2/rules.mk
new file mode 100644
index 000000000..000f55911
--- /dev/null
+++ b/keyboards/rominronin/katana60/rev2/rules.mk
@@ -0,0 +1,22 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/spaceman/2_milk/keymaps/via/rules.mk b/keyboards/spaceman/2_milk/keymaps/via/rules.mk
index 43061db1d..36b7ba9cb 100644
--- a/keyboards/spaceman/2_milk/keymaps/via/rules.mk
+++ b/keyboards/spaceman/2_milk/keymaps/via/rules.mk
@@ -1,2 +1,2 @@
VIA_ENABLE = yes
-LTO_ENABLE = yes \ No newline at end of file
+LTO_ENABLE = yes
diff --git a/keyboards/spaceman/2_milk/rules.mk b/keyboards/spaceman/2_milk/rules.mk
index 4e6c5f703..b93e8d3a4 100644
--- a/keyboards/spaceman/2_milk/rules.mk
+++ b/keyboards/spaceman/2_milk/rules.mk
@@ -16,7 +16,7 @@ BOOTLOADER = caterina
#
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
MOUSEKEY_ENABLE = no # Mouse keys
-EXTRAKEY_ENABLE = no # Audio control and System control
+EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = yes # Console for debug
COMMAND_ENABLE = yes # Commands for debug and configuration
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/spiderisland/split78/config.h b/keyboards/spiderisland/split78/config.h
new file mode 100644
index 000000000..a7ec160fa
--- /dev/null
+++ b/keyboards/spiderisland/split78/config.h
@@ -0,0 +1,35 @@
+/*
+Copyright 2020 unrelenting.technology
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0xF4E4
+#define DEVICE_VER 0x0001
+#define MANUFACTURER SpiderIsland
+#define PRODUCT Split 78-key
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 14
+
+#define BACKLIGHT_PIN D4
+#define BACKLIGHT_LEVELS 3
+#define BACKLIGHT_BREATHING
diff --git a/keyboards/spiderisland/split78/info.json b/keyboards/spiderisland/split78/info.json
new file mode 100644
index 000000000..7a96efe76
--- /dev/null
+++ b/keyboards/spiderisland/split78/info.json
@@ -0,0 +1,94 @@
+{
+ "keyboard_name": "Spider Island 78-key split",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 16,
+ "height": 6.25,
+ "layouts": {
+ "LAYOUT": {
+ "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": 8.5, "y": 0},
+ {"x": 9.5, "y": 0},
+ {"x": 10.5, "y": 0},
+ {"x": 12, "y": 0},
+ {"x": 13, "y": 0},
+ {"x": 14, "y": 0},
+ {"x": 15, "y": 0},
+ {"x": 0, "y": 1.25},
+ {"x": 1, "y": 1.25},
+ {"x": 2, "y": 1.25},
+ {"x": 3, "y": 1.25},
+ {"x": 4, "y": 1.25},
+ {"x": 5, "y": 1.25},
+ {"x": 6, "y": 1.25},
+ {"x": 8, "y": 1.25},
+ {"x": 9, "y": 1.25},
+ {"x": 10, "y": 1.25},
+ {"x": 11, "y": 1.25},
+ {"x": 12, "y": 1.25},
+ {"x": 13, "y": 1.25},
+ {"x": 14, "y": 1.25, "w": 2},
+ {"x": 0, "y": 2.25, "w": 1.5},
+ {"x": 1.5, "y": 2.25},
+ {"x": 2.5, "y": 2.25},
+ {"x": 3.5, "y": 2.25},
+ {"x": 4.5, "y": 2.25},
+ {"x": 5.5, "y": 2.25},
+ {"x": 7.5, "y": 2.25},
+ {"x": 8.5, "y": 2.25},
+ {"x": 9.5, "y": 2.25},
+ {"x": 10.5, "y": 2.25},
+ {"x": 11.5, "y": 2.25},
+ {"x": 12.5, "y": 2.25},
+ {"x": 13.5, "y": 2.25},
+ {"x": 14.5, "y": 2.25, "w": 1.5},
+
+ {"x": 0, "y": 3.25, "w": 1.75},
+ {"x": 1.75, "y": 3.25},
+ {"x": 2.75, "y": 3.25},
+ {"x": 3.75, "y": 3.25},
+ {"x": 4.75, "y": 3.25},
+ {"x": 5.75, "y": 3.25},
+ {"x": 7.75, "y": 3.25},
+ {"x": 8.75, "y": 3.25},
+ {"x": 9.75, "y": 3.25},
+ {"x": 10.75, "y": 3.25},
+ {"x": 11.75, "y": 3.25},
+ {"x": 12.75, "y": 3.25},
+ {"x": 13.75, "y": 3.25, "w": 2.25},
+
+ {"x": 0, "y": 4.25, "w": 2.25},
+ {"x": 2.25, "y": 4.25},
+ {"x": 3.25, "y": 4.25},
+ {"x": 4.25, "y": 4.25},
+ {"x": 5.25, "y": 4.25},
+ {"x": 6.25, "y": 4.25},
+ {"x": 8.25, "y": 4.25},
+ {"x": 9.25, "y": 4.25},
+ {"x": 10.25, "y": 4.25},
+ {"x": 11.25, "y": 4.25},
+ {"x": 12.25, "y": 4.25, "w": 1.75},
+ {"x": 14, "y": 4.25},
+ {"x": 15, "y": 4.25},
+
+ {"x": 0, "y": 5.25, "w": 1.25},
+ {"x": 1.25, "y": 5.25, "w": 1.25},
+ {"x": 2.5, "y": 5.25, "w": 1.25},
+ {"x": 3.75, "y": 5.25, "w": 1.25},
+ {"x": 5, "y": 5.25, "w": 2.25},
+ {"x": 8.25, "y": 5.25, "w": 2.25},
+ {"x": 10.5, "y": 5.25, "w": 1.25},
+ {"x": 11.75, "y": 5.25, "w": 1.25},
+ {"x": 13, "y": 5.25},
+ {"x": 14, "y": 5.25},
+ {"x": 15, "y": 5.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/spiderisland/split78/keymaps/default/keymap.c b/keyboards/spiderisland/split78/keymaps/default/keymap.c
new file mode 100644
index 000000000..761648d95
--- /dev/null
+++ b/keyboards/spiderisland/split78/keymaps/default/keymap.c
@@ -0,0 +1,41 @@
+/* Copyright 2020 unrelenting.technology
+ *
+ * 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
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+ _BASE,
+ _FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT(
+ KC_GESC, 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_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_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_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_SCLN, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, KC_UP, KC_SLSH,
+ KC_LCTL, KC_LGUI, KC_LALT, TT(_FN), KC_SPC, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [_FN] = LAYOUT(
+ RESET, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, BL_INC, KC_DEL,
+ KC_NLCK, XXXXXXX, KC_UP, XXXXXXX, XXXXXXX, XXXXXXX, KC_P7, KC_P8, KC_P9, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ BL_TOGG, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, KC_P4, KC_P5, KC_P6, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_SLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_P1, KC_P2, KC_P3, XXXXXXX, KC_SLSH, KC_PGUP, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_P0, KC_PDOT, KC_PENT, KC_HOME, KC_PGDN, KC_END
+ )
+};
diff --git a/keyboards/spiderisland/split78/matrix.c b/keyboards/spiderisland/split78/matrix.c
new file mode 100644
index 000000000..b5c7028fd
--- /dev/null
+++ b/keyboards/spiderisland/split78/matrix.c
@@ -0,0 +1,155 @@
+/*
+Copyright 2017 Luiz Ribeiro <luizribeiro@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 <string.h>
+#include <stdio.h>
+#include "quantum.h"
+#include "i2c_master.h"
+#include "split78.h"
+
+#define RIGHT_HALF
+
+
+void matrix_set_row_status(uint8_t row);
+
+
+#if defined(RIGHT_HALF)
+#define I2C_TIMEOUT 10
+#define MCP23018_TWI_ADDRESS 0b0100000
+#define TW_READ 1
+#define TW_WRITE 0
+#define TWI_ADDR_WRITE ( (MCP23018_TWI_ADDRESS<<1) | TW_WRITE )
+#define TWI_ADDR_READ ( (MCP23018_TWI_ADDRESS<<1) | TW_READ )
+#define IODIRA 0x00 // i/o direction register
+#define IODIRB 0x01
+#define IODIRA 0x00 // i/o direction register
+#define IODIRB 0x01
+#define GPPUA 0x0C // GPIO pull-up resistor register
+#define GPPUB 0x0D
+#define GPIOA 0x12 // general purpose i/o port register (write modifies OLAT)
+#define GPIOB 0x13
+#define OLATA 0x14 // output latch register
+#define OLATB 0x15
+#define MCP_ROWS_START 8
+
+static uint8_t mcp23018_init(void) {
+ uint8_t ret;
+ uint8_t data[3];
+ // set pin direction
+ // - unused : input : 1
+ // - input : input : 1
+ // - driving : output : 0
+ data[0] = IODIRA;
+ data[1] = 0b00000000; // IODIRA
+ data[2] = (0b11111111); // IODIRB
+
+ ret = i2c_transmit(TWI_ADDR_WRITE, (uint8_t *)data, 3, I2C_TIMEOUT);
+ if (ret) goto out; // make sure we got an ACK
+
+ // set pull-up
+ // - unused : on : 1
+ // - input : on : 1
+ // - driving : off : 0
+ data[0] = GPPUA;
+ data[1] = 0b00000000; // IODIRA
+ data[2] = (0b11111111); // IODIRB
+
+ ret = i2c_transmit(TWI_ADDR_WRITE, (uint8_t *)data, 3, I2C_TIMEOUT);
+ if (ret) goto out; // make sure we got an ACK
+
+ // set logical value (doesn't matter on inputs)
+ // - unused : hi-Z : 1
+ // - input : hi-Z : 1
+ // - driving : hi-Z : 1
+ data[0] = OLATA;
+ data[1] = 0b11111111; // IODIRA
+ data[2] = (0b11111111); // IODIRB
+
+ ret = i2c_transmit(TWI_ADDR_WRITE, (uint8_t *)data, 3, I2C_TIMEOUT);
+
+out:
+ return ret;
+}
+#endif
+
+void matrix_init_custom(void) {
+ // Set rows as output starting high
+ DDRB = 0xFF;
+ PORTB = 0xFF;
+
+ // Set columns as inputs with pull-up enabled
+ DDRA = 0x00;
+ PORTA = 0xFF;
+
+ // Initialize i2c communication
+ i2c_init();
+
+#if defined(RIGHT_HALF)
+ // Initialize the chip on the other half
+ mcp23018_init();
+#endif
+
+}
+
+bool matrix_scan_custom(matrix_row_t current_matrix[]) {
+ bool matrix_has_changed = false;
+
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ // Store last value of row prior to reading
+ matrix_row_t last_row_value = current_matrix[row];
+
+ matrix_row_t cols = 0;
+ // Select the row to scan
+ matrix_set_row_status(row);
+
+ matrix_io_delay();
+ //Set the local row
+
+#if defined(RIGHT_HALF)
+ // Initialize to 0x7F in case I2C read fails,
+ // as 0x75 would be no keys pressed
+ uint8_t data = 0x7F;
+ // Receive the columns from right half
+ i2c_receive(TWI_ADDR_WRITE, &data, 1, I2C_TIMEOUT);
+#endif
+
+ cols |= ((~(PINA | 0x80)) & 0x7F);
+#if defined(RIGHT_HALF)
+ cols |= (((~(data | 0x80)) & 0x7F) << 7);
+#endif
+
+ current_matrix[row] = cols;
+ matrix_has_changed |= (last_row_value != current_matrix[row]);
+ }
+
+ return matrix_has_changed;
+}
+
+void matrix_set_row_status(uint8_t row) {
+#if defined(RIGHT_HALF)
+ uint8_t txdata[3];
+
+ //Set the remote row on port A
+ txdata[0] = (GPIOA);
+ txdata[1] = ( 0xFF & ~(1<<row) );
+ i2c_transmit(TWI_ADDR_WRITE, (uint8_t *)txdata, 2, I2C_TIMEOUT);
+#endif
+
+ //Set the local row on port B
+ DDRB = (1 << row);
+ PORTB = ~(1 << row);
+}
diff --git a/keyboards/spiderisland/split78/readme.md b/keyboards/spiderisland/split78/readme.md
new file mode 100644
index 000000000..704ffcd26
--- /dev/null
+++ b/keyboards/spiderisland/split78/readme.md
@@ -0,0 +1,25 @@
+# SpiderIsland Split 78-key
+
+![Board Photo](https://i.imgur.com/N3DjdGql.jpg)
+[Image Gallery](https://imgur.com/a/0AUY8Ng)
+
+The 78 key split keyboard from [SpiderIsland on AliExpress](https://a.aliexpress.com/_dVJsSpR).
+Out of the box it runs ps2avrGB firmware, like [`split75`](../../wheatfield/split75/README.md).
+It is mistakenly called "87 key" on the AliExpress title and "104 key" (?!) in the caption inside the photo.
+
+This port is based on the `split75` port which was mostly done by [Michael L. Walker](https://github.com/walkerstop).
+
+* Keyboard Maintainer: [unrelenting.technology](https://github.com/myfreeweb)
+* Hardware Availability: https://a.aliexpress.com/_dVJsSpR
+
+Make example for this keyboard (after setting up your build environment):
+
+ make spiderisland/split78:default
+
+Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
+
+ make spiderisland/split78:default:flash
+
+**Reset Key**: Hold down the key located at the leftmost position in the top row, commonly programmed as Escape while plugging in the keyboard.
+
+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/spiderisland/split78/rules.mk b/keyboards/spiderisland/split78/rules.mk
new file mode 100644
index 000000000..61015b97f
--- /dev/null
+++ b/keyboards/spiderisland/split78/rules.mk
@@ -0,0 +1,24 @@
+# MCU name
+MCU = atmega32a
+
+# Bootloader selection
+BOOTLOADER = bootloadHID
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+WS2812_DRIVER = i2c
+
+# custom matrix setup
+CUSTOM_MATRIX = lite
+SRC += matrix.c
+QUANTUM_LIB_SRC += i2c_master.c
diff --git a/keyboards/spiderisland/split78/split78.c b/keyboards/spiderisland/split78/split78.c
new file mode 100644
index 000000000..030101274
--- /dev/null
+++ b/keyboards/spiderisland/split78/split78.c
@@ -0,0 +1,17 @@
+/* Copyright 2020 unrelenting.technology
+ *
+ * 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 "split78.h"
diff --git a/keyboards/spiderisland/split78/split78.h b/keyboards/spiderisland/split78/split78.h
new file mode 100644
index 000000000..2f6252f0c
--- /dev/null
+++ b/keyboards/spiderisland/split78/split78.h
@@ -0,0 +1,36 @@
+/* Copyright 2020 unrelenting.technology
+ *
+ * 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( \
+ l00, l01, l02, l03, l04, l05, r00, r01, r02, r03, r04, r05, r06, \
+ l06, l07, l08, l09, l10, l11, l12, r07, r08, r09, r10, r11, r12, r13, \
+ l13, l14, l15, l16, l17, l18, r14, r15, r16, r17, r18, r19, r20, r21, \
+ l19, l20, l21, l22, l23, l24, r22, r23, r24, r25, r26, r27, r28, \
+ l25, l26, l27, l28, l29, l30, r29, r30, r31, r32, r33, r34, r35, \
+ l31, l32, l33, l34, l35, r36, r37, r38, r39, r40, r41 \
+) { \
+ { l00, l06, l13, l19, l25, l31, KC_NO, r00, r07, r14, r22, r29, r21 }, \
+ { l01, l07, l14, l20, l26, l32, KC_NO, r01, r08, r15, r23, r30, r36 }, \
+ { l02, l08, l15, l21, l27, l33, KC_NO, r02, r09, r16, r24, r31, r37 }, \
+ { l03, l09, l16, l22, l28, l34, KC_NO, r03, r10, r17, r25, r32, r38 }, \
+ { l04, l10, l17, l23, l29, l35, KC_NO, r04, r11, r18, r27, r33, r39 }, \
+ { l05, l11, l18, l24, l30, l12, KC_NO, r05, r12, r19, r26, r34, r40 }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, r06, r13, r20, r28, r35, r41 }, \
+}
diff --git a/keyboards/thevankeyboards/minivan/keymaps/king/keymap.c b/keyboards/thevankeyboards/minivan/keymaps/king/keymap.c
index bcfbad2e0..032aaf5c7 100644
--- a/keyboards/thevankeyboards/minivan/keymaps/king/keymap.c
+++ b/keyboards/thevankeyboards/minivan/keymaps/king/keymap.c
@@ -1,3 +1,19 @@
+ /* Copyright 2020 King Wang Wong
+ *
+ * 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
@@ -17,17 +33,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────────┐
* │ ESC │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │BKSPC │
* ├─────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────────┤
- * │ TAB │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │' │
+ * │ TAB │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ENTER │
* ├──────┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬─────┤
- * │ LSHFT │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ENTER│
+ * │ LSHFT │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │' │
* ├────────┬┴─────┴─┬───┴─┬───┴─────┴──┬──┴─────┴─────┴─┬───┴─┬───┴─┬───┴─────┤
- * │LCTRL │ LGUI │ LALT│SPACE(_NL) │MO(_NL) │MO SL│ │MO(RL │
+ * │LCTRL │ LGUI │ LALT│SPACE(_NL) │MO(_NL) │MO_SL│ │MO(RL │
* └────────┴────────┴─────┴────────────┴────────────────┴─────┴─────┴─────────┘
*/
[_ML] = LAYOUT(
KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
- KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, 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_QUOT,
KC_LCTL, KC_LGUI, KC_LALT, SPC_FUN, MO(_NL), MO(_SL), XXXXXXX, MO(_RL)
),
@@ -36,7 +52,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────────┐
* │ │ │HOME │ UP │END │PGUP │ │ F1 │ F2 │ F3 │ F4 │ │
* ├─────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────────┤
- * │ CAPS │ │LEFT │DOWN │RIGHT│PGDN │ │ F5 │ F6 │ F7 │ F8 │ │
+ * │ CAPS │ │LEFT │DOWN │RIGHT│PGDN │ │ F5 │ F6 │ F7 │ F8 │ QUOT │
* ├──────┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬─────┤
* │ │ │ │ DEL │ INS │ │ │ F9 │ F10 │ F11 │ F12 │ │
* ├────────┬┴─────┴─┬───┴─┬───┴─────┴──┬──┴─────┴─────┴─┬───┴─┬───┴─┬───┴─────┤
@@ -45,7 +61,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
[_FL] = LAYOUT(
_______, XXXXXXX, KC_HOME, KC_UP, KC_END, KC_PGUP, XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, _______,
- KC_CAPS, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, XXXXXXX, KC_F5, KC_F6, KC_F7, KC_F8, _______,
+ KC_CAPS, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, XXXXXXX, KC_F5, KC_F6, KC_F7, KC_F8, KC_QUOT,
_______, XXXXXXX, XXXXXXX, KC_DEL, KC_INS, XXXXXXX, XXXXXXX, KC_F9, KC_F10, KC_F11, KC_F12, _______,
_______, _______, _______, _______, _______, _______, _______, _______
),
diff --git a/keyboards/tkw/stoutgat/v2/f411/rules.mk b/keyboards/tkw/stoutgat/v2/f411/rules.mk
index 61add3aed..4f7f52e62 100644
--- a/keyboards/tkw/stoutgat/v2/f411/rules.mk
+++ b/keyboards/tkw/stoutgat/v2/f411/rules.mk
@@ -1,27 +1,5 @@
-## chip/board settings
-# the next two should match the directories in
-# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
-MCU_FAMILY = STM32
-MCU_SERIES = STM32F4xx
-# linker script to use
-# it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
-# or <this_dir>/ld/
-MCU_LDSCRIPT = STM32F411xE
-# startup code to use
-# is should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f4xx
-# it should exist either in <chibios>/os/hal/boards/
-# or <this_dir>/boards
-BOARD = BLACKPILL_STM32_F411
-# Cortex version
-# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
-MCU = cortex-m4
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 7
-USE_FPU = yes
-# Address of the booloader in system memory
-STM32_BOOTLOADER_ADDRESS = 0x1FFF0000
+# MCU name
+MCU = STM32F411
-# Options to pass to dfu-util when flashing
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-DFU_SUFFIX_ARGS = -v 0483 -p df11
+# Address of the bootloader in system memory
+STM32_BOOTLOADER_ADDRESS = 0x1FFF0000
diff --git a/keyboards/torn/config.h b/keyboards/torn/config.h
new file mode 100644
index 000000000..6cd6c2808
--- /dev/null
+++ b/keyboards/torn/config.h
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2020 Richard Titmuss <richard.titmuss@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 "config_common.h"
+
+/* USB Device descriptor parameter */
+/* VID & PID from vusb project, see tmk_core/protocol/vusb/USB-IDs-for-free.txt"*/
+#define VENDOR_ID 0x7274
+#define PRODUCT_ID 0x0001
+#define DEVICE_VER 0x0000
+#define MANUFACTURER richard.titmuss
+#define PRODUCT Torn
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 12
+
+/*
+ * 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 \
+ { D4, D1, D0, D5 }
+#define MATRIX_COL_PINS \
+ { B3, B4, B5, B0, D7, D6 }
+#define UNUSED_PINS
+
+#define SECONDARY_ROW_PINS \
+ { (1 << 5), (1 << 6), (1 << 7), (1 << 4) }
+#define SECONDARY_COL_PINS \
+ { (1 << 3), (1 << 2), (1 << 1), (1 << 0), (1 << 15), (1 << 14) }
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+#define ENCODERS_PAD_A \
+ { B2 }
+#define ENCODERS_PAD_B \
+ { B1 }
+
+#define USB_MAX_POWER_CONSUMPTION 100
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+#define OLED_TIMEOUT 60000
diff --git a/keyboards/torn/info.json b/keyboards/torn/info.json
new file mode 100644
index 000000000..340eb7359
--- /dev/null
+++ b/keyboards/torn/info.json
@@ -0,0 +1,57 @@
+{
+ "keyboard_name": "Torn / Split Through Hole",
+ "url": "https://github.com/rtitmuss/torn",
+ "maintainer": "rtitmuss",
+ "width": 15,
+ "height": 4.55,
+ "layouts": {
+ "LAYOUT_split_3x6_4": {
+ "layout": [
+ {"label":"SW1", "x":0, "y":0.375},
+ {"label":"SW2", "x":1, "y":0.375},
+ {"label":"SW3", "x":2, "y":0.125},
+ {"label":"SW4", "x":3, "y":0},
+ {"label":"SW5", "x":4, "y":0.125},
+ {"label":"SW6", "x":5, "y":0.25},
+ {"label":"SW23", "x":9, "y":0.25},
+ {"label":"SW24", "x":10, "y":0.125},
+ {"label":"SW25", "x":11, "y":0},
+ {"label":"SW26", "x":12, "y":0.125},
+ {"label":"SW27", "x":13, "y":0.375},
+ {"label":"SW28", "x":14, "y":0.375},
+ {"label":"SW7", "x":0, "y":1.375},
+ {"label":"SW8", "x":1, "y":1.375},
+ {"label":"SW9", "x":2, "y":1.125},
+ {"label":"SW10", "x":3, "y":1},
+ {"label":"SW11", "x":4, "y":1.125},
+ {"label":"SW12", "x":5, "y":1.25},
+ {"label":"SW29", "x":9, "y":1.25},
+ {"label":"SW30", "x":10, "y":1.125},
+ {"label":"SW31", "x":11, "y":1},
+ {"label":"SW32", "x":12, "y":1.125},
+ {"label":"SW33", "x":13, "y":1.375},
+ {"label":"SW34", "x":14, "y":1.375},
+ {"label":"SW13", "x":0, "y":2.375},
+ {"label":"SW14", "x":1, "y":2.375},
+ {"label":"SW15", "x":2, "y":2.125},
+ {"label":"SW16", "x":3, "y":2},
+ {"label":"SW17", "x":4, "y":2.125},
+ {"label":"SW18", "x":5, "y":2.25},
+ {"label":"SW35", "x":9, "y":2.25},
+ {"label":"SW36", "x":10, "y":2.125},
+ {"label":"SW37", "x":11, "y":2},
+ {"label":"SW38", "x":12, "y":2.125},
+ {"label":"SW39", "x":13, "y":2.375},
+ {"label":"SW40", "x":14, "y":2.375},
+ {"label":"SW19", "x":3, "y":3.1},
+ {"label":"SW20", "x":4, "y":3.25},
+ {"label":"SW21", "x":5, "y":3.40},
+ {"label":"SW22", "x":6, "y":3.55},
+ {"label":"SW41", "x":8, "y":3.55},
+ {"label":"SW42", "x":9, "y":3.40},
+ {"label":"SW43", "x":10, "y":3.25},
+ {"label":"SW44", "x":11, "y":3.1}
+ ]
+ }
+ }
+}
diff --git a/keyboards/torn/keymaps/default/keymap.c b/keyboards/torn/keymaps/default/keymap.c
new file mode 100644
index 000000000..7c91325bd
--- /dev/null
+++ b/keyboards/torn/keymaps/default/keymap.c
@@ -0,0 +1,119 @@
+/* Copyright 2020 Richard Titmuss (richard.titmuss@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 torn_layers { _QWERTY, _LOWER, _RAISE, _ADJUST };
+
+#define S_BSPC LSFT_T(KC_BSPC)
+#define R_DEL LT(_RAISE, KC_DEL)
+#define G_ENT LGUI_T(KC_ENT)
+#define L_SPC LT(_LOWER, KC_SPC)
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | Tab | Q | W | E | R | T | | Y | U | I | O | P | ' |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | ` | A | S | D | F | G | | H | J | K | L | ; | [ |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | \ | Z | X | C | V | B | | N | M | , | . | / | ] |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | ____ | Ctrl | Bksp | Del | |Enter |Space | Alt | ____ |
+ * | | |Shift |Raise | | Gui |Lower | | |
+ * `---------------------------' `---------------------------'
+ */
+[_QWERTY] = LAYOUT_split_3x6_4(
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_QUOT,
+ KC_GRV, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_LBRC,
+ KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RBRC ,
+ _______, KC_LCTL, S_BSPC, R_DEL, G_ENT, L_SPC, KC_RALT, _______
+),
+
+/* Lower
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | Esc | ! | @ | # | $ | % | | ^ | & | * | ( | ) | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | = | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | _ | | | | | | | | | , | . | / | + |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | ____ | Ctrl | Bksp | Del | |Enter |Space | Alt | ____ |
+ * | | |Shift |Raise | | Gui |Lower | | |
+ * `---------------------------' `---------------------------'
+ */
+[_LOWER] = LAYOUT_split_3x6_4(
+ KC_ESC, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
+ KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_PMNS,
+ KC_UNDS, _______, _______, _______, _______, _______, _______, _______, KC_COMM, KC_DOT, KC_SLSH, KC_PPLS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+),
+
+/* Raise
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | | F1 | F2 | F3 | F4 | F5 | | | & | * | ( | ) | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | F6 | F7 | F8 | F9 | F10 | | Home | Left | Down | Right| End | PgUp |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | F11 | F12 | | | | | | | | | | PgDn |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | ____ | Ctrl | Bksp | Del | |Enter |Space | Alt | ____ |
+ * | | |Shift |Raise | | Gui |Lower | | |
+ * `---------------------------' `---------------------------'
+ */
+[_RAISE] = LAYOUT_split_3x6_4(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, S(A(KC_LEFT)), KC_UP, S(A(KC_RGHT)), _______, _______,
+ _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_PGUP,
+ _______, KC_F11, KC_F12, _______, _______, _______, A(KC_BSPC), A(KC_LEFT), S(KC_DOWN), A(KC_RGHT), _______, KC_PGDN ,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | ____ | Ctrl | Bksp | Del | |Enter |Space | Alt | ____ |
+ * | | |Shift |Raise | | Gui |Lower | | |
+ * `---------------------------' `---------------------------'
+ */
+[_ADJUST] = LAYOUT_split_3x6_4(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+)
+
+};
+
+const uint16_t PROGMEM encoder_keymaps[][2][2] = {
+ [_QWERTY] = { { C(S(KC_TAB)), C(KC_TAB) }, { KC_PGDN, KC_PGUP } },
+ [_LOWER] = { { C(KC_LEFT), C(KC_RGHT) }, { KC__VOLDOWN, KC__VOLUP } },
+ [_RAISE] = { { KC_TRNS, KC_TRNS }, { G(KC_TAB), G(S(KC_TAB)) } },
+ [_ADJUST] = { { KC_TRNS, KC_TRNS }, { KC_TRNS, KC_TRNS } },
+};
+// clang-format on
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ torn_set_led(0, IS_LAYER_ON_STATE(state, _RAISE));
+ torn_set_led(1, IS_LAYER_ON_STATE(state, _LOWER));
+ return state;
+}
diff --git a/keyboards/torn/keymaps/via/keymap.c b/keyboards/torn/keymaps/via/keymap.c
new file mode 100644
index 000000000..7c91325bd
--- /dev/null
+++ b/keyboards/torn/keymaps/via/keymap.c
@@ -0,0 +1,119 @@
+/* Copyright 2020 Richard Titmuss (richard.titmuss@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 torn_layers { _QWERTY, _LOWER, _RAISE, _ADJUST };
+
+#define S_BSPC LSFT_T(KC_BSPC)
+#define R_DEL LT(_RAISE, KC_DEL)
+#define G_ENT LGUI_T(KC_ENT)
+#define L_SPC LT(_LOWER, KC_SPC)
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | Tab | Q | W | E | R | T | | Y | U | I | O | P | ' |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | ` | A | S | D | F | G | | H | J | K | L | ; | [ |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | \ | Z | X | C | V | B | | N | M | , | . | / | ] |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | ____ | Ctrl | Bksp | Del | |Enter |Space | Alt | ____ |
+ * | | |Shift |Raise | | Gui |Lower | | |
+ * `---------------------------' `---------------------------'
+ */
+[_QWERTY] = LAYOUT_split_3x6_4(
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_QUOT,
+ KC_GRV, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_LBRC,
+ KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RBRC ,
+ _______, KC_LCTL, S_BSPC, R_DEL, G_ENT, L_SPC, KC_RALT, _______
+),
+
+/* Lower
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | Esc | ! | @ | # | $ | % | | ^ | & | * | ( | ) | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | = | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | _ | | | | | | | | | , | . | / | + |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | ____ | Ctrl | Bksp | Del | |Enter |Space | Alt | ____ |
+ * | | |Shift |Raise | | Gui |Lower | | |
+ * `---------------------------' `---------------------------'
+ */
+[_LOWER] = LAYOUT_split_3x6_4(
+ KC_ESC, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
+ KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_PMNS,
+ KC_UNDS, _______, _______, _______, _______, _______, _______, _______, KC_COMM, KC_DOT, KC_SLSH, KC_PPLS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+),
+
+/* Raise
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | | F1 | F2 | F3 | F4 | F5 | | | & | * | ( | ) | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | F6 | F7 | F8 | F9 | F10 | | Home | Left | Down | Right| End | PgUp |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | F11 | F12 | | | | | | | | | | PgDn |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | ____ | Ctrl | Bksp | Del | |Enter |Space | Alt | ____ |
+ * | | |Shift |Raise | | Gui |Lower | | |
+ * `---------------------------' `---------------------------'
+ */
+[_RAISE] = LAYOUT_split_3x6_4(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, S(A(KC_LEFT)), KC_UP, S(A(KC_RGHT)), _______, _______,
+ _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_PGUP,
+ _______, KC_F11, KC_F12, _______, _______, _______, A(KC_BSPC), A(KC_LEFT), S(KC_DOWN), A(KC_RGHT), _______, KC_PGDN ,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | ____ | Ctrl | Bksp | Del | |Enter |Space | Alt | ____ |
+ * | | |Shift |Raise | | Gui |Lower | | |
+ * `---------------------------' `---------------------------'
+ */
+[_ADJUST] = LAYOUT_split_3x6_4(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+)
+
+};
+
+const uint16_t PROGMEM encoder_keymaps[][2][2] = {
+ [_QWERTY] = { { C(S(KC_TAB)), C(KC_TAB) }, { KC_PGDN, KC_PGUP } },
+ [_LOWER] = { { C(KC_LEFT), C(KC_RGHT) }, { KC__VOLDOWN, KC__VOLUP } },
+ [_RAISE] = { { KC_TRNS, KC_TRNS }, { G(KC_TAB), G(S(KC_TAB)) } },
+ [_ADJUST] = { { KC_TRNS, KC_TRNS }, { KC_TRNS, KC_TRNS } },
+};
+// clang-format on
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ torn_set_led(0, IS_LAYER_ON_STATE(state, _RAISE));
+ torn_set_led(1, IS_LAYER_ON_STATE(state, _LOWER));
+ return state;
+}
diff --git a/keyboards/torn/keymaps/via/rules.mk b/keyboards/torn/keymaps/via/rules.mk
new file mode 100644
index 000000000..36b7ba9cb
--- /dev/null
+++ b/keyboards/torn/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/torn/matrix.c b/keyboards/torn/matrix.c
new file mode 100644
index 000000000..dd7fa1e2e
--- /dev/null
+++ b/keyboards/torn/matrix.c
@@ -0,0 +1,113 @@
+/*
+ * Copyright 2020 Richard Titmuss (richard.titmuss@gmail.com)
+ * Copyright 2012-2018 Jun Wako, Jack Humbert, 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/>.
+ */
+
+#include QMK_KEYBOARD_H
+#include "mcp23018.h"
+
+#define SPLIT_MATRIX_COLS (MATRIX_COLS / 2)
+#define SECONDARY_ROW_OFFSET (MATRIX_ROWS / 2)
+
+typedef uint16_t mcp23018_pin_t;
+
+static const pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
+static const pin_t col_pins[SPLIT_MATRIX_COLS] = MATRIX_COL_PINS;
+static const mcp23018_pin_t secondary_row_pins[MATRIX_ROWS] = SECONDARY_ROW_PINS;
+static const mcp23018_pin_t secondary_col_pins[SPLIT_MATRIX_COLS] = SECONDARY_COL_PINS;
+
+static void select_row(uint8_t row) {
+ setPinOutput(row_pins[row]);
+ writePinLow(row_pins[row]);
+}
+
+static void unselect_row(uint8_t row) { setPinInputHigh(row_pins[row]); }
+
+static void unselect_rows(void) {
+ for (uint8_t x = 0; x < MATRIX_ROWS; x++) {
+ setPinInputHigh(row_pins[x]);
+ }
+}
+
+static void select_secondary_row(uint8_t row) {
+ uint8_t gpioa = 0xFF & ~secondary_row_pins[row];
+ mcp23018_writeReg(GPIOA, &gpioa, 1);
+}
+
+static void init_pins(void) {
+ unselect_rows();
+ for (uint8_t x = 0; x < SPLIT_MATRIX_COLS; x++) {
+ setPinInputHigh(col_pins[x]);
+ }
+}
+
+static matrix_row_t read_cols(void) {
+ matrix_row_t state = 0;
+
+ // For each col...
+ for (uint8_t col_index = 0; col_index < SPLIT_MATRIX_COLS; col_index++) {
+ // Select the col pin to read (active low)
+ uint8_t pin_state = readPin(col_pins[col_index]);
+
+ // Populate the matrix row with the state of the col pin
+ state |= pin_state ? 0 : (MATRIX_ROW_SHIFTER << col_index);
+ }
+
+ return state;
+}
+
+static matrix_row_t read_secondary_cols(void) {
+ matrix_row_t state = 0;
+
+ uint8_t mcp23018_pin_state[2];
+ if (mcp23018_readReg(GPIOA, mcp23018_pin_state, 2)) {
+ return 0;
+ }
+
+ uint16_t pins = mcp23018_pin_state[0] | (mcp23018_pin_state[1] << 8);
+
+ for (uint8_t col_index = 0; col_index < SPLIT_MATRIX_COLS; col_index++) {
+ uint16_t pin_state = pins & (secondary_col_pins[col_index]);
+ state |= pin_state ? 0 : (MATRIX_ROW_SHIFTER << col_index);
+ }
+
+ return state;
+}
+
+static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) {
+ matrix_row_t last_row_value = current_matrix[current_row];
+
+ select_row(current_row);
+ select_secondary_row(current_row);
+
+ current_matrix[current_row] = read_cols() | (read_secondary_cols() << 6);
+
+ unselect_row(current_row);
+
+ return (last_row_value != current_matrix[current_row]);
+}
+
+void matrix_init_custom(void) { init_pins(); }
+
+bool matrix_scan_custom(matrix_row_t current_matrix[]) {
+ bool changed = false;
+
+ for (uint8_t current_row = 0; current_row < MATRIX_ROWS; current_row++) {
+ changed |= read_cols_on_row(current_matrix, current_row);
+ }
+
+ return changed;
+}
diff --git a/keyboards/torn/mcp23018.c b/keyboards/torn/mcp23018.c
new file mode 100644
index 000000000..c180f1dae
--- /dev/null
+++ b/keyboards/torn/mcp23018.c
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2020 Richard Titmuss (richard.titmuss@gmail.com)
+ * Copyright 2012-2018 Jun Wako, Jack Humbert, 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/>.
+ */
+
+#include QMK_KEYBOARD_H
+#include "i2c_master.h"
+#include "mcp23018.h"
+
+#define MCP23018_ADDR 0b0100000
+
+#define MCP23018_TIMEOUT 100
+
+static i2c_status_t mcp23018_status = I2C_STATUS_ERROR;
+
+void msp23018_init(void) {
+ mcp23018_status = I2C_STATUS_SUCCESS;
+
+ // Set pin direction
+ uint8_t iodir[] = {0b00001111, 0b11111111};
+ mcp23018_writeReg(IODIRA, iodir, 2);
+
+ // Set pull-up
+ uint8_t gppu[] = {0b00001111, 0b11111000};
+ mcp23018_writeReg(GPPUA, gppu, 2);
+
+ // LEDs output high
+ uint8_t gpio[] = {0b00000000, 0b00000111};
+ mcp23018_writeReg(GPIOA, gpio, 2);
+}
+
+bool mcp23018_reset_required(void) { return mcp23018_status != I2C_STATUS_SUCCESS; }
+
+i2c_status_t mcp23018_writeReg(uint8_t regaddr, const uint8_t* data, uint16_t length) {
+ if (mcp23018_status) {
+ return mcp23018_status;
+ }
+
+ mcp23018_status = i2c_writeReg((MCP23018_ADDR << 1), regaddr, data, length, MCP23018_TIMEOUT);
+ return mcp23018_status;
+}
+
+i2c_status_t mcp23018_readReg(uint8_t regaddr, uint8_t* data, uint16_t length) {
+ if (mcp23018_status) {
+ return mcp23018_status;
+ }
+
+ mcp23018_status = i2c_readReg((MCP23018_ADDR << 1), regaddr, data, length, MCP23018_TIMEOUT);
+ return mcp23018_status;
+}
diff --git a/keyboards/torn/mcp23018.h b/keyboards/torn/mcp23018.h
new file mode 100644
index 000000000..17ecaa5a7
--- /dev/null
+++ b/keyboards/torn/mcp23018.h
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2020 Richard Titmuss (richard.titmuss@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
+
+#define IODIRA 0x00
+#define IODIRB 0x01
+#define GPPUA 0x0C
+#define GPPUB 0x0D
+#define GPIOA 0x12
+#define GPIOB 0x13
+
+typedef int16_t mcp23018_status_t;
+
+void msp23018_init(void);
+bool mcp23018_reset_required(void);
+mcp23018_status_t mcp23018_writeReg(uint8_t regaddr, const uint8_t* data, uint16_t length);
+mcp23018_status_t mcp23018_readReg(uint8_t regaddr, uint8_t* data, uint16_t length);
diff --git a/keyboards/torn/readme.md b/keyboards/torn/readme.md
new file mode 100644
index 000000000..ffe9a2d9c
--- /dev/null
+++ b/keyboards/torn/readme.md
@@ -0,0 +1,21 @@
+# TORN// Split Through Hole
+
+![torn](https://raw.githubusercontent.com/rtitmuss/torn/master/doc/img/torn.jpg)
+
+The split keyboard kit made by through hole components only.
+
+The design has been inspired by the Corne, Plaid and Discipline keyboards.
+
+* Keyboard Maintainer: [rtitmuss](https://github.com/rtitmuss)
+* Hardware Supported: TORN, atmega328p
+* Hardware Availability: [GitHub](https://github.com/rtitmuss/torn)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make torn:default
+
+Flashing example for this keyboard:
+
+ make torn: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/torn/rules.mk b/keyboards/torn/rules.mk
new file mode 100644
index 000000000..caf544d13
--- /dev/null
+++ b/keyboards/torn/rules.mk
@@ -0,0 +1,27 @@
+# MCU name
+MCU = atmega328p
+
+# Bootloader selection
+BOOTLOADER = USBasp
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+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
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+ENCODER_ENABLE = yes # Enable rotary encoder
+OLED_DRIVER_ENABLE = yes
+CUSTOM_MATRIX = lite
+
+SRC += matrix.c \
+ mcp23018.c \
+ torn_encoder.c \
+ torn_oled.c
+QUANTUM_LIB_SRC += i2c_master.c
diff --git a/keyboards/torn/torn.c b/keyboards/torn/torn.c
new file mode 100644
index 000000000..ef5060e60
--- /dev/null
+++ b/keyboards/torn/torn.c
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2020 Richard Titmuss <richard.titmuss@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 "torn.h"
+#include "i2c_master.h"
+#include "mcp23018.h"
+
+static uint8_t led_state[3] = {1, 1, 1};
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+ i2c_init();
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+ if (mcp23018_reset_required()) {
+ msp23018_init();
+ secondary_encoder_init();
+ // torn_set_led(2, 1);
+ }
+
+ matrix_scan_user();
+ secondary_encoder_read();
+}
+
+void torn_set_led(uint8_t led, bool state) {
+ led_state[led] = !state;
+
+ // toggle leds by setting the pin direction
+ uint8_t iodir = 0b11111000 | led_state[0] << 2 | led_state[1] << 1 | led_state[2];
+ mcp23018_writeReg(IODIRB, &iodir, 1);
+}
diff --git a/keyboards/torn/torn.h b/keyboards/torn/torn.h
new file mode 100644
index 000000000..c25b5c2a0
--- /dev/null
+++ b/keyboards/torn/torn.h
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2020 Richard Titmuss <richard.titmuss@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 ___ KC_NO
+
+// clang-format off
+#define LAYOUT_split_3x6_4( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
+ k32, k33, k34, k35, k36, k37, k38, k39 \
+) { \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b }, \
+ { ___, ___, k32, k33, k34, k35, k36, k37, k38, k39, ___, ___ } \
+}
+// clang-format on
+
+void torn_set_led(uint8_t led, bool on);
+
+void secondary_encoder_read(void);
+void secondary_encoder_init(void);
diff --git a/keyboards/torn/torn_encoder.c b/keyboards/torn/torn_encoder.c
new file mode 100644
index 000000000..ef9b0873f
--- /dev/null
+++ b/keyboards/torn/torn_encoder.c
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2020 Richard Titmuss <richard.titmuss@gmail.com>
+ * Copyright 2018 Jack Humbert <jack.humb@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 "torn.h"
+#include "mcp23018.h"
+
+#ifndef ENCODER_RESOLUTION
+# define ENCODER_RESOLUTION 4
+#endif
+
+#define ENCODER_CLOCKWISE true
+#define ENCODER_COUNTER_CLOCKWISE false
+
+static int8_t encoder_LUT[] = {0, -1, 1, 0, 1, 0, 0, -1, -1, 0, 0, 1, 0, 1, -1, 0};
+
+static uint8_t encoder_state = 0;
+static int8_t encoder_pulses = 0;
+
+extern const uint16_t PROGMEM encoder_keymaps[][2][2];
+
+/**
+ * Tap on encoder updates using the encoder keymap
+ */
+void encoder_update_kb(uint8_t index, bool clockwise) {
+ int layer = get_highest_layer(layer_state);
+
+ uint16_t code;
+ do {
+ code = pgm_read_word(&encoder_keymaps[layer--][index][clockwise]);
+ } while (code == KC_TRNS);
+
+ tap_code16(code);
+}
+
+static bool encoder_read_state(uint8_t *state) {
+ uint8_t mcp23018_pin_state;
+ mcp23018_status_t status = mcp23018_readReg(GPIOB, &mcp23018_pin_state, 1);
+ if (status == 0) {
+ *state = (mcp23018_pin_state & 0b110000) >> 4;
+ return true;
+ }
+ return false;
+}
+
+static void encoder_update(int8_t index, uint8_t state) {
+ encoder_pulses += encoder_LUT[state & 0xF];
+ if (encoder_pulses >= ENCODER_RESOLUTION) {
+ encoder_update_kb(index, ENCODER_CLOCKWISE);
+ }
+ if (encoder_pulses <= -ENCODER_RESOLUTION) { // direction is arbitrary here, but this clockwise
+ encoder_update_kb(index, ENCODER_COUNTER_CLOCKWISE);
+ }
+ encoder_pulses %= ENCODER_RESOLUTION;
+}
+
+/**
+ * Read the secondary encoder over i2c
+ */
+void secondary_encoder_read(void) {
+ uint8_t state;
+ if (encoder_read_state(&state)) {
+ encoder_state <<= 2;
+ encoder_state |= state;
+ encoder_update(1, encoder_state);
+ }
+}
+
+/**
+ * Initialize the secondary encoder over i2c
+ */
+void secondary_encoder_init(void) { encoder_read_state(&encoder_state); }
diff --git a/keyboards/torn/torn_oled.c b/keyboards/torn/torn_oled.c
new file mode 100644
index 000000000..834abf96c
--- /dev/null
+++ b/keyboards/torn/torn_oled.c
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2020 Richard Titmuss <richard.titmuss@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
+
+#ifdef OLED_DRIVER_ENABLE
+
+// clang-format off
+__attribute__((weak))
+void oled_task_user(void) {
+ static const char PROGMEM torn_logo[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xf8, 0x98, 0x98, 0x98, 0x98, 0x98, 0x18, 0x18, 0x98,
+ 0x98, 0x98, 0x98, 0x98, 0xf8, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x80, 0xc0, 0x60, 0x30, 0x30, 0x18, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
+ 0x18, 0x30, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xf8, 0xf8, 0x18, 0x18, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x18, 0x38,
+ 0x70, 0xe0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xf8, 0xf8, 0x38, 0x70, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xf8, 0xf8, 0x18, 0x18, 0xf8, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0xff, 0xff, 0x00, 0x00, 0xff,
+ 0xff, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xf8, 0xfe, 0x07, 0x01, 0xf0, 0xfc, 0x0e, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x03, 0x03, 0x0e, 0xfc, 0xf0, 0x01, 0x07, 0xfe, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xc1, 0xc1, 0xc1, 0x63, 0x3f, 0x1c,
+ 0xc0, 0xe1, 0x7f, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0x00, 0x00, 0xf8, 0xf1, 0xe3, 0xc7, 0x8e, 0x1c, 0x38, 0x70, 0xe0, 0xc0, 0x80, 0x00,
+ 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff,
+ 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0f, 0x3f, 0x70, 0xc0, 0x87, 0x1f, 0x38, 0x60, 0x60, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
+ 0x60, 0x60, 0x38, 0x1f, 0x87, 0xc0, 0xf0, 0x7f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xfe, 0xfe, 0x0e, 0x3c, 0x78, 0xe2, 0xc7, 0x1f,
+ 0x39, 0xe0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x01, 0x03, 0x07, 0x0e, 0x1c, 0x38, 0x71, 0xe3, 0xc7,
+ 0x8f, 0x1f, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0c, 0x0c, 0x0f,
+ 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x06, 0x06, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
+ 0x0c, 0x06, 0x06, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0c, 0x0c, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x01, 0x07, 0x0f,
+ 0x0c, 0x0c, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0f, 0x0f, 0x0c, 0x0c, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x03, 0x07, 0x0e, 0x0c, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ };
+
+ oled_write_raw_P(torn_logo, sizeof(torn_logo));
+}
+// clang-format on
+
+#endif
diff --git a/keyboards/treadstone48/rev2/info.json b/keyboards/treadstone48/rev2/info.json
index 1771a6a9d..991a83019 100644
--- a/keyboards/treadstone48/rev2/info.json
+++ b/keyboards/treadstone48/rev2/info.json
@@ -192,11 +192,6 @@
"y": 2
},
{
- "label": "Shift",
- "x": 13.75,
- "y": 2
- },
- {
"label": "Ctrl",
"x": 0.75,
"y": 3,
@@ -256,6 +251,11 @@
"label": "\u2192",
"x": 13.75,
"y": 3
+ },
+ {
+ "label": "Shift",
+ "x": 13.75,
+ "y": 2
}
]
}
diff --git a/keyboards/wsk/sl40/readme.md b/keyboards/wsk/sl40/readme.md
index 5c74b7c2d..113a09af5 100644
--- a/keyboards/wsk/sl40/readme.md
+++ b/keyboards/wsk/sl40/readme.md
@@ -1,6 +1,6 @@
# SL40
-![SL40](https://i.imgur.com/HeeUwVj.png)
+![SL40](https://i.imgur.com/DX5Znfd.png)
The SL40 is a 14 column staggered 40% keyboard.
diff --git a/keyboards/xd60/info.json b/keyboards/xd60/info.json
index c69e8a788..dbe9a7988 100644
--- a/keyboards/xd60/info.json
+++ b/keyboards/xd60/info.json
@@ -1,8 +1,8 @@
{
- "keyboard_name": "XD60",
- "maintainer": "qmk",
- "width": 15,
- "height": 5,
+ "keyboard_name": "XD60",
+ "maintainer": "qmk",
+ "width": 15,
+ "height": 5,
"layouts": {
"LAYOUT_all": {
"layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":2, "w":1.25}, {"label":"Shift", "x":0, "y":3}, {"x":1, "y":3}, {"label":"Z", "x":2, "y":3}, {"label":"X", "x":3, "y":3}, {"label":"C", "x":4, "y":3}, {"label":"V", "x":5, "y":3}, {"label":"B", "x":6, "y":3}, {"label":"N", "x":7, "y":3}, {"label":"M", "x":8, "y":3}, {"label":"<", "x":9, "y":3}, {"label":">", "x":10, "y":3}, {"label":"?", "x":11, "y":3}, {"label":"Shift", "x":12, "y":3}, {"x":13, "y":3}, {"x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4}, {"label":"Win", "x":11, "y":4}, {"label":"Menu", "x":12, "y":4}, {"label":"Ctrl", "x":13, "y":4}, {"x":14, "y":4}]
@@ -12,8 +12,153 @@
"layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
},
+ "LAYOUT_60_ansi_split_bs_rshift": {
+ "layout": [
+ {"label":"~", "x":0, "y":0},
+ {"label":"!", "x":1, "y":0},
+ {"label":"@", "x":2, "y":0},
+ {"label":"#", "x":3, "y":0},
+ {"label":"$", "x":4, "y":0},
+ {"label":"%", "x":5, "y":0},
+ {"label":"^", "x":6, "y":0},
+ {"label":"&", "x":7, "y":0},
+ {"label":"*", "x":8, "y":0},
+ {"label":"(", "x":9, "y":0},
+ {"label":")", "x":10, "y":0},
+ {"label":"_", "x":11, "y":0},
+ {"label":"+", "x":12, "y":0},
+ {"label":"BS", "x":13, "y":0, "w":1},
+ {"label":"BS", "x":14, "y":0, "w":1},
+
+ {"label":"Tab", "x":0, "y":1, "w":1.5},
+ {"label":"Q", "x":1.5, "y":1},
+ {"label":"W", "x":2.5, "y":1},
+ {"label":"E", "x":3.5, "y":1},
+ {"label":"R", "x":4.5, "y":1},
+ {"label":"T", "x":5.5, "y":1},
+ {"label":"Y", "x":6.5, "y":1},
+ {"label":"U", "x":7.5, "y":1},
+ {"label":"I", "x":8.5, "y":1},
+ {"label":"O", "x":9.5, "y":1},
+ {"label":"P", "x":10.5, "y":1},
+ {"label":"{", "x":11.5, "y":1},
+ {"label":"}", "x":12.5, "y":1},
+ {"label":"|", "x":13.5, "y":1, "w":1.5},
+
+ {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
+ {"label":"A", "x":1.75, "y":2},
+ {"label":"S", "x":2.75, "y":2},
+ {"label":"D", "x":3.75, "y":2},
+ {"label":"F", "x":4.75, "y":2},
+ {"label":"G", "x":5.75, "y":2},
+ {"label":"H", "x":6.75, "y":2},
+ {"label":"J", "x":7.75, "y":2},
+ {"label":"K", "x":8.75, "y":2},
+ {"label":"L", "x":9.75, "y":2},
+ {"label":":", "x":10.75, "y":2},
+ {"label":"\"", "x":11.75, "y":2},
+ {"label":"Enter", "x":12.75, "y":2, "w":2.25},
+
+ {"label":"Shift", "x":0, "y":3, "w":2.25},
+ {"label":"Z", "x":2.25, "y":3},
+ {"label":"X", "x":3.25, "y":3},
+ {"label":"C", "x":4.25, "y":3},
+ {"label":"V", "x":5.25, "y":3},
+ {"label":"B", "x":6.25, "y":3},
+ {"label":"N", "x":7.25, "y":3},
+ {"label":"M", "x":8.25, "y":3},
+ {"label":"<", "x":9.25, "y":3},
+ {"label":">", "x":10.25, "y":3},
+ {"label":"?", "x":11.25, "y":3},
+ {"label":"Shift", "x":12.25, "y":3, "w":1.75},
+ {"label":"FN", "x":14, "y":3, "w":1},
+
+ {"label":"Ctrl", "x":0, "y":4, "w":1.25},
+ {"label":"Win", "x":1.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":4, "w":1.25},
+ {"x":3.75, "y":4, "w":6.25},
+ {"label":"Alt", "x":10, "y":4, "w":1.25},
+ {"label":"Win", "x":11.25, "y":4, "w":1.25},
+ {"label":"Menu", "x":12.5, "y":4, "w":1.25},
+ {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}
+ ]
+ },
+
"LAYOUT_60_iso": {
"layout": [{"label":"\u00ac", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"\"", "x":2, "y":0}, {"label":"\u00a3", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"@", "x":11.75, "y":2}, {"label":"~", "x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"|", "x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"GUI", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"label":"Space", "x":3.75, "y":4, "w":6.25}, {"label":"AltGr", "x":10, "y":4, "w":1.25}, {"label":"GUI", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
+ },
+
+ "LAYOUT_60_iso_split_bs_rshift": {
+ "layout": [
+ {"label":"\u00ac", "x":0, "y":0},
+ {"label":"!", "x":1, "y":0},
+ {"label":"\"", "x":2, "y":0},
+ {"label":"\u00a3", "x":3, "y":0},
+ {"label":"$", "x":4, "y":0},
+ {"label":"%", "x":5, "y":0},
+ {"label":"^", "x":6, "y":0},
+ {"label":"&", "x":7, "y":0},
+ {"label":"*", "x":8, "y":0},
+ {"label":"(", "x":9, "y":0},
+ {"label":")", "x":10, "y":0},
+ {"label":"_", "x":11, "y":0},
+ {"label":"+", "x":12, "y":0},
+ {"label":"BS", "x":13, "y":0, "w":1},
+ {"label":"BS", "x":14, "y":0, "w":1},
+
+ {"label":"Tab", "x":0, "y":1, "w":1.5},
+ {"label":"Q", "x":1.5, "y":1},
+ {"label":"W", "x":2.5, "y":1},
+ {"label":"E", "x":3.5, "y":1},
+ {"label":"R", "x":4.5, "y":1},
+ {"label":"T", "x":5.5, "y":1},
+ {"label":"Y", "x":6.5, "y":1},
+ {"label":"U", "x":7.5, "y":1},
+ {"label":"I", "x":8.5, "y":1},
+ {"label":"O", "x":9.5, "y":1},
+ {"label":"P", "x":10.5, "y":1},
+ {"label":"{", "x":11.5, "y":1},
+ {"label":"}", "x":12.5, "y":1},
+
+ {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
+ {"label":"A", "x":1.75, "y":2},
+ {"label":"S", "x":2.75, "y":2},
+ {"label":"D", "x":3.75, "y":2},
+ {"label":"F", "x":4.75, "y":2},
+ {"label":"G", "x":5.75, "y":2},
+ {"label":"H", "x":6.75, "y":2},
+ {"label":"J", "x":7.75, "y":2},
+ {"label":"K", "x":8.75, "y":2},
+ {"label":"L", "x":9.75, "y":2},
+ {"label":":", "x":10.75, "y":2},
+ {"label":"@", "x":11.75, "y":2},
+ {"label":"~", "x":12.75, "y":2},
+ {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2},
+
+ {"label":"Shift", "x":0, "y":3, "w":1.25},
+ {"label":"|", "x":1.25, "y":3},
+ {"label":"Z", "x":2.25, "y":3},
+ {"label":"X", "x":3.25, "y":3},
+ {"label":"C", "x":4.25, "y":3},
+ {"label":"V", "x":5.25, "y":3},
+ {"label":"B", "x":6.25, "y":3},
+ {"label":"N", "x":7.25, "y":3},
+ {"label":"M", "x":8.25, "y":3},
+ {"label":"<", "x":9.25, "y":3},
+ {"label":">", "x":10.25, "y":3},
+ {"label":"?", "x":11.25, "y":3},
+ {"label":"Shift", "x":12.25, "y":3, "w":1.75},
+ {"label":"FN", "x":14, "y":3, "w":1},
+
+ {"label":"Ctrl", "x":0, "y":4, "w":1.25},
+ {"label":"GUI", "x":1.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":4, "w":1.25},
+ {"label":"Space", "x":3.75, "y":4, "w":6.25},
+ {"label":"AltGr", "x":10, "y":4, "w":1.25},
+ {"label":"GUI", "x":11.25, "y":4, "w":1.25},
+ {"label":"Menu", "x":12.5, "y":4, "w":1.25},
+ {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}
+ ]
}
}
}
diff --git a/keyboards/xd60/rev2/rules.mk b/keyboards/xd60/rev2/rules.mk
index 1c96804e7..56a01b3c5 100644
--- a/keyboards/xd60/rev2/rules.mk
+++ b/keyboards/xd60/rev2/rules.mk
@@ -23,7 +23,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-LAYOUTS = 60_ansi 60_iso
+LAYOUTS = 60_ansi 60_ansi_split_bs_rshift 60_iso 60_iso_split_bs_rshift
diff --git a/keyboards/xd60/rev3/rules.mk b/keyboards/xd60/rev3/rules.mk
index 3c7c96712..56a01b3c5 100644
--- a/keyboards/xd60/rev3/rules.mk
+++ b/keyboards/xd60/rev3/rules.mk
@@ -26,4 +26,4 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-LAYOUTS = 60_ansi 60_iso
+LAYOUTS = 60_ansi 60_ansi_split_bs_rshift 60_iso 60_iso_split_bs_rshift
diff --git a/keyboards/xd60/xd60.h b/keyboards/xd60/xd60.h
index 3946138c3..dc6a1080f 100644
--- a/keyboards/xd60/xd60.h
+++ b/keyboards/xd60/xd60.h
@@ -46,6 +46,20 @@ inline void xd60_bl_led_off(void) { DDRF &= ~(1<<5); PORTF &= ~(1<<5); }
{ K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D } \
}
+#define LAYOUT_60_ansi_split_bs_rshift( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K49, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3C, \
+ K40, K41, K42, K45, K4A, K4B, K4C, K4D \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, K2D }, \
+ { K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \
+ { K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, K49, K4A, K4B, K4C, K4D } \
+}
+
#define LAYOUT_60_iso( \
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, \
@@ -59,3 +73,17 @@ inline void xd60_bl_led_off(void) { DDRF &= ~(1<<5); PORTF &= ~(1<<5); }
{ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D }, \
{ K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D } \
}
+
+#define LAYOUT_60_iso_split_bs_rshift( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K49, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3C, \
+ K40, K41, K42, K45, K4A, K4B, K4C, K4D \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, KC_NO }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \
+ { K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, K49, K4A, K4B, K4C, K4D } \
+}
diff --git a/keyboards/yd60mq/config.h b/keyboards/yd60mq/config.h
index 26c39a5b0..54aed0c96 100644
--- a/keyboards/yd60mq/config.h
+++ b/keyboards/yd60mq/config.h
@@ -3,8 +3,8 @@
#include "config_common.h"
/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6060
+#define VENDOR_ID 0x594D // "YM"
+#define PRODUCT_ID 0x604D // 60 "M"
#define MANUFACTURER YMDK
#define PRODUCT YD60MQ
#define DESCRIPTION Keyboard
diff --git a/keyboards/yd60mq/keymaps/via/keymap.c b/keyboards/yd60mq/keymaps/via/keymap.c
new file mode 100644
index 000000000..ab503ee27
--- /dev/null
+++ b/keyboards/yd60mq/keymaps/via/keymap.c
@@ -0,0 +1,53 @@
+/* Copyright 2020 rbange https://github.com/rbange
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_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_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_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_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_DEL,
+ KC_LCTL, KC_LGUI, KC_LALT, MO(1), KC_SPC, MO(1), KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT_all(
+ 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_TRNS, KC_DEL,
+ KC_TRNS, RGB_TOG, KC_UP, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, 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, BL_DEC, BL_TOGG, BL_INC, 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
+ ),
+
+ [2] = LAYOUT_all(
+ 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, 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
+ ),
+
+ [3] = LAYOUT_all(
+ 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, 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
+ ),
+
+};
diff --git a/keyboards/yd60mq/keymaps/via/rules.mk b/keyboards/yd60mq/keymaps/via/rules.mk
new file mode 100644
index 000000000..36b7ba9cb
--- /dev/null
+++ b/keyboards/yd60mq/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/yd60mq/rules.mk b/keyboards/yd60mq/rules.mk
index 3e4d8eaa0..615e4865a 100644
--- a/keyboards/yd60mq/rules.mk
+++ b/keyboards/yd60mq/rules.mk
@@ -14,7 +14,7 @@ BOOTLOADER = atmel-dfu
# Build Options
# change yes to no to disable
#
-BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
diff --git a/keyboards/yushakobo/quick7/keymaps/via/keymap.c b/keyboards/yushakobo/quick7/keymaps/via/keymap.c
new file mode 100644
index 000000000..9c64042bc
--- /dev/null
+++ b/keyboards/yushakobo/quick7/keymaps/via/keymap.c
@@ -0,0 +1,84 @@
+/* Copyright 2020 yushakobo
+ *
+ * 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
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+ _BASE,
+ _FUNC1,
+ _VIA1,
+ _VIA2
+};
+
+// Defines the keycodes used by our macros in process_record_user
+enum custom_keycodes {
+ YUSHAURL = SAFE_RANGE
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Base */
+ [_BASE] = LAYOUT(
+ KC_MUTE, MO(_FUNC1), RGB_MOD,
+ S(KC_TAB), KC_UP, KC_TAB,
+ KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [_FUNC1] = LAYOUT(
+ RESET, KC_TRNS, RGB_TOG,
+ KC_HOME, KC_VOLU, KC_END,
+ KC_MPRV, KC_VOLD, KC_MNXT
+ ),
+ [_VIA1] = LAYOUT(
+ YUSHAURL,XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX
+ ),
+ [_VIA2] = LAYOUT(
+ XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX
+ )
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case YUSHAURL:
+ if (record->event.pressed) {
+ // when keycode QMKURL is pressed
+ SEND_STRING("https://yushakobo.jp/\n");
+ } else {
+ // when keycode QMKURL is released
+ }
+ break;
+ }
+ return true;
+}
+
+void encoder_update_user(uint8_t index, bool clockwise) {
+ if (index == 0) { // Left encoder
+ if (clockwise) {
+ tap_code(KC_VOLU);
+ } else {
+ tap_code(KC_VOLD);
+ }
+ }
+ else if (index == 1) { // Right encoder
+ if (clockwise) {
+ rgblight_decrease_hue_noeeprom();
+ } else {
+ rgblight_increase_hue_noeeprom();
+ }
+ }
+}
diff --git a/keyboards/yushakobo/quick7/keymaps/via/readme.md b/keyboards/yushakobo/quick7/keymaps/via/readme.md
new file mode 100644
index 000000000..ff0978780
--- /dev/null
+++ b/keyboards/yushakobo/quick7/keymaps/via/readme.md
@@ -0,0 +1,27 @@
+# The default VIA keymap for quick7
+
+#### Rotary Encoder is not configurable through VIA
+
+### Base Layer
+```
+Left Encoder(CW: Vol+, CCW: Vol-)
+Right Encoder(CW: RGB HUE-, CCW: RGB HUE+)
+,----------- --------- ------------,
+| MUTE | Func1 | RGB MODE |
+ ----------- --------- ------------
+| Shift+Tab | UP | TAB |
+ ----------- --------- ------------
+| LEFT | DOWN | RIGHT |
+`----------- --------- ------------'
+```
+
+### Func1 Layer
+```
+,----------- --------- ------------,
+| RESET | Func1 | RGB TOGGLE |
+ ----------- --------- ------------
+| HOME | VOL+ | END |
+ ----------- --------- ------------
+| MEDIA << | VOL- | MEDIA >> |
+`----------- --------- ------------'
+``` \ No newline at end of file
diff --git a/keyboards/yushakobo/quick7/keymaps/via/rules.mk b/keyboards/yushakobo/quick7/keymaps/via/rules.mk
new file mode 100644
index 000000000..036bd6d1c
--- /dev/null
+++ b/keyboards/yushakobo/quick7/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/zvecr/zv48/f401/rules.mk b/keyboards/zvecr/zv48/f401/rules.mk
index e41d5ef7a..950442af9 100644
--- a/keyboards/zvecr/zv48/f401/rules.mk
+++ b/keyboards/zvecr/zv48/f401/rules.mk
@@ -1,27 +1,5 @@
-## chip/board settings
-# the next two should match the directories in
-# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
-MCU_FAMILY = STM32
-MCU_SERIES = STM32F4xx
-# linker script to use
-# it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
-# or <this_dir>/ld/
-MCU_LDSCRIPT = STM32F401xC
-# startup code to use
-# is should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f4xx
-# it should exist either in <chibios>/os/hal/boards/
-# or <this_dir>/boards
-BOARD = BLACKPILL_STM32_F401
-# Cortex version
-# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
-MCU = cortex-m4
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 7
-USE_FPU = yes
-# Address of the booloader in system memory
-STM32_BOOTLOADER_ADDRESS = 0x1FFF0000
+# MCU name
+MCU = STM32F401
-# Options to pass to dfu-util when flashing
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-DFU_SUFFIX_ARGS = -v 0483 -p df11
+# Address of the bootloader in system memory
+STM32_BOOTLOADER_ADDRESS = 0x1FFF0000
diff --git a/keyboards/zvecr/zv48/f411/rules.mk b/keyboards/zvecr/zv48/f411/rules.mk
index 61add3aed..4f7f52e62 100644
--- a/keyboards/zvecr/zv48/f411/rules.mk
+++ b/keyboards/zvecr/zv48/f411/rules.mk
@@ -1,27 +1,5 @@
-## chip/board settings
-# the next two should match the directories in
-# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
-MCU_FAMILY = STM32
-MCU_SERIES = STM32F4xx
-# linker script to use
-# it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
-# or <this_dir>/ld/
-MCU_LDSCRIPT = STM32F411xE
-# startup code to use
-# is should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f4xx
-# it should exist either in <chibios>/os/hal/boards/
-# or <this_dir>/boards
-BOARD = BLACKPILL_STM32_F411
-# Cortex version
-# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
-MCU = cortex-m4
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 7
-USE_FPU = yes
-# Address of the booloader in system memory
-STM32_BOOTLOADER_ADDRESS = 0x1FFF0000
+# MCU name
+MCU = STM32F411
-# Options to pass to dfu-util when flashing
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-DFU_SUFFIX_ARGS = -v 0483 -p df11
+# Address of the bootloader in system memory
+STM32_BOOTLOADER_ADDRESS = 0x1FFF0000