{ inputs, config, lib, pkgs, system, ... }: with lib; let cfg = config.modules.desktop.themes; # TODO: gruvbox theme doesn't use these that much accent = "pink"; accentBase = "base17"; dark = true; darkString = if dark then "dark" else "light"; scheme = "${inputs.tt-schemes}/base24/gruvbox-${if dark then "dark" else "light"}.yaml"; pascalCase = s: (toUpper (substring 0 1 s)) + (toLower (substring 1 (stringLength s) s)); in { config = mkIf (cfg.active == "gruvbox") { scheme = scheme; modules.desktop.themes = { dark = dark; rounding = 0; gtkTheme = { name = "Gruvbox-${pascalCase accent}-${pascalCase darkString}-Compact"; package = pkgs.gruvbox-gtk-theme.override { colorVariants = [ darkString ]; themeVariants = [ accent ]; tweakVariants = [ "macos" ]; sizeVariants = [ "compact" ]; }; }; iconTheme = { name = "Gruvbox-Plus-${pascalCase darkString}"; package = pkgs.gruvbox-plus-icons; }; cursorTheme = { name = "macOS"; package = pkgs.apple-cursor; }; editor = { vscode = { colorTheme = { name = "Gruvbox ${pascalCase darkString} Medium"; extension = pkgs.vscode-extensions.jdinhlife.gruvbox; }; iconTheme = { name = "material-icon-theme"; extension = pkgs.vscode-extensions.pkief.material-icon-theme; }; }; }; niri = let colors = config.scheme.withHashtag; in with colors; { accent = colors.${accentBase}; inactive = "${base02}"; shadow = "${base11}"; background = if dark then "${base11}" else "${base05}"; }; waybarTop = "@define-color accent @${accentBase};"; wob = with config.scheme; { borderColor = "${base04}FF"; backgroundColor = "${base01}CC"; barColor = "${base05}FF"; }; rofiTop = "* { accent: @${accentBase}; }"; wezterm = '' config.color_scheme = 'Gruvbox${pascalCase darkString}' ''; vicinae = "gruvbox-${if dark then "dark" else "light"}"; }; }; }