summaryrefslogtreecommitdiffstats
path: root/keyboards/bastardkb/dilemma
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/bastardkb/dilemma')
-rw-r--r--keyboards/bastardkb/dilemma/3x5_2/3x5_2.h37
-rw-r--r--keyboards/bastardkb/dilemma/3x5_2/assembled/config.h (renamed from keyboards/bastardkb/dilemma/elitec/config.h)33
-rw-r--r--keyboards/bastardkb/dilemma/3x5_2/assembled/halconf.h (renamed from keyboards/bastardkb/dilemma/splinky/splinky.c)19
-rw-r--r--keyboards/bastardkb/dilemma/3x5_2/assembled/info.json4
-rw-r--r--keyboards/bastardkb/dilemma/3x5_2/assembled/mcuconf.h23
-rw-r--r--keyboards/bastardkb/dilemma/3x5_2/assembled/rules.mk34
-rw-r--r--keyboards/bastardkb/dilemma/3x5_2/info.json46
-rw-r--r--keyboards/bastardkb/dilemma/3x5_2/keymaps/bstiq/config.h (renamed from keyboards/bastardkb/dilemma/keymaps/bstiq/config.h)0
-rw-r--r--keyboards/bastardkb/dilemma/3x5_2/keymaps/bstiq/keymap.c (renamed from keyboards/bastardkb/dilemma/keymaps/bstiq/keymap.c)0
-rw-r--r--keyboards/bastardkb/dilemma/3x5_2/keymaps/bstiq/readme.md (renamed from keyboards/bastardkb/dilemma/keymaps/bstiq/README.md)0
-rw-r--r--keyboards/bastardkb/dilemma/3x5_2/keymaps/default/keymap.c (renamed from keyboards/bastardkb/dilemma/keymaps/default/keymap.c)0
-rw-r--r--keyboards/bastardkb/dilemma/3x5_2/keymaps/drashna/config.h (renamed from keyboards/bastardkb/dilemma/keymaps/drashna/config.h)0
-rw-r--r--keyboards/bastardkb/dilemma/3x5_2/keymaps/drashna/keymap.c (renamed from keyboards/bastardkb/dilemma/keymaps/drashna/keymap.c)0
-rw-r--r--keyboards/bastardkb/dilemma/3x5_2/keymaps/drashna/rules.mk (renamed from keyboards/bastardkb/dilemma/keymaps/drashna/rules.mk)0
-rw-r--r--keyboards/bastardkb/dilemma/3x5_2/keymaps/via/config.h91
-rw-r--r--keyboards/bastardkb/dilemma/3x5_2/keymaps/via/keymap.c229
-rw-r--r--keyboards/bastardkb/dilemma/3x5_2/keymaps/via/readme.md67
-rw-r--r--keyboards/bastardkb/dilemma/3x5_2/keymaps/via/rules.mk1
-rw-r--r--keyboards/bastardkb/dilemma/3x5_2/splinky/config.h (renamed from keyboards/bastardkb/dilemma/splinky/config.h)2
-rw-r--r--keyboards/bastardkb/dilemma/3x5_2/splinky/halconf.h (renamed from keyboards/bastardkb/dilemma/splinky/halconf.h)0
-rw-r--r--keyboards/bastardkb/dilemma/3x5_2/splinky/info.json3
-rw-r--r--keyboards/bastardkb/dilemma/3x5_2/splinky/mcuconf.h (renamed from keyboards/bastardkb/dilemma/splinky/mcuconf.h)0
-rw-r--r--keyboards/bastardkb/dilemma/3x5_2/splinky/rules.mk (renamed from keyboards/bastardkb/dilemma/rules.mk)13
-rw-r--r--keyboards/bastardkb/dilemma/3x5_3/3x5_3.c83
-rw-r--r--keyboards/bastardkb/dilemma/3x5_3/3x5_3.h39
-rw-r--r--keyboards/bastardkb/dilemma/3x5_3/config.h71
-rw-r--r--keyboards/bastardkb/dilemma/3x5_3/halconf.h23
-rw-r--r--keyboards/bastardkb/dilemma/3x5_3/info.json49
-rw-r--r--keyboards/bastardkb/dilemma/3x5_3/keymaps/bstiq/config.h145
-rw-r--r--keyboards/bastardkb/dilemma/3x5_3/keymaps/bstiq/keymap.c223
-rw-r--r--keyboards/bastardkb/dilemma/3x5_3/keymaps/bstiq/readme.md3
-rw-r--r--keyboards/bastardkb/dilemma/3x5_3/keymaps/default/keymap.c84
-rw-r--r--keyboards/bastardkb/dilemma/3x5_3/mcuconf.h26
-rw-r--r--keyboards/bastardkb/dilemma/3x5_3/readme.md5
-rw-r--r--keyboards/bastardkb/dilemma/3x5_3/rules.mk36
-rw-r--r--keyboards/bastardkb/dilemma/config.h1
-rw-r--r--keyboards/bastardkb/dilemma/dilemma.c18
-rw-r--r--keyboards/bastardkb/dilemma/dilemma.h27
-rw-r--r--keyboards/bastardkb/dilemma/elitec/info.json6
-rw-r--r--keyboards/bastardkb/dilemma/elitec/rules.mk5
-rw-r--r--keyboards/bastardkb/dilemma/info.json43
-rw-r--r--keyboards/bastardkb/dilemma/readme.md8
-rw-r--r--keyboards/bastardkb/dilemma/splinky/info.json6
-rw-r--r--keyboards/bastardkb/dilemma/splinky/rules.mk9
44 files changed, 1390 insertions, 122 deletions
diff --git a/keyboards/bastardkb/dilemma/3x5_2/3x5_2.h b/keyboards/bastardkb/dilemma/3x5_2/3x5_2.h
new file mode 100644
index 0000000000..7deb32d917
--- /dev/null
+++ b/keyboards/bastardkb/dilemma/3x5_2/3x5_2.h
@@ -0,0 +1,37 @@
+/**
+ * Copyright 2022 Charly Delay <charly@codesink.dev> (@0xcharly)
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// clang-format off
+#define LAYOUT_split_3x5_2( \
+ k00, k01, k02, k03, k04, k44, k43, k42, k41, k40, \
+ k10, k11, k12, k13, k14, k54, k53, k52, k51, k50, \
+ k20, k21, k22, k23, k24, k64, k63, k62, k61, k60, \
+ k30, k32, k72, k70 \
+) \
+{ \
+ { k00, k01, k02, k03, k04 }, \
+ { k10, k11, k12, k13, k14 }, \
+ { k20, k21, k22, k23, k24 }, \
+ { k30, KC_NO, k32, KC_NO, KC_NO }, \
+ { k40, k41, k42, k43, k44 }, \
+ { k50, k51, k52, k53, k54 }, \
+ { k60, k61, k62, k63, k64 }, \
+ { k70, KC_NO, k72, KC_NO, KC_NO }, \
+}
+// clang-format on
diff --git a/keyboards/bastardkb/dilemma/elitec/config.h b/keyboards/bastardkb/dilemma/3x5_2/assembled/config.h
index 0f26e46fdb..8420898f4e 100644
--- a/keyboards/bastardkb/dilemma/elitec/config.h
+++ b/keyboards/bastardkb/dilemma/3x5_2/assembled/config.h
@@ -1,4 +1,4 @@
-/*
+/**
* Copyright 2022 Charly Delay <charly@codesink.dev> (@0xcharly)
*
* This program is free software: you can redistribute it and/or modify
@@ -19,19 +19,28 @@
/* Key matrix configuration. */
#define MATRIX_ROW_PINS \
- { D4, C6, F5, F7 }
+ { GP4, GP5, GP28, GP26 }
#define MATRIX_COL_PINS \
- { B4, B5, E6, D7, F6 }
+ { GP8, GP9, GP7, GP6, GP27 }
/* Handedness. */
-#define MASTER_RIGHT
-
-// To use the handedness pin, resistors need to be installed on the PCB.
-// If so, uncomment the following code, and undefine MASTER_RIGHT above.
-//#define SPLIT_HAND_PIN F4
-// If you've soldered the handedness pull-up on the upper side instead of the
-// left one, uncomment the following line.
-//#define SPLIT_HAND_PIN_LOW_IS_LEFT // High -> right, Low -> left.
+#define SPLIT_HAND_PIN GP29
+#define SPLIT_HAND_PIN_LOW_IS_LEFT // High -> right, Low -> left.
/* serial.c configuration (for split keyboard). */
-#define SOFT_SERIAL_PIN D2
+#define SOFT_SERIAL_PIN GP1
+
+/* CRC. */
+#define CRC8_USE_TABLE
+#define CRC8_OPTIMIZE_SPEED
+
+/* Cirque trackpad. */
+#define SPI_SCK_PIN GP22
+#define SPI_MOSI_PIN GP23
+#define SPI_MISO_PIN GP20
+#define POINTING_DEVICE_CS_PIN GP21
+
+/* Reset. */
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_LED GP17
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U
diff --git a/keyboards/bastardkb/dilemma/splinky/splinky.c b/keyboards/bastardkb/dilemma/3x5_2/assembled/halconf.h
index 0100ae06ae..7a79bec953 100644
--- a/keyboards/bastardkb/dilemma/splinky/splinky.c
+++ b/keyboards/bastardkb/dilemma/3x5_2/assembled/halconf.h
@@ -1,4 +1,4 @@
-/*
+/**
* Copyright 2022 Charly Delay <charly@codesink.dev> (@0xcharly)
*
* This program is free software: you can redistribute it and/or modify
@@ -15,19 +15,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "quantum.h"
+#pragma once
-// Forward declare RP2040 SDK declaration.
-void gpio_init(uint gpio);
+#define HAL_USE_SPI TRUE
-void keyboard_pre_init_kb(void) {
- // Ensures that GP26 through GP29 are initialized as digital inputs (as
- // opposed to analog inputs). These GPIOs are shared with A0 through A3,
- // respectively. On RP2040-B2 and later, the digital inputs are disabled by
- // default (see RP2040-E6).
- gpio_init(GP26);
- gpio_init(GP27);
- gpio_init(GP28);
- gpio_init(GP29);
- keyboard_pre_init_user();
-}
+#include_next "halconf.h"
diff --git a/keyboards/bastardkb/dilemma/3x5_2/assembled/info.json b/keyboards/bastardkb/dilemma/3x5_2/assembled/info.json
new file mode 100644
index 0000000000..aae8dfc179
--- /dev/null
+++ b/keyboards/bastardkb/dilemma/3x5_2/assembled/info.json
@@ -0,0 +1,4 @@
+{
+ "keyboard_name": "Dilemma (3x5+2) Assembled"
+}
+
diff --git a/keyboards/bastardkb/dilemma/3x5_2/assembled/mcuconf.h b/keyboards/bastardkb/dilemma/3x5_2/assembled/mcuconf.h
new file mode 100644
index 0000000000..b54d705b54
--- /dev/null
+++ b/keyboards/bastardkb/dilemma/3x5_2/assembled/mcuconf.h
@@ -0,0 +1,23 @@
+/**
+ * Copyright 2022 Charly Delay <charly@codesink.dev> (@0xcharly)
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include_next "mcuconf.h"
+
+#undef RP_SPI_USE_SPI1
+#define RP_SPI_USE_SPI1 TRUE
diff --git a/keyboards/bastardkb/dilemma/3x5_2/assembled/rules.mk b/keyboards/bastardkb/dilemma/3x5_2/assembled/rules.mk
new file mode 100644
index 0000000000..df2f94792d
--- /dev/null
+++ b/keyboards/bastardkb/dilemma/3x5_2/assembled/rules.mk
@@ -0,0 +1,34 @@
+# MCU name
+MCU = RP2040
+
+# Bootloader selection
+BOOTLOADER = rp2040
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
+
+AUDIO_SUPPORTED = no # Audio is not supported
+RGB_MATRIX_SUPPORTED = no # RGB matrix is supported and enabled by default
+RGBLIGHT_SUPPORTED = no # RGB underglow is supported, but not enabled by default
+RGB_MATRIX_ENABLE = no # Enable keyboard RGB matrix functionality
+
+SERIAL_DRIVER = vendor
+
+POINTING_DEVICE_ENABLE = yes
+POINTING_DEVICE_DRIVER = cirque_pinnacle_spi # Assembled version uses SPI.
+
+SPLIT_KEYBOARD = yes
+LAYOUTS = split_3x5_2
+
+# RP2040-specific options
+PICO_INTRINSICS_ENABLED = no # ATM Unsupported by ChibiOS.
diff --git a/keyboards/bastardkb/dilemma/3x5_2/info.json b/keyboards/bastardkb/dilemma/3x5_2/info.json
new file mode 100644
index 0000000000..5aa89bcded
--- /dev/null
+++ b/keyboards/bastardkb/dilemma/3x5_2/info.json
@@ -0,0 +1,46 @@
+{
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x1835"
+ },
+ "layouts": {
+ "LAYOUT_split_3x5_2": {
+ "layout": [
+ {"label":"L00", "x":0, "y":0},
+ {"label":"L01", "x":1, "y":0},
+ {"label":"L02", "x":2, "y":0},
+ {"label":"L03", "x":3, "y":0},
+ {"label":"L04", "x":4, "y":0},
+ {"label":"R00", "x":11, "y":0},
+ {"label":"R01", "x":12, "y":0},
+ {"label":"R02", "x":13, "y":0},
+ {"label":"R03", "x":14, "y":0},
+ {"label":"R04", "x":15, "y":0},
+ {"label":"L10", "x":0, "y":1},
+ {"label":"L11", "x":1, "y":1},
+ {"label":"L12", "x":2, "y":1},
+ {"label":"L13", "x":3, "y":1},
+ {"label":"L14", "x":4, "y":1},
+ {"label":"R10", "x":11, "y":1},
+ {"label":"R11", "x":12, "y":1},
+ {"label":"R12", "x":13, "y":1},
+ {"label":"R13", "x":14, "y":1},
+ {"label":"R14", "x":15, "y":1},
+ {"label":"L20", "x":0, "y":2},
+ {"label":"L21", "x":1, "y":2},
+ {"label":"L22", "x":2, "y":2},
+ {"label":"L23", "x":3, "y":2},
+ {"label":"L24", "x":4, "y":2},
+ {"label":"R20", "x":11, "y":2},
+ {"label":"R21", "x":12, "y":2},
+ {"label":"R22", "x":13, "y":2},
+ {"label":"R23", "x":14, "y":2},
+ {"label":"R24", "x":15, "y":2},
+ {"label":"L30", "x":4, "y":3},
+ {"label":"L32", "x":5, "y":3},
+ {"label":"R32", "x":10, "y":3},
+ {"label":"R30", "x":11, "y":3}
+ ]
+ }
+ }
+}
diff --git a/keyboards/bastardkb/dilemma/keymaps/bstiq/config.h b/keyboards/bastardkb/dilemma/3x5_2/keymaps/bstiq/config.h
index b2e49c8c6e..b2e49c8c6e 100644
--- a/keyboards/bastardkb/dilemma/keymaps/bstiq/config.h
+++ b/keyboards/bastardkb/dilemma/3x5_2/keymaps/bstiq/config.h
diff --git a/keyboards/bastardkb/dilemma/keymaps/bstiq/keymap.c b/keyboards/bastardkb/dilemma/3x5_2/keymaps/bstiq/keymap.c
index f8396cb1c2..f8396cb1c2 100644
--- a/keyboards/bastardkb/dilemma/keymaps/bstiq/keymap.c
+++ b/keyboards/bastardkb/dilemma/3x5_2/keymaps/bstiq/keymap.c
diff --git a/keyboards/bastardkb/dilemma/keymaps/bstiq/README.md b/keyboards/bastardkb/dilemma/3x5_2/keymaps/bstiq/readme.md
index df1f43cbcb..df1f43cbcb 100644
--- a/keyboards/bastardkb/dilemma/keymaps/bstiq/README.md
+++ b/keyboards/bastardkb/dilemma/3x5_2/keymaps/bstiq/readme.md
diff --git a/keyboards/bastardkb/dilemma/keymaps/default/keymap.c b/keyboards/bastardkb/dilemma/3x5_2/keymaps/default/keymap.c
index 3f77ebcabb..3f77ebcabb 100644
--- a/keyboards/bastardkb/dilemma/keymaps/default/keymap.c
+++ b/keyboards/bastardkb/dilemma/3x5_2/keymaps/default/keymap.c
diff --git a/keyboards/bastardkb/dilemma/keymaps/drashna/config.h b/keyboards/bastardkb/dilemma/3x5_2/keymaps/drashna/config.h
index d7b1351d89..d7b1351d89 100644
--- a/keyboards/bastardkb/dilemma/keymaps/drashna/config.h
+++ b/keyboards/bastardkb/dilemma/3x5_2/keymaps/drashna/config.h
diff --git a/keyboards/bastardkb/dilemma/keymaps/drashna/keymap.c b/keyboards/bastardkb/dilemma/3x5_2/keymaps/drashna/keymap.c
index 9cd21c3c1f..9cd21c3c1f 100644
--- a/keyboards/bastardkb/dilemma/keymaps/drashna/keymap.c
+++ b/keyboards/bastardkb/dilemma/3x5_2/keymaps/drashna/keymap.c
diff --git a/keyboards/bastardkb/dilemma/keymaps/drashna/rules.mk b/keyboards/bastardkb/dilemma/3x5_2/keymaps/drashna/rules.mk
index 5f4afb7259..5f4afb7259 100644
--- a/keyboards/bastardkb/dilemma/keymaps/drashna/rules.mk
+++ b/keyboards/bastardkb/dilemma/3x5_2/keymaps/drashna/rules.mk
diff --git a/keyboards/bastardkb/dilemma/3x5_2/keymaps/via/config.h b/keyboards/bastardkb/dilemma/3x5_2/keymaps/via/config.h
new file mode 100644
index 0000000000..fbe61df03b
--- /dev/null
+++ b/keyboards/bastardkb/dilemma/3x5_2/keymaps/via/config.h
@@ -0,0 +1,91 @@
+/**
+ * Copyright 2021 Charly Delay <charly@codesink.dev> (@0xcharly)
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+#pragma once
+
+#ifdef VIA_ENABLE
+/* VIA configuration. */
+# define DYNAMIC_KEYMAP_LAYER_COUNT 6
+#endif // VIA_ENABLE
+
+/* Disable unused features. */
+#define NO_ACTION_ONESHOT
+
+#ifndef TAPPING_TERM
+/**
+ * \brief Configure the global tapping term (default: 200ms).
+ *
+ * If you have a lot of accidental mod activations, crank up the tapping term.
+ *
+ * See docs.qmk.fm/using-qmk/software-features/tap_hold#tapping-term
+ */
+# define TAPPING_TERM 200
+#endif // TAPPING_TERM
+
+/**
+ * \brief Enable rapid switch from tap to hold.
+ *
+ * Note that a side-effect of this setting is to disable auto-repeat when
+ * pressing key twice, except for one-shot keys.
+ *
+ * See docs.qmk.fm/using-qmk/software-features/tap_hold#tapping-force-hold
+ */
+#define TAPPING_FORCE_HOLD
+
+/*
+ * Tap-or-Hold decision modes.
+ *
+ * Note that the following flags behave differently when combined (ie. when 2 or
+ * more are enabled).
+ *
+ * See bit.ly/tap-or-hold for a visual explanation of the following tap-or-hold
+ * decision modes.
+ */
+
+/**
+ * \brief Faster tap-hold trigger.
+ *
+ * Without `PERMISSIVE_HOLD`, within `TAPPING_TERM`:
+ * Mod(a)🠗 e🠗 e🠕 Mod(a)🠕 ➞ ae
+ * With `PERMISSIVE_HOLD`, within `TAPPING_TERM`:
+ * Mod(a)🠗 e🠗 e🠕 Mod(a)🠕 ➞ Mod+e
+ *
+ * See docs.qmk.fm/using-qmk/software-features/tap_hold#permissive-hold
+ */
+#define PERMISSIVE_HOLD
+
+/**
+ * \brief Prevent normal rollover on alphas from accidentally triggering mods.
+ *
+ * Ignores key presses that interrupt a mod-tap. Must-have for Home Row mod.
+ *
+ * Without `IGNORE_MOD_TAP_INTERRUPT`, within `TAPPING_TERM`:
+ * Mod(a)🠗 e🠗 Mod(a)🠕 e🠕 ➞ Mod+e
+ * With `IGNORE_MOD_TAP_INTERRUPT`, within `TAPPING_TERM`:
+ * Mod(a)🠗 e🠗 Mod(a)🠕 e🠕 ➞ ae
+ *
+ * See docs.qmk.fm/using-qmk/software-features/tap_hold#ignore-mod-tap-interrupt
+ */
+#define IGNORE_MOD_TAP_INTERRUPT
+
+/* Charybdis-specific features. */
+
+#ifdef POINTING_DEVICE_ENABLE
+// Automatically enable the pointer layer when moving the trackball. See also:
+// - `DILEMMA_AUTO_POINTER_LAYER_TRIGGER_TIMEOUT_MS`
+// - `DILEMMA_AUTO_POINTER_LAYER_TRIGGER_THRESHOLD`
+// #define DILEMMA_AUTO_POINTER_LAYER_TRIGGER_ENABLE
+#endif // POINTING_DEVICE_ENABLE
diff --git a/keyboards/bastardkb/dilemma/3x5_2/keymaps/via/keymap.c b/keyboards/bastardkb/dilemma/3x5_2/keymaps/via/keymap.c
new file mode 100644
index 0000000000..082a151674
--- /dev/null
+++ b/keyboards/bastardkb/dilemma/3x5_2/keymaps/via/keymap.c
@@ -0,0 +1,229 @@
+/**
+ * Copyright 2022 Charly Delay <charly@codesink.dev> (@0xcharly)
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+#ifdef DILEMMA_AUTO_POINTER_LAYER_TRIGGER_ENABLE
+# include "timer.h"
+#endif // DILEMMA_AUTO_POINTER_LAYER_TRIGGER_ENABLE
+
+enum dilemma_keymap_layers {
+ LAYER_BASE = 0,
+ LAYER_FUNCTION,
+ LAYER_NAVIGATION,
+ LAYER_POINTER,
+ LAYER_NUMERAL,
+ LAYER_SYMBOLS,
+};
+
+// Automatically enable sniping-mode on the pointer layer.
+#define DILEMMA_AUTO_SNIPING_ON_LAYER LAYER_POINTER
+
+#ifdef DILEMMA_AUTO_POINTER_LAYER_TRIGGER_ENABLE
+static uint16_t auto_pointer_layer_timer = 0;
+
+# ifndef DILEMMA_AUTO_POINTER_LAYER_TRIGGER_TIMEOUT_MS
+# define DILEMMA_AUTO_POINTER_LAYER_TRIGGER_TIMEOUT_MS 1000
+# endif // DILEMMA_AUTO_POINTER_LAYER_TRIGGER_TIMEOUT_MS
+
+# ifndef DILEMMA_AUTO_POINTER_LAYER_TRIGGER_THRESHOLD
+# define DILEMMA_AUTO_POINTER_LAYER_TRIGGER_THRESHOLD 8
+# endif // DILEMMA_AUTO_POINTER_LAYER_TRIGGER_THRESHOLD
+#endif // DILEMMA_AUTO_POINTER_LAYER_TRIGGER_ENABLE
+
+#define SPC_NAV LT(LAYER_NAVIGATION, KC_SPC)
+#define TAB_FUN LT(LAYER_FUNCTION, KC_TAB)
+#define ENT_SYM LT(LAYER_SYMBOLS, KC_ENT)
+#define BSP_NUM LT(LAYER_NUMERAL, KC_BSPC)
+#define _L_PTR(KC) LT(LAYER_POINTER, KC)
+
+#ifndef POINTING_DEVICE_ENABLE
+# define DRGSCRL KC_NO
+# define DPI_MOD KC_NO
+# define S_D_MOD KC_NO
+# define SNIPING KC_NO
+#endif // !POINTING_DEVICE_ENABLE
+
+// clang-format off
+/** \brief QWERTY layout (3 rows, 10 columns). */
+#define LAYOUT_LAYER_BASE \
+ 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_QUOT, \
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, \
+ TAB_FUN, SPC_NAV, ENT_SYM, BSP_NUM
+
+/** Convenience row shorthands. */
+#define _______________DEAD_HALF_ROW_______________ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
+#define ______________HOME_ROW_GACS_L______________ KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX
+#define ______________HOME_ROW_GACS_R______________ XXXXXXX, KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI
+
+/*
+ * Layers used on the Dilemma.
+ *
+ * These layers started off heavily inspired by the Miryoku layout, but trimmed
+ * down and tailored for a stock experience that is meant to be fundation for
+ * further personalization.
+ *
+ * See https://github.com/manna-harbour/miryoku for the original layout.
+ */
+
+/**
+ * \brief Function layer.
+ *
+ * Secondary right-hand layer has function keys mirroring the numerals on the
+ * primary layer with extras on the pinkie column, plus system keys on the inner
+ * column. App is on the tertiary thumb key and other thumb keys are duplicated
+ * from the base layer to enable auto-repeat.
+ */
+#define LAYOUT_LAYER_FUNCTION \
+ _______________DEAD_HALF_ROW_______________, KC_PSCR, KC_F7, KC_F8, KC_F9, KC_F12, \
+ ______________HOME_ROW_GACS_L______________, KC_SLCK, KC_F4, KC_F5, KC_F6, KC_F11, \
+ _______________DEAD_HALF_ROW_______________, KC_PAUS, KC_F1, KC_F2, KC_F3, KC_F10, \
+ _______, XXXXXXX, XXXXXXX, XXXXXXX
+
+/** \brief Mouse emulation and pointer functions. */
+#define LAYOUT_LAYER_POINTER \
+ QK_BOOT, XXXXXXX, XXXXXXX, DPI_MOD, S_D_MOD, S_D_MOD, DPI_MOD, XXXXXXX, XXXXXXX, QK_BOOT, \
+ ______________HOME_ROW_GACS_L______________, ______________HOME_ROW_GACS_R______________, \
+ _______, DRGSCRL, SNIPING, KC_BTN3, XXXXXXX, XXXXXXX, KC_BTN3, SNIPING, DRGSCRL, _______, \
+ KC_BTN2, KC_BTN1, KC_BTN1, KC_BTN2
+
+/**
+ * \brief Navigation layer.
+ *
+ * Primary right-hand layer (left home thumb) is navigation and editing. Cursor
+ * keys are on the home position, line and page movement below, clipboard above,
+ * caps lock and insert on the inner column. Thumb keys are duplicated from the
+ * base layer to avoid having to layer change mid edit and to enable auto-repeat.
+ */
+#define LAYOUT_LAYER_NAVIGATION \
+ _______________DEAD_HALF_ROW_______________, _______________DEAD_HALF_ROW_______________, \
+ ______________HOME_ROW_GACS_L______________, KC_CLCK, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, \
+ _______________DEAD_HALF_ROW_______________, KC_INS, KC_HOME, KC_PGDN, KC_PGUP, KC_END, \
+ XXXXXXX, _______, KC_ENT, KC_BSPC
+
+/**
+ * \brief Numeral layout.
+ *
+ * Primary left-hand layer (right home thumb) is numerals and symbols. Numerals
+ * are in the standard numpad locations with symbols in the remaining positions.
+ * `KC_DOT` is duplicated from the base layer.
+ */
+#define LAYOUT_LAYER_NUMERAL \
+ KC_LBRC, KC_7, KC_8, KC_9, KC_RBRC, _______________DEAD_HALF_ROW_______________, \
+ KC_SCLN, KC_4, KC_5, KC_6, KC_EQL, ______________HOME_ROW_GACS_R______________, \
+ KC_DOT, KC_1, KC_2, KC_3, KC_BSLS, _______________DEAD_HALF_ROW_______________, \
+ KC_MINS, KC_0, XXXXXXX, _______
+
+/**
+ * \brief Symbols layer.
+ *
+ * Secondary left-hand layer has shifted symbols in the same locations to reduce
+ * chording when using mods with shifted symbols. `KC_LPRN` is duplicated next to
+ * `KC_RPRN`.
+ */
+#define LAYOUT_LAYER_SYMBOLS \
+ KC_LCBR, KC_AMPR, KC_ASTR, KC_LPRN, KC_RCBR, _______________DEAD_HALF_ROW_______________, \
+ KC_COLN, KC_DLR, KC_PERC, KC_CIRC, KC_PLUS, ______________HOME_ROW_GACS_R______________, \
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_PIPE, _______________DEAD_HALF_ROW_______________, \
+ KC_GRV, KC_UNDS, _______, XXXXXXX
+
+/**
+ * \brief Add Home Row mod to a layout.
+ *
+ * Expects a 10-key per row layout. Adds support for GACS (Gui, Alt, Ctl, Shift)
+ * home row. The layout passed in parameter must contain at least 20 keycodes.
+ *
+ * This is meant to be used with `LAYER_ALPHAS_QWERTY` defined above, eg.:
+ *
+ * HOME_ROW_MOD_GACS(LAYER_ALPHAS_QWERTY)
+ */
+#define _HOME_ROW_MOD_GACS( \
+ L00, L01, L02, L03, L04, R05, R06, R07, R08, R09, \
+ L10, L11, L12, L13, L14, R15, R16, R17, R18, R19, \
+ ...) \