There is an excellent book by Elliot Williams on programming the ATmega168 using plain AVR C++/C. Amazon (UK) has it at Amazon.co.uk.
It uses a breadboard based ATmega168 at 8MHz, but thats just a smaller version of the Arduino’s ATmega328 which runs at 16 MHz. Other than that, the two AVRs are identical.
There is a bug in the earlier chapters when he refers to the blink program “seen earlier” when it actually comes later! Other than that, it’s all good.
HTH
Cheers,
Norm.