Toggle the keyboard language by *holding* a button? On my Linux computer, my keyboard switches from English to Serbian when I hold the Caps Lock key. For example, to write č all I have to do is hold Caps Lock, and press the key where č is on the Serbian keyboard (in this case, they key is ; on the English keyboard). When I release Caps Lock, the keyboard  "switches back" to English, so that if I press ; I get ; as desired. Super useful.

Is there a way to replicate this behavior on OS X?
You can use KeyRemap4MacBook:

&lt;?xml version="1.0"?&gt;
&lt;root&gt;
  &lt;vkchangeinputsourcedef&gt;
    &lt;name&gt;KeyCode::VK_CHANGE_INPUTSOURCE_SERBIAN&lt;/name&gt;
    &lt;inputsourceid_equal&gt;com.apple.keylayout.Serbian&lt;/inputsourceid_equal&gt;
  &lt;/vkchangeinputsourcedef&gt;
  &lt;item&gt;
    &lt;name&gt;test&lt;/name&gt;
    &lt;identifier&gt;test&lt;/identifier&gt;
    &lt;autogen&gt;__KeyToKey__ KeyCode::F1, KeyCode::VK_NONE, Option::KEYTOKEY_BEFORE_KEYDOWN, KeyCode::VK_CHANGE_INPUTMODE_SERBIAN, Option::KEYTOKEY_AFTER_KEYUP, KeyCode::VK_CHANGE_INPUTMODE_ENGLISH&lt;/autogen&gt;
  &lt;/item&gt;
&lt;/root&gt;


VK_CHANGE_INPUTMODE_ENGLISH is defined in inputsourcedef.xml. You can see the IDs of input sources from EventViewer.app. Caps lock can be remapped to an F-key with PCKeyboardHack.