aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQMK Bot <hello@qmk.fm>2021-09-11 01:57:21 +0000
committerQMK Bot <hello@qmk.fm>2021-09-11 01:57:21 +0000
commit0ca04e6852c08c027b53c4f5bd460038636d2cb2 (patch)
tree73be40d571b4e82ecda20009891c105db4530d55
parentf197b30a472bad581ebe7b235825bba44f31652d (diff)
parentd7747a2d700eec08679011d79dc6192fe43ca402 (diff)
downloadqmk_firmware-0ca04e6852c08c027b53c4f5bd460038636d2cb2.tar.gz
qmk_firmware-0ca04e6852c08c027b53c4f5bd460038636d2cb2.zip
Merge remote-tracking branch 'origin/master' into develop
-rw-r--r--keyboards/durgod/k320/keymaps/moults31/config.h20
-rw-r--r--keyboards/durgod/k320/keymaps/moults31/keymap.c84
-rw-r--r--keyboards/durgod/k320/keymaps/moults31/readme.md10
-rw-r--r--keyboards/durgod/k320/keymaps/moults31/rules.mk2
-rw-r--r--keyboards/dztech/dz60rgb/keymaps/moults31/keymap.c42
-rw-r--r--keyboards/dztech/dz60rgb/keymaps/moults31/readme.md11
-rw-r--r--keyboards/dztech/dz60rgb/keymaps/moults31/rules.mk1
-rw-r--r--keyboards/gmmk/pro/keymaps/moults31/keymap.c92
-rw-r--r--keyboards/knobgoblin/keymaps/moults31/keymap.c170
-rw-r--r--keyboards/knobgoblin/keymaps/moults31/readme.md3
-rw-r--r--keyboards/knobgoblin/keymaps/moults31/rules.mk3
-rw-r--r--keyboards/knobgoblin/keymaps/via/keymap.c8
-rw-r--r--users/moults31/gdb.c59
-rw-r--r--users/moults31/gdb.h21
-rw-r--r--users/moults31/moults31.c114
-rw-r--r--users/moults31/moults31.h61
-rw-r--r--users/moults31/obs.c80
-rw-r--r--users/moults31/obs.h21
-rw-r--r--users/moults31/readme.md5
-rw-r--r--users/moults31/rules.mk10
-rw-r--r--users/moults31/vscode.c90
-rw-r--r--users/moults31/vscode.h21
22 files changed, 924 insertions, 4 deletions
diff --git a/keyboards/durgod/k320/keymaps/moults31/config.h b/keyboards/durgod/k320/keymaps/moults31/config.h
new file mode 100644
index 000000000..01f47b8c1
--- /dev/null
+++ b/keyboards/durgod/k320/keymaps/moults31/config.h
@@ -0,0 +1,20 @@
1/*
2 * Copyright 2021 moults31
3 *
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#pragma once
19
20#define DYNAMIC_KEYMAP_LAYER_COUNT 3
diff --git a/keyboards/durgod/k320/keymaps/moults31/keymap.c b/keyboards/durgod/k320/keymaps/moults31/keymap.c
new file mode 100644
index 000000000..c44fe1585
--- /dev/null
+++ b/keyboards/durgod/k320/keymaps/moults31/keymap.c
@@ -0,0 +1,84 @@
1/* Copyright 2021 moults31
2 * Adapted from kuenhlee and Don Kjer and Coirault
3 *
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17#include QMK_KEYBOARD_H
18
19#include "moults31.h"
20
21// Layer shorthand
22enum _layer {
23 _BASE,
24 _FUNC,
25 _LAYER3
26};
27
28const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
29 /* Keymap _BASE: Base Layer (Default Layer)
30 * ,-----------------------------------------------------------. ,--------------.
31 * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12| |Prnt|ScLk|Paus|
32 * |-----------------------------------------------------------| |--------------|
33 * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backsp | | Ins|Home|PgUp|
34 * |-----------------------------------------------------------| |--------------|
35 * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| | | Del| End|PgDn|
36 * |------------------------------------------------------ Ret | `--------------'
37 * |CAPS | A| S| D| F| G| H| J| K| L| ;| '| #| |
38 * |-----------------------------------------------------------| ,----.
39 * |Shift| \| Z| X| C| V| B| N| M| ,| .| /|Shift | | Up |
40 * |-----------------------------------------------------------| ,-------------.
41 * |Ctrl|Gui |Alt | Space |Alt | Fn |App |Ctrl| |Lft| Dn |Rig |
42 * `-----------------------------------------------------------' `-------------'
43 */
44 [_BASE] = LAYOUT_tkl_ansi( /* Base Layer */
45 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_PSCR, KC_SLCK, KC_PAUS,
46 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_INS, KC_HOME, KC_PGUP,
47 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_DEL, KC_END, KC_PGDN,
48 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_ENT,
49 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
50 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FUNC),KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
51 ),
52 /* Keymap _FUNC: Function Layer
53 * ,-----------------------------------------------------------. ,--------------.
54 * | |Play|Stop|Prev|Next| |Mute|Vol+|Vol-| | | | | | | | | | |
55 * |-----------------------------------------------------------| |--------------|
56 * | | | | | | | | | | | | | | | | | | |
57 * |-----------------------------------------------------------| |--------------|
58 * | | | | | | | | | | | | | | | | | | |
59 * |------------------------------------------------------- | `--------------'
60 * | | | | | | | | | | | | | | |
61 * |-----------------------------------------------------------| ,----.
62 * | | | | | | | | | | | | | | | |
63 * |-----------------------------------------------------------| ,-------------.
64 * | | | | | |Func | | | | | | |
65 * `-----------------------------------------------------------' `-------------'
66 */
67 [_FUNC] = LAYOUT_tkl_ansi( /* Function Layer */
68 _______, KC_MPLY, KC_MSTP, KC_MRWD, KC_MFFD, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______, _______, _______, _______, _______,
69 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
70 _______, _______, M_VSC_VIEWSIZEINC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
71 _______, M_VSC_EDGRPPRV, M_VSC_VIEWSIZEDEC, M_VSC_EDGRPNXT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
72 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
73 _______, _______, _______, _______, _______, _______, _______, _______, M_VSC_MVEDTRPRVGRP, _______, M_VSC_MVEDTRNXTGRP
74 ),
75 [_LAYER3] = LAYOUT_tkl_ansi( /* Function Layer */
76 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
77 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
78 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
79 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
80 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
81 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
82 ),
83};
84
diff --git a/keyboards/durgod/k320/keymaps/moults31/readme.md b/keyboards/durgod/k320/keymaps/moults31/readme.md
new file mode 100644
index 000000000..e3a3f150f
--- /dev/null
+++ b/keyboards/durgod/k320/keymaps/moults31/readme.md
@@ -0,0 +1,10 @@
1# The default keymap for Durgod Taurus K320.
2
3Layer 0 : Standard Keys TKL layout
4
5Layer 1 : Media control and VScode navigation
6- Reusing Durgod's Original Media Control for Fn + F1 ~ Fn + F7
7
8## Supported PCBs
9
10This keymap intended for use on Durgod K320 ANSI
diff --git a/keyboards/durgod/k320/keymaps/moults31/rules.mk b/keyboards/durgod/k320/keymaps/moults31/rules.mk
new file mode 100644
index 000000000..36b7ba9cb
--- /dev/null
+++ b/keyboards/durgod/k320/keymaps/moults31/rules.mk
@@ -0,0 +1,2 @@
1VIA_ENABLE = yes
2LTO_ENABLE = yes
diff --git a/keyboards/dztech/dz60rgb/keymaps/moults31/keymap.c b/keyboards/dztech/dz60rgb/keymaps/moults31/keymap.c
new file mode 100644
index 000000000..98802270a
--- /dev/null
+++ b/keyboards/dztech/dz60rgb/keymaps/moults31/keymap.c
@@ -0,0 +1,42 @@
1/*
2 * Copyright 2021 moults31
3 *
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#include QMK_KEYBOARD_H
19
20const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
21 [0] = LAYOUT(
22 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,
23 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,
24 CTL_T(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_ENT,
25 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_DOT, KC_SLSH, KC_RSHFT, KC_UP, LT(2, KC_DEL),
26 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_COMM, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
27 ),
28 [1] = LAYOUT(
29 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,
30 _______, _______, KC_UP, _______, _______, _______, KC_CALC, _______, KC_INS, _______, KC_PSCR, KC_HOME, KC_END, RESET,
31 _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, KC_PGUP, KC_PGDN, EEP_RST,
32 _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, KC_MPLY, KC_VOLU, KC_MUTE,
33 _______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT
34 ),
35 [2] = LAYOUT(
36 RGB_MOD, 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,
37 _______, _______, RGB_HUI, _______, _______, _______, _______, _______, _______, _______, _______, _______, EEP_RST, RESET,
38 _______, RGB_SAD, RGB_HUD, RGB_SAI, _______, _______, _______, _______, _______, _______, _______, _______, _______,
39 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, RGB_VAI, _______,
40 _______, _______, _______, _______, _______, _______, RGB_SPI, RGB_VAD, RGB_SPD
41 ),
42};
diff --git a/keyboards/dztech/dz60rgb/keymaps/moults31/readme.md b/keyboards/dztech/dz60rgb/keymaps/moults31/readme.md
new file mode 100644
index 000000000..19bccf13e
--- /dev/null
+++ b/keyboards/dztech/dz60rgb/keymaps/moults31/readme.md
@@ -0,0 +1,11 @@
1# moults31 DZ60RBG V2 Layout
2
3Similar to the default dz60rgb v2 layout with some minor changes for quality of life in programming.
4
5Brief summary of improvements over default:
6* More intuitive media keys in layer 1
7* More intuitive RGB control keys in layer 2
8* Standard left-alt
9* Anne Pro 2 style home/end placement in layer 1
10* Grave key moved to right-alt position for easier ctrl-grave vscode shortcut
11* Removed layer 4 (mac layout?)
diff --git a/keyboards/dztech/dz60rgb/keymaps/moults31/rules.mk b/keyboards/dztech/dz60rgb/keymaps/moults31/rules.mk
new file mode 100644
index 000000000..1e5b99807
--- /dev/null
+++ b/keyboards/dztech/dz60rgb/keymaps/moults31/rules.mk
@@ -0,0 +1 @@
VIA_ENABLE = yes
diff --git a/keyboards/gmmk/pro/keymaps/moults31/keymap.c b/keyboards/gmmk/pro/keymaps/moults31/keymap.c
new file mode 100644
index 000000000..90ac428c7
--- /dev/null
+++ b/keyboards/gmmk/pro/keymaps/moults31/keymap.c
@@ -0,0 +1,92 @@
1/* Copyright 2021 Glorious, LLC <salman@pcgamingrace.com>
2
3This program is free software: you can redistribute it and/or modify
4it under the terms of the GNU General Public License as published by
5the Free Software Foundation, either version 2 of the License, or
6(at your option) any later version.
7
8This program is distributed in the hope that it will be useful,
9but WITHOUT ANY WARRANTY; without even the implied warranty of
10MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11GNU General Public License for more details.
12
13You should have received a copy of the GNU General Public License
14along with this program. If not, see <http://www.gnu.org/licenses/>.
15*/
16
17#include QMK_KEYBOARD_H
18
19#include "moults31.h"
20
21const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
22
23// ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 Prt Rotary(Mute)
24// ~ 1 2 3 4 5 6 7 8 9 0 - (=) BackSpc Del
25// Tab Q W E R T Y U I O P [ ] \ PgUp
26// Caps A S D F G H J K L ; " Enter PgDn
27// Sh_L Z X C V B N M , . ? Sh_R Up End
28// Ct_L Win_L Alt_L SPACE Alt_R FN Ct_R Left Down Right
29
30
31 // The FN key by default maps to a momentary toggle to layer 1 to provide access to the RESET key (to put the board into bootloader mode). Without
32 // this mapping, you have to open the case to hit the button on the bottom of the PCB (near the USB cable attachment) while plugging in the USB
33 // cable to get the board into bootloader mode - definitely not fun when you're working on your QMK builds. Remove this and put it back to KC_RGUI
34 // if that's your preference.
35 //
36 // To put the keyboard in bootloader mode, use FN+backslash. If you accidentally put it into bootloader, you can just unplug the USB cable and
37 // it'll be back to normal when you plug it back in.
38 [0] = LAYOUT(
39 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_PSCR, KC_MPLY,
40 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_HOME,
41 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_END,
42 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_ENT, KC_DEL,
43 KC_LSFT, 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(2),
44 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
45 ),
46
47 [1] = LAYOUT(
48 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE,
49 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
50 _______, _______, _______, _______, _______, _______, KC_CALC, _______, KC_INS, _______, KC_PSCR, _______, _______, RESET, _______,
51 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, KC_PGDN, _______, _______,
52 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
53 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
54 ),
55
56 [2] = LAYOUT(
57 M_GDB_STOP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, M_VSC_DBGCNSLFOCUS,
58 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
59 _______, _______, M_VSC_VIEWSIZEINC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
60 _______, M_VSC_EDGRPPRV, M_VSC_VIEWSIZEDEC, M_VSC_EDGRPNXT, _______, _______, _______, _______, _______, _______, _______, _______, M_GDB_PLAY, M_GDB_PAUSE,
61 _______, M_VSC_FILEPRV, M_VSC_FILENXT, _______, _______, _______, _______, _______, _______, _______, _______, _______, M_GDB_STEPOUT, _______,
62 _______, _______, _______, _______, _______, _______, _______, M_GDB_RESTART, M_GDB_STEPIN, M_GDB_STEPOVER
63 ),
64
65};
66
67
68bool encoder_update_user(uint8_t index, bool clockwise) {
69 const layer_state_t curr_layer = get_highest_layer(layer_state);
70 if(curr_layer == 2) {
71 if (clockwise) {
72 moults31_tap_custom_code(M_VSC_FILENXT);
73 } else {
74 moults31_tap_custom_code(M_VSC_FILEPRV);
75 }
76 }
77 else if(curr_layer == 1) {
78 if (clockwise) {
79 moults31_tap_custom_code(M_VSC_VIEWSIZEINC);
80 } else {
81 moults31_tap_custom_code(M_VSC_VIEWSIZEDEC);
82 }
83 }
84 else {
85 if (clockwise) {
86 tap_code(KC_VOLU);
87 } else {
88 tap_code(KC_VOLD);
89 }
90 }
91 return false;
92}
diff --git a/keyboards/knobgoblin/keymaps/moults31/keymap.c b/keyboards/knobgoblin/keymaps/moults31/keymap.c
new file mode 100644
index 000000000..16830bc98
--- /dev/null
+++ b/keyboards/knobgoblin/keymaps/moults31/keymap.c
@@ -0,0 +1,170 @@
1/* Copyright 2020 MrT1ddl3s
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#include QMK_KEYBOARD_H
18
19#include "moults31.h"
20
21const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
22
23 [0] = LAYOUT_ortho(
24 KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
25 KC_P7, KC_P8, KC_P9, KC_PPLS,
26 KC_P4, KC_P5, KC_P6, KC_PPLS,
27 KC_MPLY, KC_P1, KC_P2, KC_P3, KC_PENT,
28 KC_MUTE, MO(10), KC_P0, KC_PDOT, KC_PENT
29 ),
30
31 [1] = LAYOUT_ortho(
32 KC_ESC, KC_TRNS, KC_TRNS, KC_TRNS,
33 KC_HOME, KC_TRNS, KC_PGUP, KC_TRNS,
34 KC_END , KC_UP, KC_PGDN, KC_TRNS,
35 KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_SPC,
36 KC_TRNS, MO(10), KC_BSPC, KC_DEL, KC_TRNS
37 ),
38
39 [2] = LAYOUT_ortho(
40 KC_2, KC_TRNS, KC_TRNS, KC_TRNS,
41 M_VSC_MVEDTRPRVGRP, M_VSC_MVEDTRNXTGRP, KC_TRNS, KC_TRNS,
42 M_VSC_EDGRPPRV, M_VSC_EDGRPNXT, KC_TRNS, KC_TRNS,
43 KC_TRNS, M_VSC_SIDEBARFOCUS, M_VSC_SIDEBARCLOSE, M_VSC_TERMFOCUS, KC_TRNS,
44 M_VSC_FILECLOSE, MO(10), KC_TRNS, KC_TRNS, KC_TRNS
45 ),
46
47 [3] = LAYOUT_ortho(
48 KC_3, KC_TRNS, KC_TRNS, KC_TRNS,
49 KC_TRNS, KC_TRNS, KC_TRNS, M_GDB_PAUSE,
50 M_GDB_RESTART, M_GDB_STOP, KC_TRNS, M_GDB_PAUSE,
51 M_VSC_DBGCNSLFOCUS, M_GDB_STEPOVER, M_GDB_STEPIN, M_GDB_STEPOUT, M_GDB_PLAY,
52 KC_TRNS, MO(10), KC_TRNS, KC_TRNS, M_GDB_PLAY
53 ),
54
55 [4] = LAYOUT_ortho(
56 KC_4, KC_TRNS, KC_TRNS, KC_TRNS,
57 M_OBS_VOICE_UNMUTE, M_OBS_MOOSIC_MUTE, M_OBS_MOOSIC_UNMUTE, KC_TRNS,
58 M_OBS_DSKT_MUTE, M_OBS_DSKT_UNMUTE, M_OBS_VOICE_MUTE, KC_TRNS,
59 KC_TRNS, M_OBS_BRB, M_OBS_GAME, M_OBS_JSTCHT, KC_TRNS,
60 KC_TRNS, MO(10), KC_TRNS, KC_TRNS, KC_TRNS
61 ),
62
63 [5] = LAYOUT_ortho(
64 KC_5, KC_TRNS, KC_TRNS, KC_TRNS,
65 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
66 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
67 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
68 KC_TRNS, MO(10), KC_TRNS, KC_TRNS, KC_TRNS
69 ),
70
71 [6] = LAYOUT_ortho(
72 KC_6, KC_TRNS, KC_TRNS, KC_TRNS,
73 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
74 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
75 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
76 KC_TRNS, MO(10), KC_TRNS, KC_TRNS, KC_TRNS
77 ),
78
79 [7] = LAYOUT_ortho(
80 KC_7, KC_TRNS, KC_TRNS, KC_TRNS,
81 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
82 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
83 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
84 KC_TRNS, MO(10), KC_TRNS, KC_TRNS, KC_TRNS
85 ),
86
87 [8] = LAYOUT_ortho(
88 KC_8, KC_TRNS, KC_TRNS, KC_TRNS,
89 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
90 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
91 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
92 KC_TRNS, MO(10), KC_TRNS, KC_TRNS, KC_TRNS
93 ),
94
95 [9] = LAYOUT_ortho(
96 KC_9, KC_TRNS, KC_TRNS, KC_TRNS,
97 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
98 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
99 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
100 KC_TRNS, MO(10), KC_TRNS, KC_TRNS, KC_TRNS
101 ),
102
103 [10] = LAYOUT_ortho(
104 RESET, KC_TRNS, KC_TRNS, KC_TRNS,
105 TO(7), TO(8), TO(9), KC_TRNS,
106 TO(4), TO(5), TO(6), KC_TRNS,
107 KC_TRNS, TO(1), TO(2), TO(3), KC_TRNS,
108 KC_TRNS, KC_TRNS, TO(0), KC_TRNS, KC_TRNS
109 ),
110
111
112
113};
114
115/* byte map for the goblin logo, knob goblin text, and level text */
116static void render_goblin_logo(void) {
117 static const char PROGMEM my_logo[] = {
118 0x00, 0xe0, 0x40, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0xc0, 0x60, 0x20, 0x10, 0x08, 0x08, 0x08,
119 0x08, 0x08, 0x08, 0x10, 0x20, 0x60, 0xc0, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x40, 0xe0, 0x00,
120 0x00, 0x03, 0x06, 0x3c, 0x49, 0x91, 0x21, 0x00, 0x40, 0x80, 0x80, 0x80, 0x80, 0x00, 0x60, 0x00,
121 0x00, 0x60, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x00, 0x21, 0x91, 0x49, 0x3c, 0x06, 0x03, 0x00,
122 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1f, 0x60, 0x40, 0xc0, 0x06, 0x0e, 0x0f, 0x67, 0x50, 0xc0,
123 0xc0, 0x50, 0x67, 0x0f, 0x0e, 0x06, 0xc0, 0x40, 0x60, 0x1f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
124 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x7b, 0xc7, 0x8e, 0x1e, 0x3e, 0x3e,
125 0x3e, 0x3e, 0x1e, 0x8e, 0xc7, 0x7b, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
126 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x06, 0x04,
127 0x04, 0x06, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
128 0x03, 0x03, 0x03, 0x03, 0x03, 0x83, 0x03, 0x03, 0x03, 0x83, 0x03, 0x83, 0x03, 0x03, 0x03, 0x83,
129 0x03, 0x03, 0x83, 0x83, 0x83, 0x03, 0x03, 0x83, 0x83, 0x83, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
130 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x04, 0x06, 0x09, 0x10, 0x00, 0x1f, 0x03, 0x06, 0x0c, 0x1f,
131 0x00, 0x0f, 0x10, 0x10, 0x10, 0x0f, 0x00, 0x1f, 0x12, 0x12, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00,
132 0x00, 0x78, 0xfc, 0x84, 0xa4, 0xa4, 0x68, 0x00, 0x78, 0x84, 0x84, 0x84, 0x78, 0x00, 0xfc, 0x94,
133 0x94, 0x68, 0x00, 0xfc, 0x80, 0x80, 0x80, 0x00, 0xfc, 0x00, 0xfc, 0x18, 0x30, 0x60, 0xfc, 0x00,
134 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60,
135 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60,
136 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x50, 0x50, 0x50, 0x00, 0xf0, 0x00, 0x00,
137 0x00, 0xf0, 0x00, 0xf0, 0x50, 0x50, 0x50, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
138 0x00, 0x00, 0x00, 0x03, 0x02, 0x02, 0x02, 0x00, 0x03, 0x02, 0x02, 0x02, 0x00, 0x00, 0x01, 0x02,
139 0x01, 0x00, 0x00, 0x03, 0x02, 0x02, 0x02, 0x00, 0x03, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00
140 };
141 oled_write_raw_P(my_logo, sizeof(my_logo));
142}
143
144void oled_task_user(void) {
145
146 render_goblin_logo();
147
148 oled_set_cursor(0,11);
149
150 switch (get_highest_layer(layer_state)) {
151 case 0:
152 oled_write_P(PSTR(" NUM\n"), false);
153 break;
154 case 1:
155 oled_write_P(PSTR(" NAV\n"), false);
156 break;
157 case 2:
158 oled_write_P(PSTR(" CODE\n"), false);
159 break;
160 case 3:
161 oled_write_P(PSTR(" GDB\n"), false);
162 break;
163 case 4:
164 oled_write_P(PSTR(" OBS\n"), false);
165 break;
166 default:
167 oled_write_P(PSTR(" NONE\n"), false);
168 break;
169 }
170}
diff --git a/keyboards/knobgoblin/keymaps/moults31/readme.md b/keyboards/knobgoblin/keymaps/moults31/readme.md
new file mode 100644
index 000000000..f137c78c3
--- /dev/null
+++ b/keyboards/knobgoblin/keymaps/moults31/readme.md
@@ -0,0 +1,3 @@
1# Ortho Knob Goblin Layout
2
3Via functionality for the Knob Goblin. Ortho layout. \ No newline at end of file
diff --git a/keyboards/knobgoblin/keymaps/moults31/rules.mk b/keyboards/knobgoblin/keymaps/moults31/rules.mk
new file mode 100644
index 000000000..533af592e
--- /dev/null
+++ b/keyboards/knobgoblin/keymaps/moults31/rules.mk
@@ -0,0 +1,3 @@
1VIA_ENABLE = YES
2LTO_ENABLE = YES
3BOOTLOADER = atmel-dfu
diff --git a/keyboards/knobgoblin/keymaps/via/keymap.c b/keyboards/knobgoblin/keymaps/via/keymap.c
index afe3226bb..4631dccd0 100644
--- a/keyboards/knobgoblin/keymaps/via/keymap.c
+++ b/keyboards/knobgoblin/keymaps/via/keymap.c
@@ -25,7 +25,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
25 KC_MPLY, KC_P1, KC_P2, KC_P3, KC_PENT, 25 KC_MPLY, KC_P1, KC_P2, KC_P3, KC_PENT,
26 KC_MUTE, MO(1), KC_P0, KC_PDOT, KC_PENT 26 KC_MUTE, MO(1), KC_P0, KC_PDOT, KC_PENT
27 ), 27 ),
28 28
29 [1] = LAYOUT_ortho( 29 [1] = LAYOUT_ortho(
30 KC_ESC, KC_TRNS, KC_TRNS, KC_TRNS, 30 KC_ESC, KC_TRNS, KC_TRNS, KC_TRNS,
31 KC_HOME, KC_TRNS, KC_PGUP, KC_TRNS, 31 KC_HOME, KC_TRNS, KC_PGUP, KC_TRNS,
@@ -33,7 +33,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
33 KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_SPC, 33 KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_SPC,
34 KC_TRNS, KC_TRNS, KC_BSPC, KC_DEL, KC_TRNS 34 KC_TRNS, KC_TRNS, KC_BSPC, KC_DEL, KC_TRNS
35 ), 35 ),
36 36
37 [2] = LAYOUT_ortho( 37 [2] = LAYOUT_ortho(
38 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 38 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
39 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 39 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
@@ -41,7 +41,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
41 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 41 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
42 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS 42 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
43 ), 43 ),
44 44
45 [3] = LAYOUT_ortho( 45 [3] = LAYOUT_ortho(
46 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 46 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
47 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 47 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
@@ -50,4 +50,4 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
50 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS 50 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
51 ) 51 )
52 52
53}; \ No newline at end of file 53};
diff --git a/users/moults31/gdb.c b/users/moults31/gdb.c
new file mode 100644
index 000000000..42f5513ec
--- /dev/null
+++ b/users/moults31/gdb.c
@@ -0,0 +1,59 @@
1/* Copyright 2021 moults31
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include "gdb.h"
17
18bool process_record_gdb(uint16_t keycode, keyrecord_t *record) {
19 bool rv = true;
20 switch (keycode) {
21 case M_GDB_PLAY:
22 if (record->event.pressed) {
23 SEND_STRING(SS_TAP(X_F5));
24 }
25 break;
26 case M_GDB_PAUSE:
27 if (record->event.pressed) {
28 SEND_STRING(SS_TAP(X_F6));
29 }
30 break;
31 case M_GDB_STEPOVER:
32 if (record->event.pressed) {
33 SEND_STRING(SS_TAP(X_F10));
34 }
35 break;
36 case M_GDB_STEPIN:
37 if (record->event.pressed) {
38 SEND_STRING(SS_TAP(X_F11));
39 }
40 break;
41 case M_GDB_STEPOUT:
42 if (record->event.pressed) {
43 SEND_STRING(SS_LSFT(SS_TAP(X_F11)));
44 }
45 break;
46 case M_GDB_RESTART:
47 if (record->event.pressed) {
48 SEND_STRING(SS_LCTRL(SS_LSFT(SS_TAP(X_F5))));
49 }
50 break;
51 case M_GDB_STOP:
52 if (record->event.pressed) {
53 SEND_STRING(SS_LSFT(SS_TAP(X_F5)));
54 }
55 break;
56 }
57
58 return rv;
59}
diff --git a/users/moults31/gdb.h b/users/moults31/gdb.h
new file mode 100644
index 000000000..385825692
--- /dev/null
+++ b/users/moults31/gdb.h
@@ -0,0 +1,21 @@
1/* Copyright 2021 moults31
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#pragma once
17
18#include QMK_KEYBOARD_H
19#include "moults31.h"
20
21bool process_record_gdb(uint16_t keycode, keyrecord_t *record);
diff --git a/users/moults31/moults31.c b/users/moults31/moults31.c
new file mode 100644
index 000000000..0dbaed0bb
--- /dev/null
+++ b/users/moults31/moults31.c
@@ -0,0 +1,114 @@
1/* Copyright 2021 moults31
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include "moults31.h"
17
18bool moults31_tap_custom_code(uint16_t keycode) {
19 keyrecord_t record = {
20 .event = {
21 .pressed = 1,
22 },
23 };
24 return process_record_user(keycode, &record);
25}
26
27bool process_record_user(uint16_t keycode, keyrecord_t *record) {
28 bool rv = true;
29 switch (keycode) {
30 case M_MST_CODEBLOCK:
31 if (record->event.pressed) {
32 SEND_STRING("```");
33 }
34 break;
35
36 case M_VSC_TERMFOCUS:
37 case M_VSC_SIDEBARFOCUS:
38 case M_VSC_SIDEBARCLOSE:
39 case M_VSC_FILECLOSE:
40 case M_VSC_FILENXT:
41 case M_VSC_FILEPRV:
42 case M_VSC_DBGCNSLFOCUS:
43 case M_VSC_MVEDTRNXTGRP:
44 case M_VSC_MVEDTRPRVGRP:
45 case M_VSC_EDGRPNXT:
46 case M_VSC_EDGRPPRV:
47 case M_VSC_VIEWSIZEINC:
48 case M_VSC_VIEWSIZEDEC:
49 rv = process_record_vsc(keycode, record);
50 break;
51
52 case M_GDB_PLAY:
53 case M_GDB_PAUSE:
54 case M_GDB_STEPOVER:
55 case M_GDB_STEPIN:
56 case M_GDB_STEPOUT:
57 case M_GDB_RESTART:
58 case M_GDB_STOP:
59 rv = process_record_gdb(keycode, record);
60 break;
61
62 case M_OBS_BRB:
63 case M_OBS_GAME:
64 case M_OBS_JSTCHT:
65 case M_OBS_DSKT_MUTE:
66 case M_OBS_DSKT_UNMUTE:
67 case M_OBS_VOICE_MUTE:
68 case M_OBS_VOICE_UNMUTE:
69 case M_OBS_MOOSIC_MUTE:
70 case M_OBS_MOOSIC_UNMUTE:
71 rv = process_record_obs(keycode, record);
72 break;
73 }
74 return rv;
75};
76
77#ifdef ENCODER_ENABLE
78__attribute__((weak)) bool encoder_update_user(uint8_t index, bool clockwise) {
79 const layer_state_t curr_layer = get_highest_layer(layer_state);
80 if (index == 1) { /* Bottom encoder */
81 if(curr_layer == 2 || curr_layer == 3) {
82 if (clockwise) {
83 moults31_tap_custom_code(M_VSC_FILENXT);
84 } else {
85 moults31_tap_custom_code(M_VSC_FILEPRV);
86 }
87 }
88 else {
89 if (clockwise) {
90 tap_code(KC_VOLU);
91 } else {
92 tap_code(KC_VOLD);
93 }
94 }
95 }
96 if (index == 0) { /* Top encoder */
97 if(curr_layer == 2 || curr_layer == 3) {
98 if (clockwise) {
99 moults31_tap_custom_code(M_VSC_VIEWSIZEINC);
100 } else {
101 moults31_tap_custom_code(M_VSC_VIEWSIZEDEC);
102 }
103 }
104 else {
105 if (clockwise) {
106 tap_code(KC_MNXT);
107 } else {
108 tap_code(KC_MPRV);
109 }
110 }
111 }
112 return false;
113}
114#endif
diff --git a/users/moults31/moults31.h b/users/moults31/moults31.h
new file mode 100644
index 000000000..60e317b78
--- /dev/null
+++ b/users/moults31/moults31.h
@@ -0,0 +1,61 @@
1/* Copyright 2021 moults31
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#pragma once
17
18#include QMK_KEYBOARD_H
19
20#include "vscode.h"
21#include "obs.h"
22#include "gdb.h"
23
24bool moults31_tap_custom_code(uint16_t keycode);
25
26enum custom_keycodes {
27 // VSCode keycodes
28 M_VSC_TERMFOCUS = SAFE_RANGE,
29 M_VSC_SIDEBARFOCUS,
30 M_VSC_SIDEBARCLOSE,
31 M_VSC_DBGCNSLFOCUS,
32 M_VSC_EDGRPNXT,
33 M_VSC_EDGRPPRV,
34 M_VSC_MVEDTRNXTGRP,
35 M_VSC_MVEDTRPRVGRP,
36 M_VSC_VIEWSIZEINC,
37 M_VSC_VIEWSIZEDEC,
38 M_VSC_FILECLOSE,
39 M_VSC_FILENXT,
40 M_VSC_FILEPRV,
41 // GDB keycodes (for vscode debugger)
42 M_GDB_PLAY,
43 M_GDB_PAUSE,
44 M_GDB_STEPOVER,
45 M_GDB_STEPIN,
46 M_GDB_STEPOUT,
47 M_GDB_RESTART,
48 M_GDB_STOP,
49 // MS Teams keycodes
50 M_MST_CODEBLOCK,
51 // OBS keycodes
52 M_OBS_BRB,
53 M_OBS_GAME,
54 M_OBS_JSTCHT,
55 M_OBS_DSKT_MUTE,
56 M_OBS_DSKT_UNMUTE,
57 M_OBS_VOICE_MUTE,
58 M_OBS_VOICE_UNMUTE,
59 M_OBS_MOOSIC_MUTE,
60 M_OBS_MOOSIC_UNMUTE,
61};
diff --git a/users/moults31/obs.c b/users/moults31/obs.c
new file mode 100644
index 000000000..0ae5f3deb
--- /dev/null
+++ b/users/moults31/obs.c
@@ -0,0 +1,80 @@
1/* Copyright 2021 moults31
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include "obs.h"
17
18bool process_record_obs(uint16_t keycode, keyrecord_t *record) {
19 // Apply all 4 mods for custom OBS macros
20 register_code(KC_LSHIFT);
21 register_code(KC_LCTL);
22 register_code(KC_LALT);
23 register_code(KC_LGUI);
24
25 switch (keycode) {
26 case M_OBS_BRB:
27 if (record->event.pressed) {
28 SEND_STRING("1");
29 }
30 break;
31 case M_OBS_GAME:
32 if (record->event.pressed) {
33 SEND_STRING("2");
34 }
35 break;
36 case M_OBS_JSTCHT:
37 if (record->event.pressed) {
38 SEND_STRING("3");
39 }
40 break;
41 case M_OBS_DSKT_MUTE:
42 if (record->event.pressed) {
43 SEND_STRING("4");
44 }
45 break;
46 case M_OBS_DSKT_UNMUTE:
47 if (record->event.pressed) {
48 SEND_STRING("5");
49 }
50 break;
51 case M_OBS_VOICE_MUTE:
52 if (record->event.pressed) {
53 SEND_STRING("6");
54 }
55 break;
56 case M_OBS_VOICE_UNMUTE:
57 if (record->event.pressed) {
58 SEND_STRING("7");
59 }
60 break;
61 case M_OBS_MOOSIC_MUTE:
62 if (record->event.pressed) {
63 SEND_STRING("8");
64 }
65 break;
66 case M_OBS_MOOSIC_UNMUTE:
67 if (record->event.pressed) {
68 SEND_STRING("9");
69 }
70 break;
71 }
72
73 // Unpress all 4 mods for custom OBS macros
74 unregister_code(KC_LSHIFT);
75 unregister_code(KC_LCTL);
76 unregister_code(KC_LALT);
77 unregister_code(KC_LGUI);
78
79 return true;
80}
diff --git a/users/moults31/obs.h b/users/moults31/obs.h
new file mode 100644
index 000000000..2a2973f80
--- /dev/null
+++ b/users/moults31/obs.h
@@ -0,0 +1,21 @@
1/* Copyright 2021 moults31
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#pragma once
17
18#include QMK_KEYBOARD_H
19#include "moults31.h"
20
21bool process_record_obs(uint16_t keycode, keyrecord_t *record);
diff --git a/users/moults31/readme.md b/users/moults31/readme.md
new file mode 100644
index 000000000..3a5badbe5
--- /dev/null
+++ b/users/moults31/readme.md
@@ -0,0 +1,5 @@
1# moults31 Userspace
2
3## Features
4
5- Custom macros for VScode, OBS, GDB (Visual)
diff --git a/users/moults31/rules.mk b/users/moults31/rules.mk
new file mode 100644
index 000000000..af7c11d9f
--- /dev/null
+++ b/users/moults31/rules.mk
@@ -0,0 +1,10 @@
1SRC += moults31.c
2
3# Custom macro sources
4SRC += vscode.c
5SRC += obs.c
6SRC += gdb.c
7
8ifneq ($(PLATFORM),CHIBIOS)
9 LTO_ENABLE = yes # Enable link time optimization
10endif
diff --git a/users/moults31/vscode.c b/users/moults31/vscode.c
new file mode 100644
index 000000000..a2fcf062d
--- /dev/null
+++ b/users/moults31/vscode.c
@@ -0,0 +1,90 @@
1/* Copyright 2021 moults31
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include "vscode.h"
17
18bool process_record_vsc(uint16_t keycode, keyrecord_t *record) {
19 bool rv = true;
20
21 switch (keycode) {
22 case M_VSC_TERMFOCUS:
23 if (record->event.pressed) {
24 SEND_STRING(SS_LCTRL("`"));
25 }
26 break;
27 case M_VSC_SIDEBARFOCUS:
28 if (record->event.pressed) {
29 SEND_STRING(SS_LCTRL("0"));
30 }
31 break;
32 case M_VSC_SIDEBARCLOSE:
33 if (record->event.pressed) {
34 SEND_STRING(SS_LCTRL("b"));
35 }
36 break;
37 case M_VSC_FILECLOSE:
38 if (record->event.pressed) {
39 SEND_STRING(SS_LCTRL("w"));
40 }
41 break;
42 case M_VSC_FILENXT:
43 if (record->event.pressed) {
44 SEND_STRING(SS_DOWN(X_LCTRL) SS_TAP(X_K) SS_TAP(X_PGDOWN) SS_UP(X_LCTRL));
45 }
46 break;
47 case M_VSC_FILEPRV:
48 if (record->event.pressed) {
49 SEND_STRING(SS_DOWN(X_LCTRL) SS_TAP(X_K) SS_TAP(X_PGUP) SS_UP(X_LCTRL));
50 }
51 break;
52 case M_VSC_DBGCNSLFOCUS:
53 if (record->event.pressed) {
54 SEND_STRING(SS_LCTRL(SS_LALT(SS_TAP(X_D))));
55 }
56 break;
57 case M_VSC_MVEDTRNXTGRP:
58 if (record->event.pressed) {
59 SEND_STRING(SS_LCTRL(SS_LALT(SS_TAP(X_RIGHT))));
60 }
61 break;
62 case M_VSC_MVEDTRPRVGRP:
63 if (record->event.pressed) {
64 SEND_STRING(SS_LCTRL(SS_LALT(SS_TAP(X_LEFT))));
65 }
66 break;
67 case M_VSC_EDGRPNXT:
68 if (record->event.pressed) {
69 SEND_STRING(SS_LCTRL(SS_LALT(SS_TAP(X_L))));
70 }
71 break;
72 case M_VSC_EDGRPPRV:
73 if (record->event.pressed) {
74 SEND_STRING(SS_LCTRL(SS_LALT(SS_TAP(X_K))));
75 }
76 break;
77 case M_VSC_VIEWSIZEINC:
78 if (record->event.pressed) {
79 SEND_STRING(SS_LCTRL(SS_LALT(SS_TAP(X_P))));
80 }
81 break;
82 case M_VSC_VIEWSIZEDEC:
83 if (record->event.pressed) {
84 SEND_STRING(SS_LCTRL(SS_LALT(SS_TAP(X_O))));
85 }
86 break;
87 }
88
89 return rv;
90}
diff --git a/users/moults31/vscode.h b/users/moults31/vscode.h
new file mode 100644
index 000000000..7e88b6591
--- /dev/null
+++ b/users/moults31/vscode.h
@@ -0,0 +1,21 @@
1/* Copyright 2021 moults31
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#pragma once
17
18#include QMK_KEYBOARD_H
19#include "moults31.h"
20
21bool process_record_vsc(uint16_t keycode, keyrecord_t *record);