summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobby Zambito <contact@robbyzambito.me>2021-11-10 16:35:49 -0500
committerRobby Zambito <contact@robbyzambito.me>2021-11-10 16:35:49 -0500
commit1bf418fd8d6a33fa823ae369874a4798223dfbc0 (patch)
treed6320dddfb7150ba96cbd9e396e0375a5dac02cf
Initial commitHEADmaster
-rw-r--r--README.md14
-rw-r--r--build.log161
-rwxr-xr-xmoonlander_programmer-dvorak_PMVBL_BZy0x.binbin0 -> 60984 bytes
-rw-r--r--moonlander_programmer-dvorak_PMVBL_BZy0x.md51
-rw-r--r--moonlander_programmer-dvorak_source/config.h14
-rw-r--r--moonlander_programmer-dvorak_source/keymap.c448
-rw-r--r--moonlander_programmer-dvorak_source/rules.mk9
7 files changed, 647 insertions, 0 deletions
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..efefd11
--- /dev/null
+++ b/README.md
@@ -0,0 +1,14 @@
+# Building your layout from source
+
+Congratulations on taking the next step, and making use of your keyboard's open-source nature! There's so much power to unlock — this is going to be fun. :)
+
+Here are some initial pointers to get you started:
+
+- Use the documentation at [https://docs.qmk.fm/](https://docs.qmk.fm/) to set up your environment for building your firmware.
+- Build your layout against [https://github.com/zsa/qmk_firmware/](https://github.com/zsa/qmk_firmware/) which is our QMK fork (instead of qmk/qmk_firmware). This is what Oryx (the graphical configurator) uses, so it's guaranteed to work.
+- Create a folder with a simple name (no spaces!) for your layout inside the qmk_firmware/keyboards/moonlander/keymaps/ folder.
+- Copy the contents of the \*\_source folder (in the .zip you downloaded from Oryx) into this folder.
+- Make sure you've set up your environment per the [QMK docs](https://docs.qmk.fm/#/newbs_getting_started?id=set-up-your-environment) so compilation would actually work.
+- From your shell, make sure your working directory is qmk*firmware, then enter the command `make moonlander:_layout_`, substituting the name of the folder you created for "_layout_".
+
+Good luck on your journey! And remember, if you get stuck, you can always get back to your [original layout](https://configure.zsa.io/moonlander/layouts/PMVBL/BZy0x/0) from Oryx.
diff --git a/build.log b/build.log
new file mode 100644
index 0000000..c119fed
--- /dev/null
+++ b/build.log
@@ -0,0 +1,161 @@
+QMK Firmware Firmware20
+WARNING:
+ Can not run bin/qmk! This tool will be required when the develop branch is merged on 2020 Aug 29.
+
+ Please run util/qmk_install.sh to install all the dependencies QMK requires.
+
+Making moonlander with keymap b6657eab620164b935cc
+
+arm-none-eabi-gcc (Alpine Linux) 8.3.0
+Copyright (C) 2018 Free Software Foundation, Inc.
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+Compiling: keyboards/moonlander/matrix.c Compiling: keyboards/moonlander/moonlander.c Compiling: keyboards/moonlander/keymaps/b6657eab620164b935cc/keymap.c Compiling: quantum/quantum.c Compiling: quantum/led.c Compiling: quantum/keymap_common.c Compiling: quantum/debounce/sym_defer_g.c Compiling: quantum/keycode_config.c Compiling: quantum/process_keycode/process_audio.c Compiling: quantum/process_keycode/process_clicky.c Compiling: quantum/audio/audio_chibios.c Compiling: quantum/audio/voices.c [OK]
+Compiling: quantum/audio/luts.c [OK]
+Compiling: quantum/process_keycode/process_music.c [OK]
+Compiling: drivers/eeprom/eeprom_driver.c [OK]
+ [OK]
+Compiling: drivers/eeprom/eeprom_i2c.c Compiling: quantum/color.c [OK]
+Compiling: quantum/rgb_matrix.c [OK]
+Compiling: quantum/rgb_matrix_drivers.c [OK]
+Compiling: drivers/issi/is31fl3731.c [OK]
+ [OK]
+Compiling: quantum/process_keycode/process_rgb.c Compiling: quantum/led_tables.c [OK]
+ [OK]
+Compiling: quantum/process_keycode/process_space_cadet.c [OK]
+Compiling: quantum/oryx.c Compiling: quantum/process_keycode/process_magic.c [OK]
+ [OK]
+Compiling: quantum/process_keycode/process_grave_esc.c Compiling: quantum/process_keycode/process_dynamic_macro.c [OK]
+ [OK]
+Compiling: quantum/process_keycode/process_tap_dance.c Compiling: drivers/chibios/i2c_master.c [OK]
+Assembling: lib/chibios/os/common/startup/ARMCMx/compilers/GCC/crt0_v7m.S [OK]
+Assembling: lib/chibios/os/common/startup/ARMCMx/compilers/GCC/vectors.S [OK]
+Assembling: lib/chibios/os/common/ports/ARMCMx/compilers/GCC/chcoreasm_v7m.S [OK]
+Compiling: tmk_core/common/host.c [OK]
+ [OK]
+Compiling: tmk_core/common/keyboard.c Compiling: tmk_core/common/action.c [OK]
+Compiling: tmk_core/common/action_tapping.c [OK]
+Compiling: tmk_core/common/action_macro.c [OK]
+Compiling: tmk_core/common/action_layer.c [OK]
+Compiling: tmk_core/common/action_util.c [OK]
+Compiling: tmk_core/common/print.c [OK]
+Compiling: tmk_core/common/debug.c [OK]
+Compiling: tmk_core/common/sendchar_null.c [OK]
+ [OK]
+Compiling: tmk_core/common/util.c Compiling: tmk_core/common/eeconfig.c [OK]
+ [OK]
+ [OK]
+Compiling: tmk_core/common/report.c Compiling: tmk_core/common/chibios/timer.c Compiling: tmk_core/common/chibios/suspend.c [OK]
+Compiling: tmk_core/common/chibios/bootloader.c [OK]
+Compiling: lib/printf/printf.c [OK]
+Compiling: tmk_core/common/bootmagic_lite.c [OK]
+Compiling: tmk_core/common/magic.c [OK]
+Compiling: tmk_core/common/mousekey.c [OK]
+Compiling: tmk_core/common/webusb.c [OK]
+Compiling: tmk_core/protocol/chibios/usb_main.c [OK]
+Compiling: tmk_core/protocol/chibios/main.c [OK]
+Compiling: tmk_core/protocol/usb_descriptor.c [OK]
+Compiling: tmk_core/protocol/chibios/usb_driver.c [OK]
+ [OK]
+Compiling: lib/chibios/os/oslib/src/chmboxes.c Compiling: lib/chibios/os/oslib/src/chmemcore.c [OK]
+ [OK]
+Compiling: lib/chibios/os/oslib/src/chmemheaps.c Compiling: lib/chibios/os/oslib/src/chmempools.c [OK]
+Compiling: lib/chibios/os/oslib/src/chpipes.c [OK]
+ [OK]
+Compiling: lib/chibios/os/oslib/src/chfactory.c [OK]
+Compiling: lib/chibios/os/common/startup/ARMCMx/compilers/GCC/crt1.c Compiling: lib/chibios/os/rt/src/chsys.c [OK]
+ [OK]
+Compiling: lib/chibios/os/rt/src/chdebug.c Compiling: lib/chibios/os/rt/src/chtrace.c [OK]
+Compiling: lib/chibios/os/rt/src/chvt.c [OK]
+Compiling: lib/chibios/os/rt/src/chschd.c [OK]
+Compiling: lib/chibios/os/rt/src/chthreads.c [OK]
+Compiling: lib/chibios/os/rt/src/chtm.c [OK]
+ [OK]
+Compiling: lib/chibios/os/rt/src/chstats.c Compiling: lib/chibios/os/rt/src/chregistry.c [OK]
+ [OK]
+Compiling: lib/chibios/os/rt/src/chsem.c Compiling: lib/chibios/os/rt/src/chmtx.c [OK]
+ [OK]
+Compiling: lib/chibios/os/rt/src/chcond.c Compiling: lib/chibios/os/rt/src/chevents.c [OK]
+Compiling: lib/chibios/os/rt/src/chmsg.c [OK]
+ [OK]
+Compiling: lib/chibios/os/rt/src/chdynamic.c Compiling: lib/chibios/os/common/ports/ARMCMx/chcore.c [OK]
+Compiling: lib/chibios/os/common/ports/ARMCMx/chcore_v7m.c [OK]
+Compiling: lib/chibios/os/hal/osal/rt/osal.c [OK]
+Compiling: lib/chibios/os/hal/src/hal.c [OK]
+Compiling: lib/chibios/os/hal/src/hal_buffers.c [OK]
+ [OK]
+Compiling: lib/chibios/os/hal/src/hal_queues.c Compiling: lib/chibios/os/hal/src/hal_mmcsd.c [OK]
+ [OK]
+Compiling: lib/chibios/os/hal/src/hal_adc.c Compiling: lib/chibios/os/hal/src/hal_can.c [OK]
+Compiling: lib/chibios/os/hal/src/hal_crypto.c [OK]
+ [OK]
+Compiling: lib/chibios/os/hal/src/hal_dac.c [OK]
+Compiling: lib/chibios/os/hal/src/hal_gpt.c Compiling: lib/chibios/os/hal/src/hal_i2c.c [OK]
+ [OK]
+Compiling: lib/chibios/os/hal/src/hal_i2s.c Compiling: lib/chibios/os/hal/src/hal_icu.c [OK]
+Compiling: lib/chibios/os/hal/src/hal_mac.c [OK]
+Compiling: lib/chibios/os/hal/src/hal_mmc_spi.c [OK]
+Compiling: lib/chibios/os/hal/src/hal_pal.c [OK]
+Compiling: lib/chibios/os/hal/src/hal_pwm.c [OK]
+Compiling: lib/chibios/os/hal/src/hal_rtc.c [OK]
+Compiling: lib/chibios/os/hal/src/hal_sdc.c [OK]
+Compiling: lib/chibios/os/hal/src/hal_serial.c [OK]
+Compiling: lib/chibios/os/hal/src/hal_serial_usb.c [OK]
+Compiling: lib/chibios/os/hal/src/hal_sio.c [OK]
+Compiling: lib/chibios/os/hal/src/hal_spi.c [OK]
+ [OK]
+Compiling: lib/chibios/os/hal/src/hal_st.c Compiling: lib/chibios/os/hal/src/hal_trng.c [OK]
+Compiling: lib/chibios/os/hal/src/hal_uart.c [OK]
+Compiling: lib/chibios/os/hal/src/hal_usb.c [OK]
+Compiling: lib/chibios/os/hal/src/hal_wdg.c [OK]
+Compiling: lib/chibios/os/hal/src/hal_wspi.c [OK]
+Compiling: lib/chibios/os/hal/ports/common/ARMCMx/nvic.c [OK]
+ [OK]
+Compiling: lib/chibios/os/hal/ports/STM32/STM32F3xx/stm32_isr.c Compiling: lib/chibios/os/hal/ports/STM32/STM32F3xx/hal_lld.c [OK]
+Compiling: lib/chibios/os/hal/ports/STM32/LLD/ADCv3/hal_adc_lld.c [OK]
+ [OK]
+ [OK]
+Compiling: lib/chibios/os/hal/ports/STM32/LLD/CANv1/hal_can_lld.c Compiling: lib/chibios/os/hal/ports/STM32/LLD/DACv1/hal_dac_lld.c Compiling: lib/chibios/os/hal/ports/STM32/LLD/DMAv1/stm32_dma.c [OK]
+Compiling: lib/chibios/os/hal/ports/STM32/LLD/EXTIv1/stm32_exti.c [OK]
+ [OK]
+ [OK]
+Compiling: lib/chibios/os/hal/ports/STM32/LLD/GPIOv2/hal_pal_lld.c Compiling: lib/chibios/os/hal/ports/STM32/LLD/I2Cv2/hal_i2c_lld.c [OK]
+Compiling: lib/chibios/os/hal/ports/STM32/LLD/RTCv2/hal_rtc_lld.c Compiling: lib/chibios/os/hal/ports/STM32/LLD/SPIv2/hal_i2s_lld.c [OK]
+Compiling: lib/chibios/os/hal/ports/STM32/LLD/SPIv2/hal_spi_lld.c [OK]
+Compiling: lib/chibios/os/hal/ports/STM32/LLD/TIMv1/hal_st_lld.c [OK]
+Compiling: lib/chibios/os/hal/ports/STM32/LLD/TIMv1/hal_gpt_lld.c [OK]
+Compiling: lib/chibios/os/hal/ports/STM32/LLD/TIMv1/hal_icu_lld.c [OK]
+ [OK]
+ [OK]
+Compiling: lib/chibios/os/hal/ports/STM32/LLD/TIMv1/hal_pwm_lld.c [OK]
+Compiling: lib/chibios/os/hal/ports/STM32/LLD/USARTv2/hal_uart_lld.c Compiling: lib/chibios/os/hal/ports/STM32/LLD/USARTv2/hal_serial_lld.c Compiling: lib/chibios/os/hal/ports/STM32/LLD/USBv1/hal_usb_lld.c [OK]
+Compiling: lib/chibios/os/hal/ports/STM32/LLD/xWDGv1/hal_wdg_lld.c [OK]
+ [OK]
+ [OK]
+Compiling: lib/chibios/os/hal/lib/streams/chprintf.c Compiling: lib/chibios/os/hal/boards/ST_STM32F3_DISCOVERY/board.c Compiling: lib/chibios/os/hal/lib/streams/memstreams.c [OK]
+Compiling: lib/chibios/os/hal/lib/streams/nullstreams.c [OK]
+ [OK]
+Compiling: lib/chibios/os/various/syscalls.c [OK]
+Compiling: tmk_core/common/chibios/syscall-fallbacks.c Archiving: .build/obj_moonlander_b6657eab620164b935cc/i2c_master.o [OK]
+ [OK]
+ [OK]
+ [OK]
+ [OK]
+ [OK]
+ [OK]
+ [OK]
+ [OK]
+ [OK]
+ [OK]
+ [OK]
+Linking: .build/moonlander_b6657eab620164b935cc.elf [OK]
+Creating binary load file for flashing: .build/moonlander_b6657eab620164b935cc.bin Creating load file for flashing: .build/moonlander_b6657eab620164b935cc.hex [OK]
+ [OK]
+
+Size after:
+ text data bss dec hex filename
+ 0 60960 0 60960 ee20 .build/moonlander_b6657eab620164b935cc.hex
+
+Copying moonlander_b6657eab620164b935cc.bin to qmk_firmware folder [OK]
+(Firmware size check does not yet support cortex-m4 microprocessors; skipping.)
diff --git a/moonlander_programmer-dvorak_PMVBL_BZy0x.bin b/moonlander_programmer-dvorak_PMVBL_BZy0x.bin
new file mode 100755
index 0000000..0ebf25b
--- /dev/null
+++ b/moonlander_programmer-dvorak_PMVBL_BZy0x.bin
Binary files differ
diff --git a/moonlander_programmer-dvorak_PMVBL_BZy0x.md5 b/moonlander_programmer-dvorak_PMVBL_BZy0x.md5
new file mode 100644
index 0000000..cb15ffb
--- /dev/null
+++ b/moonlander_programmer-dvorak_PMVBL_BZy0x.md5
@@ -0,0 +1 @@
+8ab65a995177f258a460ba4a31bfc1a2
diff --git a/moonlander_programmer-dvorak_source/config.h b/moonlander_programmer-dvorak_source/config.h
new file mode 100644
index 0000000..c83905e
--- /dev/null
+++ b/moonlander_programmer-dvorak_source/config.h
@@ -0,0 +1,14 @@
+/*
+ Set any config.h overrides for your specific keymap here.
+ See config.h options at https://docs.qmk.fm/#/config_options?id=the-configh-file
+*/
+#define ORYX_CONFIGURATOR
+#undef TAPPING_TERM
+#define TAPPING_TERM 179
+
+#define USB_SUSPEND_WAKEUP_DELAY 0
+#undef MOUSEKEY_MAX_SPEED
+#define MOUSEKEY_MAX_SPEED 8
+
+#define FIRMWARE_VERSION u8"PMVBL/BZy0x"
+#define RGB_MATRIX_STARTUP_SPD 60
diff --git a/moonlander_programmer-dvorak_source/keymap.c b/moonlander_programmer-dvorak_source/keymap.c
new file mode 100644
index 0000000..acacdc4
--- /dev/null
+++ b/moonlander_programmer-dvorak_source/keymap.c
@@ -0,0 +1,448 @@
+#include QMK_KEYBOARD_H
+#include "version.h"
+#include "keymap_german.h"
+#include "keymap_nordic.h"
+#include "keymap_french.h"
+#include "keymap_spanish.h"
+#include "keymap_hungarian.h"
+#include "keymap_swedish.h"
+#include "keymap_br_abnt2.h"
+#include "keymap_canadian_multilingual.h"
+#include "keymap_german_ch.h"
+#include "keymap_jp.h"
+#include "keymap_korean.h"
+#include "keymap_bepo.h"
+#include "keymap_italian.h"
+#include "keymap_slovenian.h"
+#include "keymap_lithuanian_azerty.h"
+#include "keymap_danish.h"
+#include "keymap_norwegian.h"
+#include "keymap_portuguese.h"
+#include "keymap_contributions.h"
+#include "keymap_czech.h"
+#include "keymap_romanian.h"
+#include "keymap_russian.h"
+#include "keymap_uk.h"
+#include "keymap_estonian.h"
+#include "keymap_belgian.h"
+#include "keymap_us_international.h"
+
+#define KC_MAC_UNDO LGUI(KC_Z)
+#define KC_MAC_CUT LGUI(KC_X)
+#define KC_MAC_COPY LGUI(KC_C)
+#define KC_MAC_PASTE LGUI(KC_V)
+#define KC_PC_UNDO LCTL(KC_Z)
+#define KC_PC_CUT LCTL(KC_X)
+#define KC_PC_COPY LCTL(KC_C)
+#define KC_PC_PASTE LCTL(KC_V)
+#define ES_LESS_MAC KC_GRAVE
+#define ES_GRTR_MAC LSFT(KC_GRAVE)
+#define ES_BSLS_MAC ALGR(KC_6)
+#define NO_PIPE_ALT KC_GRAVE
+#define NO_BSLS_ALT KC_EQUAL
+#define LSA_T(kc) MT(MOD_LSFT | MOD_LALT, kc)
+#define BP_NDSH_MAC ALGR(KC_8)
+#define MOON_LED_LEVEL LED_LEVEL
+
+enum custom_keycodes {
+ RGB_SLD = ML_SAFE_RANGE,
+};
+
+
+enum tap_dance_codes {
+ DANCE_0,
+ DANCE_1,
+ DANCE_2,
+ DANCE_3,
+ DANCE_4,
+ DANCE_5,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_moonlander(
+ KC_GRAVE, KC_9, KC_7, KC_5, KC_3, KC_1, KC_HOME, KC_END, KC_0, KC_2, KC_4, KC_6, KC_8, KC_ESCAPE,
+ KC_BSPACE, KC_SCOLON, KC_COMMA, KC_DOT, KC_P, KC_Y, TG(1), KC_EQUAL, KC_F, KC_G, KC_C, KC_R, KC_L, KC_DELETE,
+ LCTL_T(KC_SLASH),KC_A, KC_O, KC_E, KC_U, KC_I, KC_PGUP, KC_PGDOWN, KC_D, KC_H, KC_T, KC_N, KC_S, LGUI_T(KC_MINUS),
+ KC_BSLASH, KC_QUOTE, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_TRANSPARENT,
+ MO(4), TO(6), KC_TRANSPARENT, KC_LEFT, KC_RIGHT, KC_HYPR, KC_MEH, KC_DOWN, KC_UP, KC_TRANSPARENT, KR_HAEN, MO(4),
+ LT(5,KC_SPACE), KC_TAB, KC_LGUI, LALT_T(KC_CAPSLOCK),LSFT_T(KC_ESCAPE),LT(5,KC_ENTER)
+ ),
+ [1] = LAYOUT_moonlander(
+ TD(DANCE_0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_TRANSPARENT, KC_7, KC_8, KC_9, KC_0, KC_TRANSPARENT, KC_TRANSPARENT,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_TRANSPARENT, KC_F6, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_TRANSPARENT,
+ KC_LSHIFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_F7, KC_H, KC_J, KC_K, KC_L, KC_TRANSPARENT, KC_TRANSPARENT,
+ KC_LCTRL, KC_Z, KC_X, KC_C, KC_V, KC_F5, KC_B, KC_N, KC_M, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_F1, KC_F2, KC_F3, KC_SPACE, KC_F12, KC_TRANSPARENT, KC_F8, KC_F9, KC_F10, KC_F11, KC_TRANSPARENT,
+ LALT_T(KC_F4), KC_ENTER, TO(2), KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT
+ ),
+ [2] = LAYOUT_moonlander(
+ TD(DANCE_1), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_TRANSPARENT, KC_7, KC_8, KC_9, KC_0, KC_TRANSPARENT, KC_TRANSPARENT,
+ KC_TAB, KC_Q, KC_UP, KC_E, KC_R, KC_T, TO(0), KC_F6, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_TRANSPARENT,
+ KC_LSHIFT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_F, KC_G, OSL(7), KC_F7, KC_H, KC_J, KC_K, KC_L, KC_TRANSPARENT, KC_TRANSPARENT,
+ KC_LCTRL, KC_Z, KC_X, KC_C, KC_V, KC_F5, KC_B, KC_N, KC_M, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_F1, KC_F2, KC_F3, KC_SPACE, KC_F12, KC_TRANSPARENT, KC_F8, KC_F9, KC_F10, KC_F11, KC_TRANSPARENT,
+ LALT_T(KC_F4), KC_ENTER, TO(1), KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT
+ ),
+ [3] = LAYOUT_moonlander(
+ KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRANSPARENT, KC_TRANSPARENT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS,
+ KC_TRANSPARENT, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_TRANSPARENT, KC_TRANSPARENT, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLASH,
+ KC_TRANSPARENT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_TRANSPARENT, KC_TRANSPARENT, KC_H, KC_J, KC_K, KC_L, LT(5,KC_SCOLON),RGUI_T(KC_QUOTE),
+ KC_TRANSPARENT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLASH, KC_TRANSPARENT,
+ KC_TRANSPARENT, TO(0), KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT
+ ),
+ [4] = LAYOUT_moonlander(
+ KC_ESCAPE, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRANSPARENT, KC_TRANSPARENT, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ KC_TRANSPARENT, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRANSPARENT, KC_TRANSPARENT, KC_HOME, KC_1, KC_2, KC_3, KC_ASTR, KC_F12,
+ KC_TRANSPARENT, KC_CIRC, KC_DLR, KC_LPRN, KC_RPRN, KC_ASTR, KC_TRANSPARENT, KC_TRANSPARENT, KC_END, KC_4, KC_5, KC_6, KC_PLUS, KC_MINUS,
+ KC_TRANSPARENT, KC_PERC, KC_AMPR, KC_LBRACKET, KC_RBRACKET, KC_HASH, KC_AMPR, KC_7, KC_8, KC_9, KC_BSLASH, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_EQUAL, KC_TRANSPARENT, KC_TRANSPARENT, KC_0, KC_DOT, KC_DELETE, KC_EQUAL, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, LALT(KC_PSCREEN),KC_TRANSPARENT, KC_TRANSPARENT
+ ),
+ [5] = LAYOUT_moonlander(
+ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_TRANSPARENT, KC_MS_WH_LEFT, KC_MS_UP, KC_MS_WH_RIGHT, KC_MS_WH_UP, KC_TRANSPARENT, KC_TRANSPARENT, KC_MEDIA_PREV_TRACK,KC_AUDIO_VOL_DOWN,KC_AUDIO_VOL_UP,KC_MEDIA_NEXT_TRACK,KC_TRANSPARENT, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_TRANSPARENT, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_MS_WH_DOWN, KC_TRANSPARENT, KC_TRANSPARENT, TD(DANCE_2), TD(DANCE_3), TD(DANCE_4), TD(DANCE_5), KC_TRANSPARENT, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_TRANSPARENT, KC_MS_BTN3, KC_MS_BTN2, KC_MS_BTN1, KC_TRANSPARENT, KC_TRANSPARENT, KC_AUDIO_MUTE, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_HOME, KC_END, KC_TRANSPARENT, KC_TRANSPARENT, KC_PGDOWN, KC_PGUP, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
+ KC_MS_BTN1, KC_MS_BTN2, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_MEDIA_PLAY_PAUSE
+ ),
+ [6] = LAYOUT_moonlander(
+ KC_TRANSPARENT, MU_ON, MU_OFF, MU_TOG, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, DYN_REC_START1, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, RESET,
+ AU_ON, RGB_HUI, RGB_MOD, TOGGLE_LAYER_COLOR,RGB_SPI, RGB_VAI, KC_BRIGHTNESS_UP, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
+ AU_OFF, RGB_HUD, RGB_SLD, RGB_TOG, RGB_SPD, RGB_VAD, KC_BRIGHTNESS_DOWN, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
+ TO(0), KC_TRANSPARENT, TO(1), TO(2), TO(3), KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
+ KC_TRANSPARENT, WEBUSB_PAIR, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT
+ ),
+};
+
+extern bool g_suspend_state;
+extern rgb_config_t rgb_matrix_config;
+
+void keyboard_post_init_user(void) {
+ rgb_matrix_enable();
+}
+
+const uint8_t PROGMEM ledmap[][DRIVER_LED_TOTAL][3] = {
+ [1] = { {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {255,220,201}, {0,0,0}, {0,0,0}, {0,0,0}, {255,220,201}, {255,220,201}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {255,220,201}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0} },
+
+ [2] = { {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {205,255,255}, {0,0,0}, {0,0,0}, {0,0,0}, {205,255,255}, {205,255,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {205,255,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0} },
+
+ [3] = { {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {250,159,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {250,159,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {250,159,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {250,159,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {250,159,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {250,159,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0} },
+
+ [4] = { {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {31,255,255}, {31,255,255}, {31,255,255}, {0,0,0}, {0,0,0}, {31,255,255}, {31,255,255}, {31,255,255}, {0,0,0}, {0,0,0}, {31,255,255}, {31,255,255}, {31,255,255}, {31,255,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0} },
+
+ [5] = { {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {195,61,255}, {0,0,0}, {0,0,0}, {0,0,0}, {195,61,255}, {195,61,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {195,61,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {195,61,255}, {195,61,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {50,153,244}, {50,153,244}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {154,86,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {154,86,255}, {0,0,0}, {0,0,0}, {0,0,0}, {50,153,244}, {50,153,244}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,183,238}, {0,0,0}, {0,0,0}, {0,0,0} },
+
+ [6] = { {0,0,0}, {32,177,198}, {32,177,198}, {0,0,255}, {0,0,0}, {32,176,255}, {32,176,255}, {32,176,255}, {0,0,0}, {251,29,239}, {10,225,255}, {10,225,255}, {10,225,255}, {255,220,201}, {0,0,0}, {243,222,234}, {243,222,234}, {243,222,234}, {205,255,255}, {0,0,0}, {0,0,0}, {85,203,158}, {85,203,158}, {250,159,255}, {0,0,0}, {0,0,0}, {134,255,213}, {134,255,213}, {0,0,0}, {0,0,0}, {134,247,235}, {134,247,235}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {8,224,207}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {105,255,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0} },
+
+};
+
+void set_layer_color(int layer) {
+ for (int i = 0; i < DRIVER_LED_TOTAL; i++) {
+ HSV hsv = {
+ .h = pgm_read_byte(&ledmap[layer][i][0]),
+ .s = pgm_read_byte(&ledmap[layer][i][1]),
+ .v = pgm_read_byte(&ledmap[layer][i][2]),
+ };
+ if (!hsv.h && !hsv.s && !hsv.v) {
+ rgb_matrix_set_color( i, 0, 0, 0 );
+ } else {
+ RGB rgb = hsv_to_rgb( hsv );
+ float f = (float)rgb_matrix_config.hsv.v / UINT8_MAX;
+ rgb_matrix_set_color( i, f * rgb.r, f * rgb.g, f * rgb.b );
+ }
+ }
+}
+
+void rgb_matrix_indicators_user(void) {
+ if (g_suspend_state || keyboard_config.disable_layer_led) { return; }
+ switch (biton32(layer_state)) {
+ case 1:
+ set_layer_color(1);
+ break;
+ case 2:
+ set_layer_color(2);
+ break;
+ case 3:
+ set_layer_color(3);
+ break;
+ case 4:
+ set_layer_color(4);
+ break;
+ case 5:
+ set_layer_color(5);
+ break;
+ case 6:
+ set_layer_color(6);
+ break;
+ default:
+ if (rgb_matrix_get_flags() == LED_FLAG_NONE)
+ rgb_matrix_set_color_all(0, 0, 0);
+ break;
+ }
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case RGB_SLD:
+ if (record->event.pressed) {
+ rgblight_mode(1);
+ }
+ return false;
+ }
+ return true;
+}
+
+typedef struct {
+ bool is_press_action;
+ uint8_t step;
+} tap;
+
+enum {
+ SINGLE_TAP = 1,
+ SINGLE_HOLD,
+ DOUBLE_TAP,
+ DOUBLE_HOLD,
+ DOUBLE_SINGLE_TAP,
+ MORE_TAPS
+};
+
+static tap dance_state[6];
+
+uint8_t dance_step(qk_tap_dance_state_t *state);
+
+uint8_t dance_step(qk_tap_dance_state_t *state) {
+ if (state->count == 1) {
+ if (state->interrupted || !state->pressed) return SINGLE_TAP;
+ else return SINGLE_HOLD;
+ } else if (state->count == 2) {
+ if (state->interrupted) return DOUBLE_SINGLE_TAP;
+ else if (state->pressed) return DOUBLE_HOLD;
+ else return DOUBLE_TAP;
+ }
+ return MORE_TAPS;
+}
+
+
+void on_dance_0(qk_tap_dance_state_t *state, void *user_data);
+void dance_0_finished(qk_tap_dance_state_t *state, void *user_data);
+void dance_0_reset(qk_tap_dance_state_t *state, void *user_data);
+
+void on_dance_0(qk_tap_dance_state_t *state, void *user_data) {
+ if(state->count == 3) {
+ tap_code16(KC_ESCAPE);
+ tap_code16(KC_ESCAPE);
+ tap_code16(KC_ESCAPE);
+ }
+ if(state->count > 3) {
+ tap_code16(KC_ESCAPE);
+ }
+}
+
+void dance_0_finished(qk_tap_dance_state_t *state, void *user_data) {
+ dance_state[0].step = dance_step(state);
+ switch (dance_state[0].step) {
+ case SINGLE_TAP: register_code16(KC_ESCAPE); break;
+ case SINGLE_HOLD: register_code16(KC_GRAVE); break;
+ case DOUBLE_TAP: register_code16(KC_ESCAPE); register_code16(KC_ESCAPE); break;
+ case DOUBLE_SINGLE_TAP: tap_code16(KC_ESCAPE); register_code16(KC_ESCAPE);
+ }
+}
+
+void dance_0_reset(qk_tap_dance_state_t *state, void *user_data) {
+ wait_ms(10);
+ switch (dance_state[0].step) {
+ case SINGLE_TAP: unregister_code16(KC_ESCAPE); break;
+ case SINGLE_HOLD: unregister_code16(KC_GRAVE); break;
+ case DOUBLE_TAP: unregister_code16(KC_ESCAPE); break;
+ case DOUBLE_SINGLE_TAP: unregister_code16(KC_ESCAPE); break;
+ }
+ dance_state[0].step = 0;
+}
+void on_dance_1(qk_tap_dance_state_t *state, void *user_data);
+void dance_1_finished(qk_tap_dance_state_t *state, void *user_data);
+void dance_1_reset(qk_tap_dance_state_t *state, void *user_data);
+
+void on_dance_1(qk_tap_dance_state_t *state, void *user_data) {
+ if(state->count == 3) {
+ tap_code16(KC_ESCAPE);
+ tap_code16(KC_ESCAPE);
+ tap_code16(KC_ESCAPE);
+ }
+ if(state->count > 3) {
+ tap_code16(KC_ESCAPE);
+ }
+}
+
+void dance_1_finished(qk_tap_dance_state_t *state, void *user_data) {
+ dance_state[1].step = dance_step(state);
+ switch (dance_state[1].step) {
+ case SINGLE_TAP: register_code16(KC_ESCAPE); break;
+ case SINGLE_HOLD: register_code16(KC_GRAVE); break;
+ case DOUBLE_TAP: register_code16(KC_ESCAPE); register_code16(KC_ESCAPE); break;
+ case DOUBLE_SINGLE_TAP: tap_code16(KC_ESCAPE); register_code16(KC_ESCAPE);
+ }
+}
+
+void dance_1_reset(qk_tap_dance_state_t *state, void *user_data) {
+ wait_ms(10);
+ switch (dance_state[1].step) {
+ case SINGLE_TAP: unregister_code16(KC_ESCAPE); break;
+ case SINGLE_HOLD: unregister_code16(KC_GRAVE); break;
+ case DOUBLE_TAP: unregister_code16(KC_ESCAPE); break;
+ case DOUBLE_SINGLE_TAP: unregister_code16(KC_ESCAPE); break;
+ }
+ dance_state[1].step = 0;
+}
+void on_dance_2(qk_tap_dance_state_t *state, void *user_data);
+void dance_2_finished(qk_tap_dance_state_t *state, void *user_data);
+void dance_2_reset(qk_tap_dance_state_t *state, void *user_data);
+
+void on_dance_2(qk_tap_dance_state_t *state, void *user_data) {
+ if(state->count == 3) {
+ tap_code16(KC_LEFT);
+ tap_code16(KC_LEFT);
+ tap_code16(KC_LEFT);
+ }
+ if(state->count > 3) {
+ tap_code16(KC_LEFT);
+ }
+}
+
+void dance_2_finished(qk_tap_dance_state_t *state, void *user_data) {
+ dance_state[2].step = dance_step(state);
+ switch (dance_state[2].step) {
+ case SINGLE_TAP: register_code16(KC_LEFT); break;
+ case SINGLE_HOLD: register_code16(LCTL(KC_LEFT)); break;
+ case DOUBLE_TAP: register_code16(LGUI(KC_LEFT)); break;
+ case DOUBLE_SINGLE_TAP: tap_code16(KC_LEFT); register_code16(KC_LEFT);
+ }
+}
+
+void dance_2_reset(qk_tap_dance_state_t *state, void *user_data) {
+ wait_ms(10);
+ switch (dance_state[2].step) {
+ case SINGLE_TAP: unregister_code16(KC_LEFT); break;
+ case SINGLE_HOLD: unregister_code16(LCTL(KC_LEFT)); break;
+ case DOUBLE_TAP: unregister_code16(LGUI(KC_LEFT)); break;
+ case DOUBLE_SINGLE_TAP: unregister_code16(KC_LEFT); break;
+ }
+ dance_state[2].step = 0;
+}
+void on_dance_3(qk_tap_dance_state_t *state, void *user_data);
+void dance_3_finished(qk_tap_dance_state_t *state, void *user_data);
+void dance_3_reset(qk_tap_dance_state_t *state, void *user_data);
+
+void on_dance_3(qk_tap_dance_state_t *state, void *user_data) {
+ if(state->count == 3) {
+ tap_code16(KC_DOWN);
+ tap_code16(KC_DOWN);
+ tap_code16(KC_DOWN);
+ }
+ if(state->count > 3) {
+ tap_code16(KC_DOWN);
+ }
+}
+
+void dance_3_finished(qk_tap_dance_state_t *state, void *user_data) {
+ dance_state[3].step = dance_step(state);
+ switch (dance_state[3].step) {
+ case SINGLE_TAP: register_code16(KC_DOWN); break;
+ case SINGLE_HOLD: register_code16(KC_DOWN); break;
+ case DOUBLE_TAP: register_code16(LGUI(KC_DOWN)); break;
+ case DOUBLE_SINGLE_TAP: tap_code16(KC_DOWN); register_code16(KC_DOWN);
+ }
+}
+
+void dance_3_reset(qk_tap_dance_state_t *state, void *user_data) {
+ wait_ms(10);
+ switch (dance_state[3].step) {
+ case SINGLE_TAP: unregister_code16(KC_DOWN); break;
+ case SINGLE_HOLD: unregister_code16(KC_DOWN); break;
+ case DOUBLE_TAP: unregister_code16(LGUI(KC_DOWN)); break;
+ case DOUBLE_SINGLE_TAP: unregister_code16(KC_DOWN); break;
+ }
+ dance_state[3].step = 0;
+}
+void on_dance_4(qk_tap_dance_state_t *state, void *user_data);
+void dance_4_finished(qk_tap_dance_state_t *state, void *user_data);
+void dance_4_reset(qk_tap_dance_state_t *state, void *user_data);
+
+void on_dance_4(qk_tap_dance_state_t *state, void *user_data) {
+ if(state->count == 3) {
+ tap_code16(KC_UP);
+ tap_code16(KC_UP);
+ tap_code16(KC_UP);
+ }
+ if(state->count > 3) {
+ tap_code16(KC_UP);
+ }
+}
+
+void dance_4_finished(qk_tap_dance_state_t *state, void *user_data) {
+ dance_state[4].step = dance_step(state);
+ switch (dance_state[4].step) {
+ case SINGLE_TAP: register_code16(KC_UP); break;
+ case SINGLE_HOLD: register_code16(KC_UP); break;
+ case DOUBLE_TAP: register_code16(LGUI(KC_UP)); break;
+ case DOUBLE_SINGLE_TAP: tap_code16(KC_UP); register_code16(KC_UP);
+ }
+}
+
+void dance_4_reset(qk_tap_dance_state_t *state, void *user_data) {
+ wait_ms(10);
+ switch (dance_state[4].step) {
+ case SINGLE_TAP: unregister_code16(KC_UP); break;
+ case SINGLE_HOLD: unregister_code16(KC_UP); break;
+ case DOUBLE_TAP: unregister_code16(LGUI(KC_UP)); break;
+ case DOUBLE_SINGLE_TAP: unregister_code16(KC_UP); break;
+ }
+ dance_state[4].step = 0;
+}
+void on_dance_5(qk_tap_dance_state_t *state, void *user_data);
+void dance_5_finished(qk_tap_dance_state_t *state, void *user_data);
+void dance_5_reset(qk_tap_dance_state_t *state, void *user_data);
+
+void on_dance_5(qk_tap_dance_state_t *state, void *user_data) {
+ if(state->count == 3) {
+ tap_code16(KC_RIGHT);
+ tap_code16(KC_RIGHT);
+ tap_code16(KC_RIGHT);
+ }
+ if(state->count > 3) {
+ tap_code16(KC_RIGHT);
+ }
+}
+
+void dance_5_finished(qk_tap_dance_state_t *state, void *user_data) {
+ dance_state[5].step = dance_step(state);
+ switch (dance_state[5].step) {
+ case SINGLE_TAP: register_code16(KC_RIGHT); break;
+ case SINGLE_HOLD: register_code16(LCTL(KC_RIGHT)); break;
+ case DOUBLE_TAP: register_code16(LGUI(KC_RIGHT)); break;
+ case DOUBLE_SINGLE_TAP: tap_code16(KC_RIGHT); register_code16(KC_RIGHT);
+ }
+}
+
+void dance_5_reset(qk_tap_dance_state_t *state, void *user_data) {
+ wait_ms(10);
+ switch (dance_state[5].step) {
+ case SINGLE_TAP: unregister_code16(KC_RIGHT); break;
+ case SINGLE_HOLD: unregister_code16(LCTL(KC_RIGHT)); break;
+ case DOUBLE_TAP: unregister_code16(LGUI(KC_RIGHT)); break;
+ case DOUBLE_SINGLE_TAP: unregister_code16(KC_RIGHT); break;
+ }
+ dance_state[5].step = 0;
+}
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [DANCE_0] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_0, dance_0_finished, dance_0_reset),
+ [DANCE_1] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_1, dance_1_finished, dance_1_reset),
+ [DANCE_2] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_2, dance_2_finished, dance_2_reset),
+ [DANCE_3] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_3, dance_3_finished, dance_3_reset),
+ [DANCE_4] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_4, dance_4_finished, dance_4_reset),
+ [DANCE_5] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_5, dance_5_finished, dance_5_reset),
+};
+
diff --git a/moonlander_programmer-dvorak_source/rules.mk b/moonlander_programmer-dvorak_source/rules.mk
new file mode 100644
index 0000000..21003f2
--- /dev/null
+++ b/moonlander_programmer-dvorak_source/rules.mk
@@ -0,0 +1,9 @@
+# Set any rules.mk overrides for your specific keymap here.
+# See rules at https://docs.qmk.fm/#/config_options?id=the-rulesmk-file
+CONSOLE_ENABLE = no
+COMMAND_ENABLE = no
+WEBUSB_ENABLE = yes
+ORYX_ENABLE = yes
+DYNAMIC_MACRO_ENABLE = yes
+TAP_DANCE_ENABLE = yes
+SRC = matrix.c