I can do it with 5 kingdom cards and 2 events, without durations or teacher-tokens and even without Black Market. This is in a solo game; with opponents I need every opponent to have a Moat in hand, which adds 1 kingdom pile.
Kingdom: Ambassador, Villa, Rogue, King's Court, Council Room
Events: Ferry, Bonfire
shelter game
Preparation: Put Ferry token on KC. Get a deck consisting of KC*6, Amb, Rogue*4, Villa*4, CR*3, Overgrown Estate, Hovel. Trash all starting copper and Necropolis and make sure at least the following is in the trash: KC*4, Amb*1, Rogue*4, Villa*2, CR (trash with Bonfire).
Start your infinite turn when you have KC*2, CR*2 (this will eventually always happen). Play KC-KC-CR-CR-Villa to draw your deck.
-- START LOOP -- (hand consist of KC*4, Amb*1, Rogue*4, Villa*3, CR (and OE), trash consists of KC*4, Amb*1, Rogue*4, Villa*2, CR)
Now play your 4 KCs in a chain to play 7 actions three times:
play 4 Rogues three times, to gain KC*4, Amb, Rogue*4, Villa*2, CR
play CR three times to draw your deck.
play 2 Villas three times.
Play Ambassador, returning a Villa.
You gained 30 coins and 9 buys by this KC-chain. Go to the buy phase and buy Bonfire 6 times to trash 4*KC, 4*Rogue, CR, Villa*2, Amb. Buy a Villa to return to your action phase, and repeat the loop.
-- END LOOP --
Every iteration of the loop gives 8 coins and 2 buys, so you can get arbitrarily much coins and buys by doing this as often as you like (however, not infinitely many, since that takes infinite time)
EDIT: simplify a little bit.
EDIT 2: Had to make some minor changes because you cannot trash hovel without having a victory card in your deck in this kingdom.