{ lib, ... }: let mkColorOption = description: lib.mkOption { inherit description; type = lib.types.str; }; in { options = { themes = lib.mkOption { type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { options = { foreground = { primary = mkColorOption "Primary color for foreground (text)"; secondary = mkColorOption "Secondary color for foreground (text)"; text = mkColorOption "Basic text color for stuff that's not primary, secondary etc."; active = mkColorOption "Color for foreground (text) when element is active"; activeAlt = mkColorOption "Color for foreground when element is active, and `active` color is used as background instead"; inactive = mkColorOption "Color for foreground (text) when element is inactive"; }; background = { primary = mkColorOption "Primary color for background"; secondary = mkColorOption "Primary color for background"; box = mkColorOption "Color for box elements"; inactive = mkColorOption "Color for foreground (text) when element is inactive"; active = mkColorOption "Color for background when element is active. When this is in use, use `foreground.activeAlt` for text."; }; urgent = mkColorOption "Urgent windows"; }; })); }; }; config = { themes.default = { foreground = { primary = "51afef"; secondary = "55eddc"; activeAlt = "d5d5d5"; text = "cccccc"; active = "8babf0"; inactive = "737373"; }; background = { primary = "222223"; secondary = "444444"; active = "8babf0"; inactive = "555e60"; box = "121212"; }; urgent = "c45500"; }; }; }