read_colors <- function(file) {
  library(dplyr)
  text <- readLines(file, warn = FALSE) %>% 
    stringr::str_subset("#[0-9a-fA-F]{6}") # must be len-6 hex
  
  stringr::str_match_all(text, "\\$(.+)\\s*:\\s*(#[0-9a-fA-F]{6});") %>% 
    purrr::discard(~ length(.) < 1) %>% 
    purrr::map_dfr(~ tibble(name = .[, 2], color = .[, 3])) %>% 
    distinct(name, color) %>% 
    mutate(name = factor(name, unique(name)))
}


show_colors <- function(colors, ...) {
  ggplot(colors) +
    aes(1, 1, fill = color) +
    geom_tile() +
    facet_wrap(~ name + color, ...) +
    scale_fill_identity() +
    theme_void()
}
