Skip to content

Instantly share code, notes, and snippets.

@sachee
Created March 23, 2019 23:45
Show Gist options
  • Select an option

  • Save sachee/a215fb3fafad5fec76f7982e50235f3d to your computer and use it in GitHub Desktop.

Select an option

Save sachee/a215fb3fafad5fec76f7982e50235f3d to your computer and use it in GitHub Desktop.
sachee dactyl keyboard layout
#include "Dactyl.h"
#include "action_layer.h"
#include "eeconfig.h"
extern keymap_config_t keymap_config;
#define _QWERTY 0
#define _NUMLAYER 1
enum custom_keycodes {
QWERTY,
NUMLAYER
};
#define KC_ KC_TRNS
#define _______ KC_TRNS
// sachee defined
#define KC_NUMNUM TG(RAISE)
#define KC_PAU KC_MPLY
#define KC_NEXT KC_MFFD
#define KC_PREV KC_MRWD
#define KC_BRTUP KC_PAUS
#define KC_BRTDN KC_SLCK
#define KC_HYPESC ALL_T(KC_ESC)
//default defined
#define KC_CAPP LGUI(LSFT(KC_4)) // Capture portion of screen
#define KC_LUP RAISE
#define KC_TOGUP TG(4)
#define KC_RST RESET
#define KC_RGHT RIGHT
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTY] = KC_KEYMAP(
// |----+----+----+----+----+----| |----+----+----+----+----+----|
GRV , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,EQL ,
// |----+----+----+----+----+----| |----+----+----+----+----+----|
TAB , Q , W , E , R , T , Y , U , I , O , P ,MINS,
// |----+----+----+----+----+----| |----+----+----+----+----+----|
HYPESC, A , S , D , F , G , H , J , K , L ,SCLN,QUOT,
// |----+----+----+----+----+----| |----+----+----+----+----+----|
LSFT, Z , X , C , V , B , N , M ,COMM,DOT ,SLSH,RSFT,
// |----+----+----+----+----+----| |----+----+----+----+----+----|
CAPP,EQL ,BSLS,LEFT,RGHT, NO , NO ,DOWN, UP ,LBRC,RBRC,SLEP,
// |----+----+----+----+----+----| |----+----+----+----+----+----|
// |----+----| |----+----|
LCTL,LALT, PGUP,RCMD,
// |----+----+----| |----+----+----|
NUMNUM, PGDN,
// | | +----| |----+ | |
BSPC,LCMD,LCTL, RCTL, ENT, SPC
// |----+----+----| |----+----+----|
),
[_NUMLAYER] = KC_KEYMAP(
// |----+----+----+----+----+----| |----+----+----+----+----+----|
NO, NO , NO ,BRTDN,BRTUP,NO, GRV , NO ,SLSH,ASTR,PMNS,PPLS,
// |----+----+----+----+----+----| |----+----+----+----+----+----|
NO , NO ,PREV,PAU ,NEXT, NO , NO , 7 , 8 , 9 ,PPLS,PMNS,
// |----+----+----+----+----+----| |----+----+----+----+----+----|
NO , NO ,MUTE,VOLD,VOLU, NO , NO , 4 , 5 , 6 ,PPLS, NO ,
// |----+----+----+----+----+----| |----+----+----+----+----+----|
NO , NO , NO , NO , NO , NO , NO , 1 , 2 , 3 ,PMNS, NO ,
// |----+----+----+----+----+----| |----+----+----+----+----+----|
NO , NO , NO , NO , NO , NO , NO , NO , 0 ,DOT ,ENT , NO ,
// |----+----+----+----+----+----| |----+----+----+----+----+----|
// |----+----| |----+----|
RST,LALT, VOLU,RCMD,
// |----+----+----| |----+----+----|
TRNS, VOLD,
// | | +----| |----+ | |
BSPC,LCMD,LCTL, RCTL, ENT, SPC
// |----+----+----| |----+----+----|
)
};
@Montana

Montana commented Jul 1, 2026

Copy link
Copy Markdown

Sachee Dactyl Keyboard Layout (My Remix)

A three-layer layout for the Dactyl: QWERTY base with layer-tap thumbs, a number/symbol layer, and a navigation/media layer.

Design Notes

  • Thumbs do the heavy lifting — layer-taps and mod-taps instead of a TG() toggle:
    • Backspace (tap) / NUM layer (hold) — left thumb
    • Space (tap) / NAV layer (hold) — right thumb
    • Enter (tap) / Ctrl (hold) — right thumb
    • Esc (tap) / Hyper (hold) — left pinky home position
  • Arrows live on HJKL in the NAV layer — hands never leave home row.
  • Symbols under the strong fingers in the NUM layer instead of bottom-row pinky reaches.
  • RESET and Sleep are tucked into far corners so they can't be hit by accident.

Base Layer (_QWERTY)

                       
` 1 2 3 4 5 6 7 8 9 0 =
Tab Q W E R T Y U I O P -
Esc/Hyper A S D F G H J K L ; '
Shift Z X C V B N M , . / Shift
ScrCap                 [ ] \

Thumb clusters: transparent (pass through to base layer).

Custom Keycodes

// thumb keys: hold = layer/mod, tap = key
#define KC_NUMBSP LT(_NUM, KC_BSPC)    // hold: num layer, tap: backspace
#define KC_NAVSPC LT(_NAV, KC_SPC)     // hold: nav layer, tap: space
#define KC_CTLENT MT(MOD_RCTL, KC_ENT) // hold: ctrl, tap: enter
#define KC_HYPESC ALL_T(KC_ESC)        // hold: hyper, tap: esc

// misc
#define KC_CAPP LGUI(LSFT(KC_4)) // macOS: capture portion of screen
#define KC_PAU KC_MPLY
#define KC_NEXT KC_MFFD
#define KC_PREV KC_MRWD
#define KC_BRTUP KC_PAUS
#define KC_BRTDN KC_SLCK
#define KC_RST RESET

Full keymap.c

#include "Dactyl.h"
#include "action_layer.h"
#include "eeconfig.h"

extern keymap_config_t keymap_config;

#define _QWERTY 0
#define _NUM 1
#define _NAV 2

enum custom_keycodes {
QWERTY = SAFE_RANGE
};

#define KC_ KC_TRNS
#define _______ KC_TRNS

// -------- thumb keys: hold = layer/mod, tap = key --------
#define KC_NUMBSP LT(_NUM, KC_BSPC) // hold: num/symbol layer, tap: backspace
#define KC_NAVSPC LT(_NAV, KC_SPC) // hold: nav/media layer, tap: space
#define KC_CTLENT MT(MOD_RCTL, KC_ENT) // hold: ctrl, tap: enter
#define KC_HYPESC ALL_T(KC_ESC) // hold: hyper, tap: esc

// -------- misc --------
#define KC_CAPP LGUI(LSFT(KC_4)) // macOS: capture portion of screen
#define KC_PAU KC_MPLY
#define KC_NEXT KC_MFFD
#define KC_PREV KC_MRWD
#define KC_BRTUP KC_PAUS
#define KC_BRTDN KC_SLCK
#define KC_RST RESET

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

/* Base layer

    • Arrows/media/brackets moved off the bottom row and onto layers
    • Left thumb: Backspace (tap) / NUM layer (hold)
    • Right thumb: Space (tap) / NAV layer (hold), Enter (tap) / Ctrl (hold)
      */
      [_QWERTY] = KC_KEYMAP(
      // |----+----+----+----+----+----| |----+----+----+----+----+----|
      GRV , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,EQL ,
      // |----+----+----+----+----+----| |----+----+----+----+----+----|
      TAB , Q , W , E , R , T , Y , U , I , O , P ,MINS,
      // |----+----+----+----+----+----| |----+----+----+----+----+----|
      HYPESC, A , S , D , F , G , H , J , K , L ,SCLN,QUOT,
      // |----+----+----+----+----+----| |----+----+----+----+----+----|
      LSFT, Z , X , C , V , B , N , M ,COMM,DOT ,SLSH,RSFT,
      // |----+----+----+----+----+----| |----+----+----+----+----+----|
      CAPP, NO , NO , NO , NO , NO , NO , NO , NO ,LBRC,RBRC,BSLS,
      // |----+----+----+----+----+----| |----+----+----+----+----+----|
      // |----+----| |----+----|
      LCTL,LALT, PGUP,RCMD,
      // |----+----+----| |----+----+----|
      LCMD, PGDN,
      // | | +----| |----+ | |
      NUMBSP,LCMD,LCTL, CTLENT,NAVSPC,SPC
      // |----+----+----| |----+----+----|
      ),

/* NUM layer (hold left-thumb Backspace)

    • Right hand: numpad, arithmetic ops on the pinky column
    • Left hand: shifted symbols under the strong fingers
    • Number row becomes F-keys
      */
      [_NUM] = KC_KEYMAP(
      // |----+----+----+----+----+----| |----+----+----+----+----+----|
      F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,F12 ,
      // |----+----+----+----+----+----| |----+----+----+----+----+----|
      NO ,EXLM, AT ,HASH,DLR ,PERC, PSLS, 7 , 8 , 9 ,PMNS, NO ,
      // |----+----+----+----+----+----| |----+----+----+----+----+----|
      NO ,CIRC,AMPR,ASTR,LPRN,RPRN, PAST, 4 , 5 , 6 ,PPLS, NO ,
      // |----+----+----+----+----+----| |----+----+----+----+----+----|
      NO ,GRV ,TILD,LCBR,RCBR, NO , NO , 1 , 2 , 3 ,PENT, NO ,
      // |----+----+----+----+----+----| |----+----+----+----+----+----|
      NO , NO , NO , NO , NO , NO , NO , NO , 0 ,DOT ,PENT, NO ,
      // |----+----+----+----+----+----| |----+----+----+----+----+----|
      // |----+----| |----+----|
      , , , ,
      // |----+----+----| |----+----+----|
      , ,
      // | | +----| |----+ | |
      , , , , ,
      // |----+----+----| |----+----+----|
      ),

/* NAV layer (hold right-thumb Space)

    • Vim-style arrows on HJKL, Home/End/PgUp/PgDn above them
    • Media and brightness on the left hand
    • RESET tucked in a corner so it can't be hit by accident
      */
      [_NAV] = KC_KEYMAP(
      // |----+----+----+----+----+----| |----+----+----+----+----+----|
      RST , NO , NO ,BRTDN,BRTUP,NO , NO , NO , NO , NO , NO ,SLEP,
      // |----+----+----+----+----+----| |----+----+----+----+----+----|
      NO , NO ,PREV,PAU ,NEXT, NO , HOME,PGDN,PGUP,END , NO , NO ,
      // |----+----+----+----+----+----| |----+----+----+----+----+----|
      NO , NO ,MUTE,VOLD,VOLU, NO , LEFT,DOWN, UP ,RGHT, NO , NO ,
      // |----+----+----+----+----+----| |----+----+----+----+----+----|
      , NO , NO , NO , NO , NO , NO , NO , NO , NO , NO , ,
      // |----+----+----+----+----+----| |----+----+----+----+----+----|
      NO , NO , NO , NO , NO , NO , NO , NO , NO , NO , NO , NO ,
      // |----+----+----+----+----+----| |----+----+----+----+----+----|
      // |----+----| |----+----|
      , , , ,
      // |----+----+----| |----+----+----|
      , ,
      // | | +----| |----+ | |
      , , , , ,
      // |----+----+----| |----+----+----|
      )
      };

Flashing Notes

  1. Blank cells inside KC_KEYMAP become KC_TRNS via the #define KC_ KC_TRNS trick — if your fork of the Dactyl macro is picky about empty entries, replace the blanks with TRNS.
  2. Layer-taps use the default 200 ms tapping term. If you get stray backspaces when holding for the NUM layer, add #define TAPPING_TERM 175 (or tune to taste) in config.h.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment