Currently I have Ocean, Desert, Grassland, Mountain, and Snow biomes. These are generated in subtractive layers of noise that prioritizes Low->Mid->High areas using multiple noises around 8km across. Ocean takes up the Low area. Desert and Grassland take up the Mid using a second noise. Mountain and Snow take up the High area based on height. (a 32km2 shot. The starting area is always forced to grass)
This is about all I can squeeze in, and already things are overlapping causing slivers of biomes in some places.
One approach is to just make 0-35% of a "biome" noise biome1, 35-50% biome2, etc. But this way biome1 is always surrounded by biome2 and can never touch biome3 or biome4.
Another approach would be to have multiple layers of noise and using when noiseA is at 0-35% and noiseB is at 0-35% apply biome1 (see below). But again that limits who can border who. Maybe the only way to go about it with noise though. (Minecraft / Empyrion)
What I want to do: Add even more biomes, up to a dozen. The only way I can come up with to try and keep them somewhat even and still random is to assign polygonal sections a random biome. For example every 8x8 kiolmeters rolls to see which of the 12 biomes it is and then becomes that biome completely, sort of like Settlers of Catan. Maybe with a kilometer of noise based blend zones on each edge to reduce the squareness.
Are there other approaches?