# [`dotd`][] Generate a file from fragment files in a directory. `dotd` is intended to be used to (re-)generate e.g. a configuration file `config` from files in a corresponding directory `config.d` where separate people or programs can place configuration fragment files without treading on each other's toes, when the native configuration language does not support functionality equivalent to `include config.d/*`. In essence, it is a glorified `cat config.d/* > config`. The generated file is compared against any pre-existing file, if they differ a warning is printed and the pre-existing file is moved to a backup file whose name includes a time stamp. [`dotd`]: https://git.rcrnstn.net/rcrnstn/dotd ## Usage `dotd --help`: ``` dotd 1.0 Generate a file from fragment files in a directory. usage: dotd [options] [--] <file> [<dir>] dotd -h|--help dotd --version arguments: <file> File to generate. Specify - to print to stdout instead. <dir> Directory containing fragment files. <file>.d is used if not specified. options: -a, --action <action> Action to perform on each fragment file. E.g. printf "#include \"%s\"\n" [default: cat] -c, --comment <comment> If non-empty, adds comments starting with <comment> that the file is auto-generated and which fragment corresponds to which file. E.g. // [default: ] -g, --glob <glob> Shell glob used to find fragment files, relative to <dir>. E.g *.h [default: *] -v, --validate <validate> Command to run on the (temporary) generated file. Only if the command returns success is the file moved to its final destination. E.g. /usr/sbin/sshd -t -f [default: ] ``` ## Dependencies All dependencies are [POSIX][] (except `mktemp`, but most Unix-like systems have some version), and are highly likely to be installed by default (e.g. they all have the [Debian priority][] `required`). - `sh` (e.g. from [`bash`][] or [`dash`][]) - `rm`, `mv`, `tail`, `date`, `mktemp` (e.g. from [`coreutils`][]) - `cmp` (e.g. from [`diffutils`][]) - `sed` (e.g. from [`sed`][]) - `awk` (e.g. from [`mawk`][]) [POSIX]: https://en.wikipedia.org/wiki/POSIX [Debian priority]: https://www.debian.org/doc/debian-policy/ch-archive.html#s-priorities [`bash`]: https://packages.debian.org/bash [`dash`]: https://packages.debian.org/dash [`coreutils`]: https://packages.debian.org/coreutils [`diffutils`]: https://packages.debian.org/diffutils [`sed`]: https://packages.debian.org/sed [`mawk`]: https://packages.debian.org/mawk ## Related projects - [Ansible][]'s [`assemble` module][]. - [Puppet][]'s [`concat` module][]. [Ansible]: https://en.wikipedia.org/wiki/Ansible_(software) [`assemble` module]: https://docs.ansible.com/ansible/latest/collections/ansible/builtin/assemble_module.html [Puppet]: https://en.wikipedia.org/wiki/Puppet_(software) [`concat` module]: https://forge.puppet.com/modules/puppetlabs/concat ## License Licensed under the [ISC License][] unless otherwise noted, see the [`LICENSE`][] file. [ISC License]: https://choosealicense.com/licenses/isc/ [`LICENSE`]: LICENSE