all-crates/flake.nix
2021-03-13 20:43:33 +01:00

63 lines
2.2 KiB
Nix

{
description = "A naersk based rust flake";
inputs = {
utils.url = "github:numtide/flake-utils";
naersk = {
url = "github:nmattia/naersk";
inputs.nixpkgs.follows = "nixpkgs";
};
index = {
flake = false;
url = "github:rust-lang/crates.io-index";
};
};
outputs = { self, nixpkgs, utils, naersk, index }:
let
crate = self.lib.crate "bat";
pname = crate.latest.name;
forPkgs = pkgs:
rec {
# # `nix build`
# packages.${pname} = crate.latest.package { inherit pkgs; };
# # `nix run`
# apps.${pname} = utils.lib.mkApp {
# drv = packages.${pname};
# };
# defaultApp = apps.${pname};
};
forSystem = system: forPkgs nixpkgs.legacyPackages."${system}";
in
(utils.lib.eachDefaultSystem forSystem) // {
lib = rec {
config = builtins.fromJSON (builtins.readFile "${index}/config.json");
crate = name:
let
dbg = val: builtins.trace val val;
strlen = builtins.stringLength;
substr = builtins.substring;
path = if strlen name < 4 then "${toString (strlen name)}/${substr 0 1 name}/${name}" else "${substr 0 2 name}/${substr 2 2 name}/${name}";
build = meta: extra @ { pkgs, ... }:
let naersk-lib = naersk.lib."${pkgs.system}"; in
naersk-lib.buildPackage ((builtins.removeAttrs extra [ "pkgs" ]) // {
root = pkgs.runCommandLocal "unpack-${name}" { buildInputs = [ pkgs.coreutils ]; } ''
mkdir -p $out
tar xvf ${meta.tarball} -C $out --strip-components=1
'';
});
versions = builtins.foldl'
(p: i:
let meta = i // rec { url = "${config.dl}/${name}/${i.vers}/download"; package = build meta; tarball = builtins.fetchurl { inherit url; sha256 = i.cksum; }; }; in
p // { latest = meta; "${i.vers}" = meta; }
)
{ }
(map builtins.fromJSON (builtins.filter (s: builtins.isString s && strlen s > 0) (builtins.split "\n" (builtins.readFile "${index}/${path}"))));
in
versions;
};
};
}