diff --git a/.config/kanata/README.md b/.config/kanata/README.md
new file mode 100644
index 0000000..72c587d
--- /dev/null
+++ b/.config/kanata/README.md
@@ -0,0 +1,186 @@
+Arsenik Kanata
+================================================================================
+
+Installation
+--------------------------------------------------------------------------------
+
+- To get Arsenik, check out this repository with Git or
+[download it][Download Arsenik].
+- Launch `kanata.kbd` with Kanata.
+ - You can install Kanata by downloading a
+ [pre-built executable][Download Kanata].
+ - Follow the installation details of your operating system.
+
+
+Windows
+
+Windows users might prefer to download the `kanata_winIOv2.exe` version as it
+fixes some weird bugs like C and V inversion.
+
+*Note: This tip has been tested for version 1.6.1 of Kanata. In later versions the
+`winIOv2` version might be the default.*
+
+Put the `kanata_winIOv2.exe` in the Kanata Arsenik folder, run it and you’re
+good to go!
+
+
+
+Linux
+
+### Run Kanata without sudo
+
+kanata needs to intercept `uinput` signals, which it cannot do without the
+proper authorisations.
+
+If you don’t want to run `kanata` with `sudo`, you’ll need to allow Kanata to
+read from `uinput`. This requires the users to be part of both `input` and
+`uinput` groups.
+
+For that, you first need to create a `uinput` group if it doesn’t exist yet:
+
+```bash
+sudo groupadd -U $USERNAME uinput
+```
+
+where `$USERNAME` is the target user (or users in a comma-separated list). Then
+add the target user (or users) to the group input:
+
+```bash
+sudo usermod -aG input $USERNAME
+```
+
+You can check after re-logging that both groups appear in the result of the
+`groups` command launched as the target user.
+
+Finally, you need to add a udev rule in `/etc/udev/rules.d/50-kanata.rules`:
+
+```udev
+KERNEL=="uinput", MODE="0660", GROUP="uinput", OPTIONS+="static_node=uinput"
+```
+
+### Making a user-side systemd service for Kanata
+
+Note: This only works if `kanata` is able to run without `sudo` (and is using
+`systemd`).
+
+Using a `systemd service` allows running `kanata` as a daemon, possibly right
+after logging in. Here is a template for a service file:
+
+```
+[Unit]
+Description=Kanata keyboard remapper
+Documentation=https://github.com/jtroo/kanata
+
+[Service]
+Environment=PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/bin
+Environment=DISPLAY=:0
+Environment=HOME=/path/to/home/folder
+Type=simple
+ExecStart=/usr/local/bin/kanata --cfg /path/to/kanata/config/file
+Restart=no
+
+[Install]
+WantedBy=default.target
+```
+
+Copy-paste it into `~/.config/systemd/user/kanata.service`, fill in the
+placeholders, then run one of the following commands:
+
+- `systemctl --user start kanata.service` to manually start `kanata`
+- `systemctl --user enable kanata.service` so `kanata` may autostart whenever
+the current user logs in
+- `systemctl --user status kanata.service` to check if `kanata` is running
+
+
+
+
+ macOS
+
+### Karabiner DriverKit installation
+
+Install the [Karabiner-DriverKit-VirtualHIDDevice](https://github.com/pqrs-org/Karabiner-DriverKit-VirtualHIDDevice/releases/tag/v4.3.0). Latest version (v5.0.0) is not working with Kanata.
+
+To activate it:
+
+```
+/Applications/.Karabiner-VirtualHIDDevice-Manager.app/Contents/MacOS/Karabiner-VirtualHIDDevice-Manager activate
+```
+
+You may have to allow Kanata execution in the Privacy & Security panel from macOS settings.
+
+As root, add the following content in `/Library/LaunchDaemons/org.pqrs.service.daemon.Karabiner-VirtualHIDDevice-Daemon.plist` file:
+
+```
+
+
+
+
+ Label
+ org.pqrs.service.daemon.Karabiner-VirtualHIDDevice-Daemon
+ KeepAlive
+
+ ProcessType
+ Interactive
+ ProgramArguments
+
+ /Library/Application Support/org.pqrs/Karabiner-DriverKit-VirtualHIDDevice/Applications/Karabiner-VirtualHIDDevice-Daemon.app/Contents/MacOS/Karabiner-VirtualHIDDevice-Daemon
+
+
+
+```
+
+A new item *Fumihiko Takayama* will be added in System Settings > Login Items.
+
+Two Karabiner processes should be started:
+
+```
+sh-3.2# ps aux | grep -i karabiner | grep -v grep
+_driverkit 26050 0.0 0.0 410598064 2256 ?? Ss 8:02PM 0:00.04 /Library/SystemExtensions/.../org.pqrs.Karabiner-DriverKit-VirtualHIDDevice.dext/org.pqrs.Karabiner-DriverKit-VirtualHIDDevice org.pqrs.Karabiner-DriverKit-VirtualHIDDevice 0x10002b929 org.pqrs.Karabiner-DriverKit-VirtualHIDDevice
+root 25744 0.0 0.1 410756464 9872 ?? Ss 8:01PM 0:00.16 /Library/Application Support/org.pqrs/Karabiner-DriverKit-VirtualHIDDevice/Applications/Karabiner-VirtualHIDDevice-Daemon.app/Contents/MacOS/Karabiner-VirtualHIDDevice-Daemon
+```
+
+### Kanata installation
+
+Download Kanata [here](https://github.com/jtroo/kanata/releases/tag/v1.7.0) and save it in a persistent directory.
+
+Add a sudo rule in `/private/etc/sudoers.d/kanata` where `$USERNAME` is your username:
+
+```
+$USERNAME ALL=(ALL) NOPASSWD: /path/to/kanata/binary/kanata
+```
+
+To start Kanata at the beginning of the session, add a property list file in `~/Library/LaunchAgents/com.jtroo.kanata.plist` with the following content:
+
+```
+
+
+
+
+ Label
+ com.jtroo.kanata
+
+ ProgramArguments
+
+ sudo
+ /path/to/kanata/binary/kanata
+ --cfg
+ /path/to/kanata/config/file
+ -n
+
+
+ RunAtLoad
+
+
+ KeepAlive
+
+
+
+```
+
+In system settings, search Login Items menu and select `sudo` service in *Allow in the Background* list.
+You can restart Kanata with new configuration by disabling and enabling this service.
+
+
+
+[Download Arsenik]: https://github.com/OneDeadKey/arsenik/releases
+[Download Kanata]: https://github.com/jtroo/kanata/releases
diff --git a/.config/kanata/defalias/azerty_pc.kbd b/.config/kanata/defalias/azerty_pc.kbd
new file mode 100644
index 0000000..4f663b7
--- /dev/null
+++ b/.config/kanata/defalias/azerty_pc.kbd
@@ -0,0 +1,88 @@
+;; Azerty Windows/Linux aliases
+;; Works with AZERTY-fr. Needs a couple tweaks for the Belgian and Mac variants.
+
+;; Navigation layer
+(defalias
+
+ all C-q
+ sav C-s
+ cls C-z
+ ndo C-w
+ cut C-x
+ cpy C-c
+ pst C-v
+
+ 0 S-0
+ 1 S-1
+ 2 S-2
+ 3 S-3
+ 4 S-4
+ 5 S-5
+ 6 S-6
+ 7 S-7
+ 8 S-8
+ 9 S-9
+ , m
+ . S-,
+)
+
+;; Symbols layer
+(defalias
+
+ ^ (macro [ spc)
+ < <
+ > S-<
+ $ ]
+ % S-'
+ @ AG-0
+ & 1
+ * \
+ ' 4
+ ` (macro AG-7 spc)
+
+ { AG-4
+ pl 5
+ pr -
+ } AG-=
+ = =
+ \ AG-8
+ + S-=
+ - 6
+ / S-.
+ '' 3
+
+ ~ (macro AG-2 spc)
+ [ AG-5
+ ] AG--
+ _ 8
+ # AG-3
+ | AG-6
+ ! /
+ ; ,
+ : .
+ ? S-m
+)
+
+;; NumRow layer
+(defalias
+
+ s0 0
+ s1 1
+ s2 2
+ s3 3
+ s4 4
+ s5 5
+ s6 6
+ s7 7
+ s8 8
+ s9 9
+ nbs (unicode ) ;; narrow non-break space
+
+ dk1 XX
+ dk2 XX
+ dk3 XX
+ dk4 XX
+ dk5 XX
+)
+
+;; vim: set ft=lisp:
diff --git a/.config/kanata/defalias/bepo_pc.kbd b/.config/kanata/defalias/bepo_pc.kbd
new file mode 100644
index 0000000..beaf193
--- /dev/null
+++ b/.config/kanata/defalias/bepo_pc.kbd
@@ -0,0 +1,87 @@
+;; Bépo Windows/Linux aliases
+
+;; Navigation layer
+(defalias
+
+ all C-a
+ sav C-k
+ cls C-]
+ ndo C-[
+ cut C-c
+ cpy C-h
+ pst C-u
+
+ 0 S-0
+ 1 S-1
+ 2 S-2
+ 3 S-3
+ 4 S-4
+ 5 S-5
+ 6 S-6
+ 7 S-7
+ 8 S-8
+ 9 S-9
+ , g
+ . v
+)
+
+;; Symbols layer
+(defalias
+
+ ^ AG-6
+ < AG-2
+ > AG-3
+ $ `
+ % =
+ @ 6
+ & AG-e
+ * 0
+ ' AG-g
+ ` S-=
+
+ { AG-x
+ pl 4
+ pr 5
+ } AG-c
+ = -
+ \ AG-z
+ + 7
+ - 8
+ / AG-<
+ '' 1
+
+ ~ AG-b
+ [ AG-4
+ ] AG-5
+ _ AG-spc
+ # S-`
+ | AG-q
+ ! S-y
+ ; S-g
+ : S-v
+ ? S-n
+)
+
+;; NumRow layer
+(defalias
+
+ s0 0
+ s1 1
+ s2 2
+ s3 3
+ s4 4
+ s5 5
+ s6 6
+ s7 7
+ s8 8
+ s9 9
+ nbs S-spc ;; narrow no-break space
+
+ dk1 XX
+ dk2 XX
+ dk3 XX
+ dk4 XX
+ dk5 XX
+)
+
+;; vim: set ft=lisp:
diff --git a/.config/kanata/defalias/ergol_pc.kbd b/.config/kanata/defalias/ergol_pc.kbd
new file mode 100644
index 0000000..e08307d
--- /dev/null
+++ b/.config/kanata/defalias/ergol_pc.kbd
@@ -0,0 +1,89 @@
+;; Ergo‑L Windows/Linux aliases
+
+;; Navigation layer
+(defalias
+
+ all C-a
+ sav C-s
+ cls C-t
+ ndo C-z
+ cut C-x
+ cpy C-w
+ pst C-v
+
+ 0 0
+ 1 1
+ 2 2
+ 3 3
+ 4 4
+ 5 5
+ 6 6
+ 7 7
+ 8 8
+ 9 9
+ , .
+ . n
+)
+
+;; Symbols layer
+(defalias
+
+ ^ AG-q
+ < AG-w
+ > AG-e
+ $ AG-r
+ % AG-t
+ @ AG-y
+ & AG-u
+ * AG-i
+ ' AG-o
+ ` AG-p
+
+ { AG-a
+ pl AG-s
+ pr 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
+ | AG-n
+ ! AG-m
+ ; AG-,
+ : AG-.
+ ? AG-/
+)
+
+;; NumRow layer
+(defalias
+
+ s0 S-0
+ s1 S-1
+ s2 S-2
+ s3 S-3
+ s4 S-4
+ s5 S-5
+ s6 S-6
+ s7 S-7
+ s8 S-8
+ s9 S-9
+ nbs S-spc ;; narrow no-break space
+
+ 1dk o
+ ;; digits must be escaped, otherwise they’re interpreted as delays in ms
+ dk1 (macro @1dk @1)
+ dk2 (macro @1dk @2)
+ dk3 (macro @1dk @3)
+ dk4 (macro @1dk @4)
+ dk5 (macro @1dk @5)
+)
+
+;; vim: set ft=lisp:
diff --git a/.config/kanata/defalias/optimot_pc.kbd b/.config/kanata/defalias/optimot_pc.kbd
new file mode 100644
index 0000000..6e04c1b
--- /dev/null
+++ b/.config/kanata/defalias/optimot_pc.kbd
@@ -0,0 +1,87 @@
+;; Optimot Windows/Linux aliases
+
+;; Navigation layer
+(defalias
+
+ all C-a
+ sav C-k
+ cls C-v
+ ndo C-]
+ cut C-[
+ cpy C-m
+ pst C-/
+
+ 0 S-0
+ 1 S-1
+ 2 S-2
+ 3 S-3
+ 4 S-4
+ 5 S-5
+ 6 S-6
+ 7 S-7
+ 8 S-8
+ 9 S-9
+ , g
+ . c
+)
+
+;; Symbols layer
+(defalias
+
+ ^ (macro ' spc)
+ < AG-q
+ > AG-w
+ $ `
+ % S-=
+ @ -
+ & AG-j
+ * 6
+ ' o
+ ` AG-h
+
+ { AG-u
+ pl 9
+ pr 0
+ } AG-i
+ = 8
+ \ AG-7
+ + 5
+ - 4
+ / 7
+ '' 3
+
+ ~ (macro AG-; spc)
+ [ AG-9
+ ] AG-0
+ _ S--
+ # =
+ | AG-[
+ ! S-'
+ ; S-g
+ : S-c
+ ? S-o
+)
+
+;; NumRow layer
+(defalias
+
+ s0 0
+ s1 1
+ s2 2
+ s3 3
+ s4 4
+ s5 5
+ s6 6
+ s7 7
+ s8 8
+ s9 9
+ nbs S-spc ;; narrow no-break space
+
+ dk1 XX
+ dk2 XX
+ dk3 XX
+ dk4 XX
+ dk5 XX
+)
+
+;; vim: set ft=lisp:
diff --git a/.config/kanata/defalias/qwerty-lafayette_pc.kbd b/.config/kanata/defalias/qwerty-lafayette_pc.kbd
new file mode 100644
index 0000000..dfd470f
--- /dev/null
+++ b/.config/kanata/defalias/qwerty-lafayette_pc.kbd
@@ -0,0 +1,89 @@
+;; Qwerty‑Lafayette Windows/Linux aliases
+
+;; Navigation layer
+(defalias
+
+ all C-a
+ sav C-s
+ cls C-w
+ ndo C-z
+ cut C-x
+ cpy C-c
+ pst C-v
+
+ 0 0
+ 1 1
+ 2 2
+ 3 3
+ 4 4
+ 5 5
+ 6 6
+ 7 7
+ 8 8
+ 9 9
+ , ,
+ . .
+)
+
+;; Symbols layer
+(defalias
+
+ ^ AG-q
+ < AG-w
+ > AG-e
+ $ AG-r
+ % AG-t
+ @ AG-y
+ & AG-u
+ * AG-i
+ ' AG-o
+ ` AG-p
+
+ { AG-a
+ pl AG-s
+ pr 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
+ | AG-n
+ ! AG-m
+ ; AG-,
+ : AG-.
+ ? AG-/
+)
+
+;; NumRow layer
+(defalias
+
+ s0 S-0
+ s1 S-1
+ s2 S-2
+ s3 S-3
+ s4 S-4
+ s5 S-5
+ s6 S-6
+ s7 S-7
+ s8 S-8
+ s9 S-9
+ nbs S-spc ;; narrow no-break space
+
+ 1dk ;
+ ;; digits must be escaped, otherwise they’re interpreted as delays in ms
+ dk1 (macro @1dk @1)
+ dk2 (macro @1dk @2)
+ dk3 (macro @1dk @3)
+ dk4 (macro @1dk @4)
+ dk5 (macro @1dk @5)
+)
+
+;; vim: set ft=lisp:
diff --git a/.config/kanata/defalias/qwerty_mac.kbd b/.config/kanata/defalias/qwerty_mac.kbd
new file mode 100644
index 0000000..e9d3972
--- /dev/null
+++ b/.config/kanata/defalias/qwerty_mac.kbd
@@ -0,0 +1,87 @@
+;; Qwerty/Colemak macOS aliases
+
+;; Navigation layer
+(defalias
+
+ all M-a
+ sav M-s
+ cls M-w
+ ndo M-z
+ cut M-x
+ cpy M-c
+ pst M-v
+
+ 0 0
+ 1 1
+ 2 2
+ 3 3
+ 4 4
+ 5 5
+ 6 6
+ 7 7
+ 8 8
+ 9 9
+ , ,
+ . .
+)
+
+;; Symbols layer
+(defalias
+
+ ^ S-6
+ < S-,
+ > S-.
+ $ S-4
+ % S-5
+ @ S-2
+ & S-7
+ * S-8
+ ' '
+ ` `
+
+ { S-[
+ pl S-9
+ pr S-0
+ } S-]
+ = =
+ \ \
+ + S-=
+ - -
+ / /
+ '' S-'
+
+ ~ S-`
+ [ [
+ ] ]
+ _ S--
+ # S-3
+ | S-\
+ ! S-1
+ ; ;
+ : S-;
+ ? S-/
+)
+
+;; NumRow layer
+(defalias
+
+ s0 S-0
+ s1 S-1
+ s2 S-2
+ s3 S-3
+ s4 S-4
+ s5 S-5
+ s6 S-6
+ s7 S-7
+ s8 S-8
+ s9 S-9
+ nbs spc ;; no narrow no-break space in Qwerty
+
+ dk1 XX
+ dk2 XX
+ dk3 XX
+ dk4 XX
+ dk5 XX
+)
+
+;; vim: set ft=lisp:
diff --git a/.config/kanata/defalias/qwerty_pc.kbd b/.config/kanata/defalias/qwerty_pc.kbd
new file mode 100644
index 0000000..75bf33b
--- /dev/null
+++ b/.config/kanata/defalias/qwerty_pc.kbd
@@ -0,0 +1,88 @@
+;; Qwerty/Colemak Windows/Linux aliases
+;; Works with QWERTY-US, Colemak and others.
+
+;; Navigation layer
+(defalias
+
+ all C-a
+ sav C-s
+ cls C-w
+ ndo C-z
+ cut C-x
+ cpy C-c
+ pst C-v
+
+ 0 0
+ 1 1
+ 2 2
+ 3 3
+ 4 4
+ 5 5
+ 6 6
+ 7 7
+ 8 8
+ 9 9
+ , ,
+ . .
+)
+
+;; Symbols layer
+(defalias
+
+ ^ S-6
+ < S-,
+ > S-.
+ $ S-4
+ % S-5
+ @ S-2
+ & S-7
+ * S-8
+ ' '
+ ` `
+
+ { S-[
+ pl S-9
+ pr S-0
+ } S-]
+ = =
+ \ \
+ + S-=
+ - -
+ / /
+ '' S-'
+
+ ~ S-`
+ [ [
+ ] ]
+ _ S--
+ # S-3
+ | S-\
+ ! S-1
+ ; ;
+ : S-;
+ ? S-/
+)
+
+;; NumRow layer
+(defalias
+
+ s0 S-0
+ s1 S-1
+ s2 S-2
+ s3 S-3
+ s4 S-4
+ s5 S-5
+ s6 S-6
+ s7 S-7
+ s8 S-8
+ s9 S-9
+ nbs spc ;; no narrow no-break space in Qwerty
+
+ dk1 XX
+ dk2 XX
+ dk3 XX
+ dk4 XX
+ dk5 XX
+)
+
+;; vim: set ft=lisp:
diff --git a/.config/kanata/defalias/qwertz_pc.kbd b/.config/kanata/defalias/qwertz_pc.kbd
new file mode 100644
index 0000000..1a2be2d
--- /dev/null
+++ b/.config/kanata/defalias/qwertz_pc.kbd
@@ -0,0 +1,88 @@
+;; Qwertz Windows/Linux aliases
+;; Works with QWERTZ-de. Needs a couple tweaks for other QWERTZ variants.
+
+;; Navigation layer
+(defalias
+
+ all C-a
+ sav C-s
+ cls C-w
+ ndo C-y
+ cut C-x
+ cpy C-c
+ pst C-v
+
+ 0 0
+ 1 1
+ 2 2
+ 3 3
+ 4 4
+ 5 5
+ 6 6
+ 7 7
+ 8 8
+ 9 9
+ , ,
+ . .
+)
+
+;; Symbols layer
+(defalias
+
+ ^ (macro grv spc)
+ < <
+ > S-<
+ $ S-4
+ % S-5
+ @ AG-q
+ & 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-<
+ ! S-1
+ ; S-,
+ : S-.
+ ? S--
+)
+
+;; NumRow layer
+(defalias
+
+ s0 S-0
+ s1 S-1
+ s2 S-2
+ s3 S-3
+ s4 S-4
+ s5 S-5
+ s6 S-6
+ s7 S-7
+ s8 S-8
+ s9 S-9
+ nbs spc ;; no narrow no-break space in Qwerty
+
+ dk1 XX
+ dk2 XX
+ dk3 XX
+ dk4 XX
+ dk5 XX
+)
+
+;; vim: set ft=lisp:
diff --git a/.config/kanata/deflayer/base.kbd b/.config/kanata/deflayer/base.kbd
new file mode 100644
index 0000000..43af644
--- /dev/null
+++ b/.config/kanata/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 < n m , . /
+ _ _ _
+)
+
+;; vim: set ft=lisp:
diff --git a/.config/kanata/deflayer/base_lt.kbd b/.config/kanata/deflayer/base_lt.kbd
new file mode 100644
index 0000000..f7e0664
--- /dev/null
+++ b/.config/kanata/deflayer/base_lt.kbd
@@ -0,0 +1,23 @@
+;; 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 < n m , . /
+ @alt @nav @sym
+)
+
+;; Timing variables are defined in `kanata.kbd` file.
+
+(defalias
+ ;; Main mod-tap: Nav layer when held, Space when tapped.
+ nav (tap-hold $tap_timeout $long_hold_timeout spc (layer-while-held navigation))
+
+ ;; Space-cadet thumb keys: Alt/BackSpace, AltGr/Enter.
+ ;; Acts as a modifier by default, or as BackSpace/Enter when tapped separately.
+ alt (tap-hold-press $tap_timeout $hold_timeout bspc _)
+ sym (tap-hold-press $tap_timeout $hold_timeout ret (layer-while-held symbols))
+)
+
+;; vim: set ft=lisp:
diff --git a/.config/kanata/deflayer/base_lt_hrm.kbd b/.config/kanata/deflayer/base_lt_hrm.kbd
new file mode 100644
index 0000000..c66b12a
--- /dev/null
+++ b/.config/kanata/deflayer/base_lt_hrm.kbd
@@ -0,0 +1,31 @@
+;; 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 < n m , . /
+ @sft @nav @sym
+)
+
+;; Timing variables are defined in `kanata.kbd` file.
+
+(defalias
+ ;; Main mod-tap: Nav layer when held, Space when tapped.
+ nav (tap-hold $tap_timeout $long_hold_timeout spc (layer-while-held navigation))
+
+ ;; Space-cadet thumb keys: Shift/BackSpace, AltGr/Enter.
+ ;; Acts as a modifier by default, or as BackSpace/Enter when tapped separately.
+ sft (tap-hold-press $tap_timeout $hold_timeout bspc lsft)
+ sym (tap-hold-press $tap_timeout $hold_timeout ret (layer-while-held symbols))
+
+ ;; Home-row mods
+ ss (tap-hold $tap_timeout $long_hold_timeout s lmet)
+ dd (tap-hold $tap_timeout $long_hold_timeout d lctl)
+ ff (tap-hold $tap_timeout $long_hold_timeout f lalt)
+ jj (tap-hold $tap_timeout $long_hold_timeout j lalt)
+ kk (tap-hold $tap_timeout $long_hold_timeout k rctl)
+ ll (tap-hold $tap_timeout $long_hold_timeout l rmet)
+)
+
+;; vim: set ft=lisp:
diff --git a/.config/kanata/deflayer/navigation.kbd b/.config/kanata/deflayer/navigation.kbd
new file mode 100644
index 0000000..ea7e0b5
--- /dev/null
+++ b/.config/kanata/deflayer/navigation.kbd
@@ -0,0 +1,17 @@
+;; Num-Navigation layer:
+;; - should inherit from NumPad
+;; - 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 @/ @7 @8 @9 @run
+ @all lft down rght pgdn @- @4 @5 @6 @0
+ @ndo @cut @cpy @pst S-tab _ @, @1 @2 @3 @.
+ del _ esc
+)
+
+;; vim: set ft=lisp:
diff --git a/.config/kanata/deflayer/navigation_vim.kbd b/.config/kanata/deflayer/navigation_vim.kbd
new file mode 100644
index 0000000..967c594
--- /dev/null
+++ b/.config/kanata/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 _ esc
+)
+
+;; NumPad
+(deflayer numpad
+ _ _ _ _ _ _ _ _ _ _ _
+ XX home up end pgup @/ @7 @8 @9 XX
+ XX lft down rght pgdn @- @4 @5 @6 @0
+ XX XX XX XX XX _ @, @1 @2 @3 @.
+ @std @nbs @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 lalt lctl 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:
diff --git a/.config/kanata/deflayer/symbols_lafayette.kbd b/.config/kanata/deflayer/symbols_lafayette.kbd
new file mode 100644
index 0000000..fc09216
--- /dev/null
+++ b/.config/kanata/deflayer/symbols_lafayette.kbd
@@ -0,0 +1,14 @@
+;; Symbol layer: Lafayette/Ergo‑L AltGr programmation layer for the masses!
+
+(deflayer symbols
+ AG-1 AG-2 AG-3 AG-4 AG-5 XX AG-6 AG-7 AG-8 AG-9 AG-0
+ @^ @< @> @$ @% @@ @& @* @' @`
+ @{ @pl @pr @} @= @\ @+ @- @/ @''
+ @~ @[ @] @_ @# XX @| @! @; @: @?
+ _ spc _
+)
+
+;; 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:
diff --git a/.config/kanata/deflayer/symbols_lafayette_num.kbd b/.config/kanata/deflayer/symbols_lafayette_num.kbd
new file mode 100644
index 0000000..5bc06d3
--- /dev/null
+++ b/.config/kanata/deflayer/symbols_lafayette_num.kbd
@@ -0,0 +1,26 @@
+;; Symbol layer: Lafayette/Ergo‑L AltGr programmation layer
+;; but enables a NumRow.
+
+(deflayer symbols
+ AG-1 AG-2 AG-3 AG-4 AG-5 XX AG-6 AG-7 AG-8 AG-9 AG-0
+ @^ @< @> @$ @% @@ @& @* @' @`
+ @{ @pl @pr @} @= @\ @+ @- @/ @''
+ @~ @[ @] @_ @# XX @| @! @; @: @?
+ @num spc _
+)
+
+;; Numrow layer
+
+(deflayer numrow
+ _ _ _ _ _ _ _ _ _ _ _
+ @s1 @s2 @s3 @s4 @s5 @s6 @s7 @s8 @s9 @s0
+ @1 @2 @3 @4 @5 @6 @7 @8 @9 @0
+ @dk1 @dk2 @dk3 @dk4 @dk5 _ XX @- @, @. @/
+ _ @nbs @sym
+)
+
+(defalias
+ num (layer-toggle numrow)
+)
+
+;; vim: set ft=lisp:
diff --git a/.config/kanata/deflayer/symbols_noop.kbd b/.config/kanata/deflayer/symbols_noop.kbd
new file mode 100644
index 0000000..37cfa9e
--- /dev/null
+++ b/.config/kanata/deflayer/symbols_noop.kbd
@@ -0,0 +1,14 @@
+;; Symbol layer: same as AltGr.
+;; Concretely this does nothing, just let AltGr as-is for keyboard layouts
+;; depending heavily on AltGr, like Bépo or simply Lafayette layouts like
+;; Ergo‑L, which already have that layer baked in.
+
+(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 AG-< AG-n AG-m AG-, AG-. AG-/
+ _ AG-spc _
+)
+
+;; vim: set ft=lisp:
diff --git a/.config/kanata/deflayer/symbols_noop_num.kbd b/.config/kanata/deflayer/symbols_noop_num.kbd
new file mode 100644
index 0000000..f5a5c7f
--- /dev/null
+++ b/.config/kanata/deflayer/symbols_noop_num.kbd
@@ -0,0 +1,29 @@
+;; Symbol layer: same as AltGr but enables a NumRow.
+;; Concretely this does nothing, just let AltGr as-is for keyboard layouts
+;; depending heavily on AltGr, like Bépo or simply Lafayette layouts like
+;; Ergo‑L, which already have that layer baked in.
+;; Except it adds an NumRow layer.
+
+(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 AG-< AG-n AG-m AG-, AG-. AG-/
+ @num AG-spc _
+)
+
+;; Numrow layer
+
+(deflayer numrow
+ _ _ _ _ _ _ _ _ _ _ _
+ @s1 @s2 @s3 @s4 @s5 @s6 @s7 @s8 @s9 @s0
+ @1 @2 @3 @4 @5 @6 @7 @8 @9 @0
+ @dk1 @dk2 @dk3 @dk4 @dk5 _ XX @- @, @. @/
+ _ @nbs @sym
+)
+
+(defalias
+ num (layer-toggle numrow)
+)
+
+;; vim: set ft=lisp:
diff --git a/.config/kanata/defsrc/mac.kbd b/.config/kanata/defsrc/mac.kbd
new file mode 100644
index 0000000..e28010c
--- /dev/null
+++ b/.config/kanata/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 < n m , . /
+ lmet spc rmet
+)
+
+;; vim: set ft=lisp:
diff --git a/.config/kanata/defsrc/mac_anglemod.kbd b/.config/kanata/defsrc/mac_anglemod.kbd
new file mode 100644
index 0000000..c78ab29
--- /dev/null
+++ b/.config/kanata/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 ;
+ < z x c v b n m , . /
+ lmet spc rmet
+)
+
+;; vim: set ft=lisp:
diff --git a/.config/kanata/defsrc/mac_ansi_anglemod.kbd b/.config/kanata/defsrc/mac_ansi_anglemod.kbd
new file mode 100644
index 0000000..fe09cd9
--- /dev/null
+++ b/.config/kanata/defsrc/mac_ansi_anglemod.kbd
@@ -0,0 +1,11 @@
+;; ansi-angle-mod: left shift 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 ;
+ lsft z x c v b n m , . /
+ lmet spc rmet
+)
+
+;; vim: set ft=lisp:
diff --git a/.config/kanata/defsrc/mac_ansi_wide_anglemod.kbd b/.config/kanata/defsrc/mac_ansi_wide_anglemod.kbd
new file mode 100644
index 0000000..a4f000f
--- /dev/null
+++ b/.config/kanata/defsrc/mac_ansi_wide_anglemod.kbd
@@ -0,0 +1,14 @@
+;; wide-angle-mod:
+;; - left shift becomes Z
+;; - the right hand is moved one key to the right
+
+
+(defsrc
+ 1 2 3 4 5 bspc 7 8 9 0 -
+ q w e r t u i o p [
+ a s d f g j k l ; '
+ lsft z x c v b m , . / rsft
+ lmet spc rmet
+)
+
+;; vim: set ft=lisp:
diff --git a/.config/kanata/defsrc/mac_wide_anglemod.kbd b/.config/kanata/defsrc/mac_wide_anglemod.kbd
new file mode 100644
index 0000000..81cffcc
--- /dev/null
+++ b/.config/kanata/defsrc/mac_wide_anglemod.kbd
@@ -0,0 +1,14 @@
+;; wide-angle-mod:
+;; - the ISO key (a.k.a. LSGT or 102 key) becomes Z
+;; - the right hand is moved one key to the right
+
+
+(defsrc
+ 1 2 3 4 5 bspc 7 8 9 0 -
+ q w e r t u i o p [
+ a s d f g j k l ; '
+ < z x c v b m , . / rsft
+ lmet spc rmet
+)
+
+;; vim: set ft=lisp:
diff --git a/.config/kanata/defsrc/pc.kbd b/.config/kanata/defsrc/pc.kbd
new file mode 100644
index 0000000..df5fcfb
--- /dev/null
+++ b/.config/kanata/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 < n m , . /
+ lalt spc ralt
+)
+
+;; vim: set ft=lisp:
diff --git a/.config/kanata/defsrc/pc_anglemod.kbd b/.config/kanata/defsrc/pc_anglemod.kbd
new file mode 100644
index 0000000..c46a8d8
--- /dev/null
+++ b/.config/kanata/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 ;
+ < z x c v b n m , . /
+ lalt spc ralt
+)
+
+;; vim: set ft=lisp:
diff --git a/.config/kanata/defsrc/pc_ansi_anglemod.kbd b/.config/kanata/defsrc/pc_ansi_anglemod.kbd
new file mode 100644
index 0000000..14509b9
--- /dev/null
+++ b/.config/kanata/defsrc/pc_ansi_anglemod.kbd
@@ -0,0 +1,11 @@
+;; ansi-angle-mod: left shift 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 ;
+ lsft z x c v b n m , . /
+ lalt spc ralt
+)
+
+;; vim: set ft=lisp:
diff --git a/.config/kanata/defsrc/pc_ansi_wide_anglemod.kbd b/.config/kanata/defsrc/pc_ansi_wide_anglemod.kbd
new file mode 100644
index 0000000..21c7c31
--- /dev/null
+++ b/.config/kanata/defsrc/pc_ansi_wide_anglemod.kbd
@@ -0,0 +1,13 @@
+;; wide-angle-mod:
+;; - left shift becomes Z
+;; - the right hand is moved one key to the right
+
+(defsrc
+ 1 2 3 4 5 bspc 7 8 9 0 -
+ q w e r t u i o p [
+ a s d f g j k l ; '
+ lsft z x c v b m , . / rsft
+ lalt spc ralt
+)
+
+;; vim: set ft=lisp:
diff --git a/.config/kanata/defsrc/pc_wide_anglemod.kbd b/.config/kanata/defsrc/pc_wide_anglemod.kbd
new file mode 100644
index 0000000..a0b63a5
--- /dev/null
+++ b/.config/kanata/defsrc/pc_wide_anglemod.kbd
@@ -0,0 +1,13 @@
+;; wide-angle-mod:
+;; - the ISO key (a.k.a. LSGT or 102 key) becomes Z
+;; - the right hand is moved one key to the right
+
+(defsrc
+ 1 2 3 4 5 bspc 7 8 9 0 -
+ q w e r t u i o p [
+ a s d f g j k l ; '
+ < z x c v b m , . / rsft
+ lalt spc ralt
+)
+
+;; vim: set ft=lisp:
diff --git a/.config/kanata/kanata.kbd b/.config/kanata/kanata.kbd
new file mode 100644
index 0000000..36d0d71
--- /dev/null
+++ b/.config/kanata/kanata.kbd
@@ -0,0 +1,94 @@
+;;==========================================================================;;
+;; ;;
+;; With Arsenik, choose the features you want for your keyboard: ;;
+;; angle mods, Vim-like navigation layer, Mac/Azerty/Qwertz support, etc. ;;
+;; ;;
+;;==========================================================================;;
+
+;; Every section is mandatory and should enable one and only one `include`
+;; - enable each feature by un-commenting the related line.
+;; - a commented line starts with ;;
+
+;; Live-reload the configuration with Space+Backspace (requires layer-taps).
+
+;; Timing variables for tap-hold effects.
+(defvar
+ ;; The key must be pressed twice in 200ms to enable repetitions.
+ tap_timeout 200
+ ;; The key must be held 200ms to become a layer shift.
+ hold_timeout 200
+ ;; Slightly higher value for typing keys, to prevent unexpected hold effect.
+ long_hold_timeout 300
+)
+
+;;-----------------------------------------------------------------------------
+;; Original key arrangement on your keyboard: Mac or PC.
+;; Choose here if you want to add an angle mod: ZXCVB are shifted to the left.
+;; See https://colemakmods.github.io/ergonomic-mods/angle.html for more details.
+
+(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
+;; (include defsrc/pc_wide_anglemod.kbd) ;; PC, angle-mod + right hand shifted by one key
+;; (include defsrc/mac_wide_anglemod.kbd) ;; Mac, angle-mod + right hand shifted by one key
+
+
+;;-----------------------------------------------------------------------------
+;; `Base` layer: standard or dual keys? (layer-taps, homerow mods?)
+;; If you just want angle mod, you still have to enable the standard base.
+
+(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_noop.kbd) ;; AltGr stays as-is
+;; (include deflayer/symbols_lafayette.kbd) ;; AltGr programmation layer like Ergo‑L
+;; (include deflayer/symbols_noop_num.kbd) ;; AltGr stays as-is + NumRow layers
+;; (include deflayer/symbols_lafayette_num.kbd) ;; AltGr prog layer + NumRow layers
+
+
+;;-----------------------------------------------------------------------------
+;; `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) ;; do nothing
+
+
+;;-----------------------------------------------------------------------------
+;; Aliases for `Symbols` and `Navigation` layers
+;; Depends on PC/Mac and keyboard layout
+
+(include defalias/ergol_pc.kbd) ;; Ergo‑L PC
+;; (include defalias/qwerty-lafayette_pc.kbd) ;; Qwerty‑Lafayette PC
+;; (include defalias/qwerty_pc.kbd) ;; Qwerty / Colemak PC
+;; (include defalias/qwerty_mac.kbd) ;; Qwerty / Colemak Mac
+;; (include defalias/azerty_pc.kbd) ;; Azerty PC
+;; (include defalias/qwertz_pc.kbd) ;; Qwertz PC
+;; (include defalias/bepo_pc.kbd) ;; Bépo PC
+;; (include defalias/optimot_pc.kbd) ;; Optimot PC
+
+;;-----------------------------------------------------------------------------
+;; Extra configuration
+;; You should not modify this, only if you need to.
+
+(defcfg
+ ;; Enabled makes kanata process keys that are not defined in defsrc
+ ;; Fixes altgr for Windows (see Arsenik issue #22)
+ process-unmapped-keys yes
+ windows-altgr cancel-lctl-press
+)
+
+;; vim: set ft=lisp: