I created my own one hand layout since I have the Kinesis keyboard where the keys are split. So something like Dvorak one hand would not work for me. Also note that I remap using Autohotkey which allows very sophisticated key combinations and locking. This allows me to shift lock without holding down the finger, especially since it's the pinky finger which would cause a lot of strain on it. Also since it's an Autohotkey script, I run it only when I need it.
So I'm using exactly one half of the keyboard because the keys are split and the other half is too far away to reach. Each half of the normal letter keys are 5 wide by 3 rows, or 15 keys. Double that is 30, which is more than the 26 letters in the English alphabet. So we divide the letters by frequency such that more common letters can typed normally, and uncommon letters need a switch. So we need a trigger to switch between these modes. I use scroll lock and reprogrammed one of the pinky keys to toggle the scroll lock. So the script checks whether scroll lock is on or off when you type a letter to know which letter to send. That is, scroll lock is reprogrammed to switch between the common and uncommon letter modes. Now uppercase letters is handled by caps lock, naturally. Caps lock also acts like Shift in the case of punctuations. However it's not that simple. The script must know the state of both the scroll lock and the caps lock at all times. Both locks are turned off after a letter is typed. That is, it returns to the common unshifted mode after every keypress.
I type with the right hand, so the layout looks something like this (it's actually 6x3 counting the keys to the right of the pinky):
Common mode unshifted:
fhtrc,
uieoa[CAPS LOCK]
dnsgl[SCROLL LOCK]
Common mode shifted:
FHTRC.
UIEOA
DNSGL
Uncommon mode unshifted:
'zyq<[
jmwpb
"vkx-
Uncommon mode shifted:
;ZYQ>]
JMWPB
:VKX_