2020-04-22 17:12:09 +02:00
|
|
|
let
|
2020-04-11 16:45:25 +02:00
|
|
|
# copied from <nixpkgs/lib>
|
|
|
|
genAttrs = names: f:
|
|
|
|
builtins.listToAttrs (map (n: { name = n; value = f n; }) names);
|
|
|
|
|
2020-04-22 17:12:09 +02:00
|
|
|
mapAttrsToList = f: attrs:
|
|
|
|
map (name: f name attrs.${name}) (builtins.attrNames attrs);
|
|
|
|
|
2020-04-11 16:45:25 +02:00
|
|
|
# The list of systems supported by nixpkgs and hydra
|
2020-04-22 17:12:09 +02:00
|
|
|
defaultSystems = [
|
2020-04-11 16:45:25 +02:00
|
|
|
"aarch64-linux"
|
|
|
|
"i686-linux"
|
|
|
|
"x86_64-darwin"
|
|
|
|
"x86_64-linux"
|
|
|
|
];
|
|
|
|
|
2020-04-22 17:12:09 +02:00
|
|
|
# eachSystem using defaultSystems
|
|
|
|
eachDefaultSystem = eachSystem defaultSystems;
|
|
|
|
|
|
|
|
# Builds a map from <attr>=value to <system>.<attr>=value for each system.
|
2020-04-11 16:45:25 +02:00
|
|
|
#
|
|
|
|
#
|
2020-04-22 17:12:09 +02:00
|
|
|
eachSystem = systems: f:
|
|
|
|
let
|
|
|
|
op = attrs: system:
|
|
|
|
let
|
|
|
|
ret = f system;
|
2020-04-22 17:17:40 +02:00
|
|
|
op = attrs: key:
|
2020-04-22 17:12:09 +02:00
|
|
|
attrs //
|
|
|
|
{
|
2020-05-02 22:51:26 +02:00
|
|
|
${key} = (attrs.${key} or { }) // { ${system} = ret.${key}; };
|
2020-04-22 17:12:09 +02:00
|
|
|
}
|
2020-05-02 22:51:26 +02:00
|
|
|
;
|
2020-04-22 17:12:09 +02:00
|
|
|
in
|
|
|
|
builtins.foldl' op attrs (builtins.attrNames ret);
|
|
|
|
in
|
2020-05-02 22:51:26 +02:00
|
|
|
builtins.foldl' op { } systems
|
|
|
|
;
|
2020-04-11 19:29:17 +02:00
|
|
|
|
|
|
|
# Returns the structure used by `nix app`
|
|
|
|
mkApp =
|
|
|
|
{ drv
|
|
|
|
, name ? drv.pname or drv.name
|
|
|
|
, exePath ? drv.passthru.exePath or "/bin/${name}"
|
|
|
|
}:
|
|
|
|
{
|
|
|
|
type = "app";
|
|
|
|
program = "${drv}${exePath}";
|
|
|
|
};
|
2020-07-22 10:38:25 +02:00
|
|
|
|
|
|
|
# Nix flakes insists on having a flat attribute set of derivations in
|
|
|
|
# various places like the `packages` and `checks` attributes.
|
|
|
|
#
|
|
|
|
# This function traverses a tree of attributes (by respecting
|
|
|
|
# recurseIntoAttrs) and only returns their derivations, with a flattened
|
|
|
|
# key-space.
|
|
|
|
#
|
|
|
|
# Eg:
|
|
|
|
#
|
|
|
|
# flattenTree { hello = pkgs.hello; gitAndTools = pkgs.gitAndTools };
|
|
|
|
#
|
|
|
|
# Returns:
|
|
|
|
#
|
|
|
|
# {
|
|
|
|
# hello = «derivation»;
|
|
|
|
# gitAndTools_git = «derivation»;
|
|
|
|
# gitAndTools_hub = «derivation»;
|
|
|
|
# # ...
|
|
|
|
# }
|
|
|
|
flattenTree = tree: import ./flattenTree.nix tree;
|
2020-04-22 17:12:09 +02:00
|
|
|
in
|
|
|
|
{
|
|
|
|
inherit
|
|
|
|
defaultSystems
|
|
|
|
eachDefaultSystem
|
|
|
|
eachSystem
|
|
|
|
mkApp
|
|
|
|
;
|
2020-07-22 10:38:25 +02:00
|
|
|
|
2020-04-11 16:45:25 +02:00
|
|
|
}
|