From 9698f044bea6abc5953596c53a046860e2f46a43 Mon Sep 17 00:00:00 2001 From: RGBCube Date: Sun, 26 Nov 2023 18:42:02 +0300 Subject: [PATCH] Add theme generation shell script --- generate-themes.nu | 71 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100755 generate-themes.nu diff --git a/generate-themes.nu b/generate-themes.nu new file mode 100755 index 0000000..28b55e3 --- /dev/null +++ b/generate-themes.nu @@ -0,0 +1,71 @@ +#!/usr/bin/env nu + +def theme-to-nix [ + theme: record, # The theme to convert to Nix. +] { + $theme + | to json + | lines + | each { |line| + if ($line | str trim | str starts-with '"base') { + let line_parts = $line + | str replace '"' "" + | str replace '"' "" + | str replace "," ";" + | split row ": " + + let line = $line_parts.0 + " = " + ($line_parts.1 | str upcase) + + if not ($line | str ends-with ";") { + $line + ";" + } else { + $line + } + } else { + $line + | str replace "scheme" "name " + | str replace '"' "" + | str replace '"' "" + | str replace ":" " =" + | str replace "," ";" + } + } + | append "" + | str join "\n" +} + +def generate-valid-themes [] { + echo "generating themes.nix..." + + ls themes + | each { $in.name | str replace ".nix" "" } + | each { |it| ' "' + ($it | path basename) + '" = import "' + $it + '.nix";' } + | prepend "{" + | append "}\n" + | str join "\n" + | save --force themes.nix +} + +def main [] { + if not ("base16-schemes" | path exists) { + echo "base16-schemes doesn't exist, cloning..." + git clone https://github.com/tinted-theming/base16-schemes + } else { + echo "base16-schemes exists, updating" + cd base16-schemes + git pull + cd .. + } + + ls base16-schemes + | filter { ($in.name | str ends-with ".yml") or ($in.name | str ends-with ".yaml") } + | each { |it| + let new_path = "themes/" + ($it.name | path basename | split row "." | first) + ".nix" + + echo $"converting ($it.name) to ($new_path)..." + + theme-to-nix (open $it.name) | save --force $new_path + } + + generate-valid-themes +}