add lib.simpleFlake (#5)

This commit is contained in:
zimbatm
2020-08-23 15:28:05 +02:00
committed by GitHub
parent ec20f52e2f
commit e34fcedfc7
7 changed files with 174 additions and 23 deletions

65
simpleFlake.nix Normal file
View File

@@ -0,0 +1,65 @@
{ lib }:
# This function returns a flake outputs-compatible schema.
{
# pass an instance of self
self
, # pass an instance of the nixpkgs flake
nixpkgs
, # we assume that the name maps to the project name, and also that the
# overlay has an attribute with the `name` prefix that contains all of the
# project's packages.
name
, # nixpkgs config
config ? { }
, # pass either a function or a file
overlay ? null
, # use this to load other flakes overlays to supplement nixpkgs
preOverlays ? [ ]
, # maps to the devShell output. Pass in a shell.nix file or function.
shell ? null
, # pass the list of supported systems
systems ? [ "x86_64-linux" ]
}:
let
loadOverlay = obj:
if obj == null then
[ ]
else
[ (maybeImport obj) ]
;
maybeImport = obj:
if (builtins.typeOf obj == "path") || (builtins.typeOf obj == "string") then
import obj
else
obj
;
overlays = preOverlays ++ (loadOverlay overlay);
shell_ = maybeImport shell;
outputs = lib.eachSystem systems (system:
let
pkgs = import nixpkgs {
inherit
config
overlays
system
;
};
packages = pkgs.${name} or { };
in
{
legacyPackages = packages;
# Flake expects a flat attrset containing only derivations as values
packages = lib.flattenTree packages;
} // (if shell == null then { } else {
devShell = shell_ { inherit pkgs; };
})
);
in
outputs