From 1c3a495f967929f405111de55dcdb6204e9b0cd5 Mon Sep 17 00:00:00 2001 From: shimun Date: Sat, 13 Mar 2021 20:26:40 +0100 Subject: [PATCH] init --- flake.nix | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 flake.nix diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..b63dc95 --- /dev/null +++ b/flake.nix @@ -0,0 +1,62 @@ +{ + 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; + }; + }; + +}