Unfortunately, nobody's going to be able to give you an easy answer, because it really depends on what you want to have in the game, and it's going to be a personalized solution.
The best advice I could give would be to start simple. You're making just a city, not a whole world, so Minecraft-style world building, or simulated terrain generation like ivan talked about aren't really necessary. You said it's also going to be grid-based, so that makes it a little easier, too (especially since a lot of cities are on a grid layout anyway!).
Here's how I would do it:
Just focus on putting down some roads and buildings first. Try just drawing a few roads between different points, and putting buildings in the places the roads aren't, or, putting the buildings down first, and drawing the roads around them. A pathfinding library like
Jumper will probably be very helpful.
Once you've got the basics down, add more complexity...other things in the city (parks, parking lots, a river running through town, whatever), making the roads all connect to each other, tightening up the algorithm to make it make more sense, etc.
If you've never done anything like this before, you might end up having to throw away large portions of the map generator, but that's OK. A lot of this is experimentation and seeing how things work.
If you want to also have the buildings be enterable, that'll be a completely different generator, too, obviously.
Here are a few links about "dungeon" generation. They won't be directly applicable, but they might give you some ideas.
On the Procedural Content Generation Wiki
On the roguelike wiki (a
specific method that goes in-depth into how it works)
If there's any code on there, it's not going to be lua, but a lot of articles in those places go in-depth step-by-step how the generator works, so you should be able to roll your own.
That was a big post, and there's a lot to learn about, but don't stress out too much! Procedural generation can be pretty fun, seeing what kind of craziness your generators come up with. Like I said, just start simple and work your way up.