{ pkgs, config, lib, ... }: let # generate shell command options for kmscon fom an attrset generateOptions = with builtins; ( opts: toString ( attrValues ( mapAttrs (name: value: "--${name} ${toString value}") opts ) ) ); # generate a hexadecimal number lookup table to get integers from them hexLookupTable = with lib; (listToAttrs (genList (i: { name = let r = toHexString i; in ( # pad with 0 in front if only 1 digit if (stringLength r) == 1 then "0${r}" else r ); value = toString i; }) 256)); # "parse" hex color strings and convert them to kmscon options hexToOpt = with lib; (color: concatStringsSep "," [ (getAttr (substring 1 2 (toUpper color)) hexLookupTable) (getAttr (substring 3 2 (toUpper color)) hexLookupTable) (getAttr (substring 5 2 (toUpper color)) hexLookupTable) ]); in { # TODO: global colorscheme vars for everything console.colors = [ "282828" "cc241d" "98971a" "d79921" "458588" "b16286" "689d6a" "a89984" "928374" "fb4934" "b8bb26" "fabd2f" "83a598" "d3869b" "8ec07c" "ebdbb2" ]; services.kmscon = { enable = true; # fonts = [ # { # name = "Departure Mono Nerd Font"; # package = pkgs.nerd-fonts.departure-mono; # } # ]; extraConfig = "font-size=14"; # extraOptions = "--term xterm-256color"; extraOptions = generateOptions { xkb-layout = config.services.xserver.xkb.layout; xkb-variant = config.services.xserver.xkb.variant; # palette = "custom"; # palette-foreground = hexToOpt "#ebdbb2"; # palette-background = hexToOpt "#282828"; # palette-black = hexToOpt "#282828"; # palette-red = hexToOpt "#cc241d"; # palette-green = hexToOpt "#98971a"; # palette-yellow = hexToOpt "#d79921"; # palette-blue = hexToOpt "#458588"; # palette-magenta = hexToOpt "#b16286"; # palette-cyan = hexToOpt "#689d6a"; # palette-light-grey = hexToOpt "#a89984"; # palette-dark-grey = hexToOpt "#928374"; # palette-light-red = hexToOpt "#fb4934"; # palette-light-green = hexToOpt "#b8bb26"; # palette-light-yellow = hexToOpt "#fabd2f"; # palette-light-blue = hexToOpt "#83a598"; # palette-light-magenta = hexToOpt "#d3869b"; # palette-light-cyan = hexToOpt "#8ec07c"; # palette-white = hexToOpt "#ebdbb2"; }; hwRender = true; }; }