Commit 51aeaf2d653c
Changed files (6)
keyboards
eyelash_corne
keyboards/eyelash_corne/config/combos.dtsi
@@ -26,6 +26,9 @@ ZMK_COMBO(to_qwerty, &to QWE, LH2 RH2, BEP ERG)
// Switch mouse layer
ZMK_COMBO(toggle_mouse, &tog MOU, LT1 LT4, BEP ERG QWE MOU)
+// Leader key - Right thumb cluster (similar to Moonlander Del+RAlt)
+ZMK_COMBO(leader, &leader, RH0 RH2, BEP ERG QWE)
+
// underscore
ZMK_COMBO(capsword, &caps_word, LB4 RB4, BEP ERG QWE)
keyboards/eyelash_corne/config/eyelash_corne.conf
@@ -43,7 +43,7 @@ CONFIG_BT_CTLR_TX_PWR_PLUS_8=y
CONFIG_ZMK_DISPLAY=y
CONFIG_ZMK_DISPLAY_STATUS_SCREEN_CUSTOM=y
-# CONFIG_NICE_VIEW_GEM_ANIMATION_MS=4800
-CONFIG_NICE_OLED_GEM_ANIMATION_MS=4800
+CONFIG_NICE_VIEW_GEM_ANIMATION_MS=4800
+# CONFIG_NICE_OLED_GEM_ANIMATION_MS=4800 # Undefined in v0.3.0
CONFIG_ZMK_PM_SOFT_OFF=y
\ No newline at end of file
keyboards/eyelash_corne/config/eyelash_corne.keymap
@@ -15,6 +15,7 @@
#include "zmk-helpers/unicode-chars/currency.dtsi"
#include "zmk-helpers/unicode-chars/french.dtsi"
#include "combos.dtsi"
+#include "leader.dtsi"
#include "numword.dtsi"
#include "hold-tap.dtsi"
#include "mod-morph.dtsi"
keyboards/eyelash_corne/config/leader.dtsi
@@ -0,0 +1,232 @@
+// Leader key configuration for eyelash_corne
+// Port of Moonlander leader sequences to ZMK
+// Using zmk-leader-key module syntax
+
+/ {
+ behaviors {
+ leader: leader {
+ compatible = "zmk,behavior-leader-key";
+ #binding-cells = <0>;
+
+ // ====== LAYOUT SWITCHING ======
+ // Leader + l + <key> for layout changes
+
+ bepo { sequence = <L B>; bindings = <&to 0>; };
+ ergol { sequence = <L E>; bindings = <&to 1>; };
+ qwerty { sequence = <L Q>; bindings = <&to 2>; };
+
+ // ====== DEVELOPMENT PATTERNS - GENERAL ======
+ // Leader + c + <key> for code snippets
+
+ nil { sequence = <C N>; bindings = <&kp N &kp I &kp L>; };
+
+ // Note: Complex macros need to be defined as ZMK macros
+ // For now, keeping simpler sequences
+
+ // ====== PERSONAL MACROS ======
+ // Leader + m + <key> for personal macros
+
+ // These would need macro definitions for complex sequences
+ // Keeping placeholders for now
+
+ // ====== APPLICATION SHORTCUTS ======
+ // Leader + a + <key> for application launches (using niri keybindings)
+
+ fuzzel { sequence = <A D>; bindings = <&kp LG(D)>; };
+ emacs { sequence = <A E>; bindings = <&kp LG(LS(RET))>; };
+ terminal { sequence = <A T>; bindings = <&kp LG(RET)>; };
+ emoji { sequence = <A J>; bindings = <&kp LG(LC(D))>; };
+ clipboard { sequence = <A V>; bindings = <&kp LG(LC(V))>; };
+ raffi { sequence = <A R>; bindings = <&kp LG(LS(D))>; };
+ };
+ };
+
+ // Macros for complex leader sequences
+ macros {
+ // Development patterns - General
+ macro_go_err: macro_go_err {
+ compatible = "zmk,behavior-macro";
+ #binding-cells = <0>;
+ bindings = <&kp I &kp F &kp SPACE &kp E &kp R &kp R &kp SPACE &kp EXCL &kp EQUAL &kp SPACE &kp N &kp I &kp L &kp SPACE &kp LBRC &kp RET &kp TAB>;
+ };
+
+ macro_console_log: macro_console_log {
+ compatible = "zmk,behavior-macro";
+ #binding-cells = <0>;
+ bindings = <&kp C &kp O &kp N &kp S &kp O &kp L &kp E &kp DOT &kp L &kp O &kp G &kp LPAR &kp RPAR &kp LEFT>;
+ };
+
+ macro_fmt_println: macro_fmt_println {
+ compatible = "zmk,behavior-macro";
+ #binding-cells = <0>;
+ bindings = <&kp F &kp M &kp T &kp DOT &kp P &kp R &kp I &kp N &kp T &kp L &kp N &kp LPAR &kp RPAR &kp LEFT>;
+ };
+
+ macro_function: macro_function {
+ compatible = "zmk,behavior-macro";
+ #binding-cells = <0>;
+ bindings = <&kp F &kp U &kp N &kp C &kp T &kp I &kp O &kp N &kp LPAR &kp RPAR &kp SPACE &kp LBRC &kp RBRC &kp LEFT &kp LEFT>;
+ };
+
+ macro_arrow_fn: macro_arrow_fn {
+ compatible = "zmk,behavior-macro";
+ #binding-cells = <0>;
+ bindings = <&kp LPAR &kp RPAR &kp SPACE &kp EQUAL &kp GT &kp SPACE &kp LBRC &kp RBRC &kp LEFT &kp LEFT>;
+ };
+
+ // Python patterns
+ macro_py_main: macro_py_main {
+ compatible = "zmk,behavior-macro";
+ #binding-cells = <0>;
+ bindings = <&kp I &kp F &kp SPACE &kp UNDER &kp UNDER &kp N &kp A &kp M &kp E &kp UNDER &kp UNDER &kp SPACE &kp EQUAL &kp EQUAL &kp SPACE &kp DQT &kp UNDER &kp UNDER &kp M &kp A &kp I &kp N &kp UNDER &kp UNDER &kp DQT &kp COLON &kp RET &kp TAB>;
+ };
+
+ macro_py_def: macro_py_def {
+ compatible = "zmk,behavior-macro";
+ #binding-cells = <0>;
+ bindings = <&kp D &kp E &kp F &kp SPACE &kp LPAR &kp RPAR &kp COLON &kp RET &kp TAB>;
+ };
+
+ macro_py_class: macro_py_class {
+ compatible = "zmk,behavior-macro";
+ #binding-cells = <0>;
+ bindings = <&kp C &kp L &kp A &kp S &kp S &kp SPACE &kp COLON &kp RET &kp TAB>;
+ };
+
+ macro_py_print: macro_py_print {
+ compatible = "zmk,behavior-macro";
+ #binding-cells = <0>;
+ bindings = <&kp P &kp R &kp I &kp N &kp T &kp LPAR &kp F &kp DQT &kp DQT &kp RPAR &kp LEFT &kp LEFT>;
+ };
+
+ macro_py_try: macro_py_try {
+ compatible = "zmk,behavior-macro";
+ #binding-cells = <0>;
+ bindings = <&kp T &kp R &kp Y &kp COLON &kp RET &kp TAB &kp RET &kp E &kp X &kp C &kp E &kp P &kp T &kp SPACE &kp E &kp X &kp C &kp E &kp P &kp T &kp I &kp O &kp N &kp SPACE &kp A &kp S &kp SPACE &kp E &kp COLON &kp RET &kp TAB>;
+ };
+
+ macro_py_with: macro_py_with {
+ compatible = "zmk,behavior-macro";
+ #binding-cells = <0>;
+ bindings = <&kp W &kp I &kp T &kp H &kp SPACE &kp O &kp P &kp E &kp N &kp LPAR &kp DQT &kp DQT &kp COMMA &kp SPACE &kp DQT &kp R &kp DQT &kp RPAR &kp SPACE &kp A &kp S &kp SPACE &kp F &kp COLON &kp RET &kp TAB>;
+ };
+
+ // Emacs Lisp patterns
+ macro_el_defun: macro_el_defun {
+ compatible = "zmk,behavior-macro";
+ #binding-cells = <0>;
+ bindings = <&kp LPAR &kp D &kp E &kp F &kp U &kp N &kp SPACE &kp SPACE &kp LPAR &kp RPAR &kp RET>;
+ };
+
+ macro_el_interactive: macro_el_interactive {
+ compatible = "zmk,behavior-macro";
+ #binding-cells = <0>;
+ bindings = <&kp LPAR &kp I &kp N &kp T &kp E &kp R &kp A &kp C &kp T &kp I &kp V &kp E &kp RPAR>;
+ };
+
+ macro_el_let: macro_el_let {
+ compatible = "zmk,behavior-macro";
+ #binding-cells = <0>;
+ bindings = <&kp LPAR &kp L &kp E &kp T &kp SPACE &kp LPAR &kp LPAR>;
+ };
+
+ macro_el_setq: macro_el_setq {
+ compatible = "zmk,behavior-macro";
+ #binding-cells = <0>;
+ bindings = <&kp LPAR &kp S &kp E &kp T &kp Q &kp SPACE &kp SPACE &kp RPAR &kp LEFT &kp LEFT>;
+ };
+
+ macro_el_message: macro_el_message {
+ compatible = "zmk,behavior-macro";
+ #binding-cells = <0>;
+ bindings = <&kp LPAR &kp M &kp E &kp S &kp S &kp A &kp G &kp E &kp SPACE &kp DQT &kp DQT &kp RPAR &kp LEFT &kp LEFT>;
+ };
+
+ macro_el_require: macro_el_require {
+ compatible = "zmk,behavior-macro";
+ #binding-cells = <0>;
+ bindings = <&kp LPAR &kp R &kp E &kp Q &kp U &kp I &kp R &kp E &kp SPACE &kp SQT &kp RPAR &kp LEFT>;
+ };
+
+ // Nix patterns
+ macro_nix_fn: macro_nix_fn {
+ compatible = "zmk,behavior-macro";
+ #binding-cells = <0>;
+ bindings = <&kp LBRC &kp SPACE &kp P &kp K &kp G &kp S &kp COMMA &kp SPACE &kp DOT &kp DOT &kp DOT &kp SPACE &kp RBRC &kp COLON>;
+ };
+
+ macro_nix_let: macro_nix_let {
+ compatible = "zmk,behavior-macro";
+ #binding-cells = <0>;
+ bindings = <&kp L &kp E &kp T &kp RET &kp TAB &kp RET &kp I &kp N &kp RET>;
+ };
+
+ macro_nix_with: macro_nix_with {
+ compatible = "zmk,behavior-macro";
+ #binding-cells = <0>;
+ bindings = <&kp W &kp I &kp T &kp H &kp SPACE &kp P &kp K &kp G &kp S &kp SEMI &kp SPACE &kp LBKT &kp RET &kp TAB &kp RET &kp RBKT>;
+ };
+
+ macro_nix_inherit: macro_nix_inherit {
+ compatible = "zmk,behavior-macro";
+ #binding-cells = <0>;
+ bindings = <&kp I &kp N &kp H &kp E &kp R &kp I &kp T &kp SPACE &kp SEMI &kp LEFT &kp LEFT>;
+ };
+
+ macro_nix_build: macro_nix_build {
+ compatible = "zmk,behavior-macro";
+ #binding-cells = <0>;
+ bindings = <&kp B &kp U &kp I &kp L &kp D &kp I &kp N &kp P &kp U &kp T &kp S &kp SPACE &kp EQUAL &kp SPACE &kp LBKT &kp SPACE &kp RBKT &kp SEMI>;
+ };
+
+ macro_nix_script: macro_nix_script {
+ compatible = "zmk,behavior-macro";
+ #binding-cells = <0>;
+ bindings = <&kp P &kp K &kp G &kp S &kp DOT &kp W &kp R &kp I &kp T &kp E &kp S &kp H &kp E &kp L &kp L &kp S &kp C &kp R &kp I &kp P &kp T &kp B &kp I &kp N &kp SPACE &kp DQT &kp DQT &kp SPACE &kp SQT &kp SQT &kp RET &kp TAB &kp RET &kp SQT &kp SQT>;
+ };
+
+ // Import patterns
+ macro_import: macro_import {
+ compatible = "zmk,behavior-macro";
+ #binding-cells = <0>;
+ bindings = <&kp I &kp M &kp P &kp O &kp R &kp T &kp SPACE>;
+ };
+
+ macro_from_import: macro_from_import {
+ compatible = "zmk,behavior-macro";
+ #binding-cells = <0>;
+ bindings = <&kp F &kp R &kp O &kp M &kp SPACE &kp SPACE &kp I &kp M &kp P &kp O &kp R &kp T &kp SPACE>;
+ };
+
+ macro_nix_module: macro_nix_module {
+ compatible = "zmk,behavior-macro";
+ #binding-cells = <0>;
+ bindings = <&kp LBRC &kp SPACE &kp P &kp K &kp G &kp S &kp SPACE &kp RBRC &kp COLON &kp SPACE &kp LBRC &kp RET &kp TAB &kp RET &kp RBRC>;
+ };
+
+ macro_use_package: macro_use_package {
+ compatible = "zmk,behavior-macro";
+ #binding-cells = <0>;
+ bindings = <&kp LPAR &kp U &kp S &kp E &kp MINUS &kp P &kp A &kp C &kp K &kp A &kp G &kp E &kp SPACE &kp RET &kp TAB>;
+ };
+
+ // Personal macros
+ macro_email: macro_email {
+ compatible = "zmk,behavior-macro";
+ #binding-cells = <0>;
+ bindings = <&kp V &kp I &kp N &kp C &kp E &kp N &kp T &kp AT &kp S &kp B &kp R &kp DOT &kp P &kp M>;
+ };
+
+ macro_git_sig: macro_git_sig {
+ compatible = "zmk,behavior-macro";
+ #binding-cells = <0>;
+ bindings = <&kp V &kp I &kp N &kp C &kp E &kp N &kp T &kp SPACE &kp D &kp E &kp M &kp E &kp E &kp S &kp T &kp E &kp R &kp SPACE &kp LT &kp V &kp I &kp N &kp C &kp E &kp N &kp T &kp AT &kp S &kp B &kp R &kp DOT &kp P &kp M &kp GT>;
+ };
+
+ macro_email_sig: macro_email_sig {
+ compatible = "zmk,behavior-macro";
+ #binding-cells = <0>;
+ bindings = <&kp MINUS &kp MINUS &kp RET &kp V &kp I &kp N &kp C &kp E &kp N &kp T &kp SPACE &kp D &kp E &kp M &kp E &kp E &kp S &kp T &kp E &kp R &kp RET &kp V &kp I &kp N &kp C &kp E &kp N &kp T &kp AT &kp S &kp B &kp R &kp DOT &kp P &kp M>;
+ };
+ };
+};
keyboards/eyelash_corne/config/west.yml
@@ -20,7 +20,7 @@ manifest:
revision: main
- name: zmk
remote: zmkfirmware
- revision: main
+ revision: v0.3.0 # Last stable version before Zephyr 4.1
# revision: rgb-layer-25.04
import: app/west.yml
- name: zmk-helpers
@@ -28,7 +28,10 @@ manifest:
revision: main
- name: zmk-auto-layer
remote: urob
- revision: next
+ revision: main # Using main branch for v0.3.0 compatibility
+ - name: zmk-leader-key
+ remote: urob
+ revision: main
- name: nice-view-gem #new entry
remote: m165437 #new entry
revision: main #new entry
keyboards/eyelash_corne/README.org
@@ -5,7 +5,7 @@
* Features
- Layouts: Bépo (primary), ErgoL, QWERTY
-- Home row mods, smart numword layer, combos, mod-morph
+- Home row mods, smart numword layer, combos, mod-morph, leader keys
- Mouse emulation, French/currency Unicode support
- nice!view display (gem animation), RGB underglow (auto-off on idle)
- Power: 12min sleep timeout, +8dBm BT transmission
@@ -47,6 +47,92 @@
Build config (=build.yaml=): Left/right halves with nice!view, settings reset
+* Leader Key Sequences
+
+Leader key is activated with the *RH0+RH2 combo* (right thumb cluster: Shift + Alt on QWERTY). After activation, press a sequence of keys (timeout: 300ms per key) to insert text snippets or launch applications.
+
+** Layout Switching
+
+| Sequence | Output | Description |
+|----------+---------------+----------------------------|
+| l b | Switch to BÉP | Switch to Bépo layout |
+| l e | Switch to ERG | Switch to ErgoL layout |
+| l q | Switch to QWE | Switch to QWERTY layout |
+
+** Development Patterns - General
+
+| Sequence | Output | Description |
+|----------+---------------------+-----------------------------|
+| c n | nil | Go nil value |
+| c e | if err != nil {↵⇥ | Go error check |
+| c l | console.log() | JavaScript console.log |
+| c p | fmt.Println() | Go fmt.Println |
+| c f | function() {} | JavaScript function |
+| c a | () => {} | JavaScript arrow function |
+
+** Development Patterns - Python
+
+| Sequence | Output | Description |
+|----------+----------------------------------------------+--------------------------|
+| p i | if __name__ == "__main__":↵⇥ | Python main block |
+| p d | def ():↵⇥ | Python function def |
+| p c | class :↵⇥ | Python class def |
+| p p | print(f"") | Python f-string print |
+| p t | try:↵⇥↵except Exception as e:↵⇥ | Python try/except |
+| p w | with open("", "r") as f:↵⇥ | Python with open |
+
+** Development Patterns - Emacs Lisp
+
+| Sequence | Output | Description |
+|----------+---------------------+------------------------------|
+| e d | (defun ()↵ | Emacs Lisp defun |
+| e i | (interactive) | Emacs Lisp interactive |
+| e l | (let (( | Emacs Lisp let binding |
+| e s | (setq ) | Emacs Lisp setq |
+| e m | (message "") | Emacs Lisp message |
+| e r | (require ') | Emacs Lisp require |
+
+** Development Patterns - Nix
+
+| Sequence | Output | Description |
+|----------+----------------------------------+--------------------------------|
+| n f | { pkgs, ... }: | Nix function signature |
+| n l | let↵⇥↵in↵ | Nix let/in expression |
+| n w | with pkgs; [↵⇥↵] | Nix with statement |
+| n i | inherit ; | Nix inherit keyword |
+| n b | buildInputs = [ ]; | Nix buildInputs attribute |
+| n p | pkgs.writeShellScriptBin "" ''↵⇥↵'' | Nix shell script wrapper |
+
+** Import Patterns
+
+| Sequence | Output | Description |
+|----------+---------------------------------+--------------------------------|
+| i p | import | Python import |
+| i f | from import | Python from import |
+| i n | { pkgs }: {↵⇥↵} | Nix module import |
+| i e | (use-package ↵⇥ | Emacs use-package |
+
+** Personal Macros
+
+| Sequence | Output | Description |
+|----------+------------------------------------------------+-----------------------------|
+| m e | vincent@sbr.pm | Email address |
+| m g | Vincent Demeester <vincent@sbr.pm> | Git signature |
+| m s | --↵Vincent Demeester↵vincent@sbr.pm | Email signature |
+
+** Application Shortcuts
+
+These leader sequences trigger niri window manager keybindings:
+
+| Sequence | Keybinding | Application |
+|----------+---------------------+----------------------|
+| a d | Mod+D | Fuzzel (app launcher)|
+| a e | Mod+Shift+Enter | Emacs (client) |
+| a t | Mod+Enter | Kitty (terminal) |
+| a j | Mod+Control+D | Rofimoji (emoji) |
+| a v | Mod+Control+V | Cliphist (clipboard) |
+| a r | Mod+Shift+D | Raffi (launcher) |
+
* Inspirations and References
- https://github.com/urob/zmk-config