From 701db278e4dd334fb3b7246f19c9c708d489232c Mon Sep 17 00:00:00 2001
From: Greg Dietsche <greg@dietsche.us>
Date: Wed, 22 Jun 2022 00:10:17 -0500
Subject: [PATCH] [Keymap] farmergreg's kint41 Kinesis Advantage 2 Layout
 (#16784)

---
 keyboards/kinesis/keymaps/farmergreg/keymap.c | 233 ++++++++++++++++++
 .../kinesis/keymaps/farmergreg/readme.md      |   1 +
 keyboards/kinesis/keymaps/farmergreg/rules.mk |   5 +
 3 files changed, 239 insertions(+)
 create mode 100644 keyboards/kinesis/keymaps/farmergreg/keymap.c
 create mode 100644 keyboards/kinesis/keymaps/farmergreg/readme.md
 create mode 100644 keyboards/kinesis/keymaps/farmergreg/rules.mk

diff --git a/keyboards/kinesis/keymaps/farmergreg/keymap.c b/keyboards/kinesis/keymaps/farmergreg/keymap.c
new file mode 100644
index 0000000000..c861233691
--- /dev/null
+++ b/keyboards/kinesis/keymaps/farmergreg/keymap.c
@@ -0,0 +1,233 @@
+/*
+ * Copyright 2022 Gregory L. Dietsche <gregory.dietsche@cuw.edu>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * To build this layout run:
+ * qmk compile -kb kinesis/kint41 -km farmergreg
+ *
+ * Layout Details:
+ * PROGM + F9 to RESET and load new firmware.
+ * Colemak (default / PROGM+C), Dvorak (PROGM + F4) and QWERTY (PROGM+F3) layouts are available for use
+ * CAPS LOCK is ESC (for use in VIM). Double tap to activate CAPS Lock
+ * UP and DOWN arrows are swapped to be more like VIM
+ * [] and {} are swapped to make programming easier
+ */
+
+#include QMK_KEYBOARD_H
+
+
+enum {
+	_COLEMAK,
+	_DVORAK,
+	_QWERTY,
+	_QWERTY_GAME,
+	_KEYPAD,
+	_PROGM,
+	_LAYER_COUNT,
+};
+
+/*
+ * Tap Dances
+ */
+enum tap_dances {
+	TD_CAPS,	// ESC on tap, CAPS on double tap
+};
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+    [TD_CAPS] = ACTION_TAP_DANCE_DOUBLE(KC_ESC, KC_CAPS),
+};
+
+/*
+ * Key Overrides
+ */
+const key_override_t lcurlytobracket = ko_make_basic(MOD_MASK_SHIFT, KC_LEFT_BRACKET, KC_LEFT_BRACKET);
+const key_override_t rcurlytobracket = ko_make_basic(MOD_MASK_SHIFT, KC_RIGHT_BRACKET, KC_RIGHT_BRACKET);
+const key_override_t lbrackettocurly = ko_make_basic(0, KC_LEFT_BRACKET, KC_LEFT_CURLY_BRACE);
+const key_override_t rbrackettocurly = ko_make_basic(0, KC_RIGHT_BRACKET, KC_RIGHT_CURLY_BRACE);
+
+const key_override_t **key_overrides = (const key_override_t *[]){
+	&lcurlytobracket,
+	&rcurlytobracket,
+	&lbrackettocurly,
+	&rbrackettocurly,
+	NULL
+};
+
+/*
+ * Key Maps
+ */
+const uint16_t PROGMEM keymaps[_LAYER_COUNT][MATRIX_ROWS][MATRIX_COLS] = {
+[_COLEMAK] = LAYOUT(
+	KC_ESC     , KC_F1 ,KC_F2  ,KC_F3  ,KC_F4  ,KC_F5  ,KC_F6  ,KC_F7  ,KC_F8,
+	KC_EQL     , KC_1  ,KC_2   ,KC_3   ,KC_4   ,KC_5   ,
+	KC_TAB     , KC_Q  ,KC_W   ,KC_F   ,KC_P   ,KC_G   ,
+	TD(TD_CAPS), KC_A  ,KC_R   ,KC_S   ,KC_T   ,KC_D   ,
+	KC_LSFT    ,KC_Z   ,KC_X   ,KC_C   ,KC_V   ,KC_B   ,
+		    KC_GRV ,KC_BSLS,KC_LEFT,KC_RGHT,
+
+			KC_LCTL,KC_LALT,
+				KC_HOME,
+			KC_BSPC,KC_DEL ,KC_END,
+
+	KC_F9  ,KC_F10 ,KC_F11 ,KC_F12 ,KC_PSCR ,KC_SLCK  ,KC_PAUS, TG(_KEYPAD), MO(_PROGM),	// I would prefer OSL(_PROGM) but MO emulates what Kinesis does in their firmware.
+	KC_6   ,KC_7   ,KC_8   ,KC_9   ,KC_0   ,KC_MINS,
+	KC_J   ,KC_L   ,KC_U   ,KC_Y   ,KC_SCLN,KC_BSLS,
+	KC_H   ,KC_N   ,KC_E   ,KC_I   ,KC_O   ,KC_QUOT,
+	KC_K   ,KC_M   ,KC_COMM,KC_DOT ,KC_SLSH,KC_RSFT,
+		KC_DOWN,KC_UP  ,KC_LBRC,KC_RBRC,
+
+			KC_RGUI,KC_RCTL,
+				KC_PGUP,
+			KC_PGDN,KC_ENT ,KC_SPC
+	)
+,[_DVORAK] = LAYOUT(
+	_______,_______,_______,_______,_______,_______,_______,_______,_______,
+	_______,_______,_______,_______,_______,_______,
+	_______,KC_QUOT,KC_COMM,KC_DOT ,KC_P   ,KC_Y   ,
+	_______,KC_A   ,KC_O   ,KC_E   ,KC_U   ,KC_I   ,
+	_______,KC_SCLN,KC_Q   ,KC_J   ,KC_K   ,KC_X   ,
+		_______,_______,_______,_______,
+
+			_______,_______,
+				_______,
+			_______,_______,_______,
+
+	_______,_______,_______,_______,_______,_______,_______,_______, _______,
+	_______,_______,_______,_______,_______,_______,
+	KC_F   ,KC_G   ,KC_C   ,KC_R   ,KC_L   ,KC_SLSH,
+	KC_D   ,KC_H   ,KC_T   ,KC_N   ,KC_S   ,KC_QUOT,
+	KC_B   ,KC_M   ,KC_W   ,KC_V   ,KC_Z   ,_______,
+		_______,_______,_______,_______,
+
+			_______,_______,
+				_______,
+			_______,_______,_______
+	)
+,[_QWERTY] = LAYOUT(
+	_______,_______,_______,_______,_______,_______,_______,_______,_______,
+	_______,_______,_______,_______,_______,_______,
+	_______,KC_Q  ,KC_W   ,KC_E   ,KC_R   ,KC_T   ,
+	_______,KC_A  ,KC_S   ,KC_D   ,KC_F   ,KC_G   ,
+	_______,KC_Z  ,KC_X   ,KC_C   ,KC_V   ,KC_B   ,
+		    _______,_______,_______,_______,
+			_______,_______,
+				_______,
+			_______,_______,_______,
+
+	_______,_______,_______,_______,_______,_______,_______,_______,_______,
+	_______,_______,_______,_______,_______,_______,
+	KC_Y   ,KC_U   ,KC_I   ,KC_O   ,KC_P   ,_______,
+	KC_H   ,KC_J   ,KC_K   ,KC_L   ,KC_SCLN,_______,
+	KC_N   ,KC_M   ,_______,_______,_______,_______,
+		_______,_______,_______,_______,
+			_______,_______,
+				_______,
+			_______,_______,_______
+	)
+,[_QWERTY_GAME] = LAYOUT( // Shift WASD over to ESDF (QWERTY). Also move T and G
+	_______,_______,_______,_______,_______,_______,_______,_______,_______,
+	_______,_______,_______,_______,_______,_______,
+	_______,KC_T   ,KC_Q   , KC_W  ,KC_E   ,KC_R   ,
+	_______,KC_G   ,KC_A   , KC_S  ,KC_D   ,KC_F   ,
+	_______,_______,_______,_______,_______,_______,
+		_______,_______,_______,_______,
+
+			_______,_______,
+				_______,
+			KC_SPC ,_______,_______, // BACKSPACE becomes SPACE
+
+	_______,_______,_______,_______,_______,_______,_______, _______,_______,
+	_______,_______,_______,_______,_______,_______,
+	_______,_______,_______,_______,_______,_______,
+	_______,_______,_______,_______,_______,_______,
+	_______,_______,_______,_______,_______,_______,
+		_______,_______,_______,_______,
+
+			_______,_______,
+				_______,
+			_______,_______,KC_BSPC // SPACE becomes BACKSPACE
+	)
+,[_KEYPAD] = LAYOUT(
+	_______,_______,_______,_______,_______,_______,_______,_______,_______,
+	_______,_______,_______,_______,_______,_______,
+	_______,_______,_______,_______,_______,_______,
+	_______,_______,_______,_______,_______,_______,
+	_______,_______,_______,_______,_______,_______,
+		_______,KC_INS ,_______,_______,
+
+			_______,_______,
+				_______,
+			_______,_______,_______,
+
+	_______,_______,_______ ,_______,KC_MUTE,KC_VOLD,KC_VOLU,TG(_KEYPAD), _______,
+	_______,KC_NUM  ,KC_PEQL,KC_PSLS,KC_PAST,_______,
+	_______,KC_P7   ,KC_P8  ,KC_P9  ,KC_PMNS,_______,
+	_______,KC_P4   ,KC_P5  ,KC_P6  ,KC_PPLS,_______,
+	_______,KC_P1   ,KC_P2  ,KC_P3  ,KC_PENT,_______,
+		_______,_______ ,KC_PDOT,KC_PENT,
+
+			_______,_______,
+				_______,
+			_______,_______,KC_P0
+	)
+	,[_PROGM] = LAYOUT(
+	_______,_______,_______,DF(_QWERTY),DF(_DVORAK),_______         ,_______,_______,_______,
+	_______,_______,_______,_______     ,_______    ,_______         ,
+	_______,_______,_______,_______     ,_______    ,DF(_QWERTY_GAME),	// The G in Colemak
+	_______,_______,_______,_______     ,_______    ,DF(_QWERTY_GAME),	// The G in QWERTY
+	_______,_______,_______,DF(_COLEMAK),_______    ,_______,
+		_______,_______,_______     ,_______,
+
+			_______,_______,
+				_______,
+			_______,_______,_______,
+
+	RESET  ,_______,_______,_______,_______,_______,_______,_______,_______,
+	_______,_______,_______,_______,_______,_______,
+	_______,_______,_______,_______,_______,_______,
+	_______,_______,_______,_______,_______,_______,
+	_______,_______,_______,_______,_______,_______,
+		_______,_______,_______,_______,
+
+			_______,_______,
+				_______,
+			_______,_______,_______
+	)
+/*
+	,[_TEMPLATE] = LAYOUT(
+	_______,_______,_______,_______,_______,_______,_______,_______,_______,
+	_______,_______,_______,_______,_______,_______,
+	_______,_______,_______,_______,_______,_______,
+	_______,_______,_______,_______,_______,_______,
+	_______,_______,_______,_______,_______,_______,
+		_______,_______,_______,_______,
+
+			_______,_______,
+				_______,
+			_______,_______,_______,
+
+	_______,_______,_______,_______,_______,_______,_______,_______, _______,
+	_______,_______,_______,_______,_______,_______,
+	_______,_______,_______,_______,_______,_______,
+	_______,_______,_______,_______,_______,_______,
+	_______,_______,_______,_______,_______,_______,
+		_______,_______,_______,_______,
+
+			_______,_______,
+				_______,
+			_______,_______,_______
+	)
+*/
+};
diff --git a/keyboards/kinesis/keymaps/farmergreg/readme.md b/keyboards/kinesis/keymaps/farmergreg/readme.md
new file mode 100644
index 0000000000..f27ee19023
--- /dev/null
+++ b/keyboards/kinesis/keymaps/farmergreg/readme.md
@@ -0,0 +1 @@
+[farmergreg](https://github.com/farmergreg)'s kinesis advantage 2 kint41 layout
diff --git a/keyboards/kinesis/keymaps/farmergreg/rules.mk b/keyboards/kinesis/keymaps/farmergreg/rules.mk
new file mode 100644
index 0000000000..f6bd054e78
--- /dev/null
+++ b/keyboards/kinesis/keymaps/farmergreg/rules.mk
@@ -0,0 +1,5 @@
+BOOTMAGIC_ENABLE = no
+COMMAND_ENABLE = yes
+NKRO_ENABLE = yes
+KEY_OVERRIDE_ENABLE = yes
+TAP_DANCE_ENABLE = yes