mirror of
https://github.com/CHN-beta/nixpkgs.git
synced 2026-01-12 02:40:31 +08:00
Lix will soon warn, and in the future, error when `or` is used as an identifier. This commit fix those cases.
575 lines
13 KiB
Nix
575 lines
13 KiB
Nix
/*
|
|
Library of low-level helper functions for nix expressions.
|
|
|
|
Please implement (mostly) exhaustive unit tests
|
|
for new functions in `./tests.nix`.
|
|
*/
|
|
let
|
|
|
|
# A copy of `lib.makeExtensible'` in order to document `extend`.
|
|
# It has been leading to some trouble, so we have to document it specially.
|
|
makeExtensible' =
|
|
rattrs:
|
|
let
|
|
self = rattrs self // {
|
|
/**
|
|
Patch the Nixpkgs library
|
|
|
|
A function that applies patches onto the nixpkgs library.
|
|
Usage is discouraged for most scenarios.
|
|
|
|
:::{.note}
|
|
The name `extends` is a bit misleading, as it doesn't actually extend the library, but rather patches it.
|
|
It is merely a consequence of being implemented by `makeExtensible`.
|
|
:::
|
|
|
|
# Inputs
|
|
|
|
- An "extension function" `f` that returns attributes that will be updated in the returned Nixpkgs library.
|
|
|
|
# Output
|
|
|
|
A patched Nixpkgs library.
|
|
|
|
:::{.warning}
|
|
This functionality is intended as an escape hatch for when the provided version of the Nixpkgs library has a flaw.
|
|
|
|
If you were to use it to add new functionality, you will run into compatibility and interoperability issues.
|
|
:::
|
|
*/
|
|
extend = f: lib.makeExtensible (lib.extends f rattrs);
|
|
};
|
|
in
|
|
self;
|
|
|
|
lib = makeExtensible' (
|
|
self:
|
|
let
|
|
callLibs = file: import file { lib = self; };
|
|
in
|
|
{
|
|
|
|
# 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/computed-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;
|
|
misc = callLibs ./deprecated/misc.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;
|
|
|
|
# network
|
|
network = callLibs ./network;
|
|
|
|
inherit (self.trivial)
|
|
id
|
|
const
|
|
pipe
|
|
concat
|
|
"or"
|
|
and
|
|
xor
|
|
bitAnd
|
|
bitOr
|
|
bitXor
|
|
bitNot
|
|
boolToString
|
|
boolToYesNo
|
|
mergeAttrs
|
|
flip
|
|
defaultTo
|
|
mapNullable
|
|
inNixShell
|
|
isFloat
|
|
min
|
|
max
|
|
importJSON
|
|
importTOML
|
|
warn
|
|
warnIf
|
|
warnIfNot
|
|
throwIf
|
|
throwIfNot
|
|
checkListOfEnum
|
|
info
|
|
showWarnings
|
|
nixpkgsVersion
|
|
version
|
|
isInOldestRelease
|
|
oldestSupportedReleaseIsAtLeast
|
|
mod
|
|
compare
|
|
splitByAndCompare
|
|
seq
|
|
deepSeq
|
|
lessThan
|
|
add
|
|
sub
|
|
functionArgs
|
|
setFunctionArgs
|
|
isFunction
|
|
toFunction
|
|
mirrorFunctionArgs
|
|
fromHexString
|
|
toHexString
|
|
toBaseDigits
|
|
inPureEvalMode
|
|
isBool
|
|
isInt
|
|
pathExists
|
|
genericClosure
|
|
readFile
|
|
;
|
|
inherit (self.fixedPoints)
|
|
fix
|
|
fix'
|
|
converge
|
|
extends
|
|
composeExtensions
|
|
composeManyExtensions
|
|
makeExtensible
|
|
makeExtensibleWithCustomName
|
|
toExtension
|
|
;
|
|
inherit (self.attrsets)
|
|
attrByPath
|
|
hasAttrByPath
|
|
setAttrByPath
|
|
getAttrFromPath
|
|
attrVals
|
|
attrNames
|
|
attrValues
|
|
getAttrs
|
|
catAttrs
|
|
filterAttrs
|
|
filterAttrsRecursive
|
|
foldlAttrs
|
|
foldAttrs
|
|
collect
|
|
nameValuePair
|
|
mapAttrs
|
|
mapAttrs'
|
|
mapAttrsToList
|
|
attrsToList
|
|
concatMapAttrs
|
|
mapAttrsRecursive
|
|
mapAttrsRecursiveCond
|
|
mapAttrsToListRecursive
|
|
mapAttrsToListRecursiveCond
|
|
genAttrs
|
|
genAttrs'
|
|
isDerivation
|
|
toDerivation
|
|
optionalAttrs
|
|
zipAttrsWithNames
|
|
zipAttrsWith
|
|
zipAttrs
|
|
recursiveUpdateUntil
|
|
recursiveUpdate
|
|
matchAttrs
|
|
mergeAttrsList
|
|
overrideExisting
|
|
showAttrPath
|
|
getOutput
|
|
getFirstOutput
|
|
getBin
|
|
getLib
|
|
getStatic
|
|
getDev
|
|
getInclude
|
|
getMan
|
|
chooseDevOutputs
|
|
recurseIntoAttrs
|
|
dontRecurseIntoAttrs
|
|
cartesianProduct
|
|
mapCartesianProduct
|
|
updateManyAttrsByPath
|
|
listToAttrs
|
|
hasAttr
|
|
getAttr
|
|
isAttrs
|
|
intersectAttrs
|
|
removeAttrs
|
|
;
|
|
inherit (self.lists)
|
|
singleton
|
|
forEach
|
|
map
|
|
foldr
|
|
fold
|
|
foldl
|
|
foldl'
|
|
imap0
|
|
imap1
|
|
filter
|
|
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
|
|
takeEnd
|
|
drop
|
|
dropEnd
|
|
sublist
|
|
last
|
|
init
|
|
crossLists
|
|
unique
|
|
uniqueStrings
|
|
allUnique
|
|
intersectLists
|
|
subtractLists
|
|
mutuallyExclusive
|
|
groupBy
|
|
groupBy'
|
|
concatLists
|
|
genList
|
|
length
|
|
head
|
|
tail
|
|
elem
|
|
elemAt
|
|
isList
|
|
concatAttrValues
|
|
;
|
|
inherit (self.strings)
|
|
concatStrings
|
|
concatMapStrings
|
|
concatImapStrings
|
|
stringLength
|
|
substring
|
|
isString
|
|
replaceString
|
|
replaceStrings
|
|
intersperse
|
|
concatStringsSep
|
|
concatMapStringsSep
|
|
concatMapAttrsStringSep
|
|
concatImapStringsSep
|
|
concatLines
|
|
makeSearchPath
|
|
makeSearchPathOutput
|
|
makeLibraryPath
|
|
makeIncludePath
|
|
makeBinPath
|
|
optionalString
|
|
hasInfix
|
|
hasPrefix
|
|
hasSuffix
|
|
join
|
|
stringToCharacters
|
|
stringAsChars
|
|
escape
|
|
escapeShellArg
|
|
escapeShellArgs
|
|
isPath
|
|
isStorePath
|
|
isStringLike
|
|
isValidPosixName
|
|
toShellVar
|
|
toShellVars
|
|
trim
|
|
trimWith
|
|
escapeRegex
|
|
escapeURL
|
|
escapeXML
|
|
lowerChars
|
|
upperChars
|
|
toLower
|
|
toUpper
|
|
toCamelCase
|
|
toSentenceCase
|
|
typeOf
|
|
addContextFrom
|
|
splitString
|
|
splitStringBy
|
|
removePrefix
|
|
removeSuffix
|
|
versionOlder
|
|
versionAtLeast
|
|
getName
|
|
getVersion
|
|
match
|
|
split
|
|
cmakeOptionType
|
|
cmakeBool
|
|
cmakeFeature
|
|
mesonOption
|
|
mesonBool
|
|
mesonEnable
|
|
nameFromURL
|
|
enableFeature
|
|
enableFeatureAs
|
|
withFeature
|
|
withFeatureAs
|
|
fixedWidthString
|
|
fixedWidthNumber
|
|
toInt
|
|
toIntBase10
|
|
fileContents
|
|
;
|
|
inherit (self.stringsWithDeps)
|
|
textClosureList
|
|
textClosureMap
|
|
noDepEntry
|
|
fullDepEntry
|
|
packEntry
|
|
stringAfter
|
|
;
|
|
inherit (self.customisation)
|
|
overrideDerivation
|
|
makeOverridable
|
|
callPackageWith
|
|
callPackagesWith
|
|
extendDerivation
|
|
hydraJob
|
|
makeScope
|
|
makeScopeWithSplicing
|
|
makeScopeWithSplicing'
|
|
extendMkDerivation
|
|
renameCrossIndexFrom
|
|
renameCrossIndexTo
|
|
mapCrossIndex
|
|
;
|
|
inherit (self.derivations) lazyDerivation optionalDrvAttr warnOnInstantiate;
|
|
inherit (self.generators) mkLuaInline;
|
|
inherit (self.meta)
|
|
addMetaAttrs
|
|
dontDistribute
|
|
setName
|
|
updateName
|
|
appendToName
|
|
mapDerivationAttrset
|
|
setPrio
|
|
lowPrio
|
|
lowPrioSet
|
|
hiPrio
|
|
hiPrioSet
|
|
licensesSpdx
|
|
getLicenseFromSpdxId
|
|
getLicenseFromSpdxIdOr
|
|
getExe
|
|
getExe'
|
|
;
|
|
inherit (self.filesystem)
|
|
pathType
|
|
pathIsDirectory
|
|
pathIsRegularFile
|
|
packagesFromDirectoryRecursive
|
|
;
|
|
inherit (self.sources)
|
|
cleanSourceFilter
|
|
cleanSource
|
|
sourceByRegex
|
|
sourceFilesBySuffices
|
|
commitIdFromGitRepo
|
|
cleanSourceWith
|
|
pathHasContext
|
|
canCleanSource
|
|
pathIsGitRepo
|
|
revOrTag
|
|
repoRevToName
|
|
;
|
|
inherit (self.modules)
|
|
evalModules
|
|
setDefaultModuleLocation
|
|
unifyModuleSyntax
|
|
applyModuleArgsIfFunction
|
|
mergeModules
|
|
mergeModules'
|
|
mergeOptionDecls
|
|
mergeDefinitions
|
|
pushDownProperties
|
|
dischargeProperties
|
|
filterOverrides
|
|
sortProperties
|
|
fixupOptionType
|
|
mkIf
|
|
mkAssert
|
|
mkDefinition
|
|
mkMerge
|
|
mkOverride
|
|
mkOptionDefault
|
|
mkDefault
|
|
mkImageMediaOverride
|
|
mkForce
|
|
mkVMOverride
|
|
mkFixStrictness
|
|
mkOrder
|
|
mkBefore
|
|
mkAfter
|
|
mkAliasDefinitions
|
|
mkAliasAndWrapDefinitions
|
|
fixMergeModules
|
|
mkRemovedOptionModule
|
|
mkRenamedOptionModule
|
|
mkRenamedOptionModuleWith
|
|
mkMergedOptionModule
|
|
mkChangedOptionModule
|
|
mkAliasOptionModule
|
|
mkDerivedConfig
|
|
doRename
|
|
mkAliasOptionModuleMD
|
|
;
|
|
evalOptionValue = lib.warn "External use of `lib.evalOptionValue` is deprecated. If your use case isn't covered by non-deprecated functions, we'd like to know more and perhaps support your use case well, instead of providing access to these low level functions. In this case please open an issue in https://github.com/nixos/nixpkgs/issues/." self.modules.evalOptionValue;
|
|
inherit (self.options)
|
|
isOption
|
|
mkEnableOption
|
|
mkSinkUndeclaredOptions
|
|
mergeDefaultOption
|
|
mergeOneOption
|
|
mergeEqualOption
|
|
mergeUniqueOption
|
|
getValues
|
|
getFiles
|
|
optionAttrSetToDocList
|
|
optionAttrSetToDocList'
|
|
scrubOptionValue
|
|
literalExpression
|
|
showOption
|
|
showOptionWithDefLocs
|
|
showFiles
|
|
unknownModule
|
|
mkOption
|
|
mkPackageOption
|
|
literalMD
|
|
;
|
|
inherit (self.types)
|
|
isType
|
|
setType
|
|
defaultTypeMerge
|
|
defaultFunctor
|
|
isOptionType
|
|
mkOptionType
|
|
;
|
|
inherit (self.asserts)
|
|
assertMsg
|
|
assertOneOf
|
|
;
|
|
inherit (self.debug)
|
|
trace
|
|
traceIf
|
|
traceVal
|
|
traceValFn
|
|
traceSeq
|
|
traceSeqN
|
|
traceValSeq
|
|
traceValSeqFn
|
|
traceValSeqN
|
|
traceValSeqNFn
|
|
traceFnSeqN
|
|
addErrorContext
|
|
unsafeGetAttrPos
|
|
runTests
|
|
testAllTrue
|
|
;
|
|
inherit (self.misc)
|
|
maybeEnv
|
|
defaultMergeArg
|
|
defaultMerge
|
|
foldArgs
|
|
maybeAttrNullable
|
|
maybeAttr
|
|
ifEnable
|
|
checkFlag
|
|
getValue
|
|
checkReqs
|
|
uniqList
|
|
uniqListExt
|
|
condConcat
|
|
lazyGenericClosure
|
|
innerModifySumArgs
|
|
modifySumArgs
|
|
innerClosePropagation
|
|
closePropagation
|
|
nvs
|
|
setAttr
|
|
setAttrMerge
|
|
mergeAttrsWithFunc
|
|
mergeAttrsConcatenateValues
|
|
mergeAttrsNoOverride
|
|
mergeAttrByFunc
|
|
mergeAttrsByFuncDefaults
|
|
mergeAttrsByFuncDefaultsClean
|
|
mergeAttrBy
|
|
fakeHash
|
|
fakeSha256
|
|
fakeSha512
|
|
nixType
|
|
imap
|
|
;
|
|
inherit (self.versions)
|
|
splitVersion
|
|
;
|
|
inherit (self.network.ipv6)
|
|
mkEUI64Suffix
|
|
;
|
|
}
|
|
);
|
|
in
|
|
lib
|