diff --git a/keyboards/hidtech/bastyl/keymaps/german_gaming/keymap.c b/keyboards/hidtech/bastyl/keymaps/german_gaming/keymap.c
new file mode 100644
index 0000000000..0b986a5099
--- /dev/null
+++ b/keyboards/hidtech/bastyl/keymaps/german_gaming/keymap.c
@@ -0,0 +1,90 @@
+/*
+ * Copyright 2021 Joschua Gandert
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+
+#include QMK_KEYBOARD_H
+#include "keymap_german.h"
+
+
+enum layer_names {
+ _BASE,
+ _GAME, /* WASD shifted right once */
+ _LOWER,
+ _RAISE,
+ _ADJUST /* when both LOWER and RAISE pressed */
+};
+
+#define RAISE MO(_RAISE)
+#define LOWER MO(_LOWER)
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT(
+ KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , DE_SS ,
+ KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , DE_Z , KC_U , KC_I , KC_O , KC_P , DE_UDIA,
+ KC_LSFT, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , DE_ODIA, DE_ADIA,
+ KC_LCTL, DE_Y , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT, DE_MINS, DE_PLUS,
+
+ RAISE, KC_SPC, KC_LCTL, KC_RALT, KC_BSPC, LOWER,
+ KC_ENT, KC_LALT, KC_LGUI, KC_RSFT
+ ),
+
+ [_GAME] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_T , KC_TAB , KC_Q , KC_W , KC_E , KC_R , _______, _______, KC_UP, _______, _______, _______,
+ KC_G , KC_LSFT, KC_A , KC_S , KC_D , KC_F , _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______,
+ KC_B , KC_LCTL, DE_Y , KC_X , KC_C , KC_V , _______, _______, _______, _______, _______, _______,
+
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______
+ ),
+
+ [_LOWER] = LAYOUT(
+ KC_TILD, KC_EXLM, KC_AT , KC_HASH, KC_DLR , KC_PERC, KC_CIRC, KC_AMPR, KC_PSLS, KC_PAST, KC_PMNS, KC_DEL ,
+ _______, DE_HASH, DE_CIRC, KC_PGUP, DE_LABK, _______, _______, KC_P7 , KC_P8 , KC_P9 , KC_PPLS, KC_BSPC ,
+ _______, DE_ACUT, KC_HOME, KC_PGDN, KC_END , KC_LPRN, KC_RPRN, KC_P4 , KC_P5 , KC_P6 , KC_PDOT, _______ ,
+ _______, KC_PLUS, KC_PIPE, KC_UNDS, _______, _______, KC_P0 , KC_P1 , KC_P2 , KC_P3 , KC_PENT, KC_KP_EQUAL,
+
+ _______, KC_RGHT, _______, _______, _______, _______,
+ KC_LEFT, _______, RESET , _______
+ ),
+
+ [_RAISE] = LAYOUT(
+ KC_F12 , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 ,
+ _______, _______, _______, KC_UP , _______, _______, KC_LALT, KC_INS , KC_NLCK , KC_CALC, KC_PSCREEN, KC_MUTE,
+ _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_ENT , KC_MSEL, KC_MPRV , KC_MPLY , KC_MNXT, _______ , KC_VOLU,
+ _______, _______, _______, _______, _______, _______, DE_HASH, KC_MYCM , _______ , _______, KC_SLCK , KC_VOLD,
+
+ _______, _______, _______, _______, KC_UP , _______,
+ _______, _______, _______, KC_DOWN
+ ),
+
+ [_ADJUST] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, RESET , _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, DF(_GAME), _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, DF(_BASE), _______, _______, _______, _______, _______, _______,
+
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______
+ ),
+};
+
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
diff --git a/keyboards/hidtech/bastyl/keymaps/german_gaming/readme.md b/keyboards/hidtech/bastyl/keymaps/german_gaming/readme.md
new file mode 100644
index 0000000000..9e6a328bcb
--- /dev/null
+++ b/keyboards/hidtech/bastyl/keymaps/german_gaming/readme.md
@@ -0,0 +1,24 @@
+![German Gaming Layout Image](https://i.imgur.com/0y938rG.png)
+
+Despite being less accurate, the columns in the image are shifted up and down to avoid the [Hermann grid illusion](https://en.wikipedia.org/wiki/Grid_illusion).
+
+
+# German Gaming Layout
+
+This layout was build with gaming in mind for a german user. As a result I added a "game" layer that shifts the keys of the left side (below the number row) one to the right, so that WASD is on the ESDF keys. The reason this layer was added is that using WASD is less comfortable with a contoured Dactyl-style keyboard, where each column is adjusted for the respective fingers. ESDF also has the upside of allowing one to stay in the home row. Note that the rightmost column of the default layer, so TGB, ends up in the leftmost position.
+
+Of course, one could just be forced to reconfigure every game, but that wouldn't be very user-friendly and likely reduce satisfaction with the layout. When in game mode, the right side of keys also features arrow keys on IJKL.
+
+
+## Raise and Lower layer
+
+Additionally, via the RAISE layer, it's always possible to access the arrow keys, which are often used in game menues. On the exact same position one can access Home, End, Page Down and Page Up via the LOWER layer. The left side of the LOWER layer also contains the few characters that would usually have their own key in a traditional german keyboard.
+
+The right side features various media keys in the RAISE layer, and a numpad in the LOWER layer.
+
+
+## Firmware
+
+The keyboard can be put into Reset mode (for flashing a keymap) by pressing **LOWER** + Super (also known as Windows key), or by pressing **LOWER** + **RAISE** + R.
+
+`MOUSEKEY_ENABLE` was set to `no` for this keymap, since it wasn't used and the size of the firmware ended up being too large.
diff --git a/keyboards/hidtech/bastyl/keymaps/german_gaming/rules.mk b/keyboards/hidtech/bastyl/keymaps/german_gaming/rules.mk
new file mode 100644
index 0000000000..0a5b666e85
--- /dev/null
+++ b/keyboards/hidtech/bastyl/keymaps/german_gaming/rules.mk
@@ -0,0 +1 @@
+MOUSEKEY_ENABLE = no