{ lib, config, ... }: let inherit (lib) mkIf mkEnableOption mkPackageOption mkOption types concatStringsSep typeOf ; cfg = config.programs.culr; in { options.programs.culr = { enable = mkEnableOption "culr"; package = mkPackageOption { } "" { }; pattern = mkOption { type = with types; either str (listOf int); default = [ ]; description = "colourising pattern"; }; palette = mkOption { type = with types; listOf str; default = [ ]; description = "palette to use in comma separated RGB hex eg. #0f0f0f"; }; separators = mkOption { type = with types; str; default = ""; description = "char list of separators to use"; }; delimiters = mkOption { type = with types; str; default = ""; description = "char list of delimiters to use"; }; }; config = mkIf cfg.enable { environment.systemPackages = [ cfg.package ]; environment.sessionVariables = { CULR_ORDER = let serialise = { list = list: concatStringsSep ";" (map (i: builtins.toString i) list); string = s: s; }; in mkIf (cfg.pattern != "" && cfg.pattern != [ ]) (serialise.${typeOf cfg.pattern} cfg.pattern); CULR_PALETTE = mkIf (cfg.palette != [ ]) (concatStringsSep ";" cfg.palette); CULR_SEP = mkIf (cfg.separators != "") (cfg.separators); CULR_DELIM = mkIf (cfg.delimiters != "") (cfg.delimiters); }; }; }