top-level-wip
Hung 2023-02-14 01:56:48 -07:00
parent bf22c75270
commit ed84a5a871
4 changed files with 109 additions and 98 deletions

41
c_.nix
View File

@ -1,6 +1,6 @@
# a small helper that only builds on top of builtins functions # a small helper that only builds on top of builtins functions
{src}@inputs: _: (builtins // (
builtins // (let let
formatSecondsSinceEpoch = t: formatSecondsSinceEpoch = t:
let let
rem = x: y: x - x / y * y; rem = x: y: x - x / y * y;
@ -23,7 +23,8 @@ m = mp + (if mp < 10 then 3 else -9);
y' = y + (if m <= 2 then 1 else 0); y' = y + (if m <= 2 then 1 else 0);
pad = s: if builtins.stringLength s < 2 then "0" + s else s; pad = s: if builtins.stringLength s < 2 then "0" + s else s;
in "${toString y'}${pad (toString m)}${pad (toString d)}${pad (toString hours)}" in
"${toString y'}${pad (toString m)}${pad (toString d)}${pad (toString hours)}"
+ "${pad (toString minutes)}${pad (toString seconds)}"; + "${pad (toString minutes)}${pad (toString seconds)}";
fetchTree = fetchTree =
@ -37,12 +38,16 @@ fetchTree =
, path ? "" , path ? ""
, narHash ? null , narHash ? null
, lastModified ? 0 , lastModified ? 0
, src ? ./.
}@info: }@info:
if info.type == "github" then if info.type == "github" then
{ outPath = {
outPath =
fetchTarball fetchTarball
({ url = "https://api.${info.host or "github.com"}/repos/" ({
+ "${info.owner}/${info.repo}/tarball/${info.rev}"; } url = "https://api.${info.host or "github.com"}/repos/"
+ "${info.owner}/${info.repo}/tarball/${info.rev}";
}
// (if info ? narHash then { sha256 = info.narHash; } else { }) // (if info ? narHash then { sha256 = info.narHash; } else { })
); );
rev = info.rev; rev = info.rev;
@ -52,7 +57,8 @@ if info.type == "github" then
narHash = info.narHash; narHash = info.narHash;
} }
else if info.type == "git" then else if info.type == "git" then
{ outPath = {
outPath =
builtins.fetchGit builtins.fetchGit
({ url = info.url; } ({ url = info.url; }
// (if info ? rev then { inherit (info) rev; } else { }) // (if info ? rev then { inherit (info) rev; } else { })
@ -65,25 +71,28 @@ else if info.type == "git" then
} // (if info ? rev then { } // (if info ? rev then {
rev = info.rev; rev = info.rev;
shortRev = builtins.substring 0 7 info.rev; shortRev = builtins.substring 0 7 info.rev;
} else { } else { })
})
else if info.type == "path" then else if info.type == "path" then
{ outPath = builtins.path { {
path = if builtins.substring 0 1 info.path != "/" outPath = builtins.path {
path =
if builtins.substring 0 1 info.path != "/"
then src + ("/" + info.path) # make this absolute path by prepending ./ then src + ("/" + info.path) # make this absolute path by prepending ./
else info.path; # it's already an absolute path else info.path; # it's already an absolute path
}; };
narHash = info.narHash; narHash = info.narHash;
} }
else if info.type == "tarball" then else if info.type == "tarball" then
{ outPath = {
outPath =
fetchTarball fetchTarball
({ inherit (info) url; } ({ inherit (info) url; }
// (if info ? narHash then { sha256 = info.narHash; } else { }) // (if info ? narHash then { sha256 = info.narHash; } else { })
); );
} }
else if info.type == "gitlab" then else if info.type == "gitlab" then
{ inherit (info) rev narHash lastModified; {
inherit (info) rev narHash lastModified;
outPath = outPath =
fetchTarball fetchTarball
({ url = "https://${info.host or "gitlab.com"}/api/v4/projects/${info.owner}%2F${info.repo}/repository/archive.tar.gz?sha=${info.rev}"; } ({ url = "https://${info.host or "gitlab.com"}/api/v4/projects/${info.owner}%2F${info.repo}/repository/archive.tar.gz?sha=${info.rev}"; }
@ -94,7 +103,9 @@ else if info.type == "gitlab" then
else else
# FIXME: add Mercurial, tarball inputs. # FIXME: add Mercurial, tarball inputs.
throw "flake input has unsupported input type '${info.type}'"; throw "flake input has unsupported input type '${info.type}'";
in { in
{
inherit fetchTree; inherit fetchTree;
}) }
)) nil

View File

@ -3,7 +3,7 @@
( (
let let
lock = builtins.fromJSON (builtins.readFile ./flake.lock); lock = builtins.fromJSON (builtins.readFile ./flake.lock);
c_ = import ./c_.nix {src = ./.;}; c_ = import ./c_.nix;
in in
c_.fetchTree lock.nodes.flake-compat.locked c_.fetchTree lock.nodes.flake-compat.locked
) )

View File

@ -3,7 +3,7 @@
( (
let let
lock = builtins.fromJSON (builtins.readFile ./flake.lock); lock = builtins.fromJSON (builtins.readFile ./flake.lock);
c_ = import ./../../c_.nix {src = ./.;}; c_ = import ./../../c_.nix;
in in
c_.fetchTree lock.nodes.flake-compat.locked c_.fetchTree lock.nodes.flake-compat.locked
) )

View File

@ -5,7 +5,7 @@
( (
let let
lock = builtins.fromJSON (builtins.readFile ./flake.lock); lock = builtins.fromJSON (builtins.readFile ./flake.lock);
in (import ./c_.nix {src = ./.;}).fetchTree lock.nodes.flake-compat.locked in (import ./c_.nix).fetchTree lock.nodes.flake-compat.locked
) )
{ src = ./.; } { src = ./.; }
).shellNix ).shellNix