# Defines the global color theme option. { lib, ... }: with lib; with types; # Define the type in a let binding to prevent too much rightward # drift in the option configuration. let themeType = let # Named colors are colors like "red" or "black". named = submodule { options = { normal = mkOption { type = str; }; bright = mkOption { type = str; }; pastel = mkOption { type = str; }; }; }; # Special colors are more abstract, for example # "foreground". special = submodule { options = { primary = mkOption { type = str; }; normal = mkOption { type = str; }; slight = mkOption { type = str; }; }; }; in submodule { options = { foreground = mkOption { type = special; }; background = mkOption { type = special; }; grayscales = mkOption { type = listOf str; }; red = mkOption { type = named; }; green = mkOption { type = named; }; blue = mkOption { type = named; }; yellow = mkOption { type = named; }; purple = mkOption { type = named; }; cyan = mkOption { type = named; }; pink = mkOption { type = named; }; orange = mkOption { type = named; }; misc = mkOption { type = attrsOf str; }; hex = mkOption { type = themeType; }; }; }; in { options.custom.gui.theme = mkOption { type = themeType; description = '' Color theme used across the installation for various GUI elements and terminal colors. ''; }; }