2 tbsp extra virgin olive oil
2 onions medium, thinly sliced
12 oz bacon cooked and crumbled
4 tbsp all-purpose flour
3 cups whole milk
3 lbs potatoes thinly sliced (use Yukon or russet)
8 oz cheese I used a combination of sharp cheddar and Gruyere, any cheese will work
salt and pepper to taste
Preheat oven to 350F. Lightly grease a 9×13 or deep 9×9 baking dish with butter and set aside.
Add olive oil to a medium skillet and heat over medium heat. Add thinly sliced onion and salt and pepper, to taste. Cook over medium heat, stirring occasionally until onions become caramel in color. Remove from skillet and set aside.
Wipe the skillet clean and cook bacon until crisp. You can alternatively bake the bacon while the onions are cooking, saving a little time. Remove bacon from skillet, drain grease, and wipe clean again.
Melt butter over medium heat. Sprinkle flour on top of the butter and whisk to form a roux. Cook for 2 minutes.
Slowly add the milk, whisking constantly. Bring roux to a simmer and let thicken just slightly, about 2 to 3 minutes after coming to a simmer. Remove from heat and set aside.
Assembly
Layer half of the potatoes, half of the caramelized onions, half the bacon, half the cheese, and half the sauce, in that order in the prepared baking dish. Repeat.
Cover the baking dish with foil and bake for 1 hour. Remove foil and bake for an additional 30 minutes or until potatoes are easily pierced with a fork. Remove from oven and let cool for 10 minutes before serving.