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

111 lines
3.0 KiB
Nix

{ debug, intrinsics, list, number, set, string, type, ... } @ libs:
let
exists#: path -> bool
= intrinsics.pathExists;
fetchGit#: { ... } -> path
= intrinsics.fetchGit;
fetchMercurial#: { ... } -> path
= intrinsics.fetchMercurial;
fetchTarball#: { ... } -> path
= intrinsics.fetchTarball;
fetchURL#: string | { url: string, sha256: string } -> path
= intrinsics.fetchurl;
filterSource#: (path -> string -> bool) -> path -> path
= intrinsics.filterSource;
find
= intrinsics.findFile;
from#: path | { path: path, name: string?, filter: F?, recursive: bool = true, sha256: string? } | ToString -> path
= this:
if isInstanceOf this
then
this
else if set.isInstanceOf this
&& this ? path
&& intrinsics ? path
then
intrinsics.path this
else
./${string this};
fromSet#: string -> (string -> T -> string) -> { string -> T } -> path
= fileName:
converter:
{ ... } @ dictionary:
toFile fileName ( string.concat ( set.values ( set.map converter dictionary ) ) );
getBaseName#: path -> string
= intrinsics.baseNameOf;
getDirectory#: path -> string
= intrinsics.dirOf;
getPlaceholder#: string -> string
= intrinsics.placeholder;
hash#: string -> path -> string
= intrinsics.hashFile;
import#: path -> any
= fileName:
intrinsics.scopedImport
(intrinsics.import ./scope.nix libs fileName)
fileName;
import' = intrinsics.import;
importScoped#: path -> { ... } -> any
= { ... } @ scope:
fileName:
intrinsics.scopedImport
((intrinsics.import ./scope.nix libs fileName) // scope)
fileName;
isInstanceOf = intrinsics.isPath or (value: type.getPrimitive value == "path");
nixPaths#: [ { path: string, prefix: string } ]?
= intrinsics.nixPath or null;
orNull
= value:
isInstanceOf value || value == null;
readDirectory#: path -> { string -> string }
= intrinsics.readDir;
readFile#: path -> string
= intrinsics.readFile;
storeDirectory#: string?
= intrinsics.storeDir or null;
storePath#: path -> string
= intrinsics.storePath;
toFile#: string -> string -> path
= intrinsics.toFile;
toStore#: path -> string
= file:
if isInstanceOf file
then
"${file}"
else
debug.panic "toStore" "Path expected!";
in
type "path"
{
isPrimitive = true;
inherit(intrinsics) path;
inherit getBaseName getDirectory exists fetchGit fetchTarball fetchURL filterSource find from fromSet getPlaceholder hash import
import' importScoped isInstanceOf nixPaths orNull readDirectory readFile storeDirectory storePath toFile toStore;
}