We develop the SMuRF algorithm that accurately and effectively solves the general problem of convex optimization with a differentiable loss function and multi-type penalty terms. We show in full detail how this algorithm creates sparse models, using varying combinations of Lasso-type penalties, and investigating and documenting all possible model choices.