diff --git a/keyboards/keychron/q1/ansi/keymaps/mkillewald/autocorrect_data.h b/keyboards/keychron/q1/ansi/keymaps/mkillewald/autocorrect_data.h
new file mode 100644
index 000000000000..a092cc777346
--- /dev/null
+++ b/keyboards/keychron/q1/ansi/keymaps/mkillewald/autocorrect_data.h
@@ -0,0 +1,176 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+/*******************************************************************************
+ 88888888888 888 d8b .d888 d8b 888 d8b
+ 888 888 Y8P d88P" Y8P 888 Y8P
+ 888 888 888 888
+ 888 88888b. 888 .d8888b 888888 888 888 .d88b. 888 .d8888b
+ 888 888 "88b 888 88K 888 888 888 d8P Y8b 888 88K
+ 888 888 888 888 "Y8888b. 888 888 888 88888888 888 "Y8888b.
+ 888 888 888 888 X88 888 888 888 Y8b. 888 X88
+ 888 888 888 888 88888P' 888 888 888 "Y8888 888 88888P'
+ 888 888
+ 888 888
+ 888 888
+ .d88b. .d88b. 88888b. .d88b. 888d888 8888b. 888888 .d88b. .d88888
+ d88P"88b d8P Y8b 888 "88b d8P Y8b 888P" "88b 888 d8P Y8b d88" 888
+ 888 888 88888888 888 888 88888888 888 .d888888 888 88888888 888 888
+ Y88b 888 Y8b. 888 888 Y8b. 888 888 888 Y88b. Y8b. Y88b 888
+ "Y88888 "Y8888 888 888 "Y8888 888 "Y888888 "Y888 "Y8888 "Y88888
+ 888
+ Y8b d88P
+ "Y88P"
+*******************************************************************************/
+
+#pragma once
+
+// Autocorrection dictionary (71 entries):
+// :guage -> gauge
+// :the:the: -> the
+// :thier -> their
+// :ture -> true
+// accomodate -> accommodate
+// acommodate -> accommodate
+// aparent -> apparent
+// aparrent -> apparent
+// apparant -> apparent
+// apparrent -> apparent
+// aquire -> acquire
+// becuase -> because
+// cauhgt -> caught
+// cheif -> chief
+// choosen -> chosen
+// cieling -> ceiling
+// collegue -> colleague
+// concensus -> consensus
+// contians -> contains
+// cosnt -> const
+// dervied -> derived
+// dosen't -> doesn't
+// fales -> false
+// fasle -> false
+// fitler -> filter
+// flase -> false
+// foward -> forward
+// frequecy -> frequency
+// gaurantee -> guarantee
+// guaratee -> guarantee
+// heigth -> height
+// heirarchy -> hierarchy
+// inclued -> include
+// interator -> iterator
+// intput -> input
+// invliad -> invalid
+// lenght -> length
+// liasion -> liaison
+// libary -> library
+// listner -> listener
+// looses: -> loses
+// looup -> lookup
+// manefist -> manifest
+// namesapce -> namespace
+// namespcae -> namespace
+// occassion -> occasion
+// occured -> occurred
+// ouptut -> output
+// ouput -> output
+// overide -> override
+// postion -> position
+// priviledge -> privilege
+// psuedo -> pseudo
+// recieve -> receive
+// refered -> referred
+// relevent -> relevant
+// repitition -> repetition
+// reuslt -> result
+// retrun -> return
+// retun -> return
+// reutrn -> return
+// saftey -> safety
+// seperate -> separate
+// singed -> signed
+// stirng -> string
+// strign -> string
+// swithc -> switch
+// swtich -> switch
+// thresold -> threshold
+// udpate -> update
+// widht -> width
+
+#define AUTOCORRECT_MIN_LENGTH 5 // ":ture"
+#define AUTOCORRECT_MAX_LENGTH 10 // "accomodate"
+#define DICTIONARY_SIZE 1120
+
+static const uint8_t autocorrect_data[DICTIONARY_SIZE] PROGMEM = {
+ 0x6C, 0x2B, 0x00, 0x06, 0x47, 0x00, 0x07, 0x51, 0x00, 0x08, 0xC7, 0x00, 0x09, 0xF0, 0x01, 0x0A,
+ 0xFA, 0x01, 0x0B, 0x1A, 0x02, 0x11, 0x35, 0x02, 0x12, 0xBE, 0x02, 0x13, 0xCA, 0x02, 0x15, 0xD4,
+ 0x02, 0x16, 0x14, 0x03, 0x17, 0x43, 0x03, 0x1C, 0x20, 0x04, 0x00, 0x48, 0x32, 0x00, 0x16, 0x3C,
+ 0x00, 0x00, 0x0B, 0x17, 0x2C, 0x08, 0x0B, 0x17, 0x2C, 0x00, 0x84, 0x00, 0x08, 0x16, 0x12, 0x12,
+ 0x0F, 0x00, 0x84, 0x73, 0x65, 0x73, 0x00, 0x0B, 0x17, 0x0C, 0x1A, 0x16, 0x00, 0x81, 0x63, 0x68,
+ 0x00, 0x44, 0x5E, 0x00, 0x08, 0x6A, 0x00, 0x0F, 0xAE, 0x00, 0x15, 0xBB, 0x00, 0x00, 0x0C, 0x0F,
+ 0x19, 0x11, 0x0C, 0x00, 0x83, 0x61, 0x6C, 0x69, 0x64, 0x00, 0x4A, 0x77, 0x00, 0x0C, 0x81, 0x00,
+ 0x15, 0x8C, 0x00, 0x18, 0xA5, 0x00, 0x00, 0x11, 0x0C, 0x16, 0x00, 0x83, 0x67, 0x6E, 0x65, 0x64,
+ 0x00, 0x19, 0x15, 0x08, 0x07, 0x00, 0x83, 0x69, 0x76, 0x65, 0x64, 0x00, 0x48, 0x93, 0x00, 0x18,
+ 0x9C, 0x00, 0x00, 0x09, 0x08, 0x15, 0x00, 0x81, 0x72, 0x65, 0x64, 0x00, 0x06, 0x06, 0x12, 0x00,
+ 0x81, 0x72, 0x65, 0x64, 0x00, 0x0F, 0x06, 0x11, 0x0C, 0x00, 0x81, 0x64, 0x65, 0x00, 0x12, 0x16,
+ 0x08, 0x15, 0x0B, 0x17, 0x00, 0x82, 0x68, 0x6F, 0x6C, 0x64, 0x00, 0x04, 0x1A, 0x12, 0x09, 0x00,
+ 0x83, 0x72, 0x77, 0x61, 0x72, 0x64, 0x00, 0x44, 0xE9, 0x00, 0x06, 0xF6, 0x00, 0x07, 0x04, 0x01,
+ 0x08, 0x10, 0x01, 0x0A, 0x34, 0x01, 0x0F, 0x51, 0x01, 0x15, 0x5A, 0x01, 0x16, 0x75, 0x01, 0x17,
+ 0x90, 0x01, 0x18, 0xD7, 0x01, 0x19, 0xE4, 0x01, 0x00, 0x06, 0x13, 0x16, 0x08, 0x10, 0x04, 0x11,
+ 0x00, 0x82, 0x61, 0x63, 0x65, 0x00, 0x13, 0x04, 0x16, 0x08, 0x10, 0x04, 0x11, 0x00, 0x83, 0x70,
+ 0x61, 0x63, 0x65, 0x00, 0x0C, 0x15, 0x08, 0x19, 0x12, 0x00, 0x82, 0x72, 0x69, 0x64, 0x65, 0x00,
+ 0x17, 0x00, 0x44, 0x19, 0x01, 0x11, 0x24, 0x01, 0x00, 0x15, 0x04, 0x18, 0x0A, 0x00, 0x82, 0x6E,
+ 0x74, 0x65, 0x65, 0x00, 0x04, 0x15, 0x18, 0x04, 0x0A, 0x00, 0x87, 0x75, 0x61, 0x72, 0x61, 0x6E,
+ 0x74, 0x65, 0x65, 0x00, 0x44, 0x3B, 0x01, 0x07, 0x45, 0x01, 0x00, 0x18, 0x0A, 0x2C, 0x00, 0x83,
+ 0x61, 0x75, 0x67, 0x65, 0x00, 0x08, 0x0F, 0x0C, 0x19, 0x0C, 0x15, 0x13, 0x00, 0x82, 0x67, 0x65,
+ 0x00, 0x16, 0x04, 0x09, 0x00, 0x82, 0x6C, 0x73, 0x65, 0x00, 0x4C, 0x61, 0x01, 0x18, 0x6D, 0x01,
+ 0x00, 0x18, 0x14, 0x04, 0x00, 0x84, 0x63, 0x71, 0x75, 0x69, 0x72, 0x65, 0x00, 0x17, 0x2C, 0x00,
+ 0x82, 0x72, 0x75, 0x65, 0x00, 0x04, 0x00, 0x4F, 0x7E, 0x01, 0x18, 0x86, 0x01, 0x00, 0x09, 0x00,
+ 0x83, 0x61, 0x6C, 0x73, 0x65, 0x00, 0x06, 0x08, 0x05, 0x00, 0x83, 0x61, 0x75, 0x73, 0x65, 0x00,
+ 0x04, 0x00, 0x47, 0x9C, 0x01, 0x13, 0xC1, 0x01, 0x15, 0xCB, 0x01, 0x00, 0x12, 0x10, 0x00, 0x50,
+ 0xA6, 0x01, 0x12, 0xB5, 0x01, 0x00, 0x12, 0x06, 0x04, 0x00, 0x87, 0x63, 0x6F, 0x6D, 0x6D, 0x6F,
+ 0x64, 0x61, 0x74, 0x65, 0x00, 0x06, 0x06, 0x04, 0x00, 0x84, 0x6D, 0x6F, 0x64, 0x61, 0x74, 0x65,
+ 0x00, 0x07, 0x18, 0x00, 0x84, 0x70, 0x64, 0x61, 0x74, 0x65, 0x00, 0x08, 0x13, 0x08, 0x16, 0x00,
+ 0x84, 0x61, 0x72, 0x61, 0x74, 0x65, 0x00, 0x0A, 0x08, 0x0F, 0x0F, 0x12, 0x06, 0x00, 0x82, 0x61,
+ 0x67, 0x75, 0x65, 0x00, 0x08, 0x0C, 0x06, 0x08, 0x15, 0x00, 0x83, 0x65, 0x69, 0x76, 0x65, 0x00,
+ 0x0C, 0x08, 0x0B, 0x06, 0x00, 0x82, 0x69, 0x65, 0x66, 0x00, 0x11, 0x00, 0x4C, 0x03, 0x02, 0x15,
+ 0x10, 0x02, 0x00, 0x0F, 0x08, 0x0C, 0x06, 0x00, 0x85, 0x65, 0x69, 0x6C, 0x69, 0x6E, 0x67, 0x00,
+ 0x0C, 0x17, 0x16, 0x00, 0x83, 0x72, 0x69, 0x6E, 0x67, 0x00, 0x46, 0x21, 0x02, 0x17, 0x2C, 0x02,
+ 0x00, 0x0C, 0x17, 0x1A, 0x16, 0x00, 0x83, 0x69, 0x74, 0x63, 0x68, 0x00, 0x0A, 0x0C, 0x08, 0x0B,
+ 0x00, 0x81, 0x68, 0x74, 0x00, 0x48, 0x45, 0x02, 0x0A, 0x50, 0x02, 0x12, 0x59, 0x02, 0x15, 0x9C,
+ 0x02, 0x18, 0xA7, 0x02, 0x00, 0x16, 0x12, 0x12, 0x0B, 0x06, 0x00, 0x83, 0x73, 0x65, 0x6E, 0x00,
+ 0x0C, 0x15, 0x17, 0x16, 0x00, 0x81, 0x6E, 0x67, 0x00, 0x0C, 0x00, 0x56, 0x62, 0x02, 0x17, 0x7C,
+ 0x02, 0x00, 0x44, 0x69, 0x02, 0x16, 0x72, 0x02, 0x00, 0x0C, 0x0F, 0x00, 0x83, 0x69, 0x73, 0x6F,
+ 0x6E, 0x00, 0x04, 0x06, 0x06, 0x12, 0x00, 0x83, 0x69, 0x6F, 0x6E, 0x00, 0x4C, 0x83, 0x02, 0x16,
+ 0x92, 0x02, 0x00, 0x17, 0x0C, 0x13, 0x08, 0x15, 0x00, 0x86, 0x65, 0x74, 0x69, 0x74, 0x69, 0x6F,
+ 0x6E, 0x00, 0x12, 0x13, 0x00, 0x83, 0x69, 0x74, 0x69, 0x6F, 0x6E, 0x00, 0x17, 0x18, 0x08, 0x15,
+ 0x00, 0x83, 0x74, 0x75, 0x72, 0x6E, 0x00, 0x55, 0xAE, 0x02, 0x17, 0xB7, 0x02, 0x00, 0x17, 0x08,
+ 0x15, 0x00, 0x82, 0x75, 0x72, 0x6E, 0x00, 0x08, 0x15, 0x00, 0x80, 0x72, 0x6E, 0x00, 0x07, 0x08,
+ 0x18, 0x16, 0x13, 0x00, 0x83, 0x65, 0x75, 0x64, 0x6F, 0x00, 0x18, 0x12, 0x12, 0x0F, 0x00, 0x81,
+ 0x6B, 0x75, 0x70, 0x00, 0x48, 0xDB, 0x02, 0x12, 0x03, 0x03, 0x00, 0x4C, 0xE5, 0x02, 0x0F, 0xEE,
+ 0x02, 0x11, 0xF8, 0x02, 0x00, 0x0B, 0x17, 0x2C, 0x00, 0x82, 0x65, 0x69, 0x72, 0x00, 0x17, 0x0C,
+ 0x09, 0x00, 0x83, 0x6C, 0x74, 0x65, 0x72, 0x00, 0x17, 0x16, 0x0C, 0x0F, 0x00, 0x82, 0x65, 0x6E,
+ 0x65, 0x72, 0x00, 0x17, 0x04, 0x15, 0x08, 0x17, 0x11, 0x0C, 0x00, 0x87, 0x74, 0x65, 0x72, 0x61,
+ 0x74, 0x6F, 0x72, 0x00, 0x48, 0x1E, 0x03, 0x11, 0x26, 0x03, 0x18, 0x33, 0x03, 0x00, 0x0F, 0x04,
+ 0x09, 0x00, 0x81, 0x73, 0x65, 0x00, 0x04, 0x0C, 0x17, 0x11, 0x12, 0x06, 0x00, 0x83, 0x61, 0x69,
+ 0x6E, 0x73, 0x00, 0x16, 0x11, 0x08, 0x06, 0x11, 0x12, 0x06, 0x00, 0x85, 0x73, 0x65, 0x6E, 0x73,
+ 0x75, 0x73, 0x00, 0x74, 0x59, 0x03, 0x0A, 0x66, 0x03, 0x0B, 0x70, 0x03, 0x0F, 0x86, 0x03, 0x11,
+ 0x91, 0x03, 0x16, 0xEA, 0x03, 0x18, 0xF8, 0x03, 0x00, 0x11, 0x08, 0x16, 0x12, 0x07, 0x00, 0x84,
+ 0x65, 0x73, 0x6E, 0x27, 0x74, 0x00, 0x0B, 0x18, 0x04, 0x06, 0x00, 0x82, 0x67, 0x68, 0x74, 0x00,
+ 0x47, 0x77, 0x03, 0x0A, 0x7E, 0x03, 0x00, 0x0C, 0x1A, 0x00, 0x81, 0x74, 0x68, 0x00, 0x11, 0x08,
+ 0x0F, 0x00, 0x81, 0x74, 0x68, 0x00, 0x16, 0x18, 0x08, 0x15, 0x00, 0x83, 0x73, 0x75, 0x6C, 0x74,
+ 0x00, 0x44, 0x9B, 0x03, 0x08, 0xA6, 0x03, 0x16, 0xE2, 0x03, 0x00, 0x15, 0x04, 0x13, 0x13, 0x04,
+ 0x00, 0x82, 0x65, 0x6E, 0x74, 0x00, 0x55, 0xAD, 0x03, 0x19, 0xD8, 0x03, 0x00, 0x44, 0xB4, 0x03,
+ 0x15, 0xBF, 0x03, 0x00, 0x13, 0x04, 0x00, 0x84, 0x70, 0x61, 0x72, 0x65, 0x6E, 0x74, 0x00, 0x04,
+ 0x13, 0x00, 0x44, 0xC9, 0x03, 0x13, 0xD1, 0x03, 0x00, 0x85, 0x70, 0x61, 0x72, 0x65, 0x6E, 0x74,
+ 0x00, 0x04, 0x00, 0x83, 0x65, 0x6E, 0x74, 0x00, 0x08, 0x0F, 0x08, 0x15, 0x00, 0x82, 0x61, 0x6E,
+ 0x74, 0x00, 0x12, 0x06, 0x00, 0x82, 0x6E, 0x73, 0x74, 0x00, 0x0C, 0x09, 0x08, 0x11, 0x04, 0x10,
+ 0x00, 0x84, 0x69, 0x66, 0x65, 0x73, 0x74, 0x00, 0x53, 0xFF, 0x03, 0x17, 0x16, 0x04, 0x00, 0x57,
+ 0x06, 0x04, 0x18, 0x0E, 0x04, 0x00, 0x11, 0x0C, 0x00, 0x83, 0x70, 0x75, 0x74, 0x00, 0x12, 0x00,
+ 0x82, 0x74, 0x70, 0x75, 0x74, 0x00, 0x13, 0x18, 0x12, 0x00, 0x83, 0x74, 0x70, 0x75, 0x74, 0x00,
+ 0x46, 0x2D, 0x04, 0x08, 0x39, 0x04, 0x0B, 0x43, 0x04, 0x15, 0x55, 0x04, 0x00, 0x08, 0x18, 0x14,
+ 0x08, 0x15, 0x09, 0x00, 0x81, 0x6E, 0x63, 0x79, 0x00, 0x17, 0x09, 0x04, 0x16, 0x00, 0x82, 0x65,
+ 0x74, 0x79, 0x00, 0x06, 0x15, 0x04, 0x15, 0x0C, 0x08, 0x0B, 0x00, 0x87, 0x69, 0x65, 0x72, 0x61,
+ 0x72, 0x63, 0x68, 0x79, 0x00, 0x04, 0x05, 0x0C, 0x0F, 0x00, 0x82, 0x72, 0x61, 0x72, 0x79, 0x00
+};
\ No newline at end of file
diff --git a/keyboards/keychron/q1/ansi/keymaps/mkillewald/autocorrection_dict.txt b/keyboards/keychron/q1/ansi/keymaps/mkillewald/autocorrection_dict.txt
new file mode 100644
index 000000000000..8280fcf703b9
--- /dev/null
+++ b/keyboards/keychron/q1/ansi/keymaps/mkillewald/autocorrection_dict.txt
@@ -0,0 +1,85 @@
+# Copyright 2021-2022 Google LLC
+#
+# 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
+#
+# https://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.
+
+:guage -> gauge
+:the the: -> the
+:thier -> their
+:ture -> true
+accomodate -> accommodate
+acommodate -> accommodate
+aparent -> apparent
+aparrent -> apparent
+apparant -> apparent
+apparrent -> apparent
+aquire -> acquire
+becuase -> because
+cauhgt -> caught
+cheif -> chief
+choosen -> chosen
+cieling -> ceiling
+collegue -> colleague
+concensus -> consensus
+contians -> contains
+cosnt -> const
+dervied -> derived
+dosen't -> doesn't
+fales -> false
+fasle -> false
+fitler -> filter
+flase -> false
+foward -> forward
+frequecy -> frequency
+gaurantee -> guarantee
+guaratee -> guarantee
+heigth -> height
+heirarchy -> hierarchy
+inclued -> include
+interator -> iterator
+intput -> input
+invliad -> invalid
+lenght -> length
+liasion -> liaison
+libary -> library
+listner -> listener
+looses: -> loses
+looup -> lookup
+manefist -> manifest
+namesapce -> namespace
+namespcae -> namespace
+occassion -> occasion
+occured -> occurred
+ouptut -> output
+ouput -> output
+overide -> override
+postion -> position
+priviledge -> privilege
+psuedo -> pseudo
+recieve -> receive
+refered -> referred
+relevent -> relevant
+repitition -> repetition
+reuslt -> result
+retrun -> return
+retun -> return
+reutrn -> return
+saftey -> safety
+seperate -> separate
+singed -> signed
+stirng -> string
+strign -> string
+swithc -> switch
+swtich -> switch
+thresold -> threshold
+udpate -> update
+widht -> width
\ No newline at end of file
diff --git a/keyboards/keychron/q1/ansi/keymaps/mkillewald/config.h b/keyboards/keychron/q1/ansi/keymaps/mkillewald/config.h
index bc9fe405c35c..595ac12294e5 100644
--- a/keyboards/keychron/q1/ansi/keymaps/mkillewald/config.h
+++ b/keyboards/keychron/q1/ansi/keymaps/mkillewald/config.h
@@ -1,4 +1,4 @@
-/* Copyright 2021 @ Mike Killewald
+/* Copyright 2023 @ Mike Killewald (https://github.com/mkillewald)
*
* 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
@@ -16,8 +16,39 @@
#pragma once
-#ifdef RGB_MATRIX_ENABLE
-# define RGB_DISABLE_WHEN_USB_SUSPENDED
-# define CAPS_LOCK_INDICATOR_COLOR RGB_RED
-# define FN_LAYER_COLOR RGB_ORANGE
-#endif
\ No newline at end of file
+// default options applied when eeprom is cleared
+#define DEFAULT_CAPS_LOCK_LIGHT_TAB 0 // 1 = enable, 0 = disable
+#define DEFAULT_CAPS_LOCK_LIGHT_ALPHA 1 // 1 = enable, 0 = disable
+#define DEFAULT_FN_LAYER_TRANSPARENT_OFF 0 // 1 = enable, 0 = disable
+#define DEFAULT_FN_LAYER_SHOW_COLOR 1 // 1 = enable, 0 = disable
+#define DEFAULT_RGB_ENABLE_MAC_BASE 1 // 1 = enable, 0 = disable
+#define DEFAULT_RGB_ENABLE_WIN_BASE 1 // 1 = enable, 0 = disable
+#define DEFAULT_HUE_WIN_BASE 80 // HSV green hue (Win Base layer)
+#define RGB_MATRIX_DEFAULT_HUE 0 // HSV red hue (Mac Base layer)
+#define RGB_MATRIX_DEFAULT_SAT 255 // Both Win/Mac Base layers
+#define RGB_MATRIX_DEFAULT_VAL 255 // Both Win/Mac Base layers
+#define RGB_MATRIX_DEFAULT_SPD 127 // Both Win/Mac Base layers
+#define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_BREATHING // Both Win/Mac Base layers
+
+// Autocorrect is off at start up. If you want Autocorrect to be on at startup,
+// remove or comment out the following line
+#define AUTOCORRECT_OFF_AT_STARTUP
+
+// Caps Lock RGB indicator color
+#define CAPS_LOCK_INDICATOR_COLOR RGB_WHITE
+
+// Dynamic Fn Layer RGB indicator options
+#define FN1_LAYER_COLOR RGB_YELLOW
+
+// Caps Word RGB indicator color
+#define CAPS_WORD_INDICATOR_COLOR RGB_WHITE
+
+// Caps Word is activated by double-tapping left Shift. Replace this with
+// #define BOTH_SHIFTS_TURNS_ON_CAPS_WORD if you want to activate Caps Word
+// by single-tapping both left and right Shift togeter.
+#define DOUBLE_TAP_SHIFT_TURNS_ON_CAPS_WORD
+
+// Caps Word will light left Shift, left Control and left Option (or left Windows
+// key) when acitvated. Remove this line if you want Caps Word to only light left
+// Shift when enabled.
+#define CAPS_WORD_LIGHT_LOWER_LEFT_CORNER
\ No newline at end of file
diff --git a/keyboards/keychron/q1/ansi/keymaps/mkillewald/keymap.c b/keyboards/keychron/q1/ansi/keymaps/mkillewald/keymap.c
index 4fc8ad58e546..8253e642fc98 100644
--- a/keyboards/keychron/q1/ansi/keymaps/mkillewald/keymap.c
+++ b/keyboards/keychron/q1/ansi/keymaps/mkillewald/keymap.c
@@ -1,4 +1,4 @@
-/* Copyright 2021 @ Mike Killewald
+/* Copyright 2023 @ Mike Killewald (https://github.com/mkillewald)
*
* 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,39 +15,13 @@
*/
#include QMK_KEYBOARD_H
-#include "keymap_user.h"
-#ifdef RGB_MATRIX_ENABLE
-# include "rgb_matrix_user.h"
-#endif
+#include "keychron_common.h"
+#include "myfork_keychron_ft.h"
+#include "mkillewald.h"
+#include "layers.h"
// clang-format off
-typedef union {
- uint32_t raw;
- struct {
- bool caps_lock_light_tab :1;
- bool caps_lock_light_alphas :1;
- bool fn_layer_transparent_keys_off :1;
- bool fn_layer_color_enable :1;
- };
-} user_config_t;
-
-user_config_t user_config;
-
-enum custom_keycodes {
- KC_LIGHT_TAB_TOGGLE = QK_KB_2, // TECH DEBT: Starts at QK_KB_2 to maintain ordering with VIA definitions. See #19884. Revert to QK_KB_0 when VIA catches up with QMK.
- KC_LIGHT_ALPHAS_TOGGLE,
- KC_FN_LAYER_TRANSPARENT_KEYS_TOGGLE,
- KC_FN_LAYER_COLOR_TOGGLE
-};
-
-#define KC_LTTOG KC_LIGHT_TAB_TOGGLE
-#define KC_LATOG KC_LIGHT_ALPHAS_TOGGLE
-#define KC_TKTOG KC_FN_LAYER_TRANSPARENT_KEYS_TOGGLE
-#define KC_FCTOG KC_FN_LAYER_COLOR_TOGGLE
-#define KC_TASK LGUI(KC_TAB)
-#define KC_FLXP LGUI(KC_E)
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[MAC_BASE] = LAYOUT_ansi_82(
@@ -56,98 +30,45 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
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_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_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(MAC_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+ KC_LCTL, KC_LOPTN, KC_LGUI, KC_SPC, KC_RGUI, MO(MAC_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
[MAC_FN] = LAYOUT_ansi_82(
- KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_LTTOG, KC_LATOG, KC_TKTOG, KC_FCTOG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+ KC_LBMAC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, _______,
+ RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______,
+ AC_TOGG, KC_LTTOG, KC_LATOG, KC_TKTOG, KC_FCTOG, _______, _______, _______, LCAG(KC_W), LCAG(KC_D), _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
[WIN_BASE] = LAYOUT_ansi_82(
- 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_INS,
- 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_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_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_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(WIN_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+ 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_INS,
+ 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_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_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_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
[WIN_FN] = LAYOUT_ansi_82(
- KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_LTTOG, KC_LATOG, KC_TKTOG, KC_FCTOG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
+ _______, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, _______,
+ RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______,
+ AC_TOGG, KC_LTTOG, KC_LATOG, KC_TKTOG, KC_FCTOG, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______)
};
// clang-format on
-void matrix_init_user(void) {
-#ifdef RGB_MATRIX_ENABLE
- rgb_matrix_init_user();
-#endif
-}
-
-void keyboard_post_init_user(void) {
- user_config.raw = eeconfig_read_user();
-}
-
-void eeconfig_init_user(void) {
- user_config.raw = 0;
- user_config.caps_lock_light_tab = false;
- user_config.caps_lock_light_alphas = false;
- user_config.fn_layer_transparent_keys_off = true;
- user_config.fn_layer_color_enable = false;
- eeconfig_update_user(user_config.raw);
+void housekeeping_task_user(void) {
+ housekeeping_task_keychron();
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case KC_LIGHT_TAB_TOGGLE:
- if (record->event.pressed) {
- user_config.caps_lock_light_tab ^= 1; // bitwise xor to toggle status bit
- eeconfig_update_user(user_config.raw);
- }
- return false; // Skip all further processing of this key
- case KC_LIGHT_ALPHAS_TOGGLE:
- if (record->event.pressed) {
- user_config.caps_lock_light_alphas ^= 1;
- eeconfig_update_user(user_config.raw);
- }
- return false; // Skip all further processing of this key
- case KC_FN_LAYER_TRANSPARENT_KEYS_TOGGLE:
- if (record->event.pressed) {
- user_config.fn_layer_transparent_keys_off ^= 1;
- eeconfig_update_user(user_config.raw);
- }
- return false; // Skip all further processing of this key
- case KC_FN_LAYER_COLOR_TOGGLE:
- if (record->event.pressed) {
- user_config.fn_layer_color_enable ^= 1;
- eeconfig_update_user(user_config.raw);
- }
- return false; // Skip all further processing of this key
- default:
- return true; // Process all other keycodes normally
+ if (!(process_record_keychron(keycode, record) &&
+ process_record_myfork_keychron_ft(keycode, record) &&
+ process_record_mkillewald(keycode, record))) {
+ return false;
}
-}
-
-bool get_caps_lock_light_tab(void) {
- return user_config.caps_lock_light_tab;
-}
-
-bool get_caps_lock_light_alphas(void) {
- return user_config.caps_lock_light_alphas;
-}
-
-bool get_fn_layer_transparent_keys_off(void) {
- return user_config.fn_layer_transparent_keys_off;
-}
-
-bool get_fn_layer_color_enable(void) {
- return user_config.fn_layer_color_enable;
-}
+ return true;
+}
\ No newline at end of file
diff --git a/keyboards/keychron/q1/ansi/keymaps/mkillewald/layers.h b/keyboards/keychron/q1/ansi/keymaps/mkillewald/layers.h
new file mode 100644
index 000000000000..984a27aa77c8
--- /dev/null
+++ b/keyboards/keychron/q1/ansi/keymaps/mkillewald/layers.h
@@ -0,0 +1,46 @@
+/* Copyright 2023 @ Mike Killewald (https://github.com/mkillewald)
+ *
+ * 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 .
+ */
+
+#pragma once
+
+#include "mkillewald.h"
+
+enum layers{
+ MAC_BASE,
+ MAC_FN,
+ WIN_BASE,
+ WIN_FN
+};
+
+#define MAC_FN1 MAC_FN
+#define WIN_FN1 WIN_FN
+#define MAC_WIN_FN2 255 // not used, keymap does not have fn2 key
+
+/* Factory test keys */
+#define FN_KEY1 MO(MAC_FN) // Fn Mac Base
+#define FN_KEY2 MO(WIN_FN) // Fn Win Base
+
+#define RESET_KEY1 KC_J
+#define RESET_KEY2 KC_Z
+#define RESET_KEY2_ALT KC_LTTOG
+
+#define BL_TEST_KEY1 KC_RIGHT
+#define BL_TEST_KEY2 KC_HOME
+
+#if !defined(KC_LOPTN)
+#define KC_LOPTN KC_LOPT
+#endif
+
diff --git a/keyboards/keychron/q1/ansi/keymaps/mkillewald/readme.md b/keyboards/keychron/q1/ansi/keymaps/mkillewald/readme.md
index 8ff2dbcc2cb9..99009a820e2d 100644
--- a/keyboards/keychron/q1/ansi/keymaps/mkillewald/readme.md
+++ b/keyboards/keychron/q1/ansi/keymaps/mkillewald/readme.md
@@ -1,43 +1,142 @@
-## mkillewald's Keychron Q1 keymap (ANSI rev_0100) v1.0.4
+## Keychron Q1 RGB ANSI ATMEGA32U4 (no knob) Keymap v2.0.2
-This keymap builds on the keymap by Grayson Carr (gtg465x) but adds a couple options.
+![Keychron Q1 ANSI](https://i.imgur.com/DUA2dMd.jpg)
+
+### Highly Recommended:
+When you flash this firmware for the first time, you should clear the eeprom so that the eeprom defaults are properly set. Be aware that clearing the eeprom will erase any changes previously made in VIA. Please backup your VIA config before clearing the eeprom. If you place your keyboard in DFU mode by holding ESC and plugging in the USB cable, this should clear the eeprom even if you take it out of DFU mode at that point without flashing. Alternatively, you may use the factory reset key combo (Fn+J+Z) to clear the eeprom after flashing.
## Features:
-- On macOS, F3 opens Mission Control and F4 opens Launchpad without needing to configure shortcuts in System Preferences
-- RGB lighting turns off when the computer sleeps
-- Caps Lock RGB indicator
- - the Caps Lock key will light when Caps Lock is enabled with the following options:
- - #define CAPS_LOCK_INDICATOR_COLOR [color] in config.h to set the backlight color used for the indicator when Caps Lock is enabled (default: red)
- - Fn+Z will toggle lighting the TAB key when Caps Lock is enabled. This is useful with non backlit keycaps/legends. (default: off)
- - Fn+X will toggle lighting all the alpha keys when Caps Lock is enabled. (default: off)
-
-- Dynamic Fn layer RGB indicator
- - When the Fn key is held down, any keys defined on the Fn layer in this firmware or in VIA will be highlighted with the following options:
- - #define FN_LAYER_COLOR [color] in config.h to set a static color for defined keys (default: orange)
- - Fn+C will toggle turning off RGB for keys with no definition (default: RGB off)
- - Fn+V will toggle lighting the defined Fn layer keys with the static color set with FN_LAYER_COLOR (default: static color off)
-
-- All custom keycodes can be moved to different keys in VIA by using the ANY key with the following keycodes:
- - USER(0) (default: F3) macOS Mission Control
- - USER(1) (default: F4) macOS Launchpad
- - USER(2) (default: Fn+Z) Caps Lock light Tab toggle
- - USER(3) (default: Fn+X) Caps Lock light alphas toggle
- - USER(4) (default: Fn+C) Fn layer non-defined keys RGB toggle
- - USER(5) (default: Fn+V) Fn layer defined keys static color toggle
-
-RGB must be toggled on for all indicators to function. If you do not want an RGB mode active but still want the indicators, toggle RGB on and turn the brightness all the way off. The indicators will remain at full brightness.
-
-Please make sure to save any customizations you have made in VIA to a .json file before flashing the firmware. Sometimes it has been necessary to re-apply those changes in VIA after flashing the firmware. If that is the case, you will most likely need to manually add the USER(0) through USER(5) custom keycodes after loading your customizations from the saved .json file. Then re-save a new .json file which will have your previous customizations and the custom keycodes for future use as needed.
-
+- Retains Keychron factory keycodes for Mission Control, Launchpad, Siri, Cortana, Task View, File Explorer, and others.
+
+- Retains Keychron factory reset:
+ - Hold Fn+J+Z for 4 seconds. The RGB LEDs will flash red to indicate that the reset has occurred.
+ - This will clear the eeprom which returns RGB settings back to defaults and erases any changes made with VIA.
+
+- Retains Keychron LED test:
+ - Hold Fn+Right+Home for 4 seconds. The RGB LEDs will all turn white.
+ - Press Right to cycle RGB colors (white, red, green and blue) to check operation of each LED.
+ - Press Home to exit
+
+- Different RGB settings for Mac base and Win base layers. You can set different RGB animations, colors, brightness and speed using the standard RGB keyboard shortcuts.
+
+- Autocorrect is enabled. ([https://docs.qmk.fm/#/feature_autocorrect](https://docs.qmk.fm/#/feature_autocorrect))
+ - Uses getreuer's autocorrect dictionary.
+ [https://github.com/getreuer/qmk-keymap/blob/main/features/autocorrection_dict.txt](https://github.com/getreuer/qmk-keymap/blob/main/features/autocorrection_dict.txt)
+
+- Caps Word enabled with RGB indicator. ([https://docs.qmk.fm/#/feature_caps_word](https://docs.qmk.fm/#/feature_caps_word))
+
+- Caps Lock RGB indicator. Will light Caps Lock key with options to also light Tab key (useful for some keycap sets), and/or light all alpha keys.
+
+- Dynamic Fn layer RGB indicator. When Fn key is held down, any keys defined on the Fn layer in this firmware or in VIA will be highlighted.
+
+##### Notes:
+
+###### Toggling RGB mode off will disable RGB and indicators separately for each base layer (Mac or Win). RGB must be toggled on for all indicators to function. If you do not want an RGB mode active but still want the indicators, toggle RGB on and turn the brightness all the way off. The indicators will remain at full brightness.
+###### Changing RGB settings with VIA lighting tab is unsupported at this time and may have undesired effects. Keymap changes with VIA is supported.
+
+## Config.h options
+
+Default options (these defaults will be applied whenever the eeprom is cleared):
+
+```
+ #define DEFAULT_CAPS_LOCK_LIGHT_TAB 0 // 1 = enable, 0 = disable
+ #define DEFAULT_CAPS_LOCK_LIGHT_ALPHA 1 // 1 = enable, 0 = disable
+ #define DEFAULT_FN_LAYER_TRANSPARENT_OFF 0 // 1 = enable, 0 = disable
+ #define DEFAULT_FN_LAYER_SHOW_COLOR 1 // 1 = enable, 0 = disable
+ #define DEFAULT_RGB_ENABLE_MAC_BASE 1 // 1 = enable, 0 = disable
+ #define DEFAULT_RGB_ENABLE_WIN_BASE 1 // 1 = enable, 0 = disable
+ #define DEFAULT_HUE_WIN_BASE 80 // HSV green hue (Win Base layer)
+ #define RGB_MATRIX_DEFAULT_HUE 0 // HSV red hue (Mac Base layer)
+ #define RGB_MATRIX_DEFAULT_SAT 255 // Both Win/Mac Base layers
+ #define RGB_MATRIX_DEFAULT_VAL 255 // Both Win/Mac Base layers
+ #define RGB_MATRIX_DEFAULT_SPD 127 // Both Win/Mac Base layers
+ #define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_BREATHING // Both Win/Mac Base layers
+```
+
+Autocorrect option:
+
+```
+ // Autocorrect is off at start up. If you want Autocorrect to be on at startup,
+ // remove or comment out the following line
+ #define AUTOCORRECT_OFF_AT_STARTUP
+```
+
+Caps Lock RGB indicator option:
+
+```
+ #define CAPS_LOCK_INDICATOR_COLOR RGB_WHITE
+```
+
+Dynamic Fn Layer RGB indicator options:
+
+```
+ #define FN1_LAYER_COLOR RGB_YELLOW
+```
+
+Caps Word options:
+
+```
+ // Caps Word RGB indicator color
+ #define CAPS_WORD_INDICATOR_COLOR RGB_WHITE
+
+ // Caps Word is activated by double-tapping left Shift. Replace this with
+ // #define BOTH_SHIFTS_TURNS_ON_CAPS_WORD if you want to activate Caps Word
+ // by single-tapping both left and right Shift togeter.
+ #define DOUBLE_TAP_SHIFT_TURNS_ON_CAPS_WORD
+
+ // Caps Word will light left Shift, left Control and left Option (or left Windows
+ // key) when acitvated. Remove this line if you want Caps Word to only light left
+ // Shift when enabled.
+ #define CAPS_WORD_LIGHT_LOWER_LEFT_CORNER
+```
+
+## This keymap makes the following layout changes over the factory firmware
+
+- Fn+Left Shift toggles Autocorrect on/off
+- Fn+Backspace enters DFU mode (but does not reset eeprom)
+- Fn+Z (KC_LTTOG) Caps Lock Light Tab Toggle (default: off)
+ - toggle lighting the Tab key when Caps Lock is enabled. This is useful with non backlit keycaps/legends.
+- Fn+X (KC_LATOG) Caps Lock Light Alpha Toggle (default: on)
+ - toggle lighting all the alpha keys when Caps Lock is enabled.
+- Fn+C (KC_TKTOG) Fn layer Trasnparent Key Off Toggle (default: RGB on)
+ - toggle turning off RGB for keys with no definition
+- Fn+V (KC_FCTOG) Fn layer Color Toggle (default: static color on)
+ - toggle lighting the defined Fn layer keys with the static color set with FN1_LAYER_COLOR
+
+- Mac mode only
+ - Fn+Esc (KC_LBMAC) will lock and sleep display
+ - Fn+< sets my secondary display to 0° rotation
+ - Fn+> sets my secondary display to 90° rotation
+
+ Note: display rotation requires additional software and changes made, see this link for more information:
+ [https://gist.github.com/mkillewald/706b7ef8624d8c2bf17ce1df344cff48](https://gist.github.com/mkillewald/706b7ef8624d8c2bf17ce1df344cff48)
+
+All custom keycodes can be moved to different keys in VIA by using the following:
+- CUSTOM(64) = KC_LTTOG (default: Fn+Z) Caps Lock Light Tab Toggle
+- CUSTOM(65) = KC_LATOG (default: Fn+X) Caps Lock Light Alpha Toggle
+- CUSTOM(66) = KC_TKTOG (default: Fn+C) Fn layer Trasnparent Key Off Toggle
+- CUSTOM(67) = KC_FCTOG (default: Fn+V) Fn layer Color Toggle
+- CUSTOM(68) = KC_LBMAC (default Mac Only: Fn+Esc) Lock and Blank Mac
+
+
#### USE AT YOUR OWN RISK
## Changelog:
+v2.0.2 May 9, 2023
+- added Keychron factory reset and LED test
+
+v2.0.1 April 11, 2023
+- enabled separate RGB toggle for each base layer (Mac / Win)
+
+v2.0.0 April 11, 2023
+- copied code from Q2 v2.0.0 keymap over
+
v1.0.4 October 9, 2021
- Caps Lock and Fn layer toggles are now stored in eeprom so settings will remain when Q1 is unplugged
v1.0.3 October 8, 2021
-- now using keycode toggles instead of preprocessor directive to set the various Caps Lock and Fn Layer RGB lighting options. This allows for setting the options from user space without having to recompile.
+- now using keycode toggles instead of preprocessor directives to set the various Caps Lock and Fn Layer RGB lighting options. This allows for setting the options from user space without having to recompile.
v1.0.2 October 7, 2021
- adapted Grayson Carr's (gtg465x) Caps Lock alphas and dynamic Fn layer RGB routines
diff --git a/keyboards/keychron/q1/ansi/keymaps/mkillewald/rules.mk b/keyboards/keychron/q1/ansi/keymaps/mkillewald/rules.mk
index af720e37ee7b..8bf77b0dffca 100644
--- a/keyboards/keychron/q1/ansi/keymaps/mkillewald/rules.mk
+++ b/keyboards/keychron/q1/ansi/keymaps/mkillewald/rules.mk
@@ -1,6 +1,5 @@
-VIA_ENABLE = yes
-MOUSEKEY_ENABLE = no
+CAPS_WORD_ENABLE = yes
+AUTOCORRECT_ENABLE = yes
-ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes)
- SRC += rgb_matrix_user.c
-endif
\ No newline at end of file
+VPATH += keyboards/keychron/common
+SRC += keychron_common.c
diff --git a/keyboards/keychron/q1/ansi_encoder/keymaps/mkillewald/autocorrect_data.h b/keyboards/keychron/q1/ansi_encoder/keymaps/mkillewald/autocorrect_data.h
new file mode 100644
index 000000000000..a092cc777346
--- /dev/null
+++ b/keyboards/keychron/q1/ansi_encoder/keymaps/mkillewald/autocorrect_data.h
@@ -0,0 +1,176 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+/*******************************************************************************
+ 88888888888 888 d8b .d888 d8b 888 d8b
+ 888 888 Y8P d88P" Y8P 888 Y8P
+ 888 888 888 888
+ 888 88888b. 888 .d8888b 888888 888 888 .d88b. 888 .d8888b
+ 888 888 "88b 888 88K 888 888 888 d8P Y8b 888 88K
+ 888 888 888 888 "Y8888b. 888 888 888 88888888 888 "Y8888b.
+ 888 888 888 888 X88 888 888 888 Y8b. 888 X88
+ 888 888 888 888 88888P' 888 888 888 "Y8888 888 88888P'
+ 888 888
+ 888 888
+ 888 888
+ .d88b. .d88b. 88888b. .d88b. 888d888 8888b. 888888 .d88b. .d88888
+ d88P"88b d8P Y8b 888 "88b d8P Y8b 888P" "88b 888 d8P Y8b d88" 888
+ 888 888 88888888 888 888 88888888 888 .d888888 888 88888888 888 888
+ Y88b 888 Y8b. 888 888 Y8b. 888 888 888 Y88b. Y8b. Y88b 888
+ "Y88888 "Y8888 888 888 "Y8888 888 "Y888888 "Y888 "Y8888 "Y88888
+ 888
+ Y8b d88P
+ "Y88P"
+*******************************************************************************/
+
+#pragma once
+
+// Autocorrection dictionary (71 entries):
+// :guage -> gauge
+// :the:the: -> the
+// :thier -> their
+// :ture -> true
+// accomodate -> accommodate
+// acommodate -> accommodate
+// aparent -> apparent
+// aparrent -> apparent
+// apparant -> apparent
+// apparrent -> apparent
+// aquire -> acquire
+// becuase -> because
+// cauhgt -> caught
+// cheif -> chief
+// choosen -> chosen
+// cieling -> ceiling
+// collegue -> colleague
+// concensus -> consensus
+// contians -> contains
+// cosnt -> const
+// dervied -> derived
+// dosen't -> doesn't
+// fales -> false
+// fasle -> false
+// fitler -> filter
+// flase -> false
+// foward -> forward
+// frequecy -> frequency
+// gaurantee -> guarantee
+// guaratee -> guarantee
+// heigth -> height
+// heirarchy -> hierarchy
+// inclued -> include
+// interator -> iterator
+// intput -> input
+// invliad -> invalid
+// lenght -> length
+// liasion -> liaison
+// libary -> library
+// listner -> listener
+// looses: -> loses
+// looup -> lookup
+// manefist -> manifest
+// namesapce -> namespace
+// namespcae -> namespace
+// occassion -> occasion
+// occured -> occurred
+// ouptut -> output
+// ouput -> output
+// overide -> override
+// postion -> position
+// priviledge -> privilege
+// psuedo -> pseudo
+// recieve -> receive
+// refered -> referred
+// relevent -> relevant
+// repitition -> repetition
+// reuslt -> result
+// retrun -> return
+// retun -> return
+// reutrn -> return
+// saftey -> safety
+// seperate -> separate
+// singed -> signed
+// stirng -> string
+// strign -> string
+// swithc -> switch
+// swtich -> switch
+// thresold -> threshold
+// udpate -> update
+// widht -> width
+
+#define AUTOCORRECT_MIN_LENGTH 5 // ":ture"
+#define AUTOCORRECT_MAX_LENGTH 10 // "accomodate"
+#define DICTIONARY_SIZE 1120
+
+static const uint8_t autocorrect_data[DICTIONARY_SIZE] PROGMEM = {
+ 0x6C, 0x2B, 0x00, 0x06, 0x47, 0x00, 0x07, 0x51, 0x00, 0x08, 0xC7, 0x00, 0x09, 0xF0, 0x01, 0x0A,
+ 0xFA, 0x01, 0x0B, 0x1A, 0x02, 0x11, 0x35, 0x02, 0x12, 0xBE, 0x02, 0x13, 0xCA, 0x02, 0x15, 0xD4,
+ 0x02, 0x16, 0x14, 0x03, 0x17, 0x43, 0x03, 0x1C, 0x20, 0x04, 0x00, 0x48, 0x32, 0x00, 0x16, 0x3C,
+ 0x00, 0x00, 0x0B, 0x17, 0x2C, 0x08, 0x0B, 0x17, 0x2C, 0x00, 0x84, 0x00, 0x08, 0x16, 0x12, 0x12,
+ 0x0F, 0x00, 0x84, 0x73, 0x65, 0x73, 0x00, 0x0B, 0x17, 0x0C, 0x1A, 0x16, 0x00, 0x81, 0x63, 0x68,
+ 0x00, 0x44, 0x5E, 0x00, 0x08, 0x6A, 0x00, 0x0F, 0xAE, 0x00, 0x15, 0xBB, 0x00, 0x00, 0x0C, 0x0F,
+ 0x19, 0x11, 0x0C, 0x00, 0x83, 0x61, 0x6C, 0x69, 0x64, 0x00, 0x4A, 0x77, 0x00, 0x0C, 0x81, 0x00,
+ 0x15, 0x8C, 0x00, 0x18, 0xA5, 0x00, 0x00, 0x11, 0x0C, 0x16, 0x00, 0x83, 0x67, 0x6E, 0x65, 0x64,
+ 0x00, 0x19, 0x15, 0x08, 0x07, 0x00, 0x83, 0x69, 0x76, 0x65, 0x64, 0x00, 0x48, 0x93, 0x00, 0x18,
+ 0x9C, 0x00, 0x00, 0x09, 0x08, 0x15, 0x00, 0x81, 0x72, 0x65, 0x64, 0x00, 0x06, 0x06, 0x12, 0x00,
+ 0x81, 0x72, 0x65, 0x64, 0x00, 0x0F, 0x06, 0x11, 0x0C, 0x00, 0x81, 0x64, 0x65, 0x00, 0x12, 0x16,
+ 0x08, 0x15, 0x0B, 0x17, 0x00, 0x82, 0x68, 0x6F, 0x6C, 0x64, 0x00, 0x04, 0x1A, 0x12, 0x09, 0x00,
+ 0x83, 0x72, 0x77, 0x61, 0x72, 0x64, 0x00, 0x44, 0xE9, 0x00, 0x06, 0xF6, 0x00, 0x07, 0x04, 0x01,
+ 0x08, 0x10, 0x01, 0x0A, 0x34, 0x01, 0x0F, 0x51, 0x01, 0x15, 0x5A, 0x01, 0x16, 0x75, 0x01, 0x17,
+ 0x90, 0x01, 0x18, 0xD7, 0x01, 0x19, 0xE4, 0x01, 0x00, 0x06, 0x13, 0x16, 0x08, 0x10, 0x04, 0x11,
+ 0x00, 0x82, 0x61, 0x63, 0x65, 0x00, 0x13, 0x04, 0x16, 0x08, 0x10, 0x04, 0x11, 0x00, 0x83, 0x70,
+ 0x61, 0x63, 0x65, 0x00, 0x0C, 0x15, 0x08, 0x19, 0x12, 0x00, 0x82, 0x72, 0x69, 0x64, 0x65, 0x00,
+ 0x17, 0x00, 0x44, 0x19, 0x01, 0x11, 0x24, 0x01, 0x00, 0x15, 0x04, 0x18, 0x0A, 0x00, 0x82, 0x6E,
+ 0x74, 0x65, 0x65, 0x00, 0x04, 0x15, 0x18, 0x04, 0x0A, 0x00, 0x87, 0x75, 0x61, 0x72, 0x61, 0x6E,
+ 0x74, 0x65, 0x65, 0x00, 0x44, 0x3B, 0x01, 0x07, 0x45, 0x01, 0x00, 0x18, 0x0A, 0x2C, 0x00, 0x83,
+ 0x61, 0x75, 0x67, 0x65, 0x00, 0x08, 0x0F, 0x0C, 0x19, 0x0C, 0x15, 0x13, 0x00, 0x82, 0x67, 0x65,
+ 0x00, 0x16, 0x04, 0x09, 0x00, 0x82, 0x6C, 0x73, 0x65, 0x00, 0x4C, 0x61, 0x01, 0x18, 0x6D, 0x01,
+ 0x00, 0x18, 0x14, 0x04, 0x00, 0x84, 0x63, 0x71, 0x75, 0x69, 0x72, 0x65, 0x00, 0x17, 0x2C, 0x00,
+ 0x82, 0x72, 0x75, 0x65, 0x00, 0x04, 0x00, 0x4F, 0x7E, 0x01, 0x18, 0x86, 0x01, 0x00, 0x09, 0x00,
+ 0x83, 0x61, 0x6C, 0x73, 0x65, 0x00, 0x06, 0x08, 0x05, 0x00, 0x83, 0x61, 0x75, 0x73, 0x65, 0x00,
+ 0x04, 0x00, 0x47, 0x9C, 0x01, 0x13, 0xC1, 0x01, 0x15, 0xCB, 0x01, 0x00, 0x12, 0x10, 0x00, 0x50,
+ 0xA6, 0x01, 0x12, 0xB5, 0x01, 0x00, 0x12, 0x06, 0x04, 0x00, 0x87, 0x63, 0x6F, 0x6D, 0x6D, 0x6F,
+ 0x64, 0x61, 0x74, 0x65, 0x00, 0x06, 0x06, 0x04, 0x00, 0x84, 0x6D, 0x6F, 0x64, 0x61, 0x74, 0x65,
+ 0x00, 0x07, 0x18, 0x00, 0x84, 0x70, 0x64, 0x61, 0x74, 0x65, 0x00, 0x08, 0x13, 0x08, 0x16, 0x00,
+ 0x84, 0x61, 0x72, 0x61, 0x74, 0x65, 0x00, 0x0A, 0x08, 0x0F, 0x0F, 0x12, 0x06, 0x00, 0x82, 0x61,
+ 0x67, 0x75, 0x65, 0x00, 0x08, 0x0C, 0x06, 0x08, 0x15, 0x00, 0x83, 0x65, 0x69, 0x76, 0x65, 0x00,
+ 0x0C, 0x08, 0x0B, 0x06, 0x00, 0x82, 0x69, 0x65, 0x66, 0x00, 0x11, 0x00, 0x4C, 0x03, 0x02, 0x15,
+ 0x10, 0x02, 0x00, 0x0F, 0x08, 0x0C, 0x06, 0x00, 0x85, 0x65, 0x69, 0x6C, 0x69, 0x6E, 0x67, 0x00,
+ 0x0C, 0x17, 0x16, 0x00, 0x83, 0x72, 0x69, 0x6E, 0x67, 0x00, 0x46, 0x21, 0x02, 0x17, 0x2C, 0x02,
+ 0x00, 0x0C, 0x17, 0x1A, 0x16, 0x00, 0x83, 0x69, 0x74, 0x63, 0x68, 0x00, 0x0A, 0x0C, 0x08, 0x0B,
+ 0x00, 0x81, 0x68, 0x74, 0x00, 0x48, 0x45, 0x02, 0x0A, 0x50, 0x02, 0x12, 0x59, 0x02, 0x15, 0x9C,
+ 0x02, 0x18, 0xA7, 0x02, 0x00, 0x16, 0x12, 0x12, 0x0B, 0x06, 0x00, 0x83, 0x73, 0x65, 0x6E, 0x00,
+ 0x0C, 0x15, 0x17, 0x16, 0x00, 0x81, 0x6E, 0x67, 0x00, 0x0C, 0x00, 0x56, 0x62, 0x02, 0x17, 0x7C,
+ 0x02, 0x00, 0x44, 0x69, 0x02, 0x16, 0x72, 0x02, 0x00, 0x0C, 0x0F, 0x00, 0x83, 0x69, 0x73, 0x6F,
+ 0x6E, 0x00, 0x04, 0x06, 0x06, 0x12, 0x00, 0x83, 0x69, 0x6F, 0x6E, 0x00, 0x4C, 0x83, 0x02, 0x16,
+ 0x92, 0x02, 0x00, 0x17, 0x0C, 0x13, 0x08, 0x15, 0x00, 0x86, 0x65, 0x74, 0x69, 0x74, 0x69, 0x6F,
+ 0x6E, 0x00, 0x12, 0x13, 0x00, 0x83, 0x69, 0x74, 0x69, 0x6F, 0x6E, 0x00, 0x17, 0x18, 0x08, 0x15,
+ 0x00, 0x83, 0x74, 0x75, 0x72, 0x6E, 0x00, 0x55, 0xAE, 0x02, 0x17, 0xB7, 0x02, 0x00, 0x17, 0x08,
+ 0x15, 0x00, 0x82, 0x75, 0x72, 0x6E, 0x00, 0x08, 0x15, 0x00, 0x80, 0x72, 0x6E, 0x00, 0x07, 0x08,
+ 0x18, 0x16, 0x13, 0x00, 0x83, 0x65, 0x75, 0x64, 0x6F, 0x00, 0x18, 0x12, 0x12, 0x0F, 0x00, 0x81,
+ 0x6B, 0x75, 0x70, 0x00, 0x48, 0xDB, 0x02, 0x12, 0x03, 0x03, 0x00, 0x4C, 0xE5, 0x02, 0x0F, 0xEE,
+ 0x02, 0x11, 0xF8, 0x02, 0x00, 0x0B, 0x17, 0x2C, 0x00, 0x82, 0x65, 0x69, 0x72, 0x00, 0x17, 0x0C,
+ 0x09, 0x00, 0x83, 0x6C, 0x74, 0x65, 0x72, 0x00, 0x17, 0x16, 0x0C, 0x0F, 0x00, 0x82, 0x65, 0x6E,
+ 0x65, 0x72, 0x00, 0x17, 0x04, 0x15, 0x08, 0x17, 0x11, 0x0C, 0x00, 0x87, 0x74, 0x65, 0x72, 0x61,
+ 0x74, 0x6F, 0x72, 0x00, 0x48, 0x1E, 0x03, 0x11, 0x26, 0x03, 0x18, 0x33, 0x03, 0x00, 0x0F, 0x04,
+ 0x09, 0x00, 0x81, 0x73, 0x65, 0x00, 0x04, 0x0C, 0x17, 0x11, 0x12, 0x06, 0x00, 0x83, 0x61, 0x69,
+ 0x6E, 0x73, 0x00, 0x16, 0x11, 0x08, 0x06, 0x11, 0x12, 0x06, 0x00, 0x85, 0x73, 0x65, 0x6E, 0x73,
+ 0x75, 0x73, 0x00, 0x74, 0x59, 0x03, 0x0A, 0x66, 0x03, 0x0B, 0x70, 0x03, 0x0F, 0x86, 0x03, 0x11,
+ 0x91, 0x03, 0x16, 0xEA, 0x03, 0x18, 0xF8, 0x03, 0x00, 0x11, 0x08, 0x16, 0x12, 0x07, 0x00, 0x84,
+ 0x65, 0x73, 0x6E, 0x27, 0x74, 0x00, 0x0B, 0x18, 0x04, 0x06, 0x00, 0x82, 0x67, 0x68, 0x74, 0x00,
+ 0x47, 0x77, 0x03, 0x0A, 0x7E, 0x03, 0x00, 0x0C, 0x1A, 0x00, 0x81, 0x74, 0x68, 0x00, 0x11, 0x08,
+ 0x0F, 0x00, 0x81, 0x74, 0x68, 0x00, 0x16, 0x18, 0x08, 0x15, 0x00, 0x83, 0x73, 0x75, 0x6C, 0x74,
+ 0x00, 0x44, 0x9B, 0x03, 0x08, 0xA6, 0x03, 0x16, 0xE2, 0x03, 0x00, 0x15, 0x04, 0x13, 0x13, 0x04,
+ 0x00, 0x82, 0x65, 0x6E, 0x74, 0x00, 0x55, 0xAD, 0x03, 0x19, 0xD8, 0x03, 0x00, 0x44, 0xB4, 0x03,
+ 0x15, 0xBF, 0x03, 0x00, 0x13, 0x04, 0x00, 0x84, 0x70, 0x61, 0x72, 0x65, 0x6E, 0x74, 0x00, 0x04,
+ 0x13, 0x00, 0x44, 0xC9, 0x03, 0x13, 0xD1, 0x03, 0x00, 0x85, 0x70, 0x61, 0x72, 0x65, 0x6E, 0x74,
+ 0x00, 0x04, 0x00, 0x83, 0x65, 0x6E, 0x74, 0x00, 0x08, 0x0F, 0x08, 0x15, 0x00, 0x82, 0x61, 0x6E,
+ 0x74, 0x00, 0x12, 0x06, 0x00, 0x82, 0x6E, 0x73, 0x74, 0x00, 0x0C, 0x09, 0x08, 0x11, 0x04, 0x10,
+ 0x00, 0x84, 0x69, 0x66, 0x65, 0x73, 0x74, 0x00, 0x53, 0xFF, 0x03, 0x17, 0x16, 0x04, 0x00, 0x57,
+ 0x06, 0x04, 0x18, 0x0E, 0x04, 0x00, 0x11, 0x0C, 0x00, 0x83, 0x70, 0x75, 0x74, 0x00, 0x12, 0x00,
+ 0x82, 0x74, 0x70, 0x75, 0x74, 0x00, 0x13, 0x18, 0x12, 0x00, 0x83, 0x74, 0x70, 0x75, 0x74, 0x00,
+ 0x46, 0x2D, 0x04, 0x08, 0x39, 0x04, 0x0B, 0x43, 0x04, 0x15, 0x55, 0x04, 0x00, 0x08, 0x18, 0x14,
+ 0x08, 0x15, 0x09, 0x00, 0x81, 0x6E, 0x63, 0x79, 0x00, 0x17, 0x09, 0x04, 0x16, 0x00, 0x82, 0x65,
+ 0x74, 0x79, 0x00, 0x06, 0x15, 0x04, 0x15, 0x0C, 0x08, 0x0B, 0x00, 0x87, 0x69, 0x65, 0x72, 0x61,
+ 0x72, 0x63, 0x68, 0x79, 0x00, 0x04, 0x05, 0x0C, 0x0F, 0x00, 0x82, 0x72, 0x61, 0x72, 0x79, 0x00
+};
\ No newline at end of file
diff --git a/keyboards/keychron/q1/ansi_encoder/keymaps/mkillewald/autocorrection_dict.txt b/keyboards/keychron/q1/ansi_encoder/keymaps/mkillewald/autocorrection_dict.txt
new file mode 100644
index 000000000000..8280fcf703b9
--- /dev/null
+++ b/keyboards/keychron/q1/ansi_encoder/keymaps/mkillewald/autocorrection_dict.txt
@@ -0,0 +1,85 @@
+# Copyright 2021-2022 Google LLC
+#
+# 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
+#
+# https://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.
+
+:guage -> gauge
+:the the: -> the
+:thier -> their
+:ture -> true
+accomodate -> accommodate
+acommodate -> accommodate
+aparent -> apparent
+aparrent -> apparent
+apparant -> apparent
+apparrent -> apparent
+aquire -> acquire
+becuase -> because
+cauhgt -> caught
+cheif -> chief
+choosen -> chosen
+cieling -> ceiling
+collegue -> colleague
+concensus -> consensus
+contians -> contains
+cosnt -> const
+dervied -> derived
+dosen't -> doesn't
+fales -> false
+fasle -> false
+fitler -> filter
+flase -> false
+foward -> forward
+frequecy -> frequency
+gaurantee -> guarantee
+guaratee -> guarantee
+heigth -> height
+heirarchy -> hierarchy
+inclued -> include
+interator -> iterator
+intput -> input
+invliad -> invalid
+lenght -> length
+liasion -> liaison
+libary -> library
+listner -> listener
+looses: -> loses
+looup -> lookup
+manefist -> manifest
+namesapce -> namespace
+namespcae -> namespace
+occassion -> occasion
+occured -> occurred
+ouptut -> output
+ouput -> output
+overide -> override
+postion -> position
+priviledge -> privilege
+psuedo -> pseudo
+recieve -> receive
+refered -> referred
+relevent -> relevant
+repitition -> repetition
+reuslt -> result
+retrun -> return
+retun -> return
+reutrn -> return
+saftey -> safety
+seperate -> separate
+singed -> signed
+stirng -> string
+strign -> string
+swithc -> switch
+swtich -> switch
+thresold -> threshold
+udpate -> update
+widht -> width
\ No newline at end of file
diff --git a/keyboards/keychron/q1/ansi_encoder/keymaps/mkillewald/config.h b/keyboards/keychron/q1/ansi_encoder/keymaps/mkillewald/config.h
new file mode 100644
index 000000000000..0ba342b780f4
--- /dev/null
+++ b/keyboards/keychron/q1/ansi_encoder/keymaps/mkillewald/config.h
@@ -0,0 +1,54 @@
+/* Copyright 2023 @ Mike Killewald (https://github.com/mkillewald)
+ *
+ * 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 .
+ */
+
+#pragma once
+
+// default options applied when eeprom is cleared
+#define DEFAULT_CAPS_LOCK_LIGHT_TAB 0 // 1 = enable, 0 = disable
+#define DEFAULT_CAPS_LOCK_LIGHT_ALPHA 1 // 1 = enable, 0 = disable
+#define DEFAULT_FN_LAYER_TRANSPARENT_OFF 0 // 1 = enable, 0 = disable
+#define DEFAULT_FN_LAYER_SHOW_COLOR 1 // 1 = enable, 0 = disable
+#define DEFAULT_RGB_ENABLE_MAC_BASE 1 // 1 = enable, 0 = disable
+#define DEFAULT_RGB_ENABLE_WIN_BASE 1 // 1 = enable, 0 = disable
+#define DEFAULT_HUE_WIN_BASE 80 // HSV green hue (Win Base layer)
+#define RGB_MATRIX_DEFAULT_HUE 37 // HSV gold hue (Mac Base layer)
+#define RGB_MATRIX_DEFAULT_SAT 255 // Both Win/Mac Base layers
+#define RGB_MATRIX_DEFAULT_VAL 255 // Both Win/Mac Base layers
+#define RGB_MATRIX_DEFAULT_SPD 127 // Both Win/Mac Base layers
+#define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_BREATHING // Both Win/Mac Base layers
+
+// Autocorrect is on at start up. If you want Autocorrect to be off at startup,
+// un-comment the following line
+//#define AUTOCORRECT_OFF_AT_STARTUP
+
+// Caps Lock RGB indicator color
+#define CAPS_LOCK_INDICATOR_COLOR RGB_RED
+
+// Dynamic Fn Layer RGB indicator options
+#define FN1_LAYER_COLOR RGB_TEAL
+
+// Caps Word RGB indicator color
+#define CAPS_WORD_INDICATOR_COLOR RGB_RED
+
+// Caps Word is activated by double-tapping left Shift. Replace this with
+// #define BOTH_SHIFTS_TURNS_ON_CAPS_WORD if you want to activate Caps Word
+// by single-tapping both left and right Shift togeter.
+#define DOUBLE_TAP_SHIFT_TURNS_ON_CAPS_WORD
+
+// Caps Word will light left Shift, left Control and left Option (or left Windows
+// key) when acitvated. Remove this line if you want Caps Word to only light left
+// Shift when enabled.
+#define CAPS_WORD_LIGHT_LOWER_LEFT_CORNER
\ No newline at end of file
diff --git a/keyboards/keychron/q1/ansi_encoder/keymaps/mkillewald/keymap.c b/keyboards/keychron/q1/ansi_encoder/keymaps/mkillewald/keymap.c
new file mode 100644
index 000000000000..dabc703d1204
--- /dev/null
+++ b/keyboards/keychron/q1/ansi_encoder/keymaps/mkillewald/keymap.c
@@ -0,0 +1,81 @@
+/* Copyright 2023 @ Mike Killewald (https://github.com/mkillewald)
+ *
+ * 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 .
+ */
+
+#include QMK_KEYBOARD_H
+#include "keychron_common.h"
+#include "myfork_keychron_ft.h"
+#include "mkillewald.h"
+#include "layers.h"
+
+// clang-format off
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [MAC_BASE] = LAYOUT_ansi_82(
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_DEL, KC_MUTE,
+ 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_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_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_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD,MO(MAC_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [MAC_FN] = LAYOUT_ansi_82(
+ KC_LBMAC, 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,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, _______,
+ RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______,
+ AC_TOGG, KC_LTTOG, KC_LATOG, KC_TKTOG, KC_FCTOG, _______, NK_TOGG, _______, LCAG(KC_W), LCAG(KC_D), _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+ [WIN_BASE] = LAYOUT_ansi_82(
+ 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_MUTE,
+ 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_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_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_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, MO(WIN_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [WIN_FN] = LAYOUT_ansi_82(
+ _______, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, RGB_TOG,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, _______,
+ RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______,
+ AC_TOGG, KC_LTTOG, KC_LATOG, KC_TKTOG, KC_FCTOG, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______)
+};
+
+// clang-format on
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
+ [MAC_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [MAC_FN] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI) },
+ [WIN_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [WIN_FN] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI) },
+};
+#endif
+
+void housekeeping_task_user(void) {
+ housekeeping_task_keychron();
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (!(process_record_keychron(keycode, record) &&
+ process_record_myfork_keychron_ft(keycode, record) &&
+ process_record_mkillewald(keycode, record))) {
+ return false;
+ }
+ return true;
+}
diff --git a/keyboards/keychron/q1/ansi/keymaps/mkillewald/keymap_user.h b/keyboards/keychron/q1/ansi_encoder/keymaps/mkillewald/layers.h
similarity index 57%
rename from keyboards/keychron/q1/ansi/keymaps/mkillewald/keymap_user.h
rename to keyboards/keychron/q1/ansi_encoder/keymaps/mkillewald/layers.h
index 87b1baf47f23..e8733b342526 100644
--- a/keyboards/keychron/q1/ansi/keymaps/mkillewald/keymap_user.h
+++ b/keyboards/keychron/q1/ansi_encoder/keymaps/mkillewald/layers.h
@@ -1,4 +1,4 @@
-/* Copyright 2021 @ Mike Killewald
+/* Copyright 2023 @ Mike Killewald (https://github.com/mkillewald)
*
* 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
@@ -16,18 +16,26 @@
#pragma once
-// clang-format off
+#include "mkillewald.h"
-enum layers {
+enum layers{
MAC_BASE,
MAC_FN,
WIN_BASE,
WIN_FN
};
-// clang-format on
+#define MAC_FN1 MAC_FN
+#define WIN_FN1 WIN_FN
+#define MAC_WIN_FN2 255 // not used, keymap does not have fn2 key
-bool get_caps_lock_light_tab(void);
-bool get_caps_lock_light_alphas(void);
-bool get_fn_layer_transparent_keys_off(void);
-bool get_fn_layer_color_enable(void);
\ No newline at end of file
+/* Factory test keys */
+#define FN_KEY1 MO(MAC_FN) // Fn Mac Base
+#define FN_KEY2 MO(WIN_FN) // Fn Win Base
+
+#define RESET_KEY1 KC_J
+#define RESET_KEY2 KC_Z
+#define RESET_KEY2_ALT KC_LTTOG
+
+#define BL_TEST_KEY1 KC_RIGHT
+#define BL_TEST_KEY2 KC_HOME
\ No newline at end of file
diff --git a/keyboards/keychron/q1/ansi_encoder/keymaps/mkillewald/readme.md b/keyboards/keychron/q1/ansi_encoder/keymaps/mkillewald/readme.md
new file mode 100644
index 000000000000..6cd09e93a129
--- /dev/null
+++ b/keyboards/keychron/q1/ansi_encoder/keymaps/mkillewald/readme.md
@@ -0,0 +1,133 @@
+## Keychron Q1 Special Edition RGB ANSI ATMEGA32U4 ENC11 (knob) Keymap v2.0.2
+
+![Keychron Q1SE ANSI encoder](https://i.imgur.com/Y0qHSzU.jpg)
+
+### Highly Recommended:
+When you flash this firmware for the first time, you should clear the eeprom so that the eeprom defaults are properly set. Be aware that clearing the eeprom will erase any changes previously made in VIA. Please backup your VIA config before clearing the eeprom. If you place your keyboard in DFU mode by holding ESC and plugging in the USB cable, this should clear the eeprom even if you take it out of DFU mode at that point without flashing. Alternatively, you may use the factory reset key combo (Fn+J+Z) to clear the eeprom after flashing.
+
+## Features:
+- Retains Keychron factory keycodes for Mission Control, Launchpad, Siri, Cortana, Task View, File Explorer, and others.
+
+- Retains Keychron factory reset:
+ - Hold Fn+J+Z for 4 seconds. The RGB LEDs will flash red to indicate that the reset has occurred.
+ - This will clear the eeprom which returns RGB settings back to defaults and erases any changes made with VIA.
+
+- Retains Keychron LED test:
+ - Hold Fn+Right+Home for 4 seconds. The RGB LEDs will all turn white.
+ - Press Right to cycle RGB colors (white, red, green and blue) to check operation of each LED.
+ - Press Home to exit
+
+- Different RGB settings for Mac base and Win base layers. You can set different RGB animations, colors, brightness and speed using the standard RGB keyboard shortcuts.
+
+- Autocorrect is enabled. ([https://docs.qmk.fm/#/feature_autocorrect](https://docs.qmk.fm/#/feature_autocorrect))
+ - Uses getreuer's autocorrect dictionary.
+ [https://github.com/getreuer/qmk-keymap/blob/main/features/autocorrection_dict.txt](https://github.com/getreuer/qmk-keymap/blob/main/features/autocorrection_dict.txt)
+
+- Caps Word enabled with RGB indicator. ([https://docs.qmk.fm/#/feature_caps_word](https://docs.qmk.fm/#/feature_caps_word))
+
+- Caps Lock RGB indicator. Will light Caps Lock key with options to also light Tab key (useful for some keycap sets), and/or light all alpha keys.
+
+- Dynamic Fn layer RGB indicator. When Fn key is held down, any keys defined on the Fn layer in this firmware or in VIA will be highlighted.
+
+##### Notes:
+
+###### Toggling RGB mode off will disable RGB and indicators separately for each base layer (Mac or Win). RGB must be toggled on for all indicators to function. If you do not want an RGB mode active but still want the indicators, toggle RGB on and turn the brightness all the way off. The indicators will remain at full brightness.
+###### Changing RGB settings with VIA lighting tab is unsupported at this time and may have undesired effects. Keymap changes with VIA is supported.
+
+## Config.h options
+
+Default options (these defaults will be applied whenever the eeprom is cleared):
+
+```
+ #define DEFAULT_CAPS_LOCK_LIGHT_TAB 0 // 1 = enable, 0 = disable
+ #define DEFAULT_CAPS_LOCK_LIGHT_ALPHA 1 // 1 = enable, 0 = disable
+ #define DEFAULT_FN_LAYER_TRANSPARENT_OFF 0 // 1 = enable, 0 = disable
+ #define DEFAULT_FN_LAYER_SHOW_COLOR 1 // 1 = enable, 0 = disable
+ #define DEFAULT_RGB_ENABLE_MAC_BASE 1 // 1 = enable, 0 = disable
+ #define DEFAULT_RGB_ENABLE_WIN_BASE 1 // 1 = enable, 0 = disable
+ #define DEFAULT_HUE_WIN_BASE 80 // HSV green hue (Win Base layer)
+ #define RGB_MATRIX_DEFAULT_HUE 37 // HSV gold hue (Mac Base layer)
+ #define RGB_MATRIX_DEFAULT_SAT 255 // Both Win/Mac Base layers
+ #define RGB_MATRIX_DEFAULT_VAL 255 // Both Win/Mac Base layers
+ #define RGB_MATRIX_DEFAULT_SPD 127 // Both Win/Mac Base layers
+ #define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_BREATHING // Both Win/Mac Base layers
+```
+
+Autocorrect option:
+
+```
+ // Autocorrect is on at start up. If you want Autocorrect to be off at startup,
+ // un-comment the following line
+ //#define AUTOCORRECT_OFF_AT_STARTUP
+```
+
+Caps Lock RGB indicator option:
+
+```
+ #define CAPS_LOCK_INDICATOR_COLOR RGB_RED
+```
+
+Dynamic Fn Layer RGB indicator options:
+
+```
+ #define FN1_LAYER_COLOR RGB_TEAL
+```
+
+Caps Word options:
+
+```
+ // Caps Word RGB indicator color
+ #define CAPS_WORD_INDICATOR_COLOR RGB_RED
+
+ // Caps Word is activated by double-tapping left Shift. Replace this with
+ // #define BOTH_SHIFTS_TURNS_ON_CAPS_WORD if you want to activate Caps Word
+ // by single-tapping both left and right Shift togeter.
+ #define DOUBLE_TAP_SHIFT_TURNS_ON_CAPS_WORD
+
+ // Caps Word will light left Shift, left Control and left Option (or left Windows
+ // key) when acitvated. Remove this line if you want Caps Word to only light left
+ // Shift when enabled.
+ #define CAPS_WORD_LIGHT_LOWER_LEFT_CORNER
+```
+
+## This keymap makes the following layout changes over the factory firmware
+
+- Fn+Left Shift toggles Autocorrect on/off
+- Fn+Backspace enters DFU mode (but does not reset eeprom)
+- Fn+Z (KC_LTTOG) Caps Lock Light Tab Toggle (default: off)
+ - toggle lighting the Tab key when Caps Lock is enabled. This is useful with non backlit keycaps/legends.
+- Fn+X (KC_LATOG) Caps Lock Light Alpha Toggle (default: on)
+ - toggle lighting all the alpha keys when Caps Lock is enabled.
+- Fn+C (KC_TKTOG) Fn layer Trasnparent Key Off Toggle (default: RGB on)
+ - toggle turning off RGB for keys with no definition
+- Fn+V (KC_FCTOG) Fn layer Color Toggle (default: static color on)
+ - toggle lighting the defined Fn layer keys with the static color set with FN1_LAYER_COLOR
+
+- Mac mode only
+ - Fn+Esc (KC_LBMAC) will lock and sleep display
+ - Fn+< sets my secondary display to 0° rotation
+ - Fn+> sets my secondary display to 90° rotation
+
+ Note: display rotation requires additional software and changes made, see this link for more information:
+ [https://gist.github.com/mkillewald/706b7ef8624d8c2bf17ce1df344cff48](https://gist.github.com/mkillewald/706b7ef8624d8c2bf17ce1df344cff48)
+
+All custom keycodes can be moved to different keys in VIA by using the following:
+- CUSTOM(64) = KC_LTTOG (default: Fn+Z) Caps Lock Light Tab Toggle
+- CUSTOM(65) = KC_LATOG (default: Fn+X) Caps Lock Light Alpha Toggle
+- CUSTOM(66) = KC_TKTOG (default: Fn+C) Fn layer Trasnparent Key Off Toggle
+- CUSTOM(67) = KC_FCTOG (default: Fn+V) Fn layer Color Toggle
+- CUSTOM(68) = KC_LBMAC (default Mac Only: Fn+Esc) Lock and Blank Mac
+
+
+#### USE AT YOUR OWN RISK
+
+## Changelog:
+
+v2.0.2 May 9, 2023
+- added Keychron factory reset and LED test
+
+v2.0.1 April 11, 2023
+- enabled separate RGB toggle for each base layer (Mac / Win)
+
+v2.0.0 April 11, 2023
+- copied code from Q2 v2.0.0 firware over
diff --git a/keyboards/keychron/q1/ansi_encoder/keymaps/mkillewald/rules.mk b/keyboards/keychron/q1/ansi_encoder/keymaps/mkillewald/rules.mk
new file mode 100644
index 000000000000..a4066ebf79e1
--- /dev/null
+++ b/keyboards/keychron/q1/ansi_encoder/keymaps/mkillewald/rules.mk
@@ -0,0 +1,6 @@
+ENCODER_MAP_ENABLE = yes
+CAPS_WORD_ENABLE = yes
+AUTOCORRECT_ENABLE = yes
+
+VPATH += keyboards/keychron/common
+SRC += keychron_common.c
diff --git a/keyboards/keychron/q1/iso/keymaps/mkillewald/autocorrect_data.h b/keyboards/keychron/q1/iso/keymaps/mkillewald/autocorrect_data.h
new file mode 100644
index 000000000000..a092cc777346
--- /dev/null
+++ b/keyboards/keychron/q1/iso/keymaps/mkillewald/autocorrect_data.h
@@ -0,0 +1,176 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+/*******************************************************************************
+ 88888888888 888 d8b .d888 d8b 888 d8b
+ 888 888 Y8P d88P" Y8P 888 Y8P
+ 888 888 888 888
+ 888 88888b. 888 .d8888b 888888 888 888 .d88b. 888 .d8888b
+ 888 888 "88b 888 88K 888 888 888 d8P Y8b 888 88K
+ 888 888 888 888 "Y8888b. 888 888 888 88888888 888 "Y8888b.
+ 888 888 888 888 X88 888 888 888 Y8b. 888 X88
+ 888 888 888 888 88888P' 888 888 888 "Y8888 888 88888P'
+ 888 888
+ 888 888
+ 888 888
+ .d88b. .d88b. 88888b. .d88b. 888d888 8888b. 888888 .d88b. .d88888
+ d88P"88b d8P Y8b 888 "88b d8P Y8b 888P" "88b 888 d8P Y8b d88" 888
+ 888 888 88888888 888 888 88888888 888 .d888888 888 88888888 888 888
+ Y88b 888 Y8b. 888 888 Y8b. 888 888 888 Y88b. Y8b. Y88b 888
+ "Y88888 "Y8888 888 888 "Y8888 888 "Y888888 "Y888 "Y8888 "Y88888
+ 888
+ Y8b d88P
+ "Y88P"
+*******************************************************************************/
+
+#pragma once
+
+// Autocorrection dictionary (71 entries):
+// :guage -> gauge
+// :the:the: -> the
+// :thier -> their
+// :ture -> true
+// accomodate -> accommodate
+// acommodate -> accommodate
+// aparent -> apparent
+// aparrent -> apparent
+// apparant -> apparent
+// apparrent -> apparent
+// aquire -> acquire
+// becuase -> because
+// cauhgt -> caught
+// cheif -> chief
+// choosen -> chosen
+// cieling -> ceiling
+// collegue -> colleague
+// concensus -> consensus
+// contians -> contains
+// cosnt -> const
+// dervied -> derived
+// dosen't -> doesn't
+// fales -> false
+// fasle -> false
+// fitler -> filter
+// flase -> false
+// foward -> forward
+// frequecy -> frequency
+// gaurantee -> guarantee
+// guaratee -> guarantee
+// heigth -> height
+// heirarchy -> hierarchy
+// inclued -> include
+// interator -> iterator
+// intput -> input
+// invliad -> invalid
+// lenght -> length
+// liasion -> liaison
+// libary -> library
+// listner -> listener
+// looses: -> loses
+// looup -> lookup
+// manefist -> manifest
+// namesapce -> namespace
+// namespcae -> namespace
+// occassion -> occasion
+// occured -> occurred
+// ouptut -> output
+// ouput -> output
+// overide -> override
+// postion -> position
+// priviledge -> privilege
+// psuedo -> pseudo
+// recieve -> receive
+// refered -> referred
+// relevent -> relevant
+// repitition -> repetition
+// reuslt -> result
+// retrun -> return
+// retun -> return
+// reutrn -> return
+// saftey -> safety
+// seperate -> separate
+// singed -> signed
+// stirng -> string
+// strign -> string
+// swithc -> switch
+// swtich -> switch
+// thresold -> threshold
+// udpate -> update
+// widht -> width
+
+#define AUTOCORRECT_MIN_LENGTH 5 // ":ture"
+#define AUTOCORRECT_MAX_LENGTH 10 // "accomodate"
+#define DICTIONARY_SIZE 1120
+
+static const uint8_t autocorrect_data[DICTIONARY_SIZE] PROGMEM = {
+ 0x6C, 0x2B, 0x00, 0x06, 0x47, 0x00, 0x07, 0x51, 0x00, 0x08, 0xC7, 0x00, 0x09, 0xF0, 0x01, 0x0A,
+ 0xFA, 0x01, 0x0B, 0x1A, 0x02, 0x11, 0x35, 0x02, 0x12, 0xBE, 0x02, 0x13, 0xCA, 0x02, 0x15, 0xD4,
+ 0x02, 0x16, 0x14, 0x03, 0x17, 0x43, 0x03, 0x1C, 0x20, 0x04, 0x00, 0x48, 0x32, 0x00, 0x16, 0x3C,
+ 0x00, 0x00, 0x0B, 0x17, 0x2C, 0x08, 0x0B, 0x17, 0x2C, 0x00, 0x84, 0x00, 0x08, 0x16, 0x12, 0x12,
+ 0x0F, 0x00, 0x84, 0x73, 0x65, 0x73, 0x00, 0x0B, 0x17, 0x0C, 0x1A, 0x16, 0x00, 0x81, 0x63, 0x68,
+ 0x00, 0x44, 0x5E, 0x00, 0x08, 0x6A, 0x00, 0x0F, 0xAE, 0x00, 0x15, 0xBB, 0x00, 0x00, 0x0C, 0x0F,
+ 0x19, 0x11, 0x0C, 0x00, 0x83, 0x61, 0x6C, 0x69, 0x64, 0x00, 0x4A, 0x77, 0x00, 0x0C, 0x81, 0x00,
+ 0x15, 0x8C, 0x00, 0x18, 0xA5, 0x00, 0x00, 0x11, 0x0C, 0x16, 0x00, 0x83, 0x67, 0x6E, 0x65, 0x64,
+ 0x00, 0x19, 0x15, 0x08, 0x07, 0x00, 0x83, 0x69, 0x76, 0x65, 0x64, 0x00, 0x48, 0x93, 0x00, 0x18,
+ 0x9C, 0x00, 0x00, 0x09, 0x08, 0x15, 0x00, 0x81, 0x72, 0x65, 0x64, 0x00, 0x06, 0x06, 0x12, 0x00,
+ 0x81, 0x72, 0x65, 0x64, 0x00, 0x0F, 0x06, 0x11, 0x0C, 0x00, 0x81, 0x64, 0x65, 0x00, 0x12, 0x16,
+ 0x08, 0x15, 0x0B, 0x17, 0x00, 0x82, 0x68, 0x6F, 0x6C, 0x64, 0x00, 0x04, 0x1A, 0x12, 0x09, 0x00,
+ 0x83, 0x72, 0x77, 0x61, 0x72, 0x64, 0x00, 0x44, 0xE9, 0x00, 0x06, 0xF6, 0x00, 0x07, 0x04, 0x01,
+ 0x08, 0x10, 0x01, 0x0A, 0x34, 0x01, 0x0F, 0x51, 0x01, 0x15, 0x5A, 0x01, 0x16, 0x75, 0x01, 0x17,
+ 0x90, 0x01, 0x18, 0xD7, 0x01, 0x19, 0xE4, 0x01, 0x00, 0x06, 0x13, 0x16, 0x08, 0x10, 0x04, 0x11,
+ 0x00, 0x82, 0x61, 0x63, 0x65, 0x00, 0x13, 0x04, 0x16, 0x08, 0x10, 0x04, 0x11, 0x00, 0x83, 0x70,
+ 0x61, 0x63, 0x65, 0x00, 0x0C, 0x15, 0x08, 0x19, 0x12, 0x00, 0x82, 0x72, 0x69, 0x64, 0x65, 0x00,
+ 0x17, 0x00, 0x44, 0x19, 0x01, 0x11, 0x24, 0x01, 0x00, 0x15, 0x04, 0x18, 0x0A, 0x00, 0x82, 0x6E,
+ 0x74, 0x65, 0x65, 0x00, 0x04, 0x15, 0x18, 0x04, 0x0A, 0x00, 0x87, 0x75, 0x61, 0x72, 0x61, 0x6E,
+ 0x74, 0x65, 0x65, 0x00, 0x44, 0x3B, 0x01, 0x07, 0x45, 0x01, 0x00, 0x18, 0x0A, 0x2C, 0x00, 0x83,
+ 0x61, 0x75, 0x67, 0x65, 0x00, 0x08, 0x0F, 0x0C, 0x19, 0x0C, 0x15, 0x13, 0x00, 0x82, 0x67, 0x65,
+ 0x00, 0x16, 0x04, 0x09, 0x00, 0x82, 0x6C, 0x73, 0x65, 0x00, 0x4C, 0x61, 0x01, 0x18, 0x6D, 0x01,
+ 0x00, 0x18, 0x14, 0x04, 0x00, 0x84, 0x63, 0x71, 0x75, 0x69, 0x72, 0x65, 0x00, 0x17, 0x2C, 0x00,
+ 0x82, 0x72, 0x75, 0x65, 0x00, 0x04, 0x00, 0x4F, 0x7E, 0x01, 0x18, 0x86, 0x01, 0x00, 0x09, 0x00,
+ 0x83, 0x61, 0x6C, 0x73, 0x65, 0x00, 0x06, 0x08, 0x05, 0x00, 0x83, 0x61, 0x75, 0x73, 0x65, 0x00,
+ 0x04, 0x00, 0x47, 0x9C, 0x01, 0x13, 0xC1, 0x01, 0x15, 0xCB, 0x01, 0x00, 0x12, 0x10, 0x00, 0x50,
+ 0xA6, 0x01, 0x12, 0xB5, 0x01, 0x00, 0x12, 0x06, 0x04, 0x00, 0x87, 0x63, 0x6F, 0x6D, 0x6D, 0x6F,
+ 0x64, 0x61, 0x74, 0x65, 0x00, 0x06, 0x06, 0x04, 0x00, 0x84, 0x6D, 0x6F, 0x64, 0x61, 0x74, 0x65,
+ 0x00, 0x07, 0x18, 0x00, 0x84, 0x70, 0x64, 0x61, 0x74, 0x65, 0x00, 0x08, 0x13, 0x08, 0x16, 0x00,
+ 0x84, 0x61, 0x72, 0x61, 0x74, 0x65, 0x00, 0x0A, 0x08, 0x0F, 0x0F, 0x12, 0x06, 0x00, 0x82, 0x61,
+ 0x67, 0x75, 0x65, 0x00, 0x08, 0x0C, 0x06, 0x08, 0x15, 0x00, 0x83, 0x65, 0x69, 0x76, 0x65, 0x00,
+ 0x0C, 0x08, 0x0B, 0x06, 0x00, 0x82, 0x69, 0x65, 0x66, 0x00, 0x11, 0x00, 0x4C, 0x03, 0x02, 0x15,
+ 0x10, 0x02, 0x00, 0x0F, 0x08, 0x0C, 0x06, 0x00, 0x85, 0x65, 0x69, 0x6C, 0x69, 0x6E, 0x67, 0x00,
+ 0x0C, 0x17, 0x16, 0x00, 0x83, 0x72, 0x69, 0x6E, 0x67, 0x00, 0x46, 0x21, 0x02, 0x17, 0x2C, 0x02,
+ 0x00, 0x0C, 0x17, 0x1A, 0x16, 0x00, 0x83, 0x69, 0x74, 0x63, 0x68, 0x00, 0x0A, 0x0C, 0x08, 0x0B,
+ 0x00, 0x81, 0x68, 0x74, 0x00, 0x48, 0x45, 0x02, 0x0A, 0x50, 0x02, 0x12, 0x59, 0x02, 0x15, 0x9C,
+ 0x02, 0x18, 0xA7, 0x02, 0x00, 0x16, 0x12, 0x12, 0x0B, 0x06, 0x00, 0x83, 0x73, 0x65, 0x6E, 0x00,
+ 0x0C, 0x15, 0x17, 0x16, 0x00, 0x81, 0x6E, 0x67, 0x00, 0x0C, 0x00, 0x56, 0x62, 0x02, 0x17, 0x7C,
+ 0x02, 0x00, 0x44, 0x69, 0x02, 0x16, 0x72, 0x02, 0x00, 0x0C, 0x0F, 0x00, 0x83, 0x69, 0x73, 0x6F,
+ 0x6E, 0x00, 0x04, 0x06, 0x06, 0x12, 0x00, 0x83, 0x69, 0x6F, 0x6E, 0x00, 0x4C, 0x83, 0x02, 0x16,
+ 0x92, 0x02, 0x00, 0x17, 0x0C, 0x13, 0x08, 0x15, 0x00, 0x86, 0x65, 0x74, 0x69, 0x74, 0x69, 0x6F,
+ 0x6E, 0x00, 0x12, 0x13, 0x00, 0x83, 0x69, 0x74, 0x69, 0x6F, 0x6E, 0x00, 0x17, 0x18, 0x08, 0x15,
+ 0x00, 0x83, 0x74, 0x75, 0x72, 0x6E, 0x00, 0x55, 0xAE, 0x02, 0x17, 0xB7, 0x02, 0x00, 0x17, 0x08,
+ 0x15, 0x00, 0x82, 0x75, 0x72, 0x6E, 0x00, 0x08, 0x15, 0x00, 0x80, 0x72, 0x6E, 0x00, 0x07, 0x08,
+ 0x18, 0x16, 0x13, 0x00, 0x83, 0x65, 0x75, 0x64, 0x6F, 0x00, 0x18, 0x12, 0x12, 0x0F, 0x00, 0x81,
+ 0x6B, 0x75, 0x70, 0x00, 0x48, 0xDB, 0x02, 0x12, 0x03, 0x03, 0x00, 0x4C, 0xE5, 0x02, 0x0F, 0xEE,
+ 0x02, 0x11, 0xF8, 0x02, 0x00, 0x0B, 0x17, 0x2C, 0x00, 0x82, 0x65, 0x69, 0x72, 0x00, 0x17, 0x0C,
+ 0x09, 0x00, 0x83, 0x6C, 0x74, 0x65, 0x72, 0x00, 0x17, 0x16, 0x0C, 0x0F, 0x00, 0x82, 0x65, 0x6E,
+ 0x65, 0x72, 0x00, 0x17, 0x04, 0x15, 0x08, 0x17, 0x11, 0x0C, 0x00, 0x87, 0x74, 0x65, 0x72, 0x61,
+ 0x74, 0x6F, 0x72, 0x00, 0x48, 0x1E, 0x03, 0x11, 0x26, 0x03, 0x18, 0x33, 0x03, 0x00, 0x0F, 0x04,
+ 0x09, 0x00, 0x81, 0x73, 0x65, 0x00, 0x04, 0x0C, 0x17, 0x11, 0x12, 0x06, 0x00, 0x83, 0x61, 0x69,
+ 0x6E, 0x73, 0x00, 0x16, 0x11, 0x08, 0x06, 0x11, 0x12, 0x06, 0x00, 0x85, 0x73, 0x65, 0x6E, 0x73,
+ 0x75, 0x73, 0x00, 0x74, 0x59, 0x03, 0x0A, 0x66, 0x03, 0x0B, 0x70, 0x03, 0x0F, 0x86, 0x03, 0x11,
+ 0x91, 0x03, 0x16, 0xEA, 0x03, 0x18, 0xF8, 0x03, 0x00, 0x11, 0x08, 0x16, 0x12, 0x07, 0x00, 0x84,
+ 0x65, 0x73, 0x6E, 0x27, 0x74, 0x00, 0x0B, 0x18, 0x04, 0x06, 0x00, 0x82, 0x67, 0x68, 0x74, 0x00,
+ 0x47, 0x77, 0x03, 0x0A, 0x7E, 0x03, 0x00, 0x0C, 0x1A, 0x00, 0x81, 0x74, 0x68, 0x00, 0x11, 0x08,
+ 0x0F, 0x00, 0x81, 0x74, 0x68, 0x00, 0x16, 0x18, 0x08, 0x15, 0x00, 0x83, 0x73, 0x75, 0x6C, 0x74,
+ 0x00, 0x44, 0x9B, 0x03, 0x08, 0xA6, 0x03, 0x16, 0xE2, 0x03, 0x00, 0x15, 0x04, 0x13, 0x13, 0x04,
+ 0x00, 0x82, 0x65, 0x6E, 0x74, 0x00, 0x55, 0xAD, 0x03, 0x19, 0xD8, 0x03, 0x00, 0x44, 0xB4, 0x03,
+ 0x15, 0xBF, 0x03, 0x00, 0x13, 0x04, 0x00, 0x84, 0x70, 0x61, 0x72, 0x65, 0x6E, 0x74, 0x00, 0x04,
+ 0x13, 0x00, 0x44, 0xC9, 0x03, 0x13, 0xD1, 0x03, 0x00, 0x85, 0x70, 0x61, 0x72, 0x65, 0x6E, 0x74,
+ 0x00, 0x04, 0x00, 0x83, 0x65, 0x6E, 0x74, 0x00, 0x08, 0x0F, 0x08, 0x15, 0x00, 0x82, 0x61, 0x6E,
+ 0x74, 0x00, 0x12, 0x06, 0x00, 0x82, 0x6E, 0x73, 0x74, 0x00, 0x0C, 0x09, 0x08, 0x11, 0x04, 0x10,
+ 0x00, 0x84, 0x69, 0x66, 0x65, 0x73, 0x74, 0x00, 0x53, 0xFF, 0x03, 0x17, 0x16, 0x04, 0x00, 0x57,
+ 0x06, 0x04, 0x18, 0x0E, 0x04, 0x00, 0x11, 0x0C, 0x00, 0x83, 0x70, 0x75, 0x74, 0x00, 0x12, 0x00,
+ 0x82, 0x74, 0x70, 0x75, 0x74, 0x00, 0x13, 0x18, 0x12, 0x00, 0x83, 0x74, 0x70, 0x75, 0x74, 0x00,
+ 0x46, 0x2D, 0x04, 0x08, 0x39, 0x04, 0x0B, 0x43, 0x04, 0x15, 0x55, 0x04, 0x00, 0x08, 0x18, 0x14,
+ 0x08, 0x15, 0x09, 0x00, 0x81, 0x6E, 0x63, 0x79, 0x00, 0x17, 0x09, 0x04, 0x16, 0x00, 0x82, 0x65,
+ 0x74, 0x79, 0x00, 0x06, 0x15, 0x04, 0x15, 0x0C, 0x08, 0x0B, 0x00, 0x87, 0x69, 0x65, 0x72, 0x61,
+ 0x72, 0x63, 0x68, 0x79, 0x00, 0x04, 0x05, 0x0C, 0x0F, 0x00, 0x82, 0x72, 0x61, 0x72, 0x79, 0x00
+};
\ No newline at end of file
diff --git a/keyboards/keychron/q1/iso/keymaps/mkillewald/autocorrection_dict.txt b/keyboards/keychron/q1/iso/keymaps/mkillewald/autocorrection_dict.txt
new file mode 100644
index 000000000000..8280fcf703b9
--- /dev/null
+++ b/keyboards/keychron/q1/iso/keymaps/mkillewald/autocorrection_dict.txt
@@ -0,0 +1,85 @@
+# Copyright 2021-2022 Google LLC
+#
+# 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
+#
+# https://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.
+
+:guage -> gauge
+:the the: -> the
+:thier -> their
+:ture -> true
+accomodate -> accommodate
+acommodate -> accommodate
+aparent -> apparent
+aparrent -> apparent
+apparant -> apparent
+apparrent -> apparent
+aquire -> acquire
+becuase -> because
+cauhgt -> caught
+cheif -> chief
+choosen -> chosen
+cieling -> ceiling
+collegue -> colleague
+concensus -> consensus
+contians -> contains
+cosnt -> const
+dervied -> derived
+dosen't -> doesn't
+fales -> false
+fasle -> false
+fitler -> filter
+flase -> false
+foward -> forward
+frequecy -> frequency
+gaurantee -> guarantee
+guaratee -> guarantee
+heigth -> height
+heirarchy -> hierarchy
+inclued -> include
+interator -> iterator
+intput -> input
+invliad -> invalid
+lenght -> length
+liasion -> liaison
+libary -> library
+listner -> listener
+looses: -> loses
+looup -> lookup
+manefist -> manifest
+namesapce -> namespace
+namespcae -> namespace
+occassion -> occasion
+occured -> occurred
+ouptut -> output
+ouput -> output
+overide -> override
+postion -> position
+priviledge -> privilege
+psuedo -> pseudo
+recieve -> receive
+refered -> referred
+relevent -> relevant
+repitition -> repetition
+reuslt -> result
+retrun -> return
+retun -> return
+reutrn -> return
+saftey -> safety
+seperate -> separate
+singed -> signed
+stirng -> string
+strign -> string
+swithc -> switch
+swtich -> switch
+thresold -> threshold
+udpate -> update
+widht -> width
\ No newline at end of file
diff --git a/keyboards/keychron/q1/iso/keymaps/mkillewald/config.h b/keyboards/keychron/q1/iso/keymaps/mkillewald/config.h
new file mode 100644
index 000000000000..722e8d81dcb2
--- /dev/null
+++ b/keyboards/keychron/q1/iso/keymaps/mkillewald/config.h
@@ -0,0 +1,54 @@
+/* Copyright 2023 @ Mike Killewald (https://github.com/mkillewald)
+ *
+ * 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 .
+ */
+
+#pragma once
+
+// default options applied when eeprom is cleared
+#define DEFAULT_CAPS_LOCK_LIGHT_TAB 0 // 1 = enable, 0 = disable
+#define DEFAULT_CAPS_LOCK_LIGHT_ALPHA 1 // 1 = enable, 0 = disable
+#define DEFAULT_FN_LAYER_TRANSPARENT_OFF 0 // 1 = enable, 0 = disable
+#define DEFAULT_FN_LAYER_SHOW_COLOR 1 // 1 = enable, 0 = disable
+#define DEFAULT_RGB_ENABLE_MAC_BASE 1 // 1 = enable, 0 = disable
+#define DEFAULT_RGB_ENABLE_WIN_BASE 1 // 1 = enable, 0 = disable
+#define DEFAULT_HUE_WIN_BASE 80 // HSV green hue (Win Base layer)
+#define RGB_MATRIX_DEFAULT_HUE 0 // HSV red hue (Mac Base layer)
+#define RGB_MATRIX_DEFAULT_SAT 255 // Both Win/Mac Base layers
+#define RGB_MATRIX_DEFAULT_VAL 255 // Both Win/Mac Base layers
+#define RGB_MATRIX_DEFAULT_SPD 127 // Both Win/Mac Base layers
+#define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_BREATHING // Both Win/Mac Base layers
+
+// Autocorrect is off at start up. If you want Autocorrect to be on at startup,
+// remove or comment out the following line
+#define AUTOCORRECT_OFF_AT_STARTUP
+
+// Caps Lock RGB indicator color
+#define CAPS_LOCK_INDICATOR_COLOR RGB_RED
+
+// Dynamic Fn Layer RGB indicator options
+#define FN1_LAYER_COLOR RGB_YELLOW
+
+// Caps Word RGB indicator color
+#define CAPS_WORD_INDICATOR_COLOR RGB_RED
+
+// Caps Word is activated by double-tapping left Shift. Replace this with
+// #define BOTH_SHIFTS_TURNS_ON_CAPS_WORD if you want to activate Caps Word
+// by single-tapping both left and right Shift togeter.
+#define DOUBLE_TAP_SHIFT_TURNS_ON_CAPS_WORD
+
+// Caps Word will light left Shift, left Control and left Option (or left Windows
+// key) when acitvated. Remove this line if you want Caps Word to only light left
+// Shift when enabled.
+#define CAPS_WORD_LIGHT_LOWER_LEFT_CORNER
\ No newline at end of file
diff --git a/keyboards/keychron/q1/iso/keymaps/mkillewald/keymap.c b/keyboards/keychron/q1/iso/keymaps/mkillewald/keymap.c
new file mode 100644
index 000000000000..ad8217dad303
--- /dev/null
+++ b/keyboards/keychron/q1/iso/keymaps/mkillewald/keymap.c
@@ -0,0 +1,74 @@
+/* Copyright 2023 @ Mike Killewald (https://github.com/mkillewald)
+ *
+ * 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 .
+ */
+
+#include QMK_KEYBOARD_H
+#include "keychron_common.h"
+#include "myfork_keychron_ft.h"
+#include "mkillewald.h"
+#include "layers.h"
+
+// clang-format off
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[MAC_BASE] = LAYOUT_iso_83(
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_DEL, KC_INS,
+ 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_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_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_HOME,
+ 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_LOPTN, KC_LGUI, KC_SPC, KC_RGUI, MO(MAC_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+[MAC_FN] = LAYOUT_iso_83(
+ KC_LBMAC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, _______,
+ RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ AC_TOGG, _______, KC_LTTOG, KC_LATOG, KC_TKTOG, KC_FCTOG, _______, _______, _______, LCAG(KC_W), LCAG(KC_D), _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+[WIN_BASE] = LAYOUT_iso_83(
+ 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_INS,
+ 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_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_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_HOME,
+ 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, MO(WIN_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+[WIN_FN] = LAYOUT_iso_83(
+ _______, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, _______,
+ RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ AC_TOGG, _______, KC_LTTOG, KC_LATOG, KC_TKTOG, KC_FCTOG, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______)
+
+};
+
+// clang-format on
+
+void housekeeping_task_user(void) {
+ housekeeping_task_keychron();
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (!(process_record_keychron(keycode, record) &&
+ process_record_myfork_keychron_ft(keycode, record) &&
+ process_record_mkillewald(keycode, record))) {
+ return false;
+ }
+ return true;
+}
diff --git a/keyboards/keychron/q1/iso/keymaps/mkillewald_iso/keymap_user.h b/keyboards/keychron/q1/iso/keymaps/mkillewald/layers.h
similarity index 57%
rename from keyboards/keychron/q1/iso/keymaps/mkillewald_iso/keymap_user.h
rename to keyboards/keychron/q1/iso/keymaps/mkillewald/layers.h
index 87b1baf47f23..e8733b342526 100644
--- a/keyboards/keychron/q1/iso/keymaps/mkillewald_iso/keymap_user.h
+++ b/keyboards/keychron/q1/iso/keymaps/mkillewald/layers.h
@@ -1,4 +1,4 @@
-/* Copyright 2021 @ Mike Killewald
+/* Copyright 2023 @ Mike Killewald (https://github.com/mkillewald)
*
* 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
@@ -16,18 +16,26 @@
#pragma once
-// clang-format off
+#include "mkillewald.h"
-enum layers {
+enum layers{
MAC_BASE,
MAC_FN,
WIN_BASE,
WIN_FN
};
-// clang-format on
+#define MAC_FN1 MAC_FN
+#define WIN_FN1 WIN_FN
+#define MAC_WIN_FN2 255 // not used, keymap does not have fn2 key
-bool get_caps_lock_light_tab(void);
-bool get_caps_lock_light_alphas(void);
-bool get_fn_layer_transparent_keys_off(void);
-bool get_fn_layer_color_enable(void);
\ No newline at end of file
+/* Factory test keys */
+#define FN_KEY1 MO(MAC_FN) // Fn Mac Base
+#define FN_KEY2 MO(WIN_FN) // Fn Win Base
+
+#define RESET_KEY1 KC_J
+#define RESET_KEY2 KC_Z
+#define RESET_KEY2_ALT KC_LTTOG
+
+#define BL_TEST_KEY1 KC_RIGHT
+#define BL_TEST_KEY2 KC_HOME
\ No newline at end of file
diff --git a/keyboards/keychron/q1/iso/keymaps/mkillewald/readme.md b/keyboards/keychron/q1/iso/keymaps/mkillewald/readme.md
new file mode 100644
index 000000000000..2ce07559e391
--- /dev/null
+++ b/keyboards/keychron/q1/iso/keymaps/mkillewald/readme.md
@@ -0,0 +1,147 @@
+## Keychron Q1 RGB ISO ATMEGA32U4 (no knob) Keymap v2.0.2
+
+### Highly Recommended:
+When you flash this firmware for the first time, you should clear the eeprom so that the eeprom defaults are properly set. Be aware that clearing the eeprom will erase any changes previously made in VIA. Please backup your VIA config before clearing the eeprom. If you place your keyboard in DFU mode by holding ESC and plugging in the USB cable, this should clear the eeprom even if you take it out of DFU mode at that point without flashing. Alternatively, you may use the factory reset key combo (Fn+J+Z) to clear the eeprom after flashing.
+
+## Features:
+- Retains Keychron factory keycodes for Mission Control, Launchpad, Siri, Cortana, Task View, File Explorer, and others.
+
+- Retains Keychron factory reset:
+ - Hold Fn+J+Z for 4 seconds. The RGB LEDs will flash red to indicate that the reset has occurred.
+ - This will clear the eeprom which returns RGB settings back to defaults and erases any changes made with VIA.
+
+- Retains Keychron LED test:
+ - Hold Fn+Right+Home for 4 seconds. The RGB LEDs will all turn white.
+ - Press Right to cycle RGB colors (white, red, green and blue) to check operation of each LED.
+ - Press Home to exit
+
+- Different RGB settings for Mac base and Win base layers. You can set different RGB animations, colors, brightness and speed using the standard RGB keyboard shortcuts.
+
+- Autocorrect is enabled. ([https://docs.qmk.fm/#/feature_autocorrect](https://docs.qmk.fm/#/feature_autocorrect))
+ - Uses getreuer's autocorrect dictionary.
+ [https://github.com/getreuer/qmk-keymap/blob/main/features/autocorrection_dict.txt](https://github.com/getreuer/qmk-keymap/blob/main/features/autocorrection_dict.txt)
+
+- Caps Word enabled with RGB indicator. ([https://docs.qmk.fm/#/feature_caps_word](https://docs.qmk.fm/#/feature_caps_word))
+
+- Caps Lock RGB indicator. Will light Caps Lock key with options to also light Tab key (useful for some keycap sets), and/or light all alpha keys.
+
+- Dynamic Fn layer RGB indicator. When Fn key is held down, any keys defined on the Fn layer in this firmware or in VIA will be highlighted.
+
+##### Notes:
+
+###### Toggling RGB mode off will disable RGB and indicators separately for each base layer (Mac or Win). RGB must be toggled on for all indicators to function. If you do not want an RGB mode active but still want the indicators, toggle RGB on and turn the brightness all the way off. The indicators will remain at full brightness.
+###### Changing RGB settings with VIA lighting tab is unsupported at this time and may have undesired effects. Keymap changes with VIA is supported.
+
+## Config.h options
+
+Default options (these defaults will be applied whenever the eeprom is cleared):
+
+```
+ #define DEFAULT_CAPS_LOCK_LIGHT_TAB 0 // 1 = enable, 0 = disable
+ #define DEFAULT_CAPS_LOCK_LIGHT_ALPHA 1 // 1 = enable, 0 = disable
+ #define DEFAULT_FN_LAYER_TRANSPARENT_OFF 0 // 1 = enable, 0 = disable
+ #define DEFAULT_FN_LAYER_SHOW_COLOR 1 // 1 = enable, 0 = disable
+ #define DEFAULT_RGB_ENABLE_MAC_BASE 1 // 1 = enable, 0 = disable
+ #define DEFAULT_RGB_ENABLE_WIN_BASE 1 // 1 = enable, 0 = disable
+ #define DEFAULT_HUE_WIN_BASE 80 // HSV green hue (Win Base layer)
+ #define RGB_MATRIX_DEFAULT_HUE 0 // HSV red hue (Mac Base layer)
+ #define RGB_MATRIX_DEFAULT_SAT 255 // Both Win/Mac Base layers
+ #define RGB_MATRIX_DEFAULT_VAL 255 // Both Win/Mac Base layers
+ #define RGB_MATRIX_DEFAULT_SPD 127 // Both Win/Mac Base layers
+ #define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_BREATHING // Both Win/Mac Base layers
+```
+
+Autocorrect option:
+
+```
+ // Autocorrect is off at start up. If you want Autocorrect to be on at startup,
+ // remove or comment out the following line
+ #define AUTOCORRECT_OFF_AT_STARTUP
+```
+
+Caps Lock RGB indicator option:
+
+```
+ #define CAPS_LOCK_INDICATOR_COLOR RGB_RED
+```
+
+Dynamic Fn Layer RGB indicator options:
+
+```
+ #define FN1_LAYER_COLOR RGB_YELLOW
+```
+
+Caps Word options:
+
+```
+ // Caps Word RGB indicator color
+ #define CAPS_WORD_INDICATOR_COLOR RGB_RED
+
+ // Caps Word is activated by double-tapping left Shift. Replace this with
+ // #define BOTH_SHIFTS_TURNS_ON_CAPS_WORD if you want to activate Caps Word
+ // by single-tapping both left and right Shift togeter.
+ #define DOUBLE_TAP_SHIFT_TURNS_ON_CAPS_WORD
+
+ // Caps Word will light left Shift, left Control and left Option (or left Windows
+ // key) when acitvated. Remove this line if you want Caps Word to only light left
+ // Shift when enabled.
+ #define CAPS_WORD_LIGHT_LOWER_LEFT_CORNER
+```
+
+## This keymap makes the following layout changes over the factory firmware
+
+- Fn+Left Shift toggles Autocorrect on/off
+- Fn+Backspace enters DFU mode (but does not reset eeprom)
+- Fn+Z (KC_LTTOG) Caps Lock Light Tab Toggle (default: off)
+ - toggle lighting the Tab key when Caps Lock is enabled. This is useful with non backlit keycaps/legends.
+- Fn+X (KC_LATOG) Caps Lock Light Alpha Toggle (default: on)
+ - toggle lighting all the alpha keys when Caps Lock is enabled.
+- Fn+C (KC_TKTOG) Fn layer Trasnparent Key Off Toggle (default: RGB on)
+ - toggle turning off RGB for keys with no definition
+- Fn+V (KC_FCTOG) Fn layer Color Toggle (default: static color on)
+ - toggle lighting the defined Fn layer keys with the static color set with FN1_LAYER_COLOR
+
+- Mac mode only
+ - Fn+Esc (KC_LBMAC) will lock and sleep display
+ - Fn+< sets my secondary display to 0° rotation
+ - Fn+> sets my secondary display to 90° rotation
+
+ Note: display rotation requires additional software and changes made, see this link for more information:
+ [https://gist.github.com/mkillewald/706b7ef8624d8c2bf17ce1df344cff48](https://gist.github.com/mkillewald/706b7ef8624d8c2bf17ce1df344cff48)
+
+All custom keycodes can be moved to different keys in VIA by using the following:
+- CUSTOM(64) = KC_LTTOG (default: Fn+Z) Caps Lock Light Tab Toggle
+- CUSTOM(65) = KC_LATOG (default: Fn+X) Caps Lock Light Alpha Toggle
+- CUSTOM(66) = KC_TKTOG (default: Fn+C) Fn layer Trasnparent Key Off Toggle
+- CUSTOM(67) = KC_FCTOG (default: Fn+V) Fn layer Color Toggle
+- CUSTOM(68) = KC_LBMAC (default Mac Only: Fn+Esc) Lock and Blank Mac
+
+
+#### USE AT YOUR OWN RISK
+
+## Changelog:
+
+v2.0.2 May 9, 2023
+- brought over all updated features from my Q1 ANSI keymap, and jumped version number to 2.0.2 to match.
+ - added Keychron factory reset and LED test
+ - enabled separate RGB toggle for each base layer (Mac / Win)
+
+v1.0.4 October 9, 2021
+- Caps Lock and Fn layer toggles are now stored in eeprom so settings will remain when Q1 is unplugged
+
+v1.0.3 October 8, 2021
+- now using keycode toggles instead of preprocessor directives to set the various Caps Lock and Fn Layer RGB lighting options. This allows for setting the options from user space without having to recompile.
+
+v1.0.2 October 7, 2021
+- adapted Grayson Carr's (gtg465x) Caps Lock alphas and dynamic Fn layer RGB routines
+- added CAPS_LOCK_INDICATOR_LIGHT_TAB config option to enable/disable lighting Tab with Caps Lock indicator
+- added FN_LAYER_COLOR config option to set FN layer static color
+
+v1.0.1 October 7, 2021
+- Mission Control and Launchpad custom keycodes are now defined using the VIA user keycodes range so thay can be labeled properly in VIA (adopted change from gtg465x)
+
+v1.0.0 September 30, 2021
+- Initial release built upon keymap by Grayson Carr (gtg465x)
+- defined Mission Control (F3) and Launchpad (F4) keycodes for macOs
+- RGB backlight turns off when computer sleeps
+- added Caps Lock indicator lighting both the Caps Lock and Tab LEDs for better effect on non-backlit keycaps
diff --git a/keyboards/keychron/q1/iso/keymaps/mkillewald/rules.mk b/keyboards/keychron/q1/iso/keymaps/mkillewald/rules.mk
new file mode 100644
index 000000000000..f4b915d446ad
--- /dev/null
+++ b/keyboards/keychron/q1/iso/keymaps/mkillewald/rules.mk
@@ -0,0 +1,5 @@
+CAPS_WORD_ENABLE = yes
+AUTOCORRECT_ENABLE = yes
+
+VPATH += keyboards/keychron/common
+SRC += keychron_common.c
\ No newline at end of file
diff --git a/keyboards/keychron/q1/iso/keymaps/mkillewald_iso/keymap.c b/keyboards/keychron/q1/iso/keymaps/mkillewald_iso/keymap.c
deleted file mode 100644
index f86a84e468dd..000000000000
--- a/keyboards/keychron/q1/iso/keymaps/mkillewald_iso/keymap.c
+++ /dev/null
@@ -1,153 +0,0 @@
-/* Copyright 2021 @ Mike Killewald
- *
- * 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 .
- */
-
-#include QMK_KEYBOARD_H
-#include "keymap_user.h"
-#ifdef RGB_MATRIX_ENABLE
-# include "rgb_matrix_user.h"
-#endif
-
-// clang-format off
-
-typedef union {
- uint32_t raw;
- struct {
- bool caps_lock_light_tab :1;
- bool caps_lock_light_alphas :1;
- bool fn_layer_transparent_keys_off :1;
- bool fn_layer_color_enable :1;
- };
-} user_config_t;
-
-user_config_t user_config;
-
-enum custom_keycodes {
- KC_LIGHT_TAB_TOGGLE = QK_KB_2, // TECH DEBT: Starts at QK_KB_2 to maintain ordering with VIA definitions. See #19884. Revert to QK_KB_0 when VIA catches up with QMK.
- KC_LIGHT_ALPHAS_TOGGLE,
- KC_FN_LAYER_TRANSPARENT_KEYS_TOGGLE,
- KC_FN_LAYER_COLOR_TOGGLE
-};
-
-#define KC_LTTOG KC_LIGHT_TAB_TOGGLE
-#define KC_LATOG KC_LIGHT_ALPHAS_TOGGLE
-#define KC_TKTOG KC_FN_LAYER_TRANSPARENT_KEYS_TOGGLE
-#define KC_FCTOG KC_FN_LAYER_COLOR_TOGGLE
-#define KC_TASK LGUI(KC_TAB)
-#define KC_FLXP LGUI(KC_E)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
-[MAC_BASE] = LAYOUT_iso_83(
- KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_DEL, KC_INS,
- 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_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_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_HOME,
- 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_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(MAC_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
-
-[MAC_FN] = LAYOUT_iso_83(
- KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_LTTOG, KC_LATOG, KC_TKTOG, KC_FCTOG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
-
-[WIN_BASE] = LAYOUT_iso_83(
- 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_INS,
- 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_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_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_HOME,
- 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, MO(WIN_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
-
-[WIN_FN] = LAYOUT_iso_83(
- KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_LTTOG, KC_LATOG, KC_TKTOG, KC_FCTOG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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
-
-void matrix_init_user(void) {
-#ifdef RGB_MATRIX_ENABLE
- rgb_matrix_init_user();
-#endif
-}
-
-void keyboard_post_init_user(void) {
- user_config.raw = eeconfig_read_user();
-}
-
-void eeconfig_init_user(void) {
- user_config.raw = 0;
- user_config.caps_lock_light_tab = false;
- user_config.caps_lock_light_alphas = false;
- user_config.fn_layer_transparent_keys_off = true;
- user_config.fn_layer_color_enable = false;
- eeconfig_update_user(user_config.raw);
-}
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case KC_LIGHT_TAB_TOGGLE:
- if (record->event.pressed) {
- user_config.caps_lock_light_tab ^= 1; // bitwise xor to toggle status bit
- eeconfig_update_user(user_config.raw);
- }
- return false; // Skip all further processing of this key
- case KC_LIGHT_ALPHAS_TOGGLE:
- if (record->event.pressed) {
- user_config.caps_lock_light_alphas ^= 1;
- eeconfig_update_user(user_config.raw);
- }
- return false; // Skip all further processing of this key
- case KC_FN_LAYER_TRANSPARENT_KEYS_TOGGLE:
- if (record->event.pressed) {
- user_config.fn_layer_transparent_keys_off ^= 1;
- eeconfig_update_user(user_config.raw);
- }
- return false; // Skip all further processing of this key
- case KC_FN_LAYER_COLOR_TOGGLE:
- if (record->event.pressed) {
- user_config.fn_layer_color_enable ^= 1;
- eeconfig_update_user(user_config.raw);
- }
- return false; // Skip all further processing of this key
- default:
- return true; // Process all other keycodes normally
- }
-}
-
-bool get_caps_lock_light_tab(void) {
- return user_config.caps_lock_light_tab;
-}
-
-bool get_caps_lock_light_alphas(void) {
- return user_config.caps_lock_light_alphas;
-}
-
-bool get_fn_layer_transparent_keys_off(void) {
- return user_config.fn_layer_transparent_keys_off;
-}
-
-bool get_fn_layer_color_enable(void) {
- return user_config.fn_layer_color_enable;
-}
diff --git a/keyboards/keychron/q1/iso/keymaps/mkillewald_iso/readme.md b/keyboards/keychron/q1/iso/keymaps/mkillewald_iso/readme.md
deleted file mode 100644
index 25d835b1c021..000000000000
--- a/keyboards/keychron/q1/iso/keymaps/mkillewald_iso/readme.md
+++ /dev/null
@@ -1,54 +0,0 @@
-## mkillewald's Keychron Q1 keymap (ISO rev_0102) v1.0.4
-
-This keymap builds on the keymap by Grayson Carr (gtg465x) but adds a couple options.
-
-## Features:
-- On macOS, F3 opens Mission Control and F4 opens Launchpad without needing to configure shortcuts in System Preferences
-- RGB lighting turns off when the computer sleeps
-- Caps Lock RGB indicator
- - the Caps Lock key will light when Caps Lock is enabled with the following options:
- - #define CAPS_LOCK_INDICATOR_COLOR [color] in config.h to set the backlight color used for the indicator when Caps Lock is enabled (default: red)
- - Fn+Z will toggle lighting the TAB key when Caps Lock is enabled. This is useful with non backlit keycaps/legends. (default: off)
- - Fn+X will toggle lighting all the alpha keys when Caps Lock is enabled. (default: off)
-
-- Dynamic Fn layer RGB indicator
- - When the Fn key is held down, any keys defined on the Fn layer in this firmware or in VIA will be highlighted with the following options:
- - #define FN_LAYER_COLOR [color] in config.h to set a static color for defined keys (default: orange)
- - Fn+C will toggle turning off RGB for keys with no definition (default: RGB off)
- - Fn+V will toggle lighting the defined Fn layer keys with the static color set with FN_LAYER_COLOR (default: static color off)
-
-- All custom keycodes can be moved to different keys in VIA by using the ANY key with the following keycodes:
- - USER(0) (default: F3) macOS Mission Control
- - USER(1) (default: F4) macOS Launchpad
- - USER(2) (default: Fn+Z) Caps Lock light Tab toggle
- - USER(3) (default: Fn+X) Caps Lock light alphas toggle
- - USER(4) (default: Fn+C) Fn layer non-defined keys RGB toggle
- - USER(5) (default: Fn+V) Fn layer defined keys static color toggle
-
-RGB must be toggled on for all indicators to function. If you do not want an RGB mode active but still want the indicators, toggle RGB on and turn the brightness all the way off. The indicators will remain at full brightness.
-
-Please make sure to save any customizations you have made in VIA to a .json file before flashing the firmware. Sometimes it has been necessary to re-apply those changes in VIA after flashing the firmware. If that is the case, you will most likely need to manually add the USER(0) through USER(5) custom keycodes after loading your customizations from the saved .json file. Then re-save a new .json file which will have your previous customizations and the custom keycodes for future use as needed.
-
-#### USE AT YOUR OWN RISK
-
-## Changelog:
-
-v1.0.4 October 9, 2021
-- Caps Lock and Fn layer toggles are now stored in eeprom so settings will remain when Q1 is unplugged
-
-v1.0.3 October 8, 2021
-- now using keycode toggles instead of preprocessor directives to set the various Caps Lock and Fn Layer RGB lighting options. This allows for setting the options from user space without having to recompile.
-
-v1.0.2 October 7, 2021
-- adapted Grayson Carr's (gtg465x) Caps Lock alphas and dynamic Fn layer RGB routines
-- added CAPS_LOCK_INDICATOR_LIGHT_TAB config option to enable/disable lighting Tab with Caps Lock indicator
-- added FN_LAYER_COLOR config option to set FN layer static color
-
-v1.0.1 October 7, 2021
-- Mission Control and Launchpad custom keycodes are now defined using the VIA user keycodes range so thay can be labeled properly in VIA (adopted change from gtg465x)
-
-v1.0.0 September 30, 2021
-- Initial release built upon keymap by Grayson Carr (gtg465x)
-- defined Mission Control (F3) and Launchpad (F4) keycodes for macOs
-- RGB backlight turns off when computer sleeps
-- added Caps Lock indicator lighting both the Caps Lock and Tab LEDs for better effect on non-backlit keycaps
diff --git a/keyboards/keychron/q1/iso/keymaps/mkillewald_iso/rgb_matrix_user.c b/keyboards/keychron/q1/iso/keymaps/mkillewald_iso/rgb_matrix_user.c
deleted file mode 100644
index c6fa5f1f155a..000000000000
--- a/keyboards/keychron/q1/iso/keymaps/mkillewald_iso/rgb_matrix_user.c
+++ /dev/null
@@ -1,84 +0,0 @@
-/* Copyright 2021 @ Mike Killewald
- *
- * 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 .
- */
-
-#include QMK_KEYBOARD_H
-#include "rgb_matrix_user.h"
-#include "keymap_user.h"
-
-keypos_t led_index_key_position[RGB_MATRIX_LED_COUNT];
-
-void rgb_matrix_init_user(void) {
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- for (uint8_t col = 0; col < MATRIX_COLS; col++) {
- uint8_t led_index = g_led_config.matrix_co[row][col];
- if (led_index != NO_LED) {
- led_index_key_position[led_index] = (keypos_t){.row = row, .col = col};
- }
- }
- }
-}
-
-bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
- uint8_t current_layer = get_highest_layer(layer_state);
- switch (current_layer) {
- case MAC_BASE:
- case WIN_BASE:
-#ifdef CAPS_LOCK_INDICATOR_COLOR
- if (host_keyboard_led_state().caps_lock) {
- rgb_matrix_set_color_by_keycode(led_min, led_max, current_layer, is_caps_lock_indicator, CAPS_LOCK_INDICATOR_COLOR);
- }
-#endif
- break;
- case MAC_FN:
- case WIN_FN:
-#ifdef FN_LAYER_COLOR
- if (get_fn_layer_color_enable()) {
- rgb_matrix_set_color_by_keycode(led_min, led_max, current_layer, is_not_transparent, FN_LAYER_COLOR);
- }
-#endif
- if (get_fn_layer_transparent_keys_off()) {
- rgb_matrix_set_color_by_keycode(led_min, led_max, current_layer, is_transparent, RGB_OFF);
- }
- break;
- }
- return false;
-}
-
-void rgb_matrix_set_color_by_keycode(uint8_t led_min, uint8_t led_max, uint8_t layer, bool (*is_keycode)(uint16_t), uint8_t red, uint8_t green, uint8_t blue) {
- for (uint8_t i = led_min; i < led_max; i++) {
- uint16_t keycode = keymap_key_to_keycode(layer, led_index_key_position[i]);
- if ((*is_keycode)(keycode)) {
- rgb_matrix_set_color(i, red, green, blue);
- }
- }
-}
-
-bool is_caps_lock_indicator(uint16_t keycode) {
- bool indicator = keycode == KC_CAPS;
-
- if (get_caps_lock_light_tab()) {
- indicator = keycode == KC_TAB || keycode == KC_CAPS;
- }
-
- if (get_caps_lock_light_alphas()) {
- return (KC_A <= keycode && keycode <= KC_Z) || indicator;
- } else {
- return indicator;
- }
-}
-
-bool is_transparent(uint16_t keycode) { return keycode == KC_TRNS; }
-bool is_not_transparent(uint16_t keycode) { return keycode != KC_TRNS; }
diff --git a/keyboards/keychron/q1/iso/keymaps/mkillewald_iso/rules.mk b/keyboards/keychron/q1/iso/keymaps/mkillewald_iso/rules.mk
deleted file mode 100644
index af720e37ee7b..000000000000
--- a/keyboards/keychron/q1/iso/keymaps/mkillewald_iso/rules.mk
+++ /dev/null
@@ -1,6 +0,0 @@
-VIA_ENABLE = yes
-MOUSEKEY_ENABLE = no
-
-ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes)
- SRC += rgb_matrix_user.c
-endif
\ No newline at end of file
diff --git a/keyboards/keychron/q2/ansi_encoder/keymaps/mkillewald/config.h b/keyboards/keychron/q2/ansi_encoder/keymaps/mkillewald/config.h
new file mode 100644
index 000000000000..7e3f5b0c74b7
--- /dev/null
+++ b/keyboards/keychron/q2/ansi_encoder/keymaps/mkillewald/config.h
@@ -0,0 +1,55 @@
+/* Copyright 2023 @ Mike Killewald (https://github.com/mkillewald)
+ *
+ * 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 .
+ */
+
+#pragma once
+
+// default options applied when eeprom is cleared
+#define DEFAULT_CAPS_LOCK_LIGHT_TAB 0 // 1 = enable, 0 = disable
+#define DEFAULT_CAPS_LOCK_LIGHT_ALPHA 1 // 1 = enable, 0 = disable
+#define DEFAULT_FN_LAYER_TRANSPARENT_OFF 0 // 1 = enable, 0 = disable
+#define DEFAULT_FN_LAYER_SHOW_COLOR 1 // 1 = enable, 0 = disable
+#define DEFAULT_RGB_ENABLE_MAC_BASE 1 // 1 = enable, 0 = disable
+#define DEFAULT_RGB_ENABLE_WIN_BASE 1 // 1 = enable, 0 = disable
+#define DEFAULT_HUE_WIN_BASE 80 // HSV green hue (Win Base layer)
+#define RGB_MATRIX_DEFAULT_HUE 170 // HSV blue hue (Mac Base layer)
+#define RGB_MATRIX_DEFAULT_SAT 255 // Both Win/Mac Base layers
+#define RGB_MATRIX_DEFAULT_VAL 255 // Both Win/Mac Base layers
+#define RGB_MATRIX_DEFAULT_SPD 127 // Both Win/Mac Base layers
+#define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_BREATHING // Both Win/Mac Base layers
+
+// Autocorrect is on at start up. If you want Autocorrect to be off at startup,
+// un-comment the following line
+//#define AUTOCORRECT_OFF_AT_STARTUP
+
+// Caps Lock RGB indicator color
+#define CAPS_LOCK_INDICATOR_COLOR RGB_RED
+
+// Dynamic Fn Layer RGB indicator options
+#define FN1_LAYER_COLOR 0xFE, 0x23, 0x00 // RGB orange
+#define FN2_LAYER_COLOR RGB_YELLOW
+
+// Caps Word RGB indicator color
+#define CAPS_WORD_INDICATOR_COLOR RGB_RED
+
+// Caps Word is activated by double-tapping left Shift. Replace this with
+// #define BOTH_SHIFTS_TURNS_ON_CAPS_WORD if you want to activate Caps Word
+// by single-tapping both left and right Shift togeter.
+#define DOUBLE_TAP_SHIFT_TURNS_ON_CAPS_WORD
+
+// Caps Word will light left Shift, left Control and left Option (or left Windows
+// key) when acitvated. Remove this line if you want Caps Word to only light left
+// Shift when enabled.
+#define CAPS_WORD_LIGHT_LOWER_LEFT_CORNER
\ No newline at end of file
diff --git a/keyboards/keychron/q2/ansi_encoder/keymaps/mkillewald/keymap.c b/keyboards/keychron/q2/ansi_encoder/keymaps/mkillewald/keymap.c
new file mode 100644
index 000000000000..2965f9f5489e
--- /dev/null
+++ b/keyboards/keychron/q2/ansi_encoder/keymaps/mkillewald/keymap.c
@@ -0,0 +1,89 @@
+/* Copyright 2023 @ Mike Killewald (https://github.com/mkillewald)
+ *
+ * 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 .
+ */
+
+#include QMK_KEYBOARD_H
+#include "keychron_common.h"
+#include "myfork_keychron_ft.h"
+#include "mkillewald.h"
+#include "layers.h"
+
+// clang-format off
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [MAC_BASE] = LAYOUT_ansi_67(
+ QK_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_MUTE,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_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_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, MO(_FN1), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [WIN_BASE] = LAYOUT_ansi_67(
+ QK_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_MUTE,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_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_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, MO(_FN2), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),
+
+ // Mac Fn1
+ [_FN1] = LAYOUT_ansi_67(
+ KC_GRV, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, G(KC_0),
+ _______, KC_LBMAC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, G(KC_LEFT),
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, G(KC_RGHT),
+ _______, _______, _______, _______, _______, _______, _______, _______, LCAG(KC_W), LCAG(KC_D), _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+ // Win Fn1
+ [_FN2] = LAYOUT_ansi_67(
+ KC_GRV, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, C(KC_0),
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_END,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+ // Combined Mac Win Fn2
+ [_FN3] = LAYOUT_ansi_67(
+ 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, QK_BOOT, RGB_TOG,
+ RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL,
+ _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, KC_HOME,
+ AC_TOGG, KC_LTTOG, KC_LATOG, KC_TKTOG, KC_FCTOG, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______)
+};
+
+// clang-format on
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
+ [MAC_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [WIN_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [_FN1] = { ENCODER_CCW_CW(G(KC_MINS), G(KC_EQL)) },
+ [_FN2] = { ENCODER_CCW_CW(C(KC_MINS), C(KC_EQL)) },
+ [_FN3] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI) },
+};
+#endif
+
+void housekeeping_task_user(void) {
+ housekeeping_task_keychron();
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (!(process_record_keychron(keycode, record) &&
+ process_record_myfork_keychron_ft(keycode, record) &&
+ process_record_mkillewald(keycode, record))) {
+ return false;
+ }
+ return true;
+}
+
diff --git a/keyboards/keychron/q2/ansi_encoder/keymaps/mkillewald/layers.h b/keyboards/keychron/q2/ansi_encoder/keymaps/mkillewald/layers.h
new file mode 100644
index 000000000000..6658d02a8bf7
--- /dev/null
+++ b/keyboards/keychron/q2/ansi_encoder/keymaps/mkillewald/layers.h
@@ -0,0 +1,41 @@
+/* Copyright 2023 @ Mike Killewald (https://github.com/mkillewald)
+ *
+ * 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 .
+ */
+
+#pragma once
+
+enum layers{
+ MAC_BASE, // Mac Base (layer 0)
+ WIN_BASE, // Win Base (layer 1)
+ _FN1, // Mac Fn1 (layer 2)
+ _FN2, // Win Fn1 (layer 3)
+ _FN3 // Mac/Win Fn2 (layer 4)
+};
+
+#define MAC_FN1 _FN1
+#define WIN_FN1 _FN2
+#define MAC_WIN_FN2 _FN3
+
+/* Factory test keys */
+#define FN_KEY1 MO(_FN1) // Fn1 Mac Base
+#define FN_KEY2 MO(_FN2) // Fn1 Win Base
+
+#define RESET_KEY1 KC_J
+#define RESET_KEY2 KC_Z
+
+#define BL_TEST_KEY1 KC_RIGHT
+#define BL_TEST_KEY2 KC_PGDN
+#define BL_TEST_KEY2_ALT1 G(KC_RIGHT)
+#define BL_TEST_KEY2_ALT2 KC_END
diff --git a/keyboards/keychron/q2/ansi_encoder/keymaps/mkillewald/readme.md b/keyboards/keychron/q2/ansi_encoder/keymaps/mkillewald/readme.md
new file mode 100644
index 000000000000..f45653125937
--- /dev/null
+++ b/keyboards/keychron/q2/ansi_encoder/keymaps/mkillewald/readme.md
@@ -0,0 +1,157 @@
+## Keychron Q2 SEVERED RGB ANSI STM32L432 ENC11 (knob) Keymap v2.0.2
+
+![Keychron Q2 ANSI encoder](https://i.imgur.com/s9vb9F5.jpg)
+
+### Highly Recommended:
+When you flash this firmware for the first time, you should clear the eeprom so that the eeprom defaults are properly set. Be aware that clearing the eeprom will erase any changes previously made in VIA. Please backup your VIA config before clearing the eeprom. If you place your keyboard in DFU mode by holding ESC and plugging in the USB cable, this should clear the eeprom even if you take it out of DFU mode at that point without flashing. Alternatively, you may use the factory reset key combo (Fn1+J+Z) to clear the eeprom after flashing.
+
+## Features:
+- Retains Keychron factory keycodes for Mission Control, Launchpad, Siri, Cortana, Task View, File Explorer, and others.
+
+- Retains Keychron factory reset:
+ - Hold Fn1+J+Z for 4 seconds. The RGB LEDs will flash red to indicate that the reset has occurred.
+ - This will clear the eeprom which returns RGB settings back to defaults and erases any changes made with VIA.
+
+- Retains Keychron LED test:
+ - Hold Fn1+Right+PgDn for 4 seconds. The RGB LEDs will all turn white.
+ - Press Right to cycle RGB colors (white, red, green and blue) to check operation of each LED.
+ - Press PgDn to exit
+
+- SEVERED! Different RGB settings for Mac base and Win base layers. You can set different RGB animations, colors, brightness and speed using the standard RGB keyboard shortcuts. (Hi kids, whats for dinner?)
+
+- Autocorrect is enabled. ([https://docs.qmk.fm/#/feature_autocorrect](https://docs.qmk.fm/#/feature_autocorrect))
+ - Uses getreuer's 400 entry autocorrect dictionary.
+ [https://github.com/getreuer/qmk-keymap/blob/main/features/autocorrection_dict_extra.txt](https://github.com/getreuer/qmk-keymap/blob/main/features/autocorrection_dict_extra.txt)
+
+- Caps Word enabled with RGB indicator. ([https://docs.qmk.fm/#/feature_caps_word](https://docs.qmk.fm/#/feature_caps_word))
+
+- Caps Lock RGB indicator. Will light Caps Lock key with options to also light Tab key (useful for some keycap sets), and/or light all alpha keys.
+
+- Dynamic Fn layer RGB indicator. When either Fn1 or Fn2 is held down, any keys defined on the Fn layers in this firmware or in VIA will be highlighted.
+
+##### Notes:
+
+###### Toggling RGB mode off will disable RGB and indicators separately for each base layer (Mac or Win). RGB must be toggled on for all indicators to function. If you do not want an RGB mode active but still want the indicators, toggle RGB on and turn the brightness all the way off. The indicators will remain at full brightness.
+###### Changing RGB settings with VIA lighting tab is unsupported at this time and may have undesired effects. Keymap changes with VIA is supported.
+
+## Config.h options
+
+Default options (these defaults will be applied whenever the eeprom is cleared):
+
+```
+ #define DEFAULT_CAPS_LOCK_LIGHT_TAB 0 // 1 = enable, 0 = disable
+ #define DEFAULT_CAPS_LOCK_LIGHT_ALPHA 1 // 1 = enable, 0 = disable
+ #define DEFAULT_FN_LAYER_TRANSPARENT_OFF 0 // 1 = enable, 0 = disable
+ #define DEFAULT_FN_LAYER_SHOW_COLOR 1 // 1 = enable, 0 = disable
+ #define DEFAULT_RGB_ENABLE_MAC_BASE 1 // 1 = enable, 0 = disable
+ #define DEFAULT_RGB_ENABLE_WIN_BASE 1 // 1 = enable, 0 = disable
+ #define DEFAULT_HUE_WIN_BASE 80 // HSV green hue (Win Base layer)
+ #define RGB_MATRIX_DEFAULT_HUE 170 // HSV blue hue (Mac Base layer)
+ #define RGB_MATRIX_DEFAULT_SAT 255 // Both Win/Mac Base layers
+ #define RGB_MATRIX_DEFAULT_VAL 255 // Both Win/Mac Base layers
+ #define RGB_MATRIX_DEFAULT_SPD 127 // Both Win/Mac Base layers
+ #define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_BREATHING // Both Win/Mac Base layers
+```
+
+Autocorrect option:
+
+```
+ // Autocorrect is on at start up. If you want Autocorrect to be off at startup,
+ // un-comment the following line
+ //#define AUTOCORRECT_OFF_AT_STARTUP
+```
+
+Caps Lock RGB indicator option:
+
+```
+ #define CAPS_LOCK_INDICATOR_COLOR RGB_RED
+```
+
+Dynamic Fn Layer RGB indicator options:
+
+```
+ #define FN1_LAYER_COLOR 0xFE, 0x23, 0x00 // RGB orange
+ #define FN2_LAYER_COLOR RGB_YELLOW
+```
+
+Caps Word options:
+
+```
+ // Caps Word RGB indicator color
+ #define CAPS_WORD_INDICATOR_COLOR RGB_RED
+
+ // Caps Word is activated by double-tapping left Shift. Replace this with
+ // #define BOTH_SHIFTS_TURNS_ON_CAPS_WORD if you want to activate Caps Word
+ // by single-tapping both left and right Shift togeter.
+ #define DOUBLE_TAP_SHIFT_TURNS_ON_CAPS_WORD
+
+ // Caps Word will light left Shift, left Control and left Option (or left Windows
+ // key) when acitvated. Remove this line if you want Caps Word to only light left
+ // Shift when enabled.
+ #define CAPS_WORD_LIGHT_LOWER_LEFT_CORNER
+```
+
+## This keymap makes the following layout changes over the factory firmware
+
+- Removes redundant lighting and NKRO keycodes from Fn1 layer (they remain on Fn2 layer)
+- Fn2+Left Shift toggles Autocorrect on/off
+- Fn2+Backspace enters DFU mode (but does not reset eeprom)
+- Fn2+Z (KC_LTTOG) Caps Lock Light Tab Toggle (default: off)
+ - toggle lighting the Tab key when Caps Lock is enabled. This is useful with non backlit keycaps/legends.
+- Fn2+X (KC_LATOG) Caps Lock Light Alpha Toggle (default: on)
+ - toggle lighting all the alpha keys when Caps Lock is enabled.
+- Fn2+C (KC_TKTOG) Fn layer Trasnparent Key Off Toggle (default: RGB on)
+ - toggle turning off RGB for keys with no definition
+- Fn2+V (KC_FCTOG) Fn layer Color Toggle (default: static color on)
+ - toggle lighting the defined Fn layer keys with the static color set with FN1_LAYER_COLOR or FN2_LAYER_COLOR
+
+- Uses Grave Escape on key to the left of the 1 key:
+ - Base Layer: key functions as ESC, shift+key gives ~
+ - Fn1 Layer: Fn1+key gives `
+ - Fn2 Layer: Fn2+key gives ~
+
+- Changes the two vertical keys under the knob as follows:
+ - Base Layer: PGUP and PGDN
+ - Fn1 Layer: Home and End (Mac mode does Cmd-left and Cmd-right)
+ - Fn2 Layer: Delete and Home (Mac mode Home returns to top of page)
+
+- Changes the knob to function as follows:
+ - Base Layer: volume up, down Press: mute
+ - Fn1 Layer: zoom in, out Press: return to 100% zoom
+ - Fn2 Layer: LED brighness inc, dec Press: backlight toggle
+
+- Mac mode only
+ - Fn1+Q (KC_LBMAC) will lock and sleep display
+ - Fn1+< sets my secondary display to 0° rotation
+ - Fn1+> sets my secondary display to 90° rotation
+
+ Note: display rotation requires additional software and changes made, see this link for more information:
+ [https://gist.github.com/mkillewald/706b7ef8624d8c2bf17ce1df344cff48](https://gist.github.com/mkillewald/706b7ef8624d8c2bf17ce1df344cff48)
+
+All custom keycodes can be moved to different keys in VIA by using the following:
+- CUSTOM(64) = KC_LTTOG (default: Fn2+Z) Caps Lock Light Tab Toggle
+- CUSTOM(65) = KC_LATOG (default: Fn2+X) Caps Lock Light Alpha Toggle
+- CUSTOM(66) = KC_TKTOG (default: Fn2+C) Fn layer Trasnparent Key Off Toggle
+- CUSTOM(67) = KC_FCTOG (default: Fn2+V) Fn layer Color Toggle
+- CUSTOM(68) = KC_LBMAC (default Mac Only: Fn1+Q) Lock and Blank Mac
+
+
+#### USE AT YOUR OWN RISK
+
+## Changelog:
+
+v2.0.2 May 9, 2023
+- added Keychron factory reset and LED test
+
+v2.0.1 April 11, 2023
+- enabled separate RGB toggle for each base layer (Mac / Win)
+
+v2.0.0 April 7, 2023
+- added different RGB settings for Mac Base and Win Base layers
+
+v1.0.1 April 4, 2023
+- made requested changes by QMK reveiwers
+- removed optional .json file and baked my layout changes into the firmware
+
+v1.0.0 March 19, 2023
+- Carried over features from my Q1V2 keymap.
diff --git a/keyboards/keychron/q2/ansi_encoder/keymaps/mkillewald/rules.mk b/keyboards/keychron/q2/ansi_encoder/keymaps/mkillewald/rules.mk
new file mode 100644
index 000000000000..a4066ebf79e1
--- /dev/null
+++ b/keyboards/keychron/q2/ansi_encoder/keymaps/mkillewald/rules.mk
@@ -0,0 +1,6 @@
+ENCODER_MAP_ENABLE = yes
+CAPS_WORD_ENABLE = yes
+AUTOCORRECT_ENABLE = yes
+
+VPATH += keyboards/keychron/common
+SRC += keychron_common.c
diff --git a/users/mkillewald/autocorrect_data.h b/users/mkillewald/autocorrect_data.h
new file mode 100644
index 000000000000..ff25efaf6cba
--- /dev/null
+++ b/users/mkillewald/autocorrect_data.h
@@ -0,0 +1,809 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+/*******************************************************************************
+ 88888888888 888 d8b .d888 d8b 888 d8b
+ 888 888 Y8P d88P" Y8P 888 Y8P
+ 888 888 888 888
+ 888 88888b. 888 .d8888b 888888 888 888 .d88b. 888 .d8888b
+ 888 888 "88b 888 88K 888 888 888 d8P Y8b 888 88K
+ 888 888 888 888 "Y8888b. 888 888 888 88888888 888 "Y8888b.
+ 888 888 888 888 X88 888 888 888 Y8b. 888 X88
+ 888 888 888 888 88888P' 888 888 888 "Y8888 888 88888P'
+ 888 888
+ 888 888
+ 888 888
+ .d88b. .d88b. 88888b. .d88b. 888d888 8888b. 888888 .d88b. .d88888
+ d88P"88b d8P Y8b 888 "88b d8P Y8b 888P" "88b 888 d8P Y8b d88" 888
+ 888 888 88888888 888 888 88888888 888 .d888888 888 88888888 888 888
+ Y88b 888 Y8b. 888 888 Y8b. 888 888 888 Y88b. Y8b. Y88b 888
+ "Y88888 "Y8888 888 888 "Y8888 888 "Y888888 "Y888 "Y8888 "Y88888
+ 888
+ Y8b d88P
+ "Y88P"
+*******************************************************************************/
+
+#pragma once
+
+// Autocorrection dictionary (400 entries):
+// :htere -> there
+// abbout -> about
+// abotu -> about
+// baout -> about
+// :theri -> their
+// :thier -> their
+// :owudl -> would
+// woudl -> would
+// peaple -> people
+// peolpe -> people
+// peopel -> people
+// poeple -> people
+// poeople -> people
+// :hwihc -> which
+// whcih -> which
+// whihc -> which
+// whlch -> which
+// wihch -> which
+// coudl -> could
+// :htikn -> think
+// :htink -> think
+// thikn -> think
+// thiunk -> think
+// tihkn -> think
+// :olther -> other
+// :otehr -> other
+// baceause -> because
+// beacuse -> because
+// becasue -> because
+// beccause -> because
+// becouse -> because
+// becuase -> because
+// theese -> these
+// :goign -> going
+// :gonig -> going
+// :yaers -> years
+// :yeasr -> years
+// :thsoe -> those
+// shoudl -> should
+// raelly -> really
+// realy -> really
+// relaly -> really
+// bedore -> before
+// befoer -> before
+// littel -> little
+// beeing -> being
+// :hwile -> while
+// aroud -> around
+// arround -> around
+// arund -> around
+// thign -> thing
+// thigsn -> things
+// thnigs -> things
+// anohter -> another
+// beteen -> between
+// beween -> between
+// bewteen -> between
+// :eveyr -> every
+// :graet -> great
+// :agian -> again
+// :sicne -> since
+// alwasy -> always
+// alwyas -> always
+// throught -> thought
+// :acheiv -> achiev
+// almsot -> almost
+// alomst -> almost
+// chnage -> change
+// chekc -> check
+// childen -> children
+// claer -> clear
+// comapny -> company
+// contian -> contain
+// elasped -> elapsed
+// feild -> field
+// fitler -> filter
+// firts -> first
+// follwo -> follow
+// :foudn -> found
+// frequecy -> frequency
+// firend -> friend
+// freind -> friend
+// heigth -> height
+// iamge -> image
+// inital -> initial
+// intput -> input
+// laguage -> language
+// lenght -> length
+// levle -> level
+// libary -> library
+// :moeny -> money
+// mysefl -> myself
+// ouptut -> output
+// ouput -> output
+// probaly -> probably
+// probelm -> problem
+// recrod -> record
+// reponse -> response
+// reprot -> report
+// singel -> single
+// stregth -> strength
+// strengh -> strength
+// tkaes -> takes
+// therfore -> therefore
+// todya -> today
+// toghether -> together
+// unkown -> unknown
+// unqiue -> unique
+// widht -> width
+// aberation -> aberration
+// accross -> across
+// adviced -> advised
+// aledge -> allege
+// alledge -> allege
+// amature -> amateur
+// anomolous -> anomalous
+// anomoly -> anomaly
+// aparent -> apparent
+// aparrent -> apparent
+// apparant -> apparent
+// apparrent -> apparent
+// asthetic -> aesthetic
+// auxilary -> auxiliary
+// auxillary -> auxiliary
+// auxilliary -> auxiliary
+// bankrupcy -> bankruptcy
+// busness -> business
+// bussiness -> business
+// calander -> calendar
+// commitee -> committee
+// comittee -> committee
+// competance -> competence
+// competant -> competent
+// concensus -> consensus
+// cognizent -> cognizant
+// copywrite: -> copyright
+// choosen -> chosen
+// collegue -> colleague
+// excercise -> exercise
+// :grammer -> grammar
+// :guage -> gauge
+// govement -> government
+// govenment -> government
+// goverment -> government
+// governmnet -> government
+// govorment -> government
+// govornment -> government
+// guaratee -> guarantee
+// garantee -> guarantee
+// gaurantee -> guarantee
+// heirarchy -> hierarchy
+// hygeine -> hygiene
+// hypocracy -> hypocrisy
+// hypocrasy -> hypocrisy
+// hypocricy -> hypocrisy
+// hypocrit: -> hypocrite
+// looses: -> loses
+// maintence -> maintenance
+// morgage -> mortgage
+// neccesary -> necessary
+// necesary -> necessary
+// pallete -> palette
+// paralel -> parallel
+// parralel -> parallel
+// parrallel -> parallel
+// priviledge -> privilege
+// probablly -> probably
+// prominant -> prominent
+// propogate -> propagate
+// proove -> prove
+// psuedo -> pseudo
+// reciept -> receipt
+// receiev -> receiv
+// reciev -> receiv
+// recepient -> recipient
+// recipiant -> recipient
+// relevent -> relevant
+// repitition -> repetition
+// safty -> safety
+// saftey -> safety
+// seperat -> separat
+// spectogram -> spectrogram
+// symetric -> symmetric
+// tolerence -> tolerance
+// cacheing -> caching
+// complier -> compiler
+// doulbe -> double
+// dyanmic -> dynamic
+// excecut -> execut
+// failse -> false
+// fales -> false
+// fasle -> false
+// flase -> false
+// indeces -> indices
+// indecies -> indices
+// indicies -> indices
+// interator -> iterator
+// looup -> lookup
+// namesapce -> namespace
+// namespcae -> namespace
+// nulltpr -> nullptr
+// operaotr -> operator
+// overide -> override
+// ovveride -> override
+// poitner -> pointer
+// :rference -> reference
+// referece -> reference
+// singed -> signed
+// stirng -> string
+// strign -> string
+// swithc -> switch
+// swtich -> switch
+// teamplate -> template
+// tempalte -> template
+// :ture -> true
+// retrun -> return
+// retun -> return
+// reutrn -> return
+// cosnt -> const
+// virutal -> virtual
+// vitual -> virtual
+// yeild -> yield
+// :alot: -> a lot
+// :andteh -> and the
+// :andthe -> and the
+// :asthe -> as the
+// :atthe -> at the
+// abouta -> about a
+// aboutit -> about it
+// aboutthe -> about the
+// :tothe -> to the
+// didnot -> did not
+// fromthe -> from the
+// :agred -> agreed
+// :ajust -> adjust
+// :anual -> annual
+// :asign -> assign
+// :aslo: -> also
+// :casue -> cause
+// :choses -> chooses
+// :gaurd -> guard
+// :haev -> have
+// :hapen -> happen
+// :idaes -> ideas
+// :jsut: -> just
+// :jstu: -> just
+// :knwo -> know
+// :konw -> know
+// :kwno -> know
+// :ocuntry -> country
+// :ocur -> occur
+// :socre -> score
+// :szie -> size
+// :the:the: -> the
+// :turth -> truth
+// :uesd: -> used
+// :usally -> usually
+// abilties -> abilities
+// abilty -> ability
+// abvove -> above
+// accesories -> accessories
+// accomodate -> accommodate
+// acommodate -> accommodate
+// acomplish -> accomplish
+// actualy -> actually
+// acurate -> accurate
+// acutally -> actually
+// addtion -> addition
+// againnst -> against
+// aganist -> against
+// aggreed -> agreed
+// agianst -> against
+// ahppn -> happen
+// allign -> align
+// anytying -> anything
+// aquire -> acquire
+// availabe -> available
+// availaible -> available
+// availalbe -> available
+// availble -> available
+// availiable -> available
+// avalable -> available
+// avaliable -> available
+// avilable -> available
+// bandwith -> bandwidth
+// begginer -> beginner
+// beleif -> belief
+// beleive -> believe
+// belive -> believe
+// breif -> brief
+// burried -> buried
+// caluclate -> calculate
+// caluculate -> calculate
+// calulate -> calculate
+// catagory -> category
+// cauhgt -> caught
+// ceratin -> certain
+// certian -> certain
+// cheif -> chief
+// cieling -> ceiling
+// circut -> circuit
+// clasic -> classic
+// cmoputer -> computer
+// coform -> conform
+// comming: -> coming
+// considerd -> considered
+// dervied -> derived
+// desicion -> decision
+// diferent -> different
+// diferrent -> different
+// differnt -> different
+// diffrent -> different
+// divison -> division
+// effecient -> efficient
+// eligable -> eligible
+// elpased -> elapsed
+// embarass -> embarrass
+// embeded -> embedded
+// encypt -> encrypt
+// finaly -> finally
+// foriegn -> foreign
+// foward -> forward
+// fraciton -> fraction
+// fucntion -> function
+// fufill -> fulfill
+// fullfill -> fulfill
+// futher -> further
+// ganerate -> generate
+// generaly -> generally
+// greatful -> grateful
+// heigher -> higher
+// higest -> highest
+// howver -> however
+// hydogen -> hydrogen
+// importamt -> important
+// inclued -> include
+// insted -> instead
+// intrest -> interest
+// invliad -> invalid
+// largst -> largest
+// learnign -> learning
+// liasion -> liaison
+// likly -> likely
+// lisense -> license
+// listner -> listener
+// macthing -> matching
+// manefist -> manifest
+// mesage -> message
+// naturual -> natural
+// occassion -> occasion
+// occured -> occurred
+// particualr -> particular
+// paticular -> particular
+// peice -> piece
+// perhasp -> perhaps
+// perheaps -> perhaps
+// perhpas -> perhaps
+// perphas -> perhaps
+// persue -> pursue
+// posess -> possess
+// postion -> position
+// preiod -> period
+// primarly -> primarily
+// privte -> private
+// proccess -> process
+// proeprty -> property
+// propery -> property
+// realtion -> relation
+// reasearch -> research
+// recuring -> recurring
+// refered -> referred
+// regluar -> regular
+// releated -> related
+// resutl -> result
+// reuslt -> result
+// reveiw -> review
+// satisifed -> satisfied
+// scheduel -> schedule
+// sequnce -> sequence
+// similiar -> similar
+// simmilar -> similar
+// slighly -> slightly
+// somehwat -> somewhat
+// statment -> statement
+// sucess -> success
+// succsess -> success
+// sugest -> suggest
+// sumary -> summary
+// supress -> suppress
+// surpress -> suppress
+// thresold -> threshold
+// tongiht -> tonight
+// tranpose -> transpose
+// typcial -> typical
+// udpate -> update
+// ususally -> usually
+// verticies -> vertices
+// whereever -> wherever
+// wherre -> where
+// wierd -> weird
+
+#define AUTOCORRECT_MIN_LENGTH 5 // "abotu"
+#define AUTOCORRECT_MAX_LENGTH 10 // "auxilliary"
+#define DICTIONARY_SIZE 5967
+
+static const uint8_t autocorrect_data[DICTIONARY_SIZE] PROGMEM = {
+ 0x6C, 0x43, 0x00, 0x04, 0xD4, 0x00, 0x06, 0xEC, 0x00, 0x07, 0x64, 0x01, 0x08, 0x0F, 0x03, 0x09,
+ 0xA9, 0x08, 0x0A, 0xCC, 0x08, 0x0B, 0x44, 0x09, 0x0C, 0xF6, 0x09, 0x0E, 0x00, 0x0A, 0x0F, 0x1C,
+ 0x0A, 0x10, 0x4F, 0x0B, 0x11, 0x81, 0x0B, 0x12, 0xAF, 0x0D, 0x13, 0xE3, 0x0D, 0x15, 0xFD, 0x0D,
+ 0x16, 0xC2, 0x0F, 0x17, 0x79, 0x11, 0x18, 0xC9, 0x14, 0x19, 0xD2, 0x14, 0x1A, 0x08, 0x15, 0x1C,
+ 0x22, 0x15, 0x00, 0x47, 0x59, 0x00, 0x08, 0x63, 0x00, 0x0A, 0x82, 0x00, 0x12, 0x8E, 0x00, 0x16,
+ 0x98, 0x00, 0x17, 0xA3, 0x00, 0x18, 0xCA, 0x00, 0x00, 0x16, 0x08, 0x18, 0x2C, 0x00, 0x83, 0x73,
+ 0x65, 0x64, 0x00, 0x4B, 0x6A, 0x00, 0x17, 0x73, 0x00, 0x00, 0x17, 0x2C, 0x08, 0x0B, 0x17, 0x2C,
+ 0x00, 0x84, 0x00, 0x0C, 0x15, 0x1A, 0x1C, 0x13, 0x12, 0x06, 0x00, 0x85, 0x72, 0x69, 0x67, 0x68,
+ 0x74, 0x00, 0x11, 0x0C, 0x10, 0x10, 0x12, 0x06, 0x00, 0x84, 0x69, 0x6E, 0x67, 0x00, 0x0F, 0x16,
+ 0x04, 0x2C, 0x00, 0x83, 0x6C, 0x73, 0x6F, 0x00, 0x08, 0x16, 0x12, 0x12, 0x0F, 0x00, 0x84, 0x73,
+ 0x65, 0x73, 0x00, 0x4C, 0xAD, 0x00, 0x12, 0xB7, 0x00, 0x18, 0xC1, 0x00, 0x00, 0x15, 0x06, 0x12,
+ 0x13, 0x1C, 0x0B, 0x00, 0x80, 0x65, 0x00, 0x0F, 0x04, 0x2C, 0x00, 0x83, 0x20, 0x6C, 0x6F, 0x74,
+ 0x00, 0x16, 0x0D, 0x2C, 0x00, 0x83, 0x75, 0x73, 0x74, 0x00, 0x17, 0x16, 0x0D, 0x2C, 0x00, 0x83,
+ 0x75, 0x73, 0x74, 0x00, 0x57, 0xDB, 0x00, 0x1C, 0xE4, 0x00, 0x00, 0x18, 0x12, 0x05, 0x04, 0x00,
+ 0x80, 0x20, 0x61, 0x00, 0x07, 0x12, 0x17, 0x00, 0x81, 0x61, 0x79, 0x00, 0x4B, 0xF6, 0x00, 0x0C,
+ 0x1C, 0x01, 0x0E, 0x5C, 0x01, 0x00, 0x4C, 0xFD, 0x00, 0x17, 0x14, 0x01, 0x00, 0x4B, 0x04, 0x01,
+ 0x1A, 0x0A, 0x01, 0x00, 0x1A, 0x00, 0x81, 0x63, 0x68, 0x00, 0x0B, 0x2C, 0x00, 0x84, 0x77, 0x68,
+ 0x69, 0x63, 0x68, 0x00, 0x0C, 0x1A, 0x16, 0x00, 0x81, 0x63, 0x68, 0x00, 0x50, 0x29, 0x01, 0x15,
+ 0x35, 0x01, 0x16, 0x43, 0x01, 0x17, 0x4C, 0x01, 0x00, 0x11, 0x04, 0x1C, 0x07, 0x00, 0x84, 0x6E,
+ 0x61, 0x6D, 0x69, 0x63, 0x00, 0x17, 0x08, 0x10, 0x1C, 0x16, 0x00, 0x84, 0x6D, 0x65, 0x74, 0x72,
+ 0x69, 0x63, 0x00, 0x04, 0x0F, 0x06, 0x00, 0x81, 0x73, 0x69, 0x63, 0x00, 0x08, 0x0B, 0x17, 0x16,
+ 0x04, 0x00, 0x86, 0x65, 0x73, 0x74, 0x68, 0x65, 0x74, 0x69, 0x63, 0x00, 0x08, 0x0B, 0x06, 0x00,
+ 0x81, 0x63, 0x6B, 0x00, 0x44, 0x7A, 0x01, 0x08, 0x86, 0x01, 0x0F, 0x54, 0x02, 0x11, 0x7C, 0x02,
+ 0x12, 0xB4, 0x02, 0x15, 0xCF, 0x02, 0x18, 0x07, 0x03, 0x00, 0x0C, 0x0F, 0x19, 0x11, 0x0C, 0x00,
+ 0x83, 0x61, 0x6C, 0x69, 0x64, 0x00, 0x46, 0xA8, 0x01, 0x07, 0xB2, 0x01, 0x08, 0xBC, 0x01, 0x09,
+ 0xC7, 0x01, 0x0A, 0xD4, 0x01, 0x0C, 0xDE, 0x01, 0x13, 0xF8, 0x01, 0x15, 0x03, 0x02, 0x16, 0x26,
+ 0x02, 0x17, 0x32, 0x02, 0x18, 0x4B, 0x02, 0x00, 0x0C, 0x19, 0x07, 0x04, 0x00, 0x82, 0x73, 0x65,
+ 0x64, 0x00, 0x08, 0x05, 0x10, 0x08, 0x00, 0x81, 0x64, 0x65, 0x64, 0x00, 0x15, 0x0A, 0x0A, 0x04,
+ 0x00, 0x84, 0x72, 0x65, 0x65, 0x64, 0x00, 0x0C, 0x16, 0x0C, 0x17, 0x04, 0x16, 0x00, 0x83, 0x66,
+ 0x69, 0x65, 0x64, 0x00, 0x11, 0x0C, 0x16, 0x00, 0x83, 0x67, 0x6E, 0x65, 0x64, 0x00, 0x55, 0xE5,
+ 0x01, 0x19, 0xEE, 0x01, 0x00, 0x15, 0x18, 0x05, 0x00, 0x83, 0x69, 0x65, 0x64, 0x00, 0x15, 0x08,
+ 0x07, 0x00, 0x83, 0x69, 0x76, 0x65, 0x64, 0x00, 0x16, 0x04, 0x0F, 0x08, 0x00, 0x83, 0x70, 0x73,
+ 0x65, 0x64, 0x00, 0x48, 0x0D, 0x02, 0x0A, 0x16, 0x02, 0x18, 0x1D, 0x02, 0x00, 0x09, 0x08, 0x15,
+ 0x00, 0x81, 0x72, 0x65, 0x64, 0x00, 0x04, 0x2C, 0x00, 0x80, 0x65, 0x64, 0x00, 0x06, 0x06, 0x12,
+ 0x00, 0x81, 0x72, 0x65, 0x64, 0x00, 0x04, 0x13, 0x0F, 0x08, 0x00, 0x84, 0x61, 0x70, 0x73, 0x65,
+ 0x64, 0x00, 0x44, 0x39, 0x02, 0x16, 0x44, 0x02, 0x00, 0x08, 0x0F, 0x08, 0x15, 0x00, 0x84, 0x61,
+ 0x74, 0x65, 0x64, 0x00, 0x11, 0x0C, 0x00, 0x80, 0x61, 0x64, 0x00, 0x0F, 0x06, 0x11, 0x0C, 0x00,
+ 0x81, 0x64, 0x65, 0x00, 0x4C, 0x5B, 0x02, 0x12, 0x70, 0x02, 0x00, 0x08, 0x00, 0x49, 0x64, 0x02,
+ 0x1C, 0x6A, 0x02, 0x00, 0x83, 0x69, 0x65, 0x6C, 0x64, 0x00, 0x83, 0x69, 0x65, 0x6C, 0x64, 0x00,
+ 0x16, 0x08, 0x15, 0x0B, 0x17, 0x00, 0x82, 0x68, 0x6F, 0x6C, 0x64, 0x00, 0x48, 0x86, 0x02, 0x0C,
+ 0x91, 0x02, 0x18, 0x9B, 0x02, 0x00, 0x15, 0x0C, 0x09, 0x00, 0x84, 0x72, 0x69, 0x65, 0x6E, 0x64,
+ 0x00, 0x08, 0x15, 0x09, 0x00, 0x83, 0x69, 0x65, 0x6E, 0x64, 0x00, 0x52, 0xA2, 0x02, 0x15, 0xAC,
+ 0x02, 0x00, 0x15, 0x15, 0x04, 0x00, 0x84, 0x6F, 0x75, 0x6E, 0x64, 0x00, 0x04, 0x00, 0x82, 0x6F,
+ 0x75, 0x6E, 0x64, 0x00, 0x4C, 0xBB, 0x02, 0x15, 0xC6, 0x02, 0x00, 0x08, 0x15, 0x13, 0x00, 0x84,
+ 0x65, 0x72, 0x69, 0x6F, 0x64, 0x00, 0x06, 0x08, 0x15, 0x00, 0x82, 0x6F, 0x72, 0x64, 0x00, 0x44,
+ 0xD9, 0x02, 0x08, 0xE4, 0x02, 0x18, 0xFD, 0x02, 0x00, 0x1A, 0x12, 0x09, 0x00, 0x83, 0x72, 0x77,
+ 0x61, 0x72, 0x64, 0x00, 0x47, 0xEB, 0x02, 0x0C, 0xF5, 0x02, 0x00, 0x0C, 0x16, 0x11, 0x12, 0x06,
+ 0x00, 0x80, 0x65, 0x64, 0x00, 0x1A, 0x00, 0x83, 0x65, 0x69, 0x72, 0x64, 0x00, 0x04, 0x0A, 0x2C,
+ 0x00, 0x83, 0x75, 0x61, 0x72, 0x64, 0x00, 0x12, 0x15, 0x04, 0x00, 0x80, 0x6E, 0x64, 0x00, 0x44,
+ 0x43, 0x03, 0x05, 0x50, 0x03, 0x06, 0x7B, 0x03, 0x07, 0xFB, 0x03, 0x08, 0x17, 0x04, 0x0A, 0x6B,
+ 0x04, 0x0B, 0xE3, 0x04, 0x0C, 0x34, 0x05, 0x0F, 0x3D, 0x05, 0x11, 0x00, 0x06, 0x12, 0x1B, 0x06,
+ 0x13, 0x25, 0x06, 0x15, 0x2F, 0x06, 0x16, 0x9C, 0x06, 0x17, 0x52, 0x07, 0x18, 0x2D, 0x08, 0x19,
+ 0x73, 0x08, 0x00, 0x06, 0x13, 0x16, 0x08, 0x10, 0x04, 0x11, 0x00, 0x82, 0x61, 0x63, 0x65, 0x00,
+ 0x44, 0x57, 0x03, 0x0F, 0x61, 0x03, 0x00, 0x0F, 0x0C, 0x04, 0x19, 0x04, 0x00, 0x80, 0x6C, 0x65,
+ 0x00, 0x44, 0x68, 0x03, 0x18, 0x73, 0x03, 0x00, 0x0F, 0x0C, 0x04, 0x19, 0x04, 0x00, 0x82, 0x62,
+ 0x6C, 0x65, 0x00, 0x12, 0x07, 0x00, 0x82, 0x62, 0x6C, 0x65, 0x00, 0x48, 0x88, 0x03, 0x0C, 0x93,
+ 0x03, 0x11, 0x9C, 0x03, 0x13, 0xEE, 0x03, 0x00, 0x15, 0x08, 0x09, 0x08, 0x15, 0x00, 0x81, 0x6E,
+ 0x63, 0x65, 0x00, 0x08, 0x13, 0x00, 0x83, 0x69, 0x65, 0x63, 0x65, 0x00, 0x44, 0xA6, 0x03, 0x08,
+ 0xB3, 0x03, 0x18, 0xE4, 0x03, 0x00, 0x17, 0x08, 0x13, 0x10, 0x12, 0x06, 0x00, 0x83, 0x65, 0x6E,
+ 0x63, 0x65, 0x00, 0x55, 0xBA, 0x03, 0x17, 0xD9, 0x03, 0x00, 0x08, 0x00, 0x49, 0xC3, 0x03, 0x0F,
+ 0xD0, 0x03, 0x00, 0x15, 0x2C, 0x00, 0x86, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6E, 0x63, 0x65, 0x00,
+ 0x12, 0x17, 0x00, 0x83, 0x61, 0x6E, 0x63, 0x65, 0x00, 0x11, 0x0C, 0x04, 0x10, 0x00, 0x81, 0x61,
+ 0x6E, 0x63, 0x65, 0x00, 0x14, 0x08, 0x16, 0x00, 0x82, 0x65, 0x6E, 0x63, 0x65, 0x00, 0x04, 0x16,
+ 0x08, 0x10, 0x04, 0x11, 0x00, 0x83, 0x70, 0x61, 0x63, 0x65, 0x00, 0x0C, 0x15, 0x08, 0x19, 0x00,
+ 0x52, 0x07, 0x04, 0x19, 0x0D, 0x04, 0x00, 0x82, 0x72, 0x69, 0x64, 0x65, 0x00, 0x12, 0x00, 0x85,
+ 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x00, 0x17, 0x00, 0x44, 0x26, 0x04, 0x0C, 0x31, 0x04, 0x11,
+ 0x3B, 0x04, 0x17, 0x5E, 0x04, 0x00, 0x15, 0x04, 0x18, 0x0A, 0x00, 0x82, 0x6E, 0x74, 0x65, 0x65,
+ 0x00, 0x10, 0x10, 0x12, 0x06, 0x00, 0x81, 0x74, 0x65, 0x65, 0x00, 0x04, 0x15, 0x00, 0x44, 0x45,
+ 0x04, 0x18, 0x51, 0x04, 0x00, 0x0A, 0x00, 0x86, 0x75, 0x61, 0x72, 0x61, 0x6E, 0x74, 0x65, 0x65,
+ 0x00, 0x04, 0x0A, 0x00, 0x87, 0x75, 0x61, 0x72, 0x61, 0x6E, 0x74, 0x65, 0x65, 0x00, 0x0C, 0x10,
+ 0x12, 0x06, 0x00, 0x84, 0x6D, 0x69, 0x74, 0x74, 0x65, 0x65, 0x00, 0x44, 0x75, 0x04, 0x07, 0xB8,
+ 0x04, 0x10, 0xDA, 0x04, 0x00, 0x4A, 0x82, 0x04, 0x11, 0x8D, 0x04, 0x16, 0x96, 0x04, 0x18, 0x9F,
+ 0x04, 0x00, 0x15, 0x12, 0x10, 0x00, 0x83, 0x74, 0x67, 0x61, 0x67, 0x65, 0x00, 0x0B, 0x06, 0x00,
+ 0x83, 0x61, 0x6E, 0x67, 0x65, 0x00, 0x08, 0x10, 0x00, 0x82, 0x73, 0x61, 0x67, 0x65, 0x00, 0x0A,
+ 0x00, 0x6C, 0xA8, 0x04, 0x04, 0xAE, 0x04, 0x00, 0x83, 0x61, 0x75, 0x67, 0x65, 0x00, 0x0F, 0x00,
+ 0x84, 0x6E, 0x67, 0x75, 0x61, 0x67, 0x65, 0x00, 0x08, 0x0F, 0x00, 0x44, 0xC5, 0x04, 0x0C, 0xCB,
+ 0x04, 0x0F, 0xD4, 0x04, 0x00, 0x83, 0x6C, 0x65, 0x67, 0x65, 0x00, 0x19, 0x0C, 0x15, 0x13, 0x00,
+ 0x82, 0x67, 0x65, 0x00, 0x04, 0x00, 0x82, 0x67, 0x65, 0x00, 0x04, 0x0C, 0x00, 0x83, 0x6D, 0x61,
+ 0x67, 0x65, 0x00, 0x17, 0x00, 0x47, 0xF5, 0x04, 0x10, 0xFF, 0x04, 0x12, 0x09, 0x05, 0x16, 0x12,
+ 0x05, 0x17, 0x1B, 0x05, 0x00, 0x11, 0x04, 0x2C, 0x00, 0x82, 0x20, 0x74, 0x68, 0x65, 0x00, 0x12,
+ 0x15, 0x09, 0x00, 0x82, 0x20, 0x74, 0x68, 0x65, 0x00, 0x17, 0x2C, 0x00, 0x82, 0x20, 0x74, 0x68,
+ 0x65, 0x00, 0x04, 0x2C, 0x00, 0x82, 0x20, 0x74, 0x68, 0x65, 0x00, 0x44, 0x22, 0x05, 0x18, 0x2A,
+ 0x05, 0x00, 0x2C, 0x00, 0x82, 0x20, 0x74, 0x68, 0x65, 0x00, 0x12, 0x05, 0x04, 0x00, 0x82, 0x20,
+ 0x74, 0x68, 0x65, 0x00, 0x1D, 0x16, 0x2C, 0x00, 0x82, 0x69, 0x7A, 0x65, 0x00, 0x45, 0x4D, 0x05,
+ 0x0C, 0xBE, 0x05, 0x13, 0xC9, 0x05, 0x16, 0xF1, 0x05, 0x19, 0xF9, 0x05, 0x00, 0x44, 0x57, 0x05,
+ 0x0C, 0xA7, 0x05, 0x0F, 0xB3, 0x05, 0x00, 0x4A, 0x61, 0x05, 0x0C, 0x6B, 0x05, 0x0F, 0x89, 0x05,
+ 0x00, 0x0C, 0x0F, 0x08, 0x00, 0x83, 0x69, 0x62, 0x6C, 0x65, 0x00, 0x0F, 0x00, 0x44, 0x74, 0x05,
+ 0x0C, 0x7F, 0x05, 0x00, 0x19, 0x04, 0x00, 0x85, 0x69, 0x6C, 0x61, 0x62, 0x6C, 0x65, 0x00, 0x04,
+ 0x19, 0x04, 0x00, 0x84, 0x61, 0x62, 0x6C, 0x65, 0x00, 0x44, 0x90, 0x05, 0x0C, 0x9B, 0x05, 0x00,
+ 0x19, 0x04, 0x00, 0x84, 0x69, 0x6C, 0x61, 0x62, 0x6C, 0x65, 0x00, 0x19, 0x04, 0x00, 0x85, 0x61,
+ 0x69, 0x6C, 0x61, 0x62, 0x6C, 0x65, 0x00, 0x04, 0x0F, 0x0C, 0x04, 0x19, 0x04, 0x00, 0x83, 0x62,
+ 0x6C, 0x65, 0x00, 0x0C, 0x04, 0x19, 0x04, 0x00, 0x82, 0x61, 0x62, 0x6C, 0x65, 0x00, 0x1A, 0x0B,
+ 0x2C, 0x00, 0x84, 0x77, 0x68, 0x69, 0x6C, 0x65, 0x00, 0x44, 0xD3, 0x05, 0x08, 0xDC, 0x05, 0x12,
+ 0xE6, 0x05, 0x00, 0x08, 0x13, 0x00, 0x83, 0x6F, 0x70, 0x6C, 0x65, 0x00, 0x12, 0x13, 0x00, 0x84,
+ 0x65, 0x6F, 0x70, 0x6C, 0x65, 0x00, 0x08, 0x12, 0x13, 0x00, 0x85, 0x65, 0x6F, 0x70, 0x6C, 0x65,
+ 0x00, 0x04, 0x09, 0x00, 0x82, 0x6C, 0x73, 0x65, 0x00, 0x08, 0x0F, 0x00, 0x81, 0x65, 0x6C, 0x00,
+ 0x46, 0x07, 0x06, 0x0C, 0x10, 0x06, 0x00, 0x0C, 0x16, 0x2C, 0x00, 0x82, 0x6E, 0x63, 0x65, 0x00,
+ 0x08, 0x0A, 0x1C, 0x0B, 0x00, 0x83, 0x69, 0x65, 0x6E, 0x65, 0x00, 0x16, 0x0B, 0x17, 0x2C, 0x00,
+ 0x82, 0x6F, 0x73, 0x65, 0x00, 0x0F, 0x12, 0x08, 0x13, 0x00, 0x82, 0x70, 0x6C, 0x65, 0x00, 0x46,
+ 0x42, 0x06, 0x08, 0x4C, 0x06, 0x0C, 0x57, 0x06, 0x12, 0x63, 0x06, 0x15, 0x7F, 0x06, 0x18, 0x86,
+ 0x06, 0x00, 0x12, 0x16, 0x2C, 0x00, 0x83, 0x63, 0x6F, 0x72, 0x65, 0x00, 0x17, 0x0B, 0x2C, 0x00,
+ 0x84, 0x74, 0x68, 0x65, 0x72, 0x65, 0x00, 0x18, 0x14, 0x04, 0x00, 0x84, 0x63, 0x71, 0x75, 0x69,
+ 0x72, 0x65, 0x00, 0x47, 0x6A, 0x06, 0x09, 0x73, 0x06, 0x00, 0x08, 0x05, 0x00, 0x83, 0x66, 0x6F,
+ 0x72, 0x65, 0x00, 0x15, 0x08, 0x0B, 0x17, 0x00, 0x83, 0x65, 0x66, 0x6F, 0x72, 0x65, 0x00, 0x08,
+ 0x0B, 0x1A, 0x00, 0x81, 0x65, 0x00, 0x17, 0x00, 0x6C, 0x8F, 0x06, 0x04, 0x94, 0x06, 0x00, 0x82,
+ 0x72, 0x75, 0x65, 0x00, 0x10, 0x04, 0x00, 0x82, 0x65, 0x75, 0x72, 0x00, 0x44, 0xB2, 0x06, 0x08,
+ 0xCB, 0x06, 0x0C, 0xD3, 0x06, 0x0F, 0xE2, 0x06, 0x11, 0xEB, 0x06, 0x12, 0x09, 0x07, 0x18, 0x16,
+ 0x07, 0x00, 0x4F, 0xB9, 0x06, 0x18, 0xC1, 0x06, 0x00, 0x09, 0x00, 0x83, 0x61, 0x6C, 0x73, 0x65,
+ 0x00, 0x06, 0x08, 0x05, 0x00, 0x83, 0x61, 0x75, 0x73, 0x65, 0x00, 0x08, 0x0B, 0x17, 0x00, 0x82,
+ 0x73, 0x65, 0x00, 0x06, 0x15, 0x08, 0x06, 0x1B, 0x08, 0x00, 0x86, 0x65, 0x72, 0x63, 0x69, 0x73,
+ 0x65, 0x00, 0x0C, 0x04, 0x09, 0x00, 0x83, 0x6C, 0x73, 0x65, 0x00, 0x48, 0xF2, 0x06, 0x12, 0xFD,
+ 0x06, 0x00, 0x16, 0x0C, 0x0F, 0x00, 0x84, 0x63, 0x65, 0x6E, 0x73, 0x65, 0x00, 0x13, 0x08, 0x15,
+ 0x00, 0x84, 0x73, 0x70, 0x6F, 0x6E, 0x73, 0x65, 0x00, 0x13, 0x11, 0x04, 0x15, 0x17, 0x00, 0x83,
+ 0x73, 0x70, 0x6F, 0x73, 0x65, 0x00, 0x44, 0x20, 0x07, 0x06, 0x3D, 0x07, 0x12, 0x48, 0x07, 0x00,
+ 0x46, 0x27, 0x07, 0x08, 0x31, 0x07, 0x00, 0x06, 0x08, 0x05, 0x00, 0x84, 0x61, 0x75, 0x73, 0x65,
+ 0x00, 0x06, 0x04, 0x05, 0x00, 0x86, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x00, 0x04, 0x08, 0x05,
+ 0x00, 0x84, 0x63, 0x61, 0x75, 0x73, 0x65, 0x00, 0x06, 0x08, 0x05, 0x00, 0x83, 0x61, 0x75, 0x73,
+ 0x65, 0x00, 0x44, 0x5F, 0x07, 0x08, 0x0D, 0x08, 0x0F, 0x18, 0x08, 0x19, 0x24, 0x08, 0x00, 0x47,
+ 0x6F, 0x07, 0x0A, 0x94, 0x07, 0x0F, 0xA1, 0x07, 0x13, 0xE4, 0x07, 0x15, 0xEE, 0x07, 0x00, 0x12,
+ 0x10, 0x00, 0x50, 0x79, 0x07, 0x12, 0x88, 0x07, 0x00, 0x12, 0x06, 0x04, 0x00, 0x87, 0x63, 0x6F,
+ 0x6D, 0x6D, 0x6F, 0x64, 0x61, 0x74, 0x65, 0x00, 0x06, 0x06, 0x04, 0x00, 0x84, 0x6D, 0x6F, 0x64,
+ 0x61, 0x74, 0x65, 0x00, 0x12, 0x13, 0x12, 0x15, 0x13, 0x00, 0x84, 0x61, 0x67, 0x61, 0x74, 0x65,
+ 0x00, 0x46, 0xAB, 0x07, 0x13, 0xB8, 0x07, 0x18, 0xC5, 0x07, 0x00, 0x18, 0x0F, 0x04, 0x06, 0x00,
+ 0x85, 0x63, 0x75, 0x6C, 0x61, 0x74, 0x65, 0x00, 0x10, 0x04, 0x08, 0x17, 0x00, 0x86, 0x6D, 0x70,
+ 0x6C, 0x61, 0x74, 0x65, 0x00, 0x46, 0xCC, 0x07, 0x0F, 0xD9, 0x07, 0x00, 0x18, 0x0F, 0x04, 0x06,
+ 0x00, 0x86, 0x63, 0x75, 0x6C, 0x61, 0x74, 0x65, 0x00, 0x04, 0x06, 0x00, 0x84, 0x63, 0x75, 0x6C,
+ 0x61, 0x74, 0x65, 0x00, 0x07, 0x18, 0x00, 0x84, 0x70, 0x64, 0x61, 0x74, 0x65, 0x00, 0x48, 0xF5,
+ 0x07, 0x18, 0x02, 0x08, 0x00, 0x11, 0x04, 0x0A, 0x00, 0x86, 0x65, 0x6E, 0x65, 0x72, 0x61, 0x74,
+ 0x65, 0x00, 0x06, 0x04, 0x00, 0x84, 0x63, 0x75, 0x72, 0x61, 0x74, 0x65, 0x00, 0x0F, 0x0F, 0x04,
+ 0x13, 0x00, 0x83, 0x65, 0x74, 0x74, 0x65, 0x00, 0x04, 0x13, 0x10, 0x08, 0x17, 0x00, 0x83, 0x6C,
+ 0x61, 0x74, 0x65, 0x00, 0x0C, 0x15, 0x13, 0x00, 0x81, 0x61, 0x74, 0x65, 0x00, 0x4A, 0x37, 0x08,
+ 0x0C, 0x43, 0x08, 0x16, 0x4D, 0x08, 0x00, 0x08, 0x0F, 0x0F, 0x12, 0x06, 0x00, 0x82, 0x61, 0x67,
+ 0x75, 0x65, 0x00, 0x14, 0x11, 0x18, 0x00, 0x83, 0x69, 0x71, 0x75, 0x65, 0x00, 0x44, 0x54, 0x08,
+ 0x15, 0x69, 0x08, 0x00, 0x06, 0x00, 0x6C, 0x5D, 0x08, 0x08, 0x62, 0x08, 0x00, 0x82, 0x75, 0x73,
+ 0x65, 0x00, 0x05, 0x00, 0x82, 0x75, 0x73, 0x65, 0x00, 0x08, 0x13, 0x00, 0x84, 0x75, 0x72, 0x73,
+ 0x75, 0x65, 0x00, 0x4C, 0x7A, 0x08, 0x12, 0x93, 0x08, 0x00, 0x48, 0x81, 0x08, 0x0F, 0x8B, 0x08,
+ 0x00, 0x0F, 0x08, 0x05, 0x00, 0x83, 0x69, 0x65, 0x76, 0x65, 0x00, 0x08, 0x05, 0x00, 0x81, 0x65,
+ 0x76, 0x65, 0x00, 0x52, 0x9A, 0x08, 0x19, 0xA1, 0x08, 0x00, 0x15, 0x13, 0x00, 0x82, 0x76, 0x65,
+ 0x00, 0x05, 0x04, 0x00, 0x83, 0x6F, 0x76, 0x65, 0x00, 0x0C, 0x08, 0x00, 0x4B, 0xB6, 0x08, 0x0F,
+ 0xBD, 0x08, 0x15, 0xC5, 0x08, 0x00, 0x06, 0x00, 0x82, 0x69, 0x65, 0x66, 0x00, 0x08, 0x05, 0x00,
+ 0x82, 0x69, 0x65, 0x66, 0x00, 0x05, 0x00, 0x82, 0x69, 0x65, 0x66, 0x00, 0x4C, 0xD3, 0x08, 0x11,
+ 0xDD, 0x08, 0x00, 0x11, 0x12, 0x0A, 0x2C, 0x00, 0x82, 0x69, 0x6E, 0x67, 0x00, 0x4C, 0xE4, 0x08,
+ 0x15, 0x3A, 0x09, 0x00, 0x48, 0xF4, 0x08, 0x0B, 0x0B, 0x09, 0x0F, 0x18, 0x09, 0x15, 0x24, 0x09,
+ 0x1C, 0x2F, 0x09, 0x00, 0x48, 0xFB, 0x08, 0x0B, 0x02, 0x09, 0x00, 0x05, 0x00, 0x83, 0x69, 0x6E,
+ 0x67, 0x00, 0x06, 0x04, 0x06, 0x00, 0x83, 0x69, 0x6E, 0x67, 0x00, 0x17, 0x06, 0x04, 0x10, 0x00,
+ 0x85, 0x74, 0x63, 0x68, 0x69, 0x6E, 0x67, 0x00, 0x08, 0x0C, 0x06, 0x00, 0x85, 0x65, 0x69, 0x6C,
+ 0x69, 0x6E, 0x67, 0x00, 0x18, 0x06, 0x08, 0x15, 0x00, 0x82, 0x72, 0x69, 0x6E, 0x67, 0x00, 0x17,
+ 0x1C, 0x11, 0x04, 0x00, 0x83, 0x68, 0x69, 0x6E, 0x67, 0x00, 0x0C, 0x17, 0x16, 0x00, 0x83, 0x72,
+ 0x69, 0x6E, 0x67, 0x00, 0x46, 0x57, 0x09, 0x08, 0x8E, 0x09, 0x0A, 0x9A, 0x09, 0x0C, 0xA4, 0x09,
+ 0x16, 0xAD, 0x09, 0x17, 0xBF, 0x09, 0x00, 0x4B, 0x64, 0x09, 0x0C, 0x6D, 0x09, 0x0F, 0x77, 0x09,
+ 0x15, 0x7F, 0x09, 0x00, 0x0C, 0x1A, 0x00, 0x83, 0x68, 0x69, 0x63, 0x68, 0x00, 0x17, 0x1A, 0x16,
+ 0x00, 0x83, 0x69, 0x74, 0x63, 0x68, 0x00, 0x0B, 0x1A, 0x00, 0x82, 0x69, 0x63, 0x68, 0x00, 0x04,
+ 0x08, 0x16, 0x04, 0x08, 0x15, 0x00, 0x86, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x00, 0x17, 0x07,
+ 0x11, 0x04, 0x2C, 0x00, 0x82, 0x20, 0x74, 0x68, 0x65, 0x00, 0x11, 0x08, 0x15, 0x17, 0x16, 0x00,
+ 0x80, 0x74, 0x68, 0x00, 0x06, 0x0B, 0x1A, 0x00, 0x82, 0x69, 0x63, 0x68, 0x00, 0x0C, 0x0F, 0x13,
+ 0x10, 0x12, 0x06, 0x04, 0x00, 0x86, 0x63, 0x6F, 0x6D, 0x70, 0x6C, 0x69, 0x73, 0x68, 0x00, 0x4A,
+ 0xC9, 0x09, 0x0C, 0xE1, 0x09, 0x15, 0xEC, 0x09, 0x00, 0x48, 0xD0, 0x09, 0x0C, 0xDA, 0x09, 0x00,
+ 0x15, 0x17, 0x16, 0x00, 0x82, 0x6E, 0x67, 0x74, 0x68, 0x00, 0x08, 0x0B, 0x00, 0x81, 0x68, 0x74,
+ 0x00, 0x1A, 0x07, 0x11, 0x04, 0x05, 0x00, 0x81, 0x64, 0x74, 0x68, 0x00, 0x18, 0x17, 0x2C, 0x00,
+ 0x83, 0x72, 0x75, 0x74, 0x68, 0x00, 0x15, 0x08, 0x0B, 0x17, 0x2C, 0x00, 0x81, 0x69, 0x72, 0x00,
+ 0x11, 0x00, 0x4C, 0x09, 0x0A, 0x18, 0x14, 0x0A, 0x00, 0x17, 0x0B, 0x2C, 0x00, 0x84, 0x74, 0x68,
+ 0x69, 0x6E, 0x6B, 0x00, 0x0C, 0x0B, 0x17, 0x00, 0x82, 0x6E, 0x6B, 0x00, 0x44, 0x32, 0x0A, 0x07,
+ 0x86, 0x0A, 0x08, 0xB1, 0x0A, 0x09, 0x11, 0x0B, 0x0F, 0x1A, 0x0B, 0x17, 0x37, 0x0B, 0x18, 0x40,
+ 0x0B, 0x00, 0x4C, 0x3C, 0x0A, 0x17, 0x47, 0x0A, 0x18, 0x60, 0x0A, 0x00, 0x06, 0x13, 0x1C, 0x17,
+ 0x00, 0x83, 0x69, 0x63, 0x61, 0x6C, 0x00, 0x4C, 0x4E, 0x0A, 0x18, 0x56, 0x0A, 0x00, 0x11, 0x0C,
+ 0x00, 0x81, 0x69, 0x61, 0x6C, 0x00, 0x15, 0x0C, 0x19, 0x00, 0x83, 0x74, 0x75, 0x61, 0x6C, 0x00,
+ 0x51, 0x6A, 0x0A, 0x15, 0x73, 0x0A, 0x17, 0x7C, 0x0A, 0x00, 0x04, 0x2C, 0x00, 0x82, 0x6E, 0x75,
+ 0x61, 0x6C, 0x00, 0x18, 0x17, 0x04, 0x11, 0x00, 0x82, 0x61, 0x6C, 0x00, 0x0C, 0x19, 0x00, 0x83,
+ 0x72, 0x74, 0x75, 0x61, 0x6C, 0x00, 0x18, 0x00, 0x52, 0x8F, 0x0A, 0x1A, 0xA7, 0x0A, 0x00, 0x46,
+ 0x99, 0x0A, 0x0B, 0x9D, 0x0A, 0x1A, 0xA3, 0x0A, 0x00, 0x81, 0x6C, 0x64, 0x00, 0x16, 0x00, 0x81,
+ 0x6C, 0x64, 0x00, 0x81, 0x6C, 0x64, 0x00, 0x12, 0x2C, 0x00, 0x84, 0x77, 0x6F, 0x75, 0x6C, 0x64,
+ 0x00, 0x4A, 0xC1, 0x0A, 0x0F, 0xC9, 0x0A, 0x13, 0xF7, 0x0A, 0x17, 0xFF, 0x0A, 0x18, 0x07, 0x0B,
+ 0x00, 0x11, 0x0C, 0x16, 0x00, 0x81, 0x6C, 0x65, 0x00, 0x44, 0xD0, 0x0A, 0x0F, 0xEA, 0x0A, 0x00,
+ 0x15, 0x00, 0x44, 0xD9, 0x0A, 0x15, 0xE0, 0x0A, 0x00, 0x13, 0x00, 0x81, 0x6C, 0x65, 0x6C, 0x00,
+ 0x04, 0x13, 0x00, 0x84, 0x61, 0x6C, 0x6C, 0x65, 0x6C, 0x00, 0x04, 0x15, 0x15, 0x04, 0x13, 0x00,
+ 0x85, 0x61, 0x6C, 0x6C, 0x65, 0x6C, 0x00, 0x12, 0x08, 0x13, 0x00, 0x81, 0x6C, 0x65, 0x00, 0x17,
+ 0x0C, 0x0F, 0x00, 0x81, 0x6C, 0x65, 0x00, 0x07, 0x08, 0x0B, 0x06, 0x16, 0x00, 0x81, 0x6C, 0x65,
+ 0x00, 0x08, 0x16, 0x1C, 0x10, 0x00, 0x81, 0x6C, 0x66, 0x00, 0x0C, 0x09, 0x00, 0x4F, 0x24, 0x0B,
+ 0x18, 0x2E, 0x0B, 0x00, 0x0F, 0x18, 0x09, 0x00, 0x84, 0x66, 0x69, 0x6C, 0x6C, 0x00, 0x09, 0x00,
+ 0x83, 0x6C, 0x66, 0x69, 0x6C, 0x6C, 0x00, 0x18, 0x16, 0x08, 0x15, 0x00, 0x81, 0x6C, 0x74, 0x00,
+ 0x09, 0x17, 0x04, 0x08, 0x15, 0x0A, 0x00, 0x85, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6C, 0x00, 0x44,
+ 0x59, 0x0B, 0x0F, 0x6A, 0x0B, 0x15, 0x75, 0x0B, 0x00, 0x15, 0x0A, 0x12, 0x17, 0x06, 0x08, 0x13,
+ 0x16, 0x00, 0x84, 0x72, 0x6F, 0x67, 0x72, 0x61, 0x6D, 0x00, 0x08, 0x05, 0x12, 0x15, 0x13, 0x00,
+ 0x82, 0x6C, 0x65, 0x6D, 0x00, 0x12, 0x09, 0x12, 0x06, 0x00, 0x83, 0x6E, 0x66, 0x6F, 0x72, 0x6D,
+ 0x00, 0x44, 0xA6, 0x0B, 0x07, 0xCE, 0x0B, 0x08, 0xD7, 0x0B, 0x0A, 0x3A, 0x0C, 0x0C, 0x8D, 0x0C,
+ 0x0E, 0x99, 0x0C, 0x12, 0xC0, 0x0C, 0x13, 0x6C, 0x0D, 0x15, 0x78, 0x0D, 0x16, 0x83, 0x0D, 0x18,
+ 0x8D, 0x0D, 0x1A, 0xA4, 0x0D, 0x00, 0x0C, 0x00, 0x4A, 0xAF, 0x0B, 0x17, 0xB7, 0x0B, 0x00, 0x04,
+ 0x2C, 0x00, 0x82, 0x61, 0x69, 0x6E, 0x00, 0x51, 0xBE, 0x0B, 0x15, 0xC6, 0x0B, 0x00, 0x12, 0x06,
+ 0x00, 0x82, 0x61, 0x69, 0x6E, 0x00, 0x08, 0x06, 0x00, 0x82, 0x61, 0x69, 0x6E, 0x00, 0x18, 0x12,
+ 0x09, 0x2C, 0x00, 0x81, 0x6E, 0x64, 0x00, 0x47, 0xE7, 0x0B, 0x08, 0xF1, 0x0B, 0x0A, 0x1B, 0x0C,
+ 0x13, 0x27, 0x0C, 0x16, 0x30, 0x0C, 0x00, 0x0F, 0x0C, 0x0B, 0x06, 0x00, 0x81, 0x72, 0x65, 0x6E,
+ 0x00, 0x57, 0xF8, 0x0B, 0x1A, 0x11, 0x0C, 0x00, 0x48, 0xFF, 0x0B, 0x1A, 0x07, 0x0C, 0x00, 0x05,
+ 0x00, 0x82, 0x77, 0x65, 0x65, 0x6E, 0x00, 0x08, 0x05, 0x00, 0x84, 0x74, 0x77, 0x65, 0x65, 0x6E,
+ 0x00, 0x08, 0x05, 0x00, 0x83, 0x74, 0x77, 0x65, 0x65, 0x6E, 0x00, 0x12, 0x07, 0x1C, 0x0B, 0x00,
+ 0x83, 0x72, 0x6F, 0x67, 0x65, 0x6E, 0x00, 0x04, 0x0B, 0x2C, 0x00, 0x81, 0x70, 0x65, 0x6E, 0x00,
+ 0x12, 0x12, 0x0B, 0x06, 0x00, 0x83, 0x73, 0x65, 0x6E, 0x00, 0x48, 0x41, 0x0C, 0x0C, 0x4C, 0x0C,
+ 0x00, 0x0C, 0x15, 0x12, 0x09, 0x00, 0x83, 0x65, 0x69, 0x67, 0x6E, 0x00, 0x4B, 0x5F, 0x0C, 0x0F,
+ 0x65, 0x0C, 0x11, 0x6D, 0x0C, 0x12, 0x76, 0x0C, 0x15, 0x7D, 0x0C, 0x16, 0x84, 0x0C, 0x00, 0x17,
+ 0x00, 0x81, 0x6E, 0x67, 0x00, 0x0F, 0x04, 0x00, 0x83, 0x69, 0x67, 0x6E, 0x00, 0x15, 0x04, 0x08,
+ 0x0F, 0x00, 0x81, 0x6E, 0x67, 0x00, 0x0A, 0x2C, 0x00, 0x81, 0x6E, 0x67, 0x00, 0x17, 0x16, 0x00,
+ 0x81, 0x6E, 0x67, 0x00, 0x04, 0x2C, 0x00, 0x82, 0x73, 0x69, 0x67, 0x6E, 0x00, 0x17, 0x04, 0x15,
+ 0x08, 0x06, 0x00, 0x83, 0x74, 0x61, 0x69, 0x6E, 0x00, 0x4B, 0xA0, 0x0C, 0x0C, 0xA9, 0x0C, 0x00,
+ 0x0C, 0x17, 0x00, 0x83, 0x68, 0x69, 0x6E, 0x6B, 0x00, 0x4B, 0xB0, 0x0C, 0x17, 0xB6, 0x0C, 0x00,
+ 0x17, 0x00, 0x81, 0x6E, 0x6B, 0x00, 0x0B, 0x2C, 0x00, 0x84, 0x74, 0x68, 0x69, 0x6E, 0x6B, 0x00,
+ 0x4C, 0xCA, 0x0C, 0x16, 0x56, 0x0D, 0x17, 0x60, 0x0D, 0x00, 0x46, 0xD4, 0x0C, 0x16, 0xE1, 0x0C,
+ 0x17, 0xFB, 0x0C, 0x00, 0x0C, 0x16, 0x08, 0x07, 0x00, 0x85, 0x63, 0x69, 0x73, 0x69, 0x6F, 0x6E,
+ 0x00, 0x44, 0xE8, 0x0C, 0x16, 0xF1, 0x0C, 0x00, 0x0C, 0x0F, 0x00, 0x83, 0x69, 0x73, 0x6F, 0x6E,
+ 0x00, 0x04, 0x06, 0x06, 0x12, 0x00, 0x83, 0x69, 0x6F, 0x6E, 0x00, 0x44, 0x0E, 0x0D, 0x07, 0x1B,
+ 0x0D, 0x0C, 0x25, 0x0D, 0x0F, 0x34, 0x0D, 0x11, 0x40, 0x0D, 0x16, 0x4C, 0x0D, 0x00, 0x15, 0x08,
+ 0x05, 0x04, 0x00, 0x84, 0x72, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x00, 0x07, 0x04, 0x00, 0x83, 0x69,
+ 0x74, 0x69, 0x6F, 0x6E, 0x00, 0x17, 0x0C, 0x13, 0x08, 0x15, 0x00, 0x86, 0x65, 0x74, 0x69, 0x74,
+ 0x69, 0x6F, 0x6E, 0x00, 0x04, 0x08, 0x15, 0x00, 0x85, 0x6C, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x00,
+ 0x06, 0x18, 0x09, 0x00, 0x85, 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x00, 0x12, 0x13, 0x00, 0x83,
+ 0x69, 0x74, 0x69, 0x6F, 0x6E, 0x00, 0x0C, 0x19, 0x0C, 0x07, 0x00, 0x81, 0x69, 0x6F, 0x6E, 0x00,
+ 0x0C, 0x06, 0x04, 0x15, 0x09, 0x00, 0x83, 0x74, 0x69, 0x6F, 0x6E, 0x00, 0x13, 0x0B, 0x04, 0x00,
+ 0x84, 0x68, 0x61, 0x70, 0x70, 0x65, 0x6E, 0x00, 0x17, 0x18, 0x08, 0x15, 0x00, 0x83, 0x74, 0x75,
+ 0x72, 0x6E, 0x00, 0x0A, 0x0C, 0x0B, 0x17, 0x00, 0x82, 0x6E, 0x67, 0x73, 0x00, 0x55, 0x94, 0x0D,
+ 0x17, 0x9D, 0x0D, 0x00, 0x17, 0x08, 0x15, 0x00, 0x82, 0x75, 0x72, 0x6E, 0x00, 0x08, 0x15, 0x00,
+ 0x80, 0x72, 0x6E, 0x00, 0x12, 0x0E, 0x11, 0x18, 0x00, 0x82, 0x6E, 0x6F, 0x77, 0x6E, 0x00, 0x47,
+ 0xB9, 0x0D, 0x11, 0xC4, 0x0D, 0x1A, 0xCD, 0x0D, 0x00, 0x08, 0x18, 0x16, 0x13, 0x00, 0x83, 0x65,
+ 0x75, 0x64, 0x6F, 0x00, 0x1A, 0x0E, 0x2C, 0x00, 0x82, 0x6E, 0x6F, 0x77, 0x00, 0x4F, 0xD4, 0x0D,
+ 0x11, 0xDC, 0x0D, 0x00, 0x0F, 0x12, 0x09, 0x00, 0x81, 0x6F, 0x77, 0x00, 0x0E, 0x2C, 0x00, 0x81,
+ 0x6F, 0x77, 0x00, 0x56, 0xEA, 0x0D, 0x18, 0xF4, 0x0D, 0x00, 0x04, 0x0B, 0x15, 0x08, 0x13, 0x00,
+ 0x81, 0x70, 0x73, 0x00, 0x12, 0x12, 0x0F, 0x00, 0x81, 0x6B, 0x75, 0x70, 0x00, 0x44, 0x1C, 0x0E,
+ 0x08, 0x5D, 0x0E, 0x0B, 0x67, 0x0F, 0x0F, 0x71, 0x0F, 0x12, 0x7F, 0x0F, 0x13, 0x90, 0x0F, 0x16,
+ 0x9B, 0x0F, 0x17, 0xA4, 0x0F, 0x18, 0xB0, 0x0F, 0x1C, 0xB9, 0x0F, 0x00, 0x4C, 0x26, 0x0E, 0x0F,
+ 0x30, 0x0E, 0x18, 0x52, 0x0E, 0x00, 0x0F, 0x0C, 0x10, 0x0C, 0x16, 0x00, 0x82, 0x61, 0x72, 0x00,
+ 0x4C, 0x37, 0x0E, 0x18, 0x42, 0x0E, 0x00, 0x10, 0x10, 0x0C, 0x16, 0x00, 0x84, 0x69, 0x6C, 0x61,
+ 0x72, 0x00, 0x06, 0x0C, 0x17, 0x04, 0x13, 0x00, 0x86, 0x72, 0x74, 0x69, 0x63, 0x75, 0x6C, 0x61,
+ 0x72, 0x00, 0x0F, 0x0A, 0x08, 0x15, 0x00, 0x83, 0x75, 0x6C, 0x61, 0x72, 0x00, 0x44, 0x7C, 0x0E,
+ 0x07, 0x84, 0x0E, 0x0B, 0x91, 0x0E, 0x0C, 0xCB, 0x0E, 0x0F, 0xE5, 0x0E, 0x10, 0xEF, 0x0E, 0x11,
+ 0xF9, 0x0E, 0x12, 0x25, 0x0F, 0x17, 0x2D, 0x0F, 0x19, 0x4C, 0x0F, 0x00, 0x0F, 0x06, 0x00, 0x82,
+ 0x65, 0x61, 0x72, 0x00, 0x11, 0x04, 0x0F, 0x04, 0x06, 0x00, 0x84, 0x65, 0x6E, 0x64, 0x61, 0x72,
+ 0x00, 0x4A, 0x98, 0x0E, 0x17, 0xA3, 0x0E, 0x00, 0x0C, 0x08, 0x0B, 0x00, 0x85, 0x69, 0x67, 0x68,
+ 0x65, 0x72, 0x00, 0x48, 0xAD, 0x0E, 0x0F, 0xB9, 0x0E, 0x18, 0xC2, 0x0E, 0x00, 0x0B, 0x0A, 0x12,
+ 0x17, 0x00, 0x85, 0x65, 0x74, 0x68, 0x65, 0x72, 0x00, 0x12, 0x2C, 0x00, 0x84, 0x74, 0x68, 0x65,
+ 0x72, 0x00, 0x09, 0x00, 0x83, 0x72, 0x74, 0x68, 0x65, 0x72, 0x00, 0x4B, 0xD2, 0x0E, 0x0F, 0xDA,
+ 0x0E, 0x00, 0x17, 0x2C, 0x00, 0x82, 0x65, 0x69, 0x72, 0x00, 0x13, 0x10, 0x12, 0x06, 0x00, 0x83,
+ 0x69, 0x6C, 0x65, 0x72, 0x00, 0x17, 0x0C, 0x09, 0x00, 0x83, 0x6C, 0x74, 0x65, 0x72, 0x00, 0x10,
+ 0x04, 0x15, 0x0A, 0x2C, 0x00, 0x81, 0x61, 0x72, 0x00, 0x4C, 0x00, 0x0F, 0x17, 0x0C, 0x0F, 0x00,
+ 0x0A, 0x0A, 0x08, 0x05, 0x00, 0x84, 0x69, 0x6E, 0x6E, 0x65, 0x72, 0x00, 0x4C, 0x13, 0x0F, 0x16,
+ 0x1C, 0x0F, 0x00, 0x12, 0x13, 0x00, 0x83, 0x6E, 0x74, 0x65, 0x72, 0x00, 0x0C, 0x0F, 0x00, 0x82,
+ 0x65, 0x6E, 0x65, 0x72, 0x00, 0x09, 0x08, 0x05, 0x00, 0x81, 0x72, 0x65, 0x00, 0x4B, 0x34, 0x0F,
+ 0x18, 0x3E, 0x0F, 0x00, 0x12, 0x11, 0x04, 0x00, 0x83, 0x74, 0x68, 0x65, 0x72, 0x00, 0x13, 0x12,
+ 0x10, 0x06, 0x00, 0x86, 0x6F, 0x6D, 0x70, 0x75, 0x74, 0x65, 0x72, 0x00, 0x48, 0x53, 0x0F, 0x1A,
+ 0x5E, 0x0F, 0x00, 0x08, 0x15, 0x08, 0x0B, 0x1A, 0x00, 0x83, 0x76, 0x65, 0x72, 0x00, 0x12, 0x0B,
+ 0x00, 0x82, 0x65, 0x76, 0x65, 0x72, 0x00, 0x08, 0x17, 0x12, 0x2C, 0x00, 0x82, 0x68, 0x65, 0x72,
+ 0x00, 0x04, 0x18, 0x06, 0x0C, 0x17, 0x15, 0x04, 0x13, 0x00, 0x82, 0x6C, 0x61, 0x72, 0x00, 0x17,
+ 0x04, 0x15, 0x08, 0x17, 0x11, 0x0C, 0x00, 0x87, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6F, 0x72, 0x00,
+ 0x17, 0x0F, 0x0F, 0x18, 0x11, 0x00, 0x82, 0x70, 0x74, 0x72, 0x00, 0x04, 0x08, 0x1C, 0x2C, 0x00,
+ 0x81, 0x72, 0x73, 0x00, 0x12, 0x04, 0x15, 0x08, 0x13, 0x12, 0x00, 0x82, 0x74, 0x6F, 0x72, 0x00,
+ 0x06, 0x12, 0x2C, 0x00, 0x81, 0x63, 0x75, 0x72, 0x00, 0x08, 0x19, 0x08, 0x2C, 0x00, 0x81, 0x72,
+ 0x79, 0x00, 0x44, 0xDB, 0x0F, 0x08, 0x03, 0x10, 0x0A, 0x93, 0x10, 0x13, 0x9E, 0x10, 0x15, 0xAA,
+ 0x10, 0x16, 0xB5, 0x10, 0x17, 0x4D, 0x11, 0x18, 0x55, 0x11, 0x00, 0x4B, 0xE5, 0x0F, 0x13, 0xF0,
+ 0x0F, 0x1C, 0xFA, 0x0F, 0x00, 0x13, 0x15, 0x08, 0x13, 0x00, 0x83, 0x68, 0x61, 0x70, 0x73, 0x00,
+ 0x0B, 0x15, 0x08, 0x13, 0x00, 0x82, 0x61, 0x70, 0x73, 0x00, 0x1A, 0x0F, 0x04, 0x00, 0x82, 0x61,
+ 0x79, 0x73, 0x00, 0x44, 0x13, 0x10, 0x06, 0x2A, 0x10, 0x0C, 0x35, 0x10, 0x0F, 0x81, 0x10, 0x16,
+ 0x88, 0x10, 0x00, 0x47, 0x1A, 0x10, 0x0E, 0x22, 0x10, 0x00, 0x0C, 0x2C, 0x00, 0x82, 0x65, 0x61,
+ 0x73, 0x00, 0x17, 0x00, 0x83, 0x61, 0x6B, 0x65, 0x73, 0x00, 0x08, 0x07, 0x11, 0x0C, 0x00, 0x83,
+ 0x69, 0x63, 0x65, 0x73, 0x00, 0x46, 0x3F, 0x10, 0x15, 0x66, 0x10, 0x17, 0x75, 0x10, 0x00, 0x48,
+ 0x46, 0x10, 0x0C, 0x50, 0x10, 0x00, 0x07, 0x11, 0x0C, 0x00, 0x84, 0x69, 0x63, 0x65, 0x73, 0x00,
+ 0x47, 0x57, 0x10, 0x17, 0x5E, 0x10, 0x00, 0x11, 0x0C, 0x00, 0x82, 0x65, 0x73, 0x00, 0x15, 0x08,
+ 0x19, 0x00, 0x82, 0x65, 0x73, 0x00, 0x12, 0x16, 0x08, 0x06, 0x06, 0x04, 0x00, 0x84, 0x73, 0x6F,
+ 0x72, 0x69, 0x65, 0x73, 0x00, 0x0F, 0x0C, 0x05, 0x04, 0x00, 0x83, 0x69, 0x74, 0x69, 0x65, 0x73,
+ 0x00, 0x04, 0x09, 0x00, 0x81, 0x73, 0x65, 0x00, 0x12, 0x0B, 0x06, 0x2C, 0x00, 0x82, 0x6F, 0x73,
+ 0x65, 0x73, 0x00, 0x0C, 0x11, 0x0B, 0x17, 0x00, 0x83, 0x69, 0x6E, 0x67, 0x73, 0x00, 0x04, 0x08,
+ 0x0B, 0x15, 0x08, 0x13, 0x00, 0x83, 0x61, 0x70, 0x73, 0x00, 0x08, 0x04, 0x1C, 0x2C, 0x00, 0x83,
+ 0x65, 0x61, 0x72, 0x73, 0x00, 0x44, 0xBF, 0x10, 0x08, 0xCB, 0x10, 0x12, 0x42, 0x11, 0x00, 0x15,
+ 0x04, 0x05, 0x10, 0x08, 0x00, 0x82, 0x72, 0x61, 0x73, 0x73, 0x00, 0x46, 0xD8, 0x10, 0x11, 0xF0,
+ 0x10, 0x15, 0x0D, 0x11, 0x16, 0x2A, 0x11, 0x00, 0x46, 0xDF, 0x10, 0x18, 0xE8, 0x10, 0x00, 0x12,
+ 0x15, 0x13, 0x00, 0x83, 0x65, 0x73, 0x73, 0x00, 0x16, 0x00, 0x82, 0x63, 0x65, 0x73, 0x73, 0x00,
+ 0x4C, 0xF7, 0x10, 0x16, 0x03, 0x11, 0x00, 0x16, 0x16, 0x18, 0x05, 0x00, 0x85, 0x69, 0x6E, 0x65,
+ 0x73, 0x73, 0x00, 0x18, 0x05, 0x00, 0x83, 0x69, 0x6E, 0x65, 0x73, 0x73, 0x00, 0x13, 0x00, 0x55,
+ 0x16, 0x11, 0x18, 0x21, 0x11, 0x00, 0x18, 0x16, 0x00, 0x85, 0x70, 0x70, 0x72, 0x65, 0x73, 0x73,
+ 0x00, 0x16, 0x00, 0x83, 0x70, 0x72, 0x65, 0x73, 0x73, 0x00, 0x46, 0x31, 0x11, 0x12, 0x3A, 0x11,
+ 0x00, 0x06, 0x18, 0x16, 0x00, 0x83, 0x65, 0x73, 0x73, 0x00, 0x13, 0x00, 0x82, 0x73, 0x65, 0x73,
+ 0x73, 0x00, 0x15, 0x06, 0x06, 0x04, 0x00, 0x84, 0x72, 0x6F, 0x73, 0x73, 0x00, 0x15, 0x0C, 0x09,
+ 0x00, 0x81, 0x73, 0x74, 0x00, 0x52, 0x5C, 0x11, 0x16, 0x6A, 0x11, 0x00, 0x0F, 0x12, 0x10, 0x12,
+ 0x11, 0x04, 0x00, 0x84, 0x61, 0x6C, 0x6F, 0x75, 0x73, 0x00, 0x11, 0x08, 0x06, 0x11, 0x12, 0x06,
+ 0x00, 0x85, 0x73, 0x65, 0x6E, 0x73, 0x75, 0x73, 0x00, 0x44, 0x9E, 0x11, 0x08, 0xBC, 0x11, 0x0A,
+ 0xD9, 0x11, 0x0B, 0xE3, 0x11, 0x0C, 0x19, 0x12, 0x0F, 0x24, 0x12, 0x10, 0x2F, 0x12, 0x11, 0x3B,
+ 0x12, 0x12, 0x97, 0x13, 0x13, 0xBD, 0x13, 0x16, 0xD9, 0x13, 0x18, 0x6B, 0x14, 0x00, 0x55, 0xA5,
+ 0x11, 0x1A, 0xB0, 0x11, 0x00, 0x08, 0x13, 0x08, 0x16, 0x00, 0x83, 0x61, 0x72, 0x61, 0x74, 0x00,
+ 0x0B, 0x08, 0x10, 0x12, 0x16, 0x00, 0x83, 0x77, 0x68, 0x61, 0x74, 0x00, 0x44, 0xC3, 0x11, 0x11,
+ 0xCC, 0x11, 0x00, 0x15, 0x0A, 0x2C, 0x00, 0x82, 0x65, 0x61, 0x74, 0x00, 0x10, 0x11, 0x15, 0x08,
+ 0x19, 0x12, 0x0A, 0x00, 0x82, 0x65, 0x6E, 0x74, 0x00, 0x0B, 0x18, 0x04, 0x06, 0x00, 0x82, 0x67,
+ 0x68, 0x74, 0x00, 0x47, 0xED, 0x11, 0x0A, 0xF4, 0x11, 0x0C, 0x0E, 0x12, 0x00, 0x0C, 0x1A, 0x00,
+ 0x81, 0x74, 0x68, 0x00, 0x51, 0xFB, 0x11, 0x18, 0x02, 0x12, 0x00, 0x08, 0x0F, 0x00, 0x81, 0x74,
+ 0x68, 0x00, 0x12, 0x15, 0x0B, 0x17, 0x00, 0x85, 0x6F, 0x75, 0x67, 0x68, 0x74, 0x00, 0x0A, 0x11,
+ 0x12, 0x17, 0x00, 0x83, 0x69, 0x67, 0x68, 0x74, 0x00, 0x17, 0x18, 0x12, 0x05, 0x04, 0x00, 0x81,
+ 0x20, 0x69, 0x74, 0x00, 0x16, 0x18, 0x08, 0x15, 0x00, 0x83, 0x73, 0x75, 0x6C, 0x74, 0x00, 0x04,
+ 0x17, 0x15, 0x12, 0x13, 0x10, 0x0C, 0x00, 0x81, 0x6E, 0x74, 0x00, 0x44, 0x48, 0x12, 0x08, 0x80,
+ 0x12, 0x15, 0x84, 0x13, 0x16, 0x8F, 0x13, 0x00, 0x4C, 0x55, 0x12, 0x11, 0x60, 0x12, 0x15, 0x6B,
+ 0x12, 0x17, 0x75, 0x12, 0x00, 0x13, 0x0C, 0x06, 0x08, 0x15, 0x00, 0x82, 0x65, 0x6E, 0x74, 0x00,
+ 0x0C, 0x10, 0x12, 0x15, 0x13, 0x00, 0x82, 0x65, 0x6E, 0x74, 0x00, 0x04, 0x13, 0x13, 0x04, 0x00,
+ 0x82, 0x65, 0x6E, 0x74, 0x00, 0x08, 0x13, 0x10, 0x12, 0x06, 0x00, 0x82, 0x65, 0x6E, 0x74, 0x00,
+ 0x4C, 0x90, 0x12, 0x10, 0xB1, 0x12, 0x15, 0x15, 0x13, 0x19, 0x6F, 0x13, 0x1D, 0x79, 0x13, 0x00,
+ 0x46, 0x97, 0x12, 0x13, 0xA4, 0x12, 0x00, 0x08, 0x09, 0x09, 0x08, 0x00, 0x85, 0x69, 0x63, 0x69,
+ 0x65, 0x6E, 0x74, 0x00, 0x08, 0x06, 0x08, 0x15, 0x00, 0x85, 0x69, 0x70, 0x69, 0x65, 0x6E, 0x74,
+ 0x00, 0x48, 0xBE, 0x12, 0x11, 0xCA, 0x12, 0x15, 0xEB, 0x12, 0x17, 0x0A, 0x13, 0x00, 0x19, 0x12,
+ 0x0A, 0x00, 0x83, 0x72, 0x6E, 0x6D, 0x65, 0x6E, 0x74, 0x00, 0x48, 0xD1, 0x12, 0x15, 0xDD, 0x12,
+ 0x00, 0x19, 0x12, 0x0A, 0x00, 0x84, 0x72, 0x6E, 0x6D, 0x65, 0x6E, 0x74, 0x00, 0x12, 0x19, 0x12,
+ 0x0A, 0x00, 0x86, 0x65, 0x72, 0x6E, 0x6D, 0x65, 0x6E, 0x74, 0x00, 0x48, 0xF2, 0x12, 0x12, 0xFD,
+ 0x12, 0x00, 0x19, 0x12, 0x0A, 0x00, 0x83, 0x6E, 0x6D, 0x65, 0x6E, 0x74, 0x00, 0x19, 0x12, 0x0A,
+ 0x00, 0x85, 0x65, 0x72, 0x6E, 0x6D, 0x65, 0x6E, 0x74, 0x00, 0x04, 0x17, 0x16, 0x00, 0x83, 0x65,
+ 0x6D, 0x65, 0x6E, 0x74, 0x00, 0x44, 0x22, 0x13, 0x08, 0x2D, 0x13, 0x09, 0x39, 0x13, 0x15, 0x44,
+ 0x13, 0x00, 0x13, 0x04, 0x00, 0x84, 0x70, 0x61, 0x72, 0x65, 0x6E, 0x74, 0x00, 0x09, 0x0C, 0x07,
+ 0x00, 0x84, 0x66, 0x65, 0x72, 0x65, 0x6E, 0x74, 0x00, 0x09, 0x0C, 0x07, 0x00, 0x83, 0x65, 0x72,
+ 0x65, 0x6E, 0x74, 0x00, 0x44, 0x4B, 0x13, 0x08, 0x63, 0x13, 0x00, 0x13, 0x00, 0x44, 0x54, 0x13,
+ 0x13, 0x5C, 0x13, 0x00, 0x85, 0x70, 0x61, 0x72, 0x65, 0x6E, 0x74, 0x00, 0x04, 0x00, 0x83, 0x65,
+ 0x6E, 0x74, 0x00, 0x09, 0x0C, 0x07, 0x00, 0x85, 0x66, 0x65, 0x72, 0x65, 0x6E, 0x74, 0x00, 0x08,
+ 0x0F, 0x08, 0x15, 0x00, 0x82, 0x61, 0x6E, 0x74, 0x00, 0x0C, 0x11, 0x0A, 0x12, 0x06, 0x00, 0x82,
+ 0x61, 0x6E, 0x74, 0x00, 0x08, 0x09, 0x09, 0x0C, 0x07, 0x00, 0x81, 0x65, 0x6E, 0x74, 0x00, 0x12,
+ 0x06, 0x00, 0x82, 0x6E, 0x73, 0x74, 0x00, 0x51, 0xA1, 0x13, 0x15, 0xAB, 0x13, 0x16, 0xB4, 0x13,
+ 0x00, 0x07, 0x0C, 0x07, 0x00, 0x82, 0x20, 0x6E, 0x6F, 0x74, 0x00, 0x13, 0x08, 0x15, 0x00, 0x82,
+ 0x6F, 0x72, 0x74, 0x00, 0x10, 0x0F, 0x04, 0x00, 0x82, 0x6F, 0x73, 0x74, 0x00, 0x48, 0xC4, 0x13,
+ 0x1C, 0xCF, 0x13, 0x00, 0x0C, 0x06, 0x08, 0x15, 0x00, 0x83, 0x65, 0x69, 0x70, 0x74, 0x00, 0x06,
+ 0x11, 0x08, 0x00, 0x82, 0x72, 0x79, 0x70, 0x74, 0x00, 0x48, 0xEC, 0x13, 0x0A, 0x15, 0x14, 0x0C,
+ 0x1E, 0x14, 0x10, 0x3B, 0x14, 0x11, 0x45, 0x14, 0x18, 0x60, 0x14, 0x00, 0x4A, 0xF3, 0x13, 0x15,
+ 0x0A, 0x14, 0x00, 0x4C, 0xFA, 0x13, 0x18, 0x02, 0x14, 0x00, 0x0B, 0x00, 0x82, 0x68, 0x65, 0x73,
+ 0x74, 0x00, 0x16, 0x00, 0x82, 0x67, 0x65, 0x73, 0x74, 0x00, 0x17, 0x11, 0x0C, 0x00, 0x83, 0x65,
+ 0x72, 0x65, 0x73, 0x74, 0x00, 0x15, 0x04, 0x0F, 0x00, 0x81, 0x65, 0x73, 0x74, 0x00, 0x49, 0x25,
+ 0x14, 0x11, 0x31, 0x14, 0x00, 0x08, 0x11, 0x04, 0x10, 0x00, 0x84, 0x69, 0x66, 0x65, 0x73, 0x74,
+ 0x00, 0x04, 0x0A, 0x04, 0x00, 0x83, 0x69, 0x6E, 0x73, 0x74, 0x00, 0x12, 0x0F, 0x04, 0x00, 0x83,
+ 0x6D, 0x6F, 0x73, 0x74, 0x00, 0x44, 0x4C, 0x14, 0x11, 0x57, 0x14, 0x00, 0x0C, 0x0A, 0x04, 0x00,
+ 0x84, 0x61, 0x69, 0x6E, 0x73, 0x74, 0x00, 0x0C, 0x04, 0x0A, 0x04, 0x00, 0x82, 0x73, 0x74, 0x00,
+ 0x0D, 0x04, 0x2C, 0x00, 0x83, 0x64, 0x6A, 0x75, 0x73, 0x74, 0x00, 0x46, 0x78, 0x14, 0x12, 0x90,
+ 0x14, 0x13, 0xA8, 0x14, 0x17, 0xBF, 0x14, 0x00, 0x48, 0x7F, 0x14, 0x15, 0x89, 0x14, 0x00, 0x06,
+ 0x1B, 0x08, 0x00, 0x84, 0x65, 0x63, 0x75, 0x74, 0x00, 0x0C, 0x06, 0x00, 0x80, 0x69, 0x74, 0x00,
+ 0x44, 0x97, 0x14, 0x05, 0xA0, 0x14, 0x00, 0x05, 0x00, 0x84, 0x61, 0x62, 0x6F, 0x75, 0x74, 0x00,
+ 0x05, 0x04, 0x00, 0x83, 0x6F, 0x75, 0x74, 0x00, 0x57, 0xAF, 0x14, 0x18, 0xB7, 0x14, 0x00, 0x11,
+ 0x0C, 0x00, 0x83, 0x70, 0x75, 0x74, 0x00, 0x12, 0x00, 0x82, 0x74, 0x70, 0x75, 0x74, 0x00, 0x13,
+ 0x18, 0x12, 0x00, 0x83, 0x74, 0x70, 0x75, 0x74, 0x00, 0x17, 0x12, 0x05, 0x04, 0x00, 0x81, 0x75,
+ 0x74, 0x00, 0x48, 0xD9, 0x14, 0x0C, 0xFD, 0x14, 0x00, 0x44, 0xE0, 0x14, 0x0C, 0xE7, 0x14, 0x00,
+ 0x0B, 0x2C, 0x00, 0x81, 0x76, 0x65, 0x00, 0x46, 0xEE, 0x14, 0x08, 0xF6, 0x14, 0x00, 0x08, 0x15,
+ 0x00, 0x82, 0x65, 0x69, 0x76, 0x00, 0x06, 0x08, 0x15, 0x00, 0x81, 0x76, 0x00, 0x08, 0x0B, 0x06,
+ 0x04, 0x2C, 0x00, 0x82, 0x69, 0x65, 0x76, 0x00, 0x4C, 0x0F, 0x15, 0x11, 0x19, 0x15, 0x00, 0x08,
+ 0x19, 0x08, 0x15, 0x00, 0x82, 0x69, 0x65, 0x77, 0x00, 0x12, 0x0E, 0x2C, 0x00, 0x82, 0x6E, 0x6F,
+ 0x77, 0x00, 0x46, 0x3B, 0x15, 0x08, 0x76, 0x15, 0x0B, 0x80, 0x15, 0x0F, 0x92, 0x15, 0x11, 0x57,
+ 0x16, 0x15, 0x72, 0x16, 0x16, 0x0C, 0x17, 0x17, 0x27, 0x17, 0x00, 0x44, 0x48, 0x15, 0x08, 0x54,
+ 0x15, 0x0C, 0x5F, 0x15, 0x13, 0x6A, 0x15, 0x00, 0x15, 0x06, 0x12, 0x13, 0x1C, 0x0B, 0x00, 0x82,
+ 0x69, 0x73, 0x79, 0x00, 0x18, 0x14, 0x08, 0x15, 0x09, 0x00, 0x81, 0x6E, 0x63, 0x79, 0x00, 0x15,
+ 0x06, 0x12, 0x13, 0x1C, 0x0B, 0x00, 0x81, 0x73, 0x79, 0x00, 0x18, 0x15, 0x0E, 0x11, 0x04, 0x05,
+ 0x00, 0x81, 0x74, 0x63, 0x79, 0x00, 0x17, 0x09, 0x04, 0x16, 0x00, 0x82, 0x65, 0x74, 0x79, 0x00,
+ 0x06, 0x15, 0x04, 0x15, 0x0C, 0x08, 0x0B, 0x00, 0x87, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68,
+ 0x79, 0x00, 0x44, 0xA5, 0x15, 0x0B, 0xE8, 0x15, 0x0E, 0xF2, 0x15, 0x0F, 0xFA, 0x15, 0x12, 0x42,
+ 0x16, 0x15, 0x4C, 0x16, 0x00, 0x45, 0xB8, 0x15, 0x08, 0xC1, 0x15, 0x0F, 0xC7, 0x15, 0x11, 0xD0,
+ 0x15, 0x15, 0xD7, 0x15, 0x18, 0xE0, 0x15, 0x00, 0x12, 0x15, 0x13, 0x00, 0x81, 0x62, 0x6C, 0x79,
+ 0x00, 0x15, 0x00, 0x80, 0x6C, 0x79, 0x00, 0x08, 0x15, 0x00, 0x83, 0x61, 0x6C, 0x6C, 0x79, 0x00,
+ 0x0C, 0x09, 0x00, 0x80, 0x6C, 0x79, 0x00, 0x08, 0x11, 0x08, 0x0A, 0x00, 0x80, 0x6C, 0x79, 0x00,
+ 0x17, 0x06, 0x04, 0x00, 0x80, 0x6C, 0x79, 0x00, 0x0A, 0x0C, 0x0F, 0x16, 0x00, 0x81, 0x74, 0x6C,
+ 0x79, 0x00, 0x0C, 0x0F, 0x00, 0x81, 0x65, 0x6C, 0x79, 0x00, 0x44, 0x04, 0x16, 0x05, 0x2F, 0x16,
+ 0x08, 0x38, 0x16, 0x00, 0x56, 0x0B, 0x16, 0x17, 0x23, 0x16, 0x00, 0x18, 0x00, 0x6C, 0x14, 0x16,
+ 0x16, 0x1B, 0x16, 0x00, 0x83, 0x75, 0x61, 0x6C, 0x6C, 0x79, 0x00, 0x18, 0x00, 0x84, 0x61, 0x6C,
+ 0x6C, 0x79, 0x00, 0x18, 0x06, 0x04, 0x00, 0x85, 0x74, 0x75, 0x61, 0x6C, 0x6C, 0x79, 0x00, 0x04,
+ 0x05, 0x12, 0x15, 0x13, 0x00, 0x81, 0x79, 0x00, 0x04, 0x15, 0x00, 0x84, 0x65, 0x61, 0x6C, 0x6C,
+ 0x79, 0x00, 0x10, 0x12, 0x11, 0x04, 0x00, 0x82, 0x61, 0x6C, 0x79, 0x00, 0x04, 0x10, 0x0C, 0x15,
+ 0x13, 0x00, 0x81, 0x69, 0x6C, 0x79, 0x00, 0x48, 0x5E, 0x16, 0x13, 0x67, 0x16, 0x00, 0x12, 0x10,
+ 0x2C, 0x00, 0x82, 0x6E, 0x65, 0x79, 0x00, 0x04, 0x10, 0x12, 0x06, 0x00, 0x83, 0x70, 0x61, 0x6E,
+ 0x79, 0x00, 0x44, 0x7F, 0x16, 0x08, 0xE7, 0x16, 0x12, 0xF0, 0x16, 0x17, 0xFD, 0x16, 0x00, 0x45,
+ 0x8F, 0x16, 0x0C, 0x98, 0x16, 0x0F, 0xA5, 0x16, 0x10, 0xC1, 0x16, 0x16, 0xCA, 0x16, 0x00, 0x0C,
+ 0x0F, 0x00, 0x82, 0x72, 0x61, 0x72, 0x79, 0x00, 0x0F, 0x0F, 0x0C, 0x1B, 0x18, 0x04, 0x00, 0x84,
+ 0x69, 0x61, 0x72, 0x79, 0x00, 0x4C, 0xAC, 0x16, 0x0F, 0xB6, 0x16, 0x00, 0x1B, 0x18, 0x04, 0x00,
+ 0x82, 0x69, 0x61, 0x72, 0x79, 0x00, 0x0C, 0x1B, 0x18, 0x04, 0x00, 0x83, 0x69, 0x61, 0x72, 0x79,
+ 0x00, 0x18, 0x16, 0x00, 0x82, 0x6D, 0x61, 0x72, 0x79, 0x00, 0x08, 0x06, 0x00, 0x46, 0xD4, 0x16,
+ 0x08, 0xDF, 0x16, 0x00, 0x08, 0x11, 0x00, 0x85, 0x65, 0x73, 0x73, 0x61, 0x72, 0x79, 0x00, 0x11,
+ 0x00, 0x82, 0x73, 0x61, 0x72, 0x79, 0x00, 0x13, 0x12, 0x15, 0x13, 0x00, 0x80, 0x74, 0x79, 0x00,
+ 0x0A, 0x04, 0x17, 0x04, 0x06, 0x00, 0x84, 0x65, 0x67, 0x6F, 0x72, 0x79, 0x00, 0x11, 0x18, 0x06,
+ 0x12, 0x2C, 0x00, 0x86, 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x72, 0x79, 0x00, 0x04, 0x00, 0x55, 0x15,
+ 0x17, 0x1A, 0x20, 0x17, 0x00, 0x06, 0x12, 0x13, 0x1C, 0x0B, 0x00, 0x82, 0x69, 0x73, 0x79, 0x00,
+ 0x0F, 0x04, 0x00, 0x81, 0x79, 0x73, 0x00, 0x49, 0x31, 0x17, 0x0F, 0x39, 0x17, 0x15, 0x42, 0x17,
+ 0x00, 0x04, 0x16, 0x00, 0x81, 0x65, 0x74, 0x79, 0x00, 0x0C, 0x05, 0x04, 0x00, 0x81, 0x69, 0x74,
+ 0x79, 0x00, 0x13, 0x08, 0x12, 0x15, 0x13, 0x00, 0x84, 0x70, 0x65, 0x72, 0x74, 0x79, 0x00
+};
+
diff --git a/users/mkillewald/autocorrection_dict_extra.txt b/users/mkillewald/autocorrection_dict_extra.txt
new file mode 100644
index 000000000000..b5f293d96cb1
--- /dev/null
+++ b/users/mkillewald/autocorrection_dict_extra.txt
@@ -0,0 +1,473 @@
+# Copyright 2021 Google LLC
+#
+# 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
+#
+# https://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.
+#
+#
+# This is a larger example typo dictionary containing 400 entries. It builds to
+# a table of about 6000 bytes, so you'll need a keyboard with a generous
+# amount of free firmware space to use the full dictionary. Alternatively, pick
+# out a subset of entries to a separate file, then build a table from that.
+#
+# Dictionary syntax:
+# Each line of this file defines one typo correction entry with the syntax
+# "typo -> correction". Typos and corrections are case insensitive, and any
+# whitespace before or after the typo and correction is ignored. The typo must be
+# only the letters a-z, or the special character : representing a word break.
+#
+# For documentation about how to use this dictionary, see
+# https://getreuer.info/posts/keyboards/autocorrection
+#
+# Further resources:
+# * Wikipedia has a large list of common typos at
+# https://en.wikipedia.org/wiki/Wikipedia:Lists_of_common_misspellings/For_machines
+#
+# * EmacsWiki has another list of typos at
+# https://www.emacswiki.org/emacs/autocorrection_abbrev_defs
+#
+# * You can find data on English word frequencies at
+# https://www.wordfrequency.info/samples.asp
+
+
+## 10 most common words.
+# The words "there", "about", "their", "would", "people", "which", "could",
+# "think", "other", and "because" are among the most common words in English
+# that are 5 letters or longer. (We don't include entries for words shorter than
+# that to avoid false triggering.)
+:htere -> there
+abbout -> about
+abotu -> about
+baout -> about
+:theri -> their
+:thier -> their
+:owudl -> would
+woudl -> would
+peaple -> people
+peolpe -> people
+peopel -> people
+poeple -> people
+poeople -> people
+:hwihc -> which
+whcih -> which
+whihc -> which
+whlch -> which
+wihch -> which
+coudl -> could
+:htikn -> think
+:htink -> think
+thikn -> think
+thiunk -> think
+tihkn -> think
+:olther -> other
+:otehr -> other
+baceause -> because
+beacuse -> because
+becasue -> because
+beccause -> because
+becouse -> because
+becuase -> because
+
+## Common words, 11-20.
+theese -> these
+:goign -> going
+:gonig -> going
+:yaers -> years
+:yeasr -> years
+:thsoe -> those
+shoudl -> should
+raelly -> really
+realy -> really
+relaly -> really
+bedore -> before
+befoer -> before
+littel -> little
+beeing -> being
+:hwile -> while
+
+## Common words, 21-30.
+aroud -> around
+arround -> around
+arund -> around
+thign -> thing
+thigsn -> things
+thnigs -> things
+anohter -> another
+beteen -> between
+beween -> between
+bewteen -> between
+:eveyr -> every
+:graet -> great
+:agian -> again
+:sicne -> since
+alwasy -> always
+alwyas -> always
+throught -> thought
+
+
+## Words especially susceptible to skipping or transposing a letter.
+# These entries are for words that are easy enough to spell, but not necessarily
+# easy to press the keys in the right order.
+# Catch misspellings of "achieves", "achieving", etc.
+:acheiv -> achiev
+almsot -> almost
+alomst -> almost
+chnage -> change
+chekc -> check
+childen -> children
+claer -> clear
+comapny -> company
+contian -> contain
+elasped -> elapsed
+feild -> field
+fitler -> filter
+firts -> first
+follwo -> follow
+:foudn -> found
+frequecy -> frequency
+firend -> friend
+freind -> friend
+heigth -> height
+iamge -> image
+inital -> initial
+intput -> input
+laguage -> language
+lenght -> length
+levle -> level
+libary -> library
+:moeny -> money
+mysefl -> myself
+ouptut -> output
+ouput -> output
+probaly -> probably
+probelm -> problem
+recrod -> record
+reponse -> response
+reprot -> report
+singel -> single
+stregth -> strength
+strengh -> strength
+tkaes -> takes
+therfore -> therefore
+todya -> today
+toghether -> together
+unkown -> unknown
+unqiue -> unique
+widht -> width
+
+
+## Words with tricky spelling.
+# If you are a good speller, you could drop this section.
+aberation -> aberration
+accross -> across
+adviced -> advised
+aledge -> allege
+alledge -> allege
+amature -> amateur
+anomolous -> anomalous
+anomoly -> anomaly
+aparent -> apparent
+aparrent -> apparent
+apparant -> apparent
+apparrent -> apparent
+asthetic -> aesthetic
+auxilary -> auxiliary
+auxillary -> auxiliary
+auxilliary -> auxiliary
+bankrupcy -> bankruptcy
+busness -> business
+bussiness -> business
+calander -> calendar
+commitee -> committee
+comittee -> committee
+competance -> competence
+competant -> competent
+concensus -> consensus
+cognizent -> cognizant
+copywrite: -> copyright
+choosen -> chosen
+collegue -> colleague
+excercise -> exercise
+:grammer -> grammar
+:guage -> gauge
+govement -> government
+govenment -> government
+goverment -> government
+governmnet -> government
+govorment -> government
+govornment -> government
+guaratee -> guarantee
+garantee -> guarantee
+gaurantee -> guarantee
+heirarchy -> hierarchy
+hygeine -> hygiene
+hypocracy -> hypocrisy
+hypocrasy -> hypocrisy
+hypocricy -> hypocrisy
+hypocrit: -> hypocrite
+looses: -> loses
+maintence -> maintenance
+morgage -> mortgage
+neccesary -> necessary
+necesary -> necessary
+pallete -> palette
+paralel -> parallel
+parralel -> parallel
+parrallel -> parallel
+priviledge -> privilege
+probablly -> probably
+prominant -> prominent
+propogate -> propagate
+proove -> prove
+psuedo -> pseudo
+reciept -> receipt
+# Catch misspellings of "receives", "receiving", etc.
+receiev -> receiv
+reciev -> receiv
+recepient -> recipient
+recipiant -> recipient
+relevent -> relevant
+repitition -> repetition
+safty -> safety
+saftey -> safety
+# Catch misspellings of "separate", "separating", etc.
+seperat -> separat
+spectogram -> spectrogram
+symetric -> symmetric
+tolerence -> tolerance
+
+
+## Words particularly for coding.
+# Entries for common code keywords ("const") and terminology ("lookup").
+cacheing -> caching
+complier -> compiler
+doulbe -> double
+dyanmic -> dynamic
+# As in "execute", "executable", "executing", ...
+excecut -> execut
+failse -> false
+fales -> false
+fasle -> false
+flase -> false
+indeces -> indices
+indecies -> indices
+indicies -> indices
+interator -> iterator
+looup -> lookup
+namesapce -> namespace
+namespcae -> namespace
+nulltpr -> nullptr
+operaotr -> operator
+overide -> override
+ovveride -> override
+poitner -> pointer
+:rference -> reference
+referece -> reference
+singed -> signed
+stirng -> string
+strign -> string
+swithc -> switch
+swtich -> switch
+teamplate -> template
+tempalte -> template
+:ture -> true
+retrun -> return
+retun -> return
+reutrn -> return
+cosnt -> const
+virutal -> virtual
+vitual -> virtual
+yeild -> yield
+
+
+## Catch skipped spaces between common words.
+:alot: -> a lot
+:andteh -> and the
+:andthe -> and the
+:asthe -> as the
+:atthe -> at the
+abouta -> about a
+aboutit -> about it
+aboutthe -> about the
+:tothe -> to the
+didnot -> did not
+fromthe -> from the
+
+
+## Various additional entries.
+:agred -> agreed
+:ajust -> adjust
+:anual -> annual
+:asign -> assign
+:aslo: -> also
+:casue -> cause
+:choses -> chooses
+:gaurd -> guard
+:haev -> have
+:hapen -> happen
+:idaes -> ideas
+:jsut: -> just
+:jstu: -> just
+:knwo -> know
+:konw -> know
+:kwno -> know
+:ocuntry -> country
+:ocur -> occur
+:socre -> score
+:szie -> size
+:the:the: -> the
+:turth -> truth
+:uesd: -> used
+:usally -> usually
+abilties -> abilities
+abilty -> ability
+abvove -> above
+accesories -> accessories
+accomodate -> accommodate
+acommodate -> accommodate
+acomplish -> accomplish
+actualy -> actually
+acurate -> accurate
+acutally -> actually
+addtion -> addition
+againnst -> against
+aganist -> against
+aggreed -> agreed
+agianst -> against
+ahppn -> happen
+allign -> align
+anytying -> anything
+aquire -> acquire
+availabe -> available
+availaible -> available
+availalbe -> available
+availble -> available
+availiable -> available
+avalable -> available
+avaliable -> available
+avilable -> available
+bandwith -> bandwidth
+begginer -> beginner
+beleif -> belief
+beleive -> believe
+belive -> believe
+breif -> brief
+burried -> buried
+caluclate -> calculate
+caluculate -> calculate
+calulate -> calculate
+catagory -> category
+cauhgt -> caught
+ceratin -> certain
+certian -> certain
+cheif -> chief
+cieling -> ceiling
+circut -> circuit
+clasic -> classic
+cmoputer -> computer
+coform -> conform
+comming: -> coming
+considerd -> considered
+dervied -> derived
+desicion -> decision
+diferent -> different
+diferrent -> different
+differnt -> different
+diffrent -> different
+divison -> division
+effecient -> efficient
+eligable -> eligible
+elpased -> elapsed
+embarass -> embarrass
+embeded -> embedded
+encypt -> encrypt
+finaly -> finally
+foriegn -> foreign
+foward -> forward
+fraciton -> fraction
+fucntion -> function
+fufill -> fulfill
+fullfill -> fulfill
+futher -> further
+ganerate -> generate
+generaly -> generally
+greatful -> grateful
+heigher -> higher
+higest -> highest
+howver -> however
+hydogen -> hydrogen
+importamt -> important
+inclued -> include
+insted -> instead
+intrest -> interest
+invliad -> invalid
+largst -> largest
+learnign -> learning
+liasion -> liaison
+likly -> likely
+lisense -> license
+listner -> listener
+macthing -> matching
+manefist -> manifest
+mesage -> message
+naturual -> natural
+occassion -> occasion
+occured -> occurred
+particualr -> particular
+paticular -> particular
+peice -> piece
+perhasp -> perhaps
+perheaps -> perhaps
+perhpas -> perhaps
+perphas -> perhaps
+persue -> pursue
+posess -> possess
+postion -> position
+preiod -> period
+primarly -> primarily
+privte -> private
+proccess -> process
+proeprty -> property
+propery -> property
+realtion -> relation
+reasearch -> research
+recuring -> recurring
+refered -> referred
+regluar -> regular
+releated -> related
+resutl -> result
+reuslt -> result
+reveiw -> review
+satisifed -> satisfied
+scheduel -> schedule
+sequnce -> sequence
+similiar -> similar
+simmilar -> similar
+slighly -> slightly
+somehwat -> somewhat
+statment -> statement
+sucess -> success
+succsess -> success
+sugest -> suggest
+sumary -> summary
+supress -> suppress
+surpress -> suppress
+thresold -> threshold
+tongiht -> tonight
+tranpose -> transpose
+typcial -> typical
+udpate -> update
+ususally -> usually
+verticies -> vertices
+whereever -> wherever
+wherre -> where
+wierd -> weird
+
diff --git a/keyboards/keychron/q1/iso/keymaps/mkillewald_iso/config.h b/users/mkillewald/config.h
similarity index 77%
rename from keyboards/keychron/q1/iso/keymaps/mkillewald_iso/config.h
rename to users/mkillewald/config.h
index bc9fe405c35c..c28e5164a555 100644
--- a/keyboards/keychron/q1/iso/keymaps/mkillewald_iso/config.h
+++ b/users/mkillewald/config.h
@@ -1,4 +1,4 @@
-/* Copyright 2021 @ Mike Killewald
+/* Copyright 2023 @ Mike Killewald (https://github.com/mkillewald)
*
* 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
@@ -16,8 +16,4 @@
#pragma once
-#ifdef RGB_MATRIX_ENABLE
-# define RGB_DISABLE_WHEN_USB_SUSPENDED
-# define CAPS_LOCK_INDICATOR_COLOR RGB_RED
-# define FN_LAYER_COLOR RGB_ORANGE
-#endif
\ No newline at end of file
+#define EECONFIG_USER_DATA_SIZE 20 // size of eeprom data, do not change.
\ No newline at end of file
diff --git a/users/mkillewald/eeprom_user_config.c b/users/mkillewald/eeprom_user_config.c
new file mode 100644
index 000000000000..010df6c8d2b0
--- /dev/null
+++ b/users/mkillewald/eeprom_user_config.c
@@ -0,0 +1,172 @@
+/* Copyright 2023 @ Mike Killewald (https://github.com/mkillewald)
+ *
+ * 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 .
+ */
+
+#include QMK_KEYBOARD_H
+#include "eeprom_user_config.h"
+
+typedef struct {
+ uint8_t caps_lock_light_tab;
+ uint8_t caps_lock_light_alphas;
+ uint8_t fn_layer_transparent_keys_off;
+ uint8_t fn_layer_color_enable;
+ uint8_t enable_mac_base;
+ uint8_t enable_win_base;
+ uint8_t mode_win_base;
+ uint8_t spd_win_base;
+ HSV hsv_win_base;
+ HSV hsv_mac_fn1;
+ HSV hsv_win_fn1;
+ HSV hsv_fn2;
+} user_config_t;
+
+_Static_assert(sizeof(user_config_t) == EECONFIG_USER_DATA_SIZE, "User config structure larger than configured data size.");
+
+user_config_t user_config;
+
+void eeconfig_init_user(void) {
+ user_config.caps_lock_light_tab = DEFAULT_CAPS_LOCK_LIGHT_TAB;
+ user_config.caps_lock_light_alphas = DEFAULT_CAPS_LOCK_LIGHT_ALPHA;
+ user_config.fn_layer_transparent_keys_off = DEFAULT_FN_LAYER_TRANSPARENT_OFF;
+ user_config.fn_layer_color_enable = DEFAULT_FN_LAYER_SHOW_COLOR;
+ user_config.enable_mac_base = DEFAULT_RGB_ENABLE_MAC_BASE;
+ user_config.enable_win_base = DEFAULT_RGB_ENABLE_WIN_BASE;
+ user_config.mode_win_base = RGB_MATRIX_DEFAULT_MODE;
+ user_config.spd_win_base = RGB_MATRIX_DEFAULT_SPD;
+ user_config.hsv_win_base.h = DEFAULT_HUE_WIN_BASE;
+ user_config.hsv_win_base.s = RGB_MATRIX_DEFAULT_SAT;
+ user_config.hsv_win_base.v = RGB_MATRIX_DEFAULT_VAL;
+ user_config_write_eeprom();
+}
+
+void user_config_read_eeprom(void) {
+ eeconfig_read_user_datablock(&user_config);
+}
+
+void user_config_write_eeprom(void) {
+ eeconfig_update_user_datablock(&user_config);
+}
+
+// getters
+
+uint8_t user_config_get_caps_lock_light_tab(void) {
+ return user_config.caps_lock_light_tab;
+}
+
+uint8_t user_config_get_caps_lock_light_alphas(void) {
+ return user_config.caps_lock_light_alphas;
+}
+
+uint8_t user_config_get_fn_layer_transparent_keys_off(void) {
+ return user_config.fn_layer_transparent_keys_off;
+}
+
+uint8_t user_config_get_fn_layer_color_enable(void) {
+ return user_config.fn_layer_color_enable;
+}
+
+uint8_t user_config_get_enable_mac_base(void) {
+ return user_config.enable_mac_base;
+}
+
+uint8_t user_config_get_enable_win_base(void) {
+ return user_config.enable_win_base;
+}
+
+uint8_t user_config_get_mode_win_base(void) {
+ return user_config.mode_win_base;
+}
+
+uint8_t user_config_get_spd_win_base(void) {
+ return user_config.spd_win_base;
+}
+
+HSV user_config_get_hsv_win_base(void) {
+ return user_config.hsv_win_base;
+}
+
+HSV user_config_get_hsv_mac_fn1(void) {
+ return user_config.hsv_mac_fn1;
+}
+
+HSV user_config_get_hsv_win_fn1(void) {
+ return user_config.hsv_win_fn1;
+}
+
+HSV user_config_get_hsv_fn2(void) {
+ return user_config.hsv_fn2;
+}
+
+// setters
+
+void user_config_toggle_caps_lock_light_tab(void) {
+ user_config.caps_lock_light_tab ^= 1; // bitwise xor to toggle status bit
+ user_config_write_eeprom();
+}
+
+void user_config_toggle_caps_lock_light_alphas(void) {
+ user_config.caps_lock_light_alphas ^= 1;
+ user_config_write_eeprom();
+}
+
+void user_config_toggle_fn_layer_transparent_keys_off(void) {
+ user_config.fn_layer_transparent_keys_off ^= 1;
+ user_config_write_eeprom();
+}
+
+void user_config_toggle_fn_layer_color_enable(void) {
+ user_config.fn_layer_color_enable ^= 1;
+ user_config_write_eeprom();
+}
+
+void user_config_toggle_enable_mac_base(void) {
+ user_config.enable_mac_base ^= 1;
+ user_config_write_eeprom();
+}
+
+void user_config_toggle_enable_win_base(void) {
+ user_config.enable_win_base ^= 1;
+ user_config_write_eeprom();
+}
+
+void user_config_set_mode_win_base(uint8_t mode) {
+ user_config.mode_win_base = mode;
+ user_config_write_eeprom();
+}
+
+void user_config_set_spd_win_base(uint8_t spd) {
+ user_config.spd_win_base = spd;
+ user_config_write_eeprom();
+}
+
+void user_config_set_hsv_win_base(HSV hsv) {
+ user_config.hsv_win_base = hsv;
+ user_config_write_eeprom();
+}
+
+void user_config_set_hsv_mac_fn1(HSV hsv) {
+ user_config.hsv_mac_fn1 = hsv;
+ user_config_write_eeprom();
+}
+
+void user_config_set_hsv_win_fn1(HSV hsv) {
+ user_config.hsv_win_fn1 = hsv;
+ user_config_write_eeprom();
+}
+
+void user_config_set_hsv_fn2(HSV hsv) {
+ user_config.hsv_fn2 = hsv;
+ user_config_write_eeprom();
+}
\ No newline at end of file
diff --git a/users/mkillewald/eeprom_user_config.h b/users/mkillewald/eeprom_user_config.h
new file mode 100644
index 000000000000..34d7560e48c7
--- /dev/null
+++ b/users/mkillewald/eeprom_user_config.h
@@ -0,0 +1,52 @@
+/* Copyright 2023 @ Mike Killewald (https://github.com/mkillewald)
+ *
+ * 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 .
+ */
+
+#pragma once
+
+void user_config_read_eeprom(void);
+void user_config_write_eeprom(void);
+
+// getters
+
+uint8_t user_config_get_caps_lock_light_tab(void);
+uint8_t user_config_get_caps_lock_light_alphas(void);
+uint8_t user_config_get_fn_layer_transparent_keys_off(void);
+uint8_t user_config_get_fn_layer_color_enable(void);
+uint8_t user_config_get_enable_mac_base(void);
+uint8_t user_config_get_enable_win_base(void);
+uint8_t user_config_get_mode_win_base(void);
+uint8_t user_config_get_spd_win_base(void);
+HSV user_config_get_hsv_win_base(void);
+HSV user_config_get_hsv_mac_fn1(void);
+HSV user_config_get_hsv_win_fn1(void);
+HSV user_config_get_hsv_fn2(void);
+
+// setters
+
+void user_config_toggle_caps_lock_light_tab(void);
+void user_config_toggle_caps_lock_light_alphas(void);
+void user_config_toggle_fn_layer_transparent_keys_off(void);
+void user_config_toggle_fn_layer_color_enable(void);
+void user_config_toggle_enable_mac_base(void);
+void user_config_toggle_enable_win_base(void);
+void user_config_set_mode_win_base(uint8_t mode);
+void user_config_set_spd_win_base(uint8_t spd);
+void user_config_set_hsv_win_base(HSV hsv);
+void user_config_set_hsv_mac_fn1(HSV hsv);
+void user_config_set_hsv_win_fn1(HSV hsv);
+void user_config_set_hsv_fn2(HSV hsv);
+
+
diff --git a/users/mkillewald/mkillewald.c b/users/mkillewald/mkillewald.c
new file mode 100644
index 000000000000..2ab7773d56fa
--- /dev/null
+++ b/users/mkillewald/mkillewald.c
@@ -0,0 +1,262 @@
+/* Copyright 2023 @ Mike Killewald (https://github.com/mkillewald)
+ *
+ * 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 .
+ */
+
+#include "mkillewald.h"
+#include "eeprom_user_config.h"
+#include "rgb_matrix_user.h"
+#include "layers.h"
+
+static uint8_t win_mode;
+
+__attribute__ ((weak))
+bool dip_switch_update_keymap(uint8_t index, bool active) {
+ return true;
+}
+
+bool dip_switch_update_user(uint8_t index, bool active) {
+ win_mode = (index == 0 && active ? true : false);
+ return dip_switch_update_keymap(index, active);
+}
+
+uint8_t is_win_mode(void) { return win_mode; }
+
+__attribute__ ((weak))
+layer_state_t default_layer_state_set_keymap(layer_state_t state) {
+ return state;
+}
+
+layer_state_t default_layer_state_set_user(layer_state_t state) {
+ switch (get_highest_layer(state)) {
+ case MAC_BASE:
+ set_mac_base_rgb();
+ break;
+ case WIN_BASE:
+ set_win_base_rgb();
+ break;
+ default:
+ break;
+ }
+ return default_layer_state_set_keymap(state);
+}
+
+void set_mac_base_rgb(void) {
+ // load mac base settings
+ rgb_matrix_enable_noeeprom();
+ rgb_matrix_reload_from_eeprom();
+
+ // check disable
+ if (!user_config_get_enable_mac_base()) {
+ rgb_matrix_disable_noeeprom();
+ }
+}
+
+void set_win_base_rgb(void) {
+ // load win base settings
+ rgb_matrix_enable_noeeprom();
+ rgb_matrix_mode_noeeprom(user_config_get_mode_win_base());
+ rgb_matrix_set_speed_noeeprom(user_config_get_spd_win_base());
+ rgb_matrix_sethsv_noeeprom(user_config_get_hsv_win_base().h,
+ user_config_get_hsv_win_base().s,
+ user_config_get_hsv_win_base().v);
+
+ // check disable
+ if (!user_config_get_enable_win_base()) {
+ rgb_matrix_disable_noeeprom();
+ }
+}
+
+__attribute__ ((weak))
+void matrix_init_keymap(void) {}
+
+void matrix_init_user(void) {
+#if defined(RGB_MATRIX_ENABLE)
+ rgb_matrix_init_user();
+#endif
+
+ matrix_init_keymap();
+}
+
+__attribute__ ((weak))
+void keyboard_post_init_keymap(void) {}
+
+void keyboard_post_init_user(void) {
+ user_config_read_eeprom();
+
+#if defined(AUTOCORRECT_OFF_AT_STARTUP)
+ // toggle autocorrect off at startup
+ if (autocorrect_is_enabled()) { autocorrect_toggle(); }
+#endif
+
+ keyboard_post_init_keymap();
+}
+
+#if defined(RGB_MATRIX_ENABLE)
+void rgb_matrix_update_pwm_buffers(void);
+#endif
+
+__attribute__((weak)) void shutdown_keymap(void) {}
+
+void shutdown_user(void) {
+#if defined(RGB_MATRIX_ENABLE)
+ // to disable RGB when entering DFU mode from QK_BOOT keycode
+ rgb_matrix_set_color_all(0x00, 0x00, 0x00);
+ rgb_matrix_update_pwm_buffers();
+#endif
+
+ shutdown_keymap();
+}
+
+bool process_record_mkillewald(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case RGB_TOG:
+ if (record->event.pressed) {
+ rgb_matrix_toggle_noeeprom();
+ if (win_mode) {
+ user_config_toggle_enable_win_base();
+ } else {
+ user_config_toggle_enable_mac_base();
+ }
+ }
+ return false; // Skip all further processing of this key
+ case RGB_MOD:
+ if (win_mode) {
+ if (record->event.pressed) {
+ rgb_matrix_step_noeeprom();
+ user_config_set_mode_win_base(rgb_matrix_get_mode());
+ }
+ return false; // Skip all further processing of this key
+ } else {
+ return true; // Allow further processing of this key
+ }
+ case RGB_RMOD:
+ if (win_mode) {
+ if (record->event.pressed) {
+ rgb_matrix_step_reverse_noeeprom();
+ user_config_set_mode_win_base(rgb_matrix_get_mode());
+ }
+ return false; // Skip all further processing of this key
+ } else {
+ return true; // Allow further processing of this key
+ }
+ case RGB_HUI:
+ if (win_mode) {
+ if (record->event.pressed) {
+ rgb_matrix_increase_hue_noeeprom();
+ user_config_set_hsv_win_base(rgb_matrix_get_hsv());
+ }
+ return false; // Skip all further processing of this key
+ } else {
+ return true; // Allow further processing of this key
+ }
+ case RGB_HUD:
+ if (win_mode) {
+ if (record->event.pressed) {
+ rgb_matrix_decrease_hue_noeeprom();
+ user_config_set_hsv_win_base(rgb_matrix_get_hsv());
+ }
+ return false; // Skip all further processing of this key
+ } else {
+ return true; // Allow further processing of this key
+ }
+ case RGB_SAI:
+ if (win_mode) {
+ if (record->event.pressed) {
+ rgb_matrix_increase_sat_noeeprom();
+ user_config_set_hsv_win_base(rgb_matrix_get_hsv());
+ }
+ return false; // Skip all further processing of this key
+ } else {
+ return true; // Allow further processing of this key
+ }
+ case RGB_SAD:
+ if (win_mode) {
+ if (record->event.pressed) {
+ rgb_matrix_decrease_sat_noeeprom();
+ user_config_set_hsv_win_base(rgb_matrix_get_hsv());
+ }
+ return false; // Skip all further processing of this key
+ } else {
+ return true; // Allow further processing of this key
+ }
+ case RGB_VAI:
+ if (win_mode) {
+ if (record->event.pressed) {
+ rgb_matrix_increase_val_noeeprom();
+ user_config_set_hsv_win_base(rgb_matrix_get_hsv());
+ }
+ return false; // Skip all further processing of this key
+ } else {
+ return true; // Allow further processing of this key
+ }
+ case RGB_VAD:
+ if (win_mode) {
+ if (record->event.pressed) {
+ rgb_matrix_decrease_val_noeeprom();
+ user_config_set_hsv_win_base(rgb_matrix_get_hsv());
+ }
+ return false; // Skip all further processing of this key
+ } else {
+ return true; // Allow further processing of this key
+ }
+ case RGB_SPI:
+ if (win_mode) {
+ if (record->event.pressed) {
+ rgb_matrix_increase_speed_noeeprom();
+ user_config_set_spd_win_base(rgb_matrix_get_speed());
+ }
+ return false; // Skip all further processing of this key
+ } else {
+ return true; // Allow further processing of this key
+ }
+ case RGB_SPD:
+ if (win_mode) {
+ if (record->event.pressed) {
+ rgb_matrix_decrease_speed_noeeprom();
+ user_config_set_spd_win_base(rgb_matrix_get_speed());
+ }
+ return false; // Skip all further processing of this key
+ } else {
+ return true; // Allow further processing of this key
+ }
+ case KC_LIGHT_TAB_TOGGLE:
+ if (record->event.pressed) {
+ user_config_toggle_caps_lock_light_tab();
+ }
+ return false; // Skip all further processing of this key
+ case KC_LIGHT_ALPHAS_TOGGLE:
+ if (record->event.pressed) {
+ user_config_toggle_caps_lock_light_alphas();
+ }
+ return false; // Skip all further processing of this key
+ case KC_FN_LAYER_TRANSPARENT_KEYS_TOGGLE:
+ if (record->event.pressed) {
+ user_config_toggle_fn_layer_transparent_keys_off();
+ }
+ return false; // Skip all further processing of this key
+ case KC_FN_LAYER_COLOR_TOGGLE:
+ if (record->event.pressed) {
+ user_config_toggle_fn_layer_color_enable();
+ }
+ return false; // Skip all further processing of this key
+ case KC_LOCK_BLANK_MAC:
+ if (record->event.pressed) {
+ send_string(SS_LCTL(SS_LGUI("q")) SS_DELAY(225) SS_TAP(X_ESC));
+ }
+ return false; // Skip all further processing of this key
+ default:
+ return true; // Process all other keycodes normally
+ }
+}
\ No newline at end of file
diff --git a/keyboards/keychron/q1/ansi/keymaps/mkillewald/rgb_matrix_user.h b/users/mkillewald/mkillewald.h
similarity index 51%
rename from keyboards/keychron/q1/ansi/keymaps/mkillewald/rgb_matrix_user.h
rename to users/mkillewald/mkillewald.h
index 1fb79c0b2a14..c1b955a23952 100644
--- a/keyboards/keychron/q1/ansi/keymaps/mkillewald/rgb_matrix_user.h
+++ b/users/mkillewald/mkillewald.h
@@ -1,4 +1,4 @@
-/* Copyright 2021 @ Mike Killewald
+/* Copyright 2023 @ Mike Killewald (https://github.com/mkillewald)
*
* 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
@@ -16,11 +16,23 @@
#pragma once
-void rgb_matrix_init_user(void);
+#include "quantum.h"
-void rgb_matrix_set_color_by_keycode(uint8_t led_min, uint8_t led_max, uint8_t layer, bool (*is_keycode)(uint16_t), uint8_t red, uint8_t green, uint8_t blue);
+enum my_keycodes {
+ KC_LIGHT_TAB_TOGGLE = QK_USER_0,
+ KC_LIGHT_ALPHAS_TOGGLE,
+ KC_FN_LAYER_TRANSPARENT_KEYS_TOGGLE,
+ KC_FN_LAYER_COLOR_TOGGLE,
+ KC_LOCK_BLANK_MAC
+};
-bool is_caps_lock_indicator(uint16_t keycode);
-bool is_transparent(uint16_t keycode);
-bool is_not_transparent(uint16_t keycode);
+#define KC_LTTOG KC_LIGHT_TAB_TOGGLE
+#define KC_LATOG KC_LIGHT_ALPHAS_TOGGLE
+#define KC_TKTOG KC_FN_LAYER_TRANSPARENT_KEYS_TOGGLE
+#define KC_FCTOG KC_FN_LAYER_COLOR_TOGGLE
+#define KC_LBMAC KC_LOCK_BLANK_MAC
+uint8_t is_win_mode(void);
+void set_mac_base_rgb(void);
+void set_win_base_rgb(void);
+bool process_record_mkillewald(uint16_t keycode, keyrecord_t *record);
\ No newline at end of file
diff --git a/users/mkillewald/myfork_keychron_ft.c b/users/mkillewald/myfork_keychron_ft.c
new file mode 100644
index 000000000000..e6d75c77537a
--- /dev/null
+++ b/users/mkillewald/myfork_keychron_ft.c
@@ -0,0 +1,258 @@
+/* Copyright 2023 @ Mike Killewald (https://github.com/mkillewald)
+ * forked from keychron_ft_common.c (https://www.keychron.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 .
+ */
+
+#include "myfork_keychron_ft.h"
+#include "mkillewald.h"
+#include "layers.h"
+
+// clang-format off
+enum {
+ FACTORY_TEST_CMD_BACKLIGHT = 0x01,
+ FACTORY_TEST_CMD_JUMP_TO_BL,
+ FACTORY_TEST_CMD_EEPROM_CLEAR
+};
+// clang-format on
+
+deferred_token combo_exec_token;
+uint16_t key_press_status = 0;
+uint8_t factory_reset_count = 0;
+extern matrix_row_t matrix[MATRIX_ROWS];
+
+#if defined(RGB_MATRIX_ENABLE) && defined(SPLIT_KEYBOARD)
+uint8_t led_state = 0;
+uint8_t light_test_state = 0;
+HSV hsv;
+#endif
+
+static uint32_t LED_flash_300ms(uint32_t trigger_time, void *cb_arg) {
+ if (factory_reset_count++ > 6) {
+ factory_reset_count = 0;
+#if defined(RGB_MATRIX_ENABLE)
+ if (is_win_mode()) {
+ set_win_base_rgb();
+ } else {
+ set_mac_base_rgb();
+ }
+# if defined(SPLIT_KEYBOARD)
+ rgb_matrix_mode_noeeprom(led_state);
+ rgb_matrix_sethsv_noeeprom(hsv.h, hsv.s, hsv.v);
+# endif
+#endif
+ return 0; // no repeat
+ }
+ return 300; // repeat 300ms
+}
+
+static void factory_reset(void) {
+ defer_exec(300, LED_flash_300ms, NULL);
+ factory_reset_count++;
+ layer_state_t default_layer = default_layer_state;
+ eeconfig_init();
+ default_layer_set(default_layer);
+ led_test_mode = LED_TEST_MODE_OFF;
+#if defined(LED_MATRIX_ENABLE)
+ if (!led_matrix_is_enabled()) {
+ led_matrix_enable();
+ }
+ led_matrix_init();
+#endif
+#if defined(RGB_MATRIX_ENABLE)
+ if (!rgb_matrix_is_enabled()) {
+ rgb_matrix_enable();
+ }
+ rgb_matrix_init();
+# if defined(SPLIT_KEYBOARD)
+ led_state = rgb_matrix_get_mode();
+ hsv = rgb_matrix_get_hsv();
+ rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR);
+# endif
+#endif
+}
+
+static uint32_t combo_exec_3s(uint32_t trigger_time, void *cb_arg) {
+ if (key_press_status == KEY_PRESS_FACTORY_RESET) {
+ factory_reset();
+ } else if (key_press_status == KEY_PRESS_LED_TEST) {
+#if defined(SPLIT_KEYBOARD)
+ rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR);
+#endif
+ led_test_mode = LED_TEST_MODE_WHITE;
+#if defined(LED_MATRIX_ENABLE)
+ if (!led_matrix_is_enabled()) {
+ led_matrix_enable_noeeprom();
+ }
+#endif
+#if defined(RGB_MATRIX_ENABLE)
+ if (!rgb_matrix_is_enabled()) {
+ rgb_matrix_enable_noeeprom();
+ }
+#endif
+ }
+ key_press_status = 0;
+ return 0; // no repeat
+}
+
+__attribute__((weak))
+bool process_record_myfork_keychron_ft(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+#if defined(FN_KEY1) || defined(FN_KEY2)
+# ifdef FN_KEY1
+ case FN_KEY1: /* fall through */
+# endif
+# if defined(FN_KEY2)
+ case FN_KEY2:
+# endif
+ if (record->event.pressed) {
+ key_press_status |= KEY_PRESS_STEP_0;
+ } else {
+ key_press_status &= ~KEY_PRESS_STEP_0;
+ cancel_deferred_exec(combo_exec_token);
+ }
+ return true;
+#endif
+#if defined(RESET_KEY1) && defined(RESET_KEY2)
+ case RESET_KEY1:
+# if defined(RESET_KEY1_ALT)
+ case RESET_KEY1_ALT:
+# endif
+ if (record->event.pressed) {
+ key_press_status |= KEY_PRESS_STEP_1;
+ if (key_press_status == KEY_PRESS_FACTORY_RESET) {
+ combo_exec_token = defer_exec(3000, combo_exec_3s, NULL);
+ }
+ } else {
+ key_press_status &= ~KEY_PRESS_STEP_1;
+ cancel_deferred_exec(combo_exec_token);
+ }
+ return true;
+ case RESET_KEY2:
+# if defined(RESET_KEY2_ALT)
+ case RESET_KEY2_ALT:
+# endif
+ if (record->event.pressed) {
+ key_press_status |= KEY_PRESS_STEP_2;
+ if (key_press_status == KEY_PRESS_FACTORY_RESET) {
+ combo_exec_token = defer_exec(3000, combo_exec_3s, NULL);
+ }
+ } else {
+ key_press_status &= ~KEY_PRESS_STEP_2;
+ cancel_deferred_exec(combo_exec_token);
+ }
+ return true;
+#endif
+#if defined(BL_TEST_KEY1) && defined(BL_TEST_KEY2)
+ case BL_TEST_KEY1:
+ if (record->event.pressed) {
+ key_press_status |= KEY_PRESS_STEP_3;
+ if (led_test_mode) {
+ if (++led_test_mode >= LED_TEST_MODE_MAX) {
+ led_test_mode = LED_TEST_MODE_WHITE;
+ }
+ } else if (key_press_status == KEY_PRESS_LED_TEST) {
+ combo_exec_token = defer_exec(3000, combo_exec_3s, NULL);
+ }
+ } else {
+ key_press_status &= ~KEY_PRESS_STEP_3;
+ cancel_deferred_exec(combo_exec_token);
+ }
+ return true;
+ case BL_TEST_KEY2:
+# if defined(BL_TEST_KEY2_ALT1)
+ case BL_TEST_KEY2_ALT1:
+# endif
+# if defined(BL_TEST_KEY2_ALT2)
+ case BL_TEST_KEY2_ALT2:
+# endif
+ if (record->event.pressed) {
+ key_press_status |= KEY_PRESS_STEP_4;
+ if (led_test_mode) {
+ led_test_mode = LED_TEST_MODE_OFF;
+# if defined(RGB_MATRIX_ENABLE)
+ if (is_win_mode()) {
+ set_win_base_rgb();
+ } else {
+ set_mac_base_rgb();
+ }
+# endif
+ } else if (key_press_status == KEY_PRESS_LED_TEST) {
+ combo_exec_token = defer_exec(3000, combo_exec_3s, NULL);
+ }
+ } else {
+ key_press_status &= ~KEY_PRESS_STEP_4;
+ cancel_deferred_exec(combo_exec_token);
+ }
+ return true;
+#endif
+ default:
+ return true;
+ }
+}
+
+#if defined(LED_MATRIX_ENABLE)
+bool led_matrix_indicators_advanced_myfork_keychron_ft(uint8_t led_min, uint8_t led_max) {
+ if (factory_reset_count) {
+ for (uint8_t i = led_min; i <= led_max; i++) {
+ led_matrix_set_value(i, factory_reset_count % 2 ? 0 : UINT8_MAX);
+ }
+ }
+ return true;
+}
+#endif
+
+#if defined(RGB_MATRIX_ENABLE)
+bool rgb_matrix_indicators_advanced_myfork_keychron_ft(uint8_t led_min, uint8_t led_max) {
+ if (factory_reset_count) {
+ if (rgb_matrix_get_mode() == RGB_MATRIX_SOLID_COLOR) {
+ if (factory_reset_count % 2) {
+ rgb_matrix_sethsv_noeeprom(HSV_RED);
+ } else {
+ rgb_matrix_sethsv_noeeprom(HSV_OFF);
+ }
+ } else {
+ for (uint8_t i = led_min; i <= led_max; i++) {
+ rgb_matrix_set_color(i, factory_reset_count % 2 ? 0 : RGB_RED);
+ }
+ }
+ } else if (led_test_mode) {
+ switch (led_test_mode) {
+ case LED_TEST_MODE_WHITE:
+ for (uint8_t i = led_min; i <= led_max; i++) {
+ rgb_matrix_set_color(i, RGB_WHITE);
+ }
+ break;
+ case LED_TEST_MODE_RED:
+ for (uint8_t i = led_min; i <= led_max; i++) {
+ rgb_matrix_set_color(i, RGB_RED);
+ }
+ break;
+ case LED_TEST_MODE_GREEN:
+ for (uint8_t i = led_min; i <= led_max; i++) {
+ rgb_matrix_set_color(i, RGB_GREEN);
+ }
+ break;
+ case LED_TEST_MODE_BLUE:
+ for (uint8_t i = led_min; i <= led_max; i++) {
+ rgb_matrix_set_color(i, RGB_BLUE);
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ return true;
+}
+#endif
diff --git a/users/mkillewald/myfork_keychron_ft.h b/users/mkillewald/myfork_keychron_ft.h
new file mode 100644
index 000000000000..b9636ae9ec19
--- /dev/null
+++ b/users/mkillewald/myfork_keychron_ft.h
@@ -0,0 +1,53 @@
+/* Copyright 2022 @ Keychron (https://github.com/mkillewald)
+ * forked from keychron_ft_common.h (https://www.keychron.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 .
+ */
+
+#include "quantum.h"
+
+#define KEY_PRESS_STEP_0 (0x1 << 0)
+#define KEY_PRESS_STEP_1 (0x1 << 1)
+#define KEY_PRESS_STEP_2 (0x1 << 2)
+#define KEY_PRESS_STEP_3 (0x1 << 3)
+#define KEY_PRESS_STEP_4 (0x1 << 4)
+#define KEY_PRESS_FACTORY_RESET (KEY_PRESS_STEP_0 | KEY_PRESS_STEP_1 | KEY_PRESS_STEP_2)
+#define KEY_PRESS_LED_TEST (KEY_PRESS_STEP_0 | KEY_PRESS_STEP_3 | KEY_PRESS_STEP_4)
+
+// clang-format off
+enum {
+ LED_TEST_MODE_OFF,
+ LED_TEST_MODE_WHITE,
+ LED_TEST_MODE_RED,
+ LED_TEST_MODE_GREEN,
+ LED_TEST_MODE_BLUE,
+ LED_TEST_MODE_MAX
+} led_test_mode;
+// clang-format on
+
+#if defined(RGB_MATRIX_ENABLE) && defined(SPLIT_KEYBOARD)
+extern uint8_t led_state;
+extern uint8_t light_test_state;
+extern HSV hsv;
+#endif
+
+bool process_record_myfork_keychron_ft(uint16_t keycode, keyrecord_t *record);
+
+#if defined(LED_MATRIX_ENABLE)
+bool led_matrix_indicators_advanced_myfork_keychron_ft(uint8_t led_min, uint8_t led_max);
+#endif
+
+#if defined(RGB_MATRIX_ENABLE)
+bool rgb_matrix_indicators_advanced_myfork_keychron_ft(uint8_t led_min, uint8_t led_max);
+#endif
\ No newline at end of file
diff --git a/users/mkillewald/readme.md b/users/mkillewald/readme.md
new file mode 100644
index 000000000000..f55d67f015f9
--- /dev/null
+++ b/users/mkillewald/readme.md
@@ -0,0 +1,14 @@
+Copyright 2023 Mike Killewald mkillewald@proton.me @mkillewald
+
+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 .
\ No newline at end of file
diff --git a/keyboards/keychron/q1/ansi/keymaps/mkillewald/rgb_matrix_user.c b/users/mkillewald/rgb_matrix_user.c
similarity index 54%
rename from keyboards/keychron/q1/ansi/keymaps/mkillewald/rgb_matrix_user.c
rename to users/mkillewald/rgb_matrix_user.c
index c6fa5f1f155a..63350e062047 100644
--- a/keyboards/keychron/q1/ansi/keymaps/mkillewald/rgb_matrix_user.c
+++ b/users/mkillewald/rgb_matrix_user.c
@@ -1,4 +1,4 @@
-/* Copyright 2021 @ Mike Killewald
+/* Copyright 2023 @ Mike Killewald (https://github.com/mkillewald)
*
* 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,8 +15,11 @@
*/
#include QMK_KEYBOARD_H
+#include "keychron_common.h"
+#include "myfork_keychron_ft.h"
#include "rgb_matrix_user.h"
-#include "keymap_user.h"
+#include "eeprom_user_config.h"
+#include "layers.h"
keypos_t led_index_key_position[RGB_MATRIX_LED_COUNT];
@@ -31,6 +34,11 @@ void rgb_matrix_init_user(void) {
}
}
+__attribute__ ((weak))
+bool rgb_matrix_indicators_advanced_keymap(uint8_t led_min, uint8_t led_max) {
+ return false;
+}
+
bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
uint8_t current_layer = get_highest_layer(layer_state);
switch (current_layer) {
@@ -41,20 +49,22 @@ bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
rgb_matrix_set_color_by_keycode(led_min, led_max, current_layer, is_caps_lock_indicator, CAPS_LOCK_INDICATOR_COLOR);
}
#endif
- break;
- case MAC_FN:
- case WIN_FN:
-#ifdef FN_LAYER_COLOR
- if (get_fn_layer_color_enable()) {
- rgb_matrix_set_color_by_keycode(led_min, led_max, current_layer, is_not_transparent, FN_LAYER_COLOR);
+#ifdef CAPS_WORD_INDICATOR_COLOR
+ if (is_caps_word_on()) {
+ rgb_matrix_set_color_by_keycode(led_min, led_max, current_layer, is_caps_word_indicator, CAPS_WORD_INDICATOR_COLOR);
}
#endif
- if (get_fn_layer_transparent_keys_off()) {
- rgb_matrix_set_color_by_keycode(led_min, led_max, current_layer, is_transparent, RGB_OFF);
- }
+ break;
+ case MAC_FN1:
+ case WIN_FN1:
+ set_fn1_layer_color(led_min, led_max, current_layer);
+ break;
+ case MAC_WIN_FN2:
+ set_fn2_layer_color(led_min, led_max, current_layer);
break;
}
- return false;
+ rgb_matrix_indicators_advanced_myfork_keychron_ft(led_min, led_max);
+ return rgb_matrix_indicators_advanced_keymap(led_min, led_max);
}
void rgb_matrix_set_color_by_keycode(uint8_t led_min, uint8_t led_max, uint8_t layer, bool (*is_keycode)(uint16_t), uint8_t red, uint8_t green, uint8_t blue) {
@@ -66,19 +76,51 @@ void rgb_matrix_set_color_by_keycode(uint8_t led_min, uint8_t led_max, uint8_t l
}
}
+void set_fn1_layer_color(uint8_t led_min, uint8_t led_max, uint8_t current_layer) {
+#ifdef FN1_LAYER_COLOR
+ if (user_config_get_fn_layer_color_enable()) {
+ rgb_matrix_set_color_by_keycode(led_min, led_max, current_layer, is_not_transparent, FN1_LAYER_COLOR);
+ }
+#endif
+ check_fn_layer_transparent_keys_toggle(led_min, led_max, current_layer);
+}
+
+void set_fn2_layer_color(uint8_t led_min, uint8_t led_max, uint8_t current_layer) {
+#ifdef FN2_LAYER_COLOR
+ if (user_config_get_fn_layer_color_enable()) {
+ rgb_matrix_set_color_by_keycode(led_min, led_max, current_layer, is_not_transparent, FN2_LAYER_COLOR);
+ }
+#endif
+ check_fn_layer_transparent_keys_toggle(led_min, led_max, current_layer);
+}
+
+void check_fn_layer_transparent_keys_toggle(uint8_t led_min, uint8_t led_max, uint8_t current_layer) {
+ if (user_config_get_fn_layer_transparent_keys_off()) {
+ rgb_matrix_set_color_by_keycode(led_min, led_max, current_layer, is_transparent, RGB_OFF);
+ }
+}
+
bool is_caps_lock_indicator(uint16_t keycode) {
bool indicator = keycode == KC_CAPS;
- if (get_caps_lock_light_tab()) {
+ if (user_config_get_caps_lock_light_tab()) {
indicator = keycode == KC_TAB || keycode == KC_CAPS;
}
- if (get_caps_lock_light_alphas()) {
+ if (user_config_get_caps_lock_light_alphas()) {
return (KC_A <= keycode && keycode <= KC_Z) || indicator;
} else {
return indicator;
}
}
+bool is_caps_word_indicator(uint16_t keycode) {
+ bool indicator = keycode == KC_LSFT;
+#ifdef CAPS_WORD_LIGHT_LOWER_LEFT_CORNER
+ indicator = keycode == KC_LSFT || keycode == KC_LCTL || keycode == KC_LOPTN;
+#endif
+ return indicator;
+}
+
bool is_transparent(uint16_t keycode) { return keycode == KC_TRNS; }
-bool is_not_transparent(uint16_t keycode) { return keycode != KC_TRNS; }
+bool is_not_transparent(uint16_t keycode) { return keycode != KC_TRNS; }
\ No newline at end of file
diff --git a/keyboards/keychron/q1/iso/keymaps/mkillewald_iso/rgb_matrix_user.h b/users/mkillewald/rgb_matrix_user.h
similarity index 72%
rename from keyboards/keychron/q1/iso/keymaps/mkillewald_iso/rgb_matrix_user.h
rename to users/mkillewald/rgb_matrix_user.h
index 1fb79c0b2a14..8d297869f302 100644
--- a/keyboards/keychron/q1/iso/keymaps/mkillewald_iso/rgb_matrix_user.h
+++ b/users/mkillewald/rgb_matrix_user.h
@@ -1,4 +1,4 @@
-/* Copyright 2021 @ Mike Killewald
+/* Copyright 2023 @ Mike Killewald (https://github.com/mkillewald)
*
* 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
@@ -17,10 +17,11 @@
#pragma once
void rgb_matrix_init_user(void);
-
void rgb_matrix_set_color_by_keycode(uint8_t led_min, uint8_t led_max, uint8_t layer, bool (*is_keycode)(uint16_t), uint8_t red, uint8_t green, uint8_t blue);
-
+void set_fn1_layer_color(uint8_t led_min, uint8_t led_max, uint8_t current_layer);
+void set_fn2_layer_color(uint8_t led_min, uint8_t led_max, uint8_t current_layer);
+void check_fn_layer_transparent_keys_toggle(uint8_t led_min, uint8_t led_max, uint8_t current_layer);
bool is_caps_lock_indicator(uint16_t keycode);
+bool is_caps_word_indicator(uint16_t keycode);
bool is_transparent(uint16_t keycode);
bool is_not_transparent(uint16_t keycode);
-
diff --git a/users/mkillewald/rules.mk b/users/mkillewald/rules.mk
new file mode 100644
index 000000000000..ef24a1758ab8
--- /dev/null
+++ b/users/mkillewald/rules.mk
@@ -0,0 +1,11 @@
+RAW_ENABLE = no
+VIA_ENABLE = yes
+DEFERRED_EXEC_ENABLE = yes
+
+SRC += mkillewald.c
+SRC += eeprom_user_config.c
+SRC += myfork_keychron_ft.c
+
+ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes)
+ SRC += rgb_matrix_user.c
+endif
\ No newline at end of file