diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..8ad46ee
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "qmk_firmware"]
+ path = qmk_firmware
+ url = https://github.com/qmk/qmk_firmware.git
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..18df9eb
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,58 @@
+USER = dgvigil
+
+KEYBOARDS = draculad iris scottogame sweep swoop
+NAME_draculad = draculad
+NAME_iris = keebio/iris/rev8
+NAME_scottogame = handwired/scottokeebs/scottogame
+NAME_sweep = ferris/sweep
+NAME_swoop = bluebell/swoop
+
+
+all: $(KEYBOARDS)
+
+.PHONY: $(KEYBOARDS)
+$(KEYBOARDS):
+ # init submodule
+ git submodule update --init --recursive
+
+ # cleanup old symlinks
+ rm -rf qmk_firmware/keyboards/draculad/keymaps/$(USER)
+ rm -rf qmk_firmware/keyboards/keebio/iris/keymaps/$(USER)
+ rm -rf qmk_firmware/keyboards/handwired/scottokeebs/scottogame/keymaps/$(USER)
+ rm -rf qmk_firmware/keyboards/bluebell/swoop/keymaps/$(USER)
+ rm -rf qmk_firmware/keyboards/ferris/keymaps/$(USER)
+ rm -rf qmk_firmware/users/$(USER)
+
+
+ # add new symlinks
+ ln -s $(shell pwd)/draculad qmk_firmware/keyboards/draculad/keymaps/$(USER)
+ ln -s $(shell pwd)/iris qmk_firmware/keyboards/keebio/iris/keymaps/$(USER)
+ ln -s $(shell pwd)/sweep qmk_firmware/keyboards/ferris/keymaps/$(USER)
+ ln -s $(shell pwd)/scottogame qmk_firmware/keyboards/handwired/scottokeebs/scottogame/keymaps/$(USER)
+ ln -s $(shell pwd)/swoop qmk_firmware/keyboards/bluebell/swoop/keymaps/$(USER)
+ ln -s $(shell pwd)/user qmk_firmware/users/$(USER)
+
+ # run lint check
+ cd qmk_firmware; qmk lint -km $(USER) -kb $(NAME_$@)
+
+ # run build
+ make BUILD_DIR=$(shell pwd)/build -j1 -C qmk_firmware $(NAME_$@):$(USER)
+
+ # cleanup symlinks
+ rm -rf qmk_firmware/keyboards/draculad/keymaps/$(USER)
+ rm -rf qmk_firmware/keyboards/keebio/iris/keymaps/$(USER)
+ rm -rf qmk_firmware/keyboards/handwired/scottokeebs/scottogame/keymaps/$(USER)
+ rm -rf qmk_firmware/keyboards/bluebell/swoop/keymaps/$(USER)
+ rm -rf qmk_firmware/keyboards/ferris/keymaps/$(USER)
+ rm -rf qmk_firmware/users/$(USER)
+
+clean:
+ rm -rf qmk_firmware/keyboards/draculad/keymaps/$(USER)
+ rm -rf qmk_firmware/keyboards/keebio/iris/keymaps/$(USER)
+ rm -rf qmk_firmware/keyboards/handwired/scottokeebs/scottogame/keymaps/$(USER)
+ rm -rf qmk_firmware/keyboards/bluebell/swoop/keymaps/$(USER)
+ rm -rf qmk_firmware/keyboards/ferris/keymaps/$(USER)
+ rm -rf qmk_firmware/users/$(USER)
+ rm -rf ./build/
+ rm -rf ./qmk-config-totem/
+ rm -rf ./qmk_firmware/
\ No newline at end of file
diff --git a/dgvigil/dgvigil.c b/dgvigil/dgvigil.c
new file mode 100644
index 0000000..5ebac1b
--- /dev/null
+++ b/dgvigil/dgvigil.c
@@ -0,0 +1,5 @@
+#include "dgvigil.h"
+
+void my_custom_function(void) {
+
+}
diff --git a/dgvigil/dgvigil.h b/dgvigil/dgvigil.h
new file mode 100644
index 0000000..f7c7990
--- /dev/null
+++ b/dgvigil/dgvigil.h
@@ -0,0 +1,8 @@
+#ifndef USERSPACE
+#define USERSPACE
+
+#include "quantum.h"
+
+void my_custom_function(void);
+
+#endif
\ No newline at end of file
diff --git a/dgvigil/readme.md b/dgvigil/readme.md
new file mode 100644
index 0000000..79f6976
--- /dev/null
+++ b/dgvigil/readme.md
@@ -0,0 +1,14 @@
+Copyright 2023 dave vigil dgvigil@gmail.com @dgvigil
+
+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 .
diff --git a/dgvigil/rules.mk b/dgvigil/rules.mk
new file mode 100644
index 0000000..245757d
--- /dev/null
+++ b/dgvigil/rules.mk
@@ -0,0 +1 @@
+SRC += dgvigil.c
diff --git a/draculad/config.h b/draculad/config.h
new file mode 100644
index 0000000..ed4ed82
--- /dev/null
+++ b/draculad/config.h
@@ -0,0 +1,30 @@
+/*
+Copyright 2021 @mangoiv
+
+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 .
+*/
+
+#define POINTING_DEVICE_ROTATION_90
+
+//comment that out if your trackball is on the left side
+#define TRACKBALL_LEFT
+
+#ifdef TRACKBALL_LEFT
+ #define POINTING_DEVICE_INVERT_X
+ #define POINTING_DEVICE_INVERT_Y
+#endif
+
+/* Tap Dance */
+#define TAPPING_TERM 200
+#define TAPPING_TERM_PER_KEY
diff --git a/draculad/keymap.c b/draculad/keymap.c
new file mode 100644
index 0000000..3cc3cc2
--- /dev/null
+++ b/draculad/keymap.c
@@ -0,0 +1,449 @@
+/*
+Copyright 2021 @mangoiv
+
+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
+
+enum layer_number {
+ _BASE,
+ _NAV,
+ _NUM,
+ _SYM,
+ _FUN,
+ _MUS,
+ _ADJ
+};
+
+enum custom_keycodes {
+ BALL_HUI = SAFE_RANGE, //cycles hue
+ BALL_WHT, //cycles white
+ BALL_DEC, //decreased color
+ BALL_SCR, //scrolls
+ BALL_NCL, //left click
+ BALL_RCL, //right click
+ BALL_MCL, //middle click
+ M_PASS1,
+ M_PASS2
+};
+
+//Tap Dance Declarations
+enum {
+ TD_ESC_Q,
+ TD_ESC_A,
+};
+
+//Tap Dance Definitions
+tap_dance_action_t tap_dance_actions[] = {
+ //Tap once for Q, twice for Esc
+ [TD_ESC_Q] = ACTION_TAP_DANCE_DOUBLE(KC_Q, KC_ESC),
+ //Tap once for A, twice for Tab
+ [TD_ESC_A] = ACTION_TAP_DANCE_DOUBLE(KC_A, KC_TAB)
+};
+
+
+// LEFT THUMB KEYS
+#define MUSIC_ESC LT(_MUS, KC_ESC)
+#define NAV_BKSP LT(_NAV, KC_BSPC)
+#define ADJ_TAB LT(_ADJ, KC_TAB)
+// RIGHT THUMB KEYS
+#define SYM_ENTER LT(_SYM, KC_ENTER)
+#define NUM_SPC LT(_NUM, KC_SPC)
+#define FUN_DEL LT(_FUN, KC_DEL)
+
+// LEFT HOME KEY MODS
+#define GUIA MT(MOD_LGUI,KC_A)
+#define ALTS MT(MOD_LALT,KC_S)
+#define CTLD MT(MOD_LCTL,KC_D)
+#define SHTF MT(MOD_LSFT,KC_F)
+// RIGHT HOME KEY MODS
+#define SHTJ MT(MOD_LSFT | MOD_RSFT,KC_J)
+#define CTLK MT(MOD_LCTL | MOD_RCTL,KC_K)
+#define ALTL MT(MOD_LALT | MOD_RALT,KC_L)
+#define GUIQUOT MT(MOD_LGUI | MOD_RGUI,KC_QUOT)
+
+// Tap Dance
+#define KC_EscTap TD(TD_ESC_Q)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT(
+// ┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐
+ KC_EscTap,KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+// ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
+ GUIA, ALTS, CTLD, SHTF, KC_G, KC_H, SHTJ, CTLK, ALTL, GUIQUOT,
+// ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,
+// └────────┴────────┴────────┴────────┼────────┤ ├────────┼────────┴────────┴────────┴────────┘
+ KC_MUTE, TG(_ADJ),
+// ┌────────┬────────┼────────┼ ┼────────┼────────┬────────┐
+ MUSIC_ESC,NAV_BKSP,ADJ_TAB, SYM_ENTER,NUM_SPC,FUN_DEL
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+ [_NAV] = LAYOUT(
+// ┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐
+ _______, _______, _______, _______, _______, _______, KC_PSTE, KC_COPY, KC_CUT, KC_UNDO,
+ // ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, KC_CAPS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
+ // ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, M_PASS2, M_PASS1, _______, KC_HOME, KC_PGUP, KC_PGDN, KC_END,
+// └────────┴────────┴────────┴────────┼────────┤ ├────────┼────────┴────────┴────────┴────────┘
+ _______, _______,
+// ┌────────┬────────┼────────┼ ┼────────┼────────┬────────┐
+ _______, _______, _______, _______, _______, _______
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+
+ ),
+ [_NUM] = LAYOUT(
+// ┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐
+ KC_LBRC, KC_7, KC_8, KC_9, KC_RBRC, _______, _______, _______, _______, _______,
+// ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
+ KC_SCLN, KC_4, KC_5, KC_6, KC_EQL, _______, _______, _______, _______, _______,
+// ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
+ KC_DOT, KC_1, KC_2, KC_3, KC_MINS, _______, _______, _______, _______, _______,
+// └────────┴────────┴────────┴────────┼────────┤ ├────────┼────────┴────────┴────────┴────────┘
+ _______, _______,
+// ┌────────┬────────┼────────┼ ┼────────┼────────┬────────┐
+ KC_0, KC_MINUS, _______, _______, _______, _______
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+ [_SYM] = LAYOUT(
+// ┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐
+ KC_LCBR, KC_AMPR, KC_ASTR, KC_LPRN, KC_RBRC, _______, _______, _______, _______, _______,
+// ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
+ KC_COLN, KC_DLR, KC_PERC, KC_CIRC, KC_PLUS, KC_LPRN, KC_RPRN, _______, _______, _______,
+// ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_PIPE, KC_LPRN, KC_RPRN, _______, _______, _______,
+// └────────┴────────┴────────┴────────┼────────┤ ├────────┼────────┴────────┴────────┴────────┘
+ _______, _______,
+// ┌────────┬────────┼────────┼ ┼────────┼────────┬────────┐
+ KC_RPRN, KC_UNDS, _______, _______, _______, _______
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+ [_FUN] = LAYOUT(
+// ┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐
+ _______, _______, _______, _______, _______, KC_F12, KC_F7, KC_F8, KC_F9, KC_PSCR,
+// ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, KC_F11, KC_F4, KC_F5, KC_F6, _______,
+// ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, KC_F10, KC_F1, KC_F2, KC_F3, _______,
+// └────────┴────────┴────────┴────────┼────────┤ ├────────┼────────┴────────┴────────┴────────┘
+ _______, _______,
+// ┌────────┬────────┼────────┼ ┼────────┼────────┬────────┐
+ KC_RPRN, KC_UNDS, _______, _______, _______, _______
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+ [_MUS] = LAYOUT(
+// ┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐
+ KC_LCTL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+// ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
+ KC_LALT, KC_BTN3, KC_BTN2, KC_BTN1, BALL_SCR, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+// ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
+ KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+// └────────┴────────┴────────┴────────┼────────┤ ├────────┼────────┴────────┴────────┴────────┘
+ _______, _______,
+// ┌────────┬────────┼────────┼ ┼────────┼────────┬────────┐
+ _______, _______, _______, _______, _______, _______
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+ [_ADJ] = LAYOUT(
+// ┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐
+ QK_BOOT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BALL_HUI, BALL_WHT, BALL_DEC, XXXXXXX, XXXXXXX,
+// ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
+ EE_CLR, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_TOG,
+// ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_RMOD,RGB_HUD, RGB_SAD, RGB_VAD, _______,
+// └────────┴────────┴────────┴────────┼────────┤ ├────────┼────────┴────────┴────────┴────────┘
+ _______, _______,
+// ┌────────┬────────┼────────┼ ┼────────┼────────┬────────┐
+ _______, _______, _______, _______, _______, _______
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ )
+};
+
+
+#ifdef OLED_ENABLE
+oled_rotation_t oled_init_user(oled_rotation_t rotation) {
+
+ if (is_keyboard_master()) {
+ if(is_keyboard_left()){
+ return OLED_ROTATION_270;
+ }
+ else {
+ return OLED_ROTATION_90;
+ }
+ } else {
+ return OLED_ROTATION_0;
+ }
+}
+static void render_logo(void) {
+ static const char PROGMEM drac_logo[] = {
+ // drac_logo, 128x64px
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x0c, 0x18, 0x78, 0xf0, 0xf0, 0xe0, 0xe0, 0xc0,
+ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
+ 0xff, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x07, 0x3e, 0xfc, 0xf0, 0x00, 0x00, 0x00,
+ 0xf0, 0xf0, 0x60, 0x30, 0x30, 0x30, 0x00, 0x00, 0xe0, 0xe0, 0x30, 0x30, 0x30, 0x30, 0x30, 0xe0,
+ 0xe0, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x70, 0x30, 0x30, 0x30, 0x70, 0xe0, 0xc0, 0x00, 0x00,
+ 0xf0, 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0,
+ 0x80, 0x00, 0x00, 0x00, 0x80, 0xe0, 0xf8, 0xf0, 0x80, 0xc0, 0xe0, 0xf0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x3f, 0xff, 0xff,
+ 0xff, 0xff, 0xfe, 0xfc, 0xf8, 0xe0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
+ 0xff, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc0, 0xe0, 0x7c, 0x3f, 0x0f, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xf8, 0xcc, 0x8c, 0x84, 0x86, 0x86, 0xc6, 0xff,
+ 0xff, 0x80, 0x80, 0x00, 0x3f, 0x7f, 0xe0, 0xc0, 0x80, 0x80, 0x80, 0xc0, 0xf0, 0x71, 0x00, 0x00,
+ 0x1f, 0xff, 0xff, 0x80, 0x80, 0x80, 0x80, 0xc0, 0xf8, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x03, 0x03, 0x07, 0x0f, 0x0f, 0x0f, 0x1f,
+ 0x7f, 0x7f, 0x3e, 0x3e, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf8, 0xf8, 0xfc,
+ 0xfc, 0xfe, 0xfe, 0x7e, 0x7c, 0x78, 0xe0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfe, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
+ 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0x60, 0x60,
+ 0x60, 0x60, 0x60, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xe0, 0x60, 0x60, 0x60, 0xc0,
+ 0xc0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07,
+ 0x0f, 0x3e, 0x7c, 0xfc, 0xf8, 0xf8, 0xf8, 0xf8, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf8,
+ 0xf8, 0xf8, 0xfc, 0xfc, 0xfc, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x7f, 0x3f, 0x1f, 0x0f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
+ 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xf1, 0x99, 0x18, 0x08,
+ 0x0c, 0x0c, 0x8c, 0xff, 0xff, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xc1, 0x80, 0x00, 0x00, 0x00, 0x80,
+ 0xc3, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x07, 0x0f, 0x0f, 0x0f, 0x1f, 0x1f, 0x1f, 0x1f,
+ 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x0f, 0x0f, 0x07, 0x07, 0x03, 0x03, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03,
+ 0x03, 0x03, 0x01, 0x01, 0x03, 0x03, 0x03, 0x00, 0x00, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, 0x01,
+ 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ };
+ oled_write_raw_P(drac_logo, sizeof(drac_logo));
+}
+
+static void render_status(void) {
+ oled_write_P(PSTR("This is\n~~~~~~~~~\nDracu\nLad\n~~~~~~~~~\nv1.0\n~~~~~~~~~\n"), false);
+ uint8_t n = get_current_wpm();
+ char wpm_counter[4];
+ wpm_counter[3] = '\0';
+ wpm_counter[2] = '0' + n % 10;
+ wpm_counter[1] = (n /= 10) % 10 ? '0' + (n) % 10 : (n / 10) % 10 ? '0' : ' ';
+ wpm_counter[0] = n / 10 ? '0' + n / 10 : ' ';
+ oled_write_P(PSTR("WPM:"), false);
+ oled_write(wpm_counter, false);
+ led_t led_state = host_keyboard_led_state();
+ oled_write_P(PSTR("\nCaps: "), false);
+ oled_write_P(led_state.caps_lock ? PSTR("on ") : PSTR("off"), false);
+ oled_write_P(PSTR("\n"), false);
+ switch (get_highest_layer(layer_state)) {
+ case _BASE:
+ oled_write_P(PSTR("Base "), false);
+ break;
+ case _NAV:
+ oled_write_P(PSTR("Navigat"), false);
+ break;
+ case _NUM:
+ oled_write_P(PSTR("Numbers"), false);
+ break;
+ case _SYM:
+ oled_write_P(PSTR("Symbols"), false);
+ break;
+ case _ADJ:
+ oled_write_P(PSTR("Adjust "), false);
+ break;
+ case _MUS:
+ oled_write_P(PSTR("Mouse "), false);
+ break;
+ case _FUN:
+ oled_write_P(PSTR("Functio"), false);
+ break;
+ default:
+ oled_write_P(PSTR("Unkn "), false);
+ break;
+ }
+}
+
+bool oled_task_user(void) {
+ if (is_keyboard_master()) {
+ render_status(); // Renders the current keyboard state (layer, lock, caps, scroll, etc)
+ } else {
+ render_logo();
+ }
+ return false;
+}
+
+#endif //OLED_ENABLE
+
+uint8_t white = 0;
+uint8_t red = 255;
+uint8_t green = 0;
+uint8_t blue = 0;
+
+bool set_scrolling = false;
+report_mouse_t pointing_device_task_user(report_mouse_t mouse_report) {
+ if (set_scrolling) {
+ mouse_report.h = mouse_report.x;
+ mouse_report.v = mouse_report.y;
+ mouse_report.x = mouse_report.y = 0;
+ }
+ return mouse_report;
+}
+
+void ball_increase_hue(void){
+ if(red!=255&&green!=255&&blue!=255){
+ red =255;
+ }
+ if (red==255&&green<255&&blue==0){
+ green += 15;
+ } else if(green==255&&blue==0&&red>0){
+ red-=15;
+ } else if(red==0&&blue<255&&green==255){
+ blue+=15;
+ } else if(blue==255&&green>0&&red==0){
+ green -= 15;
+ } else if(green == 0&&blue==255&&red<255){
+ red +=15;
+ } else if(green ==0&&blue>0&&red==255){
+ blue -=15;
+ }
+ pimoroni_trackball_set_rgbw(red,green,blue,white);
+}
+
+void decrease_color(void){
+ if (green>0){
+ green-=15;
+ }
+ if (red>0){
+ red-=15;
+ }
+ if (blue>0){
+ blue-=15;
+ }
+ pimoroni_trackball_set_rgbw(red,green,blue,white);
+}
+
+void cycle_white(void){
+ if (white<255){
+ white +=15;
+ } else{
+ white=0;
+ }
+ pimoroni_trackball_set_rgbw(red,green,blue,white);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record){
+ switch (keycode){
+ case M_PASS1:
+ if (record->event.pressed) {
+ SEND_STRING("T3lg3Ranch!2023");
+ }
+ return false;
+ case M_PASS2:
+ if (record->event.pressed) {
+ SEND_STRING("C0pperfield!2023");
+ }
+ return false;
+ case BALL_HUI:
+ if(record->event.pressed){
+ ball_increase_hue();
+ }
+ break;
+
+ case BALL_WHT:
+ if(record-> event.pressed){
+ cycle_white();
+ }
+ break;
+
+ case BALL_DEC:
+ if(record-> event.pressed){
+ decrease_color();
+ }
+ break;
+
+ case BALL_SCR:
+ if(record->event.pressed){
+ set_scrolling = true;
+ } else{
+ set_scrolling = false;
+ }
+ break;
+
+ case BALL_NCL:
+ record->event.pressed?register_code(KC_BTN1):unregister_code(KC_BTN1);
+ break;
+ case BALL_RCL:
+ record->event.pressed?register_code(KC_BTN2):unregister_code(KC_BTN2);
+ break;
+ case BALL_MCL:
+ record->event.pressed?register_code(KC_BTN3):unregister_code(KC_BTN3);
+ break;
+ }
+ return true;
+}
+
+#ifdef ENCODER_ENABLE
+bool encoder_update_user(uint8_t index, bool clockwise) {
+ if (index == 0) {
+ // Volume control
+ if (clockwise) {
+ tap_code(KC_VOLU);
+ } else {
+ tap_code(KC_VOLD);
+ }
+ }
+ else if (index == 2) {
+ switch (get_highest_layer(layer_state)) {
+ case _ADJ:
+ clockwise?ball_increase_hue():cycle_white();
+ break;
+ case _MUS:
+ clockwise?tap_code(KC_WH_U):tap_code(KC_WH_D);
+ break;
+ default:
+ clockwise?tap_code(KC_PGUP):tap_code(KC_PGDN);
+ break;
+ }
+ }
+ // I only have 2 encoders on the the pimoroni example board, just add else ifs for your other encoders...
+ // the missing ones are encoder 1 on the right side and encoder 3 on the left side
+ return true;
+}
+#endif // ENCODER_ENABLE
diff --git a/draculad/rules.mk b/draculad/rules.mk
new file mode 100644
index 0000000..6d050e5
--- /dev/null
+++ b/draculad/rules.mk
@@ -0,0 +1,12 @@
+# only uncomment on the side you have your trackball on
+POINTING_DEVICE_ENABLE = yes
+POINTING_DEVICE_DRIVER = pimoroni_trackball
+OLED_ENABLE = yes
+MOUSEKEY_ENABLE = yes
+
+ENCODER_ENABLE = yes
+
+TAP_DANCE_ENABLE = yes
+LTO_ENABLE = yes
+BOOTLOADER = rp2040
+CONVERT_TO = promicro_rp2040
diff --git a/iris/config.h b/iris/config.h
new file mode 100644
index 0000000..ad743b6
--- /dev/null
+++ b/iris/config.h
@@ -0,0 +1,35 @@
+/* Copyright 2023 Dave Vigil dgvigil
+ *
+ * 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 .
+ */
+#pragma once
+
+#define AUTO_SHIFT_TIMEOUT 150
+
+#define SPLIT_LAYER_STATE_ENABLE
+
+#define MOUSEKEY_DELAY 20
+#define MOUSEKEY_INTERVAL 20
+#define MOUSEKEY_MAX_SPEED 5
+#define MOUSEKEY_TIME_TO_MAX 40
+#define MOUSEKEY_WHEEL_MAX_SPEED 10
+
+// Tapping Term
+#define TAPPING_TERM 200
+#define TAPPING_TERM_PER_KEY
+
+
+#define COMBO_TERM 25 // how quickly all combo keys must be pressed in succession to trigger
+#define COMBO_MUST_HOLD_MODS // if a combo triggers a modifier, only trigger when the combo is held
+#define COMBO_HOLD_TERM 175 // how long at least one of the combo keys must be held to trigger
diff --git a/iris/keymap.c b/iris/keymap.c
new file mode 100644
index 0000000..5db400e
--- /dev/null
+++ b/iris/keymap.c
@@ -0,0 +1,205 @@
+/* Copyright 2023 Dave Vigil dgvigil
+ *
+ * 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
+
+enum layer_number {
+ _BASE,
+ _NAV,
+ _NUM,
+ _SYM,
+ _FUN,
+ _MUS,
+ _MOUSE
+};
+
+enum custom_keycodes {
+ M_PASS1 = SAFE_RANGE,
+ M_PASS2
+};
+
+// Tap Dance declarations
+enum {
+ TD_Q_ESC,
+};
+
+// Tap Dance definitions
+tap_dance_action_t tap_dance_actions[] = {
+ // Tap once for Q, twice for Escape
+ [TD_Q_ESC] = ACTION_TAP_DANCE_DOUBLE(KC_Q, KC_ESC),
+};
+
+enum combos {
+ FA_GUI,
+ FS_ALT,
+ FD_CTL,
+ JQUOT_GUI,
+ JL_ALT,
+ JK_CTL
+};
+
+const uint16_t PROGMEM fa_combo[] = {KC_F, KC_A, COMBO_END};
+const uint16_t PROGMEM fs_combo[] = {KC_F, KC_S, COMBO_END};
+const uint16_t PROGMEM fd_combo[] = {KC_F, KC_D, COMBO_END};
+const uint16_t PROGMEM jquote_combo[] = {KC_J, KC_QUOT, COMBO_END};
+const uint16_t PROGMEM jl_combo[] = {KC_J, KC_L, COMBO_END};
+const uint16_t PROGMEM jk_combo[] = {KC_J, KC_K, COMBO_END};
+
+combo_t key_combos[] = {
+ [FA_GUI] = COMBO(fa_combo, KC_LGUI),
+ [FS_ALT] = COMBO(fs_combo, KC_LALT),
+ [FD_CTL] = COMBO(fd_combo, KC_LCTL),
+ [JQUOT_GUI] = COMBO(jquote_combo, KC_RGUI),
+ [JL_ALT] = COMBO(jl_combo, KC_RALT),
+ [JK_CTL] = COMBO(jk_combo, KC_RCTL),
+};
+
+// LEFT THUMB KEYS
+#define MUS_ESC LT(_MUS, KC_ESC)
+#define NAV_BKSP LT(_NAV, KC_BSPC)
+#define MOUSE_TAB LT(_MOUSE, KC_TAB)
+// RIGHT THUMB KEYS
+#define SYM_ENTER LT(_SYM, KC_ENTER)
+#define NUM_SPC LT(_NUM, KC_SPC)
+#define FUN_DEL LT(_FUN, KC_DEL)
+// TAP DANCE
+#define Q_ESC TD(TD_Q_ESC)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MUTE,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_LPAD, Q_ESC, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, QK_CAPS_WORD_TOGGLE, _______, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ MUS_ESC, NAV_BKSP,MOUSE_TAB, SYM_ENTER,NUM_SPC,FUN_DEL
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+
+ [_NAV] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ _______, _______, _______, _______, _______, KC_LPAD, KC_PSCR, _______, _______, _______, _______, RGB_TOG,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, _______, _______, KC_PSTE, KC_COPY, KC_CUT, KC_UNDO, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, _______, KC_CAPS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, M_PASS2, M_PASS1, QK_LEAD, _______, _______, KC_HOME, KC_PGUP, KC_PGDN, KC_END, _______,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ _______, _______, _______, _______, _______, _______
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+
+ [_NUM] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ _______, _______, _______, _______, _______, KC_LPAD, KC_PSCR, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, KC_LBRC, KC_7, KC_8, KC_9, KC_RBRC, _______, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, KC_SCLN, KC_4, KC_5, KC_6, KC_EQL, _______, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, KC_DOT, KC_1, KC_2, KC_3, KC_BSLS, KC_LPRN, _______, _______, _______, _______, _______, _______, _______,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ KC_DOT, KC_0, KC_MINUS, _______, _______, _______
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+
+ [_SYM] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ _______, _______, _______, _______, _______, KC_LPAD, KC_PSCR, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, KC_LCBR, KC_AMPR, KC_ASTR, KC_LPRN, KC_RCBR, _______, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, KC_COLN, KC_DLR, KC_PERC, KC_CIRC, KC_PLUS, _______, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_PIPE, _______, _______, _______, _______, _______, _______, _______, _______,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ KC_LPRN, KC_RPRN, KC_UNDS, _______, _______, _______
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+
+ [_FUN] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ _______, _______, _______, _______, _______, KC_LPAD, KC_PSCR, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, KC_F12, KC_F7, KC_F8, KC_F9, KC_PSCR, _______, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, KC_F11, KC_F4, KC_F5, KC_F6, _______, _______, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, KC_F10, KC_F1, KC_F2, KC_F3, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ _______, _______, _______, _______, _______, _______
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+
+ [_MUS] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ _______, _______, _______, _______, _______, KC_LPAD, KC_PSCR, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT, _______,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ _______, _______, _______, KC_MSTP, KC_MPLY, KC_MUTE
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+
+ [_MOUSE] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ _______, _______, _______, _______, _______, KC_LPAD, KC_PSCR, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, _______, _______, KC_PSTE, KC_COPY, KC_CUT, KC_UNDO, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, _______, KC_BTN1, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_BTN2, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R, _______,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ _______, _______, _______, _______, _______, _______
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ )
+};
+
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case M_PASS1:
+ if (record->event.pressed) {
+ SEND_STRING("T3lg3Ranch!2023");
+ }
+ return false;
+ case M_PASS2:
+ if (record->event.pressed) {
+ SEND_STRING("C0pperfield!2023");
+ }
+ return false;
+ }
+ return true;
+}
+
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [_BASE] = { ENCODER_CCW_CW(KC_PGUP, KC_PGDN), ENCODER_CCW_CW(KC_A, KC_A), ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [_NAV] = { ENCODER_CCW_CW(KC_MPRV, KC_MNXT), ENCODER_CCW_CW(KC_A, KC_A), ENCODER_CCW_CW(KC_MPRV, KC_MNXT), ENCODER_CCW_CW(RGB_MOD, RGB_RMOD) },
+ [_NUM] = { ENCODER_CCW_CW(C(KC_LEFT), C(KC_RIGHT)), ENCODER_CCW_CW(KC_A, KC_A), ENCODER_CCW_CW(RGB_SAD, RGB_SAI), ENCODER_CCW_CW(KC_B, KC_B) },
+ [_SYM] = { ENCODER_CCW_CW(C(KC_TAB), S(C(KC_TAB))), ENCODER_CCW_CW(KC_A, KC_A), ENCODER_CCW_CW(KC_LEFT, KC_RIGHT), ENCODER_CCW_CW(KC_B, KC_B) },
+ [_MOUSE] = { ENCODER_CCW_CW(RGB_SPD, RGB_SPI), ENCODER_CCW_CW(KC_A, KC_A), ENCODER_CCW_CW(KC_LEFT, KC_RIGHT), ENCODER_CCW_CW(KC_B, KC_B) },
+ [_FUN] = { ENCODER_CCW_CW(RGB_SPD, RGB_SPI), ENCODER_CCW_CW(KC_A, KC_A), ENCODER_CCW_CW(KC_LEFT, KC_RIGHT), ENCODER_CCW_CW(KC_B, KC_B) },
+ [_MUS] = { ENCODER_CCW_CW(RGB_SPD, RGB_SPI), ENCODER_CCW_CW(KC_A, KC_A), ENCODER_CCW_CW(KC_LEFT, KC_RIGHT), ENCODER_CCW_CW(KC_B, KC_B) },
+};
diff --git a/iris/light_layers.h b/iris/light_layers.h
new file mode 100644
index 0000000..0223ed6
--- /dev/null
+++ b/iris/light_layers.h
@@ -0,0 +1,127 @@
+// Copyright 2022 Ignacy Radliński (@radlinskii)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+/*
+
+LED index mapping:
+
+ (31) (32) (33) (67) (66) (65)
+┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+│0 │1 │2 │3 │4 │5 │ │39 │38 │37 │36 │35 │34 │
+├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+│11 │10 │9 │8 │7 │6 │ │40 │41 │42 │43 │44 │45 │
+├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+│12 │13 │14 │15 │16 │17 │ │51 │50 │49 │48 │47 │46 │
+├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+│23 │22 │21 │20 │19 │18 │27 │ │61 │52 │53 │54 │55 │56 │57 │
+└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ │24 │25 │26 │ │60 │59 │58 │
+ └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ (30) (29) (28) (62) (63) (64)
+
+*/
+
+const rgblight_segment_t PROGMEM COLEMAK_LIGHT_LAYER[] = RGBLIGHT_LAYER_SEGMENTS(
+ // left side
+ {0, 1, HSV_GREEN}, // Computer
+ {1, 1, 0, 55, 140},
+ {2, 1, HSV_ORANGE}, // B-WING
+ {3, 1, HSV_WHITE}, // X-WING
+ {4, 1, HSV_YELLOW}, // Y-WING
+ {5, 1, 160, 160, 160}, // M FALCON
+ {6, 1, HSV_BLUE}, // R2-D2
+ {7, 1, 0, 55, 140},
+ {8, 1, HSV_YELLOW}, // C3PO
+ {9, 1, 0, 55, 140},
+ {10, 1, HSV_ORANGE}, // BB8
+ {11, 1, 0, 55, 140},
+ {12, 6, 0, 55, 140},
+ {18, 6, 0, 55, 140},
+ {24, 1, 0, 55, 140},
+ {25, 1, HSV_BLUE}, // Thumb/Jedi
+ {26, 1, 0, 55, 140},
+ {27, 1, HSV_BLUE}, // Rebel
+ {28, 3, HSV_BLUE}, // underglow
+ {31, 3, HSV_BLUE}, // underglow
+ // right side
+ {34, 3, 0, 55, 140},
+ {37, 3, 160, 160, 160}, // AT-AT, AT-ST, Tie fighter
+ {40, 1, HSV_GREEN}, // Boba Fett
+ {41, 1, 0, 55, 140},
+ {42, 1, HSV_WHITE}, // Storm Trooper
+ {43, 1, 0, 55, 140},
+ {44, 1, 160, 160, 160}, // Death Star
+ {45, 1, 0, 55, 140},
+ {46, 6, 0, 55, 140},
+ {52, 6, 0, 55, 140},
+ {58, 1, 0, 55, 140},
+ {59, 1, HSV_RED}, // Thumb / Empire
+ {60, 1, 0, 55, 140},
+ {61, 1, 32, 32, 32}, // Vader
+ {62, 3, HSV_RED}, // underglow
+ {65, 3, HSV_RED} // underglow
+);
+
+const rgblight_segment_t PROGMEM QWERTY_LIGHT_LAYER[] = RGBLIGHT_LAYER_SEGMENTS(
+ // left side
+ {0, 6, HSV_RED},
+ {6, 6, HSV_RED},
+ {12, 6, HSV_RED},
+ {18, 6, HSV_RED},
+ {24, 1, HSV_RED},
+ {25, 1, HSV_WHITE}, // THUMB
+ {26, 2, HSV_RED},
+ {28, 3, HSV_RED}, // underglow
+ {31, 3, HSV_RED}, // underglow
+ // right side
+ {34, 6, HSV_RED},
+ {40, 6,HSV_RED},
+ {46, 6, HSV_RED},
+ {52, 6, HSV_RED},
+ {58, 1, HSV_RED},
+ {59, 1, HSV_WHITE}, // THUMB
+ {60, 2, HSV_RED},
+ {62, 3, HSV_RED}, // underglow
+ {65, 3, HSV_RED} // underglow
+);
+
+const rgblight_segment_t PROGMEM NAV_LIGHT_LAYER[] = RGBLIGHT_LAYER_SEGMENTS(
+ // left side
+ {0, 3, HSV_RED}, // F1-F3
+ {3, 3, HSV_BLACK},
+ {6, 1, HSV_ORANGE}, // KC_GRV
+ {7, 2, HSV_BLUE}, // Macro 1 & 2
+ {9, 2, HSV_RED}, // F4-F6
+ {12, 3, HSV_RED}, // F7-F9
+ {15, 3, HSV_ORANGE},// L/R and bracket
+ {18, 1, HSV_WHITE}, // bracket
+ {19, 2, HSV_BLACK},
+ {21, 3, HSV_RED}, // F10-F12
+ {24, 1, HSV_BLACK},
+ {25, 1, HSV_BLACK}, // THUMB
+ {26, 2, HSV_BLACK},
+ {28, 3, HSV_WHITE}, // underglow
+ {31, 3, HSV_WHITE}, // underglow
+ // right side
+ {34, 3, HSV_WHITE}, // NUM 7-9
+ {37, 3, HSV_BLACK},
+ {40, 3, HSV_BLACK},
+ {43, 3, HSV_WHITE}, // NUM 4-6
+ {46, 3, HSV_WHITE}, // NUM 1-3
+ {49, 3, HSV_ORANGE}, // U/D and bracket
+ {52, 1, HSV_ORANGE}, // bracket
+ {53, 2, HSV_BLACK},
+ {55, 1, HSV_WHITE}, // NUM 0
+ {56, 2, HSV_YELLOW}, // Dot and Enter
+ {58, 3, HSV_BLACK},
+ {62, 3, HSV_WHITE}, // underglow
+ {65, 3, HSV_WHITE} // underglow
+);
+
+const rgblight_segment_t* const PROGMEM MY_LIGHT_LAYERS[] = RGBLIGHT_LAYERS_LIST(
+ COLEMAK_LIGHT_LAYER,
+ QWERTY_LIGHT_LAYER,
+ NAV_LIGHT_LAYER
+);
diff --git a/iris/readme.md b/iris/readme.md
new file mode 100644
index 0000000..5a0e929
--- /dev/null
+++ b/iris/readme.md
@@ -0,0 +1,137 @@
+# Iris rev. 6 keymap by radlinskii
+
+
+
+## Features:
+
+- [RGB Lightning layers](https://docs.qmk.fm/#/feature_rgblight?id=lighting-layers)
+- [MOUSE KEYS](https://docs.qmk.fm/#/keycodes?id=mouse-keys)
+- [MOD-TAPS](https://docs.qmk.fm/#/mod_tap)
+
+## Layers:
+
+### colemak - default
+
+> [Colemak DH](https://colemakmods.github.io/mod-dh/) keyboard layout.
+
+
+
+ keymap
+
+
+
+
+
+
+
+ lightning
+
+
+
+
+
+
+
+### qwerty - alternative default
+
+> Can be set as persistent default layer.
+
+
+
+ keymap
+
+
+
+
+
+
+
+ lightning
+
+
+
+
+
+
+### numeric + symbols
+
+
+
+ keymap
+
+
+
+
+
+
+
+ lightning
+
+
+
+
+
+
+### navigation
+
+> Layer with arrow navigation.
+
+
+
+ keymap
+
+
+
+
+
+
+
+ lightning
+
+
+
+
+
+
+### mouse
+
+> Layer with mouse navigation on the same keys as arrow navigation.
+
+
+
+ keymap
+
+
+
+
+
+
+
+ lightning
+
+
+
+
+
+
+### media and miscellaneous
+
+> Used for media keys, switching default layer and keyboard reset.
+
+
+
+ keymap
+
+
+
+
+
+
+
+ lightning
+
+
+
+
+
+
diff --git a/iris/rules.mk b/iris/rules.mk
new file mode 100644
index 0000000..a85d301
--- /dev/null
+++ b/iris/rules.mk
@@ -0,0 +1,7 @@
+AUTO_SHIFT_ENABLE = yes
+CAPS_WORD_ENABLE = yes
+COMBO_ENABLE = yes
+TAP_DANCE_ENABLE = yes
+
+ENCODER_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
diff --git a/scottogame/config.h b/scottogame/config.h
new file mode 100644
index 0000000..42caf59
--- /dev/null
+++ b/scottogame/config.h
@@ -0,0 +1,22 @@
+/* Copyright 2023 Dave Vigil dgvigil
+ *
+ * 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 .
+ */
+
+#pragma once
+
+// Define options
+#define TAPPING_TERM 135
+#define PERMISSIVE_HOLD
+#define TAPPING_TERM_PER_KEY
diff --git a/scottogame/keymap.c b/scottogame/keymap.c
new file mode 100644
index 0000000..8272d43
--- /dev/null
+++ b/scottogame/keymap.c
@@ -0,0 +1,48 @@
+/* Copyright 2023 Dave Vigil dgvigil
+ *
+ * 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
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ortho_6_3x10_6(
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6,
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_BSPC,
+ LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, RSFT_T(KC_SLSH),
+ KC_LCTL, KC_LALT, LGUI_T(KC_SPC), LT(1, KC_TAB), LT(2, KC_ENT), KC_ESC
+ ),
+ [1] = LAYOUT_ortho_6_3x10_6(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_UNDS, KC_MINS, KC_PLUS, KC_EQL, KC_COLN, KC_GRV, KC_MRWD, KC_MPLY, KC_MFFD, KC_DEL,
+ KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_PIPE, KC_ESC, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT,
+ LSFT_T(KC_LBRC), KC_QUOT, KC_DQUO, KC_RBRC, KC_SCLN, KC_TILDE, KC_VOLD, KC_MUTE, KC_VOLU, RSFT_T(KC_BSLS),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+ [2] = LAYOUT_ortho_6_3x10_6(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_CAPS, KC_BSPC,
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ KC_LSFT, KC_NO, KC_NO, KC_NO, MO(3), KC_NO, KC_NO, KC_COMM, KC_DOT, RSFT_T(KC_SLSH),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+ [3] = LAYOUT_ortho_6_3x10_6(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
+ KC_F11, KC_NO, KC_NO, QK_BOOT, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
\ No newline at end of file
diff --git a/scottogame/rules.mk b/scottogame/rules.mk
new file mode 100644
index 0000000..9f00574
--- /dev/null
+++ b/scottogame/rules.mk
@@ -0,0 +1,2 @@
+OLED_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/sweep/config.h b/sweep/config.h
new file mode 100644
index 0000000..7e07bd3
--- /dev/null
+++ b/sweep/config.h
@@ -0,0 +1,23 @@
+/* Copyright 2023 Dave Vigil dgvigil
+ *
+ * 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 .
+ */
+
+#pragma once
+
+/* Tap Dance */
+#define TAPPING_TERM 200
+#define TAPPING_TERM_PER_KEY
+
+#define EE_HANDS
diff --git a/sweep/keymap.c b/sweep/keymap.c
new file mode 100644
index 0000000..0b0d48f
--- /dev/null
+++ b/sweep/keymap.c
@@ -0,0 +1,143 @@
+/* Copyright 2023 Dave Vigil dgvigil
+ *
+ * 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
+
+#define _BASE 0
+#define _NAV 1
+#define _NUM 2
+#define _SYM 3
+#define _FUN 4
+
+//Tap Dance Declarations
+enum {
+ TD_ESC_Q,
+ TD_ESC_A,
+};
+
+//Tap Dance Definitions
+tap_dance_action_t tap_dance_actions[] = {
+ //Tap once for Q, twice for Esc
+ [TD_ESC_Q] = ACTION_TAP_DANCE_DOUBLE(KC_Q, KC_ESC),
+ //Tap once for A, twice for Tab
+ [TD_ESC_A] = ACTION_TAP_DANCE_DOUBLE(KC_A, KC_TAB)
+};
+
+enum custom_keycodes {
+ M_PASS1 = SAFE_RANGE,
+ M_PASS2
+};
+
+// LEFT THUMB KEYS
+#define NAV_BKSP LT(_NAV, KC_BSPC)
+#define FUN_TAB LT(_FUN, KC_TAB)
+// RIGHT THUMB KEYS
+#define SYM_ENTER LT(_SYM, KC_ENTER)
+#define NUM_SPC LT(_NUM, KC_SPC)
+
+// QWERTY mods
+// LEFT HOME KEY MODS
+#define GUIA MT(MOD_LGUI,KC_A)
+#define ALTS MT(MOD_LALT,KC_S)
+#define CTLD MT(MOD_LCTL,KC_D)
+#define SHTF MT(MOD_LSFT,KC_F)
+// RIGHT HOME KEY MODS
+#define SHTJ MT(MOD_LSFT | MOD_RSFT,KC_J)
+#define CTLK MT(MOD_LCTL | MOD_RCTL,KC_K)
+#define ALTL MT(MOD_LALT | MOD_RALT,KC_L)
+#define GUIQUOT MT(MOD_LGUI | MOD_RGUI,KC_QUOT)
+
+// Tap Dance
+#define KC_EscTap TD(TD_ESC_Q)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT(
+// ┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐
+ KC_EscTap,KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ // ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
+ GUIA, ALTS, CTLD, SHTF, KC_G, KC_H, SHTJ, CTLK, ALTL, GUIQUOT,
+ // ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,
+ // ├────────┼────────┼────────┼────┬───┴────┬───┴───┐ ┌────┴───┬────────┼────────┼────────┼─────────┘
+ NAV_BKSP,FUN_TAB, SYM_ENTER,NUM_SPC
+ // └────────┴───────┘ └────────┴────────┘
+ ),
+
+ [_NAV] = LAYOUT(
+// ┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐
+ _______, _______, _______, _______, _______, _______, KC_PSTE, KC_COPY, KC_CUT, KC_UNDO,
+ // ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, KC_CAPS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
+ // ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______,M_PASS2, M_PASS1, _______, KC_HOME, KC_PGUP, KC_PGDN, KC_END,
+ // ├────────┼────────┼────────┼────┬───┴────┬───┴───┐ ┌────┴───┬────────┼────────┼────────┼─────────┘
+ _______, _______, _______, _______
+ // └────────┴───────┘ └────────┴────────┘
+ ),
+
+ [_NUM] = LAYOUT(
+// ┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐
+ KC_LBRC, KC_7, KC_8, KC_9, KC_RBRC, _______, _______, _______, _______, _______,
+ // ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
+ KC_SCLN, KC_4, KC_5, KC_6, KC_EQL, _______, _______, _______, _______, _______,
+ // ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
+ KC_DOT, KC_1, KC_2, KC_3, KC_MINS, _______, _______, _______, _______, _______,
+ // ├────────┼────────┼────────┼────┬───┴────┬───┴───┐ ┌────┴───┬────────┼────────┼────────┼─────────┘
+ KC_0, KC_MINUS, _______, _______
+ // └────────┴───────┘ └────────┴────────┘
+ ),
+
+ [_SYM] = LAYOUT(
+// ┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐
+ KC_LCBR, KC_AMPR, KC_ASTR, KC_LPRN, KC_RBRC, _______, _______, _______, _______, _______,
+ // ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
+ KC_COLN, KC_DLR, KC_PERC, KC_CIRC, KC_PLUS, KC_LPRN, KC_RPRN, _______, _______, _______,
+ // ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_PIPE, KC_LPRN, KC_RPRN, _______, _______, _______,
+ // ├────────┼────────┼────────┼────┬───┴────┬───┴───┐ ┌────┴───┬────────┼────────┼────────┼─────────┘
+ KC_RPRN, KC_UNDS, _______, _______
+ // └────────┴───────┘ └────────┴────────┘
+ ),
+
+ [_FUN] = LAYOUT(
+// ┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐
+ _______, _______, _______, _______, _______, KC_F12, KC_F7, KC_F8, KC_F9, KC_PSCR,
+ // ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, KC_F11, KC_F4, KC_F5, KC_F6, _______,
+ // ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, KC_F10, KC_F1, KC_F2, KC_F3, _______,
+ // ├────────┼────────┼────────┼────┬───┴────┬───┴───┐ ┌────┴───┬────────┼────────┼────────┼─────────┘
+ _______, _______, _______, _______
+ // └────────┴───────┘ └────────┴────────┘
+ )
+
+};
+
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case M_PASS1:
+ if (record->event.pressed) {
+ SEND_STRING("T3lg3Ranch!2023");
+ }
+ return false;
+ case M_PASS2:
+ if (record->event.pressed) {
+ SEND_STRING("C0pperfield!2023");
+ }
+ return false;
+ }
+ return true;
+}
diff --git a/sweep/rules.mk b/sweep/rules.mk
new file mode 100644
index 0000000..75fa6e4
--- /dev/null
+++ b/sweep/rules.mk
@@ -0,0 +1,4 @@
+TAP_DANCE_ENABLE = yes
+LTO_ENABLE = yes
+BOOTLOADER = rp2040
+CONVERT_TO = promicro_rp2040
diff --git a/swoop/config.h b/swoop/config.h
new file mode 100644
index 0000000..7aa7f1d
--- /dev/null
+++ b/swoop/config.h
@@ -0,0 +1,44 @@
+/* Copyright 2023 Dave Vigil dgvigil
+ *
+ * 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 .
+ */
+#pragma once
+
+#define EE_HANDS
+
+// OLED driver
+#ifdef OLED_DRIVER_ENABLE
+ #define OLED_DISPLAY_128X32
+ #define OLED_TIMEOUT 30000
+#endif
+
+#define AUTO_SHIFT_TIMEOUT 150
+#define NO_AUTO_SHIFT_SPECIAL
+
+#define SPLIT_LAYER_STATE_ENABLE
+
+#define MOUSEKEY_DELAY 20
+#define MOUSEKEY_INTERVAL 20
+#define MOUSEKEY_MAX_SPEED 5
+#define MOUSEKEY_TIME_TO_MAX 40
+#define MOUSEKEY_WHEEL_MAX_SPEED 10
+
+// Tapping Term
+#define TAPPING_TERM 200
+#define TAPPING_TERM_PER_KEY
+
+
+#define COMBO_TERM 25 // how quickly all combo keys must be pressed in succession to trigger
+#define COMBO_MUST_HOLD_MODS // if a combo triggers a modifier, only trigger when the combo is held
+#define COMBO_HOLD_TERM 175 // how long at least one of the combo keys must be held to trigger
diff --git a/swoop/keymap.c b/swoop/keymap.c
new file mode 100644
index 0000000..f75b80b
--- /dev/null
+++ b/swoop/keymap.c
@@ -0,0 +1,175 @@
+/* Copyright 2023 Dave Vigil dgvigil
+ *
+ * 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
+
+enum layer_number {
+ _BASE,
+ _NAV,
+ _NUM,
+ _SYM,
+ _FUN,
+ _MUS,
+ _MOUSE
+};
+
+enum custom_keycodes {
+ M_PASS1 = SAFE_RANGE,
+ M_PASS2
+};
+
+// Tap Dance declarations
+enum {
+ TD_Q_ESC,
+};
+
+// Tap Dance definitions
+tap_dance_action_t tap_dance_actions[] = {
+ // Tap once for Q, twice for Escape
+ [TD_Q_ESC] = ACTION_TAP_DANCE_DOUBLE(KC_Q, KC_ESC),
+};
+
+enum combos {
+ FA_GUI,
+ FS_ALT,
+ FD_CTL,
+ JQUOT_GUI,
+ JL_ALT,
+ JK_CTL
+};
+
+const uint16_t PROGMEM fa_combo[] = {KC_F, KC_A, COMBO_END};
+const uint16_t PROGMEM fs_combo[] = {KC_F, KC_S, COMBO_END};
+const uint16_t PROGMEM fd_combo[] = {KC_F, KC_D, COMBO_END};
+const uint16_t PROGMEM jquote_combo[] = {KC_J, KC_QUOT, COMBO_END};
+const uint16_t PROGMEM jl_combo[] = {KC_J, KC_L, COMBO_END};
+const uint16_t PROGMEM jk_combo[] = {KC_J, KC_K, COMBO_END};
+
+combo_t key_combos[] = {
+ [FA_GUI] = COMBO(fa_combo, KC_LGUI),
+ [FS_ALT] = COMBO(fs_combo, KC_LALT),
+ [FD_CTL] = COMBO(fd_combo, KC_LCTL),
+ [JQUOT_GUI] = COMBO(jquote_combo, KC_RGUI),
+ [JL_ALT] = COMBO(jl_combo, KC_RALT),
+ [JK_CTL] = COMBO(jk_combo, KC_RCTL),
+};
+
+// LEFT THUMB KEYS
+#define MUS_ESC LT(_MUS, KC_ESC)
+#define NAV_BKSP LT(_NAV, KC_BSPC)
+#define MOUSE_TAB LT(_MOUSE, KC_TAB)
+// RIGHT THUMB KEYS
+#define SYM_ENTER LT(_SYM, KC_ENTER)
+#define NUM_SPC LT(_NUM, KC_SPC)
+#define FUN_DEL LT(_FUN, KC_DEL)
+// TAP DANCE
+#define Q_ESC TD(TD_Q_ESC)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT_split_3x5_3(
+// ┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐
+ Q_ESC, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+// ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT,
+// ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,
+// └────────┴────────┴────────┴────────┼────────┤ ├────────┼────────┴────────┴────────┴────────┘
+ MUS_ESC, NAV_BKSP,MOUSE_TAB, SYM_ENTER,NUM_SPC,FUN_DEL
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+ [_NAV] = LAYOUT_split_3x5_3(
+// ┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐
+ _______, _______, _______, _______, _______, _______, KC_PSTE, KC_COPY, KC_CUT, KC_UNDO,
+ // ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, KC_CAPS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
+ // ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, M_PASS2, M_PASS1, _______, KC_HOME, KC_PGUP, KC_PGDN, KC_END,
+// └────────┴────────┴────────┴────────┼────────┤ ├────────┼────────┴────────┴────────┴────────┘
+ _______, _______, _______, _______, _______, _______
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+
+ ),
+ [_NUM] = LAYOUT_split_3x5_3(
+// ┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐
+ KC_LBRC, KC_7, KC_8, KC_9, KC_RBRC, _______, _______, _______, _______, QK_BOOT,
+// ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
+ KC_SCLN, KC_4, KC_5, KC_6, KC_EQL, _______, _______, _______, _______, _______,
+// ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
+ KC_DOT, KC_1, KC_2, KC_3, KC_MINS, _______, _______, _______, _______, _______,
+// └────────┴────────┴────────┴────────┼────────┤ ├────────┼────────┴────────┴────────┴────────┘
+ KC_DOT, KC_0, KC_MINUS, _______, _______, _______
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+ [_SYM] = LAYOUT_split_3x5_3(
+// ┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐
+ KC_LCBR, KC_AMPR, KC_ASTR, KC_LPRN, KC_RBRC, _______, _______, _______, _______, _______,
+// ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
+ KC_COLN, KC_DLR, KC_PERC, KC_CIRC, KC_PLUS, KC_LPRN, KC_RPRN, _______, _______, _______,
+// ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_PIPE, KC_LPRN, KC_RPRN, _______, _______, _______,
+// └────────┴────────┴────────┴────────┼────────┤ ├────────┼────────┴────────┴────────┴────────┘
+ KC_LPRN, KC_RPRN, KC_UNDS, _______, _______, _______
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+ [_FUN] = LAYOUT_split_3x5_3(
+// ┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐
+ KC_F12, KC_F7, KC_F8, KC_F9, KC_PSCR, _______, _______, _______, _______, _______,
+// ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
+ KC_F11, KC_F4, KC_F5, KC_F6, _______, _______, _______, _______, _______, _______,
+// ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
+ KC_F10, KC_F1, KC_F2, KC_F3, _______, _______, _______, _______, _______, _______,
+// └────────┴────────┴────────┴────────┼────────┤ ├────────┼────────┴────────┴────────┴────────┘
+ KC_RPRN, KC_UNDS, _______, _______, _______, _______
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+ [_MUS] = LAYOUT_split_3x5_3(
+// ┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+// ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+// ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT,
+// └────────┴────────┴────────┴────────┼────────┤ ├────────┼────────┴────────┴────────┴────────┘
+ _______, _______, _______, KC_MSTP, KC_MPLY, KC_MUTE
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+ [_MOUSE] = LAYOUT_split_3x5_3(
+// ┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐
+ _______, _______, _______, _______, _______, _______, KC_PSTE, KC_COPY, KC_CUT, KC_UNDO,
+// ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, KC_BTN1, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R,
+// ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, KC_BTN2, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R,
+// └────────┴────────┴────────┴────────┼────────┤ ├────────┼────────┴────────┴────────┴────────┘
+ _______, _______, _______, _______, _______, _______
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ )
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case M_PASS1:
+ if (record->event.pressed) {
+ SEND_STRING("T3lg3Ranch!2023");
+ }
+ return false;
+ case M_PASS2:
+ if (record->event.pressed) {
+ SEND_STRING("C0pperfield!2023");
+ }
+ return false;
+ }
+ return true;
+}
diff --git a/swoop/rules.mk b/swoop/rules.mk
new file mode 100644
index 0000000..458c617
--- /dev/null
+++ b/swoop/rules.mk
@@ -0,0 +1,9 @@
+AUTO_SHIFT_ENABLE = yes
+CAPS_WORD_ENABLE = yes
+COMBO_ENABLE = yes
+TAP_DANCE_ENABLE = yes
+
+RGBLIGHT_ENABLE = yes # rgb leds underlight
+
+# To shrink the size of hex file
+LTO_ENABLE = yes