/miryoku_babel

Miryoku is an ergonomic, minimal, orthogonal, and universal keyboard layout. Miryoku Babel generates the layer data source files for Miryoku implementations from a single source.

Primary LanguageC

Miryoku Babel https://raw.githubusercontent.com/manna-harbour/miryoku/master/data/logos/miryoku-roa-32.png

https://raw.githubusercontent.com/manna-harbour/miryoku/master/data/cover/miryoku-kle-cover.png

Miryoku is an ergonomic, minimal, orthogonal, and universal keyboard layout. Miryoku Babel generates the layer data source files for Miryoku implementations from a single source.

This document describes Miryoku Babel only. For Miryoku documentation, implementations, and discussions and support, see Miryoku.

Overview

Emacs is an extensible text editor. Org is an emacs mode for structured text. Babel is org’s ability to execute source code from within org documents. This org document uses babel to generate the layer data source files for Miryoku implementations.

Layers and alternative layouts are maintained in org tables. The tables are tangled into source files via python scripts and additional data tables.

Changes to Miryoku layers can be made with convenient org table editing commands.

For those not using emacs, changes can also be made in any editor and the tangling can be performed from the shell or via a GitHub actions workflow.

The scripts can also be used by other layouts to generated multi-firmware keymaps from a single source.

Tangling

Locally

Emacs, python, and org 9.4 or later are required.

Within Emacs

Initial Setup

Add the following to your emacs initialisation file:

(require 'ob-python)
(setq org-confirm-babel-evaluate nil)
(setq python-indent-guess-indent-offset-verbose nil)
Tangle

Call org-babel-tangle (C-c C-v t).

Outside Emacs

See the Install Org and Tangle steps in .github/workflows/main.yml for example shell commands that can be run locally.

GitHub Actions Workflow

Initial Setup

Log in to GitHub, fork the Miryoku Babel repository, and enable workflows.

The Test workflow is not applicable when using the Build workflow and should be prevented from running on push by deleting the push line in .github/workflows/test.yml.

Tangle

Visit the Actions tab, select the Build workflow, select Run workflow, select the Branch if desired, activate Run workflow, select the Artifacts, and unzip the downloaded zip file.

Layer Tables

The layers are maintained in tables. U_NP indicates the key is not present and is used to fill in the table around the thumb keys.

Basic keycodes are entered without the KC_ prefix. Symbols can be entered as-is, except for ‘-’ (MINS), ‘.’ (DOT), ‘|’ (PIPE), and ‘”’ (DQUO). Empty cells are unused.

The base layer is maintained as separate tables for tap alphas, tap thumbs, and hold. Other layers are specified as a single hand including thumbs. Tables are combined to produce the keymap data for each layer.

Base

Tap

Alphas
QWFPBJLUY
ARSTGMNEIO
ZXCDVKH,DOT/
Thumbs
U_NPU_NPESCSPCTABENTBSPCDELU_NPU_NP

Hold

RESETRESET
LGUILALTLCTLLSFTLSFTLCTLLALTLGUI
BUTTONALGRALGRBUTTON
U_NPU_NPMEDIANAVMOUSESYMNUMFUNU_NPU_NP

Nav

U_RDOU_PSTU_CPYU_CUTU_UND
CAPSLEFTDOWNUPRGHT
INSHOMEPGDNPGUPEND
ENTBSPCDELU_NPU_NP

Mouse

U_RDOU_PSTU_CPYU_CUTU_UND
MS_LMS_DMS_UMS_R
WH_LWH_DWH_UWH_R
BTN1BTN3BTN2U_NPU_NP

Button

U_UNDU_CUTU_CPYU_PSTU_RDOU_RDOU_PSTU_CPYU_CUTU_UND
LGUILALTLCTLLSFTLSFTLCTLLALTLGUI
U_UNDU_CUTU_CPYU_PSTU_RDOU_RDOU_PSTU_CPYU_CUTU_UND
U_NPU_NPBTN2BTN3BTN1BTN1BTN3BTN2U_NPU_NP

Media

RGB_TOGRGB_MODRGB_HUIRGB_SAIRGB_VAI
OUT_AUTOMPRVVOLDVOLUMNXT
U_BTCLRU_BTSEL0U_BTSEL1U_BTSEL2U_BTSEL3
MSTPMPLYMUTEU_NPU_NP

Num

[789]
;456=
`123\
U_NPU_NPDOT0MINS

Sym

{&*(}
:$%^+
~!@#PIPE
U_NPU_NP()_

Fun

F12F7F8F9PSCR
F11F4F5F6SLCK
F10F1F2F3PAUS
U_NPU_NPAPPSPCTAB

Alternative Layouts

Alphas

AZERTY

MIRYOKU_ALPHAS=AZERTY

AZERTYUIOP
QSDFGHJKLM
WXCVBN,DOT/
BEAKL-15

MIRYOKU_ALPHAS=BEAKL15

QHOUXGCRFZ
YIEADOTDSTNB
J/,KWMLPV
Colemak

MIRYOKU_ALPHAS=COLEMAK

QWFPGJLUY
ARSTDHNEIO
ZXCVBKM,DOT/
Colemak Mod-DHk

MIRYOKU_ALPHAS=COLEMAKDHK

QWFPBJLUY
ARSTGKNEIO
ZXCDVMH,DOT/
Dvorak

MIRYOKU_ALPHAS=DVORAK

,DOTPYFGCRL
AOEUIDHTNS
/QJKXBMWVZ
Halmak

MIRYOKU_ALPHAS=HALMAK

WLRBZQUDJ
SHNT,DOTAEOI
FMVC/GPXKY
Workman

MIRYOKU_ALPHAS=WORKMAN

QDRWBJFUP
ASHTGYNEOI
ZXMCVKL,DOT/
QWERTY

MIRYOKU_ALPHAS=QWERTY

QWERTYUIOP
ASDFGHJKL
ZXCVBNM,DOT/
QWERTZ

MIRYOKU_ALPHAS=QWERTZ

QWERTZUIOP
ASDFGHJKL
YXCVBNM,DOT/

Nav

vi-Style

MIRYOKU_NAV=VI

Not available with MIRYOKU_LAYERS=FLIP.

Nav
U_RDOU_PSTU_CPYU_CUTU_UND
LEFTDOWNUPRGHTCAPS
HOMEPGDNPGUPENDINS
ENTBSPCDELU_NPU_NP
Mouse
U_RDOU_PSTU_CPYU_CUTU_UND
MS_LMS_DMS_UMS_R
WH_LWH_DWH_UWH_R
BTN1BTN3BTN2U_NPU_NP
Media
RGB_TOGRGB_MODRGB_HUIRGB_SAIRGB_VAI
MPRVVOLDVOLUMNXTOUT_AUTO
U_BTSEL0U_BTSEL1U_BTSEL2U_BTSEL3U_BTCLR
MSTPMPLYMUTEU_NPU_NP
Inverted-T

MIRYOKU_NAV=INVERTEDT

Nav
INSHOMEUPENDPGUP
CAPSLEFTDOWNRGHTPGDN
U_RDOU_PSTU_CPYU_CUTU_UND
ENTBSPCDELU_NPU_NP
Mouse
WH_LMS_UWH_RWH_U
MS_LMS_DMS_RWH_D
U_RDOU_PSTU_CPYU_CUTU_UND
BTN1BTN3BTN2U_NPU_NP
Media
RGB_TOGRGB_MODVOLURGB_HUIRGB_SAI
OUT_AUTOMPRVVOLDMNXTRGB_VAI
U_BTCLRU_BTSEL0U_BTSEL1U_BTSEL2U_BTSEL3
MSTPMPLYMUTEU_NPU_NP

Layers

Flip

MIRYOKU_LAYERS=FLIP

Thumbs
U_NPU_NPDELBSPCENTTABSPCESCU_NPU_NP
Hold
RESETRESET
LGUILALTLCTLLSFTLSFTLCTLLALTLGUI
BUTTONALGRALGRBUTTON
U_NPU_NPFUNNUMSYMMOUSENAVMEDIAU_NPU_NP
Num
[789]
=456;
\123`
MINS0DOTU_NPU_NP
Sym
{&*(}
+$%^:
PIPE!@#~
_()U_NPU_NP
Fun
PSCRF7F8F9F12
SLCKF4F5F6F11
PAUSF1F2F3F10
TABSPCAPPU_NPU_NP
Nav
DefaultNav
HOMEPGDNPGUPENDINS
LEFTDOWNUPRGHTCAPS
U_UNDU_CUTU_CPYU_PSTU_RDO
U_NPU_NPDELBSPCENT
Mouse
WH_LWH_DWH_UWH_R
MS_LMS_DMS_UMS_R
U_UNDU_CUTU_CPYU_PSTU_RDO
U_NPU_NPBTN2BTN3BTN1
Media
RGB_MODRGB_HUIRGB_SAIRGB_VAIRGB_TOG
MPRVVOLDVOLUMNXTOUT_AUTO
U_BTSEL0U_BTSEL1U_BTSEL2U_BTSEL3U_BTCLR
U_NPU_NPMUTEMPLYMSTP
Inverted-T

MIRYOKU_NAV=INVERTEDT

Nav
PGUPHOMEUPENDINS
PGDNLEFTDOWNRGHTCAPS
U_UNDU_CUTU_CPYU_PSTU_RDO
U_NPU_NPDELBSPCENT
Mouse
WH_UWH_LMS_UWH_R
WH_DMS_LMS_DMS_R
U_UNDU_CUTU_CPYU_PSTU_RDO
U_NPU_NPBTN2BTN3BTN1
Media
RGB_SAIRGB_HUIVOLURGB_MODRGB_TOG
RGB_VAIMPRVVOLDMNXTOUT_AUTO
U_BTSEL0U_BTSEL1U_BTSEL2U_BTSEL3U_BTCLR
U_NPU_NPMUTEMPLYMSTP

Scripts and Data

Common

layers

BASEBUTTONNAVMOUSEMEDIANUMSYMFUN

symbol-names

Symbol, name, and shifted symbol mappings for use in tables.

`GRV~TILD
”-”MINS_UNDS
=EQL+PLUS
[LBRC{LCBR
]RBRC}RCBR
\BSLSPIPEPIPE
;SCLN:COLN
QUOTDQUODQUO
,COMM<LT
”.”DOT>GT
/SLSH?QUES
11!EXLM
22@AT
33#HASH
44$DLR
55%PERC
66^CIRC
77&AMPR
88*ASTR
99(LPRN
00)RPRN

mods

Modifiers usable in hold table. Need to have the same name for KC_ and _T versions.

LSFTLCTLLALTLGUIALGR

keycode-translation

Source keycode to implementation equivalent (source, QMK, ZMK, KMonad).

AAAa
BBBb
CCCc
DDDd
EEEe
FFFf
GGGg
HHHh
IIIi
JJJj
KKKk
LLLl
MMMm
NNNn
OOOo
PPPp
QQQq
RRRr
SSSs
TTTt
UUUu
VVVv
WWWw
XXXx
YYYy
ZZZz
00NUM_00
11NUM_11
22NUM_22
33NUM_33
44NUM_44
55NUM_55
66NUM_66
77NUM_77
88NUM_88
99NUM_99
ALGRALGRRALTralt
AMPRAMPRAMPS&
APPAPPK_APPcomp
ASTRASTRASTRK*
ATATAT@
BSLSBSLSBSLH\
BSPCBSPCBSPCbspc
U_BTCLRU_NU&bt BT_CLRXX
U_BTSEL0U_NU&bt BT_SEL 0XX
U_BTSEL1U_NU&bt BT_SEL 1XX
U_BTSEL2U_NU&bt BT_SEL 2XX
U_BTSEL3U_NU&bt BT_SEL 3XX
U_BTSEL4U_NU&bt BT_SEL 4XX
BTN1BTN1U_BTN1#(kp/ kp5)
BTN2BTN2U_BTN2#(kp- kp5)
BTN3BTN3U_BTN3#(kp* kp5)
CAPSCAPSCAPScaps
CIRCCIRCCRRT^
COLNCOLNCOLON:
COMMCOMMCOMMAU_COMM
DELDELDELdel
DLRDLRDLLR$
DOTDOTDOT.
DOWNDOWNDOWNdown
DQUODQUODQTU_DQUO
ENDENDENDend
ENTENTRETent
EQLEQLEQL=
ESCESCESCesc
EXLMEXLMEXCL!
F1F1F1f1
F2F2F2f2
F3F3F3f3
F4F4F4f4
F5F5F5f5
F6F6F6f6
F7F7F7f7
F8F8F8f8
F9F9F9f9
F10F10F10f10
F11F11F11f11
F12F12F12f12
GRVGRVGRAVE`
GTGTGT>
HASHHASHHASH#
HOMEHOMEHOMEhome
INSINSINSins
LALTLALTLALTalt
LBRCLBRCLBKT[
LCBRLCBRLBRC{
LCTLLCTLLCTRLctl
LEFTLEFTLEFTleft
LGUILGUILGUImet
LPRNLPRNLPARU_LPRN
LSFTLSFTLSHFTsft
LTLTLT<
MINSMINSMINUS-
MNXTMNXTC_NEXTnextsong
MPLYMPLYC_PPplaypause
MPRVMPRVC_PREVprevioussong
MS_DMS_DU_MS_Dkp2
MS_LMS_LU_MS_Lkp4
MS_RMS_RU_MS_Rkp6
MS_UMS_UU_MS_Ukp8
MSTPMSTPC_STOPstopcd
MUTEMUTEC_MUTEmute
NONO&noneXX
OUT_AUTOOUT_AUTO&out OUT_TOGXX
OUT_BTOUT_BT&out OUT_BTXX
OUT_USBOUT_USB&out OUT_USBXX
PAUSPAUSPAUSE_BREAKpause
PERCPERCPRCT%
PGDNPGDNPG_DNpgdn
PGUPPGUPPG_UPpgup
PIPEPIPEPIPEU_PIPE
PLUSPLUSPLUS+
PSCRPSCRPSCRNsysrq
QUESQUESQMARK?
QUOTQUOTSQTU_QUOT
RBRCRBRCRBKT]
RCBRRCBRRBRC}
RESETRESET&bootloaderXX
RGB_HUIRGB_HUI&rgb_ug RGB_HUIXX
RGB_MODRGB_MOD&rgb_ug RGB_EFFXX
RGB_SAIRGB_SAI&rgb_ug RGB_SAIXX
RGB_TOGRGB_TOG&rgb_ug RGB_TOGXX
RGB_VAIRGB_VAI&rgb_ug RGB_BRIXX
RGHTRGHTRIGHTright
RPRNRPRNRPARU_RPRN
SCLNSCLNSEMI;
SLCKSLCKSLCKslck
SLSHSLSHSLASH/
SPCSPCSPCspc
TABTABTABtab
TILDTILDTILDE~
TRNSTRNS&trans_
UNDSUNDSUNDER\_
UPUPUPup
VOLDVOLDC_VOL_DNvold
VOLUVOLUC_VOL_UPvolu
WH_DWH_DU_WH_DXX
WH_LWH_LU_WH_LXX
WH_RWH_RU_WH_RXX
WH_UWH_UU_WH_UXX
U_MTU_MTLS(LNLCK)S-nlck

table-layer-init

width = 19
mods_dict = dict.fromkeys(mods_table[0])
layers_dict = dict.fromkeys(layers_table[0])
symbol_names_dict = {}
shifted_symbol_names_dict = {}
for symbol, name, shifted_symbol, shifted_name in symbol_names_table:
  symbol_names_dict[symbol] = name
  symbol_names_dict[shifted_symbol] = shifted_name
  shifted_symbol_names_dict[symbol] = shifted_name
keycode_translation_dict = {}
if target == 'qmk':
  nonbasic_tuple = tuple(nonkc_table[0])
  basic_prefix = 'KC_'
  for source, qmk, zmk, kmonad in keycode_translation_table:
    keycode_translation_dict[source] = qmk
elif target == 'zmk':
  nonbasic_tuple = tuple(nonkp_table[0])
  basic_prefix = '&kp '
  for source, qmk, zmk, kmonad in keycode_translation_table:
    keycode_translation_dict[source] = zmk
elif target == 'kmonad':
  nonbasic_tuple = ()
  basic_prefix = ''
  for source, qmk, zmk, kmonad in keycode_translation_table:
    keycode_translation_dict[source] = kmonad
results = '// target: ' + target
results

table-layer-taphold

Produce base layer from separate alphas, thumbs, and hold tables.

results = ''
for tap_row, hold_row in zip(alphas_table + thumbs_table, hold_table):
  for tap, hold in zip(tap_row, hold_row):
    if tap == '':
      code = 'U_NU'
    elif tap in symbol_names_dict:
      code = symbol_names_dict[tap]
    else:
      code = tap
    if code in keycode_translation_dict:
      code = keycode_translation_dict[code]
    if hold in mods_dict:
      if hold in keycode_translation_dict:
        hold = keycode_translation_dict[hold]
      if target == 'qmk':
        code = basic_prefix + str(code)
        code = str(hold) + '_T(' + code + ')'
      elif target == 'zmk':
        code = '&hm ' + str(hold) + ' ' + code
      elif target == 'kmonad':
        code = 'U_MT(' + code + ', ' + str(hold) + ')'
    elif hold in layers_dict:
      if target == 'qmk':
        code = basic_prefix + str(code)
        code = 'LT(' + str(hold) + ', ' + code + ')'
      elif target == 'zmk':
        code = '&lt ' + str(hold) + ' ' + code
      elif target == 'kmonad':
        code = 'U_LT(' + code + ', ' + str(hold) + ')'
    elif not str(code).startswith(nonbasic_tuple):
      code = basic_prefix + str(code)
    results += (code + ', ').ljust(width)
  results += '\\\n'
results = results.rstrip(', \\\n')
results

table-layer-half

Produce sub layers from single hand and hold tables.

length = len(half_table[0])
results = ''
for half_row, hold_row in zip(half_table, hold_table):
  hold_row_l, hold_row_r = hold_row[:length], hold_row[length:]
  for lr, hold_row_lr in ('l', hold_row_l), ('r', hold_row_r):
    if lr == mode:
      for half in half_row:
        if half == '':
          code = 'U_NU'
        elif shift == "true" and half in shifted_symbol_names_dict:
          code = shifted_symbol_names_dict[half]
        elif half in symbol_names_dict:
          code = symbol_names_dict[half]
        else:
          code = half
        if code in keycode_translation_dict:
          code = keycode_translation_dict[code]
        if not str(code).startswith(nonbasic_tuple):
          code = basic_prefix + str(code)
        results += (str(code) + ', ').ljust(width)
    else:
      for hold in hold_row_lr:
        if hold in mods_dict:
          if hold in keycode_translation_dict:
            hold = keycode_translation_dict[hold]
          code = basic_prefix + str(hold)
        else:
          if hold in keycode_translation_dict:
            hold = keycode_translation_dict[hold]
          if hold == '' or hold in layers_dict:
            code = 'U_NA'
          elif str(hold).startswith(nonbasic_tuple):
            code = hold
          else:
            code = basic_prefix + str(hold)
        results += (str(code) + ', ').ljust(width)
  results += '\\\n'
results = results.rstrip(', \\\n')
results

table-layer-full

Produce full layer from single table. Fill for unused keys is configurable.

results = ''
for row in table:
  for key in row:
    if key == '':
      code = fill
    elif key in symbol_names_dict:
      code = symbol_names_dict[key]
    else:
      code = key
    if code in keycode_translation_dict:
      code = keycode_translation_dict[code]
    if not str(code).startswith(nonbasic_tuple):
        code = basic_prefix + str(code)
    results += (code + ', ').ljust(width)
  results += '\\\n'
results = results.rstrip(', \\\n')
results

layer-body

Body of miryoku_layer.h.

#pragma once

#include "miryoku_alternatives.h"

#if !defined(MIRYOKU_LAYER_BASE)
  #if defined (MIRYOKU_LAYERS_FLIP)
    #if defined (MIRYOKU_ALPHAS_AZERTY)
      #define MIRYOKU_LAYER_BASE MIRYOKU_ALTERNATIVES_BASE_AZERTY_FLIP
    #elif defined (MIRYOKU_ALPHAS_BEAKL15)
      #define MIRYOKU_LAYER_BASE MIRYOKU_ALTERNATIVES_BASE_BEAKL15_FLIP
    #elif defined (MIRYOKU_ALPHAS_COLEMAK)
      #define MIRYOKU_LAYER_BASE MIRYOKU_ALTERNATIVES_BASE_COLEMAK_FLIP
    #elif defined (MIRYOKU_ALPHAS_COLEMAKDHK)
      #define MIRYOKU_LAYER_BASE MIRYOKU_ALTERNATIVES_BASE_COLEMAKDHK_FLIP
    #elif defined (MIRYOKU_ALPHAS_DVORAK)
      #define MIRYOKU_LAYER_BASE MIRYOKU_ALTERNATIVES_BASE_DVORAK_FLIP
    #elif defined (MIRYOKU_ALPHAS_HALMAK)
      #define MIRYOKU_LAYER_BASE MIRYOKU_ALTERNATIVES_BASE_HALMAK_FLIP
    #elif defined (MIRYOKU_ALPHAS_WORKMAN)
      #define MIRYOKU_LAYER_BASE MIRYOKU_ALTERNATIVES_BASE_WORKMAN_FLIP
    #elif defined (MIRYOKU_ALPHAS_QWERTY)
      #define MIRYOKU_LAYER_BASE MIRYOKU_ALTERNATIVES_BASE_QWERTY_FLIP
    #elif defined (MIRYOKU_ALPHAS_QWERTZ)
      #define MIRYOKU_LAYER_BASE MIRYOKU_ALTERNATIVES_BASE_QWERTZ_FLIP
    #else
      #define MIRYOKU_LAYER_BASE MIRYOKU_ALTERNATIVES_BASE_COLEMAKDH_FLIP
    #endif
  #else
    #if defined (MIRYOKU_ALPHAS_AZERTY)
      #define MIRYOKU_LAYER_BASE MIRYOKU_ALTERNATIVES_BASE_AZERTY
    #elif defined (MIRYOKU_ALPHAS_BEAKL15)
      #define MIRYOKU_LAYER_BASE MIRYOKU_ALTERNATIVES_BASE_BEAKL15
    #elif defined (MIRYOKU_ALPHAS_COLEMAK)
      #define MIRYOKU_LAYER_BASE MIRYOKU_ALTERNATIVES_BASE_COLEMAK
    #elif defined (MIRYOKU_ALPHAS_COLEMAKDHK)
      #define MIRYOKU_LAYER_BASE MIRYOKU_ALTERNATIVES_BASE_COLEMAKDHK
    #elif defined (MIRYOKU_ALPHAS_DVORAK)
      #define MIRYOKU_LAYER_BASE MIRYOKU_ALTERNATIVES_BASE_DVORAK
    #elif defined (MIRYOKU_ALPHAS_HALMAK)
      #define MIRYOKU_LAYER_BASE MIRYOKU_ALTERNATIVES_BASE_HALMAK
    #elif defined (MIRYOKU_ALPHAS_WORKMAN)
      #define MIRYOKU_LAYER_BASE MIRYOKU_ALTERNATIVES_BASE_WORKMAN
    #elif defined (MIRYOKU_ALPHAS_QWERTY)
      #define MIRYOKU_LAYER_BASE MIRYOKU_ALTERNATIVES_BASE_QWERTY
    #elif defined (MIRYOKU_ALPHAS_QWERTZ)
      #define MIRYOKU_LAYER_BASE MIRYOKU_ALTERNATIVES_BASE_QWERTZ
    #else
      #define MIRYOKU_LAYER_BASE MIRYOKU_ALTERNATIVES_BASE_COLEMAKDH
    #endif
  #endif
#endif

#if !defined(MIRYOKU_LAYER_NAV)
  #if defined (MIRYOKU_LAYERS_FLIP)
    #if defined (MIRYOKU_NAV_INVERTEDT)
      #define MIRYOKU_LAYER_NAV MIRYOKU_ALTERNATIVES_NAV_INVERTEDT_FLIP
    #else
      #define MIRYOKU_LAYER_NAV MIRYOKU_ALTERNATIVES_NAV_FLIP
    #endif
  #else
    #if defined (MIRYOKU_NAV_INVERTEDT)
      #define MIRYOKU_LAYER_NAV MIRYOKU_ALTERNATIVES_NAV_INVERTEDT
    #elif defined (MIRYOKU_NAV_VI)
      #define MIRYOKU_LAYER_NAV MIRYOKU_ALTERNATIVES_NAV_VI
    #else
      #define MIRYOKU_LAYER_NAV MIRYOKU_ALTERNATIVES_NAV
    #endif
  #endif
#endif

#if !defined(MIRYOKU_LAYER_MOUSE)
  #if defined (MIRYOKU_LAYERS_FLIP)
    #if defined (MIRYOKU_NAV_INVERTEDT)
      #define MIRYOKU_LAYER_MOUSE MIRYOKU_ALTERNATIVES_MOUSE_INVERTEDT_FLIP
    #else
      #define MIRYOKU_LAYER_MOUSE MIRYOKU_ALTERNATIVES_MOUSE_FLIP
    #endif
  #else
    #if defined (MIRYOKU_NAV_INVERTEDT)
      #define MIRYOKU_LAYER_MOUSE MIRYOKU_ALTERNATIVES_MOUSE_INVERTEDT
    #elif defined (MIRYOKU_NAV_VI)
      #define MIRYOKU_LAYER_MOUSE MIRYOKU_ALTERNATIVES_MOUSE_VI
    #else
      #define MIRYOKU_LAYER_MOUSE MIRYOKU_ALTERNATIVES_MOUSE
    #endif
  #endif
#endif

#if !defined(MIRYOKU_LAYER_MEDIA)
  #if defined (MIRYOKU_LAYERS_FLIP)
    #if defined (MIRYOKU_NAV_INVERTEDT)
      #define MIRYOKU_LAYER_MEDIA MIRYOKU_ALTERNATIVES_MEDIA_INVERTEDT_FLIP
    #else
      #define MIRYOKU_LAYER_MEDIA MIRYOKU_ALTERNATIVES_MEDIA_FLIP
    #endif
  #else
    #if defined (MIRYOKU_NAV_INVERTEDT)
      #define MIRYOKU_LAYER_MEDIA MIRYOKU_ALTERNATIVES_MEDIA_INVERTEDT
    #elif defined (MIRYOKU_NAV_VI)
      #define MIRYOKU_LAYER_MEDIA MIRYOKU_ALTERNATIVES_MEDIA_VI
    #else
      #define MIRYOKU_LAYER_MEDIA MIRYOKU_ALTERNATIVES_MEDIA
    #endif
  #endif
#endif

#if !defined(MIRYOKU_LAYER_NUM)
  #if defined (MIRYOKU_LAYERS_FLIP)
    #define MIRYOKU_LAYER_NUM MIRYOKU_ALTERNATIVES_NUM_FLIP
  #else
    #define MIRYOKU_LAYER_NUM MIRYOKU_ALTERNATIVES_NUM
  #endif
#endif

#if !defined(MIRYOKU_LAYER_SYM)
  #if defined (MIRYOKU_LAYERS_FLIP)
    #define MIRYOKU_LAYER_SYM MIRYOKU_ALTERNATIVES_SYM_FLIP
  #else
    #define MIRYOKU_LAYER_SYM MIRYOKU_ALTERNATIVES_SYM
  #endif
#endif

#if !defined(MIRYOKU_LAYER_FUN)
  #if defined (MIRYOKU_LAYERS_FLIP)
    #define MIRYOKU_LAYER_FUN MIRYOKU_ALTERNATIVES_FUN_FLIP
  #else
    #define MIRYOKU_LAYER_FUN MIRYOKU_ALTERNATIVES_FUN
  #endif
#endif

#if !defined(MIRYOKU_LAYER_BUTTON)
  #define MIRYOKU_LAYER_BUTTON MIRYOKU_ALTERNATIVES_BUTTON
#endif

Miryoku QMK

nonkc

Keycodes that match any of these prefixes will not have KC_ automatically prepended.

U_RGB_OUT_RESETS(C(SCMD(LCMD(

license-qmk

License for tangled QMK C source files.

// 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/>.

layer-names-list

layers_list = layers_table[0]
results = ', '.join(layers_list)
return results

Miryoku ZMK

nonkp

Keycodes that match any of these prefixes will not have &kp automatically prepended.

U_&

layer-names-defines

width = 7
layers_list = layers_table[0]
results = ''
i = 0
for layer in layers_list:
  results += '#define ' + ( layer + ' ').ljust(width) + str(i) + '\n'
  i += 1
return results

Tangled Files

Miryoku QMK

// Copyright 2019 Manna Harbour
// https://github.com/manna-harbour/miryoku
// generated -*- buffer-read-only: t -*-

<<license-qmk>>

#if !defined (MIRYOKU_LAYER_NAMES)
  #define MIRYOKU_LAYER_NAMES <<layer-names-list()>>
#endif
// Copyright 2019 Manna Harbour
// https://github.com/manna-harbour/miryoku
// generated -*- buffer-read-only: t -*-
<<table-layer-init(target="qmk")>>

<<license-qmk>>

#pragma once

#define MIRYOKU_ALTERNATIVES_BASE_AZERTY_FLIP \
<<table-layer-taphold(alphas_table=azerty, thumbs_table=thumbs-flip, hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_BASE_BEAKL15_FLIP \
<<table-layer-taphold(alphas_table=beakl15, thumbs_table=thumbs-flip, hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_BASE_COLEMAK_FLIP \
<<table-layer-taphold(alphas_table=colemak, thumbs_table=thumbs-flip, hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_BASE_COLEMAKDH_FLIP \
<<table-layer-taphold(alphas_table=colemakdh, thumbs_table=thumbs-flip, hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_BASE_COLEMAKDHK_FLIP \
<<table-layer-taphold(alphas_table=colemakdhk, thumbs_table=thumbs-flip, hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_BASE_DVORAK_FLIP \
<<table-layer-taphold(alphas_table=dvorak, thumbs_table=thumbs-flip, hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_BASE_HALMAK_FLIP \
<<table-layer-taphold(alphas_table=halmak, thumbs_table=thumbs-flip, hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_BASE_WORKMAN_FLIP \
<<table-layer-taphold(alphas_table=workman, thumbs_table=thumbs-flip, hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_BASE_QWERTY_FLIP \
<<table-layer-taphold(alphas_table=qwerty, thumbs_table=thumbs-flip, hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_BASE_QWERTZ_FLIP \
<<table-layer-taphold(alphas_table=qwertz, thumbs_table=thumbs-flip, hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_BASE_AZERTY \
<<table-layer-taphold(alphas_table=azerty)>>

#define MIRYOKU_ALTERNATIVES_BASE_BEAKL15 \
<<table-layer-taphold(alphas_table=beakl15)>>

#define MIRYOKU_ALTERNATIVES_BASE_COLEMAK \
<<table-layer-taphold(alphas_table=colemak)>>

#define MIRYOKU_ALTERNATIVES_BASE_COLEMAKDH \
<<table-layer-taphold(alphas_table=colemakdh)>>

#define MIRYOKU_ALTERNATIVES_BASE_COLEMAKDHK \
<<table-layer-taphold(alphas_table=colemakdhk)>>

#define MIRYOKU_ALTERNATIVES_BASE_DVORAK \
<<table-layer-taphold(alphas_table=dvorak)>>

#define MIRYOKU_ALTERNATIVES_BASE_HALMAK \
<<table-layer-taphold(alphas_table=halmak)>>

#define MIRYOKU_ALTERNATIVES_BASE_WORKMAN \
<<table-layer-taphold(alphas_table=workman)>>

#define MIRYOKU_ALTERNATIVES_BASE_QWERTY \
<<table-layer-taphold(alphas_table=qwerty)>>

#define MIRYOKU_ALTERNATIVES_BASE_QWERTZ \
<<table-layer-taphold(alphas_table=qwertz)>>


#define MIRYOKU_ALTERNATIVES_NAV_INVERTEDT_FLIP \
<<table-layer-half(half_table=nav-l-invertedt, mode="l", hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_NAV_FLIP \
<<table-layer-half(half_table=nav-l, mode="l", hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_NAV_INVERTEDT \
<<table-layer-half(half_table=nav-r-invertedt, mode="r")>>

#define MIRYOKU_ALTERNATIVES_NAV_VI \
<<table-layer-half(half_table=nav-r-vi, mode="r")>>

#define MIRYOKU_ALTERNATIVES_NAV \
<<table-layer-half(half_table=nav-r, mode="r")>>


#define MIRYOKU_ALTERNATIVES_MOUSE_INVERTEDT_FLIP \
<<table-layer-half(half_table=mouse-l-invertedt, mode="l", hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_MOUSE_FLIP \
<<table-layer-half(half_table=mouse-l, mode="l", hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_MOUSE_INVERTEDT \
<<table-layer-half(half_table=mouse-r-invertedt, mode="r")>>

#define MIRYOKU_ALTERNATIVES_MOUSE_VI \
<<table-layer-half(half_table=mouse-r-vi, mode="r")>>

#define MIRYOKU_ALTERNATIVES_MOUSE \
<<table-layer-half(half_table=mouse-r, mode="r")>>


#define MIRYOKU_ALTERNATIVES_MEDIA_INVERTEDT_FLIP \
<<table-layer-half(half_table=media-l-invertedt, mode="l", hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_MEDIA_FLIP \
<<table-layer-half(half_table=media-l, mode="l", hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_MEDIA_INVERTEDT \
<<table-layer-half(half_table=media-r-invertedt, mode="r")>>

#define MIRYOKU_ALTERNATIVES_MEDIA_VI \
<<table-layer-half(half_table=media-r-vi, mode="r")>>

#define MIRYOKU_ALTERNATIVES_MEDIA \
<<table-layer-half(half_table=media-r, mode="r")>>


#define MIRYOKU_ALTERNATIVES_NUM_FLIP \
<<table-layer-half(half_table=num-r, mode="r", hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_NUM \
<<table-layer-half(half_table=num-l, mode="l")>>


#define MIRYOKU_ALTERNATIVES_SYM_FLIP \
<<table-layer-half(half_table=sym-r, mode="r", hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_SYM \
<<table-layer-half(half_table=sym-l, mode="l")>>


#define MIRYOKU_ALTERNATIVES_FUN_FLIP \
<<table-layer-half(half_table=fun-r, mode="r", hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_FUN \
<<table-layer-half(half_table=fun-l, mode="l")>>


#define MIRYOKU_ALTERNATIVES_BUTTON \
<<table-layer-full(table=button)>>
// Copyright 2019 Manna Harbour
// https://github.com/manna-harbour/miryoku
// generated -*- buffer-read-only: t -*-

<<license-qmk>>

<<layer-body>>

Miryoku ZMK

// Copyright 2021 Manna Harbour
// https://github.com/manna-harbour/miryoku
// generated -*- buffer-read-only: t -*-

<<layer-names-defines()>>
// Copyright 2021 Manna Harbour
// https://github.com/manna-harbour/miryoku
// generated -*- buffer-read-only: t -*-
<<table-layer-init(target="zmk")>>

#pragma once

#define MIRYOKU_ALTERNATIVES_BASE_AZERTY_FLIP \
<<table-layer-taphold(alphas_table=azerty, thumbs_table=thumbs-flip, hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_BASE_BEAKL15_FLIP \
<<table-layer-taphold(alphas_table=beakl15, thumbs_table=thumbs-flip, hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_BASE_COLEMAK_FLIP \
<<table-layer-taphold(alphas_table=colemak, thumbs_table=thumbs-flip, hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_BASE_COLEMAKDH_FLIP \
<<table-layer-taphold(alphas_table=colemakdh, thumbs_table=thumbs-flip, hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_BASE_COLEMAKDHK_FLIP \
<<table-layer-taphold(alphas_table=colemakdhk, thumbs_table=thumbs-flip, hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_BASE_DVORAK_FLIP \
<<table-layer-taphold(alphas_table=dvorak, thumbs_table=thumbs-flip, hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_BASE_HALMAK_FLIP \
<<table-layer-taphold(alphas_table=halmak, thumbs_table=thumbs-flip, hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_BASE_WORKMAN_FLIP \
<<table-layer-taphold(alphas_table=workman, thumbs_table=thumbs-flip, hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_BASE_QWERTY_FLIP \
<<table-layer-taphold(alphas_table=qwerty, thumbs_table=thumbs-flip, hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_BASE_QWERTZ_FLIP \
<<table-layer-taphold(alphas_table=qwertz, thumbs_table=thumbs-flip, hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_BASE_AZERTY \
<<table-layer-taphold(alphas_table=azerty)>>

#define MIRYOKU_ALTERNATIVES_BASE_BEAKL15 \
<<table-layer-taphold(alphas_table=beakl15)>>

#define MIRYOKU_ALTERNATIVES_BASE_COLEMAK \
<<table-layer-taphold(alphas_table=colemak)>>

#define MIRYOKU_ALTERNATIVES_BASE_COLEMAKDH \
<<table-layer-taphold(alphas_table=colemakdh)>>

#define MIRYOKU_ALTERNATIVES_BASE_COLEMAKDHK \
<<table-layer-taphold(alphas_table=colemakdhk)>>

#define MIRYOKU_ALTERNATIVES_BASE_DVORAK \
<<table-layer-taphold(alphas_table=dvorak)>>

#define MIRYOKU_ALTERNATIVES_BASE_HALMAK \
<<table-layer-taphold(alphas_table=halmak)>>

#define MIRYOKU_ALTERNATIVES_BASE_WORKMAN \
<<table-layer-taphold(alphas_table=workman)>>

#define MIRYOKU_ALTERNATIVES_BASE_QWERTY \
<<table-layer-taphold(alphas_table=qwerty)>>

#define MIRYOKU_ALTERNATIVES_BASE_QWERTZ \
<<table-layer-taphold(alphas_table=qwertz)>>


#define MIRYOKU_ALTERNATIVES_NAV_INVERTEDT_FLIP \
<<table-layer-half(half_table=nav-l-invertedt, mode="l", hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_NAV_FLIP \
<<table-layer-half(half_table=nav-l, mode="l", hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_NAV_INVERTEDT \
<<table-layer-half(half_table=nav-r-invertedt, mode="r")>>

#define MIRYOKU_ALTERNATIVES_NAV_VI \
<<table-layer-half(half_table=nav-r-vi, mode="r")>>

#define MIRYOKU_ALTERNATIVES_NAV \
<<table-layer-half(half_table=nav-r, mode="r")>>


#define MIRYOKU_ALTERNATIVES_MOUSE_INVERTEDT_FLIP \
<<table-layer-half(half_table=mouse-l-invertedt, mode="l", hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_MOUSE_FLIP \
<<table-layer-half(half_table=mouse-l, mode="l", hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_MOUSE_INVERTEDT \
<<table-layer-half(half_table=mouse-r-invertedt, mode="r")>>

#define MIRYOKU_ALTERNATIVES_MOUSE_VI \
<<table-layer-half(half_table=mouse-r-vi, mode="r")>>

#define MIRYOKU_ALTERNATIVES_MOUSE \
<<table-layer-half(half_table=mouse-r, mode="r")>>


#define MIRYOKU_ALTERNATIVES_MEDIA_INVERTEDT_FLIP \
<<table-layer-half(half_table=media-l-invertedt, mode="l", hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_MEDIA_FLIP \
<<table-layer-half(half_table=media-l, mode="l", hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_MEDIA_INVERTEDT \
<<table-layer-half(half_table=media-r-invertedt, mode="r")>>

#define MIRYOKU_ALTERNATIVES_MEDIA_VI \
<<table-layer-half(half_table=media-r-vi, mode="r")>>

#define MIRYOKU_ALTERNATIVES_MEDIA \
<<table-layer-half(half_table=media-r, mode="r")>>


#define MIRYOKU_ALTERNATIVES_NUM_FLIP \
<<table-layer-half(half_table=num-r, mode="r", hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_NUM \
<<table-layer-half(half_table=num-l, mode="l")>>


#define MIRYOKU_ALTERNATIVES_SYM_FLIP \
<<table-layer-half(half_table=sym-r, mode="r", hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_SYM \
<<table-layer-half(half_table=sym-l, mode="l")>>


#define MIRYOKU_ALTERNATIVES_FUN_FLIP \
<<table-layer-half(half_table=fun-r, mode="r", hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_FUN \
<<table-layer-half(half_table=fun-l, mode="l")>>


#define MIRYOKU_ALTERNATIVES_BUTTON \
<<table-layer-full(table=button)>>
// Copyright 2021 Manna Harbour
// https://github.com/manna-harbour/miryoku
// generated -*- buffer-read-only: t -*-

<<layer-body>>

Miryoku KMonad

// Copyright 2021 Manna Harbour
// https://github.com/manna-harbour/miryoku
// generated -*- buffer-read-only: t -*-
<<table-layer-init(target="kmonad")>>

#pragma once

#define MIRYOKU_ALTERNATIVES_BASE_AZERTY_FLIP \
<<table-layer-taphold(alphas_table=azerty, thumbs_table=thumbs-flip, hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_BASE_BEAKL15_FLIP \
<<table-layer-taphold(alphas_table=beakl15, thumbs_table=thumbs-flip, hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_BASE_COLEMAK_FLIP \
<<table-layer-taphold(alphas_table=colemak, thumbs_table=thumbs-flip, hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_BASE_COLEMAKDH_FLIP \
<<table-layer-taphold(alphas_table=colemakdh, thumbs_table=thumbs-flip, hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_BASE_COLEMAKDHK_FLIP \
<<table-layer-taphold(alphas_table=colemakdhk, thumbs_table=thumbs-flip, hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_BASE_DVORAK_FLIP \
<<table-layer-taphold(alphas_table=dvorak, thumbs_table=thumbs-flip, hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_BASE_HALMAK_FLIP \
<<table-layer-taphold(alphas_table=halmak, thumbs_table=thumbs-flip, hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_BASE_WORKMAN_FLIP \
<<table-layer-taphold(alphas_table=workman, thumbs_table=thumbs-flip, hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_BASE_QWERTY_FLIP \
<<table-layer-taphold(alphas_table=qwerty, thumbs_table=thumbs-flip, hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_BASE_QWERTZ_FLIP \
<<table-layer-taphold(alphas_table=qwertz, thumbs_table=thumbs-flip, hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_BASE_AZERTY \
<<table-layer-taphold(alphas_table=azerty)>>

#define MIRYOKU_ALTERNATIVES_BASE_BEAKL15 \
<<table-layer-taphold(alphas_table=beakl15)>>

#define MIRYOKU_ALTERNATIVES_BASE_COLEMAK \
<<table-layer-taphold(alphas_table=colemak)>>

#define MIRYOKU_ALTERNATIVES_BASE_COLEMAKDH \
<<table-layer-taphold(alphas_table=colemakdh)>>

#define MIRYOKU_ALTERNATIVES_BASE_COLEMAKDHK \
<<table-layer-taphold(alphas_table=colemakdhk)>>

#define MIRYOKU_ALTERNATIVES_BASE_DVORAK \
<<table-layer-taphold(alphas_table=dvorak)>>

#define MIRYOKU_ALTERNATIVES_BASE_HALMAK \
<<table-layer-taphold(alphas_table=halmak)>>

#define MIRYOKU_ALTERNATIVES_BASE_WORKMAN \
<<table-layer-taphold(alphas_table=workman)>>

#define MIRYOKU_ALTERNATIVES_BASE_QWERTY \
<<table-layer-taphold(alphas_table=qwerty)>>

#define MIRYOKU_ALTERNATIVES_BASE_QWERTZ \
<<table-layer-taphold(alphas_table=qwertz)>>


#define MIRYOKU_ALTERNATIVES_NAV_INVERTEDT_FLIP \
<<table-layer-half(half_table=nav-l-invertedt, mode="l", hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_NAV_FLIP \
<<table-layer-half(half_table=nav-l, mode="l", hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_NAV_INVERTEDT \
<<table-layer-half(half_table=nav-r-invertedt, mode="r")>>

#define MIRYOKU_ALTERNATIVES_NAV_VI \
<<table-layer-half(half_table=nav-r-vi, mode="r")>>

#define MIRYOKU_ALTERNATIVES_NAV \
<<table-layer-half(half_table=nav-r, mode="r")>>


#define MIRYOKU_ALTERNATIVES_MOUSE_INVERTEDT_FLIP \
<<table-layer-half(half_table=mouse-l-invertedt, mode="l", hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_MOUSE_FLIP \
<<table-layer-half(half_table=mouse-l, mode="l", hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_MOUSE_INVERTEDT \
<<table-layer-half(half_table=mouse-r-invertedt, mode="r")>>

#define MIRYOKU_ALTERNATIVES_MOUSE_VI \
<<table-layer-half(half_table=mouse-r-vi, mode="r")>>

#define MIRYOKU_ALTERNATIVES_MOUSE \
<<table-layer-half(half_table=mouse-r, mode="r")>>


#define MIRYOKU_ALTERNATIVES_MEDIA_INVERTEDT_FLIP \
<<table-layer-half(half_table=media-l-invertedt, mode="l", hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_MEDIA_FLIP \
<<table-layer-half(half_table=media-l, mode="l", hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_MEDIA_INVERTEDT \
<<table-layer-half(half_table=media-r-invertedt, mode="r")>>

#define MIRYOKU_ALTERNATIVES_MEDIA_VI \
<<table-layer-half(half_table=media-r-vi, mode="r")>>

#define MIRYOKU_ALTERNATIVES_MEDIA \
<<table-layer-half(half_table=media-r, mode="r")>>


#define MIRYOKU_ALTERNATIVES_NUM_FLIP \
<<table-layer-half(half_table=num-r, mode="r", hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_NUM \
<<table-layer-half(half_table=num-l, mode="l")>>


#define MIRYOKU_ALTERNATIVES_SYM_FLIP \
<<table-layer-half(half_table=sym-r, mode="r", hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_SYM \
<<table-layer-half(half_table=sym-l, mode="l")>>


#define MIRYOKU_ALTERNATIVES_FUN_FLIP \
<<table-layer-half(half_table=fun-r, mode="r", hold_table=hold-flip)>>

#define MIRYOKU_ALTERNATIVES_FUN \
<<table-layer-half(half_table=fun-l, mode="l")>>


#define MIRYOKU_ALTERNATIVES_BUTTON \
<<table-layer-full(table=button)>>
// Copyright 2021 Manna Harbour
// https://github.com/manna-harbour/miryoku
// generated -*- buffer-read-only: t -*-

<<layer-body>>

https://raw.githubusercontent.com/manna-harbour/miryoku/master/data/logos/manna-harbour-boa-32.png