themer
Version: 
Customizable theme creator for editors, terminals, wallpaper, and more.
85 lines (81 loc) • 4.31 kB
text/typescript
import Color from 'color';
import { source } from 'common-tags';
import { colorSetToVariants } from '../color-set/index.js';
import type { Template } from './index.js';
function formatColor(hex: string) {
  const [r, g, b] = Color(hex)
    .rgb()
    .array()
    .map((n) => n.toString(16));
  return [g, b, r, '00'].join('');
}
const template: Template = {
  name: 'ConEmu',
  render: async function* (colorSet) {
    const variants = colorSetToVariants(colorSet);
    for (const variant of variants) {
      const shade0 = formatColor(variant.colors.shade0);
      const shade1 = formatColor(variant.colors.shade1);
      const shade6 = formatColor(variant.colors.shade6);
      const shade7 = formatColor(variant.colors.shade7);
      const accent0 = formatColor(variant.colors.accent0);
      const accent1 = formatColor(variant.colors.accent1);
      const accent2 = formatColor(variant.colors.accent2);
      const accent3 = formatColor(variant.colors.accent3);
      const accent4 = formatColor(variant.colors.accent4);
      const accent5 = formatColor(variant.colors.accent5);
      const accent6 = formatColor(variant.colors.accent6);
      const accent7 = formatColor(variant.colors.accent7);
      yield {
        path: `${variant.title.kebab}.xml`,
        content: source`
          <value name="ColorTable00" type="dword" data="${shade0}" />
          <value name="ColorTable01" type="dword" data="${accent5}" />
          <value name="ColorTable02" type="dword" data="${accent3}" />
          <value name="ColorTable03" type="dword" data="${accent4}" />
          <value name="ColorTable04" type="dword" data="${accent0}" />
          <value name="ColorTable05" type="dword" data="${accent6}" />
          <value name="ColorTable06" type="dword" data="${accent1}" />
          <value name="ColorTable07" type="dword" data="${shade6}" />
          <value name="ColorTable08" type="dword" data="${shade1}" />
          <value name="ColorTable09" type="dword" data="${accent5}" />
          <value name="ColorTable10" type="dword" data="${accent3}" />
          <value name="ColorTable11" type="dword" data="${accent4}" />
          <value name="ColorTable12" type="dword" data="${accent0}" />
          <value name="ColorTable13" type="dword" data="${accent7}" />
          <value name="ColorTable14" type="dword" data="${accent2}" />
          <value name="ColorTable15" type="dword" data="${shade7}" />
          <value name="ColorTable16" type="dword" data="${shade0}" />
          <value name="ColorTable17" type="dword" data="${accent0}" />
          <value name="ColorTable18" type="dword" data="${accent3}" />
          <value name="ColorTable19" type="dword" data="${accent1}" />
          <value name="ColorTable20" type="dword" data="${accent5}" />
          <value name="ColorTable21" type="dword" data="${accent6}" />
          <value name="ColorTable22" type="dword" data="${accent4}" />
          <value name="ColorTable23" type="dword" data="${shade6}" />
          <value name="ColorTable24" type="dword" data="${shade1}" />
          <value name="ColorTable25" type="dword" data="${accent0}" />
          <value name="ColorTable26" type="dword" data="${accent3}" />
          <value name="ColorTable27" type="dword" data="${accent2}" />
          <value name="ColorTable28" type="dword" data="${accent5}" />
          <value name="ColorTable29" type="dword" data="${accent7}" />
          <value name="ColorTable30" type="dword" data="${accent4}" />
          <value name="ColorTable31" type="dword" data="${shade7}" />
        `,
      };
    }
  },
  renderInstructions: (paths) => source`
    1. Open the ConEmu settings and navigate to Features > Colors. Take note of the location of \`ConEmu.xml\` for later.
    2. Create a new color scheme by typing a name in the "Schemes" field and clicking Save.
    3. Close ConEmu.
    4. Open \`ConEmu.xml\` and locate the color scheme name you typed in step 2.
    5. Replace the \`<value>\` elements \`ColorTable00\` through \`ColorTable31\` with the contents of your themer-generated XML (${paths
      .map((p) => `\`${p}\``)
      .join(
        ' or ',
      )}). Be sure to leave the others, like \`ExtendColors\`, etc. intact.
    6. Open ConEmu and select your theme again in settings.
  `,
};
export default template;