# Version string functions. { lib }: rec { /** Break a version string into its component parts. # Examples :::{.example} ## `splitVersion` usage example ```nix splitVersion "1.2.3" => ["1" "2" "3"] ``` ::: */ splitVersion = builtins.splitVersion; /** Get the major version string from a string. # Inputs `v` : 1\. Function argument # Examples :::{.example} ## `major` usage example ```nix major "1.2.3" => "1" ``` ::: */ major = v: builtins.elemAt (splitVersion v) 0; /** Get the minor version string from a string. # Inputs `v` : 1\. Function argument # Examples :::{.example} ## `minor` usage example ```nix minor "1.2.3" => "2" ``` ::: */ minor = v: builtins.elemAt (splitVersion v) 1; /** Get the patch version string from a string. # Inputs `v` : 1\. Function argument # Examples :::{.example} ## `patch` usage example ```nix patch "1.2.3" => "3" ``` ::: */ patch = v: builtins.elemAt (splitVersion v) 2; /** Get string of the first two parts (major and minor) of a version string. # Inputs `v` : 1\. Function argument # Examples :::{.example} ## `majorMinor` usage example ```nix majorMinor "1.2.3" => "1.2" ``` ::: */ majorMinor = v: builtins.concatStringsSep "." (lib.take 2 (splitVersion v)); /** Pad a version string with zeros to match the given number of components. # Inputs `n` : 1\. Function argument `version` : 2\. Function argument # Examples :::{.example} ## `pad` usage example ```nix pad 3 "1.2" => "1.2.0" pad 3 "1.3-rc1" => "1.3.0-rc1" pad 3 "1.2.3.4" => "1.2.3" ``` ::: */ pad = n: version: let numericVersion = lib.head (lib.splitString "-" version); versionSuffix = lib.removePrefix numericVersion version; in lib.concatStringsSep "." (lib.take n (lib.splitVersion numericVersion ++ lib.genList (_: "0") n)) + versionSuffix; }