Sebastian Walz 860d31cee1
Tohu vaBohu
2023-04-21 00:22:52 +02:00

85 lines
2.5 KiB
Nix

{ intrinsics, list, string, time, type, ... }:
let
Version# { major: string, minor: string, patch: string } -> Version
= type "Version"
{
from
= { major, minor, patch }:
Version.instanciate
{
inherit major minor patch;
};
};
in
{
compare#: string -> string -> int
= intrinsics.compareVersions;
deriveVersion#: ?
= dateTime:
let
dateTime' = time dateTime;
pad
= value:
if value == null
then
"00"
else if value < 10
then
"0${string value}"
else
string value;
month = pad dateTime'.month;
day = pad dateTime'.day;
hour = pad dateTime'.hour;
minute = pad dateTime'.minute;
second = pad dateTime'.second;
in
if dateTime' != null
then
"${string dateTime'.year}-${month}-${day}T${hour}:${minute}:${second}"
else
"dev";
language#: string?
= intrinsics.langVersion or null;
main#: string -> string
= version: "${string version.major}.${string version.minor}";
nix#: string?
= intrinsics.nixVersion or null;
parseDerivationName#: string -> { name: string, version: string }
= intrinsics.parseDrvName
or (
derivationName:
let
result = string.match "(([^-]|-[^0-9])*)-([0-9].*)" derivationName;
in
{
name = list.get result 0;
version = list.get result 2;
}
);
split#: string -> Version
= version:
let
result = string.split "[.]" version;
in
Version
{
major = list.get result 0;
minor = list.get result 1;
patch = list.get result 2;
};
split'#: string -> [ string ]
= intrinsics.splitVersion
or (
version:
string.splitAt "[.]" version
);
}