If you want to do it thru workflow, I think you would have to modify all your other workflows, and that to me feels like something would be missed, or not done right in the future.
I would probably do a scheduled task. I think you can get the documents doing something like this:
DocumentHelper.GetDocuments().Where("(DocumentIsArchived = 1) AND (DocumentLastPublished < getdate()-30)");
Not positive is last published date is the correct field for the date, would have to do some testing to verify.