dsc -- damn small configuration utility. dsc is very similar to OpenWRT's Unified Configuration Interface. It keeps configuration values in a hierarchical directory layout. It has an explicit schema defining what values can be set and how they must be sanitised. There are three environmental variables used: * DSC_SCHEMA -- path to the directory with the schema * DSC_SAVED -- path to the directory with saved (committed) configuration * DSC_STASH -- path to the directory with stash (current) uncommitted one Option's value foo/bar is located in the saved/stash directory in the "foo" subdirectory, "bar" file. $ dsc set foo/bar "my value" $ dsc get foo/bar my value $ dsc get "" $ dsc get foo/bar There are two kind of options: scalar ones, and a dynamic list ones. $ dsc add net/iface-name0 $ dsc add net/iface-name1 $ dsc get net/* iface-name0 iface-name1 $ dsc del net/iface-name0 $ dsc get net/* iface-name1 $ dsc set net/iface-name1/mtu 1300 Schema is a directory with the same hierarchy, but each option is a directory, that contains: * "title" file -- with the brief single line description * optional "descr" file -- with descriptive information * executable "check" file, that is run when option either is set, or get with an empty value. It takes a single argument -- option name. Value is read from stdin. If value is not valid, then checker must return bad return code, writing the descriptive message to stderr. Otherwise the sanitised value is read from stdout. If an input is empty, then checker may print default value of the option Option having "*" name is treated like a dynamic list. By default all options you set are saved in the stash. "commit" command will move it to the saved directory. "diff" allows you to see the difference between the stash and saved directories.