I just discovered the pm-utils for suspending and hibernating my laptop. they work great. And I'm about to write a little program that invokes hibernation, in case the battery is low, and: invokes suspend-hybrid whenever there was no user input via keyboard or mouse for - say - 30 minutes. The last requirement would be the more difficult one.
But, maybe there is something existing, that does exactly this. there should.. Inside the gui's it's managed by them, but in a tile manager for instance you have to care for this.
I'm using linux mint on a mac book.