add lib.simpleFlake (#5)
This commit is contained in:
65
simpleFlake.nix
Normal file
65
simpleFlake.nix
Normal 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
|
||||
Reference in New Issue
Block a user