Current derivation

This commit is contained in:
Filippo Berto 2021-05-21 22:30:33 +02:00
parent 0aae761f89
commit f7226d5fa6
20 changed files with 342 additions and 79 deletions

98
extralib.nix Normal file
View file

@ -0,0 +1,98 @@
{ lib ? (import <nixpkgs> {}).lib, ... }:
with lib;
with builtins;
{
lib = {
floats = rec {
_floatComponents = f: lib.strings.splitString "." (toString f);
ceil = f:
let
comp = _floatComponents f;
int = strings.toInt (head comp);
inc = if match "[1-9][[:digit:]]*" (head (tail comp)) != null then 1 else 0;
in
assert(isFloat f);
int + inc;
floor = f:
let
int = strings.toInt (head (_floatComponents f));
in
assert(isFloat f);
int;
toInt = f:
let
comp = _floatComponents f;
int = strings.toInt (head comp);
inc = if match "[5-9][[:digit:]]*" (head (tail comp)) != null then 1 else 0;
in
assert(isFloat f);
int + inc;
};
hex = rec {
parseDigit = c:
let
v = strings.toUpper c;
in
assert(match "[0-9A-F]" c != null);
{
"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;
}."${v}";
toDec = s:
let characters = stringToCharacters s;
values = map parseDigit characters;
value = foldl (acc: n: acc * 16 + n) 0 values;
in value;
fromDec = trivial.toHexString;
};
# colors = rec {
# colorFromHex = s:
# let rgba = match "#([[:xdigit:]]{2})([[:xdigit:]]{2})([[:xdigit:]]{2})([[:xdigit:]]{2})" s;
# rgb = match "#([[:xdigit:]]{2})([[:xdigit:]]{2})([[:xdigit:]]{2})" s;
# values = map hexToDec (if isNull rgb then rgba else rgb ++ [ "FF" ]);
# in {
# r = (head values) / 255.0;
# g = (head (tail values)) / 255.0;
# b = (head (drop 2 values)) / 255.0;
# a = (last values) / 255.0;
# };
# red = { r = 255.0; g = 0.0; b = 0.0; };
# green = { r = 0.0; g = 255.0; b = 0.0; };
# blue = { r = 0.0; g = 0.0; b = 255.0; };
# toRGBHex = { r, g, b, ... }:
# ''#${concatMapStrings (v: fixedWidthString 2 "0" (toHexString (v * 255))) [ r g b ]}'';
# toRGBAHex = { r, g, b, a }:
# ''#${concatMapStrings (v: fixedWidthString 2 "0" (toHexString v)) [ r g b a ]}'';
# toRgbHex = c: strings.toLower (toRGBHex c);
# toRgbaHex = c: strings.toLower (toRGBAHex c);
# };
};
}