Easily Switching Between i3 Modifiers

In the search to make my computing experience as ergonomic as possible (read: mouse free), I use i3.  I change between a built-in laptop keyboard where I would like to use the Windows key aka Super aka mod4, and an ErgoDox where I use AltGr aka ISO_Level3_Shift aka mod5.

I have two scripts to facilitate easily switching between them. A command line tool:


#!/bin/bash
# i3changemod
# CLI tool to switch between i3 modifiers by editing the i3 config.

case $1 in
1)
sed -i "s|set \$mod Mod4|set \$mod Mod1|g" /home/$U/.i3/config
sed -i "s|set \$mod Mod5|set \$mod Mod1|g" /home/$U/.i3/config
;;
4)
sed -i "s|set \$mod Mod1|set \$mod Mod4|g" /home/$U/.i3/config
sed -i "s|set \$mod Mod5|set \$mod Mod4|g" /home/$U/.i3/config
;;
5)
sed -i "s|set \$mod Mod1|set \$mod Mod5|g" /home/$U/.i3/config
sed -i "s|set \$mod Mod4|set \$mod Mod5|g" /home/$U/.i3/config
;;
esac

The default shortcut to restart i3 in-place is mod+shift+r. If you do not have the modifier key, you can’t restart it. So, I added another shortcut:
bindsym Ctrl+Shift+h restart


#!/bin/bash
# GUI tool to pick an i3 modofier, uses i3changemod script.

#i3changemod is located in my private binaries path..
PATH=$PATH:/home/$U/bin/

command=$(zenity --list --text "Change i3 Modifier" --radiolist \
--column "Pick" --column "Command" --column " Label" \
TRUE 'i3changemod 1' ' Alt: mod1' \
FALSE 'i3changemod 4' ' Super: mod4' \
FALSE 'i3changemod 5' ' AltGr: mod5' \
);
#$command $1
$command

i3-msg restart

# for my ergodox:
xmodmap -e 'keycode 104 = ISO_Level3_Shift' # 104=kp enter

For convenience, I added the xmodmap command that I need to map AltGr on to KP Enter on my ergodox, rather than having to use another keyboard shortcut for that too.