I found a way to turn off caps lock in normal mode automatically (though it works only in Linux).
The solutions that were made with plugins do not take into account that you can enter normal mode in more then one way (that is from insert to normal), for example from command mode.
There is actually no autocommand event that activates upon entering normal mode, so the event I used instead was CursorHold
event, which activates when you're not typing in normal mode.
au CursorHold * call TurnOffCaps()
set updatetime=10
You set the update time to a very small number, so it will always activate, before you have a chance to type anything.
function TurnOffCaps()
let capsState = matchstr(system('xset -q'), '00: Caps Lock:\s\+\zs\(on\|off\)\ze')
if capsState == 'on'
silent! execute ':!xdotool key Caps_Lock'
endif
endfunction