A domain specific language (DSL) is, in brief, any computer language which has been especially targetted at a given task or task domain. For example a configuration language for firewalls, or indeed postscript. Typically DSLs are small languages, though they can be turing complete in some sense, even given their narrow purpose.
DSLs are all over the average Linux system, indeed many of the files in /etc
are written in small configuration DSLs. A DSL might be implemented in an
entirely custom fashion using lexers and parsers specific to the software
hosting the DSL; or they might be a set of semantics and functions built on top
of an existing language such as the shell. DSLs don't need to
be a programming language of sorts, they can be purely declarative, such as
INI files which are becoming more and more popular. (For example, systemd
builds a number of related DSLs for its units on top of the INI format.)
If you're building a more-than-trivial tool, you'll likely encounter a desire to configure it in a file at one point. At that point, you too might encounter the desire to implement a DSL of some kind. When you reach that point, I urge you to look for an existing configuration language of some kind and to build from there. systemd's use of the INI format as a basis for its DSLs is in no way an accident. By building on formats already understood, you'll make it much easier for others to work with your configuration files.