63 lines
2.2 KiB
Nix
63 lines
2.2 KiB
Nix
{
|
|
description = "A naersk based rust flake";
|
|
|
|
inputs = {
|
|
utils.url = "github:numtide/flake-utils";
|
|
naersk = {
|
|
url = "github:nix-community/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}" {} ''
|
|
mkdir -p $out
|
|
tar xzvf ${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;
|
|
};
|
|
};
|
|
|
|
}
|