1
0
Fork 0
mirror of https://github.com/numtide/flake-utils.git synced 2024-12-14 11:47:31 +00:00
flake-utils/default.nix

130 lines
2.8 KiB
Nix
Raw Normal View History

2020-04-22 15:12:09 +00:00
let
2020-04-11 14:45:25 +00:00
# The list of systems supported by nixpkgs and hydra
2020-04-22 15:12:09 +00:00
defaultSystems = [
2020-04-11 14:45:25 +00:00
"aarch64-linux"
"i686-linux"
"x86_64-darwin"
"x86_64-linux"
];
# List of all systems defined in nixpkgs
# Keep in sync with nixpkgs wit the following command:
# $ nix-instantiate --json --eval --expr "with import <nixpkgs> {}; lib.platforms.all" | jq
allSystems = [
"aarch64-linux"
"armv5tel-linux"
"armv6l-linux"
"armv7a-linux"
"armv7l-linux"
"mipsel-linux"
"i686-cygwin"
"i686-freebsd"
"i686-linux"
"i686-netbsd"
"i686-openbsd"
"x86_64-cygwin"
"x86_64-freebsd"
"x86_64-linux"
"x86_64-netbsd"
"x86_64-openbsd"
"x86_64-solaris"
"x86_64-darwin"
"i686-darwin"
"aarch64-darwin"
"armv7a-darwin"
"x86_64-windows"
"i686-windows"
"wasm64-wasi"
"wasm32-wasi"
"x86_64-redox"
"powerpc64le-linux"
"riscv32-linux"
"riscv64-linux"
"arm-none"
"armv6l-none"
"aarch64-none"
"avr-none"
"i686-none"
"x86_64-none"
"powerpc-none"
"msp430-none"
"riscv64-none"
"riscv32-none"
"vc4-none"
"js-ghcjs"
"aarch64-genode"
"x86_64-genode"
];
2020-04-22 15:12:09 +00:00
# eachSystem using defaultSystems
eachDefaultSystem = eachSystem defaultSystems;
# Builds a map from <attr>=value to <system>.<attr>=value for each system.
2020-04-11 14:45:25 +00:00
#
#
2020-04-22 15:12:09 +00:00
eachSystem = systems: f:
let
op = attrs: system:
let
ret = f system;
2020-04-22 15:17:40 +00:00
op = attrs: key:
2020-04-22 15:12:09 +00:00
attrs //
{
2020-05-02 20:51:26 +00:00
${key} = (attrs.${key} or { }) // { ${system} = ret.${key}; };
2020-04-22 15:12:09 +00:00
}
2020-05-02 20:51:26 +00:00
;
2020-04-22 15:12:09 +00:00
in
builtins.foldl' op attrs (builtins.attrNames ret);
in
2020-05-02 20:51:26 +00:00
builtins.foldl' op { } systems
;
2020-04-11 17:29:17 +00:00
2020-07-22 08:38:25 +00: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»;
2020-07-22 08:38:25 +00:00
# # ...
# }
flattenTree = tree: import ./flattenTree.nix tree;
2020-07-22 08:42:18 +00: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 08:38:25 +00:00
2020-08-23 13:28:05 +00:00
# This function tries to capture a common flake pattern.
simpleFlake = import ./simpleFlake.nix { inherit lib; };
lib = {
inherit
allSystems
defaultSystems
eachDefaultSystem
eachSystem
flattenTree
mkApp
simpleFlake
;
};
in
lib