Jelajahi Sumber

Atomic mod: Arsenik, modularized (#10)

Fabien Cazenave 1 tahun lalu
induk
melakukan
e7ba3d2d4a

+ 16 - 0
mods/atomic/README.md

@@ -0,0 +1,16 @@
+An experiment to modularize Arsenik and bring more features, e.g.
+angle mods, Vim-like navigation layer, Mac/Azerty/Qwertz support, etc.
+
+- load `kanata.kbd`
+- enable each feature by un-commenting the related line
+- live-reload the configuration with Space+Backspace (requires layer-taps)
+
+Configuration options:
+
+- key arrangement: Mac or PC, with or without angle mod?
+- base layer: standard, layer-taps, homerow mods?
+- symbols layer: AltGr, QWERTY, QWERTZ, AZERTY?
+- navigation layer: ESDF or HJKL?
+
+This should work exactly like Arsenik by default, except Escape and Enter have
+been swapped.

+ 13 - 0
mods/atomic/defalias_mac.kbd

@@ -0,0 +1,13 @@
+;; macOS shortcuts
+
+(defalias
+  all M-a
+  sav M-s
+  cls M-w
+  ndo M-z
+  cut M-x
+  cpy M-c
+  pst M-v
+)
+
+;; vim: set ft=lisp

+ 13 - 0
mods/atomic/defalias_pc.kbd

@@ -0,0 +1,13 @@
+;; Windows/Linux shortcuts
+
+(defalias
+  all C-a
+  sav C-s
+  cls C-w
+  ndo C-z
+  cut C-x
+  cpy C-c
+  pst C-v
+)
+
+;; vim: set ft=lisp

+ 11 - 0
mods/atomic/deflayer_base.kbd

@@ -0,0 +1,11 @@
+;; Base layer: standard keyboard behavior
+
+(deflayer base
+  _    _    _    _    _    _    _    _    _    _    _
+  q    w    e    r    t         y    u    i    o    p
+  a    s    d    f    g         h    j    k    l    ;
+  z    x    c    v    b   102d  n    m    ,    .    /
+            _              _              _
+)
+
+;; vim: set ft=lisp

+ 25 - 0
mods/atomic/deflayer_base_lt.kbd

@@ -0,0 +1,25 @@
+;; Base layer: the 3 main thumb keys become mod/taps
+
+(deflayer base
+  _    _    _    _    _    _    _    _    _    _    _
+  q    w    e    r    t         y    u    i    o    p
+  a    s    d    f    g         h    j    k    l    ;
+  z    x    c    v    b   102d  n    m    ,    .    /
+            @sft          @nav            @sym
+)
+
+(defalias
+  ;; Main mod-tap: VimNav layer when hold, Space when tapped.
+  ;; The space key must be hold long enough (300ms) to become a layer shift.
+  nav (tap-hold 200 300 spc (layer-while-held navigation))
+
+  ;; Space-cadet thumb keys: Shift/BackSpace, AltGr/Escape
+  ;;  - acts as a modifier by default, or as BS/Esc when tapped separately;
+  ;;  - works great with Qwerty-Lafayette and Ergo-L keyboard layouts, where
+  ;;    AltGr is not used outside of the 3×10 main alpha keys.
+  alt (tap-hold-press 200 200 esc ralt)
+  sft (tap-hold-press 200 200 bspc lalt)
+  sym (tap-hold-press 200 200 esc (layer-while-held symbols))
+)
+
+;; vim: set ft=lisp

+ 34 - 0
mods/atomic/deflayer_base_lt_hrm.kbd

@@ -0,0 +1,34 @@
+;; Base layer: layer-taps under the thumbs + home-row mods on SDF and JKL
+
+(deflayer base
+  _    _    _    _    _    _    _    _    _    _    _
+  q    w    e    r    t         y    u    i    o    p
+  a    @ss  @dd  @ff  g         h    @jj  @kk  @ll  ;
+  z    x    c    v    b   102d  n    m    ,    .    /
+            @sft          @nav            @sym
+)
+
+(defalias
+  ;; Main mod-tap: VimNav layer when hold, Space when tapped.
+  ;; The space key must be hold long enough (300ms) to become a layer shift.
+  nav (tap-hold 200 300 spc (layer-while-held navigation))
+
+  ;; Space-cadet thumb keys: Shift/BackSpace, AltGr/Escape
+  ;;  - acts as a modifier by default, or as BS/Esc when tapped separately;
+  ;;  - works great with Qwerty-Lafayette and Ergo-L keyboard layouts, where
+  ;;    neither Shift nor AltGr are used outside of the 3×10 main alpha keys.
+  alt (tap-hold-press 200 200 esc ralt)
+  sft (tap-hold-press 200 200 bspc lsft)
+  sym (tap-hold-press 200 200 esc (layer-while-held symbols))
+
+  ;; Home-row mods
+  ;; Must be hold long enough (300ms) to become a modifier.
+  ss (tap-hold 200 300 s lmet)
+  dd (tap-hold 200 300 d lalt)
+  ff (tap-hold 200 300 f lctl)
+  jj (tap-hold 200 300 j rctl)
+  kk (tap-hold 200 300 k lalt)
+  ll (tap-hold 200 300 l rmet)
+)
+
+;; vim: set ft=lisp

+ 17 - 0
mods/atomic/deflayer_navigation.kbd

@@ -0,0 +1,17 @@
+;; Num-Navigation layer:
+;;  - should inherit from NumPad (but this doesn’t work for some reason)
+;;  - left: one-handed shortcuts (Cmd/Ctrl-AZXCV) + Tab/S-Tab
+;;  - top: Super-num (i3/sway) or Alt-num (browser)
+
+;; The `lrld` action stands for "live reload". This will re-parse everything
+;; except for linux-dev, i.e. you cannot live reload and switch keyboard devices.
+
+(deflayer navigation
+  M-1  M-2  M-3  M-4  M-5  lrld M-6  M-7  M-8  M-9  M-0
+  tab  home up   end  pgup      XX   7    8    9    @run
+  @all lft  down rght pgdn      -    4    5    6    0
+  @ndo @cut @cpy @pst S-tab _   ,    1    2    3    .
+            del             _             ret
+)
+
+;; vim: set ft=lisp

+ 48 - 0
mods/atomic/deflayer_navigation_vim.kbd

@@ -0,0 +1,48 @@
+;; Vim-Navigation layer:
+;;  - right: Vim-like arrows on HJKL, home/end page up/down, mouse scroll
+;;  - left: one-hand shortcuts (Cmd/Ctrl-WASZXCV), Tab/Shift-Tab, prev/next
+;;  - top: Super-num (i3/sway) or Alt-num (browser), zoom in/out
+
+;; The `lrld` action stands for "live reload". This will re-parse everything
+;; except for linux-dev, i.e. you cannot live reload and switch keyboard devices.
+
+(deflayer navigation
+  M-1  M-2  M-3  M-4  M-5  lrld M-6  M-7  M-8  M-9  M-0
+  @pad @cls bck  fwd  XX        home pgdn pgup end  @run
+  @all @sav S-tab tab XX        lft  down up   rght @fun
+  @ndo @cut @cpy @pst XX    _   @mwl @mwd @mwu @mwr XX
+            del             _             ret
+)
+
+;; NumPad
+(deflayer numpad
+  _    _    _    _    _     _   _    _    _    _    _
+  XX   home up   end  pgup      XX   7    8    9    XX
+  XX   lft  down rght pgdn      -    4    5    6    0
+  XX   XX   XX   XX   XX    _   ,    1    2    3    .
+            @std           spc            @std
+)
+
+;; function keys
+(deflayer funpad
+  XX   XX   XX   XX   XX   XX   XX   XX   XX   XX   XX
+  f1   f2   f3   f4   XX        XX   XX   XX   XX   XX
+  f5   f6   f7   f8   XX        XX   lctl lalt lmet _
+  f9   f10  f11  f12  XX   XX   XX   XX   XX   XX   XX
+            _               _             _
+)
+
+(defalias
+  std (layer-switch base)
+  pad (layer-switch numpad)
+
+  fun (layer-while-held funpad)
+
+  ;; Mouse wheel emulation
+  mwu (mwheel-up    50 120)
+  mwd (mwheel-down  50 120)
+  mwl (mwheel-left  50 120)
+  mwr (mwheel-right 50 120)
+)
+
+;; vim: set ft=lisp

+ 42 - 0
mods/atomic/deflayer_symbols_1dk.kbd

@@ -0,0 +1,42 @@
+;; Symbol layer: same as AltGr but enables a NumRow.
+;; This has been designed with Lafayette and Ergo-L in mind.
+
+(deflayer symbols
+  AG-1 AG-2 AG-3 AG-4 AG-5  XX  AG-6 AG-7 AG-8 AG-9 AG-0
+  AG-q AG-w AG-e AG-r AG-t      AG-y AG-u AG-i AG-o AG-p
+  AG-a AG-s AG-d AG-f AG-g      AG-h AG-j AG-k AG-l AG-;
+  AG-z AG-x AG-c AG-v AG-b  XX  AG-n AG-m AG-, AG-. AG-/
+            @num           spc            @sym
+)
+
+;; Numrow layer
+
+(deflayer numrow
+  _    _    _    _    _     _   _    _    _    _    _
+  S-1  S-2  S-3  S-4  S-5       S-6  S-7  S-8  S-9  S-0
+  1    2    3    4    5         6    7    8    9    0
+  @dk1 @dk2 @dk3 @dk4 @dk5  _   XX   -    ,    .    /
+            @num          S-spc           @sym
+)
+
+(defalias
+  num (layer-toggle numrow)
+
+  ;; Ergo-L/Lafayette dead-key macros
+  ;; 1dk o ;; Ergo-L
+  1dk ; ;; QWERTY-Lafayette
+  ;; digits must be escaped, otherwise they’re interpreted as delays in ms
+  ;; um1 (unmod 1) ;; raises an error, WTF?
+  1 1
+  2 2
+  3 3
+  4 4
+  5 5
+  dk1 (macro @1dk @1)
+  dk2 (macro @1dk @2)
+  dk3 (macro @1dk @3)
+  dk4 (macro @1dk @4)
+  dk5 (macro @1dk @5)
+)
+
+;; vim: set ft=lisp

+ 15 - 0
mods/atomic/deflayer_symbols_ansi.kbd

@@ -0,0 +1,15 @@
+;; Symbol layer: Lafayette/Ergo‑L AltGr layer for the masses!
+;; Works with QWERTY-US, Colemak and others.
+
+(deflayer symbols
+  _    _    _    _    _    _    _    _    _    _    _
+  S-2  S-,  S-.  S-4  S-5       S-6  S-7  S-8  '    `
+  S-[  S-9  S-0  S-]  =         \    S-=  -    /    S-'
+  S-`  [    ]    S--  S-3  XX   S-\  S-1  ;    S-;  S-/
+            _              spc            @sym
+)
+
+;; Note: this requires kanata 0.5+ to work properly.
+;; kanata 0.4 does not release Shift soon enough for this layer to work.
+
+;; vim: set ft=lisp

+ 51 - 0
mods/atomic/deflayer_symbols_azerty.kbd

@@ -0,0 +1,51 @@
+;; Symbol layer: Lafayette/Ergo‑L AltGr layer for the masses!
+;; Works with AZERTY-fr. Needs a couple tweaks for the Belgian and Mac variants.
+
+(deflayer symbols
+  _    _    _    _    _    _    _    _    _    _    _
+  @@   @<   @>   @$   @%        @^   @&   @*   @'   @`
+  @{   @pl  @pr  @}   @=        @\   @+   @-   @/   @''
+  @~   @[   @]   @_   @#   XX   @|   @!   @;   @:   @?
+            _              spc            @sym
+)
+
+;; Note: this requires kanata 0.5+ to work properly.
+;; kanata 0.4 does not release Shift soon enough for this layer to work.
+
+(defalias
+
+  @  AG-0
+  <  102d
+  >  S-102d
+  $  ]
+  %  S-'
+  ^  (macro [ spc)
+  &  1
+  *  \
+  '  4
+  `  AG-7
+
+  {  AG-4
+  pl 5
+  pr -
+  }  AG-=
+  =  =
+  \  AG-8
+  +  S-=
+  -  6
+  /  S-.
+  '' 3
+
+  ~  AG-2
+  [  AG-5
+  ]  AG--
+  _  8
+  #  AG-3
+  |  AG-6
+  !  /
+  ;  ,
+  :  .
+  ?  S-m
+)
+
+;; vim: set ft=lisp

+ 51 - 0
mods/atomic/deflayer_symbols_qwertz.kbd

@@ -0,0 +1,51 @@
+;; Symbol layer: Lafayette/Ergo‑L AltGr layer for the masses!
+;; Works with QWERTZ-de. Needs a couple tweaks for other QWERTZ variants.
+
+(deflayer symbols
+  _    _    _    _    _    _    _    _    _    _    _
+  @@   @<   @>   @$   @%        @^   @&   @*   @'   @`
+  @{   @pl  @pr  @}   @=        @\   @+   @-   @/   @''
+  @~   @[   @]   @_   @#   XX   @|   @!   @;   @:   @?
+            _              spc            @sym
+)
+
+;; Note: this requires kanata 0.5+ to work properly.
+;; kanata 0.4 does not release Shift soon enough for this layer to work.
+
+(defalias
+
+  @  AG-q
+  <  102d
+  >  S-102d
+  $  S-4
+  %  S-5
+  ^  (macro grv spc)
+  &  S-6
+  *  S-]
+  '  S-\
+  `  (macro S-= spc)
+
+  {  AG-7
+  pl S-8
+  pr S-9
+  }  AG-0
+  =  S-0
+  \  AG--
+  +  ]
+  -  /
+  /  S-7
+  '' S-2
+
+  ~  AG-]
+  [  AG-8
+  ]  AG-9
+  _  S-/
+  #  \
+  |  AG-102d
+  !  S-1
+  ;  S-,
+  :  S-.
+  ?  S--
+)
+
+;; vim: set ft=lisp

+ 11 - 0
mods/atomic/defsrc_mac.kbd

@@ -0,0 +1,11 @@
+;; `defsrc` defines the keys that will be intercepted by kanata.
+
+(defsrc
+  1    2    3    4    5  bspc   6    7    8    9    0
+  q    w    e    r    t         y    u    i    o    p
+  a    s    d    f    g         h    j    k    l    ;
+  z    x    c    v    b  102d   n    m    ,    .    /
+            lmet          spc             ralt
+)
+
+;; vim: set ft=lisp

+ 11 - 0
mods/atomic/defsrc_mac_anglemod.kbd

@@ -0,0 +1,11 @@
+;; angle-mod: the ISO key (a.k.a. LSGT or 102 key) becomes Z
+
+(defsrc
+  1    2    3    4    5  bspc   6    7    8    9    0
+  q    w    e    r    t         y    u    i    o    p
+  a    s    d    f    g         h    j    k    l    ;
+  102d z    x    c    v    b    n    m    ,    .    /
+            lmet          spc             ralt
+)
+
+;; vim: set ft=lisp

+ 11 - 0
mods/atomic/defsrc_pc.kbd

@@ -0,0 +1,11 @@
+;; `defsrc` defines the keys that will be intercepted by kanata.
+
+(defsrc
+  1    2    3    4    5  bspc   6    7    8    9    0
+  q    w    e    r    t         y    u    i    o    p
+  a    s    d    f    g         h    j    k    l    ;
+  z    x    c    v    b  102d   n    m    ,    .    /
+            lalt          spc             ralt
+)
+
+;; vim: set ft=lisp

+ 11 - 0
mods/atomic/defsrc_pc_anglemod.kbd

@@ -0,0 +1,11 @@
+;; angle-mod: the ISO key (a.k.a. LSGT or 102 key) becomes Z
+
+(defsrc
+  1    2    3    4    5  bspc   6    7    8    9    0
+  q    w    e    r    t         y    u    i    o    p
+  a    s    d    f    g         h    j    k    l    ;
+  102d z    x    c    v    b    n    m    ,    .    /
+            lalt          spc             ralt
+)
+
+;; vim: set ft=lisp

+ 59 - 0
mods/atomic/kanata.kbd

@@ -0,0 +1,59 @@
+;; An experiment to modularize Arsenik and bring more features:
+;; angle mods, Vim-like navigation layer, Mac/Azerty/Qwertz support, etc.
+
+;; Every section should enable one and only one `include`
+;; -- enable each feature by un-commenting the related line.
+
+;; Live-reload the configuration with Space+Backspace (requires layer-taps).
+
+
+;;-----------------------------------------------------------------------------
+;; Key arrangement: Mac or PC, with or without angle mod?
+
+;; (include defsrc_pc.kbd)  ;; PC, standard finger assignment
+;; (include defsrc_mac.kbd)  ;; Mac, standard finger assignment
+(include defsrc_pc_anglemod.kbd)  ;; PC, ZXCVB are shifted to the left
+;; (include defsrc_mac_anglemod.kbd)  ;; Mac, ZXCVB are shifted to the left
+
+
+;;-----------------------------------------------------------------------------
+;; `Base` layer: standard or dual keys? (layer-taps, homerow mods?)
+
+;; (include deflayer_base.kbd)  ;; standard keyboard behavior
+;; (include deflayer_base_lt.kbd)  ;; layer-taps on both thumb keys
+(include deflayer_base_lt_hrm.kbd)  ;; layer-taps + home-row mods
+
+;; Note: not enabling layer-taps here makes the rest of the file useless.
+
+
+;;-----------------------------------------------------------------------------
+;; `Symbols` layer
+
+(include deflayer_symbols_1dk.kbd)  ;; AltGr + NumRow layers
+;; (include deflayer_symbols_ansi.kbd)  ;; Symbol layer for Qwerty / Colemak
+;; (include deflayer_symbols_azerty.kbd)  ;; Symbol layer for Azerty
+;; (include deflayer_symbols_qwertz.kbd)  ;; Symbol layer for Qwertz
+
+
+;;-----------------------------------------------------------------------------
+;; `Navigation` layer: ESDF or HJKL?
+
+(include deflayer_navigation.kbd)  ;; ESDF on the left, NumPad on the right
+;; (include deflayer_navigation_vim.kbd)  ;; HJKL + NumPad on [Space]+[Q]
+
+;; Replace XX by the keyboard shortcut of your application launcher, if any.
+;; Mapped on [Space]+[P] in both navigation layers.
+
+;; (defalias run M-p)  ;; [Command]-[P]
+(defalias run XX)
+
+
+;;-----------------------------------------------------------------------------
+;; Keyboard shortcuts: macOS or Windows/Linux?
+
+(include defalias_pc.kbd)
+;; (include defalias_mac.kbd)
+
+;; TODO: add shortcut files for Dvorak layouts.
+
+;; vim: set ft=lisp