/config-dye

A CLI tool for processing templates using nunjucks, focused on theming config files.

Primary LanguageJavaScript

config-dye

A CLI tool for processing templates using nunjucks, focused on theming.

For example, if we had an i3 configuration file

client.focused          #FF0000 #FF0000 #333333 #FFFFFF #FF0000
client.unfocused        #333333 #333333 #FF0000 #FF0000

We could extract the colors there to a data.json file:

{
    "accent": "#FF0000",
    "background": "#333333",
    "light" "#FFFFFF"
}

And have our config file as

client.focused          {{accent}} {{accent}} {{background}} {{light}} {{accent}}
client.unfocused        {{background}} {{background}} {{accent}} {{accent}}

Which will result into the first block. This allows to process many config files with the same variables under a single process pass.

Usage

npx config-dye --path=./templates --data=data.json --dest=./.config

This will recursively process all the .njk files within ./templates, and output them, applying data.json, with the same structure to ./config.

npx will pull all the dependencies and execute with the given parameters. It will always do this if you're using it as is, so if you want to avoid that step, you can also do

npm i -g config-dye # Needs sudo
config-dye --path=./templates --data=data.json --dest=./.config

Filters

Additionally the templating process has filters to process colors using color.

For example , for the following

{{accent | lighten(0.5) | hex}}

Results in #FF8080. You can also chain more commands as necessary:

{{accent | lighten(0.5) | rotate(50) | hex}}

Will result in #FFEA80

When processing colors, remember to finish off with the proper output format (e.g.: hex, rgb, hsl)

The following methods are supported

  • lighten
  • darken
  • hsl
  • rgb
  • saturate
  • desaturate
  • rotate
  • hex
  • isDark
  • isLight
  • contrast

Templating

All nunjucks features are available.

include is possible, and allows for further config file organization. Keep in mind all files are relative to the one being rendered.

You can also have partials within your template files, which means they will not output directly to a file, and just exist to be included within other files. These files are prepended with an underscore _, e.g.: _header.njk.