diff --git a/keyboards/sofle/keymaps/vial/config.h b/keyboards/sofle/keymaps/vial/config.h
new file mode 100644
index 0000000000..62a8e7c168
--- /dev/null
+++ b/keyboards/sofle/keymaps/vial/config.h
@@ -0,0 +1,30 @@
+/* Copyright 2020 Josef Adamcik
+ * Modification for VIA support and RGB underglow by Jens Bonk-Wiltfang
+ * Modification for Vial support by Drew Petersen
+ *
+ * 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 .
+ */
+
+// clang-format off
+
+#pragma once
+
+// Vial Support
+#define VIAL_KEYBOARD_UID { 0x05, 0xCD, 0x9F, 0x8A, 0xF4, 0xDF, 0xDE, 0xB2 }
+
+// The four corners
+#define VIAL_UNLOCK_COMBO_ROWS { 0, 5, 3, 8 }
+#define VIAL_UNLOCK_COMBO_COLS { 0, 0, 0, 0 }
+
+#define ENCODER_RESOLUTIONS { 4, 2 }
diff --git a/keyboards/sofle/keymaps/vial/keymap.c b/keyboards/sofle/keymaps/vial/keymap.c
new file mode 100644
index 0000000000..168360ddde
--- /dev/null
+++ b/keyboards/sofle/keymaps/vial/keymap.c
@@ -0,0 +1,115 @@
+/* Copyright 2020 Josef Adamcik
+ * Modification for VIA support and RGB underglow by Jens Bonk-Wiltfang
+ * Modification for Vial support by Drew Petersen
+ *
+ * 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 .
+ */
+
+// clang-format off
+
+#include QMK_KEYBOARD_H
+#include "oled.c"
+
+// Default keymap. This can be changed in Vial. Use oled.c to change beavior that Vial cannot change.
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/*
+ * QWERTY
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | ESC | Q | W | E | R | T | | Y | U | I | O | P | Bspc |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Tab | A | S | D | F | G |-------. ,-------| H | J | K | L | ; | ' |
+ * |------+------+------+------+------+------| | | |------+------+------+------+------+------|
+ * |LShift| Z | X | C | V | B |-------| |-------| N | M | , | . | / |RShift|
+ * `-----------------------------------------/ / \ \-----------------------------------------'
+ * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
+ * | | | | |/ / \ \ | | | | |
+ * `----------------------------------' '------''---------------------------'
+ */
+
+[0] = LAYOUT(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_GRV,
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MUTE, XXXXXXX,KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LGUI,KC_LALT,KC_LCTRL, MO(2), KC_ENT, KC_SPC, MO(3), KC_RCTRL, KC_RALT, KC_RGUI
+),
+/*
+ * COLEMAK
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | ESC | Q | W | F | P | G | | J | L | U | Y | ; | Bspc |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | TAB | A | R | S | T | D |-------. ,-------| H | N | E | I | O | ' |
+ * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------|
+ * |LShift| Z | X | C | V | B |-------| |-------| K | M | , | . | / |RShift|
+ * `-----------------------------------------/ / \ \-----------------------------------------'
+ * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
+ * | | | | |/ / \ \ | | | | |
+ * `----------------------------------' '------''---------------------------'
+ */
+
+[1] = LAYOUT(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_GRV,
+ KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,
+ KC_TAB, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MUTE, XXXXXXX,KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LGUI,KC_LALT,KC_LCTRL,KC_TRNS, KC_ENT, KC_SPC, KC_TRNS, KC_RCTRL, KC_RALT, KC_RGUI
+),
+/* LOWER
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | F12 |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Tab | ! | @ | # | $ | % |-------. ,-------| ^ | & | * | ( | ) | | |
+ * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------|
+ * | Shift| = | - | + | { | } |-------| |-------| [ | ] | ; | : | \ | Shift|
+ * `-----------------------------------------/ / \ \-----------------------------------------'
+ * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
+ * | | | | |/ / \ \ | | | | |
+ * `----------------------------------' '------''---------------------------'
+ */
+[2] = LAYOUT(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_F12,
+ _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PIPE,
+ _______, KC_EQL, KC_MINS, KC_PLUS, KC_LCBR, KC_RCBR, _______, _______, KC_LBRC, KC_RBRC, KC_SCLN, KC_COLN, KC_BSLS, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+/* RAISE
+ * ,----------------------------------------. ,-----------------------------------------.
+ * | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Esc | Ins | Pscr | Menu | | | | | PWrd | Up | NWrd | DLine| Bspc |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Tab | LAt | LCtl |LShift| | Caps |-------. ,-------| | Left | Down | Rigth| Del | Bspc |
+ * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------|
+ * |Shift | Undo | Cut | Copy | Paste| |-------| |-------| | LStr | | LEnd | | Shift|
+ * `-----------------------------------------/ / \ \-----------------------------------------'
+ * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
+ * | | | | |/ / \ \ | | | | |
+ * `----------------------------------' '------''---------------------------'
+ */
+[3] = LAYOUT(
+ _______, _______ , _______ , _______ , _______ , _______, _______, _______ , _______, _______ , _______ ,_______,
+ _______, KC_INS, KC_PSCR, KC_APP, XXXXXXX, XXXXXXX, KC_PGUP, _______, KC_UP, _______,_______, KC_BSPC,
+ _______, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, KC_CAPS, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL, KC_BSPC,
+ _______,KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, XXXXXXX, _______, _______, XXXXXXX, _______, XXXXXXX, _______, XXXXXXX, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+)
+};
diff --git a/keyboards/sofle/keymaps/vial/oled.c b/keyboards/sofle/keymaps/vial/oled.c
new file mode 100644
index 0000000000..06839da170
--- /dev/null
+++ b/keyboards/sofle/keymaps/vial/oled.c
@@ -0,0 +1,84 @@
+ /* Copyright 2020 Josef Adamcik
+ * Modification for VIA support and RGB underglow by Jens Bonk-Wiltfang
+ *
+ * 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 .
+ */
+
+//Sets up what the OLED screens display.
+
+#ifdef OLED_DRIVER_ENABLE
+
+static void render_logo(void) {
+ static const char PROGMEM qmk_logo[] = {
+ 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
+ 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
+ 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,0
+ };
+
+ oled_write_P(qmk_logo, false);
+}
+
+static void print_status_narrow(void) {
+ // Print current mode
+ oled_write_P(PSTR("\n\n"), false);
+
+ switch (get_highest_layer(layer_state)) {
+ case 0:
+ oled_write_ln_P(PSTR("Qwrt"), false);
+ break;
+ case 1:
+ oled_write_ln_P(PSTR("Clmk"), false);
+ break;
+ default:
+ oled_write_P(PSTR("Mod\n"), false);
+ break;
+ }
+ oled_write_P(PSTR("\n\n"), false);
+ // Print current layer
+ oled_write_ln_P(PSTR("LAYER"), false);
+ switch (get_highest_layer(layer_state)) {
+ case 0:
+ case 1:
+ oled_write_P(PSTR("Base\n"), false);
+ break;
+ case 2:
+ oled_write_P(PSTR("Raise"), false);
+ break;
+ case 3:
+ oled_write_P(PSTR("Lower"), false);
+ break;
+ default:
+ oled_write_ln_P(PSTR("Undef"), false);
+ }
+ oled_write_P(PSTR("\n\n"), false);
+ led_t led_usb_state = host_keyboard_led_state();
+ oled_write_ln_P(PSTR("CPSLK"), led_usb_state.caps_lock);
+}
+
+oled_rotation_t oled_init_user(oled_rotation_t rotation) {
+ if (is_keyboard_master()) {
+ return OLED_ROTATION_270;
+ }
+ return rotation;
+}
+
+void oled_task_user(void) {
+ if (is_keyboard_master()) {
+ print_status_narrow();
+ } else {
+ render_logo();
+ }
+}
+
+#endif
\ No newline at end of file
diff --git a/keyboards/sofle/keymaps/vial/readme.md b/keyboards/sofle/keymaps/vial/readme.md
new file mode 100644
index 0000000000..bc55e2cb56
--- /dev/null
+++ b/keyboards/sofle/keymaps/vial/readme.md
@@ -0,0 +1,14 @@
+# Vial keymap for Sofle (based on VIA)
+
+Keyboard Layout: http://www.keyboard-layout-editor.com/#/gists/5e0381b049c62dce942eafc3e2d26f52 (used to generate vial.json and place encoders)
+
+Default keymap in [Keyboard Layout Editor](http://www.keyboard-layout-editor.com/#/gists/76efb423a46cbbea75465cb468eef7ff) and [adjust layer](http://www.keyboard-layout-editor.com/#/gists/4bcf66f922cfd54da20ba04905d56bd4)
+
+Features:
+
+- Symmetric modifiers (CMD/Super, Alt/Opt, Ctrl, Shift)
+- The OLED on master half shows selected mode and caps lock state and is rotated.
+- Vial support
+ - Left & Right encoders can be configured!
+ - Security Unlock/Lock Support: hold four corner keys
+ - no RGB support due to firmware size
diff --git a/keyboards/sofle/keymaps/vial/rules.mk b/keyboards/sofle/keymaps/vial/rules.mk
new file mode 100644
index 0000000000..743332d609
--- /dev/null
+++ b/keyboards/sofle/keymaps/vial/rules.mk
@@ -0,0 +1,11 @@
+OLED_DRIVER_ENABLE = yes
+ENCODER_ENABLE = yes
+CONSOLE_ENABLE = no
+EXTRAKEY_ENABLE = yes
+VIA_ENABLE = yes
+VIAL_ENABLE = yes
+VIAL_ENCODERS_ENABLE = yes
+LTO_ENABLE = yes
+RGBLIGHT_ENABLE = no
+QMK_SETTINGS = no
+MOUSEKEY_ENABLE = yes
diff --git a/keyboards/sofle/keymaps/vial/vial.json b/keyboards/sofle/keymaps/vial/vial.json
new file mode 100644
index 0000000000..5ba05229a5
--- /dev/null
+++ b/keyboards/sofle/keymaps/vial/vial.json
@@ -0,0 +1,409 @@
+{
+ "name": "Sofle",
+ "vendorId": "0xFC32",
+ "productId": "0x0287",
+ "matrix": { "rows": 10, "cols": 6 },
+ "layouts": {
+ "keymap": [
+ {
+ "name": "SofleKeyboard",
+ "author": "Josef Adamcik",
+ "switchMount": "cherry"
+ },
+ [
+ {
+ "x": 6.25,
+ "p": "CHICKLET"
+ },
+ "0,1\n\n\n\n\n\n\n\n\ne",
+ {
+ "x": 0.5
+ },
+ "1,1\n\n\n\n\n\n\n\n\ne"
+ ],
+ [
+ {
+ "y": -0.8,
+ "x": 3,
+ "f": 8,
+ "fa": [1]
+ },
+ "0,3"
+ ],
+ [
+ {
+ "y": -1,
+ "x": 11
+ },
+ "5,3"
+ ],
+ [
+ {
+ "y": -0.95,
+ "x": 10
+ },
+ "5,4"
+ ],
+ [
+ {
+ "y": -0.9,
+ "x": 2
+ },
+ "0,2",
+ {
+ "x": 1
+ },
+ "0,4",
+ {
+ "x": 7
+ },
+ "5,2"
+ ],
+ [
+ {
+ "y": -0.85,
+ "c": "#aaaaaa",
+ "f": 9,
+ "fa": [1]
+ },
+ "0,0",
+ {
+ "c": "#cccccc",
+ "f": 8,
+ "fa": [1]
+ },
+ "0,1",
+ {
+ "x": 3
+ },
+ "0,5",
+ {
+ "x": 3
+ },
+ "5,5",
+ {
+ "x": 3
+ },
+ "5,1",
+ {
+ "c": "#aaaaaa",
+ "f": 6,
+ "fa": [1]
+ },
+ "5,0"
+ ],
+ [
+ {
+ "y": -0.5,
+ "x": 6.25,
+ "c": "#cccccc",
+ "f": 3
+ },
+ "0,0\n\n\n\n\n\n\n\n\ne",
+ {
+ "x": 0.5
+ },
+ "1,0\n\n\n\n\n\n\n\n\ne"
+ ],
+ [
+ {
+ "y": -0.8,
+ "x": 3,
+ "f": 8,
+ "fa": [1]
+ },
+ "1,3",
+ {
+ "x": 7
+ },
+ "6,3"
+ ],
+ [
+ {
+ "y": -0.95,
+ "x": 10
+ },
+ "6,4"
+ ],
+ [
+ {
+ "y": -0.8999999999999999,
+ "x": 2
+ },
+ "1,2",
+ {
+ "x": 1
+ },
+ "1,4",
+ {
+ "x": 7
+ },
+ "6,2"
+ ],
+ [
+ {
+ "y": -0.8500000000000001,
+ "c": "#aaaaaa"
+ },
+ "1,0",
+ {
+ "c": "#cccccc"
+ },
+ "1,1",
+ {
+ "x": 3
+ },
+ "1,5",
+ {
+ "a": 7,
+ "f": 6,
+ "w": 3,
+ "h": 2.75,
+ "d": true
+ },
+ "",
+ {
+ "a": 4,
+ "f": 8,
+ "fa": [1]
+ },
+ "6,5",
+ {
+ "x": 3
+ },
+ "6,1",
+ {
+ "c": "#aaaaaa",
+ "f": 6,
+ "fa": [1]
+ },
+ "6,0"
+ ],
+ [
+ {
+ "y": -0.2999999999999998,
+ "x": 3,
+ "c": "#cccccc",
+ "f": 8,
+ "fa": [1]
+ },
+ "2,3",
+ {
+ "x": 7
+ },
+ "7,3"
+ ],
+ [
+ {
+ "y": -0.8500000000000001,
+ "x": 2
+ },
+ "2,2",
+ {
+ "x": 1,
+ "n": true
+ },
+ "2,4",
+ {
+ "x": 5,
+ "n": true
+ },
+ "7,4",
+ {
+ "x": 1
+ },
+ "7,2"
+ ],
+ [
+ {
+ "y": -0.8500000000000001,
+ "c": "#aaaaaa",
+ "f": 6,
+ "fa": [1]
+ },
+ "2,0",
+ {
+ "c": "#cccccc",
+ "f": 8,
+ "fa": [1]
+ },
+ "2,1",
+ {
+ "x": 3
+ },
+ "2,5",
+ {
+ "x": 3
+ },
+ "7,5",
+ {
+ "x": 3
+ },
+ "7,1",
+ {
+ "c": "#aaaaaa",
+ "f": 6,
+ "fa": [1]
+ },
+ "7,0"
+ ],
+ [
+ {
+ "y": -0.2999999999999998,
+ "x": 3,
+ "c": "#cccccc",
+ "f": 8,
+ "fa": [1]
+ },
+ "3,3",
+ {
+ "x": 7
+ },
+ "8,3"
+ ],
+ [
+ {
+ "y": -0.9500000000000002,
+ "x": 6.25
+ },
+ "4,5",
+ {
+ "x": 0.5
+ },
+ "9,5"
+ ],
+ [
+ {
+ "y": -0.8999999999999999,
+ "x": 2
+ },
+ "3,2",
+ {
+ "x": 1
+ },
+ "3,4",
+ {
+ "x": 5
+ },
+ "8,4",
+ {
+ "x": 1
+ },
+ "8,2"
+ ],
+ [
+ {
+ "y": -0.8500000000000001,
+ "c": "#aaaaaa",
+ "f": 5,
+ "fa": [1]
+ },
+ "3,0",
+ {
+ "c": "#cccccc",
+ "f": 8,
+ "fa": [1]
+ },
+ "3,1",
+ {
+ "x": 3
+ },
+ "3,5",
+ {
+ "x": 3
+ },
+ "8,5",
+ {
+ "x": 3
+ },
+ "8,1",
+ {
+ "c": "#aaaaaa",
+ "f": 5,
+ "fa": [1]
+ },
+ "8,0"
+ ],
+ [
+ {
+ "y": -0.15000000000000036,
+ "x": 2.75,
+ "f": 9,
+ "fa": [1]
+ },
+ "4,1",
+ "4,2",
+ {
+ "x": 5.5
+ },
+ "9,2"
+ ],
+ [
+ {
+ "y": -0.8499999999999996,
+ "x": 1.75
+ },
+ "4,0"
+ ],
+ [
+ {
+ "rx": 0.25,
+ "y": 4.35,
+ "x": 11
+ },
+ "9,1"
+ ],
+ [
+ {
+ "rx": 0.5,
+ "y": 4.5,
+ "x": 11.75
+ },
+ "9,0"
+ ],
+ [
+ {
+ "r": 15,
+ "rx": 5,
+ "ry": 4.5,
+ "c": "#777777"
+ },
+ "4,3"
+ ],
+ [
+ {
+ "r": 30,
+ "rx": 6.25,
+ "y": -0.25,
+ "x": 0.09999999999999964,
+ "c": "#aaaaaa",
+ "h": 1.5
+ },
+ "4,4"
+ ],
+ [
+ {
+ "r": -30,
+ "rx": 8.75,
+ "y": -0.25,
+ "x": -1.0999999999999996,
+ "f": 8,
+ "fa": [1],
+ "h": 1.5
+ },
+ "9,4"
+ ],
+ [
+ {
+ "r": -15,
+ "rx": 10,
+ "x": -1,
+ "c": "#777777",
+ "f": 9,
+ "fa": [1]
+ },
+ "9,3"
+ ]
+ ]
+ }
+}