Добавление генераторов

main
lambda 2 weeks ago
parent 0d881d990f
commit c493d45395

@ -0,0 +1,36 @@
import type { Pallette } from "../pallette";
export function generateAlacritty(p: Pallette): string {
// Map palette to a TOML 16-color layout similar to the example
// Assign neutral slots (yellow/blue/magenta/cyan) using shades and fg
const toml = `# Generated by mono-theme-generator
[colors.primary]
background = "${p.bg}"
foreground = "${p.fg}"
[colors.cursor]
text = "${p.bg}"
cursor = "${p.fg}"
[colors.normal]
black = "${p.bg}"
red = "${p.red}"
green = "${p.green}"
yellow = "${p.shade2}"
blue = "${p.shade3}"
magenta = "${p.shade4}"
cyan = "${p.fg}"
white = "${p.fg}"
[colors.bright]
black = "${p.shade1}"
red = "${p.red}"
green = "${p.green}"
yellow = "${p.shade2}"
blue = "${p.shade3}"
magenta = "${p.shade4}"
cyan = "${p.fg}"
white = "${p.fg}"
`;
return toml;
}

@ -0,0 +1,34 @@
import type { Pallette } from "../pallette";
export function generateEmacsTheme(p: Pallette): string {
// Minimal elisp theme that sets default faces and ansi-color mapping
return `;;; mono-generated-theme.el --- autogenerated theme
(deftheme mono-generated "Auto-generated minimal mono theme")
(let ((class '((class color) (min-colors 89))))
(custom-theme-set-faces
'mono-generated
;; basics
'(default ((,class (:background "${p.bg}" :foreground "${p.fg}"))))
'(cursor ((,class (:background "${p.fg}"))))
'(fringe ((,class (:background "${p.bg}"))))
'(region ((,class (:background "${p.shade2}" :foreground "${p.bg}"))))
'(minibuffer-prompt ((,class (:foreground "${p.shade4}" :weight bold))))
;; syntax-ish hints
'(font-lock-keyword-face ((,class (:foreground "${p.shade4}"))))
'(font-lock-function-name-face ((,class (:foreground "${p.shade3}"))))
'(font-lock-comment-face ((,class (:foreground "${p.shade1}"))))
'(success ((,class (:foreground "${p.green}"))))
'(error ((,class (:foreground "${p.red}"))))
;; modeline
'(mode-line ((,class (:background "${p.shade3}" :foreground "${p.fg}" :box nil))))
'(mode-line-inactive ((,class (:background "${p.shade1}" :foreground "${p.shade2}" :box nil))))
)
;; ANSI color mapping for terminal emulation inside Emacs
(setq ansi-color-names-vector
[ "${p.bg}" "${p.red}" "${p.green}" "${p.shade2}" "${p.shade3}" "${p.shade4}" "${p.fg}" "${p.fg}" ])
(provide-theme 'mono-generated))
;;; mono-generated-theme.el ends here
`;
}

@ -0,0 +1,52 @@
import type { Pallette } from "../pallette";
const hexToRgbShort = (hex: string) => hex.replace("#", "").toLowerCase();
// Strategy for mapping:
// - $color0 = bg
// - $color1..$color7 use a mix: red, green, shade1..shade4, fg
// - $color8..$color15 are bright variants / repeats
export function generateHyprland(p: Pallette): string {
const h = (s: string) => `rgb(${hexToRgbShort(s)})`;
const mapping = {
color0: p.bg,
color1: p.red,
color2: p.green,
color3: p.shade1,
color4: p.shade2,
color5: p.shade3,
color6: p.shade4,
color7: p.fg,
color8: p.shade1,
color9: p.red,
color10: p.green,
color11: p.shade2,
color12: p.shade3,
color13: p.shade4,
color14: p.fg,
color15: p.fg,
};
return `# Generated by mono-theme-generator
$foreground = ${h(p.fg)}
$background = ${h(p.bg)}
$cursor = ${h(p.fg)}
$color0 = ${h(mapping.color0)}
$color1 = ${h(mapping.color1)}
$color2 = ${h(mapping.color2)}
$color3 = ${h(mapping.color3)}
$color4 = ${h(mapping.color4)}
$color5 = ${h(mapping.color5)}
$color6 = ${h(mapping.color6)}
$color7 = ${h(mapping.color7)}
$color8 = ${h(mapping.color8)}
$color9 = ${h(mapping.color9)}
$color10 = ${h(mapping.color10)}
$color11 = ${h(mapping.color11)}
$color12 = ${h(mapping.color12)}
$color13 = ${h(mapping.color13)}
$color14 = ${h(mapping.color14)}
$color15 = ${h(mapping.color15)}
`;
}

@ -0,0 +1,16 @@
import { mkdir } from "node:fs/promises";
import { generateAlacritty } from "./generators/allacrity.ts";
import { generateHyprland } from "./generators/hyprland.ts";
import { generateEmacsTheme } from "./generators/emacs.ts";
import { pallette } from "./pallette.ts";
const al = generateAlacritty(pallette);
const hy = generateHyprland(pallette);
const em = generateEmacsTheme(pallette);
await mkdir("dist", { recursive: true });
await Bun.write("dist/alacritty.toml", al);
await Bun.write("dist/colors.conf", hy);
await Bun.write("dist/theme.el", em);
console.log("Wrote dist/alacritty.yml, dist/hyprland.conf, dist/theme.el");
Loading…
Cancel
Save