From 32512bbf109243027d516474c7cc76ab0c01fa44 Mon Sep 17 00:00:00 2001
From: JW2586 <70282382+JW2586@users.noreply.github.com>
Date: Tue, 19 Jul 2022 16:43:19 +0100
Subject: [PATCH] [Keyboard] Waterfowl keyboard support (#16760)

* Added waterfowl files

* Completing PR Checklist

* Added encoders to info.json

* Added license to default keymap

* Update keyboards/waterfowl/keymaps/cyanduck/keymap.c

* Update keyboards/waterfowl/keymaps/default/keymap.c

* Update keyboards/waterfowl/waterfowl.c

* Update keyboards/waterfowl/keymaps/default/keymap.c

* Update keyboards/waterfowl/waterfowl.c

* Update keyboards/waterfowl/waterfowl.c

* Update keyboards/waterfowl/keymaps/cyanduck/keymap.c

* Update keyboards/waterfowl/rules.mk

* Update readme.md

* Update keyboards/waterfowl/waterfowl.c

* Update keyboards/waterfowl/info.json

* Update keyboards/waterfowl/info.json
---
 keyboards/waterfowl/config.h                  |  57 +++++++
 keyboards/waterfowl/info.json                 |  54 ++++++
 keyboards/waterfowl/keymaps/cyanduck/keymap.c | 129 ++++++++++++++
 keyboards/waterfowl/keymaps/default/keymap.c  | 108 ++++++++++++
 keyboards/waterfowl/readme.md                 |  21 +++
 keyboards/waterfowl/rules.mk                  |  23 +++
 keyboards/waterfowl/waterfowl.c               | 161 ++++++++++++++++++
 keyboards/waterfowl/waterfowl.h               |  44 +++++
 8 files changed, 597 insertions(+)
 create mode 100644 keyboards/waterfowl/config.h
 create mode 100644 keyboards/waterfowl/info.json
 create mode 100644 keyboards/waterfowl/keymaps/cyanduck/keymap.c
 create mode 100644 keyboards/waterfowl/keymaps/default/keymap.c
 create mode 100644 keyboards/waterfowl/readme.md
 create mode 100644 keyboards/waterfowl/rules.mk
 create mode 100644 keyboards/waterfowl/waterfowl.c
 create mode 100644 keyboards/waterfowl/waterfowl.h

diff --git a/keyboards/waterfowl/config.h b/keyboards/waterfowl/config.h
new file mode 100644
index 0000000000..63dc125dca
--- /dev/null
+++ b/keyboards/waterfowl/config.h
@@ -0,0 +1,57 @@
+/* Copyright 2022  CyanDuck
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+#include "config_common.h"
+
+
+/* USB Device properties */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x9CE3
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    CyanDuck
+#define PRODUCT         Waterfowl
+
+/* Key matrix size */
+/* Rows are doubled up */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 5
+
+// Wiring
+#define MATRIX_ROW_PINS { D4, C6, D7, E6 }
+#define MATRIX_COL_PINS { F4, F5, F6, F7, B1 }
+
+// COL2ROW, ROW2COL
+#define DIODE_DIRECTION COL2ROW
+
+// Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed
+#define DEBOUNCE 5
+
+// Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
+
+#define SOFT_SERIAL_PIN D2
+#define OLED_DISPLAY_128X64
+#define SPLIT_MODS_ENABLE
+#define SPLIT_WPM_ENABLE
+#define SPLIT_USB_DETECT
+
+// Encoders
+#define ENCODERS_PAD_A { B4, B3 }
+#define ENCODERS_PAD_B { B5, B2 }
+#define ENCODER_RESOLUTIONS { 4, 2 }
+
+// Tapping term
+#define TAPPING_TERM 200
\ No newline at end of file
diff --git a/keyboards/waterfowl/info.json b/keyboards/waterfowl/info.json
new file mode 100644
index 0000000000..8731803a25
--- /dev/null
+++ b/keyboards/waterfowl/info.json
@@ -0,0 +1,54 @@
+{
+    "keyboard_name": "Waterfowl",
+    "url": "",
+    "maintainer": "JW2586",
+    "layouts": {
+        "LAYOUT": {
+            "layout": [
+                {"x":0, "y":1},
+                {"x":1, "y":0.25},
+                {"x":2, "y":0},
+                {"x":3, "y":0.375},
+                {"x":4, "y":0.5},
+                {"x":9, "y":0.5},
+                {"x":10, "y":0.375},
+                {"x":11, "y":0},
+                {"x":12, "y":0.25},
+                {"x":13, "y":1},
+
+                {"x":0, "y":2},
+                {"x":1, "y":1.25},
+                {"x":2, "y":1},
+                {"x":3, "y":1.375},
+                {"x":4, "y":1.5},
+                {"x":9, "y":1.5},
+                {"x":10, "y":1.375},
+                {"x":11, "y":1},
+                {"x":12, "y":1.25},
+                {"x":13, "y":2},
+
+                {"x":0, "y":3},
+                {"x":1, "y":2.25},
+                {"x":2, "y":2},
+                {"x":3, "y":2.375},
+                {"x":4, "y":2.5},
+                {"x":9, "y":2.5},
+                {"x":10, "y":2.375},
+                {"x":11, "y":2},
+                {"x":12, "y":2.25},
+                {"x":13, "y":3},
+
+                {"x":2, "y":3.5},
+                {"x":3.5, "y":3.5},
+                {"x":4.5, "y":3.7},
+                {"x":5.5, "y":4.1},
+                {"x":5.5, "y":2.5},
+                {"x":7.5, "y":2.5},
+                {"x":7.5, "y":4.1},
+                {"x":8.5, "y":3.7},
+                {"x":9.5, "y":3.5},
+                {"x":11, "y":3.5}
+            ]
+        }
+    }
+}
diff --git a/keyboards/waterfowl/keymaps/cyanduck/keymap.c b/keyboards/waterfowl/keymaps/cyanduck/keymap.c
new file mode 100644
index 0000000000..ffcf18ae26
--- /dev/null
+++ b/keyboards/waterfowl/keymaps/cyanduck/keymap.c
@@ -0,0 +1,129 @@
+/* Copyright 2022  CyanDuck
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include QMK_KEYBOARD_H
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+    _COLEMAKDH,
+    _NAVNUM,
+    _SYM,
+    _FUNC,
+    _GAME
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Colemak-DH
+ *
+ * ,----------------------------------.                      ,----------------------------------.
+ * |   Q  |   W  |   F  |   P  |   B  |                      |   J  |   L  |   U  |   Y  |   ;  |
+ * |------+------+------+------+------|                      |------+------+------+------+------|
+ * |   A  |   R  |   S  |   T  |   G  |                      |   M  |   N  |   E  |   I  |   O  |
+ * |------+------+------+------+------|  ,-----.    ,-----.  |------+------+------+------+------|
+ * |   Z  |   X  |   C  |   D  |   V  |  |  2  |    |  3  |  |   K  |   H  |   ,  |   .  |   /  |
+ * `----------------------------------'  `-----'    `-----'  `----------------------------------'
+ *          ,-----.   ,--------------------.            ,--------------------.   ,-----. 
+ *          |  1  |   | DEL | SPACE | TAB  |            | TO(0) | BS | ENTER |   |  4  |
+ *          `-----'   `--------------------'            `--------------------'   `-----'
+ */
+[_COLEMAKDH] = LAYOUT(
+  KC_Q,    KC_W,    KC_F,    KC_P,    KC_B,         KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN,
+  KC_A,    MT(MOD_LALT, KC_R),    MT(MOD_LCTL, KC_S),    MT(MOD_LSFT, KC_T),    KC_G,         KC_M,    MT(MOD_LSFT, KC_N),    MT(MOD_LCTL, KC_E),    MT(MOD_LALT, KC_I),    KC_O,
+  KC_Z,    KC_X,    KC_C,    MT(MOD_LGUI, KC_D),    KC_V,         KC_K,    MT(MOD_LGUI, KC_H),    KC_COMM, KC_DOT,  KC_SLSH,
+  KC_1, LT(3,KC_DEL), LT(1,KC_SPC), KC_TAB, KC_2,         KC_3, TO(0), KC_BSPC, LT(2,KC_ENT), KC_4
+),
+
+/* NAVNUM
+ *
+ * ,----------------------------------.                      ,----------------------------------.
+ * |  ESC | PgUp |  UP  | PgDn | TO(4)|                      |   /  |   7  |   8  |   9  |   -  |
+ * |------+------+------+------+------|                      |------+------+------+------+------|
+ * | Home | Left | Down | Right| End  |                      |   =  |   4  |   5  |   6  |   +  |
+ * |------+------+------+------+------|  ,-----.    ,-----.  |------+------+------+------+------|
+ * |      |      |  INS | TO(2)|      |  |  2  |    |  3  |  |   0  |   1  |   2  |   3  |   *  |
+ * `----------------------------------'  `-----'    `-----'  `----------------------------------'
+ *          ,-----.   ,--------------------.            ,--------------------.   ,-----. 
+ *          |  1  |   | DEL | SPACE | MO(3)|            | TO(0) | BS | ENTER |   |  4  |
+ *          `-----'   `--------------------'            `--------------------'   `-----'
+ */
+[_NAVNUM] = LAYOUT(
+  KC_ESC,    KC_PGUP,    KC_UP,    KC_PGDN,   TO(4),    KC_SLSH,    KC_7,    KC_8,    KC_9,    KC_MINS,
+  KC_HOME,   KC_LEFT,    KC_DOWN,  KC_RGHT,   KC_END,  KC_EQL,     KC_4,    KC_5,    KC_6,    KC_PLUS,
+  KC_NO,    KC_NO,      KC_INS,   TO(2),     KC_NO,    KC_0,       KC_1,    KC_2,    KC_3,    KC_ASTR,
+  KC_1, LT(3,KC_DEL), LT(1,KC_SPC), KC_ESC, KC_2,         KC_3, TO(0), KC_BSPC, LT(2,KC_ENT), KC_4
+),
+
+/* SYM
+ *
+ * ,----------------------------------.                      ,----------------------------------.
+ * |   %  |   @  |   [  |   ]  |   \  |                      |   ¦  |   ¬  |   ^  |      |      |
+ * |------+------+------+------+------|                      |------+------+------+------+------|
+ * |   #  |   !  |   (  |   )  |   |  |                      |   _  |   '  |   "  |   ~  |   `  |
+ * |------+------+------+------+------|  ,-----.    ,-----.  |------+------+------+------+------|
+ * |   $  |   £  |   {  |   }  |   &  |  |  2  |    |  3  |  | TO(1)|      |      |      |      |
+ * `----------------------------------'  `-----'    `-----'  `----------------------------------'
+ *          ,-----.   ,--------------------.            ,--------------------.   ,-----. 
+ *          |  1  |   | DEL | SPACE | TAB  |            | TO(0) | BS | ENTER |   |  4  |
+ *          `-----'   `--------------------'            `--------------------'   `-----'
+ */
+[_SYM] = LAYOUT(
+  KC_PERC, S(KC_QUOT),   KC_LBRC, KC_RBRC,  KC_NUBS,     RALT(KC_GRV), S(KC_GRV), KC_CIRC, KC_NO,   KC_NO,
+  KC_NONUS_HASH, KC_EXLM, KC_LPRN, KC_RPRN, S(KC_NUBS),      KC_UNDS, KC_QUOT, S(KC_2), S(KC_NUHS), KC_GRV,
+  KC_DLR, S(KC_3),  KC_LCBR, KC_RCBR, KC_AMPR,      TO(1), KC_NO,   KC_NO,   KC_NO,   KC_NO,
+  KC_1, LT(3,KC_DEL), LT(1,KC_SPC), KC_TAB, KC_2,         KC_3, TO(0), KC_BSPC, LT(2,KC_ENT), KC_4
+),
+
+/* FUNC
+ *
+ * ,----------------------------------.                      ,----------------------------------.
+ * |      |      |      |      |      |                      |      |  F7  |  F8  |  F9  |  F11 |
+ * |------+------+------+------+------|                      |------+------+------+------+------|
+ * |      |      |      |      |      |                      |      |  F4  |  F5  |  F6  |  F12 |
+ * |------+------+------+------+------|  ,-----.    ,-----.  |------+------+------+------+------|
+ * | Reset|      |      |      |      |  |  2  |    |  3  |  |  F10 |  F1  |  F2  |  F3  |  F13 |
+ * `----------------------------------'  `-----'    `-----'  `----------------------------------'
+ *          ,-----.   ,--------------------.            ,--------------------.   ,-----. 
+ *          |  1  |   | DEL | SPACE | TAB  |            | TO(0) | BS | ENTER |   |  4  |
+ *          `-----'   `--------------------'            `--------------------'   `-----'
+ */
+[_FUNC] =  LAYOUT(
+  KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,        KC_NO,   KC_F7,   KC_F8,   KC_F9,   KC_F11,
+  KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,        KC_NO,   KC_F4,   KC_F5,   KC_F6,   KC_F12,
+  RESET,   KC_NO,   KC_NO,   KC_NO,   KC_NO,        KC_F10,  KC_F1,   KC_F2,   KC_F3,   KC_F13,
+  KC_1, LT(3,KC_DEL), LT(1,KC_SPC), KC_TAB, KC_2,         KC_3, TO(0), KC_BSPC, LT(2,KC_ENT), KC_4
+),
+
+/* GAME
+ *
+ * ,----------------------------------.                      ,----------------------------------.
+ * |  ESC |   Q  |   W  |   E  |   R  |                      |      |      |      |      |      |
+ * |------+------+------+------+------|                      |------+------+------+------+------|
+ * |Shift |   A  |   S  |   D  |   F  |                      |      |      |      |      |      |
+ * |------+------+------+------+------|  ,-----.    ,-----.  |------+------+------+------+------|
+ * | Ctrl |   Z  |   X  |   C  |   V  |  |  2  |    |  3  |  |      |      |      |      |      |
+ * `----------------------------------'  `-----'    `-----'  `----------------------------------'
+ *          ,-----.   ,--------------------.            ,--------------------.   ,-----. 
+ *          |  1  |   |  T  | SPACE | TAB  |            | TO(0) | BS | ENTER |   |  4  |
+ *          `-----'   `--------------------'            `--------------------'   `-----'
+ */
+[_GAME] = LAYOUT(
+  KC_ESC,    KC_Q,    KC_W,    KC_E,    KC_R,         KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,
+  KC_LSFT,    KC_A,    KC_S,    KC_D,    KC_F,         KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,
+  KC_LCTL,    KC_Z,    KC_X,    KC_C,    KC_V,         KC_NO,    KC_NO,    KC_NO, KC_NO,  KC_NO,
+  KC_1, KC_T, KC_SPC, KC_TAB, KC_2,         KC_3, TO(0), KC_BSPC, LT(2,KC_ENT), KC_4
+),
+};
diff --git a/keyboards/waterfowl/keymaps/default/keymap.c b/keyboards/waterfowl/keymaps/default/keymap.c
new file mode 100644
index 0000000000..f233d00134
--- /dev/null
+++ b/keyboards/waterfowl/keymaps/default/keymap.c
@@ -0,0 +1,108 @@
+/* Copyright 2022  CyanDuck
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include QMK_KEYBOARD_H
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+    _QWERTY,
+    _NAVNUM,
+    _SYM,
+    _FUNC,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* QWERTY
+ *
+ * ,----------------------------------.                      ,----------------------------------.
+ * |   Q  |   W  |   E  |   R  |   T  |                      |   Y  |   U  |   I  |   O  |   P  |
+ * |------+------+------+------+------|                      |------+------+------+------+------|
+ * |   A  |   S  |   D  |   F  |   G  |                      |   H  |   J  |   K  |   L  |   ;  |
+ * |------+------+------+------+------|  ,-----.    ,-----.  |------+------+------+------+------|
+ * |   Z  |   X  |   C  |   V  |   B  |  |  2  |    |  3  |  |   N  |   M  |   ,  |   .  |   /  |
+ * `----------------------------------'  `-----'    `-----'  `----------------------------------'
+ *          ,-----.   ,--------------------.            ,--------------------.   ,-----. 
+ *          |  1  |   | DEL | SPACE | TAB  |            |  ESC  | BS | ENTER |   |  4  |
+ *          `-----'   `--------------------'            `--------------------'   `-----'
+ */
+[_QWERTY] = LAYOUT(
+  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,         KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,
+  MT(MOD_LGUI, KC_A),    MT(MOD_LALT, KC_S),    MT(MOD_LCTL, KC_D),    MT(MOD_LSFT, KC_F),    KC_G,         KC_H,    MT(MOD_LSFT, KC_J),    MT(MOD_LCTL, KC_K),    MT(MOD_LALT, KC_L),    MT(MOD_LGUI, KC_SCLN),
+  KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,         KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH,
+  KC_1, LT(3,KC_DEL), LT(1,KC_SPC), KC_TAB, KC_2,         KC_3, KC_ESC, KC_BSPC, LT(2,KC_ENT), KC_4
+),
+
+/* NAVNUM
+ *
+ * ,----------------------------------.                      ,----------------------------------.
+ * |      | PgUp |  UP  | PgDn |      |                      |   /  |   7  |   8  |   9  |   -  |
+ * |------+------+------+------+------|                      |------+------+------+------+------|
+ * | Home | Left | Down | Right| End  |                      |   =  |   4  |   5  |   6  |   +  |
+ * |------+------+------+------+------|  ,-----.    ,-----.  |------+------+------+------+------|
+ * |      |      |  INS |      |      |  |  2  |    |  3  |  |   0  |   1  |   2  |   3  |   *  |
+ * `----------------------------------'  `-----'    `-----'  `----------------------------------'
+ *          ,-----.   ,--------------------.            ,--------------------.   ,-----. 
+ *          |  1  |   | DEL | SPACE | MO(3)|            |  ESC  | BS | ENTER |   |  4  |
+ *          `-----'   `--------------------'            `--------------------'   `-----'
+ */
+[_NAVNUM] = LAYOUT(
+  KC_NO,    KC_PGUP,    KC_UP,    KC_PGDN,   KC_NO,    KC_SLSH,    KC_7,    KC_8,    KC_9,    KC_MINS,
+  KC_HOME,   KC_LEFT,    KC_DOWN,  KC_RGHT,   KC_END,  KC_EQL,     KC_4,    KC_5,    KC_6,    KC_PLUS,
+  KC_NO,    KC_NO,      KC_INS,   KC_NO,     KC_NO,    KC_0,       KC_1,    KC_2,    KC_3,    KC_ASTR,
+  KC_1, LT(3,KC_DEL), LT(1,KC_SPC), KC_TAB, KC_2,         KC_3, KC_ESC, KC_BSPC, LT(2,KC_ENT), KC_4
+),
+
+/* SYM
+ *
+ * ,----------------------------------.                      ,----------------------------------.
+ * |   %  |   @  |   [  |   ]  |   \  |                      |   ¦  |   ¬  |   ^  |      |      |
+ * |------+------+------+------+------|                      |------+------+------+------+------|
+ * |   #  |   !  |   (  |   )  |   |  |                      |   _  |   '  |   "  |   ~  |   `  |
+ * |------+------+------+------+------|  ,-----.    ,-----.  |------+------+------+------+------|
+ * |   $  |   £  |   {  |   }  |   &  |  |  2  |    |  3  |  |      |      |      |      |      |
+ * `----------------------------------'  `-----'    `-----'  `----------------------------------'
+ *          ,-----.   ,--------------------.            ,--------------------.   ,-----. 
+ *          |  1  |   | DEL | SPACE | TAB  |            |  ESC  | BS | ENTER |   |  4  |
+ *          `-----'   `--------------------'            `--------------------'   `-----'
+ */
+[_SYM] = LAYOUT(
+  KC_PERC, S(KC_QUOT),   KC_LBRC, KC_RBRC,  KC_NUBS,     RALT(KC_GRV), S(KC_GRV), KC_CIRC, KC_NO,   KC_NO,
+  KC_NONUS_HASH, KC_EXLM, KC_LPRN, KC_RPRN, S(KC_NUBS),      KC_UNDS, KC_QUOT, S(KC_2), S(KC_NUHS), KC_GRV,
+  KC_DLR, S(KC_3),  KC_LCBR, KC_RCBR, KC_AMPR,      KC_NO, KC_NO,   KC_NO,   KC_NO,   KC_NO,
+  KC_1, LT(3,KC_DEL), LT(1,KC_SPC), KC_TAB, KC_2,         KC_3, KC_ESC, KC_BSPC, LT(2,KC_ENT), KC_4
+),
+
+/* FUNC
+ *
+ * ,----------------------------------.                      ,----------------------------------.
+ * |      |      |      |      |      |                      |      |  F7  |  F8  |  F9  |  F11 |
+ * |------+------+------+------+------|                      |------+------+------+------+------|
+ * |      |      |      |      |      |                      |      |  F4  |  F5  |  F6  |  F12 |
+ * |------+------+------+------+------|  ,-----.    ,-----.  |------+------+------+------+------|
+ * | Reset|      |      |      |      |  |  2  |    |  3  |  |  F10 |  F1  |  F2  |  F3  |  F13 |
+ * `----------------------------------'  `-----'    `-----'  `----------------------------------'
+ *          ,-----.   ,--------------------.            ,--------------------.   ,-----. 
+ *          |  1  |   | DEL | SPACE | TAB  |            |  ESC  | BS | ENTER |   |  4  |
+ *          `-----'   `--------------------'            `--------------------'   `-----'
+ */
+[_FUNC] =  LAYOUT(
+  KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,        KC_NO,   KC_F7,   KC_F8,   KC_F9,   KC_F11,
+  KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,        KC_NO,   KC_F4,   KC_F5,   KC_F6,   KC_F12,
+  RESET,   KC_NO,   KC_NO,   KC_NO,   KC_NO,        KC_F10,  KC_F1,   KC_F2,   KC_F3,   KC_F13,
+  KC_1, LT(3,KC_DEL), LT(1,KC_SPC), KC_TAB, KC_2,         KC_3, KC_ESC, KC_BSPC, LT(2,KC_ENT), KC_4
+),
+};
diff --git a/keyboards/waterfowl/readme.md b/keyboards/waterfowl/readme.md
new file mode 100644
index 0000000000..9b504ca769
--- /dev/null
+++ b/keyboards/waterfowl/readme.md
@@ -0,0 +1,21 @@
+# Waterfowl
+
+The Waterfowl is a 36-key split keyboard inspired by the Kyria and Arch-36.
+
+* Keyboard Maintainer: [CyanDuck](https://github.com/JW2586)
+* Hardware Supported: Pro Micro 5V/16MHz and compatible.
+
+Make example for this keyboard (after setting up your build environment):
+
+    make waterfowl:default
+
+Example of flashing this keyboard:
+
+    make waterfowl:default:flash
+
+Enter the bootloader by:
+- Press the key mapped to reset (bottom left key in FUNC layer/layer 3)
+- Press the reset button on the PCB
+- Connect GND and RST pins on pro micro
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/waterfowl/rules.mk b/keyboards/waterfowl/rules.mk
new file mode 100644
index 0000000000..1515d5f866
--- /dev/null
+++ b/keyboards/waterfowl/rules.mk
@@ -0,0 +1,23 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes      # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes       # Mouse keys
+EXTRAKEY_ENABLE = yes       # Audio control and System control
+CONSOLE_ENABLE = no         # Console for debug
+COMMAND_ENABLE = no         # Commands for debug and configuration
+NKRO_ENABLE = yes           # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow
+AUDIO_ENABLE = no           # Audio output
+
+OLED_ENABLE = yes        # Enables the use of OLED displays
+OLED_DRIVER = SSD1306    # Specifies the type of OLED
+SPLIT_KEYBOARD = yes     # Enables split functionality
+ENCODER_ENABLE = yes	 # Enables the encoders
\ No newline at end of file
diff --git a/keyboards/waterfowl/waterfowl.c b/keyboards/waterfowl/waterfowl.c
new file mode 100644
index 0000000000..55dcdf4796
--- /dev/null
+++ b/keyboards/waterfowl/waterfowl.c
@@ -0,0 +1,161 @@
+/* Copyright 2022  CyanDuck
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "waterfowl.h"
+
+#ifdef ENCODER_ENABLE
+bool encoder_update_kb(uint8_t index, bool clockwise) {
+    if (!encoder_update_user(index, clockwise)) {
+        return false; 
+    }
+    if (index == 0) { // Left roller
+        if (clockwise) {
+            tap_code(KC_MS_WH_DOWN);
+        } else {
+            tap_code(KC_MS_WH_UP);
+        }
+    } else if (index == 1) { // Left encoder
+        if (clockwise) {
+            tap_code16(S(KC_TAB));
+        } else {
+            tap_code(KC_TAB);
+        }
+    } else if (index == 2) { // Right roller
+        if (clockwise) {
+            tap_code16(S(KC_MS_WH_DOWN));
+        } else {
+            tap_code16(S(KC_MS_WH_UP));
+        }
+    } else if (index == 3) { // Right encoder
+        if (clockwise) {
+            tap_code(KC_RIGHT);
+        } else {
+            tap_code(KC_LEFT);
+        }
+    }
+
+    return true;
+}
+#endif
+
+#ifdef OLED_ENABLE
+oled_rotation_t oled_init_kb(oled_rotation_t rotation) {
+    if (is_keyboard_master() && is_keyboard_left()) {
+        return OLED_ROTATION_90;
+    } else {
+        return OLED_ROTATION_270;
+    }
+}
+bool oled_task_kb(void) {
+   if (!oled_task_user()) {
+       return false;
+   }
+   if (is_keyboard_master()) {
+       // Host Keyboard Layer Status
+       oled_write_P(PSTR("LAYER:\n"), false);
+       oled_write_P(PSTR("\n"), false);
+	   
+       switch (get_highest_layer(layer_state)) {
+           case 0:
+               oled_write_P(PSTR("DEFAULT\n\n\n\n"), false);
+               break;
+           case 3:
+               oled_write_P(PSTR("FUNCTION\n\n\n\n"), false);
+               break;
+           case 2:
+               oled_write_P(PSTR("SYMBOLS\n\n\n\n"), false);
+               break;
+           case 1:
+               oled_write_P(PSTR("NAVIGATIONAND\nNUMBERS\n"), false);
+               break;
+           default:
+               oled_write_ln_P(PSTR("Undefined"), false);
+       }
+    } else {
+  static const char PROGMEM my_logo[] = {
+    // Paste the code from the previous step below this line!
+    // 'waterfowl for OLED', 64x128px
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x80, 0xc0, 0x40, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x80, 0xc0, 0x40, 0x20, 0x10, 0x10, 0x08, 0x0c, 0x04, 0x04, 0x02, 0x02, 0x02, 0x01, 
+0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x1a, 0x26, 0x40, 
+0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 
+0x1c, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x1e, 0x16, 0x1c, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x03, 0x0c, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xf0, 0xfc, 0xff, 
+0x78, 0xf8, 0xfc, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x1e, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xc0, 0xe0, 0xf8, 0xfc, 0xfe, 0xff, 0xff, 0xff, 0xfc, 
+0xff, 0xff, 0x7f, 0x7f, 0x3f, 0x3f, 0x1e, 0x1c, 0x1c, 0x14, 0x10, 0x10, 0x08, 0x08, 0x10, 0x10, 
+0x10, 0x10, 0x10, 0x30, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x38, 0x7c, 0x7e, 0x7f, 0x7f, 0x7f, 0x3f, 0x3f, 0x3f, 0x1f, 0x1f, 0x0f, 0x0f, 0x07, 0x03, 
+0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0xc0, 0x38, 0x0e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x38, 
+0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x3c, 0x03, 0x80, 
+0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x80, 0x80, 0xc0, 0x40, 0x7f, 0xc0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x0c, 0x0c, 0x0c, 0x04, 0x07, 0x02, 0x03, 0x01, 
+0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x03, 0x03, 0x02, 0x06, 0x06, 0x06, 
+0x02, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+        };
+
+        oled_write_raw_P(my_logo, sizeof(my_logo));
+    }    
+    return true;
+}
+#endif
diff --git a/keyboards/waterfowl/waterfowl.h b/keyboards/waterfowl/waterfowl.h
new file mode 100644
index 0000000000..0c7f897dbf
--- /dev/null
+++ b/keyboards/waterfowl/waterfowl.h
@@ -0,0 +1,44 @@
+/* Copyright 2022  CyanDuck
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "quantum.h"
+
+/* This a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+#define LAYOUT( \
+    L00, L01, L02, L03, L04,    R04, R03, R02, R01, R00, \
+    L05, L06, L07, L08, L09,    R09, R08, R07, R06, R05, \
+    L10, L11, L12, L13, L14,    R14, R13, R12, R11, R10, \
+    L15, L16, L17, L18, L19,    R19, R18, R17, R16, R15 \
+) \
+{ \
+    { L00,   L01,   L02,   L03,   L04 }, \
+    { L05,   L06,   L07,   L08,   L09 }, \
+    { L10,   L11,   L12,   L13,   L14 }, \
+    { L15,   L16,   L17,   L18,   L19 }, \
+    { R00,   R01,   R02,   R03,   R04 }, \
+    { R05,   R06,   R07,   R08,   R09 }, \
+    { R10,   R11,   R12,   R13,   R14 }, \
+    { R15,   R16,   R17,   R18,   R19}, \
+}