1

Modules/Color: Add a helper script to output the current colorscheme to the terminal

This commit is contained in:
2025-07-19 20:20:10 +02:00
parent f62f7b4c64
commit 0eeb9623b2

View File

@ -9,67 +9,87 @@
in {
options.modules.color = import ./options.nix {inherit lib mylib;};
config = let
colorDefs = import ./schemes/${color.scheme}.nix;
mkColorAssignment = defs: key: {${key} = defs.${key};};
mkStringColorAssignment = defs: key: {${key} = "#${defs.${key}}";};
mkRgbColorAssignment = defs: key: {${key} = mylib.color.hexToRGB defs.${key};};
mkRgbStringColorAssignment = defs: key: {${key} = mylib.color.hexToRGBString "," defs.${key};};
in {
# Helper script that processes a visual mode selection and replaces
# referenced colors in-place with their counterparts in this module.
# Usage: ":'<,'>!applyColors<cr>"
config = {
home.packages = let
mkPythonColorDef = name: value: " '${name}': '${value}',";
# Helper script that processes a visual mode selection and replaces
# referenced colors in-place with their counterparts in this module.
# Usage: ":'<,'>!applyColors<cr>"
applyColors =
pkgs.writers.writePython3Bin
"applyColors"
{
doCheck = false;
}
(
builtins.concatStringsSep "\n" [
"colors: dict[str, str] = {"
(config.modules.color.hex
|> builtins.mapAttrs mkPythonColorDef
|> builtins.attrValues
|> builtins.concatStringsSep "\n")
"}"
(builtins.readFile ./applyColors.py)
]
);
in [applyColors];
(builtins.concatStringsSep "\n" [
"colors: dict[str, str] = {"
(color.hex
|> builtins.mapAttrs mkPythonColorDef
|> builtins.attrValues
|> builtins.concatStringsSep "\n")
"}"
(builtins.readFile ./applyColors.py)
]);
mkBashColorEcho = let
pastel = "${pkgs.pastel}/bin/pastel";
in
name: value: ''printf "%-12s" " ${name}:" && ${pastel} color "${value}" | ${pastel} format hex'';
# Helper script that prints the color scheme to the terminal
printNixColors =
pkgs.writeShellScriptBin
"printNixColors"
(builtins.concatStringsSep "\n" [
''echo " ${color.scheme}:"''
''echo ${lib.concatStrings (lib.replicate 20 "=")}''
(color.hexS
|> builtins.mapAttrs mkBashColorEcho
|> builtins.attrValues
|> builtins.concatStringsSep "\n")
''echo ${lib.concatStrings (lib.replicate 20 "=")}''
]);
in [
applyColors
printNixColors
];
# This module sets its own options to the values specified in a colorscheme file.
modules.color = {
modules.color = let
colorDefs = import ./schemes/${color.scheme}.nix;
mkColorAssignment = key: {${key} = colorDefs.${key};};
mkStringColorAssignment = key: {${key} = "#${colorDefs.${key}}";};
mkRgbColorAssignment = key: {${key} = mylib.color.hexToRGB colorDefs.${key};};
mkRgbStringColorAssignment = key: {${key} = mylib.color.hexToRGBString "," colorDefs.${key};};
in {
# RRGGBB (0-F)
hex =
colorDefs
|> builtins.attrNames
|> builtins.map (mkColorAssignment colorDefs)
|> builtins.map mkColorAssignment
|> lib.mergeAttrsList;
# #RRGGBB (0-F)
hexS =
colorDefs
|> builtins.attrNames
|> builtins.map (mkStringColorAssignment colorDefs)
|> builtins.map mkStringColorAssignment
|> lib.mergeAttrsList;
# [RR GG BB] (0-255)
rgb =
colorDefs
|> builtins.attrNames
|> builtins.map (mkRgbColorAssignment colorDefs)
|> builtins.map mkRgbColorAssignment
|> lib.mergeAttrsList;
# RR,GG,BB (0-255)
rgbS =
colorDefs
|> builtins.attrNames
|> builtins.map (mkRgbStringColorAssignment colorDefs)
|> builtins.map mkRgbStringColorAssignment
|> lib.mergeAttrsList;
};
};