64 lines
1.6 KiB
Nix
64 lines
1.6 KiB
Nix
{ lib, ... }:
|
|
rec
|
|
{
|
|
nohash = s: builtins.substring 1 7 s;
|
|
|
|
slice-hex = hex: { r = builtins.substring 0 2 hex; g = builtins.substring 2 2 hex; b = builtins.substring 4 5 hex; };
|
|
|
|
# https://github.com/bertof/nix-rice
|
|
rune-to-num = c:
|
|
let
|
|
k = lib.strings.toUpper c;
|
|
dict = {
|
|
"0" = 0;
|
|
"1" = 1;
|
|
"2" = 2;
|
|
"3" = 3;
|
|
"4" = 4;
|
|
"5" = 5;
|
|
"6" = 6;
|
|
"7" = 7;
|
|
"8" = 8;
|
|
"9" = 9;
|
|
"A" = 10;
|
|
"B" = 11;
|
|
"C" = 12;
|
|
"D" = 13;
|
|
"E" = 14;
|
|
"F" = 15;
|
|
};
|
|
in
|
|
assert(builtins.hasAttr k dict);
|
|
builtins.getAttr k dict;
|
|
|
|
drune-to-255 = hex: (rune-to-num (builtins.substring 0 1 hex)) * 15 + (rune-to-num (builtins.substring 1 2 hex));
|
|
|
|
hex-to-rgb-comma-string = hex: let color = (slice-hex (nohash hex)); in "${builtins.toString (drune-to-255 color.r)},${builtins.toString (drune-to-255 color.g)},${builtins.toString (drune-to-255 color.b)}";
|
|
|
|
num-to-rune = n:
|
|
let
|
|
ns = builtins.toString n;
|
|
dict = {
|
|
"0" = "0";
|
|
"1" = "1";
|
|
"2" = "2";
|
|
"3" = "3";
|
|
"4" = "4";
|
|
"5" = "5";
|
|
"6" = "6";
|
|
"7" = "7";
|
|
"8" = "8";
|
|
"9" = "9";
|
|
"10" = "A";
|
|
"11" = "B";
|
|
"12" = "C";
|
|
"13" = "D";
|
|
"14" = "E";
|
|
"15" = "F";
|
|
};
|
|
in
|
|
assert(builtins.hasAttr ns dict);
|
|
builtins.getAttr ns dict;
|
|
|
|
float-to-drune = f: "${num-to-rune (builtins.floor((255*f) / 16))}${num-to-rune (builtins.floor(255*f) - (builtins.floor((255 * f) / 16) * 16))}";
|
|
} |