summaryrefslogtreecommitdiff
path: root/keyboards/xiudi/xd60
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/xiudi/xd60')
-rw-r--r--keyboards/xiudi/xd60/info.json164
-rw-r--r--keyboards/xiudi/xd60/keymaps/Jos/README.md22
-rw-r--r--keyboards/xiudi/xd60/keymaps/Jos/config.h2
-rw-r--r--keyboards/xiudi/xd60/keymaps/Jos/keymap.c202
-rw-r--r--keyboards/xiudi/xd60/keymaps/Jos/rules.mk1
-rw-r--r--keyboards/xiudi/xd60/keymaps/birkir/keymap.c66
-rw-r--r--keyboards/xiudi/xd60/keymaps/birkir/readme.md45
-rw-r--r--keyboards/xiudi/xd60/keymaps/cheese/README.md13
-rw-r--r--keyboards/xiudi/xd60/keymaps/cheese/keymap.c61
-rw-r--r--keyboards/xiudi/xd60/keymaps/crd_ansi/README.md52
-rw-r--r--keyboards/xiudi/xd60/keymaps/crd_ansi/keymap.c30
-rw-r--r--keyboards/xiudi/xd60/keymaps/default/keymap.c26
-rw-r--r--keyboards/xiudi/xd60/keymaps/default/readme.md13
-rw-r--r--keyboards/xiudi/xd60/keymaps/edulpn/keymap.c22
-rw-r--r--keyboards/xiudi/xd60/keymaps/edulpn/readme.md9
-rw-r--r--keyboards/xiudi/xd60/keymaps/edulpn64/keymap.c22
-rw-r--r--keyboards/xiudi/xd60/keymaps/edulpn64/readme.md9
-rwxr-xr-xkeyboards/xiudi/xd60/keymaps/fvolpe83/config.h10
-rwxr-xr-xkeyboards/xiudi/xd60/keymaps/fvolpe83/keymap.c78
-rwxr-xr-xkeyboards/xiudi/xd60/keymaps/fvolpe83/readme.md33
-rwxr-xr-xkeyboards/xiudi/xd60/keymaps/fvolpe83/rules.mk1
-rw-r--r--keyboards/xiudi/xd60/keymaps/iso/keymap.c33
-rw-r--r--keyboards/xiudi/xd60/keymaps/iso/readme.md20
-rw-r--r--keyboards/xiudi/xd60/keymaps/kmontag42/keymap.c44
-rw-r--r--keyboards/xiudi/xd60/keymaps/kmontag42/readme.md18
-rw-r--r--keyboards/xiudi/xd60/keymaps/kmontag42/rules.mk1
-rw-r--r--keyboards/xiudi/xd60/keymaps/krusli/keymap.c22
-rw-r--r--keyboards/xiudi/xd60/keymaps/krusli/readme.md7
-rw-r--r--keyboards/xiudi/xd60/keymaps/melka/.gitignore1
-rw-r--r--keyboards/xiudi/xd60/keymaps/melka/config.h20
-rw-r--r--keyboards/xiudi/xd60/keymaps/melka/keymap.c165
-rw-r--r--keyboards/xiudi/xd60/keymaps/melka/passwd_template.h10
-rw-r--r--keyboards/xiudi/xd60/keymaps/melka/readme.md21
-rw-r--r--keyboards/xiudi/xd60/keymaps/petesmom/README.md26
-rw-r--r--keyboards/xiudi/xd60/keymaps/petesmom/keymap.c28
-rw-r--r--keyboards/xiudi/xd60/keymaps/rooski/instructions.txt2
-rw-r--r--keyboards/xiudi/xd60/keymaps/rooski/keymap.c57
-rw-r--r--keyboards/xiudi/xd60/keymaps/semicolonsnet/keymap.c24
-rw-r--r--keyboards/xiudi/xd60/keymaps/semicolonsnet/readme.md13
-rw-r--r--keyboards/xiudi/xd60/keymaps/split_bksp_arrows/keymap.c34
-rw-r--r--keyboards/xiudi/xd60/keymaps/split_bksp_arrows/readme.md8
-rw-r--r--keyboards/xiudi/xd60/keymaps/stanleylai/keymap.c30
-rw-r--r--keyboards/xiudi/xd60/keymaps/styr/keymap.c56
-rw-r--r--keyboards/xiudi/xd60/keymaps/styr/readme.md7
-rw-r--r--keyboards/xiudi/xd60/keymaps/supercoffee/keymap.c22
-rw-r--r--keyboards/xiudi/xd60/keymaps/supercoffee/readme.md9
-rw-r--r--keyboards/xiudi/xd60/keymaps/suryanisaac/README.md16
-rw-r--r--keyboards/xiudi/xd60/keymaps/suryanisaac/keymap.c29
-rw-r--r--keyboards/xiudi/xd60/keymaps/via/keymap.c35
-rw-r--r--keyboards/xiudi/xd60/keymaps/via/readme.md1
-rw-r--r--keyboards/xiudi/xd60/keymaps/via/rules.mk1
-rw-r--r--keyboards/xiudi/xd60/keymaps/yuuki/README.md31
-rw-r--r--keyboards/xiudi/xd60/keymaps/yuuki/keymap.c28
-rw-r--r--keyboards/xiudi/xd60/readme.md17
-rw-r--r--keyboards/xiudi/xd60/rev2/.noci0
-rw-r--r--keyboards/xiudi/xd60/rev2/config.h71
-rw-r--r--keyboards/xiudi/xd60/rev2/rules.mk28
-rw-r--r--keyboards/xiudi/xd60/rev3/config.h71
-rw-r--r--keyboards/xiudi/xd60/rev3/rules.mk28
-rw-r--r--keyboards/xiudi/xd60/xd60.c33
-rw-r--r--keyboards/xiudi/xd60/xd60.h89
61 files changed, 2037 insertions, 0 deletions
diff --git a/keyboards/xiudi/xd60/info.json b/keyboards/xiudi/xd60/info.json
new file mode 100644
index 0000000000..dbe9a79880
--- /dev/null
+++ b/keyboards/xiudi/xd60/info.json
@@ -0,0 +1,164 @@
+{
+ "keyboard_name": "XD60",
+ "maintainer": "qmk",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":2, "w":1.25}, {"label":"Shift", "x":0, "y":3}, {"x":1, "y":3}, {"label":"Z", "x":2, "y":3}, {"label":"X", "x":3, "y":3}, {"label":"C", "x":4, "y":3}, {"label":"V", "x":5, "y":3}, {"label":"B", "x":6, "y":3}, {"label":"N", "x":7, "y":3}, {"label":"M", "x":8, "y":3}, {"label":"<", "x":9, "y":3}, {"label":">", "x":10, "y":3}, {"label":"?", "x":11, "y":3}, {"label":"Shift", "x":12, "y":3}, {"x":13, "y":3}, {"x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4}, {"label":"Win", "x":11, "y":4}, {"label":"Menu", "x":12, "y":4}, {"label":"Ctrl", "x":13, "y":4}, {"x":14, "y":4}]
+ },
+
+ "LAYOUT_60_ansi": {
+ "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
+ },
+
+ "LAYOUT_60_ansi_split_bs_rshift": {
+ "layout": [
+ {"label":"~", "x":0, "y":0},
+ {"label":"!", "x":1, "y":0},
+ {"label":"@", "x":2, "y":0},
+ {"label":"#", "x":3, "y":0},
+ {"label":"$", "x":4, "y":0},
+ {"label":"%", "x":5, "y":0},
+ {"label":"^", "x":6, "y":0},
+ {"label":"&", "x":7, "y":0},
+ {"label":"*", "x":8, "y":0},
+ {"label":"(", "x":9, "y":0},
+ {"label":")", "x":10, "y":0},
+ {"label":"_", "x":11, "y":0},
+ {"label":"+", "x":12, "y":0},
+ {"label":"BS", "x":13, "y":0, "w":1},
+ {"label":"BS", "x":14, "y":0, "w":1},
+
+ {"label":"Tab", "x":0, "y":1, "w":1.5},
+ {"label":"Q", "x":1.5, "y":1},
+ {"label":"W", "x":2.5, "y":1},
+ {"label":"E", "x":3.5, "y":1},
+ {"label":"R", "x":4.5, "y":1},
+ {"label":"T", "x":5.5, "y":1},
+ {"label":"Y", "x":6.5, "y":1},
+ {"label":"U", "x":7.5, "y":1},
+ {"label":"I", "x":8.5, "y":1},
+ {"label":"O", "x":9.5, "y":1},
+ {"label":"P", "x":10.5, "y":1},
+ {"label":"{", "x":11.5, "y":1},
+ {"label":"}", "x":12.5, "y":1},
+ {"label":"|", "x":13.5, "y":1, "w":1.5},
+
+ {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
+ {"label":"A", "x":1.75, "y":2},
+ {"label":"S", "x":2.75, "y":2},
+ {"label":"D", "x":3.75, "y":2},
+ {"label":"F", "x":4.75, "y":2},
+ {"label":"G", "x":5.75, "y":2},
+ {"label":"H", "x":6.75, "y":2},
+ {"label":"J", "x":7.75, "y":2},
+ {"label":"K", "x":8.75, "y":2},
+ {"label":"L", "x":9.75, "y":2},
+ {"label":":", "x":10.75, "y":2},
+ {"label":"\"", "x":11.75, "y":2},
+ {"label":"Enter", "x":12.75, "y":2, "w":2.25},
+
+ {"label":"Shift", "x":0, "y":3, "w":2.25},
+ {"label":"Z", "x":2.25, "y":3},
+ {"label":"X", "x":3.25, "y":3},
+ {"label":"C", "x":4.25, "y":3},
+ {"label":"V", "x":5.25, "y":3},
+ {"label":"B", "x":6.25, "y":3},
+ {"label":"N", "x":7.25, "y":3},
+ {"label":"M", "x":8.25, "y":3},
+ {"label":"<", "x":9.25, "y":3},
+ {"label":">", "x":10.25, "y":3},
+ {"label":"?", "x":11.25, "y":3},
+ {"label":"Shift", "x":12.25, "y":3, "w":1.75},
+ {"label":"FN", "x":14, "y":3, "w":1},
+
+ {"label":"Ctrl", "x":0, "y":4, "w":1.25},
+ {"label":"Win", "x":1.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":4, "w":1.25},
+ {"x":3.75, "y":4, "w":6.25},
+ {"label":"Alt", "x":10, "y":4, "w":1.25},
+ {"label":"Win", "x":11.25, "y":4, "w":1.25},
+ {"label":"Menu", "x":12.5, "y":4, "w":1.25},
+ {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}
+ ]
+ },
+
+ "LAYOUT_60_iso": {
+ "layout": [{"label":"\u00ac", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"\"", "x":2, "y":0}, {"label":"\u00a3", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"@", "x":11.75, "y":2}, {"label":"~", "x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"|", "x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"GUI", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"label":"Space", "x":3.75, "y":4, "w":6.25}, {"label":"AltGr", "x":10, "y":4, "w":1.25}, {"label":"GUI", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
+ },
+
+ "LAYOUT_60_iso_split_bs_rshift": {
+ "layout": [
+ {"label":"\u00ac", "x":0, "y":0},
+ {"label":"!", "x":1, "y":0},
+ {"label":"\"", "x":2, "y":0},
+ {"label":"\u00a3", "x":3, "y":0},
+ {"label":"$", "x":4, "y":0},
+ {"label":"%", "x":5, "y":0},
+ {"label":"^", "x":6, "y":0},
+ {"label":"&", "x":7, "y":0},
+ {"label":"*", "x":8, "y":0},
+ {"label":"(", "x":9, "y":0},
+ {"label":")", "x":10, "y":0},
+ {"label":"_", "x":11, "y":0},
+ {"label":"+", "x":12, "y":0},
+ {"label":"BS", "x":13, "y":0, "w":1},
+ {"label":"BS", "x":14, "y":0, "w":1},
+
+ {"label":"Tab", "x":0, "y":1, "w":1.5},
+ {"label":"Q", "x":1.5, "y":1},
+ {"label":"W", "x":2.5, "y":1},
+ {"label":"E", "x":3.5, "y":1},
+ {"label":"R", "x":4.5, "y":1},
+ {"label":"T", "x":5.5, "y":1},
+ {"label":"Y", "x":6.5, "y":1},
+ {"label":"U", "x":7.5, "y":1},
+ {"label":"I", "x":8.5, "y":1},
+ {"label":"O", "x":9.5, "y":1},
+ {"label":"P", "x":10.5, "y":1},
+ {"label":"{", "x":11.5, "y":1},
+ {"label":"}", "x":12.5, "y":1},
+
+ {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
+ {"label":"A", "x":1.75, "y":2},
+ {"label":"S", "x":2.75, "y":2},
+ {"label":"D", "x":3.75, "y":2},
+ {"label":"F", "x":4.75, "y":2},
+ {"label":"G", "x":5.75, "y":2},
+ {"label":"H", "x":6.75, "y":2},
+ {"label":"J", "x":7.75, "y":2},
+ {"label":"K", "x":8.75, "y":2},
+ {"label":"L", "x":9.75, "y":2},
+ {"label":":", "x":10.75, "y":2},
+ {"label":"@", "x":11.75, "y":2},
+ {"label":"~", "x":12.75, "y":2},
+ {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2},
+
+ {"label":"Shift", "x":0, "y":3, "w":1.25},
+ {"label":"|", "x":1.25, "y":3},
+ {"label":"Z", "x":2.25, "y":3},
+ {"label":"X", "x":3.25, "y":3},
+ {"label":"C", "x":4.25, "y":3},
+ {"label":"V", "x":5.25, "y":3},
+ {"label":"B", "x":6.25, "y":3},
+ {"label":"N", "x":7.25, "y":3},
+ {"label":"M", "x":8.25, "y":3},
+ {"label":"<", "x":9.25, "y":3},
+ {"label":">", "x":10.25, "y":3},
+ {"label":"?", "x":11.25, "y":3},
+ {"label":"Shift", "x":12.25, "y":3, "w":1.75},
+ {"label":"FN", "x":14, "y":3, "w":1},
+
+ {"label":"Ctrl", "x":0, "y":4, "w":1.25},
+ {"label":"GUI", "x":1.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":4, "w":1.25},
+ {"label":"Space", "x":3.75, "y":4, "w":6.25},
+ {"label":"AltGr", "x":10, "y":4, "w":1.25},
+ {"label":"GUI", "x":11.25, "y":4, "w":1.25},
+ {"label":"Menu", "x":12.5, "y":4, "w":1.25},
+ {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/xiudi/xd60/keymaps/Jos/README.md b/keyboards/xiudi/xd60/keymaps/Jos/README.md
new file mode 100644
index 0000000000..b4382acfeb
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/Jos/README.md
@@ -0,0 +1,22 @@
+# Jos's Layout
+
+Custom layout with various options. Designed to be used with the Canadian Multilingual software layout.
+
+## Layout
+This is the physical layout of my xd60, for reference. See the keymap file for actual software layout.
+![Keyboard Layout (Physical appearence)](https://i.imgur.com/qzOmqyq.png "Physical Layout")
+
+## Features
+**Caps Lock** is **Escape** and the **Window key** is a **Function** key that still acts like the **Window** key in conjuction with `w`, `s`, `d`, `l`, `t`, `e`, `h`, and `SPACE`.
+
+There are a few `#define` lines at the beginning of the keymap file that enable the following options if not commented:
+- `ISOLIKE_ALT_ENTER`: `RALT` + `ENT` is the same as `RALT`+`BSLS`. For logical placement of `{` and `}` (the former being `RALT`+`BSLS`) with ANSI enter on a ISO-based layout.
+- `TWO_SFT_CAPS`: Both shifts together → Caps Lock.
+- `APP_IS_RALT_RCTRL`: Menu would be between `RCTRL` and `RALT`, so now `RALT` + `RCTRL` → `APP`.
+- `HELD_ESC_IS_SHIFT`: Holding `ESC` → `SHIFT`. It always register shift when pressing `ESC`. Useful for VIM.
+- `BSPC_BLOCKS_DEL`: If `BSPC` is held, we disable `DEL`. To avoid acidental presses of `DEL` with split backspace key.
+- `ALT_MINSEQL_IS_ALT_78`: Pressing `ALT+MINS/EQL` will act like `ALT+7/8`. Will yield `{}` instead of `½¬` in Canadian Multilingual Layout. Diminished finger stretching.
+
+
+# Build
+To build, simply run `make xd60:Jos`
diff --git a/keyboards/xiudi/xd60/keymaps/Jos/config.h b/keyboards/xiudi/xd60/keymaps/Jos/config.h
new file mode 100644
index 0000000000..a3b0cd1ec0
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/Jos/config.h
@@ -0,0 +1,2 @@
+/* Delay for tap/hold for tap dance commands */
+#define TAPPING_TERM 150
diff --git a/keyboards/xiudi/xd60/keymaps/Jos/keymap.c b/keyboards/xiudi/xd60/keymaps/Jos/keymap.c
new file mode 100644
index 0000000000..c57f634f2b
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/Jos/keymap.c
@@ -0,0 +1,202 @@
+#include QMK_KEYBOARD_H
+#include "action_layer.h"
+
+// TODO: THOSE ARE IDEAS:
+// TODO:
+// TODO: - Proper support for "GUI+TAB" application switching, with the GUI holding and shift, etc.
+// TODO: - Maybe implement a process_record instead of a tap-dance, or complex tap dance?
+// TODO: - Media keys on Fn1 layer, *hjklm,.* or arrow cluster?
+// TODO: - What more than NumPad + RGB on the Fn3 toggled layer?
+// TODO: - Add an in-keymap way to toggle LGUI/F(0) key, HELD_ESC_IS_SHIFT and BSPC_BLOCKS_DEL.
+// TODO:
+// TODO: THOSE ARE BUGS TO FIX:
+// TODO: - None (found so far)
+
+// Adjusting process_record_user functionnalities, comment to disable.
+#define ISOLIKE_ALT_ENTER
+#define TWO_SFT_CAPS
+#define APP_IS_RALT_RCTRL
+#define HELD_ESC_IS_SHIFT
+#define BSPC_BLOCKS_DEL
+#define ALT_MINSEQL_IS_ALT_78
+
+// Cases where the GUI key will actually do what the GUI key normally does.
+#define AC_G_W LGUI(KC_W) // Ubuntu: Shows windows on current desktop
+#define AC_G_S LGUI(KC_S) // Ubuntu: Overview of all desktops
+#define AC_G_D LGUI(KC_D) // Windows: Show/Toggle desktop
+#define AC_G_L LGUI(KC_L) // Ubuntu/Windows: Lock session
+#define AC_G_T LGUI(KC_T) // Ubuntu: Shows Trash // elementary: Opens terminal
+#define AC_G_E LGUI(KC_E) // Windows: Opens file explorer
+#define AC_G_H LGUI(KC_H) // Windows: Show/Hide hidden files
+#define AC_G_SPC LGUI(KC_SPC) // elementary: Shows application launcher
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ // 0: Base Layer
+ LAYOUT_all(
+ KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, \
+ KC_LSFT, KC_LGUI, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, MO(1), \
+ KC_LCTL, TD(0), KC_LALT, KC_SPC , KC_RALT, KC_RCTRL, KC_LEFT, KC_DOWN, KC_RIGHT),
+
+ // 1: Function 1 Layers
+ LAYOUT_all(
+ RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PAUS, KC_PSCR, \
+ KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_MPRV, KC_MNXT, KC_MSTP, KC_TRNS, KC_NO, KC_TRNS, \
+ KC_TRNS, TG(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, KC_PGUP, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDOWN, KC_END),
+
+ // 2: GUI/Function 2 Layer
+ LAYOUT_all(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PAUS, KC_PSCR, \
+ KC_TRNS, KC_TRNS, AC_G_W, AC_G_E, KC_TRNS, AC_G_T, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, AC_G_S, AC_G_D, KC_TRNS, KC_TRNS, AC_G_H, KC_TRNS, KC_TRNS, AC_G_L, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, AC_G_SPC, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDOWN, KC_END),
+
+ // 3: NumPad/Function 3 Toggle Layer
+ LAYOUT_all(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_7, KC_8, KC_9, KC_PSLS, KC_PMNS, KC_PPLS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_NO, KC_NO, RGB_HUI, RGB_SAI, RGB_VAI, KC_NO, KC_4, KC_5, KC_6, KC_PAST, KC_NO, KC_NO, KC_NO, \
+ KC_TRNS, KC_NO, KC_NO, RGB_HUD, RGB_SAD, RGB_VAD, KC_NO, KC_1, KC_2, KC_3, KC_PMNS, KC_PENT, KC_NO, KC_TRNS, \
+ KC_NO, KC_TRNS, KC_NO, KC_NO, RGB_TOG, RGB_MOD, KC_NO, KC_NO, KC_0, KC_COMM, KC_DOT, KC_PPLS, KC_NO, KC_TRNS, KC_TRNS, \
+ KC_NO, KC_TRNS, KC_NO, KC_TRNS, KC_PENT, KC_PENT, KC_TRNS, KC_TRNS, KC_TRNS) ,
+
+// TRaNSparent layer for reference
+/* LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), */
+};
+
+// LGUI acts as F(1) if held or as a tapped LGUI if tapped. Adapted from https://goo.gl/WnqGNS
+// Commented lines are for the "sticky" layer on two presses. Left it here for reference.
+static const int GUILAY = 2; // GUI Layer is layer #2
+
+typedef struct {
+ bool layer_toggle;
+ bool sticky;
+} td_ta_state_t;
+
+static void ang_tap_dance_ta_finished (qk_tap_dance_state_t *state, void *user_data) {
+ td_ta_state_t *td_ta = (td_ta_state_t *) user_data;
+
+// if (td_ta->sticky) {
+// td_ta->sticky = false;
+// td_ta->layer_toggle = false;
+// layer_off (GUILAY);
+// return;
+// }
+//
+ if (state->count == 1 && !state->pressed) {
+ register_code (KC_LGUI);
+// td_ta->sticky = false;
+ td_ta->layer_toggle = false;
+ } else {
+ td_ta->layer_toggle = true;
+ layer_on(GUILAY);
+// td_ta->sticky = (state->count == 2);
+ }
+}
+
+// Added this one to make it more reactive on keyup
+static void ang_tap_dance_ta_each (qk_tap_dance_state_t *state, void *user_data) {
+ td_ta_state_t *td_ta = (td_ta_state_t *) user_data;
+
+ if (!td_ta->layer_toggle) { // Braces added for clarity
+ unregister_code (KC_LGUI);
+ }
+}
+
+
+static void ang_tap_dance_ta_reset (qk_tap_dance_state_t *state, void *user_data) {
+ td_ta_state_t *td_ta = (td_ta_state_t *) user_data;
+
+ if (!td_ta->layer_toggle) { // Braces added for clarity
+ unregister_code (KC_LGUI);
+ }
+// if (!td_ta->sticky)
+ layer_off (GUILAY); // We don't verify it was swithed on, switching off regardless
+}
+
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [0] = {
+ .fn = { ang_tap_dance_ta_each, ang_tap_dance_ta_finished, ang_tap_dance_ta_reset },
+ .user_data = (void *)&((td_ta_state_t) { false, false })
+ }
+};
+
+#if defined ISOLIKE_ALT_ENTER || defined TWO_SFT_CAPS || defined APP_IS_RALT_RCTRL || defined ALT_MINSEQL_IS_ALT_78
+// Function for the special modifiers actions below, makes it cleaner and yields smaller firmware.
+static bool special_mods(uint16_t keycode, keyrecord_t *record, uint16_t modifier) {
+ if (record->event.pressed && (keyboard_report->mods & MOD_BIT(modifier))) {
+ register_code(keycode);
+ return false;
+ } else {
+ unregister_code(keycode);
+ return true;
+ }
+}
+#endif
+
+#ifdef BSPC_BLOCKS_DEL
+static bool del_blocked = false; // Static as to not be defined elsewhere
+#endif
+
+// This function is processed before the key events on each key press/release.
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode){
+ #ifdef ISOLIKE_ALT_ENTER
+ // RALT + ENT is the same as RALT+BSLS.
+ // For logical placement of *{* and *}* (the former being RALT+BSLS) with ANSI enter on
+ // ISO-based Canadian Multilingual layout (or any other ISO layout on ANSI keyboards).
+ case KC_ENT: return special_mods(KC_BSLS, record, KC_RALT); // RALT + ENT -> RALT + BSLS // See comment above
+ #endif
+ #ifdef TWO_SFT_CAPS
+ case KC_LSFT: return special_mods(KC_CAPS, record, KC_RSFT); // Both shifts together -> Caps Lock // RSFT pressed first case
+ case KC_RSFT: return special_mods(KC_CAPS, record, KC_LSFT); // Both shifts together -> Caps Lock // LSFT pressed first case
+ #endif
+ #ifdef APP_IS_RALT_RCTRL
+ case KC_RCTRL: return special_mods(KC_APP, record, KC_RALT); // RALT + RCTRL -> APP // RCTRL pressed first case
+ case KC_RALT: return special_mods(KC_APP, record, KC_RCTRL); // RALT + RCTRL -> APP // RALT pressed first case
+ #endif
+ #ifdef ALT_MINSEQL_IS_ALT_78
+ case KC_MINS: return special_mods(KC_7, record, KC_RALT); // RALT + MINS -> RALT+7 // {} in CAN Mult. softawre layout
+ case KC_EQL: return special_mods(KC_8, record, KC_RALT); // RALT + EQL -> RALT+8 // ½¬ normally... Less finger stretch.
+ #endif
+ #ifdef HELD_ESC_IS_SHIFT
+ case KC_ESC: // Physically *ESC* is *CAPS* // Holding ESC -> SHIFT (0 delay) // Less awkward *<ESC>:wq* in vim
+ if (record->event.pressed) {
+ register_code(KC_ESC); // Tapping ESC
+ unregister_code(KC_ESC);
+ register_code(KC_LSFT); // Holding LSFT
+ return false;
+ } else {
+ unregister_code(KC_LSFT); // Releasing LSFT
+ return false;
+ }
+ #endif
+ #ifdef BSPC_BLOCKS_DEL
+ // If BSPC is held, we flag DEL as disabled. To avoids acidental presses of DEL with split backspace key.
+ case KC_BSPC:
+ del_blocked = record->event.pressed;
+ return true;
+ // We don't handle DEL if it is pressed and flagged as disabled
+ case KC_DEL:
+ if (del_blocked && record->event.pressed) {
+ return false;
+ } else {
+ return true;
+ }
+ #endif
+ default: return true; // Let QMK handle the rest as usual
+ }
+}
+
+
diff --git a/keyboards/xiudi/xd60/keymaps/Jos/rules.mk b/keyboards/xiudi/xd60/keymaps/Jos/rules.mk
new file mode 100644
index 0000000000..7af3f44b9a
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/Jos/rules.mk
@@ -0,0 +1 @@
+TAP_DANCE_ENABLE = yes # Enables Tap Dance
diff --git a/keyboards/xiudi/xd60/keymaps/birkir/keymap.c b/keyboards/xiudi/xd60/keymaps/birkir/keymap.c
new file mode 100644
index 0000000000..fe7cd60662
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/birkir/keymap.c
@@ -0,0 +1,66 @@
+#include QMK_KEYBOARD_H
+#include "action_layer.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ // 0: Base Layer
+ LAYOUT_all(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_GRV, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, \
+ KC_LSFT, KC_SLSH, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_NO, KC_RSFT, KC_UP, TG(2), \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RGUI, MO(1), KC_LEFT, KC_DOWN, KC_RIGHT
+ ),
+
+ // 1: Function Layer
+ LAYOUT_all(
+ KC_GRAVE, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, BL_DEC, BL_INC, KC_F13, KC_F14, \
+ KC_NO, KC_WH_U, KC_UP, KC_WH_D, KC_BSPC,KC_HOME,KC_CALC,KC_NO, KC_INS, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_DEL, \
+ KC_NO, KC_LEFT, KC_DOWN, KC_RIGHT,KC_DEL, KC_END, KC_PGDN,KC_NO, KC_NO, KC_NO, KC_HOME, KC_PGUP, KC_NO, KC_ENT, \
+ KC_LSFT, KC_NO, KC_NO, KC_APP, BL_STEP,KC_NO, KC_NO, KC_VOLD,KC_VOLU,KC_MUTE, KC_END, KC_PGDN, KC_RSFT, KC_PGUP, TG(2), \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RGUI, MO(1), KC_HOME, KC_PGDOWN,KC_END
+ ),
+
+ // 2: Cool Layer
+ LAYOUT_all(
+ RESET, BL_DEC, BL_INC, BL_ON, BL_OFF, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, RGB_MODE_PLAIN, KC_TRNS, \
+ KC_NO, KC_WH_U, KC_UP, KC_WH_D, KC_BSPC,KC_HOME,KC_CALC,KC_NO, KC_INS, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_DEL, \
+ KC_NO, KC_LEFT, KC_DOWN, KC_RIGHT,KC_DEL, KC_END, KC_PGDN,KC_NO, KC_NO, KC_NO, KC_HOME, KC_PGUP, KC_NO, KC_ENT, \
+ KC_LSFT, KC_NO, KC_NO, KC_APP, BL_STEP,KC_NO, KC_NO, KC_VOLD,KC_VOLU,KC_MUTE, KC_END, KC_PGDN, KC_RSFT, KC_PGUP, TG(2), \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RGUI, MO(1), KC_HOME, KC_PGDOWN,KC_END
+ )
+};
+
+bool edit = false;
+uint32_t mode;
+uint16_t hue;
+uint8_t sat;
+uint8_t val;
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+
+ if (state == 0 && edit == true) {
+ mode = rgblight_get_mode();
+ hue = rgblight_get_hue();
+ sat = rgblight_get_sat();
+ val = rgblight_get_val();
+ edit = false;
+ }
+
+ switch (biton32(state)) {
+ case 1:
+ rgblight_mode(1);
+ rgblight_setrgb(0xD3, 0x7F, 0xED);
+ break;
+ case 2:
+ rgblight_mode(1);
+ rgblight_setrgb(0xFF, 0x00, 0x00);
+ edit = true;
+ break;
+ default:
+ rgblight_mode(mode);
+ rgblight_sethsv(hue, sat, val);
+ break;
+ }
+ return state;
+}
diff --git a/keyboards/xiudi/xd60/keymaps/birkir/readme.md b/keyboards/xiudi/xd60/keymaps/birkir/readme.md
new file mode 100644
index 0000000000..670b6bb314
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/birkir/readme.md
@@ -0,0 +1,45 @@
+# Birkir's Keymap for XIUDI's 60% XD60 PCB
+
+Custom layout with some custom layers. Mac friendly.
+
+## Layout
+![Birkir's Layout](https://i.imgur.com/I69AYG1.png)
+
+### Layer 0
+Base layer as shown on layout above
+
+### Layer 1
+Active while pressing and holding `MENU`
+
+RGB is purple while active
+
+- `ESC` is `~`
+
+### Layer 2
+Toggled on and off with `FN`
+
+RGB is red while active
+
+RGB settings are persisted for layer 0 when done.
+
+ - `1` Backlight DEC
+ - `2` Backlight INC
+ - `3` Backlight OFF
+ - `4` Backlight ON
+ - `5` RGB Toggle
+ - `6` RGB Mode
+ - `7` RGB Hue DEC (-)
+ - `8` RGB Hue INC (+)
+ - `9` RGB Saturation DEC (-)
+ - `0` RGB Saturation INC (+)
+ - `-/_` RGB Brightness DEC (-)
+ - `+/=` RGB Brightness INC (+)
+ - `BACKSPACE` RGB Mode set to PLAIN
+
+## TODO
+
+- Mac shortcuts on Layer 1
+- More dynamic keyboard configuration on Layer 2
+
+## Build
+To build the default keymap, simply run `make xd60:birkir`.
diff --git a/keyboards/xiudi/xd60/keymaps/cheese/README.md b/keyboards/xiudi/xd60/keymaps/cheese/README.md
new file mode 100644
index 0000000000..04ff5c4219
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/cheese/README.md
@@ -0,0 +1,13 @@
+# cheese's Layout
+Customized xd60 keymap
+
+![Base Layout](https://i.imgur.com/oSg0DPf.png "Base Layout")
+![Fn Layout](https://i.imgur.com/kOOQgVx.png "Fn Layout")
+
+## Programming Instructions:
+`cd` into keymap directory, `make dfu`
+
+## Features
+- Media keys and movement keys setup like on the pok3r
+- Lower right movement keys setup like on the fc660m (fn+direction for home/end/page up and down)
+- Caps lock can be triggered by pressing both shift keys at the same time (and deactivated the same way)
diff --git a/keyboards/xiudi/xd60/keymaps/cheese/keymap.c b/keyboards/xiudi/xd60/keymaps/cheese/keymap.c
new file mode 100644
index 0000000000..2ffd3bb5c3
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/cheese/keymap.c
@@ -0,0 +1,61 @@
+#include QMK_KEYBOARD_H
+#include "action_layer.h"
+
+// Each layer gets a name for readability.
+// The underscores don't mean anything - you can
+// have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same
+// length, and you can also skip them entirely
+// and just use numbers.
+#define _BL 0
+#define _FL 1
+#define _LS 2
+#define _RS 3
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* (Base Layer) Default Layer
+ * ,-----------------------------------------------------------.
+ * |Esc~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |
+ * |-----------------------------------------------------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ |
+ * |-----------------------------------------------------------|
+ * |FUNCTION| A| S| D| F| G| H| J| K| L| ;| '|Return|
+ * |-----------------------------------------------------------|
+ * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |
+ * |-----------------------------------------------------------|
+ * |Ctrl|Gui |Alt | Space |FN|Left|Up|Down|Right|
+ * `-----------------------------------------------------------'
+ */
+ [_BL] = LAYOUT_all(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
+ MO(_FL), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, \
+ LM(_LS, MOD_LSFT), KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, LM(_RS, MOD_RSFT), LM(_RS, MOD_RSFT), LM(_RS, MOD_RSFT), \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(_FL), KC_LEFT, KC_UP, KC_DOWN, KC_RIGHT),
+
+// Function Layer
+ [_FL] = LAYOUT_all(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL, \
+ KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_CALC, KC_INS, KC_PGUP, KC_UP, KC_PGDN, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, \
+ KC_TRNS, KC_VOLD, KC_MUTE, KC_VOLU, KC_TRNS, KC_TRNS, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_APP, KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_PGDN, KC_END),
+
+// Left Shift Layer
+ [_LS] = LAYOUT_all(
+ KC_GRV, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_CAPS, KC_CAPS, KC_CAPS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+// Right Shift Layer
+ [_RS] = LAYOUT_all(
+ KC_GRV, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+};
diff --git a/keyboards/xiudi/xd60/keymaps/crd_ansi/README.md b/keyboards/xiudi/xd60/keymaps/crd_ansi/README.md
new file mode 100644
index 0000000000..80e4550249
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/crd_ansi/README.md
@@ -0,0 +1,52 @@
+# ANSI Layout
+
+This is the standard ANSI keymap that I use on all of my 60% boards. This keymap
+includes a single function layer available by holding the designated key on the
+bottom row.
+
+I don't ever use Caps Lock, so that keycode is not mapped anywhere. In place of
+the usual Caps Lock key, I have the following bnehaviour encoded: Escape when tapped
+and Control when held.
+
+I also have the bottom right mod cluster mapped to navigational direction keys when tapped.
+Shift = Up, Alt = Down, Ctrl = Right, Fn = Left. When held, these keys send the usual modifier
+signals.
+
+```
+/* Base layer
+ * ,-----------------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Backspace |
+ * |-----------------------------------------------------------------------------------------+
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ |
+ * |-----------------------------------------------------------------------------------------+
+ * | Esc/Ctrl| A | S | D | F | G | H | J | K | L | ; | ' | Enter |
+ * |-----------------------------------------------------------------------------------------+
+ * | Shift | Z | X | C | V | B | N | M | , | . | ? | Shift |
+ * |-----------------------------------------------------------------------------------------+
+ * | Ctrl | Alt | Cmd | Space | Cmd | Fn | Alt | Ctrl |
+ * `-----------------------------------------------------------------------------------------'
+ */
+```
+
+While holding the function key, you have access to the following layout. Any key
+not indicated is considered "transparent" and sends the signal indicated in the
+layer below. This function later gets you dedicated access to Escape and Delete
+keys, function keys on numbers, WASD directions, other navigation, multimedia
+controls, RGB (underglow) controls, and firmware reset (DFU mode).
+
+```
+/* Fn layer
+ * ,-----------------------------------------------------------------------------------------.
+ * | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Del |
+ * |-----------------------------------------------------------------------------------------+
+ * | | Home| Up | End | | | | | Mute| | | Pg+ | Pg- | Reset |
+ * |-----------------------------------------------------------------------------------------+
+ * | | Left| Down|Right| | | |Brt- |Vol- |Vol+ |Brt+ | | RGB Toggle |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | | | | | |R(Bt-)|R(Bt+)|R(Rot)| |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | | | | | |
+ * `-----------------------------------------------------------------------------------------'
+ */
+
+``` \ No newline at end of file
diff --git a/keyboards/xiudi/xd60/keymaps/crd_ansi/keymap.c b/keyboards/xiudi/xd60/keymaps/crd_ansi/keymap.c
new file mode 100644
index 0000000000..6964ca3158
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/crd_ansi/keymap.c
@@ -0,0 +1,30 @@
+#include QMK_KEYBOARD_H
+
+enum keyboard_layers {
+ _BL = 0, // Base Layer
+ _FL // Function Layer
+};
+
+// Custom #defined keycodes (shorter macros for readability)
+#define KC_CTES CTL_T(KC_ESC)
+#define KC_RSUP RSFT_T(KC_UP)
+#define KC_FNLT LT(_FL, KC_LEFT)
+#define KC_RADN RALT_T(KC_DOWN)
+#define KC_RCRT RCTL_T(KC_RIGHT)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BL] = LAYOUT_60_ansi(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CTES, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSUP,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_FNLT, KC_RADN, KC_RCRT
+ ),
+ [_FL] = LAYOUT_60_ansi(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ _______, KC_HOME, KC_UP, KC_END, _______, _______, _______, _______, KC_MUTE, _______, _______, KC_PGDN, KC_PGUP, RESET,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, KC_SLCK, KC_VOLD, KC_VOLU, KC_PAUS, _______, _______, RGB_TOG,
+ _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAD, RGB_VAI, RGB_MOD, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/xiudi/xd60/keymaps/default/keymap.c b/keyboards/xiudi/xd60/keymaps/default/keymap.c
new file mode 100644
index 0000000000..9233f99ba9
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/default/keymap.c
@@ -0,0 +1,26 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ // 0: Base Layer
+ LAYOUT_all(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_GRV, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, \
+ KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_DEL, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RGUI, MO(1), KC_LEFT, KC_DOWN, KC_RIGHT),
+
+ // 1: Function Layer
+ LAYOUT_all(
+ RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_F14, \
+ KC_NO, KC_WH_U, KC_UP, KC_WH_D, KC_BSPC,KC_HOME,KC_CALC,KC_NO, KC_INS, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_DEL, \
+ KC_NO, KC_LEFT, KC_DOWN, KC_RIGHT,KC_DEL, KC_END, KC_PGDN,KC_NO, KC_NO, KC_NO, KC_HOME, KC_PGUP, KC_NO, KC_ENT, \
+ KC_LSFT, KC_NO, KC_NO, KC_APP, BL_STEP,KC_NO, KC_NO, KC_VOLD,KC_VOLU,KC_MUTE, KC_END, KC_PGDN, KC_RSFT, KC_PGUP, KC_INS, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RGUI, MO(1), KC_HOME, KC_PGDOWN,KC_END),
+
+};
+
+// Loop
+void matrix_scan_user(void) {
+ // Empty
+};
diff --git a/keyboards/xiudi/xd60/keymaps/default/readme.md b/keyboards/xiudi/xd60/keymaps/default/readme.md
new file mode 100644
index 0000000000..7d6bc75365
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/default/readme.md
@@ -0,0 +1,13 @@
+# Default Keymap for XIUDI's 60% XD60 PCB
+
+![Default Keymap for XD60](https://img.alicdn.com/imgextra/i1/1713761720/TB2K0gTalPxQeBjy1XcXXXHzVXa_!!1713761720.png)
+
+## Additional Notes
+Default Keymap for XD60 as indicated on the original sale page.
+
+## Build
+
+To build the default keymap, simply run:
+
+ make xd60/rev2:default # XD60 rev2
+ make xd60/rev3:default # XD60 rev3
diff --git a/keyboards/xiudi/xd60/keymaps/edulpn/keymap.c b/keyboards/xiudi/xd60/keymaps/edulpn/keymap.c
new file mode 100644
index 0000000000..e064dfb68d
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/edulpn/keymap.c
@@ -0,0 +1,22 @@
+#include QMK_KEYBOARD_H
+#include "action_layer.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ // 0: Base Layer
+ LAYOUT_all(
+ 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_NO, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, \
+ KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_RSHIFT, KC_NO, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_NO, KC_RGUI, KC_RCTL),
+
+ // 1: Function Layer
+ LAYOUT_all(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_NO, \
+ KC_NO, KC_NO, KC_UP, KC_NO, KC_INSERT, KC_HOME, KC_PGUP, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, KC_NO, KC_NO, KC_NO, \
+ KC_NO, KC_LEFT, KC_DOWN, KC_RIGHT, KC_DEL, KC_END, KC_PGDN, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_NO, KC_NO, KC_ENT, \
+ KC_LSFT, KC_NO, KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLD, KC_VOLU, KC_MUTE, KC_NO, KC_NO, KC_NO, KC_NO, KC_RSFT, KC_NO, KC_NO, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_NO, KC_RGUI, KC_RCTL),
+
+};
diff --git a/keyboards/xiudi/xd60/keymaps/edulpn/readme.md b/keyboards/xiudi/xd60/keymaps/edulpn/readme.md
new file mode 100644
index 0000000000..14f7da063d
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/edulpn/readme.md
@@ -0,0 +1,9 @@
+# Edulpn Keymap for the XD60 PCB
+
+## Additional Notes
+60% Keymap for XD60 with GH60 ANSI layout (based on Supercoffe's keymap) + customized Fn layer.
+
+![Edulpn Keymap for the XD60 PCB](https://i.imgur.com/PoL5qcr.png)
+
+## Build
+To build the default keymap, simply run `make xd60:edulpn`.
diff --git a/keyboards/xiudi/xd60/keymaps/edulpn64/keymap.c b/keyboards/xiudi/xd60/keymaps/edulpn64/keymap.c
new file mode 100644
index 0000000000..189fcde176
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/edulpn64/keymap.c
@@ -0,0 +1,22 @@
+#include QMK_KEYBOARD_H
+#include "action_layer.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ // 0: Base Layer
+ LAYOUT_all(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, \
+ KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_DEL, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
+
+ // 1: Function Layer
+ LAYOUT_all(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSPC, KC_BSPC, \
+ KC_TAB, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PSCR,KC_SLCK,KC_PAUS, RGB_RMOD,RGB_MOD, RGB_VAD, RGB_VAI, \
+ KC_CAPS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_INS, KC_HOME,KC_PGUP, RGB_HUD, RGB_HUI, KC_NO, KC_ENT, \
+ KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_END, KC_PGDN, KC_NO, KC_RSFT, KC_UP, KC_DEL, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RCTRL, KC_LEFT, KC_DOWN, KC_RIGHT),
+
+};
diff --git a/keyboards/xiudi/xd60/keymaps/edulpn64/readme.md b/keyboards/xiudi/xd60/keymaps/edulpn64/readme.md
new file mode 100644
index 0000000000..a3208564a0
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/edulpn64/readme.md
@@ -0,0 +1,9 @@
+# Edulpn64 Keymap for XIUDI's 60% XD60 PCB
+
+![Edulpn64 Keymap for XD60](https://dl2.pushbulletusercontent.com/K6bdlBlP5ix7jdMAr8QKes4johmpUfPI/image.png)
+
+## Additional Notes
+This keymap uses the Default XD60 base layer, but follows the GK64 function layer (one of my XD60 boards use GK64 keycaps).
+
+## Build
+To build the default keymap, simply run `make xd60:edulpn64`.
diff --git a/keyboards/xiudi/xd60/keymaps/fvolpe83/config.h b/keyboards/xiudi/xd60/keymaps/fvolpe83/config.h
new file mode 100755
index 0000000000..b26b00b189
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/fvolpe83/config.h
@@ -0,0 +1,10 @@
+#pragma once
+
+/* Changes the number of taps required for layer toggle*/
+#define TAPPING_TOGGLE 3
+
+/* The RGB lighting will be switched off when the host goes to sleep */
+#define RGBLIGHT_SLEEP
+
+// lighting layers
+#define RGBLIGHT_LAYERS
diff --git a/keyboards/xiudi/xd60/keymaps/fvolpe83/keymap.c b/keyboards/xiudi/xd60/keymaps/fvolpe83/keymap.c
new file mode 100755
index 0000000000..0a18678dcc
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/fvolpe83/keymap.c
@@ -0,0 +1,78 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_all(
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_NO,
+ MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_RSFT, KC_PSCR,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_APP, KC_NO, TT(1), KC_RCTL),
+
+ [1] = LAYOUT_all(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_DEL,
+ KC_TAB, KC_INS, KC_DEL, KC_UP, KC_PGUP, KC_PGDN, KC_NO, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_TRNS, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_NO, KC_NO, KC_NO, KC_ENT,
+ KC_LSFT, KC_PSCR, KC_NO, KC_HOME, KC_END, KC_NO, KC_NO, KC_NO, KC_MS_BTN3, KC_NO, KC_NO, KC_NO, KC_NO, KC_RSFT, MO(2),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_APP, KC_NO, KC_TRNS, KC_RCTL),
+
+ [2] = LAYOUT_all(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RESET,
+ KC_NO, BL_TOGG, BL_STEP, BL_ON, BL_OFF, BL_INC, BL_DEC, BL_BRTG, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, RGB_TOG, RGB_MOD, RGB_RMOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, RGB_SPI, RGB_SPD, KC_NO, KC_NO,
+ KC_NO, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, RGB_M_K, RGB_M_X, RGB_M_G, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO)
+};
+
+const rgblight_segment_t PROGMEM my_0_layer[] = RGBLIGHT_LAYER_SEGMENTS(
+ {0, 6, HSV_CYAN},
+ {6, 6, HSV_BLUE}
+);
+
+const rgblight_segment_t PROGMEM my_1_layer[] = RGBLIGHT_LAYER_SEGMENTS(
+ {1, 4, HSV_GREEN},
+ {7, 4, HSV_GREEN}
+);
+const rgblight_segment_t PROGMEM my_2_layer[] = RGBLIGHT_LAYER_SEGMENTS(
+ {1, 4, HSV_PURPLE},
+ {7, 4, HSV_PURPLE}
+);
+
+const rgblight_segment_t PROGMEM my_caps_layer[] = RGBLIGHT_LAYER_SEGMENTS(
+ {0, 1, HSV_RED},
+ {5, 1, HSV_RED},
+ {6, 1, HSV_RED},
+ {11, 1, HSV_RED}
+);
+
+// Now define the array of layers. Later layers take precedence
+const rgblight_segment_t* const PROGMEM my_layers[] = RGBLIGHT_LAYERS_LIST(
+ my_0_layer,
+ my_1_layer,
+ my_2_layer,
+ my_caps_layer
+);
+
+void keyboard_post_init_user(void) {
+ // Enable the LED layers
+ rgblight_layers = my_layers;
+ layer_state_set_user(layer_state);
+};
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ rgblight_set_layer_state(0, layer_state_cmp(state, 0));
+ rgblight_set_layer_state(1, layer_state_cmp(state, 1));
+ rgblight_set_layer_state(2, layer_state_cmp(state, 2));
+ return state;
+};
+
+ bool led_update_user(led_t led_state) {
+ rgblight_set_layer_state(3, led_state.caps_lock);
+ return true;
+};
+
+/* // EEPROM Reset Function
+void eeconfig_init_user(void) {
+ backlight_enable(); // Enable backlight by default
+ rgblight_enable(); // Enable RGB by default
+ rgblight_sethsv(HSV_BLUE); // Set it to orange by default
+}; */
diff --git a/keyboards/xiudi/xd60/keymaps/fvolpe83/readme.md b/keyboards/xiudi/xd60/keymaps/fvolpe83/readme.md
new file mode 100755
index 0000000000..753c6bbb2d
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/fvolpe83/readme.md
@@ -0,0 +1,33 @@
+# fvolpe83's keymap for XIUDI's 60% XD60 PCB rev3
+
+3 layers in ISO:
+
+- 0 for ISO querty with split backspace and split right shift
+- 1 for arrows and mouse
+- 2 for backlight
+
+
+![Keyboard Layout (Physical appearence)](https://i.imgur.com/Zgc4Fv6.jpg "physical layout")
+
+
+## Additional Notes
+
+RGB lighting enabled and goes to sleep with the host, each layer has its own color, caps layer is still there (can be enabled via software) but acts as FN
+
+- 0 = cyan/blue
+- caps = red
+- 1 = green
+- 2 = purple
+
+tapping toggle has been defined to 3 in the separate config.h
+
+via has been enabled
+
+## Build
+
+To build the keymap, simply run:
+
+ make xd60/rev3:fvolpe83 # XD60 rev3
+
+
+![Keyboard Layout (Physical appearence)](https://i.imgur.com/CSRPjbX.png "physical layout")
diff --git a/keyboards/xiudi/xd60/keymaps/fvolpe83/rules.mk b/keyboards/xiudi/xd60/keymaps/fvolpe83/rules.mk
new file mode 100755
index 0000000000..1e5b99807c
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/fvolpe83/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/xiudi/xd60/keymaps/iso/keymap.c b/keyboards/xiudi/xd60/keymaps/iso/keymap.c
new file mode 100644
index 0000000000..0f4694ca63
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/iso/keymap.c
@@ -0,0 +1,33 @@
+#include QMK_KEYBOARD_H
+
+enum layer_names {
+ _BL,
+ _FL,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ //,: Base Layer
+ [_BL] = LAYOUT_60_iso(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL
+ ),
+
+ //,: Function Layer
+ [_FL] = LAYOUT_60_iso(
+ RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ XXXXXXX, KC_VOLD, KC_MUTE, KC_VOLU, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_TOGG, BL_DEC, BL_INC,
+ XXXXXXX, KC_MPLY, KC_MSTP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_ENT,
+ KC_LSFT, RGB_TOG, RGB_MOD, KC_CUT, KC_COPY, KC_PSTE, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL
+ )
+
+};
+
+// Loop
+void matrix_scan_user(void) {
+ // Empty
+};
diff --git a/keyboards/xiudi/xd60/keymaps/iso/readme.md b/keyboards/xiudi/xd60/keymaps/iso/readme.md
new file mode 100644
index 0000000000..84374fa185
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/iso/readme.md
@@ -0,0 +1,20 @@
+# iso Keymap for XIUDI's 60% XD60 PCB
+
+iso Keymap for XD60.
+
+## Keymap
+
+### Base Layer
+
+![Layer 0](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/xd60/keymaps/iso/layer0.png)
+
+### Function Layer
+
+![Layer 1](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/xd60/keymaps/iso/layer1.png)
+
+## Build
+
+To build the default keymap, simply run:
+
+ make xd60/rev2:iso # XD60 rev2
+ make xd60/rev3:iso # XD60 rev3
diff --git a/keyboards/xiudi/xd60/keymaps/kmontag42/keymap.c b/keyboards/xiudi/xd60/keymaps/kmontag42/keymap.c
new file mode 100644
index 0000000000..8e081c6731
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/kmontag42/keymap.c
@@ -0,0 +1,44 @@
+#include QMK_KEYBOARD_H
+#include "action_layer.h"
+#include "backlight.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ // 0: Base Layer
+ LAYOUT_all(
+ KC_LEAD, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, \
+ KC_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_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_DOT, KC_ENT, \
+ KC_LSPO, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_RSPC, KC_RGUI, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT),
+
+ // 1: Function Layer
+ LAYOUT_all(
+ RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_F14, \
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
+ KC_NO, KC_NO, KC_NO, KC_NO, MO(1), KC_NO, KC_NO, KC_NO, KC_NO),
+
+};
+
+// Loop
+void matrix_scan_user(void) {
+ static uint8_t old_layer = 255;
+ uint8_t new_layer = biton32(layer_state);
+
+ if (old_layer != new_layer) {
+ switch (new_layer) {
+ case 0:
+ rgblight_mode(1);
+ rgblight_setrgb(0xFF, 0xFF, 0xFF);
+ break;
+ case 1:
+ rgblight_mode(18);
+ rgblight_setrgb(0x00, 0xFF, 0xFF);
+ break;
+ }
+
+ old_layer = new_layer;
+ }
+};
diff --git a/keyboards/xiudi/xd60/keymaps/kmontag42/readme.md b/keyboards/xiudi/xd60/keymaps/kmontag42/readme.md
new file mode 100644
index 0000000000..a23f6a8bec
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/kmontag42/readme.md
@@ -0,0 +1,18 @@
+# KMontag42's XD60/XD64 Keymap and Layout
+
+[![Built with Spacemacs](https://cdn.rawgit.com/syl20bnr/spacemacs/442d025779da2f62fc86c2082703697714db6514/assets/spacemacs-badge.svg)](http://spacemacs.org)
+
+## Additional Notes
+This layout is WIP for me as I use my shiny new keyboard more and more. I will work to keep this updated.
+
+## Notable features
+* Arrows only on the bottom row
+** i prefer vim style movement, so this works well for me
+* Layer based RGB lighting
+** i use rgb lights to determine what layer is currently active
+* Maximum key usage
+** unless someone tells me otherwise, I believe this is the maximum number of keys the board can support without PCB modding
+* I use emacs, which could account for some of the oddities in my layout and macros
+
+## Build
+To build the default keymap, simply run `make xd60:kmontag42`.
diff --git a/keyboards/xiudi/xd60/keymaps/kmontag42/rules.mk b/keyboards/xiudi/xd60/keymaps/kmontag42/rules.mk
new file mode 100644
index 0000000000..d0d2ef6d53
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/kmontag42/rules.mk
@@ -0,0 +1 @@
+LEADER_ENABLE = yes
diff --git a/keyboards/xiudi/xd60/keymaps/krusli/keymap.c b/keyboards/xiudi/xd60/keymaps/krusli/keymap.c
new file mode 100644
index 0000000000..697d6d7f1f
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/krusli/keymap.c
@@ -0,0 +1,22 @@
+#include QMK_KEYBOARD_H
+#include "action_layer.h"
+
+#define _BASE 0
+#define _FN 1
+
+/* HHKB-like layout for standard 60% layout with split RShift */
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT_all(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, _______, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, \
+ KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, MO(1), \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, _______, KC_APP, KC_RCTL),
+
+ [_FN] = LAYOUT_all(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, _______, \
+ RESET, RGB_TOG, RGB_MOD, RGB_HUI, RGB_VAD, RGB_VAI, RGB_SAD, RGB_SAI, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, _______, KC_INS, \
+ _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_NO, _______, \
+ _______, KC_NO, _______, _______, _______, _______, _______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______),
+};
diff --git a/keyboards/xiudi/xd60/keymaps/krusli/readme.md b/keyboards/xiudi/xd60/keymaps/krusli/readme.md
new file mode 100644
index 0000000000..34f46e026c
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/krusli/readme.md
@@ -0,0 +1,7 @@
+# krusli's Keymap for XIUDI's 60% XD60 PCB
+
+## Additional Notes
+Keymap for the XD60 (ANSI) with 2.25u left shift, split right shift. HHKB-like function layer.
+
+## Build
+To build this keymap, simply run `make xd60:krusli` on the top-level directory for QMK.
diff --git a/keyboards/xiudi/xd60/keymaps/melka/.gitignore b/keyboards/xiudi/xd60/keymaps/melka/.gitignore
new file mode 100644
index 0000000000..c79982f2ea
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/melka/.gitignore
@@ -0,0 +1 @@
+passwd.h
diff --git a/keyboards/xiudi/xd60/keymaps/melka/config.h b/keyboards/xiudi/xd60/keymaps/melka/config.h
new file mode 100644
index 0000000000..37581d12ea
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/melka/config.h
@@ -0,0 +1,20 @@
+#pragma once
+
+#if __GNUC__ > 5
+# if __has_include("passwd.h")
+# include "passwd.h"
+# endif // if file exists
+#endif // __GNUC__
+
+#ifndef PASSWORD_A
+ #define PASSWORD_A "1234567890"
+#endif
+
+#ifndef PASSWORD_B
+ #define PASSWORD_B "pass123"
+#endif
+
+#define RGBLIGHT_LAYERS
+
+#define LSPO_KEYS KC_LSFT, KC_TRNS, KC_5
+#define RSPC_KEYS KC_RSFT, KC_TRNS, KC_MINS
diff --git a/keyboards/xiudi/xd60/keymaps/melka/keymap.c b/keyboards/xiudi/xd60/keymaps/melka/keymap.c
new file mode 100644
index 0000000000..bb3159981f
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/melka/keymap.c
@@ -0,0 +1,165 @@
+#include QMK_KEYBOARD_H
+
+/*
+Security Note: While it is possible to use macros to send passwords, credit card numbers,
+and other sensitive information it is a supremely bad idea to do so. Anyone who gets a hold
+of your keyboard will be able to access that information by opening a text editor.
+*/
+enum custom_keycodes
+{
+ PASS_A = SAFE_RANGE,
+ PASS_B
+};
+
+#define ___ KC_NO
+
+#define LAYOUT_melka( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
+ K40, K41, K42, K43, K44, K45, K46, K47, K48) \
+ { \
+ {K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D}, \
+ {K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, ___}, \
+ {K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K1D}, \
+ {K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3E, K3D}, \
+ {K40, K41, K42, ___, ___, K43, ___, K3C, K46, K0E, K44, K45, K47, K48} \
+ }
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // 0: Base Layer
+ LAYOUT_melka(
+ KC_NUBS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_DEL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_ENT,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS,
+ MT(KC_LSFT, KC_5), KC_GRV, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MT(KC_RSFT, KC_MINS), KC_UP, MO(1),
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, KC_LEFT, KC_DOWN, KC_RIGHT),
+
+ // 1: Function Layer
+ LAYOUT_melka(
+ 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_WH_U, KC_UP, KC_WH_D, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, _______,
+ TO(2), TO(3), _______, KC_APP, BL_STEP, _______, _______, _______, _______, _______, _______, KC_END, KC_PGDN, KC_VOLU, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_MUTE),
+
+ // 2: RGB Layer
+ LAYOUT_melka(
+ RGB_TOG, RGB_M_P, RGB_RMOD, RGB_MOD, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, RGB_M_K, RGB_M_X, RGB_M_G, RGB_M_T, _______, _______, RESET,
+ _______, RGB_HUD, RGB_HUI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_SAD, RGB_SAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ TO(0), _______, RGB_VAD, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, PASS_A, PASS_B, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+ // 3: Keypad Layer
+ LAYOUT_melka(
+ KC_ESC, _______, _______, _______, _______, _______, _______, _______, _______, KC_NLCK, KC_PEQL, KC_PSLS, KC_PAST, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, KC_PMNS, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6, KC_PPLS,
+ TO(0), _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, KC_PENT, TO(0),
+ _______, _______, _______, _______, KC_P0, KC_P0, KC_PDOT, KC_PENT, _______)
+};
+
+// Light LEDs 6 to 9 and 12 to 15 red when caps lock is active. Hard to ignore!
+const rgblight_segment_t PROGMEM rgb_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS(
+ {2, 4, HSV_RED}, // Light 4 LEDs, starting with LED 6
+ {6, 4, HSV_RED} // Light 4 LEDs, starting with LED 12
+);
+// Light LEDs 9 & 10 in cyan when keyboard layer 1 is active
+const rgblight_segment_t PROGMEM rgb_function_layer[] = RGBLIGHT_LAYER_SEGMENTS(
+ {9, 2, HSV_CYAN}
+);
+// Light LEDs 11 & 12 in purple when keyboard layer 2 is active
+const rgblight_segment_t PROGMEM rgb_backlight_layer[] = RGBLIGHT_LAYER_SEGMENTS(
+ {10, 2, HSV_PURPLE}
+);
+const rgblight_segment_t PROGMEM rgb_keypad_layer[] = RGBLIGHT_LAYER_SEGMENTS(
+ {4, 4, HSV_RED}
+);
+// Now define the array of layers. Later layers take precedence
+const rgblight_segment_t* const PROGMEM rgb_layers[] = RGBLIGHT_LAYERS_LIST(
+ rgb_capslock_layer,
+ rgb_function_layer,
+ rgb_backlight_layer, // Overrides caps lock layer
+ rgb_keypad_layer // Overrides other layers
+);
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ // Both layers will light up if both kb layers are active
+ rgblight_set_layer_state(1, layer_state_cmp(state, 1));
+ rgblight_set_layer_state(2, layer_state_cmp(state, 2));
+ return state;
+}
+
+bool led_update_user(led_t led_state) {
+ rgblight_set_layer_state(0, led_state.caps_lock);
+ return true;
+}
+
+void keyboard_post_init_user(void) {
+ // Enable the LED layers
+ rgblight_layers = rgb_layers;
+}
+// Loop
+void matrix_scan_user(void) {
+ // Empty
+};
+
+static bool control_disabled = false;
+static bool delete_pressed = false;
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record)
+{
+ if (keycode == KC_BSPC)
+ {
+ if (record->event.pressed)
+ {
+ if (keyboard_report->mods & MOD_BIT(KC_LCTL))
+ {
+ delete_pressed = true;
+ control_disabled = true;
+ unregister_code(KC_LCTL);
+ register_code(KC_DEL);
+ return false;
+ }
+ }
+ else if (delete_pressed)
+ {
+ delete_pressed = false;
+ unregister_code(KC_DEL);
+
+ if (control_disabled)
+ {
+ control_disabled = false;
+ register_code(KC_LCTL);
+ }
+ return false;
+ }
+ }
+ else if (keycode == KC_LCTL && !record->event.pressed && delete_pressed)
+ {
+ delete_pressed = false;
+ control_disabled = false;
+ unregister_code(KC_DEL);
+ register_code(KC_BSPC);
+ return false;
+ }
+
+ switch (keycode)
+ {
+ case PASS_A:
+ if (record->event.pressed)
+ {
+ SEND_STRING(PASSWORD_A "\n");
+ }
+ break;
+ case PASS_B:
+ if (record->event.pressed)
+ {
+ SEND_STRING(PASSWORD_B "\n");
+ }
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/xiudi/xd60/keymaps/melka/passwd_template.h b/keyboards/xiudi/xd60/keymaps/melka/passwd_template.h
new file mode 100644
index 0000000000..a78de6d40d
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/melka/passwd_template.h
@@ -0,0 +1,10 @@
+/*
+To define your password, rename this file to passwd.h and edit the defines below.
+
+Security Note: While it is possible to use macros to send passwords, credit card numbers,
+and other sensitive information it is a supremely bad idea to do so. Anyone who gets a hold
+of your keyboard will be able to access that information by opening a text editor.
+*/
+
+#define PASSWORD_A "enter your first password here"
+#define PASSWORD_B "second password if you need"
diff --git a/keyboards/xiudi/xd60/keymaps/melka/readme.md b/keyboards/xiudi/xd60/keymaps/melka/readme.md
new file mode 100644
index 0000000000..b9d9065da7
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/melka/readme.md
@@ -0,0 +1,21 @@
+# melka's keymap for XIUDI's 60% XD60 rev3 PCB
+
+## Additional Notes
+Custom Keymap for XD60 rev3. French Mac layout.
+
+## Security Note
+This keymap includes macros for entering passwords.
+
+While it is possible to use macros to send passwords, credit card numbers,
+and other sensitive information it is a supremely bad idea to do so. Anyone who gets a hold
+of your keyboard will be able to access that information by opening a text editor.
+
+Use this functionnality at your own risk.
+
+To define your password, rename passwd_template.h file to passwd.h and edit the defines inside.
+
+## Build
+
+To build this keymap, simply run:
+
+ make xd60/rev3:melka # XD60 rev3
diff --git a/keyboards/xiudi/xd60/keymaps/petesmom/README.md b/keyboards/xiudi/xd60/keymaps/petesmom/README.md
new file mode 100644
index 0000000000..dceb402d72
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/petesmom/README.md
@@ -0,0 +1,26 @@
+# pete's mom Layout
+
+Customized xd60 keymap based on yuuki's but a step sideways with Mac support. For Pete on his 40th
+
+## Programming Instructions
+
+Change the layout in `keymap.c` then run `make xd60-petesmom`. The compiled file will be located in `.build/xd60_petesmom.hex` relative to the project root. To flash it onto your keyboard, use whatever program works on your OS. I personally use `dfu-programmer`, and run:
+
+* `sudo dfu-programmer atmega32u4 erase`
+* `sudo dfu-programmer atmega32u4 flash .build/xd60-petesmom.hex`
+* `sudo dfu-programmer atmega32u4 start`
+
+## Layout
+
+See `keymap.c` for the details, but here are the important features:
+
+| Key | Function |
+| -------------------------- | ---------------------------------- |
+| ESC | ESC when pressed alone but acts as ~ when pressed with Shift or LGUI down |
+| FN + ESC | Grave |
+| Right Shift | When tapped generates / |
+| FN + HJKL | Arrow Keys |
+| FN + C | ^ |
+| FN + V | & |
+| FN + , . RShift | Mac Vol - + Mute |
+| FN + P [ ] \ | Mac Play/Pause, Prev Track, Next Track, Stop |
diff --git a/keyboards/xiudi/xd60/keymaps/petesmom/keymap.c b/keyboards/xiudi/xd60/keymaps/petesmom/keymap.c
new file mode 100644
index 0000000000..d6c9035c28
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/petesmom/keymap.c
@@ -0,0 +1,28 @@
+#include QMK_KEYBOARD_H
+#include "action_layer.h"
+
+#define BASE 0
+#define FN 1
+
+#define CTL_SLSH CTL_T(KC_SLSH)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ // 0: Base Layer
+ [BASE] = LAYOUT_all(
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, \
+ KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_NO, RSFT_T(KC_SLASH), KC_UP, KC_RCTL, \
+ CTL_SLSH, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(FN), KC_LEFT, KC_DOWN, KC_RIGHT
+ ),
+ // 1: Function Layer
+ [FN] = LAYOUT_all(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL, \
+ KC_TRNS, RGB_MOD, RGB_VAI, KC_TRNS, KC_TRNS, KC_HOME, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_MRWD, KC_MFFD, KC_MSTP, \
+ KC_TRNS, RGB_TOG, RGB_VAD, KC_MUTE, KC_VOLU, KC_VOLD, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_TRNS, KC_NO, KC_ENT, \
+ KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_CIRC, KC_AMPR, KC_TRNS, KC_TRNS, KC_TRNS,KC__VOLDOWN,KC__VOLUP,KC_NO, KC__MUTE,KC_PGUP, RESET, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_SPC, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDOWN,KC_END
+ ),
+
+};
diff --git a/keyboards/xiudi/xd60/keymaps/rooski/instructions.txt b/keyboards/xiudi/xd60/keymaps/rooski/instructions.txt
new file mode 100644
index 0000000000..1486647dcd
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/rooski/instructions.txt
@@ -0,0 +1,2 @@
+cd c:/QMK
+make xd60 / / / / / / / / \ No newline at end of file
diff --git a/keyboards/xiudi/xd60/keymaps/rooski/keymap.c b/keyboards/xiudi/xd60/keymaps/rooski/keymap.c
new file mode 100644
index 0000000000..71d5451dc4
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/rooski/keymap.c
@@ -0,0 +1,57 @@
+// XD60 Rev 2.0
+
+#include QMK_KEYBOARD_H
+#include "action_layer.h"
+//#include "action_tapping.h"
+#include "backlight.h"
+
+// Define tapping term
+#define TAPPING_TERM 150
+
+// Layer definitions~
+#define _BL 0
+#define _FL 1
+#define _LK 2
+
+// RShift TapHold
+#define RSTT MT(MOD_RSFT, KC_SLSH)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* (Base Layer) Default Layer
+ * ,-----------------------------------------------------------.
+ * |Esc~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |
+ * |-----------------------------------------------------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ |
+ * |-----------------------------------------------------------|
+ * | Caps | A| S| D| F| G| H| J| K| L| ;| '| Return |
+ * |-----------------------------------------------------------|
+ * |Shift | Z| X| C| V| B| N| M| ,| .|Shift| Up |Del |
+ * |-----------------------------------------------------------|
+ * |Ctrl|Gui |Alt | Space |Ctrl|Fn| LT| DN | RT |
+ * `-----------------------------------------------------------'
+ */
+ // 0: Base Layer
+ [_BL] = LAYOUT_all(
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, XXXXXXX, KC_ENT, \
+ KC_LSFT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, XXXXXXX, RSTT, KC_UP, KC_DEL, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RIGHT),
+
+ // 1: Function Layer
+ [_FL] = LAYOUT_all(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL, \
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PSCR, XXXXXXX, XXXXXXX, XXXXXXX, \
+ XXXXXXX, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ XXXXXXX, XXXXXXX, KC_VOLD, KC_VOLU, KC_MUTE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, \
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TG(_LK), _______, KC_HOME, _______, KC_END),
+
+ // 2: Lighting Keys
+ [_LK] = LAYOUT_all(
+ TO(_BL), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, RESET, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL, \
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PSCR, XXXXXXX, XXXXXXX, XXXXXXX, \
+ RESET , KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ XXXXXXX, XXXXXXX, KC_VOLD, KC_VOLU, KC_MUTE, XXXXXXX, XXXXXXX, RGB_SAD, RGB_SAI, RGB_HUD, RGB_HUI, XXXXXXX, XXXXXXX, RGB_VAI, BL_STEP, \
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TO(_BL), XXXXXXX, RGB_TOG, RGB_VAD, RGB_MOD),
+
+};
diff --git a/keyboards/xiudi/xd60/keymaps/semicolonsnet/keymap.c b/keyboards/xiudi/xd60/keymaps/semicolonsnet/keymap.c
new file mode 100644
index 0000000000..7b1bacf0fe
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/semicolonsnet/keymap.c
@@ -0,0 +1,24 @@
+/* Copyright 2021 Chase Nordengren
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_all(KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_GRV, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, RSFT_T(KC_SLSH), KC_UP, KC_DEL, KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT),
+ [1] = LAYOUT_all(KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_F14, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_VOLU, KC_VOLD, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, LCAG(KC_SCLN), LCAG(KC_QUOT), KC_NO, KC_TRNS, KC_TRNS, KC_NO, LCAG(KC_Z), LCAG(KC_X), LCAG(KC_ASTR), LCAG(KC_V), LCAG(KC_B), LCAG(KC_N), LCAG(KC_M), LCAG(KC_COMM), KC_INS, KC_DEL, KC_TRNS, KC_PGUP, KC_INS, KC_TRNS, KC_TRNS, KC_TRNS, LCAG(KC_SPC), KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END)
+};
+
+// Loop
diff --git a/keyboards/xiudi/xd60/keymaps/semicolonsnet/readme.md b/keyboards/xiudi/xd60/keymaps/semicolonsnet/readme.md
new file mode 100644
index 0000000000..b8a3ac4fff
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/semicolonsnet/readme.md
@@ -0,0 +1,13 @@
+# Semicolonsnet Keymap for XIUDI's 60% XD60 PCB
+
+![Semicolonsnet Keymap for XD60](https://i.imgur.com/VZygOqK.png)
+
+## Additional Notes
+Custom Keymap for XD60 - uses a META key and lots of shortcut keys that are later software controlled
+
+## Build
+
+To build the default keymap, simply run:
+
+ make xd60/rev2:default # XD60 rev2
+ make xd60/rev3:default # XD60 rev3 \ No newline at end of file
diff --git a/keyboards/xiudi/xd60/keymaps/split_bksp_arrows/keymap.c b/keyboards/xiudi/xd60/keymaps/split_bksp_arrows/keymap.c
new file mode 100644
index 0000000000..9958cbfc4c
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/split_bksp_arrows/keymap.c
@@ -0,0 +1,34 @@
+#include QMK_KEYBOARD_H
+#include "action_layer.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* (Base Layer) Default Layer
+ * ,-----------------------------------------------------------.
+ * |Esc~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \|Ins|
+ * |-----------------------------------------------------------|
+ * | Tab| Q| W| E| R| T| Y| U| I| O| P| [| ]| Bksp|
+ * |-----------------------------------------------------------|
+ * | Fn| A| S| D| F| G| H| J| K| L| ;| '| Return|
+ * |-----------------------------------------------------------|
+ * | Shift| Z| X| C| V| B| N| M| ,| .| /| Up | Del|
+ * |-----------------------------------------------------------|
+ * |Ctrl| Alt| Super| Space |Caps| Shft| LT| DN| RT|
+ * `-----------------------------------------------------------'
+ */
+ // 0: Base Layer
+ LAYOUT_all(
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_INS, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, \
+ MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_TRNS, KC_ENT, \
+ KC_LSFT, KC_TRNS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_SLSH, KC_UP, KC_DEL, \
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_CAPS, KC_RSFT, KC_LEFT, KC_DOWN, KC_RIGHT),
+
+ // 1: Function Layer
+ LAYOUT_all(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS, \
+ KC_TRNS, BL_TOGG, BL_STEP, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_DEL, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDOWN, KC_END),
+
+};
diff --git a/keyboards/xiudi/xd60/keymaps/split_bksp_arrows/readme.md b/keyboards/xiudi/xd60/keymaps/split_bksp_arrows/readme.md
new file mode 100644
index 0000000000..35a5e4f224
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/split_bksp_arrows/readme.md
@@ -0,0 +1,8 @@
+## Instructions
+make xd60:split_bksp_arrows
+
+## Layout
+![Layout](https://photos.app.goo.gl/cjpRZ2j8q3X1ONck1 "Layout")
+
+## KLE Link
+http://www.keyboard-layout-editor.com/#/gists/5bb96ed3f4974bf74b1c448c8349d01f \ No newline at end of file
diff --git a/keyboards/xiudi/xd60/keymaps/stanleylai/keymap.c b/keyboards/xiudi/xd60/keymaps/stanleylai/keymap.c
new file mode 100644
index 0000000000..a827744c14
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/stanleylai/keymap.c
@@ -0,0 +1,30 @@
+#include QMK_KEYBOARD_H
+#include "action_layer.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ // 0: Base Layer
+ LAYOUT_all(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, \
+ MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, \
+ KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(2), KC_UP, KC_DEL, \
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, KC_LEFT, KC_DOWN, KC_RIGHT),
+
+ // 1: Function Layer
+ LAYOUT_all(
+ RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_F14, \
+ KC_CAPS, KC_MPRV, KC_UP, KC_MNXT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_DEL, \
+ MO(1), KC_LEFT, KC_DOWN, KC_RIGHT,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_ENT, \
+ KC_LSFT, KC_NO, KC_VOLD, KC_MUTE, KC_VOLU,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PGUP, KC_INS, \
+ KC_LCTL, KC_LALT, KC_LGUI, KC_MPLY, KC_RGUI, KC_RALT, KC_HOME, KC_PGDOWN,KC_END),
+
+ // 2: RGB Layer
+ LAYOUT_all(
+ KC_NO, BL_TOGG, BL_STEP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
+ KC_NO, RGB_TOG, RGB_MOD, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
+ KC_NO, RGB_HUI, RGB_SAI, RGB_VAI, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
+ KC_NO, KC_NO, RGB_HUD, RGB_SAD, RGB_VAD,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, MO(2), KC_NO, KC_NO, \
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO),
+
+};
diff --git a/keyboards/xiudi/xd60/keymaps/styr/keymap.c b/keyboards/xiudi/xd60/keymaps/styr/keymap.c
new file mode 100644
index 0000000000..2fbfe2563a
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/styr/keymap.c
@@ -0,0 +1,56 @@
+#include QMK_KEYBOARD_H
+
+#define _BL 0
+#define _FL 1
+#define _LL 2
+
+enum custom_keycodes {
+ MACRO_STRING
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ // 0: Base Layer
+ [_BL] = LAYOUT_all(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
+ MO(_LL), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, \
+ KC_LSFT, XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_DEL, \
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, MO(_FL), KC_RALT, KC_LEFT, KC_DOWN, KC_RIGHT),
+
+ // 1: Function Layer
+ [_FL] = LAYOUT_all(
+ XXXXXXX, 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_F13, KC_F14, \
+ XXXXXXX, RGB_TOG, RGB_MOD, RGB_RMOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI, RGB_HUD, XXXXXXX, RGB_VAI, RGB_VAD, XXXXXXX, \
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2, \
+ XXXXXXX, XXXXXXX, XXXXXXX, MACRO_STRING, XXXXXXX, F(0), KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT),
+
+ [_LL] = LAYOUT_all(
+ XXXXXXX, 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_F13, KC_F14, \
+ XXXXXXX, RGB_TOG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC__MUTE, \
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLU, KC_MPLY, \
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, F(0), KC_MRWD, KC_VOLD, KC_MFFD),
+
+
+};
+
+// Macros
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case MACRO_STRING:
+ if(record->event.pressed){
+ SEND_STRING("My Custom String");
+ }
+ return false;
+ break;
+ default:
+ return true;
+ }
+}
+
+// Loop
+void matrix_scan_user(void) {
+ // Empty
+};
diff --git a/keyboards/xiudi/xd60/keymaps/styr/readme.md b/keyboards/xiudi/xd60/keymaps/styr/readme.md
new file mode 100644
index 0000000000..8d9edf7c48
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/styr/readme.md
@@ -0,0 +1,7 @@
+# Keyboard Layout by Styr
+
+## Additional Notes
+Default Keymap for XD60 as indicated on the original sale page.
+
+## Build
+To build the default keymap, simply run `make xd60/rev3:styr`.
diff --git a/keyboards/xiudi/xd60/keymaps/supercoffee/keymap.c b/keyboards/xiudi/xd60/keymaps/supercoffee/keymap.c
new file mode 100644
index 0000000000..c31a948a82
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/supercoffee/keymap.c
@@ -0,0 +1,22 @@
+#include QMK_KEYBOARD_H
+#include "action_layer.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ // 0: Base Layer
+ LAYOUT_all(
+ 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_NO, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, \
+ KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_RSHIFT, KC_NO, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RALT, KC_NO, KC_RGUI, KC_RCTL),
+
+ // 1: Function Layer
+ LAYOUT_all(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_F14, \
+ KC_NO, KC_NO, KC_UP, KC_END, KC_NO, KC_NO, KC_CALC, KC_PGUP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_DEL, \
+ KC_NO, KC_LEFT, KC_DOWN, KC_RIGHT,KC_NO, KC_NO, KC_HOME, KC_PGDN, KC_NO, KC_NO, KC_NO, KC_PGUP, KC_NO, KC_ENT, \
+ KC_LSFT, KC_NO, KC_NO, KC_DEL, BL_STEP,KC_NO, KC_NO, KC_VOLD, KC_VOLU,KC_MUTE, KC_NO, KC_PGDN, KC_RSFT, KC_NO, KC_NO, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RALT, KC_NO, KC_RGUI, KC_RCTL),
+
+};
diff --git a/keyboards/xiudi/xd60/keymaps/supercoffee/readme.md b/keyboards/xiudi/xd60/keymaps/supercoffee/readme.md
new file mode 100644
index 0000000000..ccfdca8b25
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/supercoffee/readme.md
@@ -0,0 +1,9 @@
+# Supercoffee Keymap for DeskCandy 60% XD60 PCB
+
+![Supercoffee Keymap for XD60](https://i.imgur.com/SPg4wXw.jpg)
+
+## Additional Notes
+60% Keymap for XD60 with GH60 ANSI layout. Arrow keys mapped to WASD in function layer.
+
+## Build
+To build the default keymap, simply run `make xd60:supercoffee`.
diff --git a/keyboards/xiudi/xd60/keymaps/suryanisaac/README.md b/keyboards/xiudi/xd60/keymaps/suryanisaac/README.md
new file mode 100644
index 0000000000..dbc94dbf73
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/suryanisaac/README.md
@@ -0,0 +1,16 @@
+# suryanisaac's layout
+
+Just my custom layout, works really well for me so hopefully you guys like it.
+
+## Features:
+
+- Arrow keys on IJKL on Layer 1
+- Layer 1 toggle is the Caps Lock (No one likes caps lock)
+- Nav keys close to arrow keys, good for programming
+- Non-convoluted media control
+- For Mac or Linux with Kinto
+- Left and Right brackets on left shift and right shift
+- Layer 1 has F1 to F12 on number keys
+
+
+Pictures Available Here: https://imgur.com/a/7UzkhOu
diff --git a/keyboards/xiudi/xd60/keymaps/suryanisaac/keymap.c b/keyboards/xiudi/xd60/keymaps/suryanisaac/keymap.c
new file mode 100644
index 0000000000..fa0be3d9d3
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/suryanisaac/keymap.c
@@ -0,0 +1,29 @@
+/* Copyright 2021 Suryan Isaac
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+
+/* THIS FILE WAS GENERATED!
+ *
+ * This file was generated by qmk json2c. You may or may not want to
+ * edit it directly.
+ */
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_60_ansi(KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, KC_RCTL, TG(1)),
+ [1] = LAYOUT_60_ansi(RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_UP, KC_PGDN, KC_END, KC_TRNS, KC_TRNS, KC_PSCR, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
+};
+
diff --git a/keyboards/xiudi/xd60/keymaps/via/keymap.c b/keyboards/xiudi/xd60/keymaps/via/keymap.c
new file mode 100644
index 0000000000..9685737b46
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/via/keymap.c
@@ -0,0 +1,35 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ // 0: Base Layer
+ [0] = LAYOUT_all(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_GRV,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT,
+ KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_DEL,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RGUI, MO(1), KC_LEFT, KC_DOWN, KC_RIGHT),
+
+ // 1: Function Layer
+ [1] = LAYOUT_all(
+ RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_F14,
+ KC_NO, KC_WH_U, KC_UP, KC_WH_D, KC_BSPC,KC_HOME,KC_CALC,KC_NO, KC_INS, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_DEL,
+ KC_NO, KC_LEFT, KC_DOWN, KC_RIGHT,KC_DEL, KC_END, KC_PGDN,KC_NO, KC_NO, KC_NO, KC_HOME, KC_PGUP, KC_NO, KC_ENT,
+ KC_LSFT, KC_NO, KC_NO, KC_APP, BL_STEP,KC_NO, KC_NO, KC_VOLD,KC_VOLU,KC_MUTE, KC_END, KC_PGDN, KC_RSFT, KC_PGUP, KC_INS,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RGUI, _______, KC_HOME, KC_PGDOWN,KC_END),
+
+ [2] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+ [3] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+};
diff --git a/keyboards/xiudi/xd60/keymaps/via/readme.md b/keyboards/xiudi/xd60/keymaps/via/readme.md
new file mode 100644
index 0000000000..27cb965eba
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/via/readme.md
@@ -0,0 +1 @@
+# The VIA default layout
diff --git a/keyboards/xiudi/xd60/keymaps/via/rules.mk b/keyboards/xiudi/xd60/keymaps/via/rules.mk
new file mode 100644
index 0000000000..1e5b99807c
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/xiudi/xd60/keymaps/yuuki/README.md b/keyboards/xiudi/xd60/keymaps/yuuki/README.md
new file mode 100644
index 0000000000..ebb2f8c1c9
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/yuuki/README.md
@@ -0,0 +1,31 @@
+# yuuki's Layout
+
+Customized xd60 keymap with inspirations from HHKB and the layout I used on my Vortex Core (a 40% keyboard).
+
+## Programming Instructions
+
+Change the layout in `keymap.c` then run `make xd60:yuuki`. The compiled file will be located in `.build/xd60_yuuki.hex` relative to the project root. To flash it onto your keyboard, use whatever program works on your OS. I personally use `dfu-programmer`, and run:
+
+* reset keyboard by pressing the reset button on the back of the PCB
+* `sudo dfu-programmer atmega32u4 erase`
+* `sudo dfu-programmer atmega32u4 flash .build/xd60_yuuki.hex`
+* `sudo dfu-programmer atmega32u4 start`
+
+## Layout
+
+![Keyboard Layout](https://github.com/cideM/cidem.github.io/blob/master/keyboard-layout.png "Layout")
+
+Upper row is default layer, bottom row is function layer. I Didn't include the symbols, such as @,# or $, as their placement is just as you'd expect it.
+
+## Summary of Changes
+
+| Key | Function |
+| -------------------------- | ---------------------------------- |
+| Capslock | Forward Slash when tapped and Left Control when held |
+| Left Control | Temporarily activate function layer |
+| FN + ESC | Grave |
+| Space Cadet Shift | Left Shift tapped writes ( and Right Shift tapped writes ) |
+| FN + HJKL | Arrow Keys |
+| Rightmost key in second row from bottom | Temporarily activate function layer |
+| FN + C | ^ |
+| FN + V | & (both for convenience as I use these keys a lot with VIM navigation and I find them hard reach) |
diff --git a/keyboards/xiudi/xd60/keymaps/yuuki/keymap.c b/keyboards/xiudi/xd60/keymaps/yuuki/keymap.c
new file mode 100644
index 0000000000..7e2fd7a0dd
--- /dev/null
+++ b/keyboards/xiudi/xd60/keymaps/yuuki/keymap.c
@@ -0,0 +1,28 @@
+#include QMK_KEYBOARD_H
+#include "action_layer.h"
+
+#define BASE 0
+#define FN 1
+
+#define CTL_SLSH CTL_T(KC_SLSH)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ // 0: Base Layer
+ [BASE] = LAYOUT_all(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
+ CTL_SLSH, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, \
+ KC_LSPO, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_NO, KC_RSPC, KC_UP, MO(FN), \
+ MO(FN), KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
+ ),
+ // 1: Function Layer
+ [FN] = LAYOUT_all(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL, \
+ KC_TRNS, RGB_MOD, RGB_VAI, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL, \
+ KC_TRNS, RGB_TOG, RGB_VAD, KC_MUTE, KC_VOLU, KC_VOLD, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_TRNS, KC_NO, KC_ENT, \
+ KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_CIRC, KC_AMPR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_SPC, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDOWN,KC_END
+ ),
+
+};
diff --git a/keyboards/xiudi/xd60/readme.md b/keyboards/xiudi/xd60/readme.md
new file mode 100644
index 0000000000..db03613b8d
--- /dev/null
+++ b/keyboards/xiudi/xd60/readme.md
@@ -0,0 +1,17 @@
+# XD60
+
+Compact 60% with arrows.
+
+![Top View of a pair of XD60 Keyboard](https://i.imgur.com/3Jq2743.jpg)
+
+* Keyboard Maintainer: QMK Community
+* Hardware Supported: XD60 PCB rev2 & rev3
+* Hardware Availability: [Drop.com](https://www.drop.com/buy/xd60-xd64-custom-mechanical-keyboard-kit?mode=guest_open), [KPRepublic on AliExpress](https://www.aliexpress.com/item/32814945677.html)
+* Schematic Availability: Public Domain [on EasyEDA](https://easyeda.com/langzisanshao/xd60)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make xiudi/xd60/rev2:default # rev2
+ make xiudi/xd60/rev3:default # rev3
+
+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/xiudi/xd60/rev2/.noci b/keyboards/xiudi/xd60/rev2/.noci
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/keyboards/xiudi/xd60/rev2/.noci
diff --git a/keyboards/xiudi/xd60/rev2/config.h b/keyboards/xiudi/xd60/rev2/config.h
new file mode 100644
index 0000000000..38cfa415ff
--- /dev/null
+++ b/keyboards/xiudi/xd60/rev2/config.h
@@ -0,0 +1,71 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x7844 // "XD"
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER XIUDI
+#define PRODUCT XD60v2
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 14
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { D0, D1, D2, D3, D5 }
+#define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B7, B5, B4, D7, D6, B3 }
+#define UNUSED_PINS
+
+/* Backlight Setup */
+#define BACKLIGHT_PIN F5
+#define BACKLIGHT_LEVELS 6
+#define BACKLIGHT_ON_STATE 0
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* RGB Underglow
+ * F6 PIN for XD60v2 that has pre-soldered WS2812 LEDs
+ */
+#define RGB_DI_PIN F6
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 6 // Number of LEDs
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
diff --git a/keyboards/xiudi/xd60/rev2/rules.mk b/keyboards/xiudi/xd60/rev2/rules.mk
new file mode 100644
index 0000000000..a41c8d99ef
--- /dev/null
+++ b/keyboards/xiudi/xd60/rev2/rules.mk
@@ -0,0 +1,28 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = atmel-dfu
+
+# Build Options
+BOOTMAGIC_ENABLE = lite # 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 # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+LAYOUTS = 60_ansi 60_ansi_split_bs_rshift 60_iso 60_iso_split_bs_rshift
diff --git a/keyboards/xiudi/xd60/rev3/config.h b/keyboards/xiudi/xd60/rev3/config.h
new file mode 100644
index 0000000000..8af56851ff
--- /dev/null
+++ b/keyboards/xiudi/xd60/rev3/config.h
@@ -0,0 +1,71 @@
+/*
+Copyright 2019 Rodrigo Feijao <hello@rodrigofeijao.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x7844 // "XD"
+#define PRODUCT_ID 0x6363
+#define DEVICE_VER 0x0001
+#define MANUFACTURER XIUDI
+#define PRODUCT XD60rev3
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 14
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { D0, D1, D2, D3, D5 }
+#define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B7, B5, B4, D7, D6, B3 }
+#define UNUSED_PINS
+
+/* Backlight Setup */
+#define BACKLIGHT_PIN F5
+#define BACKLIGHT_LEVELS 6
+#define BACKLIGHT_ON_STATE 0
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* RGB Underglow
+ * F6 PIN for XD60v3 that has pre-soldered LEDs
+ */
+#define RGB_DI_PIN F6
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 12
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
diff --git a/keyboards/xiudi/xd60/rev3/rules.mk b/keyboards/xiudi/xd60/rev3/rules.mk
new file mode 100644
index 0000000000..a41c8d99ef
--- /dev/null
+++ b/keyboards/xiudi/xd60/rev3/rules.mk
@@ -0,0 +1,28 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = atmel-dfu
+
+# Build Options
+BOOTMAGIC_ENABLE = lite # 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 # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+LAYOUTS = 60_ansi 60_ansi_split_bs_rshift 60_iso 60_iso_split_bs_rshift
diff --git a/keyboards/xiudi/xd60/xd60.c b/keyboards/xiudi/xd60/xd60.c
new file mode 100644
index 0000000000..c3b63e5eaf
--- /dev/null
+++ b/keyboards/xiudi/xd60/xd60.c
@@ -0,0 +1,33 @@
+#include "xd60.h"
+
+
+extern inline void xd60_caps_led_on(void);
+extern inline void xd60_bl_led_on(void);
+
+extern inline void xd60_caps_led_off(void);
+extern inline void xd60_bl_led_off(void);
+
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+ if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
+ xd60_caps_led_on();
+ } else {
+ xd60_caps_led_off();
+ }
+
+ // if (usb_led & (1<<USB_LED_NUM_LOCK)) {
+ // xd60_esc_led_on();
+ // } else {
+ // xd60_esc_led_off();
+ // }
+
+ // if (usb_led & (1<<USB_LED_SCROLL_LOCK)) {
+ // xd60_fn_led_on();
+ // } else {
+ // xd60_fn_led_off();
+ // }
+
+ led_set_user(usb_led);
+}
diff --git a/keyboards/xiudi/xd60/xd60.h b/keyboards/xiudi/xd60/xd60.h
new file mode 100644
index 0000000000..dc6a1080f9
--- /dev/null
+++ b/keyboards/xiudi/xd60/xd60.h
@@ -0,0 +1,89 @@
+#pragma once
+
+#include "quantum.h"
+
+/* XD60 LEDs
+ * GPIO pads
+ * 0 F7 not connected
+ * 1 F6 RGB PWM Underglow
+ * 2 F5 Backlight LED
+ * 3 F4 not connected
+ * B2 Capslock LED
+ * B0 not connected
+ */
+inline void xd60_caps_led_on(void) { DDRB |= (1<<2); PORTB &= ~(1<<2); }
+inline void xd60_bl_led_on(void) { DDRF |= (1<<5); PORTF &= ~(1<<5); }
+
+inline void xd60_caps_led_off(void) { DDRB &= ~(1<<2); PORTB &= ~(1<<2); }
+inline void xd60_bl_led_off(void) { DDRF &= ~(1<<5); PORTF &= ~(1<<5); }
+
+/* XD60 Keymap Definition Macro */
+#define LAYOUT_all( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K49, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K47, K3D, K3C, \
+ K40, K41, K42, K45, K4A, K4B, K48, K4C, K4D \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \
+ { K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, K47, K48, K49, K4A, K4B, K4C, K4D } \
+}
+
+#define LAYOUT_60_ansi( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \
+ K40, K41, K42, K45, K4A, K4B, K4C, K4D \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, K2D }, \
+ { K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D }, \
+ { K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D } \
+}
+
+#define LAYOUT_60_ansi_split_bs_rshift( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K49, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3C, \
+ K40, K41, K42, K45, K4A, K4B, K4C, K4D \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, K2D }, \
+ { K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \
+ { K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, K49, K4A, K4B, K4C, K4D } \
+}
+
+#define LAYOUT_60_iso( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \
+ K40, K41, K42, K45, K4A, K4B, K4C, K4D \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, KC_NO }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D }, \
+ { K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D } \
+}
+
+#define LAYOUT_60_iso_split_bs_rshift( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K49, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3C, \
+ K40, K41, K42, K45, K4A, K4B, K4C, K4D \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, KC_NO }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \
+ { K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, K49, K4A, K4B, K4C, K4D } \
+}