I would say that TDD is the foundation. If you do nothing else, your code would be better off just from properly applying this practice. TDD is what allows Agile development (XP being one methodology) to work. Having good coverage from a unit test suite enables you to be fearless with changing/refactoring your code, because you know once something breaks, you'll have a red test to alert you.
Without TDD, adding new functionality or changing existing functionality becomes something like defusing a bomb. Even worse imagine that bomb didn't blow up right away but instead silently releases an odorless, colorless, gas that once you inhale it causes you to die six months later. That is what coding without test coverage is like. You might think you're fixing a bug or implementing a new feature but in reality, you might be adding a new bug that will exist undetected until all bloody hell breaks loose months down the road.
After that I would go with DDD. This will teach you techniques to create code that is more easily tested, making you even better at TDD.
With regard to Agile Development, the only way to really learn that is to be on a project where it is being implemented properly. XP and Scrum and the other methodologies have their specifics but there are general Agile tenets that will work well regardless of the approach.