mjswensen / themer
- пятница, 29 декабря 2017 г. в 03:14:07
🎨 themer takes a set of colors and generates themes for your apps (editors, terminals, wallpapers, and more).
themer takes a set of colors and generates editor themes, terminal themes, themes for other apps, and desktop/device wallpapers.
Don't love the command-line? Check out the GUI.
mkdir my-dotfiles && cd my-dotfiles
npm install themerIf you do not keep your dotfiles under version control, you can simply install themer globally with npm -g install themer.
themer --colors <file OR npm module name> \
--template <file OR npm module name> \
[--template <file OR npm module name>...] \
--out <directory>themer can create themes from your custom color sets (see "Create your own color set" below) or from color sets published on npm (see themer-colors-default). The same is true for templates.
Say you wanted to generate a vim theme and desktop background using themer's default color set. First, install themer, the color set, and the templates:
cd my-dotfiles
npm install themer themer-colors-default themer-vim themer-wallpaper-block-waveThen edit your package.json:
...
"scripts": {
"build": "themer -c themer-colors-default -t themer-vim -t themer-wallpaper-block-wave -o gen"
},
...Then run your new script:
npm run buildNow check the gen/ folder for your generated themes. Here's the result:
| Name | Dark Preview | Light Preview |
|---|---|---|
| themer-colors-default | ||
| themer-colors-night-sky | (dark only) | |
| themer-colors-polar-ice | ||
| themer-colors-finger-paint |
| Name | Dark Preview | Light Preview |
|---|---|---|
| themer-colors-one | ||
| themer-colors-lucid | ||
| themer-colors-solarized | ||
| themer-colors-github-universe | (dark only) |
To create your own color set, create a JavaScript file that exports a colors object, like so:
exports.colors = {
dark: { // A color set can have both light and dark variants, but doesn't have to.
accent0: '#FF4050', // accent0-7 should be the main accent colors of your theme.
...
accent7: '#F553BF',
shade0: '#282629', // shade0-7 should be shades of the same hue, with shade0 being the darkest and shade7 being the lightest.
...
shade7: '#FFFCFF'
},
light: { ... }, // same as above, except that shade0 should be the lightest and shade7 should be the darkest.
};At this point, your JS file can be passed to the --colors argument of themer.
Refer to themer-colors-default for an example.
I would recommend checking your color set into your dotfiles repo. Once you've fine-tuned it, you might consider publishing it to npm for others to use! (If you do, consider naming your repo starting with themer-colors- so that others can easily find it.)
To create your own template, create a JavaScript file that exports a render function, like so:
exports.render = function(colors, options) {
// colors is an object that will have one or both keys: 'light' and
// 'dark', each being an object with keys 'accent0' through 'accent7'
// and 'shade0' through 'shade7'.
// options is an object representing the original command-line args
// passed to themer. This allows you to add special arguments that
// will apply only to your template. An example of this is allowing a
// themer user to specify custom resolutions for rendering a wallpaper.
// This function should return an array of Promises, each Promise
// resolving to an object of the following structure:
// {
// name: '<the name of the file to be written>', // can include subdirectories, too
// contents: <a Buffer of the contents of the file to be written>,
// }
};Your JS file can then be passed to a --template argument of themer. That's it!
Once you've developed your template, consider publishing it on npm (with repository name starting with themer-) so that others can use it!
themer is inspired by trevordmiller/nova and chriskempson/base16.
Conceptually, themer is very similar to base16, but:
If you'd prefer to develop your themes visually (and with a tight feedback loop), check out themer's GUI.