From Middle English bunne, from Anglo-Norman bugne, from Old French bugne (hence French beignet), from Frankish *bungjo, diminutive of *bungu, from Proto-Germanic *bungô, *bunkô, from Proto-Indo-European *bʰenǵʰ-. Cognate with Dutch bonk. More at bunch.
Probably from Scots bun, which is probably from Scottish Gaelic bun.