nixfiles/libs/core/flake.nix
Sebastian Walz 860d31cee1
Tohu vaBohu
2023-04-21 00:22:52 +02:00

82 lines
2.9 KiB
Nix

{
description = "Core library of general-purpose expressions worth implementing as intrinsics";
inputs
= {
libintrinsics.url = "github:sivizius/nixfiles/development?dir=libs/intrinsics";
};
outputs
= { self, libintrinsics, ... }:
let
intrinsics = libintrinsics.lib;
adjustArguments
= { arguments, fileName, moduleName, source, ... }:
intrinsics.mapAttrs
(
moduleName:
module:
let
initialisationData'
= {
inherit fileName moduleName;
source
= source
{
inherit fileName;
attribute
= if moduleName != null
then
moduleName
else
intrinsics.baseNameOf fileName;
};
};
in
if module.__type__ or null == "NeedInitialisation"
then
module.initialise module.body initialisationData'
else
module
)
arguments;
minimal
= intrinsics.scopedImport
{ inherit Library; }
./lib
{ inherit intrinsics; };
Library
= {
__functor
= { ... }:
libraryName:
{ ... } @ environment:
{ ... } @ modules:
let
arguments
= library
// environment;
library
= intrinsics.mapAttrs
(
moduleName:
fileName:
intrinsics.import fileName
(adjustArguments { inherit arguments fileName moduleName source; })
)
modules;
source = library.context libraryName;
in
library;
};
env = { inherit intrinsics; };
lib = minimal.library.load ./lib env;
tests = lib.check.load ./tests env lib;
in
{
inherit lib tests;
checks = lib.check tests {};
};
}