{ lib }: let # extractLatestVersionFromHtml :: String -> String extractLatestVersionFromHtml = htmlString: let majorMinorPatchGroup = "([0-9]+\\.[0-9]+\\.[0-9]+)"; splittedVersions = builtins.split "href=\"${majorMinorPatchGroup}" htmlString; stableVersions = builtins.concatLists (builtins.filter (e: builtins.isList e) splittedVersions); in if stableVersions == [ ] then abort "Failed to extract versions from html." else lib.last (builtins.sort builtins.lessThan stableVersions); # getHtml :: String -> String getHtml = url: builtins.readFile (builtins.fetchurl url); # getLatestStableVersion :: String getLatestStableVersion = extractLatestVersionFromHtml (getHtml "https://download.documentfoundation.org/libreoffice/stable/"); # extractSha256FromHtml :: String -> String extractSha256FromHtml = htmlString: let sha256 = (builtins.match ".*([0-9a-fA-F]{64}).*" htmlString); in if sha256 == [ ] then abort "Failed to extract sha256 from html." else builtins.head sha256; # getSha256 :: String -> String getSha256 = dmgUrl: oldVersion: newVersion: extractSha256FromHtml (getHtml (getSha256Url dmgUrl oldVersion newVersion)); # getSha256Url :: String -> String -> String -> String getSha256Url = dmgUrl: oldVersion: newVersion: (builtins.replaceStrings [ oldVersion ] [ newVersion ] dmgUrl) + ".sha256"; in { inherit extractLatestVersionFromHtml getHtml getLatestStableVersion extractSha256FromHtml getSha256 getSha256Url; }