feat: Implement OLED display support and custom icons for 128x32 displays

- Added OLED functionality in keymap.c with custom rendering for layers and modifiers.
- Created a Python script to generate simple icons for OLED displays.
- Introduced a new rules.mk file to enable OLED features for the keymap.
- Developed an OLED font helper script for visualizing and designing custom graphics.
- Redesigned OLED layout to fit 128x32 displays, optimizing space for logos and layer indicators.
- Implemented flow tap functionality in flow_tap.c for enhanced key responsiveness.
This commit is contained in:
Smathev 2025-10-08 13:57:24 +02:00
parent f3afe70c10
commit ac0b03a50c
15 changed files with 1300 additions and 17 deletions

View file

@ -23,16 +23,21 @@
// ============================================================================
// Tapping and timing configuration
#define TAPPING_TERM 140
#define PERMISSIVE_HOLD // Activate mod immediately when another key pressed
#define AUTO_SHIFT_TIMEOUT 170 // Slightly longer than TAPPING_TERM
#define TAPPING_TERM 200
//#define FLOW_TAP
//#define PERMISSIVE_HOLD // Activate mod immediately when another key pressed _REDUNDANT due to SpeculativeHold
#define AUTO_SHIFT_TIMEOUT 150 // Slightly longer than TAPPING_TERM
#define RETRO_SHIFT // Enable retroactive shift
#define RETRO_TAPPING // Enable retroactive tapping
#define HOLD_ON_OTHER_KEY_PRESS // Enable hold on other key press
#define CHORDAL_HOLD // Enable chordal hold (mod activates if another key is pressed before tapping term)
//#define CHORDAL_HOLD // Enable chordal hold (mod activates if another key is pressed before tapping term)
// DISABLED: Conflicts with multi-modifier shortcuts like Ctrl+Shift+P
// Combo configuration
#define CASEMODES_ENABLE
#define COMBO_REF_DEFAULT _NORTO
#ifdef OLED_ENABLE
#define OLED_DISPLAY_128X32
#endif

20
users/smathev/flow_tap.c Normal file
View file

@ -0,0 +1,20 @@
#include "keymap_danish.h"
bool is_flow_tap_key(uint16_t keycode) {
if ((get_mods() & (MOD_MASK_CG | MOD_BIT_LALT)) != 0) {
return false; // Disable Flow Tap on hotkeys.
}
switch (get_tap_keycode(keycode)) {
case KC_SPC:
case KC_A ... KC_Z:
case KC_DOT:
case KC_COMM:
case DK_SCLN:
case DK_SLSH:
case DK_ARNG:
case DK_OSTR:
case DK_AE:
return true;
}
return false;
}

View file

@ -15,6 +15,8 @@ COMBO_ENABLE = yes # Combo key feature
INTROSPECTION_KEYMAP_C = keyboards/fingerpunch/sweeeeep/keymaps/smathev/keymap.c
AUTO_SHIFT_ENABLE = yes # Auto shift for hold-to-shift
OLED_ENABLE = yes # Enable OLED displays
OLED_DRIVER = ssd1306 # Standard I2C OLED driver (SSD1306)
# Implemented from https://github.com/samhocevar-forks/qmk-firmware/blob/master/docs/feature_tap_dance.md
# TAP_DANCE_ENABLE = yes
@ -28,3 +30,4 @@ CASEMODE_ENABLE = yes
#WPM ENABLE
WPM_ENABLE = yes
DYNAMIC_TAPPING_TERM_ENABLE = yes

View file

@ -28,7 +28,8 @@ enum userspace_layers {
_NORTO= 0,
_QWERTY,
_NORTNAVIGATION,
_SYMFKEYS
_SYMFKEYS,
_SETUP
};
void press_super_alt_tab(bool shift);

View file

@ -279,6 +279,13 @@ NOTE: These are all the same length. If you do a search/replace
// GAMES_LAYER?
#define _________________KB_SETUP_1________________ AS_UP, DT_UP, KC_C, KC_V, KC_G
#define _________________KB_SETUP_2________________ AS_DOWN, DT_DOWN, KC_E, KC_R, KC_D
#define _________________KB_SETUP_3________________ AS_RPT, DT_PRNT, KC_TAB, KC_L, KC_H
#define _________________KB_SETUP_4________________ KC_T, KC_COMM, KC_K, KC_SCLN, KC_DOT
#define ___________________GAMES_0_________________ KC_F1, KC_F2, KC_C, KC_V, KC_G
#define ___________________GAMES_1_________________ KC_Q, KC_W, KC_E, KC_R, KC_D
#define ___________________GAMES_2_________________ KC_A, KC_F, KC_TAB, KC_L, KC_H