I've been doing my grad school work on this, so here's the best starting point:
You'll get the basics: where height data comes from, how to use Godot's surface tool yada yada, how to have all this happen in a separate thread, and how to enable collision on it. He does one make one mistake where he computes height for a single square six times, 3 for each triangle that makes the square. If you pause and think about it you'll realize you don't need to compute it six times, just four.
Going from there: you'll want to make bigger chunks than he does in the tutorial and play around with adding more layers of noise and mixing them to different effect. For rivers I suggest employing perhaps your first layer of noise as abs(noiseVal). The absolute value, depending on if you inverse it or not, can make nice rivers or ridges. Your rivers in this method will be, however, like as in minecraft, flat.