{ config, lib, pkgs, ... }: with lib; let colorType = types.str; color = (name: (mkOption { description = "${name} color of palette"; type = colorType; })); fromBase16 = { base00, base01, base02, base03, base04, base05, base06, base07 , base08, base09, base0A, base0B, base0C, base0D, base0E, base0F, ... }: builtins.mapAttrs (_: v: "#" + v) { bg = base00; fg = base07; gray = base03; alt = base02; dark = base01; red = base08; orange = base09; yellow = base0A; green = base0B; cyan = base0C; blue = base0D; purple = base0E; }; fromYAML = yaml: builtins.fromJSON (builtins.readFile (pkgs.stdenv.mkDerivation { name = "fromYAML"; phases = [ "buildPhase" ]; buildPhase = "echo '${yaml}' | ${pkgs.yaml2json}/bin/yaml2json > $out"; })); in { options = { themes = { colors = mkOption { description = "Set of colors from which the themes for various applications will be generated"; type = with types; submodule { options = { bg = color "background"; fg = color "foreground"; gray = color "gray"; alt = color "alternative"; dark = color "darker"; blue = color "blue"; green = color "green"; red = color "red"; orange = color "orange"; yellow = color "yellow"; cyan = color "cyan"; purple = color "purple"; }; }; }; }; }; config = { themes.colors = fromBase16 (fromYAML (builtins.readFile "${pkgs.imports.base16-unclaimed-schemes}/irblack.yaml")); # themes.colors = { # bg = "#114c00"; # bg = "#000000"; # fg = "#ffffff"; # # gray = "#9bb953"; # alt = "#27a6a2"; # dark = "#169300"; # # red = "#d12d17"; # orange = "#cf7a02"; # yellow = "#386c34"; # green = "#386c34"; # cyan = "#09d0a5"; # blue = "#a5d048"; # purple = "#d083be"; # }; }; }