UNPKG

themer

Version:

Customizable theme creator for editors, terminals, wallpaper, and more.

75 lines 3.52 kB
import { source } from 'common-tags'; import Color from 'color'; import { Document } from 'yaml'; import { colorSetToVariants } from '../color-set/index.js'; const MIX = 0.2; const brightMix = (isDark, colors, key) => Color(colors[key]) .mix(isDark ? Color(colors.shade7) : Color(colors.shade0), MIX) .hex(); const dimMix = (isDark, colors, key) => Color(colors[key]) .mix(isDark ? Color(colors.shade0) : Color(colors.shade7), MIX) .hex(); const template = { name: 'Alacritty', render: async function* (colorSet) { const variants = colorSetToVariants(colorSet); const document = new Document({ schemes: Object.fromEntries(variants.map(({ title, colors, isDark }) => [ title.kebab, { primary: { background: colors.shade0, foreground: colors.shade6, }, cursor: { text: colors.shade0, cursor: colors.accent6 }, selection: { text: colors.shade0, background: colors.accent5 }, normal: { black: isDark ? colors.shade2 : colors.shade6, red: colors.accent0, green: colors.accent3, yellow: colors.accent2, blue: colors.accent5, magenta: colors.accent7, cyan: colors.accent4, white: isDark ? colors.shade6 : colors.shade2, }, bright: { black: isDark ? colors.shade3 : colors.shade5, red: brightMix(isDark, colors, 'accent0'), green: brightMix(isDark, colors, 'accent3'), yellow: brightMix(isDark, colors, 'accent2'), blue: brightMix(isDark, colors, 'accent5'), magenta: brightMix(isDark, colors, 'accent7'), cyan: brightMix(isDark, colors, 'accent4'), white: isDark ? colors.shade7 : colors.shade1, }, dim: { black: isDark ? colors.shade1 : colors.shade7, red: dimMix(isDark, colors, 'accent0'), green: dimMix(isDark, colors, 'accent3'), yellow: dimMix(isDark, colors, 'accent2'), blue: dimMix(isDark, colors, 'accent5'), magenta: dimMix(isDark, colors, 'accent7'), cyan: dimMix(isDark, colors, 'accent4'), white: isDark ? colors.shade5 : colors.shade3, }, }, ])), }); document.commentBefore = ` ${colorSet.title.human}`; for (const variant of variants) { const node = document.getIn(['schemes', variant.title.kebab], true); document.createAlias(node, variant.name); } yield { path: `${colorSet.title.human}.yml`, content: document.toString(), }; }, renderInstructions: ([path]) => source ` 1. Paste the contents of \`${path}\` into your Alacritty config file. 2. Select the desired theme by setting the \`colors\` config key to reference the scheme's anchor (i.e., \`colors: *light\` or \`colors: *dark\`). `, }; export default template; //# sourceMappingURL=alacritty.js.map