From eb999bb3eb71cd5bfa9f095c70073be44d383445 Mon Sep 17 00:00:00 2001 From: Gil Portenseigne Date: Tue, 21 Jul 2026 08:46:25 +0200 Subject: [PATCH] ajout kanata pour ergo-l --- .config/kanata/README.md | 186 ++++++++++++++++++ .config/kanata/defalias/azerty_pc.kbd | 88 +++++++++ .config/kanata/defalias/bepo_pc.kbd | 87 ++++++++ .config/kanata/defalias/ergol_pc.kbd | 89 +++++++++ .config/kanata/defalias/optimot_pc.kbd | 87 ++++++++ .../kanata/defalias/qwerty-lafayette_pc.kbd | 89 +++++++++ .config/kanata/defalias/qwerty_mac.kbd | 87 ++++++++ .config/kanata/defalias/qwerty_pc.kbd | 88 +++++++++ .config/kanata/defalias/qwertz_pc.kbd | 88 +++++++++ .config/kanata/deflayer/base.kbd | 11 ++ .config/kanata/deflayer/base_lt.kbd | 23 +++ .config/kanata/deflayer/base_lt_hrm.kbd | 31 +++ .config/kanata/deflayer/navigation.kbd | 17 ++ .config/kanata/deflayer/navigation_vim.kbd | 48 +++++ .config/kanata/deflayer/symbols_lafayette.kbd | 14 ++ .../kanata/deflayer/symbols_lafayette_num.kbd | 26 +++ .config/kanata/deflayer/symbols_noop.kbd | 14 ++ .config/kanata/deflayer/symbols_noop_num.kbd | 29 +++ .config/kanata/defsrc/mac.kbd | 11 ++ .config/kanata/defsrc/mac_anglemod.kbd | 11 ++ .config/kanata/defsrc/mac_ansi_anglemod.kbd | 11 ++ .../kanata/defsrc/mac_ansi_wide_anglemod.kbd | 14 ++ .config/kanata/defsrc/mac_wide_anglemod.kbd | 14 ++ .config/kanata/defsrc/pc.kbd | 11 ++ .config/kanata/defsrc/pc_anglemod.kbd | 11 ++ .config/kanata/defsrc/pc_ansi_anglemod.kbd | 11 ++ .../kanata/defsrc/pc_ansi_wide_anglemod.kbd | 13 ++ .config/kanata/defsrc/pc_wide_anglemod.kbd | 13 ++ .config/kanata/kanata.kbd | 94 +++++++++ 29 files changed, 1316 insertions(+) create mode 100644 .config/kanata/README.md create mode 100644 .config/kanata/defalias/azerty_pc.kbd create mode 100644 .config/kanata/defalias/bepo_pc.kbd create mode 100644 .config/kanata/defalias/ergol_pc.kbd create mode 100644 .config/kanata/defalias/optimot_pc.kbd create mode 100644 .config/kanata/defalias/qwerty-lafayette_pc.kbd create mode 100644 .config/kanata/defalias/qwerty_mac.kbd create mode 100644 .config/kanata/defalias/qwerty_pc.kbd create mode 100644 .config/kanata/defalias/qwertz_pc.kbd create mode 100644 .config/kanata/deflayer/base.kbd create mode 100644 .config/kanata/deflayer/base_lt.kbd create mode 100644 .config/kanata/deflayer/base_lt_hrm.kbd create mode 100644 .config/kanata/deflayer/navigation.kbd create mode 100644 .config/kanata/deflayer/navigation_vim.kbd create mode 100644 .config/kanata/deflayer/symbols_lafayette.kbd create mode 100644 .config/kanata/deflayer/symbols_lafayette_num.kbd create mode 100644 .config/kanata/deflayer/symbols_noop.kbd create mode 100644 .config/kanata/deflayer/symbols_noop_num.kbd create mode 100644 .config/kanata/defsrc/mac.kbd create mode 100644 .config/kanata/defsrc/mac_anglemod.kbd create mode 100644 .config/kanata/defsrc/mac_ansi_anglemod.kbd create mode 100644 .config/kanata/defsrc/mac_ansi_wide_anglemod.kbd create mode 100644 .config/kanata/defsrc/mac_wide_anglemod.kbd create mode 100644 .config/kanata/defsrc/pc.kbd create mode 100644 .config/kanata/defsrc/pc_anglemod.kbd create mode 100644 .config/kanata/defsrc/pc_ansi_anglemod.kbd create mode 100644 .config/kanata/defsrc/pc_ansi_wide_anglemod.kbd create mode 100644 .config/kanata/defsrc/pc_wide_anglemod.kbd create mode 100644 .config/kanata/kanata.kbd 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: