I am open to work.Open to work.Get in touch

Footswitch

I posted about getting a footswitch in early 2024. My original philosophy was to get max productivity by making use of your unused limbs.

USB footswitch with three pedals

I kept default mapping from left-to-right as i, <ESC>, and x to switch to/from INSERT, NORMAL mode on vim/nvim and to map a secondary in-game keybind.

I tried to set it up for gaming by mapping a few secondary keybinds to the pedals. Nothing too fancy. I have used a few times to trigger some abilities. For example, in Valorant I use it for ultimate abilities by mapping the ultimate trigger key to one of the pedals.

I have added multiple layers to my footswitch so that same pedals can be multiplexed in different ways. Just like how you would have different logical layers for your keyboards. Switching a layer is through a keyboard shortcut (or by long press left pedal for 400ms) and I can see a pop up notification on the screen telling which layer it has switched to.

Notification on layer change.

I am using Karabiner-Elements to define these layers/macros/complex modifications associated with the footswitch. My local definition looks like the JSON below which is then put into Karabiner-Elements in its own compatible format.

{
  "device": {
    "vendor_id": 13651,
    "product_id": 45057,
    "description": "PCsensor FootSwitch (3553:b001)"
  },
  "layer_switch": {
    "pedal": "left",
    "hold_ms": 400
  },
  "pedals": [
    { "name": "left", "trigger_key": "i" },
    { "name": "middle", "trigger_key": "escape" },
    { "name": "right", "trigger_key": "x" }
  ],
  "layers": [
    {
      "name": "tmux",
      "bindings": {
        "left": {
          "description": "tmux: find window",
          "sequence": [
            { "modifiers": ["left_control"], "key": "b" },
            { "key": "f" }
          ]
        },
        "middle": {
          "description": "tmux: previous window",
          "sequence": [
            { "modifiers": ["left_control"], "key": "b" },
            { "key": "p" }
          ]
        },
        "right": {
          "description": "tmux: next window",
          "sequence": [
            { "modifiers": ["left_control"], "key": "b" },
            { "key": "n" }
          ]
        }
      }
    },
    {
      "name": "layer2",
      "bindings": {}
    },
    {
      "name": "layer3",
      "bindings": {}
    }
  ]
}

Now I am using it for some developer experience/productivity use case. One of the layer has some tmux macros like cycle through sessions/windows, open a floating window to search tmux sessions by names, etc. I switch to this layer while I am in terminal mode.

Tmux window searcher configured on left pedal of layer 1.

Another layer is for desktop application/workspace switching. I feel my skhd keymaps are much faster but hey, you gotta look cool and all telling about it to people.

Ergonomics of the footswitch.

Plans

My plan is to have a footswitch layer for different work modes. For example: if I am in a meeting, I can quickly enable/disable recording/transcripts, put a push-to-talk, put a timed annotation/bookmark, etc.

I can always have a footswitchable interactions with all kinds of programs or work modes (meeting, coding, reading, dictation etc.) by adding all the layers.

Problems

I feel that just 2 pedals on the board are enough so that you can place each foot on on of them. With the current three pedal setup, I feel it is difficult to switch to the third one in case you already have a foot on two of those. I mean, foot to pedal change time is much higher than making a few keystrokes so it’s slower.

In a stading desk mode (which I have been lately using a lot), it’s not be easy to use. Too much movement to move the pedals I feel.