40 hour workweek. Overtime only happens during an emergency. That means you NEVER schedule overtime.
Accurate requirements and bonus skills. Don't ask for 7 years in a language that has existed for 4 years. Make it clear if experience in other languages is acceptable, and the candidate can get up to speed on a relatively new language on the job. For a good programmer, this isn't hard.
No fancy language. No 'rockstar' or 'code ninja' talk. Anyone who is realistic about their skillset will not call themselves that.
Flexibility in interviewing. Good programmers already have a busy life. If you want them, you have to work with them. Especially if they live any distance from your office. Be willing to interview via internet/telephone first, and have them travel only if necessary. (I once had a guy 3 hours from me ask me to a lunch interview. I declined because I figured he was just milking the company for lunch and had no intention of hiring me.)
Adequate pay. Benefits are nice, but they don't put food on the table. And with enough pay, employees can buy all the benefits I want. As someone said earlier, your foosball table isn't on my list of requirements.
Unit testing. Without unit testing, life is a LOT harder.
Don't play games. If you say you'll call someone back, do it. Don't wait for the candidate to call and 'ask for the job'. That means they're desperate, not that they're good or loyal. If an interviewer tells me that they'll call me, I hold them to their word.
The above are the absolute necessities. Below are things I like to see:
Languages/environments that I enjoy. If you deploy on Linux and run Ruby, those things interest me. Showing that you are on top of the newest technologies or methodologies means you are open to improvement. This is also good.
"Challenging". I hate boredom. I never want to be bored. I would much rather go home exhausted from all the thinking than have enough energy that I feel like coding at home. And I do code at home when I'm bored at work.
Telecommuting. I find that I don't choose to do this, but companies that trust their employees enough to do this are better to work for. It also probably means they have a way to measure whether someone is working or not that doesn't involve a rat. That means things are a little more fair.