feat: add lib.fetchurl function (#27)

See comment in `tidepool/src/lib/fetchurl.nix` for details on rationale.

I've made this a function in `lib` instead of defining this as a builder, since we don't have a great mechanism at the moment for specifying the source of a package as another package. We'll need to tackle this eventually, but given that this is a bit of a special case in that it's only intended to be used to fetch sources during bootstrap, I think it's fine to just have this be a function that returns a derivation, instead of being a full builder. Open to other opinions, though.

Reviewed-on: #27
Reviewed-by: vlinkz <vlinkz@snowflakeos.org>
Co-authored-by: Ruby Iris Juric <ruby@srxl.me>
Co-committed-by: Ruby Iris Juric <ruby@srxl.me>
This commit is contained in:
Ruby Iris Juric 2025-10-01 05:20:06 +00:00 committed by vlinkz
parent 956d1447d1
commit 0ae450a116
29 changed files with 168 additions and 94 deletions

View file

@ -1,5 +1,6 @@
{
includes = [
./fetchurl.nix
./options.nix
./packages.nix
./platforms.nix

View file

@ -0,0 +1,73 @@
{
config = {
# This function is a vendored version of <nix/fetchurl.nix>. It uses the (largely undocumented) builtin:fetchurl
# builder for derivations to give us a way to download files (eg. source tarballs) in the early bootstrap phase,
# before we have access to tools like curl. It functions almost identically to the builtins.fetchurl function,
# except it downloads files during the derivation's build, instead of during Nix evaluation, preventing evaluation
# from being blocked by downloads.
#
# Most packages should avoid using this function, and instead prefer using builders to download sources, such as
# (TODO: create these).
#
# Original source: https://git.lix.systems/lix-project/lix/src/commit/6599be1a9f76f0fba2a6905ea85235aeb7b7eae9/lix/libexpr/fetchurl.nix
lib.fetchurl =
{
# URL of file to download
url,
# SRI hash of downloaded file
hash ? "",
# Legacy, base32-encoded hash specifications
md5 ? "",
sha1 ? "",
sha256 ? "",
sha512 ? "",
outputHash ?
if hash != "" then
hash
else if sha512 != "" then
sha512
else if sha1 != "" then
sha1
else if md5 != "" then
md5
else
sha256,
outputHashAlgo ?
if hash != "" then
""
else if sha512 != "" then
"sha512"
else if sha1 != "" then
"sha1"
else if md5 != "" then
"md5"
else
"sha256",
name ? baseNameOf url,
# Make the downloaded file executable (ie. chmod 755)
executable ? false,
# If the downloaded file is an archive, extract it before adding to the store
# NOTE: Only appears to unpack .xz archives?
unpack ? false,
}:
builtins.derivation {
inherit
name
url
executable
unpack
;
builder = "builtin:fetchurl";
system = "builtin";
preferLocalBuild = true;
inherit outputHashAlgo outputHash;
outputHashMode = if unpack || executable then "recursive" else "flat";
urls = [ url ];
};
};
}

View file

@ -38,9 +38,9 @@ in
builder = builders.foundation.basic;
src = builtins.fetchurl {
src = lib.fetchurl {
url = "${mirrors.gnu}/bash/bash-${version}.tar.gz";
sha256 = "132qng0jy600mv1fs95ylnlisx2wavkkgpb19c6kmz7lnmjhjwhk";
hash = "sha256-E3IJZbX0/DoNS2HdN+dWXHQdqaW+JO3CrgAYL8GzWIw=";
};
deps = {

View file

@ -77,9 +77,9 @@ in
builder = builders.foundation.basic;
src = builtins.fetchurl {
src = lib.fetchurl {
url = "${mirrors.gnu}/binutils/binutils-${version}.tar.xz";
sha256 = "rppXieI0WeWWBuZxRyPy0//DHAMXQZHvDQFb3wYAdFA=";
hash = "sha256-rppXieI0WeWWBuZxRyPy0//DHAMXQZHvDQFb3wYAdFA=";
};
deps = {

View file

@ -31,9 +31,9 @@ in
builder = builders.foundation.basic;
src = builtins.fetchurl {
src = lib.fetchurl {
url = "${mirrors.gnu}/bison/bison-${version}.tar.xz";
sha256 = "m7oCFMz38QecXVkhAEUie89hlRmEDr+oDNOEnP9aW/I=";
hash = "sha256-m7oCFMz38QecXVkhAEUie89hlRmEDr+oDNOEnP9aW/I=";
};
deps = {

View file

@ -40,9 +40,9 @@ in
builder = builders.foundation.basic;
src = builtins.fetchurl {
src = lib.fetchurl {
url = "https://sourceware.org/pub/bzip2/bzip2-${version}.tar.gz";
sha256 = "0s92986cv0p692icqlw1j42y9nld8zd83qwhzbqd61p1dqbh6nmb";
hash = "sha256-q1oDF27hBtPw+pDjgdpHjdrkBZGBU8yiSOaCzQxKImk=";
};
deps = {

View file

@ -44,9 +44,9 @@ in
builder = builders.foundation.basic;
src = builtins.fetchurl {
src = lib.fetchurl {
url = "${mirrors.gnu}/coreutils/coreutils-${version}.tar.gz";
sha256 = "X2ANkJOXOwr+JTk9m8GMRPIjJlf0yg2V6jHHAutmtzk=";
hash = "sha256-X2ANkJOXOwr+JTk9m8GMRPIjJlf0yg2V6jHHAutmtzk=";
};
deps = {

View file

@ -37,9 +37,9 @@ in
builder = builders.foundation.basic;
src = builtins.fetchurl {
src = lib.fetchurl {
url = "${mirrors.gnu}/diffutils/diffutils-${version}.tar.xz";
sha256 = "kOXpPMck5OvhLt6A3xY0Bjx6hVaSaFkZv+YLVWyb0J4=";
hash = "sha256-kOXpPMck5OvhLt6A3xY0Bjx6hVaSaFkZv+YLVWyb0J4=";
};
deps = {

View file

@ -37,9 +37,9 @@ in
builder = builders.foundation.basic;
src = builtins.fetchurl {
src = lib.fetchurl {
url = "${mirrors.gnu}/findutils/findutils-${version}.tar.xz";
sha256 = "or+4wJ1DZ3DtxZ9Q+kg+eFsWGjt7nVR1c8sIBl/UYv4=";
hash = "sha256-or+4wJ1DZ3DtxZ9Q+kg+eFsWGjt7nVR1c8sIBl/UYv4=";
};
deps = {

View file

@ -37,9 +37,9 @@ in
builder = builders.foundation.basic;
src = builtins.fetchurl {
src = lib.fetchurl {
url = "${mirrors.gnu}/gawk/gawk-${version}.tar.gz";
sha256 = "lFrvfM/xAfILIqEIArwAXplKsrjqPnJMwaGXxi9B9lA=";
hash = "sha256-lFrvfM/xAfILIqEIArwAXplKsrjqPnJMwaGXxi9B9lA=";
};
deps = {

View file

@ -81,29 +81,29 @@ in
isl.version = "0.24";
src = {
gcc = builtins.fetchurl {
gcc = lib.fetchurl {
url = "${mirrors.gnu}/gcc/gcc-${version}/gcc-${version}.tar.xz";
sha256 = "4nXnZEKmBnNBon8Exca4PYYTFEAEwEE1KIY9xrXHQ9o=";
hash = "sha256-4nXnZEKmBnNBon8Exca4PYYTFEAEwEE1KIY9xrXHQ9o=";
};
gmp = builtins.fetchurl {
gmp = lib.fetchurl {
url = "${mirrors.gnu}/gmp/gmp-${config.gmp.version}.tar.xz";
sha256 = "o8K4AgG4nmhhb0rTC8Zq7kknw85Q4zkpyoGdXENTiJg=";
hash = "sha256-o8K4AgG4nmhhb0rTC8Zq7kknw85Q4zkpyoGdXENTiJg=";
};
mpfr = builtins.fetchurl {
mpfr = lib.fetchurl {
url = "${mirrors.gnu}/mpfr/mpfr-${config.mpfr.version}.tar.xz";
sha256 = "J3gHNTpnJpeJlpRa8T5Sgp46vXqaW3+yeTiU4Y8fy7I=";
hash = "sha256-J3gHNTpnJpeJlpRa8T5Sgp46vXqaW3+yeTiU4Y8fy7I=";
};
mpc = builtins.fetchurl {
mpc = lib.fetchurl {
url = "${mirrors.gnu}/mpc/mpc-${config.mpc.version}.tar.gz";
sha256 = "q2QkkvXPiCt0qgy3MM1BCoHtzb7IlRg86TDnBsHHWbg=";
hash = "sha256-q2QkkvXPiCt0qgy3MM1BCoHtzb7IlRg86TDnBsHHWbg=";
};
isl = builtins.fetchurl {
isl = lib.fetchurl {
url = "https://gcc.gnu.org/pub/gcc/infrastructure/isl-${config.isl.version}.tar.bz2";
sha256 = "/PeN2WVsEOuM+fvV9ZoLawE4YgX+GTSzsoegoYmBRcA=";
hash = "sha256-/PeN2WVsEOuM+fvV9ZoLawE4YgX+GTSzsoegoYmBRcA=";
};
};

View file

@ -102,29 +102,29 @@ in
isl.version = "0.24";
src = {
gcc = builtins.fetchurl {
gcc = lib.fetchurl {
url = "${mirrors.gnu}/gcc/gcc-${version}/gcc-${version}.tar.xz";
sha256 = "4nXnZEKmBnNBon8Exca4PYYTFEAEwEE1KIY9xrXHQ9o=";
hash = "sha256-4nXnZEKmBnNBon8Exca4PYYTFEAEwEE1KIY9xrXHQ9o=";
};
gmp = builtins.fetchurl {
gmp = lib.fetchurl {
url = "${mirrors.gnu}/gmp/gmp-${config.gmp.version}.tar.xz";
sha256 = "o8K4AgG4nmhhb0rTC8Zq7kknw85Q4zkpyoGdXENTiJg=";
hash = "sha256-o8K4AgG4nmhhb0rTC8Zq7kknw85Q4zkpyoGdXENTiJg=";
};
mpfr = builtins.fetchurl {
mpfr = lib.fetchurl {
url = "${mirrors.gnu}/mpfr/mpfr-${config.mpfr.version}.tar.xz";
sha256 = "J3gHNTpnJpeJlpRa8T5Sgp46vXqaW3+yeTiU4Y8fy7I=";
hash = "sha256-J3gHNTpnJpeJlpRa8T5Sgp46vXqaW3+yeTiU4Y8fy7I=";
};
mpc = builtins.fetchurl {
mpc = lib.fetchurl {
url = "${mirrors.gnu}/mpc/mpc-${config.mpc.version}.tar.gz";
sha256 = "q2QkkvXPiCt0qgy3MM1BCoHtzb7IlRg86TDnBsHHWbg=";
hash = "sha256-q2QkkvXPiCt0qgy3MM1BCoHtzb7IlRg86TDnBsHHWbg=";
};
isl = builtins.fetchurl {
isl = lib.fetchurl {
url = "https://gcc.gnu.org/pub/gcc/infrastructure/isl-${config.isl.version}.tar.bz2";
sha256 = "/PeN2WVsEOuM+fvV9ZoLawE4YgX+GTSzsoegoYmBRcA=";
hash = "sha256-/PeN2WVsEOuM+fvV9ZoLawE4YgX+GTSzsoegoYmBRcA=";
};
};

View file

@ -97,29 +97,29 @@ in
isl.version = "0.24";
src = {
gcc = builtins.fetchurl {
gcc = lib.fetchurl {
url = "${mirrors.gnu}/gcc/gcc-${version}/gcc-${version}.tar.xz";
sha256 = "4nXnZEKmBnNBon8Exca4PYYTFEAEwEE1KIY9xrXHQ9o=";
hash = "sha256-4nXnZEKmBnNBon8Exca4PYYTFEAEwEE1KIY9xrXHQ9o=";
};
gmp = builtins.fetchurl {
gmp = lib.fetchurl {
url = "${mirrors.gnu}/gmp/gmp-${config.gmp.version}.tar.xz";
sha256 = "o8K4AgG4nmhhb0rTC8Zq7kknw85Q4zkpyoGdXENTiJg=";
hash = "sha256-o8K4AgG4nmhhb0rTC8Zq7kknw85Q4zkpyoGdXENTiJg=";
};
mpfr = builtins.fetchurl {
mpfr = lib.fetchurl {
url = "${mirrors.gnu}/mpfr/mpfr-${config.mpfr.version}.tar.xz";
sha256 = "J3gHNTpnJpeJlpRa8T5Sgp46vXqaW3+yeTiU4Y8fy7I=";
hash = "sha256-J3gHNTpnJpeJlpRa8T5Sgp46vXqaW3+yeTiU4Y8fy7I=";
};
mpc = builtins.fetchurl {
mpc = lib.fetchurl {
url = "${mirrors.gnu}/mpc/mpc-${config.mpc.version}.tar.gz";
sha256 = "q2QkkvXPiCt0qgy3MM1BCoHtzb7IlRg86TDnBsHHWbg=";
hash = "sha256-q2QkkvXPiCt0qgy3MM1BCoHtzb7IlRg86TDnBsHHWbg=";
};
isl = builtins.fetchurl {
isl = lib.fetchurl {
url = "https://gcc.gnu.org/pub/gcc/infrastructure/isl-${config.isl.version}.tar.bz2";
sha256 = "/PeN2WVsEOuM+fvV9ZoLawE4YgX+GTSzsoegoYmBRcA=";
hash = "sha256-/PeN2WVsEOuM+fvV9ZoLawE4YgX+GTSzsoegoYmBRcA=";
};
};

View file

@ -98,29 +98,29 @@ in
isl.version = "0.24";
src = {
gcc = builtins.fetchurl {
gcc = lib.fetchurl {
url = "${mirrors.gnu}/gcc/gcc-${version}/gcc-${version}.tar.xz";
sha256 = "4nXnZEKmBnNBon8Exca4PYYTFEAEwEE1KIY9xrXHQ9o=";
hash = "sha256-4nXnZEKmBnNBon8Exca4PYYTFEAEwEE1KIY9xrXHQ9o=";
};
gmp = builtins.fetchurl {
gmp = lib.fetchurl {
url = "${mirrors.gnu}/gmp/gmp-${config.gmp.version}.tar.xz";
sha256 = "o8K4AgG4nmhhb0rTC8Zq7kknw85Q4zkpyoGdXENTiJg=";
hash = "sha256-o8K4AgG4nmhhb0rTC8Zq7kknw85Q4zkpyoGdXENTiJg=";
};
mpfr = builtins.fetchurl {
mpfr = lib.fetchurl {
url = "${mirrors.gnu}/mpfr/mpfr-${config.mpfr.version}.tar.xz";
sha256 = "J3gHNTpnJpeJlpRa8T5Sgp46vXqaW3+yeTiU4Y8fy7I=";
hash = "sha256-J3gHNTpnJpeJlpRa8T5Sgp46vXqaW3+yeTiU4Y8fy7I=";
};
mpc = builtins.fetchurl {
mpc = lib.fetchurl {
url = "${mirrors.gnu}/mpc/mpc-${config.mpc.version}.tar.gz";
sha256 = "q2QkkvXPiCt0qgy3MM1BCoHtzb7IlRg86TDnBsHHWbg=";
hash = "sha256-q2QkkvXPiCt0qgy3MM1BCoHtzb7IlRg86TDnBsHHWbg=";
};
isl = builtins.fetchurl {
isl = lib.fetchurl {
url = "https://gcc.gnu.org/pub/gcc/infrastructure/isl-${config.isl.version}.tar.bz2";
sha256 = "/PeN2WVsEOuM+fvV9ZoLawE4YgX+GTSzsoegoYmBRcA=";
hash = "sha256-/PeN2WVsEOuM+fvV9ZoLawE4YgX+GTSzsoegoYmBRcA=";
};
};

View file

@ -84,29 +84,29 @@ in
isl.version = "0.24";
src = {
gcc = builtins.fetchurl {
gcc = lib.fetchurl {
url = "${mirrors.gnu}/gcc/gcc-${version}/gcc-${version}.tar.xz";
sha256 = "4nXnZEKmBnNBon8Exca4PYYTFEAEwEE1KIY9xrXHQ9o=";
hash = "sha256-4nXnZEKmBnNBon8Exca4PYYTFEAEwEE1KIY9xrXHQ9o=";
};
gmp = builtins.fetchurl {
gmp = lib.fetchurl {
url = "${mirrors.gnu}/gmp/gmp-${config.gmp.version}.tar.xz";
sha256 = "o8K4AgG4nmhhb0rTC8Zq7kknw85Q4zkpyoGdXENTiJg=";
hash = "sha256-o8K4AgG4nmhhb0rTC8Zq7kknw85Q4zkpyoGdXENTiJg=";
};
mpfr = builtins.fetchurl {
mpfr = lib.fetchurl {
url = "${mirrors.gnu}/mpfr/mpfr-${config.mpfr.version}.tar.xz";
sha256 = "J3gHNTpnJpeJlpRa8T5Sgp46vXqaW3+yeTiU4Y8fy7I=";
hash = "sha256-J3gHNTpnJpeJlpRa8T5Sgp46vXqaW3+yeTiU4Y8fy7I=";
};
mpc = builtins.fetchurl {
mpc = lib.fetchurl {
url = "${mirrors.gnu}/mpc/mpc-${config.mpc.version}.tar.gz";
sha256 = "q2QkkvXPiCt0qgy3MM1BCoHtzb7IlRg86TDnBsHHWbg=";
hash = "sha256-q2QkkvXPiCt0qgy3MM1BCoHtzb7IlRg86TDnBsHHWbg=";
};
isl = builtins.fetchurl {
isl = lib.fetchurl {
url = "https://gcc.gnu.org/pub/gcc/infrastructure/isl-${config.isl.version}.tar.bz2";
sha256 = "/PeN2WVsEOuM+fvV9ZoLawE4YgX+GTSzsoegoYmBRcA=";
hash = "sha256-/PeN2WVsEOuM+fvV9ZoLawE4YgX+GTSzsoegoYmBRcA=";
};
};

View file

@ -35,9 +35,9 @@ in
builder = builders.foundation.basic;
src = builtins.fetchurl {
src = lib.fetchurl {
url = "${mirrors.gnu}/libc/glibc-${version}.tar.xz";
sha256 = "+4KZiZiyspllRnvBtp0VLpwwfSzzAcnq+0VVt3DvP9I=";
hash = "sha256-+4KZiZiyspllRnvBtp0VLpwwfSzzAcnq+0VVt3DvP9I=";
};
deps = {

View file

@ -45,9 +45,9 @@ in
builder = builders.foundation.basic;
src = builtins.fetchurl {
src = lib.fetchurl {
url = "${mirrors.gnu}/libc/glibc-${version}.tar.xz";
sha256 = "+4KZiZiyspllRnvBtp0VLpwwfSzzAcnq+0VVt3DvP9I=";
hash = "sha256-+4KZiZiyspllRnvBtp0VLpwwfSzzAcnq+0VVt3DvP9I=";
};
deps = {

View file

@ -37,9 +37,9 @@ in
builder = builders.foundation.basic;
src = builtins.fetchurl {
src = lib.fetchurl {
url = "${mirrors.gnu}/grep/grep-${version}.tar.xz";
sha256 = "HbKu3eidDepCsW2VKPiUyNFdrk4ZC1muzHj1qVEnbqs=";
hash = "sha256-HbKu3eidDepCsW2VKPiUyNFdrk4ZC1muzHj1qVEnbqs=";
};
deps = {

View file

@ -31,9 +31,9 @@ in
builder = builders.foundation.basic;
src = builtins.fetchurl {
src = lib.fetchurl {
url = "${mirrors.gnu}/m4/m4-${version}.tar.xz";
sha256 = "Y67eXG0zttmxNRHNC+LKwEby5w/QoHqpVzoEqCeDr5Y=";
hash = "sha256-Y67eXG0zttmxNRHNC+LKwEby5w/QoHqpVzoEqCeDr5Y=";
};
deps = {

View file

@ -42,9 +42,9 @@ in
builder = builders.foundation.basic;
src = builtins.fetchurl {
src = lib.fetchurl {
url = "${mirrors.gnu}/make/make-${version}.tar.gz";
sha256 = "3Rb7HWe/q3mnL16DkHNcSePo5wtJRaFasfgd23hlj7M=";
hash = "sha256-3Rb7HWe/q3mnL16DkHNcSePo5wtJRaFasfgd23hlj7M=";
};
deps = {

View file

@ -37,9 +37,9 @@ in
builder = builders.foundation.basic;
src = builtins.fetchurl {
src = lib.fetchurl {
url = "${mirrors.gnu}/patch/patch-${version}.tar.xz";
sha256 = "XCyR/kFUKWISbwvhUKpPo0lIXPLtwMfqfbwky4FxEa4=";
hash = "sha256-XCyR/kFUKWISbwvhUKpPo0lIXPLtwMfqfbwky4FxEa4=";
};
deps = {

View file

@ -37,9 +37,9 @@ in
builder = builders.foundation.basic;
src = builtins.fetchurl {
src = lib.fetchurl {
url = "${mirrors.gnu}/sed/sed-${version}.tar.xz";
sha256 = "biJrcy4c1zlGStaGK9Ghq6QteYKSLaelNRljHSSXUYE=";
hash = "sha256-biJrcy4c1zlGStaGK9Ghq6QteYKSLaelNRljHSSXUYE=";
};
deps = {

View file

@ -37,9 +37,9 @@ in
builder = builders.foundation.basic;
src = builtins.fetchurl {
src = lib.fetchurl {
url = "${mirrors.gnu}/tar/tar-${version}.tar.gz";
sha256 = "FNVeMgY+qVJuBX+/Nfyr1TN452l4fv95GcN1WwLStX4=";
hash = "sha256-FNVeMgY+qVJuBX+/Nfyr1TN452l4fv95GcN1WwLStX4=";
};
deps = {

View file

@ -40,9 +40,9 @@ in
builder = builders.foundation.basic;
src = builtins.fetchurl {
src = lib.fetchurl {
url = "${mirrors.gnu}/gzip/gzip-${version}.tar.xz";
sha256 = "dFTraTXbF8ZlVXbC4bD6vv04tNCTbg+H9IzQYs6RoFc=";
hash = "sha256-dFTraTXbF8ZlVXbC4bD6vv04tNCTbg+H9IzQYs6RoFc=";
};
deps = {

View file

@ -25,9 +25,9 @@ in
builder = builders.foundation.basic;
src = builtins.fetchurl {
src = lib.fetchurl {
url = "https://cdn.kernel.org/pub/linux/kernel/v${lib.versions.major version}.x/linux-${version}.tar.xz";
sha256 = "eONtQhRUcFHCTfIUD0zglCjWxRWtmnGziyjoCUqV0vY=";
hash = "sha256-eONtQhRUcFHCTfIUD0zglCjWxRWtmnGziyjoCUqV0vY=";
};
deps = {

View file

@ -27,9 +27,9 @@ in
builder = builders.foundation.basic;
src = builtins.fetchurl {
src = lib.fetchurl {
url = "https://musl.libc.org/releases/musl-${config.version}.tar.gz";
sha256 = "ejXq4z1TcqfA2hGI3nmHJvaIJVE7euPr6XqqpSEU8Dk=";
hash = "sha256-ejXq4z1TcqfA2hGI3nmHJvaIJVE7euPr6XqqpSEU8Dk=";
};
deps = {

View file

@ -31,9 +31,9 @@ in
builder = builders.foundation.basic;
src = builtins.fetchurl {
src = lib.fetchurl {
url = "https://www.python.org/ftp/python/${version}/Python-${version}.tar.xz";
sha256 = "eVw09E30Wg6blxDIxxwVxnGHFSTNQSyhTe8hLozLFV0=";
hash = "sha256-eVw09E30Wg6blxDIxxwVxnGHFSTNQSyhTe8hLozLFV0=";
};
deps = {

View file

@ -39,9 +39,9 @@ in
builder = builders.foundation.basic;
src = builtins.fetchurl {
src = lib.fetchurl {
url = "https://tukaani.org/xz/xz-${version}.tar.gz";
sha256 = "HDguC8Lk4K9YOYqQPdYv/35RAXHS3keh6+BtFSjpt+k=";
hash = "sha256-HDguC8Lk4K9YOYqQPdYv/35RAXHS3keh6+BtFSjpt+k=";
};
deps = {

View file

@ -21,9 +21,9 @@ in
builder = builders.foundation.basic;
src = builtins.fetchurl {
src = lib.fetchurl {
url = "https://github.com/madler/zlib/releases/download/v${version}/zlib-${version}.tar.xz";
sha256 = "ipuiiY4dDXdOymultGJ6EeVYi6hciFEzbrON5GgwUKc=";
hash = "sha256-ipuiiY4dDXdOymultGJ6EeVYi6hciFEzbrON5GgwUKc=";
};
deps = {