mirror of
https://github.com/nix-community/dream2nix.git
synced 2024-12-23 14:31:55 +03:00
75 lines
2.3 KiB
Nix
75 lines
2.3 KiB
Nix
# This is currently only used for legacy modules ported to v1.
|
|
# The dream-lock concept might be deprecated together with this module at some
|
|
# point.
|
|
{lib, ...}: let
|
|
l = builtins // lib;
|
|
|
|
fetchSource = {
|
|
source,
|
|
extract ? false,
|
|
fetchers,
|
|
}: let
|
|
fetcher = fetchers."${source.type}";
|
|
fetcherArgs = l.removeAttrs source ["dir" "hash" "type"];
|
|
fetcherOutputs = fetcher.outputs fetcherArgs;
|
|
maybeArchive = fetcherOutputs.fetched (source.hash or null);
|
|
in
|
|
if source ? dir
|
|
then "${maybeArchive}/${source.dir}"
|
|
else maybeArchive;
|
|
|
|
fetchDreamLockSources = {
|
|
# sources attrset from dream lock
|
|
defaultPackageName,
|
|
defaultPackageVersion,
|
|
sources,
|
|
fetchers,
|
|
sourceRoot ? null,
|
|
...
|
|
}: let
|
|
l = lib // builtins;
|
|
|
|
fetchedSources =
|
|
l.mapAttrs
|
|
(name: versions:
|
|
l.mapAttrs
|
|
(version: source:
|
|
if source.type == "unknown"
|
|
then "unknown"
|
|
else if source.type == "path"
|
|
then let
|
|
path =
|
|
if l.isStorePath (l.concatStringsSep "/" (l.take 4 (l.splitString "/" source.path)))
|
|
then source.path
|
|
else if name == source.rootName && version == source.rootVersion
|
|
then throw "source for ${name}@${version} is referencing itself"
|
|
else if source.rootName != null && source.rootVersion != null
|
|
then "${fetchedSources."${source.rootName}"."${source.rootVersion}"}/${source.path}"
|
|
else if sourceRoot != null
|
|
then "${sourceRoot}/${source.path}"
|
|
else throw "${name}-${version}: cannot determine path source";
|
|
in
|
|
l.path {
|
|
inherit path;
|
|
name = l.strings.sanitizeDerivationName "${name}-${version}-source";
|
|
}
|
|
else if fetchers ? "${source.type}"
|
|
then
|
|
fetchSource {
|
|
inherit fetchers;
|
|
source =
|
|
source
|
|
// {
|
|
pname = source.pname or name;
|
|
version = source.version or version;
|
|
};
|
|
}
|
|
else throw "unsupported source type '${source.type}'")
|
|
versions)
|
|
sources;
|
|
# attrset: pname -> path of downloaded source
|
|
in
|
|
fetchedSources;
|
|
in
|
|
fetchDreamLockSources
|