diff --git a/app/boards/shields/m60/Kconfig.defconfig b/app/boards/shields/m60/Kconfig.defconfig
new file mode 100644
index 00000000..e358a587
--- /dev/null
+++ b/app/boards/shields/m60/Kconfig.defconfig
@@ -0,0 +1,10 @@
+
+if SHIELD_M60
+
+config ZMK_KEYBOARD_NAME
+	default "m60"
+
+config ZMK_KSCAN_MATRIX_POLLING
+	default y
+
+endif
diff --git a/app/boards/shields/m60/Kconfig.shield b/app/boards/shields/m60/Kconfig.shield
new file mode 100644
index 00000000..4ed58c49
--- /dev/null
+++ b/app/boards/shields/m60/Kconfig.shield
@@ -0,0 +1,5 @@
+# Copyright (c) 2020 The ZMK Contributors
+# SPDX-License-Identifier: MIT
+
+config SHIELD_M60
+	def_bool $(shields_list_contains,m60)
diff --git a/app/boards/shields/m60/m60.conf b/app/boards/shields/m60/m60.conf
new file mode 100644
index 00000000..e69de29b
diff --git a/app/boards/shields/m60/m60.keymap b/app/boards/shields/m60/m60.keymap
new file mode 100644
index 00000000..aa0fa75e
--- /dev/null
+++ b/app/boards/shields/m60/m60.keymap
@@ -0,0 +1,26 @@
+#include <behaviors.dtsi>
+#include <dt-bindings/zmk/keys.h>
+#include <dt-bindings/zmk/bt.h>
+
+/ {
+	keymap0: keymap {
+		compatible = "zmk,keymap";
+
+		default_layer {
+// ------------------------------------------------------------------------------------------
+// | ESC |  1  |  2  |  3  |  4  |  5  |  6  |  7  |  8  |  9  |  0  |  -  |  =  |   BKSP   |
+// | TAB  |  Q  |  W  |  E  |  R  |  T  |  Y  |  U  |  I  |  O  |  P  |  [  |  ]  |   "|"   |
+// | CAPS  |  A  |  S  |  D  |  F  |  G  |  H  |  J  |  K  |  L  |  ;  |  '  |     ENTER    |
+// |  SHIFT  |  Z  |  X  |  C  |  V  |  B  |  N  |  M  |  ,  |  .  |  /  |      SHIFT       |
+// |  CTL  |  WIN  |  ALT  |            SPACE               | ALT | MO(1) |  WIN  | CTRL    |
+// ------------------------------------------------------------------------------------------
+			bindings = <
+	&kp ESC &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 &kp MINUS &kp EQL  &kp BKSP
+	&kp TAB  &kp   Q   &kp   W   &kp   E   &kp   R   &kp   T   &kp   Y   &kp   U   &kp   I   &kp   O   &kp   P   &kp LBKT &kp RBKT &kp BSLH
+	&kp CLCK  &kp   A   &kp   S   &kp   D   &kp   F   &kp   G   &kp   H   &kp   J   &kp   K   &kp   L   &kp  SCLN  &kp  QUOT        &kp RET
+	&kp LSFT   &kp   Z   &kp   X   &kp   C   &kp   V   &kp   B   &kp   N   &kp   M   &kp  CMMA &kp  DOT  &kp FSLH      &kp RSFT
+	&kp LCTL &kp   LGUI   &kp   LALT                     &kp SPC                         &kp  RALT  &mo  1  &kp  RGUI  &kp  RCTL
+			>;
+		};
+	};
+};
diff --git a/app/boards/shields/m60/m60.overlay b/app/boards/shields/m60/m60.overlay
new file mode 100644
index 00000000..c20d4525
--- /dev/null
+++ b/app/boards/shields/m60/m60.overlay
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2020 The ZMK Contributors
+ *
+ * SPDX-License-Identifier: MIT
+ */
+#include <dt-bindings/zmk/matrix-transform.h>
+
+/ {
+	chosen {
+		zmk,kscan = &kscan0;
+		zmk,matrix_transform = &default_transform;
+	};
+
+	kscan0: kscan {
+		compatible = "zmk,kscan-gpio-matrix";
+		label = "KSCAN";
+
+		diode-direction = "col2row";
+		row-gpios
+			= <&gpio0 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
+			, <&gpio0 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
+			, <&gpio0 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
+			, <&gpio0 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
+			, <&gpio1 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
+			, <&gpio1 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
+			, <&gpio0 12 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
+			, <&gpio0 11 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
+			;
+		col-gpios
+			= <&gpio0 19 GPIO_ACTIVE_HIGH>
+			, <&gpio0 20 GPIO_ACTIVE_HIGH>
+			, <&gpio0 21 GPIO_ACTIVE_HIGH>
+			, <&gpio0 22 GPIO_ACTIVE_HIGH>
+			, <&gpio0 23 GPIO_ACTIVE_HIGH>
+			, <&gpio0 24 GPIO_ACTIVE_HIGH>
+			, <&gpio0 25 GPIO_ACTIVE_HIGH>
+			, <&gpio0 26 GPIO_ACTIVE_HIGH>
+			;
+	};
+
+	default_transform: keymap_transform_0 {
+		compatible = "zmk,matrix-transform";
+		columns = <8>;
+		rows = <8>;
+// | MX1  | MX2  | MX3  | MX4  | MX5  | MX6  | MX7  | MX8  | MX9  | MX10 | MX11 | MX12 | MX13 |    MX14     |
+// |   MX15   | MX16 | MX17 | MX18 | MX19 | MX20 | MX21 | MX22 | MX23 | MX24 | MX25 | MX26 | MX27 |  MX28   |
+// |    MX29    | MX30 | MX31 | MX32 | MX33 | MX34 | MX35 | MX36 | MX37 | MX38 | MX39 | MX40 |     MX41     |
+// |     MX42      | MX43 | MX44 | MX45 | MX46 | MX47 | MX48 | MX49 | MX50 | MX51 | MX52 |       MX53       |
+// |  MX54  |  MX55  |  MX56  |                  MX57                   |  MX58  |  MX59  |  MX60  |  MX61  |
+        map = <
+RC(0,0)  RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4)     RC(1,5)
+RC(3,3)    RC(3,2) RC(3,1) RC(3,0) RC(2,7) RC(2,6) RC(2,5) RC(2,4) RC(2,3) RC(2,2) RC(2,1) RC(2,0) RC(1,7)   RC(1,6)
+RC(3,4)     RC(3,5) RC(3,6) RC(3,7) RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7)          RC(5,0)
+RC(6,4)       RC(6,3) RC(6,2) RC(6,1) RC(6,0) RC(5,7) RC(5,6) RC(5,5) RC(5,4) RC(5,3) RC(5,2)                RC(5,1)
+RC(6,5)    RC(6,6)   RC(6,7)                     RC(7,0)                    RC(7,1)    RC(7,2)    RC(7,3)    RC(7,4)
+        >;
+	};
+
+	bt_unpair_combo: bt_unpair_combo {
+		compatible = "zmk,bt-unpair-combo";
+		key-positions = <0 53>;
+	};
+
+};
+
diff --git a/app/boards/shields/m60/readme.md b/app/boards/shields/m60/readme.md
new file mode 100644
index 00000000..7eaf226d
--- /dev/null
+++ b/app/boards/shields/m60/readme.md
@@ -0,0 +1,15 @@
+# [Makerdiary M60](https://wiki.makerdiary.com/m60)
+
+A 60% ANSI keyboard designed and manufactured by Makerdiary.
+http://makerdairy.com
+
+## Features
+
+- Per key RGB LED.
+- Uses makerdiary M.2 nRF52840 module
+- Matrix wiring
+
+## Hardware Notes
+
+https://wiki.makerdiary.com/m60/developer_guide/hardware/
+