forked from auxolotl/core
205 lines
8.9 KiB
Nix
205 lines
8.9 KiB
Nix
|
/* Library of low-level helper functions for nix expressions.
|
||
|
*
|
||
|
* Please implement (mostly) exhaustive unit tests
|
||
|
* for new functions in `./tests.nix`.
|
||
|
*/
|
||
|
let
|
||
|
|
||
|
inherit (import ./fixed-points.nix { inherit lib; }) makeExtensible;
|
||
|
|
||
|
lib = makeExtensible (self: let
|
||
|
callLibs = file: import file { lib = self; };
|
||
|
loadNode = (root: folder:
|
||
|
let
|
||
|
static = {
|
||
|
setup = builtins.fromJSON builtins.readFile ( "${root}/${folder}/static/setup.json" );
|
||
|
dependencies = builtins.fromJSON builtins.readFile ( "${root}/${folder}/static/dependencies.json" );
|
||
|
meta = builtins.fromJSON builtins.readFile ( "${root}/${folder}/static/meta.json" );
|
||
|
};
|
||
|
_nodeNames = (builtins.attrNames static.dependencies.nodes);
|
||
|
in
|
||
|
# basecase
|
||
|
if (builtins.length _nodeNames) == 0
|
||
|
then
|
||
|
{
|
||
|
static = static;
|
||
|
value = import "${root}/${folder}/default.nix";
|
||
|
dependencies = {};
|
||
|
}
|
||
|
# recursive case
|
||
|
else
|
||
|
{
|
||
|
static = static;
|
||
|
value = import "${root}/${folder}/default.nix";
|
||
|
dependencies.nodes = (builtins.listToAttrs
|
||
|
(builtins.map
|
||
|
(nodeName:
|
||
|
{
|
||
|
name = nodeName;
|
||
|
value = (loadNode root nodeName).value;
|
||
|
}
|
||
|
)
|
||
|
_nodeNames
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
);
|
||
|
in {
|
||
|
builtins = builtins;
|
||
|
|
||
|
# often used, or depending on very little
|
||
|
trivial = callLibs ./trivial.nix;
|
||
|
fixedPoints = callLibs ./fixed-points.nix;
|
||
|
|
||
|
# datatypes
|
||
|
attrsets = callLibs ./attrsets.nix;
|
||
|
lists = callLibs ./lists.nix;
|
||
|
strings = callLibs ./strings.nix;
|
||
|
stringsWithDeps = callLibs ./strings-with-deps.nix;
|
||
|
|
||
|
# packaging
|
||
|
customisation = callLibs ./customisation.nix;
|
||
|
derivations = callLibs ./derivations.nix;
|
||
|
maintainers = import ../maintainers/maintainer-list.nix;
|
||
|
teams = callLibs ../maintainers/team-list.nix;
|
||
|
meta = callLibs ./meta.nix;
|
||
|
versions = callLibs ./versions.nix;
|
||
|
|
||
|
# module system
|
||
|
modules = callLibs ./modules.nix;
|
||
|
options = callLibs ./options.nix;
|
||
|
types = callLibs ./types.nix;
|
||
|
|
||
|
# constants
|
||
|
licenses = callLibs ./licenses.nix;
|
||
|
sourceTypes = callLibs ./source-types.nix;
|
||
|
systems = callLibs ./systems;
|
||
|
|
||
|
# serialization
|
||
|
cli = callLibs ./cli.nix;
|
||
|
gvariant = callLibs ./gvariant.nix;
|
||
|
generators = callLibs ./generators.nix;
|
||
|
|
||
|
# misc
|
||
|
asserts = callLibs ./asserts.nix;
|
||
|
debug = callLibs ./debug.nix;
|
||
|
|
||
|
# domain-specific
|
||
|
fetchers = callLibs ./fetchers.nix;
|
||
|
|
||
|
# Eval-time filesystem handling
|
||
|
path = callLibs ./path;
|
||
|
filesystem = callLibs ./filesystem.nix;
|
||
|
fileset = callLibs ./fileset;
|
||
|
sources = callLibs ./sources.nix;
|
||
|
|
||
|
# back-compat aliases
|
||
|
platforms = self.systems.doubles;
|
||
|
|
||
|
# linux kernel configuration
|
||
|
kernel = callLibs ./kernel.nix;
|
||
|
|
||
|
inherit (builtins) add addErrorContext attrNames concatLists
|
||
|
deepSeq elem elemAt filter genericClosure genList getAttr
|
||
|
hasAttr head isAttrs isBool isInt isList isPath isString length
|
||
|
lessThan listToAttrs pathExists readFile replaceStrings seq
|
||
|
stringLength sub substring tail trace;
|
||
|
inherit (self.trivial) id const pipe concat or and xor bitAnd bitOr bitXor
|
||
|
bitNot boolToString mergeAttrs flip mapNullable inNixShell isFloat min max
|
||
|
importJSON importTOML warn warnIf warnIfNot throwIf throwIfNot checkListOfEnum
|
||
|
info showWarnings nixpkgsVersion version isInOldestRelease
|
||
|
mod compare splitByAndCompare
|
||
|
functionArgs setFunctionArgs isFunction toFunction mirrorFunctionArgs
|
||
|
toHexString toBaseDigits inPureEvalMode;
|
||
|
inherit (self.fixedPoints) fix fix' converge extends composeExtensions
|
||
|
composeManyExtensions makeExtensible makeExtensibleWithCustomName;
|
||
|
inherit (self.attrsets) attrByPath hasAttrByPath setAttrByPath
|
||
|
getAttrFromPath attrVals attrValues getAttrs catAttrs filterAttrs
|
||
|
filterAttrsRecursive foldlAttrs foldAttrs collect nameValuePair mapAttrs
|
||
|
mapAttrs' mapAttrsToList attrsToList concatMapAttrs mapAttrsRecursive
|
||
|
mapAttrsRecursiveCond genAttrs isDerivation toDerivation optionalAttrs
|
||
|
zipAttrsWithNames zipAttrsWith zipAttrs recursiveUpdateUntil
|
||
|
recursiveUpdate matchAttrs mergeAttrsList overrideExisting showAttrPath getOutput
|
||
|
getBin getLib getDev getMan chooseDevOutputs zipWithNames zip
|
||
|
recurseIntoAttrs dontRecurseIntoAttrs cartesianProduct cartesianProductOfSets
|
||
|
mapCartesianProduct updateManyAttrsByPath;
|
||
|
inherit (self.lists) singleton forEach foldr fold foldl foldl' imap0 imap1
|
||
|
ifilter0 concatMap flatten remove findSingle findFirst any all count
|
||
|
optional optionals toList range replicate partition zipListsWith zipLists
|
||
|
reverseList listDfs toposort sort sortOn naturalSort compareLists take
|
||
|
drop sublist last init crossLists unique allUnique intersectLists
|
||
|
subtractLists mutuallyExclusive groupBy groupBy';
|
||
|
inherit (self.strings) concatStrings concatMapStrings concatImapStrings
|
||
|
intersperse concatStringsSep concatMapStringsSep
|
||
|
concatImapStringsSep concatLines makeSearchPath makeSearchPathOutput
|
||
|
makeLibraryPath makeIncludePath makeBinPath optionalString
|
||
|
hasInfix hasPrefix hasSuffix stringToCharacters stringAsChars escape
|
||
|
escapeShellArg escapeShellArgs
|
||
|
isStorePath isStringLike
|
||
|
isValidPosixName toShellVar toShellVars
|
||
|
escapeRegex escapeURL escapeXML replaceChars lowerChars
|
||
|
upperChars toLower toUpper addContextFrom splitString
|
||
|
removePrefix removeSuffix versionOlder versionAtLeast
|
||
|
getName getVersion
|
||
|
cmakeOptionType cmakeBool cmakeFeature
|
||
|
mesonOption mesonBool mesonEnable
|
||
|
nameFromURL enableFeature enableFeatureAs withFeature
|
||
|
withFeatureAs fixedWidthString fixedWidthNumber
|
||
|
toInt toIntBase10 readPathsFromFile fileContents;
|
||
|
inherit (self.stringsWithDeps) textClosureList textClosureMap
|
||
|
noDepEntry fullDepEntry packEntry stringAfter;
|
||
|
inherit (self.customisation) overrideDerivation makeOverridable
|
||
|
callPackageWith callPackagesWith extendDerivation hydraJob
|
||
|
makeScope makeScopeWithSplicing makeScopeWithSplicing';
|
||
|
inherit (self.derivations) lazyDerivation optionalDrvAttr;
|
||
|
inherit (self.meta) addMetaAttrs dontDistribute setName updateName
|
||
|
appendToName mapDerivationAttrset setPrio lowPrio lowPrioSet hiPrio
|
||
|
hiPrioSet getLicenseFromSpdxId getExe getExe';
|
||
|
inherit (self.filesystem) pathType pathIsDirectory pathIsRegularFile
|
||
|
packagesFromDirectoryRecursive;
|
||
|
inherit (self.sources) cleanSourceFilter
|
||
|
cleanSource sourceByRegex sourceFilesBySuffices
|
||
|
commitIdFromGitRepo cleanSourceWith pathHasContext
|
||
|
canCleanSource pathIsGitRepo;
|
||
|
inherit (self.modules) evalModules setDefaultModuleLocation
|
||
|
unifyModuleSyntax applyModuleArgsIfFunction mergeModules
|
||
|
mergeModules' mergeOptionDecls mergeDefinitions
|
||
|
pushDownProperties dischargeProperties filterOverrides
|
||
|
sortProperties fixupOptionType mkIf mkAssert mkMerge mkOverride
|
||
|
mkOptionDefault mkDefault mkImageMediaOverride mkForce mkVMOverride
|
||
|
mkFixStrictness mkOrder mkBefore mkAfter mkAliasDefinitions
|
||
|
mkAliasAndWrapDefinitions fixMergeModules mkRemovedOptionModule
|
||
|
mkRenamedOptionModule mkRenamedOptionModuleWith
|
||
|
mkMergedOptionModule mkChangedOptionModule
|
||
|
mkAliasOptionModule mkDerivedConfig doRename
|
||
|
mkAliasOptionModuleMD;
|
||
|
inherit (self.options) isOption mkEnableOption mkSinkUndeclaredOptions
|
||
|
mergeDefaultOption mergeOneOption mergeEqualOption mergeUniqueOption
|
||
|
getValues getFiles
|
||
|
optionAttrSetToDocList optionAttrSetToDocList'
|
||
|
scrubOptionValue literalExpression literalExample
|
||
|
showOption showOptionWithDefLocs showFiles
|
||
|
unknownModule mkOption mkPackageOption mkPackageOptionMD
|
||
|
mdDoc literalMD;
|
||
|
inherit (self.types) isType setType defaultTypeMerge defaultFunctor
|
||
|
isOptionType mkOptionType;
|
||
|
inherit (self.asserts)
|
||
|
assertMsg assertOneOf;
|
||
|
inherit (self.debug) traceIf traceVal traceValFn
|
||
|
traceSeq traceSeqN traceValSeq
|
||
|
traceValSeqFn traceValSeqN traceValSeqNFn traceFnSeqN
|
||
|
runTests testAllTrue;
|
||
|
inherit (self.versions)
|
||
|
splitVersion;
|
||
|
|
||
|
loadStatic = (folder:
|
||
|
{
|
||
|
setup = builtins.fromJSON ( builtins.readFile "${folder}/static/setup.json" );
|
||
|
dependencies = builtins.fromJSON ( builtins.readFile "${folder}/static/dependencies.json" );
|
||
|
meta = builtins.fromJSON ( builtins.readFile "${folder}/static/meta.json" );
|
||
|
}
|
||
|
);
|
||
|
loadNode = loadNode;
|
||
|
});
|
||
|
in lib
|