I have been using a bit different configuration here for some time and am very happy with it. I don't toggle to the previous layout, but to the floating layout. This way you avoid the confusion, and have an easy way to go directly to any layout in no more than 2 clicks or key strokes (in practice, setting the floating layout from tile is not the same than setting it from monocle). My implementation is a workaround to not modify dwm.c at all, but it could be done much better in upstream dwm, because lt doesn't need to be an array any more and we can get rid of sellt. I can write the patch if there is some interest. My 2 cts.
void setltor1(const Arg *arg) { Arg a = {.v = &layouts[1]}; setlayout((lt[sellt] == arg->v) ? &a : arg); } { MODKEY, XK_space, setltor1, {.v = &layouts[0]} }, { MODKEY|ShiftMask, XK_space, setltor1, {.v = &layouts[2]} }, { ClkLtSymbol, 0, Button1, setltor1, {.v = &layouts[0]} }, { ClkLtSymbol, 0, Button2, setmfact, {.f = 1.65} }, { ClkLtSymbol, 0, Button3, setltor1, {.v = &layouts[2]} }, { ClkLtSymbol, 0, Button4, setmfact, {.f = +0.05} }, { ClkLtSymbol, 0, Button5, setmfact, {.f = -0.05} }, -- - yiyus || JGL .