Simply removing the carpet and drapes and keeping the windows open for two weeks fixed 90% of the smell.
We spot cleaned a few wall areas that had thicker stains, then covered with three coats of primer and two of paint. All of the electrical outlets and light switches are also getting replaced as they are yellowed with smoke and age.
A home depot employee suggested a $35/gal oil based primer that says “odor blocking” but that did not turn out to be necessary. He also advised against trying to removal all the paint.
The Lowe’s in Mission Valley had paint scent mix-ins in the clearance bin that we gave a try and I like the result. It was too strong the first day after using, but now there is a very slight pleasant “sea breeze” smell where we used it.