Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Convert libs to a fixed-point #27797

Merged
merged 1 commit into from
Sep 19, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
8 changes: 4 additions & 4 deletions lib/attrsets.nix
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
{ lib }:
# Operations on attribute sets.

let
inherit (builtins) head tail length;
inherit (import ./trivial.nix) and or;
inherit (import ./default.nix) fold;
inherit (import ./strings.nix) concatStringsSep;
inherit (import ./lists.nix) concatMap concatLists all deepSeqList;
inherit (lib.trivial) and or;
inherit (lib.strings) concatStringsSep;
inherit (lib.lists) fold concatMap concatLists all deepSeqList;
in

rec {
Expand Down
2 changes: 1 addition & 1 deletion lib/customisation.nix
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{ lib }:
let

lib = import ./default.nix;
inherit (builtins) attrNames isFunction;

in
Expand Down
4 changes: 3 additions & 1 deletion lib/debug.nix
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
let lib = import ./default.nix;
{ lib }:

let

inherit (builtins) trace attrNamesToStr isAttrs isFunction isList isInt
isString isBool head substring attrNames;
Expand Down
173 changes: 121 additions & 52 deletions lib/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -5,58 +5,127 @@
*/
let

# often used, or depending on very little
trivial = import ./trivial.nix;
fixedPoints = import ./fixed-points.nix;

# datatypes
attrsets = import ./attrsets.nix;
lists = import ./lists.nix;
strings = import ./strings.nix;
stringsWithDeps = import ./strings-with-deps.nix;

# packaging
customisation = import ./customisation.nix;
maintainers = import ./maintainers.nix;
meta = import ./meta.nix;
sources = import ./sources.nix;

# module system
modules = import ./modules.nix;
options = import ./options.nix;
types = import ./types.nix;

# constants
licenses = import ./licenses.nix;
systems = import ./systems;

# misc
debug = import ./debug.nix;
generators = import ./generators.nix;
misc = import ./deprecated.nix;

# domain-specific
sandbox = import ./sandbox.nix;
fetchers = import ./fetchers.nix;

# Eval-time filesystem handling
filesystem = import ./filesystem.nix;

in
{ inherit trivial fixedPoints
attrsets lists strings stringsWithDeps
customisation maintainers meta sources
modules options types
licenses systems
debug generators misc
sandbox fetchers filesystem;
callLibs = file: import file { inherit lib; };

lib = rec {

# 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;
maintainers = callLibs ./maintainers.nix;
meta = callLibs ./meta.nix;
sources = callLibs ./sources.nix;


# module system
modules = callLibs ./modules.nix;
options = callLibs ./options.nix;
types = callLibs ./types.nix;

# constants
licenses = callLibs ./licenses.nix;
systems = callLibs ./systems;

# misc
debug = callLibs ./debug.nix;

generators = callLibs ./generators.nix;
misc = callLibs ./deprecated.nix;
# domain-specific
sandbox = callLibs ./sandbox.nix;
fetchers = callLibs ./fetchers.nix;

# Eval-time filesystem handling
filesystem = callLibs ./filesystem.nix;

# back-compat aliases
platforms = systems.doubles;
}
# !!! don't include everything at top-level; perhaps only the most
# commonly used functions.
// trivial // fixedPoints
// lists // strings // stringsWithDeps // attrsets // sources
// options // types // meta // debug // misc // modules
// customisation

inherit (builtins) add addErrorContext attrNames
concatLists deepSeq elem elemAt filter genericClosure genList
getAttr hasAttr head isAttrs isBool isFunction isInt isList
isString length lessThan listToAttrs pathExists readFile
replaceStrings seq stringLength sub substring tail;
inherit (trivial) id const concat or and boolToString mergeAttrs
flip mapNullable inNixShell min max importJSON warn info
nixpkgsVersion mod;

inherit (fixedPoints) fix fix' extends composeExtensions
makeExtensible makeExtensibleWithCustomName;
inherit (attrsets) attrByPath hasAttrByPath setAttrByPath
getAttrFromPath attrVals attrValues catAttrs filterAttrs
filterAttrsRecursive foldAttrs collect nameValuePair mapAttrs
mapAttrs' mapAttrsToList mapAttrsRecursive mapAttrsRecursiveCond
genAttrs isDerivation toDerivation optionalAttrs
zipAttrsWithNames zipAttrsWith zipAttrs recursiveUpdateUntil
recursiveUpdate matchAttrs overrideExisting getOutput getBin
getLib getDev chooseDevOutputs zipWithNames zip;
inherit (lists) singleton foldr fold foldl foldl' imap0 imap1
concatMap flatten remove findSingle findFirst any all count
optional optionals toList range partition zipListsWith zipLists
reverseList listDfs toposort sort take drop sublist last init
crossLists unique intersectLists subtractLists
mutuallyExclusive;
inherit (strings) concatStrings concatMapStrings concatImapStrings
intersperse concatStringsSep concatMapStringsSep
concatImapStringsSep makeSearchPath makeSearchPathOutput
makeLibraryPath makeBinPath makePerlPath optionalString
hasPrefix hasSuffix stringToCharacters stringAsChars escape
escapeShellArg escapeShellArgs replaceChars lowerChars upperChars
toLower toUpper addContextFrom splitString removePrefix
removeSuffix versionOlder versionAtLeast getVersion nameFromURL
enableFeature fixedWidthString fixedWidthNumber isStorePath
toInt readPathsFromFile fileContents;
inherit (stringsWithDeps) textClosureList textClosureMap
noDepEntry fullDepEntry packEntry stringAfter;
inherit (customisation) overrideDerivation makeOverridable
callPackageWith callPackagesWith addPassthru hydraJob makeScope;
inherit (meta) addMetaAttrs dontDistribute setName updateName
appendToName mapDerivationAttrset lowPrio lowPrioSet hiPrio
hiPrioSet;
inherit (sources) pathType pathIsDirectory cleanSourceFilter
cleanSource sourceByRegex sourceFilesBySuffices
commitIdFromGitRepo;
inherit (modules) evalModules closeModules unifyModuleSyntax
applyIfFunction unpackSubmodule packSubmodule mergeModules
mergeModules' mergeOptionDecls evalOptionValue mergeDefinitions
pushDownProperties dischargeProperties filterOverrides
sortProperties fixupOptionType mkIf mkAssert mkMerge mkOverride
mkOptionDefault mkDefault mkForce mkVMOverride mkStrict
mkFixStrictness mkOrder mkBefore mkAfter mkAliasDefinitions
mkAliasAndWrapDefinitions fixMergeModules mkRemovedOptionModule
mkRenamedOptionModule mkMergedOptionModule mkChangedOptionModule
mkAliasOptionModule doRename filterModules;
inherit (options) isOption mkEnableOption mkSinkUndeclaredOptions
mergeDefaultOption mergeOneOption mergeEqualOption getValues
getFiles optionAttrSetToDocList optionAttrSetToDocList'
scrubOptionValue literalExample showOption showFiles
unknownModule mkOption;
inherit (types) isType setType defaultTypeMerge defaultFunctor
isOptionType mkOptionType;
inherit (debug) addErrorContextToAttrs traceIf traceVal
traceXMLVal traceXMLValMarked traceSeq traceSeqN traceValSeq
traceValSeqN traceShowVal traceShowValMarked
showVal traceCall traceCall2 traceCall3 traceValIfNot runTests
testAllTrue strict traceCallXml attrNamesToStr;
inherit (misc) maybeEnv defaultMergeArg defaultMerge foldArgs
defaultOverridableDelayableArgs composedArgsAndFun
maybeAttrNullable maybeAttr ifEnable checkFlag getValue
checkReqs uniqList uniqListExt condConcat lazyGenericClosure
innerModifySumArgs modifySumArgs innerClosePropagation
closePropagation mapAttrsFlatten nvs setAttr setAttrMerge
mergeAttrsWithFunc mergeAttrsConcatenateValues
mergeAttrsNoOverride mergeAttrByFunc mergeAttrsByFuncDefaults
mergeAttrsByFuncDefaultsClean mergeAttrBy
prepareDerivationArgs nixType imap overridableDelayableArgs;
};
in lib
9 changes: 5 additions & 4 deletions lib/deprecated.nix
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
let lib = import ./default.nix;
{ lib }:
let
inherit (builtins) isFunction head tail isList isAttrs isInt attrNames;

in

with import ./lists.nix;
with import ./attrsets.nix;
with import ./strings.nix;
with lib.lists;
with lib.attrsets;
with lib.strings;

rec {

Expand Down
1 change: 1 addition & 0 deletions lib/fetchers.nix
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# snippets that can be shared by multiple fetchers (pkgs/build-support)
{ lib }:
{

proxyImpureEnvVars = [
Expand Down
1 change: 1 addition & 0 deletions lib/filesystem.nix
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
{ lib }:
{ # haskellPathsInDir : Path -> Map String Path
# A map of all haskell packages defined in the given path,
# identified by having a cabal file with the same name as the
Expand Down
1 change: 1 addition & 0 deletions lib/fixed-points.nix
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
{ ... }:
rec {
# Compute the fixed point of the given function `f`, which is usually an
# attribute set that expects its final, non-recursive representation as an
Expand Down
7 changes: 4 additions & 3 deletions lib/generators.nix
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,11 @@
* Tests can be found in ./tests.nix
* Documentation in the manual, #sec-generators
*/
with import ./trivial.nix;
{ lib }:
with (lib).trivial;
let
libStr = import ./strings.nix;
libAttr = import ./attrsets.nix;
libStr = lib.strings;
libAttr = lib.attrsets;

flipMapAttrs = flip libAttr.mapAttrs;
in
Expand Down
5 changes: 2 additions & 3 deletions lib/licenses.nix
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
{ lib }:
let

lib = import ./default.nix;

spdx = lic: lic // {
url = "http://spdx.org/licenses/${lic.spdxId}";
};
Expand Down Expand Up @@ -408,7 +407,7 @@ lib.mapAttrs (n: v: v // { shortName = n; }) rec {
url = "https://raw.githubusercontent.com/raboof/notion/master/LICENSE";
fullName = "Notion modified LGPL";
};

ofl = spdx {
spdxId = "OFL-1.1";
fullName = "SIL Open Font License 1.1";
Expand Down
4 changes: 2 additions & 2 deletions lib/lists.nix
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# General list operations.

with import ./trivial.nix;
{ lib }:
with lib.trivial;

rec {

Expand Down
1 change: 1 addition & 0 deletions lib/maintainers.nix
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
{ ...}:
/* List of NixOS maintainers. The format is:

handle = "Real Name <address@example.org>";
Expand Down
3 changes: 1 addition & 2 deletions lib/meta.nix
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
/* Some functions for manipulating meta attributes, as well as the
name attribute. */

let lib = import ./default.nix;
in
{ lib }:

rec {

Expand Down
16 changes: 9 additions & 7 deletions lib/modules.nix
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
with import ./lists.nix;
with import ./strings.nix;
with import ./trivial.nix;
with import ./attrsets.nix;
with import ./options.nix;
with import ./debug.nix;
with import ./types.nix;
{ lib }:

with lib.lists;
with lib.strings;
with lib.trivial;
with lib.attrsets;
with lib.options;
with lib.debug;
with lib.types;

rec {

Expand Down
11 changes: 5 additions & 6 deletions lib/options.nix
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
# Nixpkgs/NixOS option handling.
{ lib }:

let lib = import ./default.nix; in

with import ./trivial.nix;
with import ./lists.nix;
with import ./attrsets.nix;
with import ./strings.nix;
with lib.trivial;
with lib.lists;
with lib.attrsets;
with lib.strings;

rec {

Expand Down
3 changes: 2 additions & 1 deletion lib/sandbox.nix
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
with import ./strings.nix;
{ lib }:
with lib.strings;

/* Helpers for creating lisp S-exprs for the Apple sandbox

Expand Down
3 changes: 1 addition & 2 deletions lib/sources.nix
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
# Functions for copying sources to the Nix store.

let lib = import ./default.nix; in
{ lib }:

rec {

Expand Down
7 changes: 4 additions & 3 deletions lib/strings-with-deps.nix
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
{ lib }:
/*
Usage:

Expand Down Expand Up @@ -40,9 +41,9 @@ Usage:
[1] maybe this behaviour should be removed to keep things simple (?)
*/

with import ./lists.nix;
with import ./attrsets.nix;
with import ./strings.nix;
with lib.lists;
with lib.attrsets;
with lib.strings;

rec {

Expand Down
4 changes: 2 additions & 2 deletions lib/strings.nix
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/* String manipulation functions. */

let lib = import ./default.nix;
{ lib }:
let

inherit (builtins) length;

Expand Down
13 changes: 7 additions & 6 deletions lib/systems/default.nix
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
let inherit (import ../attrsets.nix) mapAttrs; in
{ lib }:
let inherit (lib.attrsets) mapAttrs; in

rec {
doubles = import ./doubles.nix;
parse = import ./parse.nix;
inspect = import ./inspect.nix;
platforms = import ./platforms.nix;
examples = import ./examples.nix;
doubles = import ./doubles.nix { inherit lib; };
parse = import ./parse.nix { inherit lib; };
inspect = import ./inspect.nix { inherit lib; };
platforms = import ./platforms.nix { inherit lib; };
examples = import ./examples.nix { inherit lib; };

# Elaborate a `localSystem` or `crossSystem` so that it contains everything
# necessary.
Expand Down