{ pkgs, lib, color, accent }:
let
  colors = lib.mapAttrs (_: lib.replaceStrings [ "#" ] [ "rgb:" ]) {
    accent_fg = accent.fg;
    accent_color = accent.color;
    bg_light = color.bg_light;
    bg_dark = color.bg_dark;
    nontxt = color.nontxt;
    orange = color.normal.orange;
    brown = color.normal.brown;
  };
in
with colors;
''
  face global crosshairs_line     default,${bg_dark}
  face global crosshairs_column   default+b

  # For Code
  face global value magenta
  face global type yellow
  face global variable blue
  face global module ${brown}
  face global function ${orange}
  face global string green
  face global keyword ${accent_color}
  face global operator yellow
  face global attribute cyan
  face global comment ${bg_light}
  face global documentation comment
  face global meta +i@function
  face global builtin blue

  # For markup
  face global title blue
  face global header cyan
  face global mono green
  face global block magenta
  face global link cyan
  face global bullet cyan
  face global list yellow

  # builtin faces
  face global Default default,default

  face global PrimaryCursor      ${accent_fg},${accent_color}+fg
  face global PrimaryCursorEol   PrimaryCursor
  face global PrimarySelection   default,${bg_light}+f

  face global SecondaryCursor    default,default+rfg
  face global SecondaryCursorEol SecondaryCursor
  face global SecondarySelection PrimarySelection

  face global InactiveCursor     ${accent_fg},${bg_light}+fg

  face global MenuForeground ${accent_fg},${accent_color}
  face global MenuBackground default,${bg_dark}
  face global MenuInfo cyan

  face global Information default,${bg_dark}
  face global Error default,red+g

  face global StatusLine      %sh{
      printf "rgb:"
      head /dev/urandom |
      base64 |
      rg --text -o "${color.random_range}" |
      head -n 6 |
      sd '\n' ""
  }
  face global StatusLineMode  StatusLine
  face global StatusLineInfo  StatusLine
  face global StatusLineValue StatusLine
  face global StatusCursor    ${accent_fg},${accent_color}

  face global Prompt yellow,default
  try %{add-highlighter global/ show-matching}
  face global MatchingChar ${accent_color},default+b

  # Goodies
  try %{add-highlighter global/number-lines number-lines -relative -hlcursor}
  face global LineNumbers         ${bg_light},default
  face global LineNumberCursor    default,${bg_dark}
  face global LineNumbersWrapped  red,default

  try %{add-highlighter global/ show-whitespaces}
  face global Whitespace ${nontxt},default+f
  face global BufferPadding ${nontxt},default
  ## highlight trailing whitespace
  # add-highlighter global/ regex '\h*$' 0:red,red+u

  face global Reference default+bu
  face global InlayHint ${bg_light}+buif

  # Lsp
'' + (
  lib.concatStringsSep "\n" (lib.mapAttrsToList
    (name: color: ''
      face global HighlightDiagnostic${name} ${color},default+bu
      face global Diagnostic${name} ${color},default+bu
      face global TextDiagnostic${name} ${color},default+b
      face global InlayDiagnostic${name} ${color},default+br
    '')
    {
      Error = "red";
      Warning = "yellow";
      Hint = "blue";
    })
)

